UNPKG

dmn-processor

Version:

Evaluation of DMN 1.3 decision tables, limited to S-FEEL (Simple Friendly Enough Expression Language)

43 lines (36 loc) 1.14 kB
/* * * ©2016-2017 EdgeVerve Systems Limited (a fully owned Infosys subsidiary), * Bangalore, India. All Rights Reserved. * */ const vm = require('vm'); const callback = (resolve, reject) => (err, res) => { if (err) { reject(err); } else { resolve(res); } }; const execute = (script, payload, done) => { const sandbox = { ...payload }; sandbox.done = done; script.runInNewContext(sandbox); }; const prepareDependencies = (dependencies) => { const requireObj = {}; dependencies.forEach((dependency) => { Object.keys(dependency).forEach((key) => { requireObj[key] = require(dependency[key]); // eslint-disable-line }); }); return requireObj; }; const externalFn = (bodyMeta) => ((code, dependencies) => { const script = new vm.Script(code); const reqdLibs = { ...prepareDependencies(dependencies), ...global }; return (payload, done) => execute(script, { ...reqdLibs, ...payload }, done); })(bodyMeta.js.signature || '', bodyMeta.js.dependencies || []); module.exports = (ctx, bodyMeta) => new Promise((resolve, reject) => { externalFn(bodyMeta)(ctx, callback(resolve, reject)); });