UNPKG

drip-table

Version:

A tiny and powerful enterprise-class solution for building tables.

62 lines (50 loc) 1.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createEvaluator = void 0; /** * This file is part of the drip-table project. * @link : https://drip-table.jd.com/ * @author : Emil Zhai (root@derzh.com) * @modifier : Emil Zhai (root@derzh.com) * @copyright: Copyright (c) 2021 JD Network Technology Co., Ltd. */ /** * 执行器缓存,优化性能 */ var evaluatorCache = new Map(); var timerEvaluatorGC = 0; var evaluatorGC = function evaluatorGC() { evaluatorCache.clear(); }; var resetEvaluatorGC = function resetEvaluatorGC() { if (timerEvaluatorGC) { window.clearTimeout(timerEvaluatorGC); } timerEvaluatorGC = window.setTimeout(evaluatorGC, 2000); }; /** * 通过 JavaScript 代码字符串创建函数 * * @param script JavaScript 代码段 * @param contextKeys 执行上下文变量名 * @returns 创建的函数 * @throws Error 创建异常 */ var createEvaluator = function createEvaluator(script) { var contextKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var key = script + JSON.stringify(contextKeys); var evaluator = evaluatorCache.has(key) ? evaluatorCache.get(key) : void 0; if (!evaluator) { // 包裹二阶函数,用于兼容微前端 script = "return function(".concat(contextKeys.join(', '), ") { ").concat(script, "\n}"); evaluator = new Function('window', script)(window); if (evaluator) { evaluatorCache.set(key, evaluator); } } resetEvaluatorGC(); return evaluator; }; exports.createEvaluator = createEvaluator;