import isStr from 'licia/isStr';
import copy from 'licia/copy';
import keys from 'licia/keys';
import each from 'licia/each';
const global: any = {
copy(value: any) {
debugger;
if (!isStr(value)) value = JSON.stringify(value, null, 2);
copy(value);
},
keys: (args) => {
debugger;
return keys(args);
},
};
declare const window: any;
function injectGlobal() {
each(global, (val, name) => {
if (window[name]) return;
window[name] = val;
});
}
function clearGlobal() {
each(global, (val, name) => {
if (window[name] && window[name] === val) {
delete window[name];
}
});
}
export function setGlobal(name: string, val: any) {
global[name] = val;
}
export default function evaluate(expression: string) {
let ret;
injectGlobal();
try {
ret = eval.call(window, `(${expression})`);
} catch (e) {
ret = eval.call(window, expression);
}
clearGlobal();
return ret;
}