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
JavaScript
/*
*
* ©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));
});