@usebruno/js 0.14.0 → 0.15.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.
@@ -0,0 +1,88 @@
1
+ const rollup = require('rollup');
2
+ const { nodeResolve } = require('@rollup/plugin-node-resolve');
3
+ const commonjs = require('@rollup/plugin-commonjs');
4
+ const fs = require('fs');
5
+ const { terser } = require('rollup-plugin-terser');
6
+
7
+ const bundleLibraries = async () => {
8
+ const codeScript = `
9
+ import { expect, assert } from 'chai';
10
+ import { Buffer } from "buffer";
11
+ import moment from "moment";
12
+ import btoa from "btoa";
13
+ import atob from "atob";
14
+ import * as CryptoJS from "crypto-js-3.1.9-1";
15
+ globalThis.expect = expect;
16
+ globalThis.assert = assert;
17
+ globalThis.moment = moment;
18
+ globalThis.btoa = btoa;
19
+ globalThis.atob = atob;
20
+ globalThis.Buffer = Buffer;
21
+ globalThis.CryptoJS = CryptoJS;
22
+ globalThis.requireObject = {
23
+ ...(globalThis.requireObject || {}),
24
+ 'chai': { expect, assert },
25
+ 'moment': moment,
26
+ 'buffer': { Buffer },
27
+ 'btoa': btoa,
28
+ 'atob': atob,
29
+ 'crypto-js': CryptoJS
30
+ };
31
+ `;
32
+
33
+ const config = {
34
+ input: {
35
+ input: 'inline-code',
36
+ plugins: [
37
+ {
38
+ name: 'inline-code-plugin',
39
+ resolveId(id) {
40
+ if (id === 'inline-code') {
41
+ return id;
42
+ }
43
+ return null;
44
+ },
45
+ load(id) {
46
+ if (id === 'inline-code') {
47
+ return codeScript;
48
+ }
49
+ return null;
50
+ }
51
+ },
52
+ nodeResolve({
53
+ preferBuiltins: false,
54
+ browser: false
55
+ }),
56
+ commonjs(),
57
+ terser()
58
+ ]
59
+ },
60
+ output: {
61
+ file: './src/sandbox/bundle-browser-rollup.js',
62
+ format: 'iife',
63
+ name: 'MyBundle'
64
+ }
65
+ };
66
+
67
+ try {
68
+ const bundle = await rollup.rollup(config.input);
69
+ const { output } = await bundle.generate(config.output);
70
+ fs.writeFileSync(
71
+ './src/sandbox/bundle-browser-rollup.js',
72
+ `
73
+ const getBundledCode = () => {
74
+ return function(){
75
+ ${output?.map((o) => o.code).join('\n')}
76
+ }()
77
+ }
78
+ module.exports = getBundledCode;
79
+ `
80
+ );
81
+ } catch (error) {
82
+ console.error('Error while bundling:', error);
83
+ }
84
+ };
85
+
86
+ bundleLibraries();
87
+
88
+ module.exports = bundleLibraries;
@@ -0,0 +1,193 @@
1
+ const addBruShimToContext = require('./shims/bru');
2
+ const addBrunoRequestShimToContext = require('./shims/bruno-request');
3
+ const addConsoleShimToContext = require('./shims/console');
4
+ const addBrunoResponseShimToContext = require('./shims/bruno-response');
5
+ const addTestShimToContext = require('./shims/test');
6
+ const addLibraryShimsToContext = require('./shims/lib');
7
+ const addLocalModuleLoaderShimToContext = require('./shims/local-module');
8
+ const { newQuickJSWASMModule, memoizePromiseFactory } = require('quickjs-emscripten');
9
+
10
+ // execute `npm run sandbox:bundle-libraries` if the below file doesn't exist
11
+ const getBundledCode = require('../bundle-browser-rollup');
12
+ const addPathShimToContext = require('./shims/lib/path');
13
+ const { marshallToVm } = require('./utils');
14
+
15
+ let QuickJSSyncContext;
16
+ const loader = memoizePromiseFactory(() => newQuickJSWASMModule());
17
+ const getContext = (opts) => loader().then((mod) => (QuickJSSyncContext = mod.newContext(opts)));
18
+ getContext();
19
+
20
+ const toNumber = (value) => {
21
+ const num = Number(value);
22
+ return Number.isInteger(num) ? parseInt(value, 10) : parseFloat(value);
23
+ };
24
+
25
+ const removeQuotes = (str) => {
26
+ if ((str.startsWith('"') && str.endsWith('"')) || (str.startsWith("'") && str.endsWith("'"))) {
27
+ return str.slice(1, -1);
28
+ }
29
+ return str;
30
+ };
31
+
32
+ const executeQuickJsVm = ({ script: externalScript, context: externalContext, scriptType = 'template-literal' }) => {
33
+ if (!externalScript?.length || typeof externalScript !== 'string') {
34
+ return externalScript;
35
+ }
36
+ externalScript = externalScript?.trim();
37
+
38
+ if (!isNaN(Number(externalScript))) {
39
+ return Number(externalScript);
40
+ }
41
+
42
+ if (externalScript === 'true') return true;
43
+ if (externalScript === 'false') return false;
44
+ if (externalScript === 'null') return null;
45
+ if (externalScript === 'undefined') return undefined;
46
+
47
+ externalScript = removeQuotes(externalScript);
48
+
49
+ const vm = QuickJSSyncContext;
50
+
51
+ try {
52
+ const { bru, req, res, ...variables } = externalContext;
53
+
54
+ bru && addBruShimToContext(vm, bru);
55
+ req && addBrunoRequestShimToContext(vm, req);
56
+ res && addBrunoResponseShimToContext(vm, res);
57
+
58
+ Object.entries(variables)?.forEach(([key, value]) => {
59
+ vm.setProp(vm.global, key, marshallToVm(value, vm));
60
+ });
61
+
62
+ const templateLiteralText = `\`${externalScript}\``;
63
+ const jsExpressionText = `${externalScript}`;
64
+
65
+ let scriptText = scriptType === 'template-literal' ? templateLiteralText : jsExpressionText;
66
+
67
+ const result = vm.evalCode(scriptText);
68
+ if (result.error) {
69
+ let e = vm.dump(result.error);
70
+ result.error.dispose();
71
+ return e;
72
+ } else {
73
+ let v = vm.dump(result.value);
74
+ result.value.dispose();
75
+ return v;
76
+ }
77
+ } catch (error) {
78
+ console.error('Error executing the script!', error);
79
+ }
80
+ };
81
+
82
+ const executeQuickJsVmAsync = async ({ script: externalScript, context: externalContext, collectionPath }) => {
83
+ if (!externalScript?.length || typeof externalScript !== 'string') {
84
+ return externalScript;
85
+ }
86
+ externalScript = externalScript?.trim();
87
+
88
+ if (!isNaN(Number(externalScript))) {
89
+ return toNumber(externalScript);
90
+ }
91
+
92
+ if (externalScript === 'true') return true;
93
+ if (externalScript === 'false') return false;
94
+ if (externalScript === 'null') return null;
95
+ if (externalScript === 'undefined') return undefined;
96
+
97
+ externalScript = removeQuotes(externalScript);
98
+
99
+ try {
100
+ const module = await newQuickJSWASMModule();
101
+ const vm = module.newContext();
102
+
103
+ const bundledCode = getBundledCode?.toString() || '';
104
+ const moduleLoaderCode = function () {
105
+ return `
106
+ globalThis.require = (mod) => {
107
+ let lib = globalThis.requireObject[mod];
108
+ let isModuleAPath = (module) => (module?.startsWith('.') || module?.startsWith?.(bru.cwd()))
109
+ if (lib) {
110
+ return lib;
111
+ }
112
+ else if (isModuleAPath(mod)) {
113
+ // fetch local module
114
+ let localModuleCode = globalThis.__brunoLoadLocalModule(mod);
115
+
116
+ // compile local module as iife
117
+ (function (){
118
+ const initModuleExportsCode = "const module = { exports: {} };"
119
+ const copyModuleExportsCode = "\\n;globalThis.requireObject[mod] = module.exports;";
120
+ const patchedRequire = ${`
121
+ "\\n;" +
122
+ "let require = (subModule) => isModuleAPath(subModule) ? globalThis.require(path.resolve(bru.cwd(), mod, '..', subModule)) : globalThis.require(subModule)" +
123
+ "\\n;"
124
+ `}
125
+ eval(initModuleExportsCode + patchedRequire + localModuleCode + copyModuleExportsCode);
126
+ })();
127
+
128
+ // resolve module
129
+ return globalThis.requireObject[mod];
130
+ }
131
+ else {
132
+ throw new Error("Cannot find module " + mod);
133
+ }
134
+ }
135
+ `;
136
+ };
137
+
138
+ vm.evalCode(
139
+ `
140
+ (${bundledCode})()
141
+ ${moduleLoaderCode()}
142
+ `
143
+ );
144
+
145
+ const { bru, req, res, test, __brunoTestResults, console: consoleFn } = externalContext;
146
+
147
+ bru && addBruShimToContext(vm, bru);
148
+ req && addBrunoRequestShimToContext(vm, req);
149
+ res && addBrunoResponseShimToContext(vm, res);
150
+ consoleFn && addConsoleShimToContext(vm, consoleFn);
151
+ addLocalModuleLoaderShimToContext(vm, collectionPath);
152
+ addPathShimToContext(vm);
153
+
154
+ await addLibraryShimsToContext(vm);
155
+
156
+ test && __brunoTestResults && addTestShimToContext(vm, __brunoTestResults);
157
+
158
+ const script = `
159
+ (async () => {
160
+ const setTimeout = async(fn, timer) => {
161
+ v = await bru.sleep(timer);
162
+ fn.apply();
163
+ }
164
+ await bru.sleep(0);
165
+ try {
166
+ ${externalScript}
167
+ }
168
+ catch(error) {
169
+ console?.debug?.('quick-js:execution-end:with-error', error?.message);
170
+ throw new Error(error?.message);
171
+ }
172
+ return 'done';
173
+ })()
174
+ `;
175
+
176
+ const result = vm.evalCode(script);
177
+ const promiseHandle = vm.unwrapResult(result);
178
+ const resolvedResult = await vm.resolvePromise(promiseHandle);
179
+ promiseHandle.dispose();
180
+ const resolvedHandle = vm.unwrapResult(resolvedResult);
181
+ resolvedHandle.dispose();
182
+ // vm.dispose();
183
+ return;
184
+ } catch (error) {
185
+ console.error('Error executing the script!', error);
186
+ throw new Error(error);
187
+ }
188
+ };
189
+
190
+ module.exports = {
191
+ executeQuickJsVm,
192
+ executeQuickJsVmAsync
193
+ };
@@ -0,0 +1,87 @@
1
+ const { marshallToVm } = require('../utils');
2
+
3
+ const addBruShimToContext = (vm, bru) => {
4
+ const bruObject = vm.newObject();
5
+
6
+ let cwd = vm.newFunction('cwd', function () {
7
+ return marshallToVm(bru.cwd(), vm);
8
+ });
9
+ vm.setProp(bruObject, 'cwd', cwd);
10
+ cwd.dispose();
11
+
12
+ let getEnvName = vm.newFunction('getEnvName', function () {
13
+ return marshallToVm(bru.getEnvName(), vm);
14
+ });
15
+ vm.setProp(bruObject, 'getEnvName', getEnvName);
16
+ getEnvName.dispose();
17
+
18
+ let getProcessEnv = vm.newFunction('getProcessEnv', function (key) {
19
+ return marshallToVm(bru.getProcessEnv(vm.dump(key)), vm);
20
+ });
21
+ vm.setProp(bruObject, 'getProcessEnv', getProcessEnv);
22
+ getProcessEnv.dispose();
23
+
24
+ let getEnvVar = vm.newFunction('getEnvVar', function (key) {
25
+ return marshallToVm(bru.getEnvVar(vm.dump(key)), vm);
26
+ });
27
+ vm.setProp(bruObject, 'getEnvVar', getEnvVar);
28
+ getEnvVar.dispose();
29
+
30
+ let setEnvVar = vm.newFunction('setEnvVar', function (key, value) {
31
+ bru.setEnvVar(vm.dump(key), vm.dump(value));
32
+ });
33
+ vm.setProp(bruObject, 'setEnvVar', setEnvVar);
34
+ setEnvVar.dispose();
35
+
36
+ let getVar = vm.newFunction('getVar', function (key) {
37
+ return marshallToVm(bru.getVar(vm.dump(key)), vm);
38
+ });
39
+ vm.setProp(bruObject, 'getVar', getVar);
40
+ getVar.dispose();
41
+
42
+ let setVar = vm.newFunction('setVar', function (key, value) {
43
+ bru.setVar(vm.dump(key), vm.dump(value));
44
+ });
45
+ vm.setProp(bruObject, 'setVar', setVar);
46
+ setVar.dispose();
47
+
48
+ let setNextRequest = vm.newFunction('setNextRequest', function (nextRequest) {
49
+ bru.setNextRequest(vm.dump(nextRequest));
50
+ });
51
+ vm.setProp(bruObject, 'setNextRequest', setNextRequest);
52
+ setNextRequest.dispose();
53
+
54
+ let visualize = vm.newFunction('visualize', function (type, data) {
55
+ bru.visualize(vm.dump(type), vm.dump(data));
56
+ });
57
+ vm.setProp(bruObject, 'visualize', visualize);
58
+ visualize.dispose();
59
+
60
+ let getSecretVar = vm.newFunction('getSecretVar', function (key) {
61
+ return marshallToVm(bru.getSecretVar(vm.dump(key)), vm);
62
+ });
63
+ vm.setProp(bruObject, 'getSecretVar', getSecretVar);
64
+ getSecretVar.dispose();
65
+
66
+ let getRequestVar = vm.newFunction('getRequestVar', function (key) {
67
+ return marshallToVm(bru.getRequestVar(vm.dump(key)), vm);
68
+ });
69
+ vm.setProp(bruObject, 'getRequestVar', getRequestVar);
70
+ getRequestVar.dispose();
71
+
72
+ const sleep = vm.newFunction('sleep', (timer) => {
73
+ const t = vm.getString(timer);
74
+ const promise = vm.newPromise();
75
+ setTimeout(() => {
76
+ promise.resolve(vm.newString('slept'));
77
+ }, t);
78
+ promise.settled.then(vm.runtime.executePendingJobs);
79
+ return promise.handle;
80
+ });
81
+ sleep.consume((handle) => vm.setProp(bruObject, 'sleep', handle));
82
+
83
+ vm.setProp(vm.global, 'bru', bruObject);
84
+ bruObject.dispose();
85
+ };
86
+
87
+ module.exports = addBruShimToContext;
@@ -0,0 +1,112 @@
1
+ const { marshallToVm } = require('../utils');
2
+
3
+ const addBrunoRequestShimToContext = (vm, req) => {
4
+ const reqObject = vm.newObject();
5
+
6
+ const url = marshallToVm(req.getUrl(), vm);
7
+ const method = marshallToVm(req.getMethod(), vm);
8
+ const headers = marshallToVm(req.getHeaders(), vm);
9
+ const body = marshallToVm(req.getBody(), vm);
10
+ const timeout = marshallToVm(req.getTimeout(), vm);
11
+
12
+ vm.setProp(reqObject, 'url', url);
13
+ vm.setProp(reqObject, 'method', method);
14
+ vm.setProp(reqObject, 'headers', headers);
15
+ vm.setProp(reqObject, 'body', body);
16
+ vm.setProp(reqObject, 'timeout', timeout);
17
+
18
+ url.dispose();
19
+ method.dispose();
20
+ headers.dispose();
21
+ body.dispose();
22
+ timeout.dispose();
23
+
24
+ let getUrl = vm.newFunction('getUrl', function () {
25
+ return marshallToVm(req.getUrl(), vm);
26
+ });
27
+ vm.setProp(reqObject, 'getUrl', getUrl);
28
+ getUrl.dispose();
29
+
30
+ let setUrl = vm.newFunction('setUrl', function (url) {
31
+ req.setUrl(vm.dump(url));
32
+ });
33
+ vm.setProp(reqObject, 'setUrl', setUrl);
34
+ setUrl.dispose();
35
+
36
+ let getMethod = vm.newFunction('getMethod', function () {
37
+ return marshallToVm(req.getMethod(), vm);
38
+ });
39
+ vm.setProp(reqObject, 'getMethod', getMethod);
40
+ getMethod.dispose();
41
+
42
+ let getAuthMode = vm.newFunction('getAuthMode', function () {
43
+ return marshallToVm(req.getAuthMode(), vm);
44
+ });
45
+ vm.setProp(reqObject, 'getAuthMode', getAuthMode);
46
+ getAuthMode.dispose();
47
+
48
+ let setMethod = vm.newFunction('setMethod', function (method) {
49
+ req.setMethod(vm.dump(method));
50
+ });
51
+ vm.setProp(reqObject, 'setMethod', setMethod);
52
+ setMethod.dispose();
53
+
54
+ let getHeaders = vm.newFunction('getHeaders', function () {
55
+ return marshallToVm(req.getHeaders(), vm);
56
+ });
57
+ vm.setProp(reqObject, 'getHeaders', getHeaders);
58
+ getHeaders.dispose();
59
+
60
+ let setHeaders = vm.newFunction('setHeaders', function (headers) {
61
+ req.setHeaders(vm.dump(headers));
62
+ });
63
+ vm.setProp(reqObject, 'setHeaders', setHeaders);
64
+ setHeaders.dispose();
65
+
66
+ let getHeader = vm.newFunction('getHeader', function (name) {
67
+ return marshallToVm(req.getHeader(vm.dump(name)), vm);
68
+ });
69
+ vm.setProp(reqObject, 'getHeader', getHeader);
70
+ getHeader.dispose();
71
+
72
+ let setHeader = vm.newFunction('setHeader', function (name, value) {
73
+ req.setHeader(vm.dump(name), vm.dump(value));
74
+ });
75
+ vm.setProp(reqObject, 'setHeader', setHeader);
76
+ setHeader.dispose();
77
+
78
+ let getBody = vm.newFunction('getBody', function () {
79
+ return marshallToVm(req.getBody(), vm);
80
+ });
81
+ vm.setProp(reqObject, 'getBody', getBody);
82
+ getBody.dispose();
83
+
84
+ let setBody = vm.newFunction('setBody', function (data) {
85
+ req.setBody(vm.dump(data));
86
+ });
87
+ vm.setProp(reqObject, 'setBody', setBody);
88
+ setBody.dispose();
89
+
90
+ let setMaxRedirects = vm.newFunction('setMaxRedirects', function (maxRedirects) {
91
+ req.setMaxRedirects(vm.dump(maxRedirects));
92
+ });
93
+ vm.setProp(reqObject, 'setMaxRedirects', setMaxRedirects);
94
+ setMaxRedirects.dispose();
95
+
96
+ let getTimeout = vm.newFunction('getTimeout', function () {
97
+ return marshallToVm(req.getTimeout(), vm);
98
+ });
99
+ vm.setProp(reqObject, 'getTimeout', getTimeout);
100
+ getTimeout.dispose();
101
+
102
+ let setTimeout = vm.newFunction('setTimeout', function (timeout) {
103
+ req.setTimeout(vm.dump(timeout));
104
+ });
105
+ vm.setProp(reqObject, 'setTimeout', setTimeout);
106
+ setTimeout.dispose();
107
+
108
+ vm.setProp(vm.global, 'req', reqObject);
109
+ reqObject.dispose();
110
+ };
111
+
112
+ module.exports = addBrunoRequestShimToContext;
@@ -0,0 +1,55 @@
1
+ const { marshallToVm } = require('../utils');
2
+
3
+ const addBrunoResponseShimToContext = (vm, res) => {
4
+ const resObject = vm.newObject();
5
+
6
+ const status = marshallToVm(res?.status, vm);
7
+ const headers = marshallToVm(res?.headers, vm);
8
+ const body = marshallToVm(res?.body, vm);
9
+ const responseTime = marshallToVm(res?.responseTime, vm);
10
+
11
+ vm.setProp(resObject, 'status', status);
12
+ vm.setProp(resObject, 'headers', headers);
13
+ vm.setProp(resObject, 'body', body);
14
+ vm.setProp(resObject, 'responseTime', responseTime);
15
+
16
+ status.dispose();
17
+ headers.dispose();
18
+ body.dispose();
19
+ responseTime.dispose();
20
+
21
+ let getStatus = vm.newFunction('getStatus', function () {
22
+ return marshallToVm(res.getStatus(), vm);
23
+ });
24
+ vm.setProp(resObject, 'getStatus', getStatus);
25
+ getStatus.dispose();
26
+
27
+ let getHeader = vm.newFunction('getHeader', function (name) {
28
+ return marshallToVm(res.getHeader(vm.dump(name)), vm);
29
+ });
30
+ vm.setProp(resObject, 'getHeader', getHeader);
31
+ getHeader.dispose();
32
+
33
+ let getHeaders = vm.newFunction('getHeaders', function () {
34
+ return marshallToVm(res.getHeaders(), vm);
35
+ });
36
+ vm.setProp(resObject, 'getHeaders', getHeaders);
37
+ getHeaders.dispose();
38
+
39
+ let getBody = vm.newFunction('getBody', function () {
40
+ return marshallToVm(res.getBody(), vm);
41
+ });
42
+ vm.setProp(resObject, 'getBody', getBody);
43
+ getBody.dispose();
44
+
45
+ let getResponseTime = vm.newFunction('getResponseTime', function () {
46
+ return marshallToVm(res.getResponseTime(), vm);
47
+ });
48
+ vm.setProp(resObject, 'getResponseTime', getResponseTime);
49
+ getResponseTime.dispose();
50
+
51
+ vm.setProp(vm.global, 'res', resObject);
52
+ resObject.dispose();
53
+ };
54
+
55
+ module.exports = addBrunoResponseShimToContext;
@@ -0,0 +1,46 @@
1
+ const addConsoleShimToContext = (vm, console) => {
2
+ if (!console) return;
3
+
4
+ const consoleHandle = vm.newObject();
5
+
6
+ const logHandle = vm.newFunction('log', (...args) => {
7
+ const nativeArgs = args.map(vm.dump);
8
+ console?.log?.(...nativeArgs);
9
+ });
10
+
11
+ const debugHandle = vm.newFunction('debug', (...args) => {
12
+ const nativeArgs = args.map(vm.dump);
13
+ console?.debug?.(...nativeArgs);
14
+ });
15
+
16
+ const infoHandle = vm.newFunction('info', (...args) => {
17
+ const nativeArgs = args.map(vm.dump);
18
+ console?.info?.(...nativeArgs);
19
+ });
20
+
21
+ const warnHandle = vm.newFunction('warn', (...args) => {
22
+ const nativeArgs = args.map(vm.dump);
23
+ console?.warn?.(...nativeArgs);
24
+ });
25
+
26
+ const errorHandle = vm.newFunction('error', (...args) => {
27
+ const nativeArgs = args.map(vm.dump);
28
+ console?.error?.(...nativeArgs);
29
+ });
30
+
31
+ vm.setProp(consoleHandle, 'log', logHandle);
32
+ vm.setProp(consoleHandle, 'debug', debugHandle);
33
+ vm.setProp(consoleHandle, 'info', infoHandle);
34
+ vm.setProp(consoleHandle, 'warn', warnHandle);
35
+ vm.setProp(consoleHandle, 'error', errorHandle);
36
+
37
+ vm.setProp(vm.global, 'console', consoleHandle);
38
+ consoleHandle.dispose();
39
+ logHandle.dispose();
40
+ debugHandle.dispose();
41
+ infoHandle.dispose();
42
+ warnHandle.dispose();
43
+ errorHandle.dispose();
44
+ };
45
+
46
+ module.exports = addConsoleShimToContext;
@@ -0,0 +1,72 @@
1
+ const axios = require('axios');
2
+ const { cleanJson } = require('../../../../utils');
3
+ const { marshallToVm } = require('../../utils');
4
+
5
+ const methods = ['get', 'post', 'put', 'patch', 'delete'];
6
+
7
+ const addAxiosShimToContext = async (vm) => {
8
+ methods?.forEach((method) => {
9
+ const axiosHandle = vm.newFunction(method, (...args) => {
10
+ const nativeArgs = args.map(vm.dump);
11
+ const promise = vm.newPromise();
12
+ axios[method](...nativeArgs)
13
+ .then((response) => {
14
+ const { status, headers, data } = response || {};
15
+ promise.resolve(marshallToVm(cleanJson({ status, headers, data }), vm));
16
+ })
17
+ .catch((err) => {
18
+ promise.resolve(
19
+ marshallToVm(
20
+ cleanJson({
21
+ message: err.message
22
+ }),
23
+ vm
24
+ )
25
+ );
26
+ });
27
+ promise.settled.then(vm.runtime.executePendingJobs);
28
+ return promise.handle;
29
+ });
30
+ axiosHandle.consume((handle) => vm.setProp(vm.global, `__bruno__axios__${method}`, handle));
31
+ });
32
+
33
+ const axiosHandle = vm.newFunction('axios', (...args) => {
34
+ const nativeArgs = args.map(vm.dump);
35
+ const promise = vm.newPromise();
36
+ axios(...nativeArgs)
37
+ .then((response) => {
38
+ const { status, headers, data } = response || {};
39
+ promise.resolve(marshallToVm(cleanJson({ status, headers, data }), vm));
40
+ })
41
+ .catch((err) => {
42
+ promise.resolve(
43
+ marshallToVm(
44
+ cleanJson({
45
+ message: err.message
46
+ }),
47
+ vm
48
+ )
49
+ );
50
+ });
51
+ promise.settled.then(vm.runtime.executePendingJobs);
52
+ return promise.handle;
53
+ });
54
+ axiosHandle.consume((handle) => vm.setProp(vm.global, `__bruno__axios`, handle));
55
+
56
+ vm.evalCode(
57
+ `
58
+ globalThis.axios = __bruno__axios;
59
+ ${methods
60
+ ?.map((method) => {
61
+ return `globalThis.axios.${method} = __bruno__axios__${method};`;
62
+ })
63
+ ?.join('\n')}
64
+ globalThis.requireObject = {
65
+ ...globalThis.requireObject,
66
+ axios: globalThis.axios,
67
+ }
68
+ `
69
+ );
70
+ };
71
+
72
+ module.exports = addAxiosShimToContext;
@@ -0,0 +1,13 @@
1
+ const addAxiosShimToContext = require('./axios');
2
+ const addNanoidShimToContext = require('./nanoid');
3
+ const addPathShimToContext = require('./path');
4
+ const addUuidShimToContext = require('./uuid');
5
+
6
+ const addLibraryShimsToContext = async (vm) => {
7
+ await addNanoidShimToContext(vm);
8
+ await addAxiosShimToContext(vm);
9
+ await addUuidShimToContext(vm);
10
+ await addPathShimToContext(vm);
11
+ };
12
+
13
+ module.exports = addLibraryShimsToContext;
@@ -0,0 +1,24 @@
1
+ const { nanoid } = require('nanoid');
2
+ const { marshallToVm } = require('../../utils');
3
+
4
+ const addNanoidShimToContext = async (vm) => {
5
+ let _nanoid = vm.newFunction('nanoid', function () {
6
+ let v = nanoid();
7
+ return marshallToVm(v, vm);
8
+ });
9
+ vm.setProp(vm.global, '__bruno__nanoid', _nanoid);
10
+ _nanoid.dispose();
11
+
12
+ vm.evalCode(
13
+ `
14
+ globalThis.nanoid = {};
15
+ globalThis.nanoid.nanoid = globalThis.__bruno__nanoid;
16
+ globalThis.requireObject = {
17
+ ...globalThis.requireObject,
18
+ 'nanoid': globalThis.nanoid
19
+ }
20
+ `
21
+ );
22
+ };
23
+
24
+ module.exports = addNanoidShimToContext;