import * as _ from 'lodash'; import {evaluation} from './evaluation'; import {filter} from '../util/filter'; /** * 安全运行沙箱 * * @param {string} code * @param {Object} context * @returns {any} */ export function runInContext(code: string, context: Object) { if (!_.isPlainObject(context)) { throw new TypeError('context argument must be an object'); } if (!code) { throw new TypeError('code must be a evaluable string'); } injectFilterIntoContext(context); return evaluation('(' + code + ')', context); } /** * 把RCRE的filter函数变量注入到context中 * * @param {Object} context */ export function injectFilterIntoContext(context: Object) { let filterNames = filter.getAllFilterName(); let next = filterNames.next(); while (!next.done) { let funcName = next.value; context[funcName] = filter.getFilter(funcName); next = filterNames.next(); } }