refactor: update Bru constructor to accept a single options obj for improved readability (#7562)

* refactor: update Bru constructor to accept a single options object for improved readability

- Changed the Bru class constructor to accept a single options object instead of multiple parameters, enhancing code clarity and maintainability.
- Updated all instances of Bru instantiation across the codebase to align with the new constructor format.

* docs: enhance Bru constructor documentation with additional certs and proxy configuration options

- Updated the documentation for the Bru class constructor to include new parameters related to certs and proxy configuration, improving clarity for users on available options.
- Added descriptions for collectionPath, options, clientCertificates, collectionLevelProxy, and systemProxyConfig to provide comprehensive guidance on their usage.

* docs: refine Bru constructor documentation for clarity and default values

- Updated the constructor documentation for the Bru class to enhance clarity by consolidating parameter descriptions into a single options object format.
- Added default values for optional parameters, improving guidance for users on expected input and usage.
This commit is contained in:
sanish chirayath
2026-03-27 18:56:09 +05:30
committed by GitHub
parent 708e88241f
commit 784e851d4c
6 changed files with 103 additions and 46 deletions

View File

@@ -8,26 +8,41 @@ const variableNameRegex = /^[\w-.]*$/;
class Bru {
/**
* @param {string} runtime - The runtime environment ('quickjs' or 'nodevm')
* @param {object} envVariables - Environment variables
* @param {object} runtimeVariables - Runtime variables
* @param {object} processEnvVars - Process environment variables
* @param {string} collectionPath - Path to the collection
* @param {object} collectionVariables - Collection-level variables
* @param {object} folderVariables - Folder-level variables
* @param {object} requestVariables - Request-level variables
* @param {object} globalEnvironmentVariables - Global environment variables
* @param {object} oauth2CredentialVariables - OAuth2 credential variables
* @param {string} collectionName - Name of the collection
* @param {object} promptVariables - Prompt variables
* @param {object} certsAndProxyConfig - Configuration for bru.sendRequest (proxy, certs, TLS)
* @param {string} certsAndProxyConfig.collectionPath - Path to the collection
* @param {object} certsAndProxyConfig.options - TLS and proxy options
* @param {object} [certsAndProxyConfig.clientCertificates] - Client certificate configuration
* @param {object} [certsAndProxyConfig.collectionLevelProxy] - Collection-level proxy settings
* @param {object} [certsAndProxyConfig.systemProxyConfig] - System proxy configuration
* @param {object} options - Single options object (destructured)
* @property {string} options.runtime - The runtime environment ('quickjs' or 'nodevm')
* @property {object} [options.envVariables={}] - Environment variables
* @property {object} [options.runtimeVariables={}] - Runtime variables
* @property {object} [options.processEnvVars={}] - Process environment variables (deep cloned)
* @property {string} [options.collectionPath] - Path to the collection
* @property {object} [options.collectionVariables={}] - Collection-level variables
* @property {object} [options.folderVariables={}] - Folder-level variables
* @property {object} [options.requestVariables={}] - Request-level variables
* @property {object} [options.globalEnvironmentVariables={}] - Global environment variables
* @property {object} [options.oauth2CredentialVariables={}] - OAuth2 credential variables
* @property {string} [options.collectionName] - Name of the collection
* @property {object} [options.promptVariables={}] - Prompt variables
* @property {object} [options.certsAndProxyConfig] - Configuration for bru.sendRequest (proxy, certs, TLS)
* @property {string} [options.certsAndProxyConfig.collectionPath] - Path to the collection
* @property {object} [options.certsAndProxyConfig.options] - TLS and proxy options
* @property {object} [options.certsAndProxyConfig.clientCertificates] - Client certificate configuration
* @property {object} [options.certsAndProxyConfig.collectionLevelProxy] - Collection-level proxy settings
* @property {object} [options.certsAndProxyConfig.systemProxyConfig] - System proxy configuration
*/
constructor(runtime, envVariables, runtimeVariables, processEnvVars, collectionPath, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables, collectionName, promptVariables, certsAndProxyConfig) {
constructor({
runtime,
envVariables,
runtimeVariables,
processEnvVars,
collectionPath,
collectionVariables,
folderVariables,
requestVariables,
globalEnvironmentVariables,
oauth2CredentialVariables,
collectionName,
promptVariables,
certsAndProxyConfig
}) {
this.envVariables = envVariables || {};
this.runtimeVariables = runtimeVariables || {};
this.promptVariables = promptVariables || {};

View File

@@ -262,21 +262,18 @@ class AssertRuntime {
const promptVariables = request?.promptVariables || {};
const certsAndProxyConfig = request?.certsAndProxyConfig;
const bru = new Bru(
this.runtime,
const bru = new Bru({
runtime: this.runtime,
envVariables,
runtimeVariables,
processEnvVars,
undefined,
collectionVariables,
folderVariables,
requestVariables,
globalEnvironmentVariables,
{},
undefined,
promptVariables,
certsAndProxyConfig
);
});
const req = new BrunoRequest(request);
const res = createResponseParser(response);

View File

@@ -36,7 +36,21 @@ class ScriptRuntime {
const assertionResults = request?.assertionResults || [];
const certsAndProxyConfig = request?.certsAndProxyConfig;
const scriptPath = request?.pathname;
const bru = new Bru(this.runtime, envVariables, runtimeVariables, processEnvVars, collectionPath, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables, collectionName, promptVariables, certsAndProxyConfig);
const bru = new Bru({
runtime: this.runtime,
envVariables,
runtimeVariables,
processEnvVars,
collectionPath,
collectionVariables,
folderVariables,
requestVariables,
globalEnvironmentVariables,
oauth2CredentialVariables,
collectionName,
promptVariables,
certsAndProxyConfig
});
const req = new BrunoRequest(request);
// extend bru with result getter methods
@@ -155,7 +169,21 @@ class ScriptRuntime {
const assertionResults = request?.assertionResults || {};
const certsAndProxyConfig = request?.certsAndProxyConfig;
const scriptPath = request?.pathname;
const bru = new Bru(this.runtime, envVariables, runtimeVariables, processEnvVars, collectionPath, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables, collectionName, promptVariables, certsAndProxyConfig);
const bru = new Bru({
runtime: this.runtime,
envVariables,
runtimeVariables,
processEnvVars,
collectionPath,
collectionVariables,
folderVariables,
requestVariables,
globalEnvironmentVariables,
oauth2CredentialVariables,
collectionName,
promptVariables,
certsAndProxyConfig
});
const req = new BrunoRequest(request);
const res = new BrunoResponse(response);

View File

@@ -36,7 +36,21 @@ class TestRuntime {
const assertionResults = request?.assertionResults || [];
const certsAndProxyConfig = request?.certsAndProxyConfig;
const scriptPath = request?.pathname;
const bru = new Bru(this.runtime, envVariables, runtimeVariables, processEnvVars, collectionPath, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables, collectionName, promptVariables, certsAndProxyConfig);
const bru = new Bru({
runtime: this.runtime,
envVariables,
runtimeVariables,
processEnvVars,
collectionPath,
collectionVariables,
folderVariables,
requestVariables,
globalEnvironmentVariables,
oauth2CredentialVariables,
collectionName,
promptVariables,
certsAndProxyConfig
});
const req = new BrunoRequest(request);
const res = new BrunoResponse(response);

View File

@@ -37,7 +37,19 @@ class VarsRuntime {
const promptVariables = request?.promptVariables || {};
const certsAndProxyConfig = request?.certsAndProxyConfig;
const bru = new Bru(this.runtime, envVariables, runtimeVariables, processEnvVars, undefined, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables, undefined, promptVariables, certsAndProxyConfig);
const bru = new Bru({
runtime: this.runtime,
envVariables,
runtimeVariables,
processEnvVars,
collectionVariables,
folderVariables,
requestVariables,
globalEnvironmentVariables,
oauth2CredentialVariables,
promptVariables,
certsAndProxyConfig
});
const req = new BrunoRequest(request);
const res = createResponseParser(response);

View File

@@ -2,23 +2,14 @@ const Bru = require('../src/bru');
describe('Bru.setEnvVar', () => {
const makeBru = () =>
new Bru(
/* runtime */ 'quickjs',
/* envVariables */ {},
/* runtimeVariables */ {},
/* processEnvVars */ {},
/* collectionPath */ '/',
/* historyLogger */ undefined,
/* setVisualizations */ undefined,
/* secretVariables */ {},
/* collectionVariables */ {},
/* folderVariables */ {},
/* requestVariables */ {},
/* globalEnvironmentVariables */ {},
/* oauth2CredentialVariables */ {},
/* iterationDetails */ {},
/* collectionName */ 'Test'
);
new Bru({
runtime: 'quickjs',
envVariables: {},
runtimeVariables: {},
processEnvVars: {},
collectionPath: '/',
collectionName: 'Test'
});
test('updates envVariables and does not mark persistent when persist=false', () => {
const bru = makeBru();