Skip to content

Commit c895d7f

Browse files
authored
feat: request vars, bru.getRequestVar function (#2541)
1 parent 45ff36d commit c895d7f

File tree

9 files changed

+35
-26
lines changed

9 files changed

+35
-26
lines changed

packages/bruno-electron/src/ipc/network/index.js

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -316,23 +316,14 @@ const registerNetworkIpc = (mainWindow) => {
316316
const preRequestVars = get(request, 'vars.req', []);
317317
if (preRequestVars?.length) {
318318
const varsRuntime = new VarsRuntime();
319-
const result = varsRuntime.runPreRequestVars(
319+
varsRuntime.runPreRequestVars(
320320
preRequestVars,
321321
request,
322322
envVars,
323323
collectionVariables,
324324
collectionPath,
325325
processEnvVars
326326
);
327-
328-
if (result) {
329-
mainWindow.webContents.send('main:script-environment-update', {
330-
envVariables: result.envVariables,
331-
collectionVariables: result.collectionVariables,
332-
requestUid,
333-
collectionUid
334-
});
335-
}
336327
}
337328

338329
// run pre-request script

packages/bruno-electron/src/ipc/network/interpolate-vars.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const getContentType = (headers = {}) => {
1313
};
1414

1515
const interpolateVars = (request, envVars = {}, collectionVariables = {}, processEnvVars = {}) => {
16+
const requestVariables = request?.requestVariables || {};
1617
// we clone envVars because we don't want to modify the original object
1718
envVars = cloneDeep(envVars);
1819

@@ -36,6 +37,7 @@ const interpolateVars = (request, envVars = {}, collectionVariables = {}, proces
3637
// collectionVariables take precedence over envVars
3738
const combinedVars = {
3839
...envVars,
40+
...requestVariables,
3941
...collectionVariables,
4042
process: {
4143
env: {

packages/bruno-electron/src/ipc/network/prepare-request.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ const mergeFolderLevelVars = (request, requestTreePath) => {
122122
const mergeFolderLevelScripts = (request, requestTreePath) => {
123123
let folderCombinedPreReqScript = [];
124124
let folderCombinedPostResScript = [];
125-
let folderCombinedTests = '';
125+
let folderCombinedTests = [];
126126
for (let i of requestTreePath) {
127127
if (i.type === 'folder') {
128128
let preReqScript = get(i, 'root.request.script.req', '');
@@ -136,8 +136,8 @@ const mergeFolderLevelScripts = (request, requestTreePath) => {
136136
}
137137

138138
let tests = get(i, 'root.request.tests', '');
139-
if (tests?.trim?.() !== '') {
140-
folderCombinedTests = `${folderCombinedTests} \n ${tests} \n`;
139+
if (tests && tests?.trim?.() !== '') {
140+
folderCombinedTests.push(tests);
141141
}
142142
}
143143
}
@@ -151,7 +151,7 @@ const mergeFolderLevelScripts = (request, requestTreePath) => {
151151
}
152152

153153
if (folderCombinedTests.length) {
154-
request.tests = `${request?.tests} \n ${folderCombinedTests}`;
154+
request.tests = compact([request?.tests || '', ...folderCombinedTests.reverse()]).join(os.EOL);
155155
}
156156
};
157157

packages/bruno-js/src/bru.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ const { interpolate } = require('@usebruno/common');
44
const variableNameRegex = /^[\w-.]*$/;
55

66
class Bru {
7-
constructor(envVariables, collectionVariables, processEnvVars, collectionPath) {
7+
constructor(envVariables, collectionVariables, processEnvVars, collectionPath, requestVariables) {
88
this.envVariables = envVariables || {};
99
this.collectionVariables = collectionVariables || {};
1010
this.processEnvVars = cloneDeep(processEnvVars || {});
11+
this.requestVariables = requestVariables || {};
1112
this.collectionPath = collectionPath;
1213
}
1314

@@ -18,6 +19,7 @@ class Bru {
1819

1920
const combinedVars = {
2021
...this.envVariables,
22+
...this.requestVariables,
2123
...this.collectionVariables,
2224
process: {
2325
env: {
@@ -79,6 +81,10 @@ class Bru {
7981
return this._interpolate(this.collectionVariables[key]);
8082
}
8183

84+
getRequestVar(key) {
85+
return this._interpolate(this.requestVariables[key]);
86+
}
87+
8288
setNextRequest(nextRequest) {
8389
this.nextRequest = nextRequest;
8490
}

packages/bruno-js/src/interpolate-string.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
const { interpolate } = require('@usebruno/common');
22

3-
const interpolateString = (str, { envVariables = {}, collectionVariables = {}, processEnvVars = {} }) => {
3+
const interpolateString = (
4+
str,
5+
{ envVariables = {}, collectionVariables = {}, processEnvVars = {}, requestVariables = {} }
6+
) => {
47
if (!str || !str.length || typeof str !== 'string') {
58
return str;
69
}
710

811
const combinedVars = {
912
...envVariables,
13+
...requestVariables,
1014
...collectionVariables,
1115
process: {
1216
env: {

packages/bruno-js/src/runtime/assert-runtime.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ const evaluateRhsOperand = (rhsOperand, operator, context) => {
167167
}
168168

169169
const interpolationContext = {
170+
requestVariables: context.bru.requestVariables,
170171
collectionVariables: context.bru.collectionVariables,
171172
envVariables: context.bru.envVariables,
172173
processEnvVars: context.bru.processEnvVars
@@ -204,12 +205,13 @@ const evaluateRhsOperand = (rhsOperand, operator, context) => {
204205

205206
class AssertRuntime {
206207
runAssertions(assertions, request, response, envVariables, collectionVariables, processEnvVars) {
208+
const requestVariables = request?.requestVariables || {};
207209
const enabledAssertions = _.filter(assertions, (a) => a.enabled);
208210
if (!enabledAssertions.length) {
209211
return [];
210212
}
211213

212-
const bru = new Bru(envVariables, collectionVariables, processEnvVars);
214+
const bru = new Bru(envVariables, collectionVariables, processEnvVars, undefined, requestVariables);
213215
const req = new BrunoRequest(request);
214216
const res = createResponseParser(response);
215217

@@ -221,6 +223,7 @@ class AssertRuntime {
221223

222224
const context = {
223225
...envVariables,
226+
...requestVariables,
224227
...collectionVariables,
225228
...processEnvVars,
226229
...bruContext

packages/bruno-js/src/runtime/script-runtime.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ class ScriptRuntime {
4444
processEnvVars,
4545
scriptingConfig
4646
) {
47-
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath);
47+
const requestVariables = request?.requestVariables || {};
48+
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath, requestVariables);
4849
const req = new BrunoRequest(request);
4950
const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
5051
const moduleWhitelist = get(scriptingConfig, 'moduleWhitelist', []);
@@ -141,7 +142,8 @@ class ScriptRuntime {
141142
processEnvVars,
142143
scriptingConfig
143144
) {
144-
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath);
145+
const requestVariables = request?.requestVariables || {};
146+
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath, requestVariables);
145147
const req = new BrunoRequest(request);
146148
const res = new BrunoResponse(response);
147149
const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);

packages/bruno-js/src/runtime/test-runtime.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ class TestRuntime {
4545
processEnvVars,
4646
scriptingConfig
4747
) {
48-
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath);
48+
const requestVariables = request?.requestVariables || {};
49+
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath, requestVariables);
4950
const req = new BrunoRequest(request);
5051
const res = new BrunoResponse(response);
5152
const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);

packages/bruno-js/src/runtime/vars-runtime.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ const { evaluateJsTemplateLiteral, evaluateJsExpression, createResponseParser }
55

66
class VarsRuntime {
77
runPreRequestVars(vars, request, envVariables, collectionVariables, collectionPath, processEnvVars) {
8+
if (!request?.requestVariables) {
9+
request.requestVariables = {};
10+
}
811
const enabledVars = _.filter(vars, (v) => v.enabled);
912
if (!enabledVars.length) {
1013
return;
@@ -26,21 +29,18 @@ class VarsRuntime {
2629

2730
_.each(enabledVars, (v) => {
2831
const value = evaluateJsTemplateLiteral(v.value, context);
29-
bru.setVar(v.name, value);
32+
request?.requestVariables && (request.requestVariables[v.name] = value);
3033
});
31-
32-
return {
33-
collectionVariables
34-
};
3534
}
3635

3736
runPostResponseVars(vars, request, response, envVariables, collectionVariables, collectionPath, processEnvVars) {
37+
const requestVariables = request?.requestVariables || {};
3838
const enabledVars = _.filter(vars, (v) => v.enabled);
3939
if (!enabledVars.length) {
4040
return;
4141
}
4242

43-
const bru = new Bru(envVariables, collectionVariables, processEnvVars);
43+
const bru = new Bru(envVariables, collectionVariables, processEnvVars, undefined, requestVariables);
4444
const req = new BrunoRequest(request);
4545
const res = createResponseParser(response);
4646

0 commit comments

Comments
 (0)