UNPKG

@usebruno/cli

Version:

With Bruno CLI, you can now run your API collections with ease using simple command line commands.

74 lines (65 loc) 1.89 kB
const { forOwn, cloneDeep } = require('lodash'); const { interpolate, interpolateObject: interpolateObjectCommon } = require('@usebruno/common'); const buildCombinedVars = ({ collectionVariables, envVars, folderVariables, requestVariables, runtimeVariables, processEnvVars, globalEnvVars, externalSecretVariables }) => { processEnvVars = processEnvVars || {}; runtimeVariables = runtimeVariables || {}; collectionVariables = collectionVariables || {}; folderVariables = folderVariables || {}; requestVariables = requestVariables || {}; globalEnvVars = globalEnvVars || {}; // we clone envVars because we don't want to modify the original object envVars = envVars ? cloneDeep(envVars) : {}; // envVars can inturn have values as {{process.env.VAR_NAME}} // so we need to interpolate envVars first with processEnvVars forOwn(envVars, (value, key) => { envVars[key] = interpolate(value, { process: { env: { ...processEnvVars } } }); }); // runtimeVariables take precedence over envVars return { ...globalEnvVars, ...collectionVariables, ...envVars, ...folderVariables, ...requestVariables, ...runtimeVariables, process: { env: { ...processEnvVars } }, ...externalSecretVariables }; }; const interpolateString = (str, interpolationOptions) => { if (!str || !str.length || typeof str !== 'string') { return str; } const combinedVars = buildCombinedVars(interpolationOptions); return interpolate(str, combinedVars); }; /** * recursively interpolating all string values in a object */ const interpolateObject = (obj, interpolationOptions) => { const combinedVars = buildCombinedVars(interpolationOptions); return interpolateObjectCommon(obj, combinedVars); }; module.exports = { interpolateString, interpolateObject };