const fnCache: { [key: string]: any } = {} function scriptValue(input: string, args: { [key: string]: any }): Function { let params: string[] = [] let vals: any[] = [] for (let k in args) { params.push(k) vals.push(args[k]) } let keys = params.join(',') let fnKey = keys + input if (!fnCache[fnKey]) { fnCache[fnKey] = Function( '"use strict";return (function(' + keys + '){ return ' + input + '})', )() } try { return fnCache[fnKey](...vals) } catch (e) { console.error( `scriptValue error: '${e}' in expression: '${input}' with ctx: '${JSON.stringify( args, )}'`, ) } }