UNPKG

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
'use strict'; /* * * ©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)); }); };