From 416b693afc602fda5aff88adacc58cd4f64535ab Mon Sep 17 00:00:00 2001 From: naman-bruno Date: Mon, 2 Feb 2026 18:57:35 +0530 Subject: [PATCH] fix: YML parsing and stringification to support post-response variables (#7009) --- .../src/formats/yml/parseCollection.ts | 7 ++++++- .../bruno-filestore/src/formats/yml/parseFolder.ts | 7 ++++++- .../src/formats/yml/stringifyCollection.ts | 11 +++++++++++ .../src/formats/yml/stringifyFolder.ts | 11 +++++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/packages/bruno-filestore/src/formats/yml/parseCollection.ts b/packages/bruno-filestore/src/formats/yml/parseCollection.ts index 79ae725bc..27234861c 100644 --- a/packages/bruno-filestore/src/formats/yml/parseCollection.ts +++ b/packages/bruno-filestore/src/formats/yml/parseCollection.ts @@ -4,6 +4,7 @@ import { parseYml } from './utils'; import { toBrunoAuth } from './common/auth'; import { toBrunoHttpHeaders } from './common/headers'; import { toBrunoVariables } from './common/variables'; +import { toBrunoPostResponseVariables } from './common/actions'; import { toBrunoScripts } from './common/scripts'; import { ensureString } from '../../utils'; @@ -174,7 +175,11 @@ const parseCollection = (ymlString: string): ParsedCollection => { // variables const variables = toBrunoVariables(oc.request.variables); - collectionRoot.request.vars = variables; + const postResponseVars = toBrunoPostResponseVariables((oc.request as any).actions); + collectionRoot.request.vars = { + req: variables.req, + res: postResponseVars + }; // scripts const scripts = toBrunoScripts(oc.request.scripts); diff --git a/packages/bruno-filestore/src/formats/yml/parseFolder.ts b/packages/bruno-filestore/src/formats/yml/parseFolder.ts index 4c8323706..d2109dfb2 100644 --- a/packages/bruno-filestore/src/formats/yml/parseFolder.ts +++ b/packages/bruno-filestore/src/formats/yml/parseFolder.ts @@ -4,6 +4,7 @@ import { parseYml } from './utils'; import { toBrunoAuth } from './common/auth'; import { toBrunoHttpHeaders } from './common/headers'; import { toBrunoVariables } from './common/variables'; +import { toBrunoPostResponseVariables } from './common/actions'; import { toBrunoScripts } from './common/scripts'; import { ensureString } from '../../utils'; @@ -52,7 +53,11 @@ const parseFolder = (ymlString: string): FolderRoot => { // variables const variables = toBrunoVariables(ocFolder.request.variables); - folderRoot.request.vars = variables; + const postResponseVars = toBrunoPostResponseVariables((ocFolder.request as any).actions); + folderRoot.request.vars = { + req: variables.req, + res: postResponseVars + }; // scripts const scripts = toBrunoScripts(ocFolder.request.scripts); diff --git a/packages/bruno-filestore/src/formats/yml/stringifyCollection.ts b/packages/bruno-filestore/src/formats/yml/stringifyCollection.ts index 432fba7ed..f4e240a95 100644 --- a/packages/bruno-filestore/src/formats/yml/stringifyCollection.ts +++ b/packages/bruno-filestore/src/formats/yml/stringifyCollection.ts @@ -3,11 +3,13 @@ import type { ProtoFileItem, ProtoFileImportPath } from '@opencollection/types/c import type { HttpRequestHeader } from '@opencollection/types/requests/http'; import type { ClientCertificate, PemCertificate, Pkcs12Certificate } from '@opencollection/types/config/certificates'; import type { Variable } from '@opencollection/types/common/variables'; +import type { Action } from '@opencollection/types/common/actions'; import type { Scripts } from '@opencollection/types/common/scripts'; import { stringifyYml } from './utils'; import { toOpenCollectionAuth } from './common/auth'; import { toOpenCollectionHttpHeaders } from './common/headers'; import { toOpenCollectionVariables } from './common/variables'; +import { toOpenCollectionActions } from './common/actions'; import { toOpenCollectionScripts } from './common/scripts'; import type { Auth } from '@opencollection/types/common/auth'; @@ -39,6 +41,7 @@ const hasRequestDefaults = (collectionRoot: any): boolean => { return Boolean((requestRoot?.headers?.length) || (requestRoot?.vars?.req?.length) + || (requestRoot?.vars?.res?.length) || hasRequestScripts(collectionRoot) || hasRequestAuth(collectionRoot)); }; @@ -178,6 +181,14 @@ const stringifyCollection = (collectionRoot: any, brunoConfig: any): string => { } } + // actions (post-response variables) + if (collectionRoot.request?.vars?.res?.length) { + const ocActions: Action[] | undefined = toOpenCollectionActions(collectionRoot.request?.vars?.res); + if (ocActions) { + (oc.request as any).actions = ocActions; + } + } + // scripts if (hasRequestScripts(collectionRoot)) { const ocScripts: Scripts | undefined = toOpenCollectionScripts(collectionRoot.request); diff --git a/packages/bruno-filestore/src/formats/yml/stringifyFolder.ts b/packages/bruno-filestore/src/formats/yml/stringifyFolder.ts index 493d7ac65..1805c6d8c 100644 --- a/packages/bruno-filestore/src/formats/yml/stringifyFolder.ts +++ b/packages/bruno-filestore/src/formats/yml/stringifyFolder.ts @@ -1,6 +1,7 @@ import type { FolderRoot } from '@usebruno/schema-types/collection/folder'; import type { Folder, FolderInfo } from '@opencollection/types/collection/item'; import type { Variable } from '@opencollection/types/common/variables'; +import type { Action } from '@opencollection/types/common/actions'; import type { Scripts } from '@opencollection/types/common/scripts'; import type { Auth } from '@opencollection/types/common/auth'; import type { HttpRequestHeader } from '@opencollection/types/requests/http'; @@ -8,6 +9,7 @@ import type { RequestDefaults } from '@opencollection/types/common/request-defau import { toOpenCollectionAuth } from './common/auth'; import { toOpenCollectionHttpHeaders } from './common/headers'; import { toOpenCollectionVariables } from './common/variables'; +import { toOpenCollectionActions } from './common/actions'; import { toOpenCollectionScripts } from './common/scripts'; import { stringifyYml } from './utils'; @@ -16,6 +18,7 @@ const hasRequestDefaults = (folderRoot: FolderRoot): boolean => { return Boolean((requestDefaults?.headers?.length) || (requestDefaults?.vars?.req?.length) + || (requestDefaults?.vars?.res?.length) || hasRequestScripts(folderRoot) || hasRequestAuth(folderRoot)); }; @@ -70,6 +73,14 @@ const stringifyFolder = (folderRoot: FolderRoot): string => { } } + // actions (post-response variables) + if (folderRoot.request?.vars?.res?.length) { + const ocActions: Action[] | undefined = toOpenCollectionActions(folderRoot.request?.vars?.res); + if (ocActions) { + (ocFolder.request as any).actions = ocActions; + } + } + // scripts if (hasRequestScripts(folderRoot)) { const ocScripts: Scripts | undefined = toOpenCollectionScripts(folderRoot?.request);