@usebruno/js 0.28.0 → 0.30.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.30.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.5.0",
19
19
  "@usebruno/crypto-js": "^3.1.9",
20
20
  "@usebruno/query": "0.1.0",
21
21
  "ajv": "^8.12.0",
@@ -35,6 +35,7 @@
35
35
  "node-vault": "^0.10.2",
36
36
  "path": "^0.12.7",
37
37
  "quickjs-emscripten": "^0.29.2",
38
+ "tv4": "^1.3.0",
38
39
  "uuid": "^9.0.0",
39
40
  "xml2js": "^0.6.2"
40
41
  },
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);
@@ -30,6 +30,7 @@ const CryptoJS = require('crypto-js');
30
30
  const NodeVault = require('node-vault');
31
31
  const xml2js = require('xml2js');
32
32
  const cheerio = require('cheerio');
33
+ const tv4 = require('tv4');
33
34
  const { executeQuickJsVmAsync } = require('../sandbox/quickjs');
34
35
 
35
36
  class ScriptRuntime {
@@ -61,7 +62,9 @@ class ScriptRuntime {
61
62
  const collectionVariables = request?.collectionVariables || {};
62
63
  const folderVariables = request?.folderVariables || {};
63
64
  const requestVariables = request?.requestVariables || {};
64
- const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables);
65
+ const iterationDetails = request?.runnerIterationDetails || {};
66
+ // TODO please clean this up
67
+ const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables, iterationDetails);
65
68
  const req = new BrunoRequest(request);
66
69
  const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
67
70
  const moduleWhitelist = get(scriptingConfig, 'moduleWhitelist', []);
@@ -158,6 +161,7 @@ class ScriptRuntime {
158
161
  'crypto-js': CryptoJS,
159
162
  'xml2js': xml2js,
160
163
  cheerio,
164
+ tv4,
161
165
  ...whitelistedModules,
162
166
  fs: allowScriptFilesystemAccess ? fs : undefined,
163
167
  'node-vault': NodeVault
@@ -202,7 +206,8 @@ class ScriptRuntime {
202
206
  const collectionVariables = request?.collectionVariables || {};
203
207
  const folderVariables = request?.folderVariables || {};
204
208
  const requestVariables = request?.requestVariables || {};
205
- const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables);
209
+ const iterationDetails = request?.runnerIterationDetails || {};
210
+ const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables, iterationDetails);
206
211
  const req = new BrunoRequest(request);
207
212
  const res = new BrunoResponse(response);
208
213
  const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
@@ -298,6 +303,9 @@ class ScriptRuntime {
298
303
  axios,
299
304
  'node-fetch': fetch,
300
305
  'crypto-js': CryptoJS,
306
+ 'xml2js': xml2js,
307
+ cheerio,
308
+ tv4,
301
309
  ...whitelistedModules,
302
310
  fs: allowScriptFilesystemAccess ? fs : undefined,
303
311
  'node-vault': NodeVault
@@ -32,6 +32,7 @@ const CryptoJS = require('crypto-js');
32
32
  const NodeVault = require('node-vault');
33
33
  const xml2js = require('xml2js');
34
34
  const cheerio = require('cheerio');
35
+ const tv4 = require('tv4');
35
36
  const { executeQuickJsVmAsync } = require('../sandbox/quickjs');
36
37
 
37
38
  const getResultsSummary = (results) => {
@@ -77,8 +78,9 @@ class TestRuntime {
77
78
  const collectionVariables = request?.collectionVariables || {};
78
79
  const folderVariables = request?.folderVariables || {};
79
80
  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);
81
+ const iterationDetails = request?.runnerIterationDetails || {};
82
+ const assertionResults = request?.assertionResults || [];
83
+ const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, undefined, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables, iterationDetails);
82
84
  const req = new BrunoRequest(request, historyLogger);
83
85
  const res = new BrunoResponse(response);
84
86
  const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
@@ -212,6 +214,7 @@ class TestRuntime {
212
214
  'crypto-js': CryptoJS,
213
215
  'xml2js': xml2js,
214
216
  cheerio,
217
+ tv4,
215
218
  ...whitelistedModules,
216
219
  fs: allowScriptFilesystemAccess ? fs : undefined,
217
220
  'node-vault': NodeVault
@@ -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
  }