dmn-eval-js-es5
Version:
Evaluation of DMN 1.1 decision tables, limited to S-FEEL (Simple Friendly Enough Expression Language), es5 browser compatible
52 lines (45 loc) • 1.36 kB
JavaScript
;
/*
*
* ©2016-2017 EdgeVerve Systems Limited (a fully owned Infosys subsidiary),
* Bangalore, India. All Rights Reserved.
*
*/
var vm = require('vm');
var callback = function callback(resolve, reject) {
return function (err, res) {
if (err) {
reject(err);
} else {
resolve(res);
}
};
};
var execute = function execute(script, payload, done) {
var sandbox = Object.assign({}, payload);
sandbox.done = done;
script.runInNewContext(sandbox);
};
var prepareDependencies = function prepareDependencies(dependencies) {
var requireObj = {};
dependencies.forEach(function (dependency) {
Object.keys(dependency).forEach(function (key) {
requireObj[key] = require(dependency[key]); // eslint-disable-line
});
});
return requireObj;
};
var externalFn = function externalFn(bodyMeta) {
return function (code, dependencies) {
var script = new vm.Script(code);
var reqdLibs = Object.assign({}, prepareDependencies(dependencies), global);
return function (payload, done) {
return execute(script, Object.assign({}, reqdLibs, payload), done);
};
}(bodyMeta.js.signature || '', bodyMeta.js.dependencies || []);
};
module.exports = function (ctx, bodyMeta) {
return new Promise(function (resolve, reject) {
externalFn(bodyMeta)(ctx, callback(resolve, reject));
});
};