diff --git a/packages/bruno-js/src/runtime/script-runtime.js b/packages/bruno-js/src/runtime/script-runtime.js index ac9d954a0..9f4871ae6 100644 --- a/packages/bruno-js/src/runtime/script-runtime.js +++ b/packages/bruno-js/src/runtime/script-runtime.js @@ -10,6 +10,7 @@ const punycode = require('punycode'); const Bru = require('../bru'); const BrunoRequest = require('../bruno-request'); const BrunoResponse = require('../bruno-response'); +const { cleanJson } = require('../utils'); // Inbuilt Library Support const atob = require('atob'); @@ -37,7 +38,7 @@ class ScriptRuntime { if (onConsoleLog && typeof onConsoleLog === 'function') { const customLogger = (type) => { return (...args) => { - onConsoleLog(type, args); + onConsoleLog(type, cleanJson(args)); }; }; context.console = { @@ -81,8 +82,8 @@ class ScriptRuntime { await asyncVM(); return { request, - envVariables, - collectionVariables + envVariables: cleanJson(envVariables), + collectionVariables: cleanJson(collectionVariables) }; } @@ -100,7 +101,7 @@ class ScriptRuntime { if (onConsoleLog && typeof onConsoleLog === 'function') { const customLogger = (type) => { return (...args) => { - onConsoleLog(type, args); + onConsoleLog(type, cleanJson(args)); }; }; context.console = { @@ -136,8 +137,8 @@ class ScriptRuntime { return { response, - envVariables, - collectionVariables + envVariables: cleanJson(envVariables), + collectionVariables: cleanJson(collectionVariables) }; } } diff --git a/packages/bruno-js/src/runtime/test-runtime.js b/packages/bruno-js/src/runtime/test-runtime.js index 323a001ab..427506524 100644 --- a/packages/bruno-js/src/runtime/test-runtime.js +++ b/packages/bruno-js/src/runtime/test-runtime.js @@ -6,6 +6,7 @@ const BrunoRequest = require('../bruno-request'); const BrunoResponse = require('../bruno-response'); const Test = require('../test'); const TestResults = require('../test-results'); +const { cleanJson } = require('../utils'); // Inbuilt Library Support const atob = require('atob'); @@ -49,7 +50,7 @@ class TestRuntime { if (onConsoleLog && typeof onConsoleLog === 'function') { const customLogger = (type) => { return (...args) => { - onConsoleLog(type, args); + onConsoleLog(type, cleanJson(args)); }; }; context.console = { @@ -82,9 +83,9 @@ class TestRuntime { return { request, - envVariables, - collectionVariables, - results: __brunoTestResults.getResults() + envVariables: cleanJson(envVariables), + collectionVariables: cleanJson(collectionVariables), + results: cleanJson(__brunoTestResults.getResults()) }; } } diff --git a/packages/bruno-js/src/utils.js b/packages/bruno-js/src/utils.js index a1ba5a7ed..aca101962 100644 --- a/packages/bruno-js/src/utils.js +++ b/packages/bruno-js/src/utils.js @@ -118,9 +118,28 @@ const createResponseParser = (response = {}) => { return res; }; +/** + * Objects that are created inside vm2 execution context result in an serilaization error when sent to the renderer process + * Error sending from webFrameMain: Error: Failed to serialize arguments + * at s.send (node:electron/js2c/browser_init:169:631) + * at g.send (node:electron/js2c/browser_init:165:2156) + * How to reproduce + * Remove the cleanJson fix and execute the below post response script + * bru.setVar("a", {b:3}); + * Todo: Find a better fix + */ +const cleanJson = (data) => { + try { + return JSON.parse(JSON.stringify(data)); + } catch (e) { + return data; + } +}; + module.exports = { evaluateJsExpression, evaluateJsTemplateLiteral, createResponseParser, - internalExpressionCache + internalExpressionCache, + cleanJson };