@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 +3 -2
- package/src/bru.js +49 -3
- package/src/runtime/assert-runtime.js +3 -1
- package/src/runtime/script-runtime.js +10 -2
- package/src/runtime/test-runtime.js +5 -2
- package/src/runtime/vars-runtime.js +8 -10
- package/src/sandbox/bundle-browser-rollup.js +74 -74
- package/src/sandbox/bundle-libraries.js +4 -1
- package/src/sandbox/quickjs/shims/bru.js +43 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@usebruno/js",
|
|
3
|
-
"version": "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.
|
|
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
|
|
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
|
|
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
|
|
81
|
-
const
|
|
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
|
}
|