use Function instead of eval

- fixes scope issues (e.g. seq duplication)
- should be much safer and much faster
This commit is contained in:
Felix Roos 2022-05-15 00:35:17 +02:00
parent 1cbf4c8c7e
commit 273cb81da0

View File

@ -15,9 +15,13 @@ export const extend = (...args) => {
Object.assign(globalThis, ...args);
};
function safeEval(str) {
return Function('"use strict";return (' + str + ')')();
}
export const evaluate = async (code) => {
const shapeshifted = shapeshifter(code); // transform syntactically correct js code to semantically usable code
let evaluated = await eval(shapeshifted);
let evaluated = await safeEval(shapeshifted);
if (!isPattern(evaluated)) {
console.log('evaluated', evaluated);
const message = `got "${typeof evaluated}" instead of pattern`;