UNPKG

js-executor-cg-lib

Version:

Library to execute javascript code

91 lines (80 loc) 2.08 kB
const vm = require('vm'); const co = require('co'); const convert = require('xml-js'); const Cryptr = require('cryptr'); const lodash = require('lodash'); const { api, objectApiOpt, objectApiReq } = require('api-cg-lib'); const { utils, log } = require('utils-limited'); /** * * @param properties * @returns {Promise<Object>} */ let finalResult; function wait(timeout) { return new Promise((ok) => { setTimeout(() => { console.log('Done wait'); ok(); }, timeout); console.log('Start wait sec=%s', timeout); }); } const transformJsExecutor = async (properties, data) => { let arguments = data; const vmExports = {}; const ctx = vm.createContext({ // Node Globals Buffer, clearInterval, clearTimeout, console, exports: vmExports, global: {}, module: { exports: vmExports }, process, require, setInterval, setTimeout, URL, URLSearchParams, arguments, // Other Libraries convert, Cryptr, lodash, utils, log, api, objectApiOpt, objectApiReq, wait: wait.bind(this), }); //console.log('my properties '+properties); let code = `async function run(arguments){${properties.code}}`; vm.runInContext(code, ctx, { displayErrors: true, }); if (ctx.run && typeof ctx.run.apply === 'function') { let result; if (ctx.run.constructor.name === 'GeneratorFunction') { const fn = co.wrap(ctx.run); result = fn.apply(this, [arguments]); } else { result = ctx.run.apply(this, [arguments]); } if (typeof result === 'object' && typeof result.then === 'function') { let returnResult; try { returnResult = await result; // console.log('aqui imprimiendo el result ed ale '+returnResult); return returnResult; } catch (e) { throw Error(e); } } } else { return ("Run function was not found, it's over now"); } }; module.exports = { transformJsExecutor };