mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-27 06:43:19 +08:00
37 lines
963 B
JavaScript
37 lines
963 B
JavaScript
// @disallow-code-generation
|
|
// The probe packages ship (zod 4's allowsEval): an aliased Function
|
|
// constructor inside try/catch decides between a generated fast path and
|
|
// an interpreted fallback. Arguments convert to strings before the
|
|
// refusal, calling an object's toString.
|
|
const F = Function;
|
|
function allowsEval() {
|
|
try {
|
|
new F("");
|
|
return true;
|
|
} catch (e) {
|
|
console.log("probe:", e.constructor === EvalError, e.message);
|
|
return false;
|
|
}
|
|
}
|
|
const parse = allowsEval()
|
|
? new F("input", "return input.trim()")
|
|
: (input) => input.trim();
|
|
console.log(JSON.stringify(parse(" value ")));
|
|
|
|
try {
|
|
new Function({ toString() { console.log("toString called"); return "x"; } }, "return x");
|
|
} catch (e) {
|
|
console.log(String(e));
|
|
}
|
|
try {
|
|
eval({ toString() { console.log("never called"); return "1"; } });
|
|
} catch (e) {
|
|
console.log(String(e));
|
|
}
|
|
const indirect = eval;
|
|
try {
|
|
indirect("1");
|
|
} catch (e) {
|
|
console.log(e.name);
|
|
}
|