@usebruno/js 0.28.0 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usebruno/js",
3
- "version": "0.28.0",
3
+ "version": "0.29.0",
4
4
  "license": "MIT",
5
5
  "main": "src/index.js",
6
6
  "files": [
@@ -15,7 +15,7 @@
15
15
  "sandbox:bundle-libraries": "node ./src/sandbox/bundle-libraries.js"
16
16
  },
17
17
  "dependencies": {
18
- "@usebruno/common": "0.3.0",
18
+ "@usebruno/common": "0.4.0",
19
19
  "@usebruno/crypto-js": "^3.1.9",
20
20
  "@usebruno/query": "0.1.0",
21
21
  "ajv": "^8.12.0",
package/src/bru.js CHANGED
@@ -5,7 +5,8 @@ const { interpolate } = require('@usebruno/common');
5
5
  const variableNameRegex = /^[\w-.]*$/;
6
6
 
7
7
  class Bru {
8
- constructor(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables) {
8
+ constructor(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables, iterationDetails) {
9
+
9
10
  this.envVariables = envVariables || {};
10
11
  this.runtimeVariables = runtimeVariables || {};
11
12
  this.processEnvVars = cloneDeep(processEnvVars || {});
@@ -18,6 +19,7 @@ class Bru {
18
19
  this.collectionPath = collectionPath;
19
20
  this.historyLogger = historyLogger;
20
21
  this.setVisualizations = setVisualizations;
22
+
21
23
  this.runner = {
22
24
  skipRequest: () => {
23
25
  this.skipRequest = true;
@@ -27,9 +29,14 @@ class Bru {
27
29
  },
28
30
  setNextRequest: (nextRequest) => {
29
31
  this.nextRequest = nextRequest;
30
- }
31
- };
32
+ },
33
+ iterationData: new IterationDataManager(iterationDetails?.iterationData),
34
+ iterationIndex: iterationDetails?.iterationIndex,
35
+ totalIterations: iterationDetails?.totalIterations
36
+ };
37
+
32
38
  }
39
+
33
40
 
34
41
  _interpolate = (str) => {
35
42
  if (!str || !str.length || typeof str !== 'string') {
@@ -210,4 +217,43 @@ class Bru {
210
217
  }
211
218
  }
212
219
 
220
+ class IterationDataManager {
221
+ constructor(iterationData) {
222
+ this._data = iterationData;
223
+
224
+ if (!this._data) {
225
+ this._data = {};
226
+ }
227
+ }
228
+
229
+ set(key, value) {
230
+ if (!this._data) {
231
+ this._data = {};
232
+ }
233
+
234
+ this._data[key] = value;
235
+ }
236
+
237
+ get(key) {
238
+ if (!key) {
239
+ return this._data || {};
240
+ }
241
+ return this._data?.[key];
242
+ }
243
+
244
+ has(key) {
245
+ return this._data && key in this._data;
246
+ }
247
+
248
+ stringify() {
249
+ return JSON.stringify(this.get());
250
+ }
251
+
252
+ unset(key) {
253
+ if (this._data[key]) {
254
+ delete this._data[key];
255
+ }
256
+ }
257
+ }
258
+
213
259
  module.exports = Bru;
@@ -250,6 +250,7 @@ class AssertRuntime {
250
250
  const collectionVariables = request?.collectionVariables || {};
251
251
  const folderVariables = request?.folderVariables || {};
252
252
  const requestVariables = request?.requestVariables || {};
253
+ const iterationDetails = request?.runnerIterationDetails || {};
253
254
  const enabledAssertions = _.filter(assertions, (a) => a.enabled);
254
255
  if (!enabledAssertions.length) {
255
256
  return [];
@@ -267,7 +268,8 @@ class AssertRuntime {
267
268
  folderVariables,
268
269
  requestVariables,
269
270
  globalEnvironmentVariables,
270
- oauth2CredentialVariables
271
+ oauth2CredentialVariables,
272
+ iterationDetails
271
273
  );
272
274
  const req = new BrunoRequest(request, historyLogger);
273
275
  const res = createResponseParser(response);
@@ -61,7 +61,9 @@ class ScriptRuntime {
61
61
  const collectionVariables = request?.collectionVariables || {};
62
62
  const folderVariables = request?.folderVariables || {};
63
63
  const requestVariables = request?.requestVariables || {};
64
- const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables);
64
+ const iterationDetails = request?.runnerIterationDetails || {};
65
+ // TODO please clean this up
66
+ const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables, iterationDetails);
65
67
  const req = new BrunoRequest(request);
66
68
  const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
67
69
  const moduleWhitelist = get(scriptingConfig, 'moduleWhitelist', []);
@@ -202,7 +204,8 @@ class ScriptRuntime {
202
204
  const collectionVariables = request?.collectionVariables || {};
203
205
  const folderVariables = request?.folderVariables || {};
204
206
  const requestVariables = request?.requestVariables || {};
205
- const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables);
207
+ const iterationDetails = request?.runnerIterationDetails || {};
208
+ const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables, iterationDetails);
206
209
  const req = new BrunoRequest(request);
207
210
  const res = new BrunoResponse(response);
208
211
  const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
@@ -298,6 +301,8 @@ class ScriptRuntime {
298
301
  axios,
299
302
  'node-fetch': fetch,
300
303
  'crypto-js': CryptoJS,
304
+ 'xml2js': xml2js,
305
+ cheerio,
301
306
  ...whitelistedModules,
302
307
  fs: allowScriptFilesystemAccess ? fs : undefined,
303
308
  'node-vault': NodeVault
@@ -77,8 +77,9 @@ class TestRuntime {
77
77
  const collectionVariables = request?.collectionVariables || {};
78
78
  const folderVariables = request?.folderVariables || {};
79
79
  const requestVariables = request?.requestVariables || {};
80
- const assertionResults = request?.assertionResults || [];
81
- const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, undefined, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables);
80
+ const iterationDetails = request?.runnerIterationDetails || {};
81
+ const assertionResults = request?.assertionResults || [];
82
+ const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, undefined, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables, iterationDetails);
82
83
  const req = new BrunoRequest(request, historyLogger);
83
84
  const res = new BrunoResponse(response);
84
85
  const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
@@ -2,6 +2,7 @@ const _ = require('lodash');
2
2
  const Bru = require('../bru');
3
3
  const BrunoRequest = require('../bruno-request');
4
4
  const { evaluateJsExpression, createResponseParser } = require('../utils');
5
+ const { cleanJson } = require('../utils');
5
6
 
6
7
  const { executeQuickJsVm } = require('../sandbox/quickjs');
7
8
 
@@ -25,21 +26,17 @@ class VarsRuntime {
25
26
 
26
27
  runPostResponseVars(vars, request, response, envVariables, runtimeVariables, collectionPath, processEnvVars, historyLogger, secretVars = {}) {
27
28
  const requestVariables = request?.requestVariables || {};
29
+ const globalEnvironmentVariables = request?.globalEnvironmentVariables || {};
30
+ const oauth2CredentialVariables = request?.oauth2CredentialVariables || {};
31
+ const collectionVariables = request?.collectionVariables || {};
32
+ const folderVariables = request?.folderVariables || {};
33
+ const iterationDetails = request?.runnerIterationDetails || {};
28
34
  const enabledVars = _.filter(vars, (v) => v.enabled);
29
35
  if (!enabledVars.length) {
30
36
  return;
31
37
  }
32
38
 
33
- const bru = new Bru(
34
- envVariables,
35
- runtimeVariables,
36
- processEnvVars,
37
- null,
38
- historyLogger,
39
- undefined, // setVisualizations
40
- secretVars,
41
- requestVariables
42
- );
39
+ const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, undefined, secretVars, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables, iterationDetails);
43
40
  const req = new BrunoRequest(request, historyLogger);
44
41
  const res = createResponseParser(response);
45
42
 
@@ -78,6 +75,7 @@ class VarsRuntime {
78
75
  return {
79
76
  envVariables,
80
77
  runtimeVariables,
78
+ globalEnvironmentVariables: cleanJson(globalEnvironmentVariables),
81
79
  error
82
80
  };
83
81
  }
@@ -4,6 +4,7 @@ const { marshallToVm } = require('../utils');
4
4
  const addBruShimToContext = (vm, bru) => {
5
5
  const bruObject = vm.newObject();
6
6
  const bruRunnerObject = vm.newObject();
7
+ const bruRunnerIterationDataObject = vm.newObject();
7
8
 
8
9
  let cwd = vm.newFunction('cwd', function () {
9
10
  return marshallToVm(bru.cwd(), vm);
@@ -119,6 +120,47 @@ const addBruShimToContext = (vm, bru) => {
119
120
  vm.setProp(bruRunnerObject, 'setNextRequest', runnerSetNextRequest);
120
121
  runnerSetNextRequest.dispose();
121
122
 
123
+ let runnerIterationIndex = marshallToVm(bru?.runner?.iterationIndex, vm);
124
+ vm.setProp(bruRunnerObject, 'iterationIndex', runnerIterationIndex);
125
+ runnerIterationIndex.dispose();
126
+
127
+ let runnerTotalIterations = marshallToVm(bru?.runner?.totalIterations, vm);
128
+ vm.setProp(bruRunnerObject, 'totalIterations', runnerTotalIterations);
129
+ runnerTotalIterations.dispose();
130
+
131
+ let runnerSetIterationData = vm.newFunction('set', function (key, value) {
132
+ bru?.runner?.iterationData?.set(vm.dump(key), vm.dump(value));
133
+ });
134
+ vm.setProp(bruRunnerIterationDataObject, 'set', runnerSetIterationData);
135
+ runnerSetIterationData.dispose();
136
+
137
+ let runnerUnsetIterationData = vm.newFunction('unset', function (key) {
138
+ bru?.runner?.iterationData?.unset(vm.dump(key));
139
+ });
140
+ vm.setProp(bruRunnerIterationDataObject, 'unset', runnerUnsetIterationData);
141
+ runnerUnsetIterationData.dispose();
142
+
143
+ let runnerGetIterationData = vm.newFunction('get', function (key) {
144
+ if (key) {
145
+ return marshallToVm(bru?.runner?.iterationData?.get(vm.dump(key)), vm);
146
+ }
147
+ return marshallToVm(bru?.runner?.iterationData?.get(), vm);
148
+ });
149
+ vm.setProp(bruRunnerIterationDataObject, 'get', runnerGetIterationData);
150
+ runnerGetIterationData.dispose();
151
+
152
+ let runnerHasIterationData = vm.newFunction('has', function (key) {
153
+ return marshallToVm(bru?.runner?.iterationData?.has(vm.dump(key)), vm);
154
+ });
155
+ vm.setProp(bruRunnerIterationDataObject, 'has', runnerHasIterationData);
156
+ runnerHasIterationData.dispose();
157
+
158
+ let runnerStringifyIterationData = vm.newFunction('stringify', function () {
159
+ return marshallToVm(bru?.runner?.iterationData?.stringify(), vm);
160
+ });
161
+ vm.setProp(bruRunnerIterationDataObject, 'stringify', runnerStringifyIterationData);
162
+ runnerStringifyIterationData.dispose();
163
+
122
164
  let visualize = vm.newFunction('visualize', function (type, data) {
123
165
  bru.visualize(vm.dump(type), vm.dump(data));
124
166
  });
@@ -224,6 +266,7 @@ const addBruShimToContext = (vm, bru) => {
224
266
  });
225
267
  sleep.consume((handle) => vm.setProp(bruObject, 'sleep', handle));
226
268
 
269
+ vm.setProp(bruRunnerObject, 'iterationData', bruRunnerIterationDataObject);
227
270
  vm.setProp(bruObject, 'runner', bruRunnerObject);
228
271
  vm.setProp(vm.global, 'bru', bruObject);
229
272
  bruObject.dispose();