mirror of
https://github.com/usebruno/bruno.git
synced 2025-06-20 03:38:17 +02:00
feat: request vars, bru.getRequestVar function (#2541)
This commit is contained in:
parent
45ff36d394
commit
c895d7f357
@ -316,7 +316,7 @@ const registerNetworkIpc = (mainWindow) => {
|
|||||||
const preRequestVars = get(request, 'vars.req', []);
|
const preRequestVars = get(request, 'vars.req', []);
|
||||||
if (preRequestVars?.length) {
|
if (preRequestVars?.length) {
|
||||||
const varsRuntime = new VarsRuntime();
|
const varsRuntime = new VarsRuntime();
|
||||||
const result = varsRuntime.runPreRequestVars(
|
varsRuntime.runPreRequestVars(
|
||||||
preRequestVars,
|
preRequestVars,
|
||||||
request,
|
request,
|
||||||
envVars,
|
envVars,
|
||||||
@ -324,15 +324,6 @@ const registerNetworkIpc = (mainWindow) => {
|
|||||||
collectionPath,
|
collectionPath,
|
||||||
processEnvVars
|
processEnvVars
|
||||||
);
|
);
|
||||||
|
|
||||||
if (result) {
|
|
||||||
mainWindow.webContents.send('main:script-environment-update', {
|
|
||||||
envVariables: result.envVariables,
|
|
||||||
collectionVariables: result.collectionVariables,
|
|
||||||
requestUid,
|
|
||||||
collectionUid
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// run pre-request script
|
// run pre-request script
|
||||||
|
@ -13,6 +13,7 @@ const getContentType = (headers = {}) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const interpolateVars = (request, envVars = {}, collectionVariables = {}, processEnvVars = {}) => {
|
const interpolateVars = (request, envVars = {}, collectionVariables = {}, processEnvVars = {}) => {
|
||||||
|
const requestVariables = request?.requestVariables || {};
|
||||||
// we clone envVars because we don't want to modify the original object
|
// we clone envVars because we don't want to modify the original object
|
||||||
envVars = cloneDeep(envVars);
|
envVars = cloneDeep(envVars);
|
||||||
|
|
||||||
@ -36,6 +37,7 @@ const interpolateVars = (request, envVars = {}, collectionVariables = {}, proces
|
|||||||
// collectionVariables take precedence over envVars
|
// collectionVariables take precedence over envVars
|
||||||
const combinedVars = {
|
const combinedVars = {
|
||||||
...envVars,
|
...envVars,
|
||||||
|
...requestVariables,
|
||||||
...collectionVariables,
|
...collectionVariables,
|
||||||
process: {
|
process: {
|
||||||
env: {
|
env: {
|
||||||
|
@ -122,7 +122,7 @@ const mergeFolderLevelVars = (request, requestTreePath) => {
|
|||||||
const mergeFolderLevelScripts = (request, requestTreePath) => {
|
const mergeFolderLevelScripts = (request, requestTreePath) => {
|
||||||
let folderCombinedPreReqScript = [];
|
let folderCombinedPreReqScript = [];
|
||||||
let folderCombinedPostResScript = [];
|
let folderCombinedPostResScript = [];
|
||||||
let folderCombinedTests = '';
|
let folderCombinedTests = [];
|
||||||
for (let i of requestTreePath) {
|
for (let i of requestTreePath) {
|
||||||
if (i.type === 'folder') {
|
if (i.type === 'folder') {
|
||||||
let preReqScript = get(i, 'root.request.script.req', '');
|
let preReqScript = get(i, 'root.request.script.req', '');
|
||||||
@ -136,8 +136,8 @@ const mergeFolderLevelScripts = (request, requestTreePath) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let tests = get(i, 'root.request.tests', '');
|
let tests = get(i, 'root.request.tests', '');
|
||||||
if (tests?.trim?.() !== '') {
|
if (tests && tests?.trim?.() !== '') {
|
||||||
folderCombinedTests = `${folderCombinedTests} \n ${tests} \n`;
|
folderCombinedTests.push(tests);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -151,7 +151,7 @@ const mergeFolderLevelScripts = (request, requestTreePath) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (folderCombinedTests.length) {
|
if (folderCombinedTests.length) {
|
||||||
request.tests = `${request?.tests} \n ${folderCombinedTests}`;
|
request.tests = compact([request?.tests || '', ...folderCombinedTests.reverse()]).join(os.EOL);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -4,10 +4,11 @@ const { interpolate } = require('@usebruno/common');
|
|||||||
const variableNameRegex = /^[\w-.]*$/;
|
const variableNameRegex = /^[\w-.]*$/;
|
||||||
|
|
||||||
class Bru {
|
class Bru {
|
||||||
constructor(envVariables, collectionVariables, processEnvVars, collectionPath) {
|
constructor(envVariables, collectionVariables, processEnvVars, collectionPath, requestVariables) {
|
||||||
this.envVariables = envVariables || {};
|
this.envVariables = envVariables || {};
|
||||||
this.collectionVariables = collectionVariables || {};
|
this.collectionVariables = collectionVariables || {};
|
||||||
this.processEnvVars = cloneDeep(processEnvVars || {});
|
this.processEnvVars = cloneDeep(processEnvVars || {});
|
||||||
|
this.requestVariables = requestVariables || {};
|
||||||
this.collectionPath = collectionPath;
|
this.collectionPath = collectionPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -18,6 +19,7 @@ class Bru {
|
|||||||
|
|
||||||
const combinedVars = {
|
const combinedVars = {
|
||||||
...this.envVariables,
|
...this.envVariables,
|
||||||
|
...this.requestVariables,
|
||||||
...this.collectionVariables,
|
...this.collectionVariables,
|
||||||
process: {
|
process: {
|
||||||
env: {
|
env: {
|
||||||
@ -79,6 +81,10 @@ class Bru {
|
|||||||
return this._interpolate(this.collectionVariables[key]);
|
return this._interpolate(this.collectionVariables[key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getRequestVar(key) {
|
||||||
|
return this._interpolate(this.requestVariables[key]);
|
||||||
|
}
|
||||||
|
|
||||||
setNextRequest(nextRequest) {
|
setNextRequest(nextRequest) {
|
||||||
this.nextRequest = nextRequest;
|
this.nextRequest = nextRequest;
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
const { interpolate } = require('@usebruno/common');
|
const { interpolate } = require('@usebruno/common');
|
||||||
|
|
||||||
const interpolateString = (str, { envVariables = {}, collectionVariables = {}, processEnvVars = {} }) => {
|
const interpolateString = (
|
||||||
|
str,
|
||||||
|
{ envVariables = {}, collectionVariables = {}, processEnvVars = {}, requestVariables = {} }
|
||||||
|
) => {
|
||||||
if (!str || !str.length || typeof str !== 'string') {
|
if (!str || !str.length || typeof str !== 'string') {
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
const combinedVars = {
|
const combinedVars = {
|
||||||
...envVariables,
|
...envVariables,
|
||||||
|
...requestVariables,
|
||||||
...collectionVariables,
|
...collectionVariables,
|
||||||
process: {
|
process: {
|
||||||
env: {
|
env: {
|
||||||
|
@ -167,6 +167,7 @@ const evaluateRhsOperand = (rhsOperand, operator, context) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const interpolationContext = {
|
const interpolationContext = {
|
||||||
|
requestVariables: context.bru.requestVariables,
|
||||||
collectionVariables: context.bru.collectionVariables,
|
collectionVariables: context.bru.collectionVariables,
|
||||||
envVariables: context.bru.envVariables,
|
envVariables: context.bru.envVariables,
|
||||||
processEnvVars: context.bru.processEnvVars
|
processEnvVars: context.bru.processEnvVars
|
||||||
@ -204,12 +205,13 @@ const evaluateRhsOperand = (rhsOperand, operator, context) => {
|
|||||||
|
|
||||||
class AssertRuntime {
|
class AssertRuntime {
|
||||||
runAssertions(assertions, request, response, envVariables, collectionVariables, processEnvVars) {
|
runAssertions(assertions, request, response, envVariables, collectionVariables, processEnvVars) {
|
||||||
|
const requestVariables = request?.requestVariables || {};
|
||||||
const enabledAssertions = _.filter(assertions, (a) => a.enabled);
|
const enabledAssertions = _.filter(assertions, (a) => a.enabled);
|
||||||
if (!enabledAssertions.length) {
|
if (!enabledAssertions.length) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
const bru = new Bru(envVariables, collectionVariables, processEnvVars);
|
const bru = new Bru(envVariables, collectionVariables, processEnvVars, undefined, requestVariables);
|
||||||
const req = new BrunoRequest(request);
|
const req = new BrunoRequest(request);
|
||||||
const res = createResponseParser(response);
|
const res = createResponseParser(response);
|
||||||
|
|
||||||
@ -221,6 +223,7 @@ class AssertRuntime {
|
|||||||
|
|
||||||
const context = {
|
const context = {
|
||||||
...envVariables,
|
...envVariables,
|
||||||
|
...requestVariables,
|
||||||
...collectionVariables,
|
...collectionVariables,
|
||||||
...processEnvVars,
|
...processEnvVars,
|
||||||
...bruContext
|
...bruContext
|
||||||
|
@ -44,7 +44,8 @@ class ScriptRuntime {
|
|||||||
processEnvVars,
|
processEnvVars,
|
||||||
scriptingConfig
|
scriptingConfig
|
||||||
) {
|
) {
|
||||||
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath);
|
const requestVariables = request?.requestVariables || {};
|
||||||
|
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath, requestVariables);
|
||||||
const req = new BrunoRequest(request);
|
const req = new BrunoRequest(request);
|
||||||
const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
|
const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
|
||||||
const moduleWhitelist = get(scriptingConfig, 'moduleWhitelist', []);
|
const moduleWhitelist = get(scriptingConfig, 'moduleWhitelist', []);
|
||||||
@ -141,7 +142,8 @@ class ScriptRuntime {
|
|||||||
processEnvVars,
|
processEnvVars,
|
||||||
scriptingConfig
|
scriptingConfig
|
||||||
) {
|
) {
|
||||||
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath);
|
const requestVariables = request?.requestVariables || {};
|
||||||
|
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath, requestVariables);
|
||||||
const req = new BrunoRequest(request);
|
const req = new BrunoRequest(request);
|
||||||
const res = new BrunoResponse(response);
|
const res = new BrunoResponse(response);
|
||||||
const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
|
const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
|
||||||
|
@ -45,7 +45,8 @@ class TestRuntime {
|
|||||||
processEnvVars,
|
processEnvVars,
|
||||||
scriptingConfig
|
scriptingConfig
|
||||||
) {
|
) {
|
||||||
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath);
|
const requestVariables = request?.requestVariables || {};
|
||||||
|
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath, requestVariables);
|
||||||
const req = new BrunoRequest(request);
|
const req = new BrunoRequest(request);
|
||||||
const res = new BrunoResponse(response);
|
const res = new BrunoResponse(response);
|
||||||
const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
|
const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
|
||||||
|
@ -5,6 +5,9 @@ const { evaluateJsTemplateLiteral, evaluateJsExpression, createResponseParser }
|
|||||||
|
|
||||||
class VarsRuntime {
|
class VarsRuntime {
|
||||||
runPreRequestVars(vars, request, envVariables, collectionVariables, collectionPath, processEnvVars) {
|
runPreRequestVars(vars, request, envVariables, collectionVariables, collectionPath, processEnvVars) {
|
||||||
|
if (!request?.requestVariables) {
|
||||||
|
request.requestVariables = {};
|
||||||
|
}
|
||||||
const enabledVars = _.filter(vars, (v) => v.enabled);
|
const enabledVars = _.filter(vars, (v) => v.enabled);
|
||||||
if (!enabledVars.length) {
|
if (!enabledVars.length) {
|
||||||
return;
|
return;
|
||||||
@ -26,21 +29,18 @@ class VarsRuntime {
|
|||||||
|
|
||||||
_.each(enabledVars, (v) => {
|
_.each(enabledVars, (v) => {
|
||||||
const value = evaluateJsTemplateLiteral(v.value, context);
|
const value = evaluateJsTemplateLiteral(v.value, context);
|
||||||
bru.setVar(v.name, value);
|
request?.requestVariables && (request.requestVariables[v.name] = value);
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
|
||||||
collectionVariables
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
runPostResponseVars(vars, request, response, envVariables, collectionVariables, collectionPath, processEnvVars) {
|
runPostResponseVars(vars, request, response, envVariables, collectionVariables, collectionPath, processEnvVars) {
|
||||||
|
const requestVariables = request?.requestVariables || {};
|
||||||
const enabledVars = _.filter(vars, (v) => v.enabled);
|
const enabledVars = _.filter(vars, (v) => v.enabled);
|
||||||
if (!enabledVars.length) {
|
if (!enabledVars.length) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bru = new Bru(envVariables, collectionVariables, processEnvVars);
|
const bru = new Bru(envVariables, collectionVariables, processEnvVars, undefined, requestVariables);
|
||||||
const req = new BrunoRequest(request);
|
const req = new BrunoRequest(request);
|
||||||
const res = createResponseParser(response);
|
const res = createResponseParser(response);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user