mirror of
https://github.com/usebruno/bruno.git
synced 2026-06-29 23:54:24 +00:00
85 lines
2.7 KiB
JavaScript
85 lines
2.7 KiB
JavaScript
const _ = require('lodash');
|
|
const Bru = require('../bru');
|
|
const BrunoRequest = require('../bruno-request');
|
|
const { evaluateJsExpression, createResponseParser } = require('../utils');
|
|
const { cleanJson } = require('../utils');
|
|
|
|
const { executeQuickJsVm } = require('../sandbox/quickjs');
|
|
|
|
const evaluateJsExpressionBasedOnRuntime = (expr, context, runtime, mode) => {
|
|
if (runtime === 'quickjs') {
|
|
return executeQuickJsVm({
|
|
script: expr,
|
|
context,
|
|
scriptType: 'expression'
|
|
});
|
|
}
|
|
|
|
return evaluateJsExpression(expr, context);
|
|
};
|
|
|
|
class VarsRuntime {
|
|
constructor(props) {
|
|
this.runtime = props?.runtime || 'quickjs';
|
|
this.mode = props?.mode || 'developer';
|
|
}
|
|
|
|
runPostResponseVars(vars, request, response, envVariables, runtimeVariables, collectionPath, processEnvVars) {
|
|
const requestVariables = request?.requestVariables || {};
|
|
const globalEnvironmentVariables = request?.globalEnvironmentVariables || {};
|
|
const oauth2CredentialVariables = request?.oauth2CredentialVariables || {};
|
|
const collectionVariables = request?.collectionVariables || {};
|
|
const folderVariables = request?.folderVariables || {};
|
|
const enabledVars = _.filter(vars, (v) => v.enabled);
|
|
if (!enabledVars.length) {
|
|
return;
|
|
}
|
|
|
|
const promptVariables = request?.promptVariables || {};
|
|
const bru = new Bru(envVariables, runtimeVariables, processEnvVars, undefined, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables, undefined, promptVariables);
|
|
const req = new BrunoRequest(request);
|
|
const res = createResponseParser(response);
|
|
|
|
const bruContext = {
|
|
bru,
|
|
req,
|
|
res
|
|
};
|
|
|
|
const context = {
|
|
...envVariables,
|
|
...runtimeVariables,
|
|
...bruContext
|
|
};
|
|
|
|
const errors = new Map();
|
|
_.each(enabledVars, (v) => {
|
|
try {
|
|
const value = evaluateJsExpressionBasedOnRuntime(v.value, context, this.runtime);
|
|
if (v.name) {
|
|
bru.setVar(v.name, value);
|
|
}
|
|
} catch (error) {
|
|
errors.set(v.name, error);
|
|
}
|
|
});
|
|
|
|
let error = null;
|
|
if (errors.size > 0) {
|
|
// Format all errors as a single string to be displayed in a toast
|
|
const errorMessage = [...errors.entries()].map(([name, err]) => `${name}: ${err.message ?? err}`).join('\n');
|
|
error = `${errors.size} error${errors.size === 1 ? '' : 's'} in post response variables: \n${errorMessage}`;
|
|
}
|
|
|
|
return {
|
|
envVariables,
|
|
runtimeVariables,
|
|
globalEnvironmentVariables: cleanJson(globalEnvironmentVariables),
|
|
persistentEnvVariables: cleanJson(bru.persistentEnvVariables),
|
|
error
|
|
};
|
|
}
|
|
}
|
|
|
|
module.exports = VarsRuntime;
|