@cuxt/sandboxjs 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +198 -185
- package/{build → dist/cjs}/Sandbox.d.ts +15 -6
- package/dist/cjs/Sandbox.js +126 -0
- package/dist/{SandboxExec.d.ts → cjs/SandboxExec.d.ts} +8 -17
- package/dist/cjs/SandboxExec.js +227 -0
- package/{build/eval.d.ts → dist/cjs/eval/index.d.ts} +10 -2
- package/dist/cjs/eval/index.js +233 -0
- package/dist/cjs/executor/executorUtils.d.ts +161 -0
- package/dist/cjs/executor/executorUtils.js +930 -0
- package/dist/cjs/executor/index.d.ts +1 -0
- package/dist/cjs/executor/index.js +2 -0
- package/dist/cjs/executor/ops/assignment.d.ts +1 -0
- package/dist/cjs/executor/ops/assignment.js +88 -0
- package/dist/cjs/executor/ops/call.d.ts +1 -0
- package/dist/cjs/executor/ops/call.js +160 -0
- package/dist/cjs/executor/ops/comparison.d.ts +1 -0
- package/dist/cjs/executor/ops/comparison.js +36 -0
- package/dist/cjs/executor/ops/control.d.ts +1 -0
- package/dist/cjs/executor/ops/control.js +203 -0
- package/dist/cjs/executor/ops/functions.d.ts +1 -0
- package/dist/cjs/executor/ops/functions.js +55 -0
- package/dist/cjs/executor/ops/index.d.ts +0 -0
- package/dist/cjs/executor/ops/index.js +11 -0
- package/dist/cjs/executor/ops/literals.d.ts +1 -0
- package/dist/cjs/executor/ops/literals.js +45 -0
- package/dist/cjs/executor/ops/misc.d.ts +1 -0
- package/dist/cjs/executor/ops/misc.js +25 -0
- package/dist/cjs/executor/ops/object.d.ts +1 -0
- package/dist/cjs/executor/ops/object.js +51 -0
- package/dist/cjs/executor/ops/prop.d.ts +1 -0
- package/dist/cjs/executor/ops/prop.js +70 -0
- package/dist/cjs/executor/ops/unary.d.ts +1 -0
- package/dist/cjs/executor/ops/unary.js +48 -0
- package/dist/cjs/executor/ops/variables.d.ts +1 -0
- package/dist/cjs/executor/ops/variables.js +16 -0
- package/dist/cjs/executor/opsRegistry.d.ts +33 -0
- package/dist/cjs/executor/opsRegistry.js +8 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/parser/index.d.ts +3 -0
- package/dist/cjs/parser/index.js +1 -0
- package/dist/{parser.d.ts → cjs/parser/lisp.d.ts} +29 -42
- package/dist/cjs/parser/lispTypes/conditionals.d.ts +2 -0
- package/dist/cjs/parser/lispTypes/conditionals.js +135 -0
- package/dist/cjs/parser/lispTypes/control.d.ts +2 -0
- package/dist/cjs/parser/lispTypes/control.js +204 -0
- package/dist/cjs/parser/lispTypes/declarations.d.ts +2 -0
- package/dist/cjs/parser/lispTypes/declarations.js +99 -0
- package/dist/cjs/parser/lispTypes/index.d.ts +3 -0
- package/dist/cjs/parser/lispTypes/index.js +17 -0
- package/dist/cjs/parser/lispTypes/operators.d.ts +2 -0
- package/dist/cjs/parser/lispTypes/operators.js +252 -0
- package/dist/cjs/parser/lispTypes/shared.d.ts +38 -0
- package/dist/cjs/parser/lispTypes/structures.d.ts +2 -0
- package/dist/cjs/parser/lispTypes/structures.js +188 -0
- package/dist/cjs/parser/lispTypes/values.d.ts +2 -0
- package/dist/cjs/parser/lispTypes/values.js +89 -0
- package/dist/cjs/parser/parserUtils.d.ts +34 -0
- package/dist/cjs/parser/parserUtils.js +968 -0
- package/dist/cjs/utils/CodeString.d.ts +16 -0
- package/dist/cjs/utils/CodeString.js +64 -0
- package/dist/cjs/utils/ExecContext.d.ts +34 -0
- package/dist/cjs/utils/ExecContext.js +171 -0
- package/dist/cjs/utils/Prop.d.ts +16 -0
- package/dist/cjs/utils/Prop.js +81 -0
- package/dist/cjs/utils/Scope.d.ts +47 -0
- package/dist/cjs/utils/Scope.js +127 -0
- package/dist/cjs/utils/errors.d.ts +10 -0
- package/dist/cjs/utils/errors.js +12 -0
- package/dist/cjs/utils/functionReplacements.d.ts +11 -0
- package/dist/cjs/utils/functionReplacements.js +362 -0
- package/dist/cjs/utils/index.d.ts +7 -0
- package/dist/cjs/utils/index.js +7 -0
- package/dist/cjs/utils/types.d.ts +221 -0
- package/dist/cjs/utils/types.js +164 -0
- package/dist/cjs/utils/unraw.js +145 -0
- package/dist/{node → esm}/Sandbox.d.ts +15 -6
- package/dist/esm/Sandbox.js +115 -0
- package/dist/esm/Sandbox.js.map +1 -0
- package/{build → dist/esm}/SandboxExec.d.ts +8 -17
- package/dist/esm/SandboxExec.js +224 -0
- package/dist/esm/SandboxExec.js.map +1 -0
- package/dist/{eval.d.ts → esm/eval/index.d.ts} +10 -2
- package/dist/esm/eval/index.js +235 -0
- package/dist/esm/eval/index.js.map +1 -0
- package/dist/esm/executor/executorUtils.d.ts +161 -0
- package/dist/esm/executor/executorUtils.js +898 -0
- package/dist/esm/executor/executorUtils.js.map +1 -0
- package/dist/esm/executor/index.d.ts +1 -0
- package/dist/esm/executor/index.js +2 -0
- package/dist/esm/executor/ops/assignment.d.ts +1 -0
- package/dist/esm/executor/ops/assignment.js +90 -0
- package/dist/esm/executor/ops/assignment.js.map +1 -0
- package/dist/esm/executor/ops/call.d.ts +1 -0
- package/dist/esm/executor/ops/call.js +162 -0
- package/dist/esm/executor/ops/call.js.map +1 -0
- package/dist/esm/executor/ops/comparison.d.ts +1 -0
- package/dist/esm/executor/ops/comparison.js +38 -0
- package/dist/esm/executor/ops/comparison.js.map +1 -0
- package/dist/esm/executor/ops/control.d.ts +1 -0
- package/dist/esm/executor/ops/control.js +205 -0
- package/dist/esm/executor/ops/control.js.map +1 -0
- package/dist/esm/executor/ops/functions.d.ts +1 -0
- package/dist/esm/executor/ops/functions.js +57 -0
- package/dist/esm/executor/ops/functions.js.map +1 -0
- package/dist/esm/executor/ops/index.d.ts +0 -0
- package/dist/esm/executor/ops/index.js +11 -0
- package/dist/esm/executor/ops/literals.d.ts +1 -0
- package/dist/esm/executor/ops/literals.js +47 -0
- package/dist/esm/executor/ops/literals.js.map +1 -0
- package/dist/esm/executor/ops/misc.d.ts +1 -0
- package/dist/esm/executor/ops/misc.js +27 -0
- package/dist/esm/executor/ops/misc.js.map +1 -0
- package/dist/esm/executor/ops/object.d.ts +1 -0
- package/dist/esm/executor/ops/object.js +53 -0
- package/dist/esm/executor/ops/object.js.map +1 -0
- package/dist/esm/executor/ops/prop.d.ts +1 -0
- package/dist/esm/executor/ops/prop.js +72 -0
- package/dist/esm/executor/ops/prop.js.map +1 -0
- package/dist/esm/executor/ops/unary.d.ts +1 -0
- package/dist/esm/executor/ops/unary.js +50 -0
- package/dist/esm/executor/ops/unary.js.map +1 -0
- package/dist/esm/executor/ops/variables.d.ts +1 -0
- package/dist/esm/executor/ops/variables.js +18 -0
- package/dist/esm/executor/ops/variables.js.map +1 -0
- package/dist/esm/executor/opsRegistry.d.ts +33 -0
- package/dist/esm/executor/opsRegistry.js +9 -0
- package/dist/esm/executor/opsRegistry.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/parser/index.d.ts +3 -0
- package/dist/esm/parser/index.js +1 -0
- package/{build/parser.d.ts → dist/esm/parser/lisp.d.ts} +29 -42
- package/dist/esm/parser/lispTypes/conditionals.d.ts +2 -0
- package/dist/esm/parser/lispTypes/conditionals.js +137 -0
- package/dist/esm/parser/lispTypes/conditionals.js.map +1 -0
- package/dist/esm/parser/lispTypes/control.d.ts +2 -0
- package/dist/esm/parser/lispTypes/control.js +206 -0
- package/dist/esm/parser/lispTypes/control.js.map +1 -0
- package/dist/esm/parser/lispTypes/declarations.d.ts +2 -0
- package/dist/esm/parser/lispTypes/declarations.js +101 -0
- package/dist/esm/parser/lispTypes/declarations.js.map +1 -0
- package/dist/esm/parser/lispTypes/index.d.ts +3 -0
- package/dist/esm/parser/lispTypes/index.js +19 -0
- package/dist/esm/parser/lispTypes/index.js.map +1 -0
- package/dist/esm/parser/lispTypes/operators.d.ts +2 -0
- package/dist/esm/parser/lispTypes/operators.js +254 -0
- package/dist/esm/parser/lispTypes/operators.js.map +1 -0
- package/dist/esm/parser/lispTypes/shared.d.ts +38 -0
- package/dist/esm/parser/lispTypes/structures.d.ts +2 -0
- package/dist/esm/parser/lispTypes/structures.js +190 -0
- package/dist/esm/parser/lispTypes/structures.js.map +1 -0
- package/dist/esm/parser/lispTypes/values.d.ts +2 -0
- package/dist/esm/parser/lispTypes/values.js +91 -0
- package/dist/esm/parser/lispTypes/values.js.map +1 -0
- package/dist/esm/parser/parserUtils.d.ts +34 -0
- package/dist/esm/parser/parserUtils.js +959 -0
- package/dist/esm/parser/parserUtils.js.map +1 -0
- package/dist/esm/utils/CodeString.d.ts +16 -0
- package/dist/esm/utils/CodeString.js +66 -0
- package/dist/esm/utils/CodeString.js.map +1 -0
- package/dist/esm/utils/ExecContext.d.ts +34 -0
- package/dist/esm/utils/ExecContext.js +168 -0
- package/dist/esm/utils/ExecContext.js.map +1 -0
- package/dist/esm/utils/Prop.d.ts +16 -0
- package/dist/esm/utils/Prop.js +80 -0
- package/dist/esm/utils/Prop.js.map +1 -0
- package/dist/esm/utils/Scope.d.ts +47 -0
- package/dist/esm/utils/Scope.js +122 -0
- package/dist/esm/utils/Scope.js.map +1 -0
- package/dist/esm/utils/errors.d.ts +10 -0
- package/dist/esm/utils/errors.js +10 -0
- package/dist/esm/utils/errors.js.map +1 -0
- package/dist/esm/utils/functionReplacements.d.ts +11 -0
- package/dist/esm/utils/functionReplacements.js +361 -0
- package/dist/esm/utils/functionReplacements.js.map +1 -0
- package/dist/esm/utils/index.d.ts +7 -0
- package/dist/esm/utils/index.js +7 -0
- package/dist/esm/utils/types.d.ts +221 -0
- package/dist/esm/utils/types.js +160 -0
- package/dist/esm/utils/types.js.map +1 -0
- package/dist/esm/utils/unraw.js +147 -0
- package/dist/esm/utils/unraw.js.map +1 -0
- package/dist/umd/Sandbox.min.js +2 -0
- package/dist/umd/Sandbox.min.js.map +1 -0
- package/dist/umd/SandboxExec.min.js +2 -0
- package/dist/umd/SandboxExec.min.js.map +1 -0
- package/package.json +11 -9
- package/build/Sandbox.js +0 -62
- package/build/SandboxExec.js +0 -214
- package/build/eval.js +0 -205
- package/build/executor.d.ts +0 -124
- package/build/executor.js +0 -1554
- package/build/parser.js +0 -1527
- package/build/unraw.js +0 -168
- package/build/utils.d.ts +0 -264
- package/build/utils.js +0 -362
- package/dist/Sandbox.d.ts +0 -25
- package/dist/Sandbox.js +0 -270
- package/dist/Sandbox.js.map +0 -1
- package/dist/Sandbox.min.js +0 -2
- package/dist/Sandbox.min.js.map +0 -1
- package/dist/SandboxExec.js +0 -218
- package/dist/SandboxExec.js.map +0 -1
- package/dist/SandboxExec.min.js +0 -2
- package/dist/SandboxExec.min.js.map +0 -1
- package/dist/executor.d.ts +0 -124
- package/dist/executor.js +0 -1558
- package/dist/executor.js.map +0 -1
- package/dist/node/Sandbox.js +0 -277
- package/dist/node/SandboxExec.d.ts +0 -66
- package/dist/node/SandboxExec.js +0 -225
- package/dist/node/eval.d.ts +0 -27
- package/dist/node/executor.d.ts +0 -124
- package/dist/node/executor.js +0 -1575
- package/dist/node/parser.d.ts +0 -154
- package/dist/node/parser.js +0 -1704
- package/dist/node/utils.d.ts +0 -264
- package/dist/node/utils.js +0 -385
- package/dist/parser.js +0 -1690
- package/dist/parser.js.map +0 -1
- package/dist/unraw.d.ts +0 -11
- package/dist/utils.d.ts +0 -264
- package/dist/utils.js +0 -365
- package/dist/utils.js.map +0 -1
- /package/{build → dist/cjs/utils}/unraw.d.ts +0 -0
- /package/dist/{node → esm/utils}/unraw.d.ts +0 -0
package/dist/executor.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sources":["../src/executor.ts"],"sourcesContent":["import { LispItem, Lisp, IRegEx, SwitchCase } from './parser.js';\nimport {\n CodeString,\n hasOwnProperty,\n IAuditReport,\n IExecContext,\n IScope,\n isLisp,\n LispType,\n LocalScope,\n Prop,\n SandboxExecutionQuotaExceededError,\n SandboxError,\n SandboxExecutionTreeError,\n Scope,\n Ticks,\n VarType,\n SandboxCapabilityError,\n SandboxAccessError,\n} from './utils.js';\n\nexport type Done<T = any> = (err?: any, res?: T | typeof optional) => void;\n\nexport class ExecReturn<T> {\n constructor(\n public auditReport: IAuditReport | undefined,\n public result: T,\n public returned: boolean,\n public breakLoop = false,\n public continueLoop = false,\n ) {}\n}\n\nexport type Unknown = undefined | null | Record<string | number, unknown>;\n\nexport interface IChange {\n type: string;\n}\n\nexport interface ICreate extends IChange {\n type: 'create';\n prop: number | string;\n}\n\nexport interface IReplace extends IChange {\n type: 'replace';\n}\n\nexport interface IDelete extends IChange {\n type: 'delete';\n prop: number | string;\n}\n\nexport interface IReverse extends IChange {\n type: 'reverse';\n}\n\nexport interface ISort extends IChange {\n type: 'sort';\n}\n\nexport interface IPush extends IChange {\n type: 'push';\n added: unknown[];\n}\n\nexport interface IPop extends IChange {\n type: 'pop';\n removed: unknown[];\n}\n\nexport interface IShift extends IChange {\n type: 'shift';\n removed: unknown[];\n}\n\nexport interface IUnShift extends IChange {\n type: 'unshift';\n added: unknown[];\n}\n\nexport interface ISplice extends IChange {\n type: 'splice';\n startIndex: number;\n deleteCount: number;\n added: unknown[];\n removed: unknown[];\n}\n\nexport interface ICopyWithin extends IChange {\n type: 'copyWithin';\n startIndex: number;\n endIndex: number;\n added: unknown[];\n removed: unknown[];\n}\n\nexport type Change =\n | ICreate\n | IReplace\n | IDelete\n | IReverse\n | ISort\n | IPush\n | IPop\n | IUnShift\n | IShift\n | ISplice\n | ICopyWithin;\n\nconst optional = {};\n\nfunction generateArgs(argNames: string[], args: unknown[]) {\n const vars: Record<string, unknown> = {};\n argNames.forEach((arg, i) => {\n if (arg.startsWith('...')) {\n vars[arg.substring(3)] = args.slice(i);\n } else {\n vars[arg] = args[i];\n }\n });\n return vars;\n}\n\nexport function createFunction(\n argNames: string[],\n parsed: Lisp[],\n ticks: Ticks,\n context: IExecContext,\n scope?: Scope,\n name?: string,\n) {\n if (context.ctx.options.forbidFunctionCreation) {\n throw new SandboxCapabilityError('Function creation is forbidden');\n }\n let func;\n if (name === undefined) {\n func = (...args: unknown[]) => {\n const vars = generateArgs(argNames, args);\n const res = executeTree(\n ticks,\n context,\n parsed,\n scope === undefined ? [] : [new Scope(scope, vars)],\n );\n return res.result;\n };\n } else {\n func = function sandboxedObject(this: Unknown, ...args: unknown[]) {\n const vars = generateArgs(argNames, args);\n const res = executeTree(\n ticks,\n context,\n parsed,\n scope === undefined ? [] : [new Scope(scope, vars, this)],\n );\n return res.result;\n };\n }\n context.registerSandboxFunction(func);\n context.ctx.sandboxedFunctions.add(func);\n return func;\n}\n\nexport function createFunctionAsync(\n argNames: string[],\n parsed: Lisp[],\n ticks: Ticks,\n context: IExecContext,\n scope?: Scope,\n name?: string,\n) {\n if (context.ctx.options.forbidFunctionCreation) {\n throw new SandboxCapabilityError('Function creation is forbidden');\n }\n if (!context.ctx.prototypeWhitelist?.has(Promise.prototype)) {\n throw new SandboxCapabilityError('Async/await not permitted');\n }\n let func;\n if (name === undefined) {\n func = async (...args: unknown[]) => {\n const vars = generateArgs(argNames, args);\n const res = await executeTreeAsync(\n ticks,\n context,\n parsed,\n scope === undefined ? [] : [new Scope(scope, vars)],\n );\n return res.result;\n };\n } else {\n func = async function sandboxedObject(this: Unknown, ...args: unknown[]) {\n const vars = generateArgs(argNames, args);\n const res = await executeTreeAsync(\n ticks,\n context,\n parsed,\n scope === undefined ? [] : [new Scope(scope, vars, this)],\n );\n return res.result;\n };\n }\n context.registerSandboxFunction(func);\n context.ctx.sandboxedFunctions.add(func);\n return func;\n}\n\nexport function assignCheck(obj: Prop, context: IExecContext, op = 'assign') {\n if (obj.context === undefined) {\n throw new ReferenceError(`Cannot ${op} value to undefined.`);\n }\n if (obj.isConst) {\n throw new TypeError(`Assignment to constant variable.`);\n }\n if (obj.isGlobal) {\n throw new SandboxAccessError(\n `Cannot ${op} property '${obj.prop.toString()}' of a global object`,\n );\n }\n if (obj.context === null) {\n throw new TypeError('Cannot set properties of null');\n }\n if (\n typeof (obj.context as any)[obj.prop] === 'function' &&\n !hasOwnProperty(obj.context, obj.prop)\n ) {\n throw new SandboxAccessError(\n `Override prototype property '${obj.prop.toString()}' not allowed`,\n );\n }\n if (op === 'delete') {\n if (hasOwnProperty(obj.context, obj.prop)) {\n context.changeSubscriptions\n .get(obj.context)\n ?.forEach((cb) => cb({ type: 'delete', prop: obj.prop.toString() }));\n context.changeSubscriptionsGlobal\n .get(obj.context)\n ?.forEach((cb) => cb({ type: 'delete', prop: obj.prop.toString() }));\n }\n } else if (hasOwnProperty(obj.context, obj.prop)) {\n context.setSubscriptions\n .get(obj.context)\n ?.get(obj.prop.toString())\n ?.forEach((cb) =>\n cb({\n type: 'replace',\n }),\n );\n context.setSubscriptionsGlobal\n .get(obj.context)\n ?.get(obj.prop.toString())\n ?.forEach((cb) =>\n cb({\n type: 'replace',\n }),\n );\n } else {\n context.changeSubscriptions\n .get(obj.context)\n ?.forEach((cb) => cb({ type: 'create', prop: obj.prop.toString() }));\n context.changeSubscriptionsGlobal\n .get(obj.context)\n ?.forEach((cb) => cb({ type: 'create', prop: obj.prop.toString() }));\n }\n}\nconst arrayChange = new Set([\n [].push,\n [].pop,\n [].shift,\n [].unshift,\n [].splice,\n [].reverse,\n [].sort,\n [].copyWithin,\n]);\n\nexport class KeyVal {\n constructor(\n public key: string | SpreadObject,\n public val: unknown,\n ) {}\n}\n\nexport class SpreadObject {\n constructor(public item: { [key: string]: unknown }) {}\n}\n\nexport class SpreadArray {\n constructor(public item: unknown[]) {}\n}\n\nexport class If {\n constructor(\n public t: Lisp,\n public f: Lisp,\n ) {}\n}\n\nconst literalRegex = /(\\$\\$)*(\\$)?\\${(\\d+)}/g;\ntype OpCallback<a, b, obj, bobj> = (params: OpsCallbackParams<a, b, obj, bobj>) => void;\n\nexport const ops = new Map<LispType, OpCallback<any, any, any, any>>();\nexport function addOps<a = unknown, b = unknown, obj = unknown, bobj = unknown>(\n type: LispType,\n cb: OpCallback<a, b, obj, bobj>,\n) {\n ops.set(type, cb);\n}\n\nconst prorptyKeyTypes = ['string', 'number', 'symbol'];\n\nfunction isPropertyKey(val: unknown): val is PropertyKey {\n return prorptyKeyTypes.includes(typeof val);\n}\n\nfunction hasPossibleProperties(val: unknown): val is {} {\n return val !== null && val !== undefined;\n}\n\naddOps<unknown, PropertyKey>(LispType.Prop, ({ done, a, b, obj, context, scope }) => {\n if (a === null) {\n throw new TypeError(`Cannot read properties of null (reading '${b?.toString()}')`);\n }\n\n if (!isPropertyKey(b)) {\n b = `${b}`;\n }\n\n if (a === undefined && obj === undefined && typeof b === 'string') {\n // is variable access\n const prop = scope.get(b);\n if (prop.context === context.ctx.sandboxGlobal) {\n if (context.ctx.options.audit) {\n context.ctx.auditReport?.globalsAccess.add(b);\n }\n }\n const val = prop.context ? (prop.context as any)[prop.prop] : undefined;\n const p = getGlobalProp(val, context, prop) || prop;\n\n done(undefined, p);\n return;\n } else if (a === undefined) {\n throw new TypeError(`Cannot read properties of undefined (reading '${b.toString()}')`);\n }\n\n if (!hasPossibleProperties(a)) {\n done(undefined, new Prop(undefined, b));\n return;\n }\n\n const prototypeAccess = typeof a === 'function' || !hasOwnProperty(a, b);\n\n if (context.ctx.options.audit && prototypeAccess) {\n let prot: {} = Object.getPrototypeOf(a);\n do {\n if (hasOwnProperty(prot, b)) {\n if (\n context.ctx.auditReport &&\n !context.ctx.auditReport.prototypeAccess[prot.constructor.name]\n ) {\n context.ctx.auditReport.prototypeAccess[prot.constructor.name] = new Set();\n }\n context.ctx.auditReport?.prototypeAccess[prot.constructor.name].add(b);\n }\n } while ((prot = Object.getPrototypeOf(prot)));\n }\n\n if (prototypeAccess) {\n if (typeof a === 'function') {\n if (hasOwnProperty(a, b)) {\n const whitelist = context.ctx.prototypeWhitelist.get(a.prototype);\n const replace = context.ctx.options.prototypeReplacements.get(a);\n if (replace) {\n done(undefined, new Prop(replace(a, true), b));\n return;\n }\n if (\n !(whitelist && (!whitelist.size || whitelist.has(b))) &&\n !context.ctx.sandboxedFunctions.has(a)\n ) {\n throw new SandboxAccessError(\n `Static method or property access not permitted: ${a.name}.${b.toString()}`,\n );\n }\n }\n }\n\n // Fast path: check own properties of `a` first (handles static methods like Body.json)\n if (hasOwnProperty(a, b)) {\n const replace = context.ctx.options.prototypeReplacements.get(a as Function);\n if (replace) {\n done(undefined, new Prop(replace(a as object, true), b));\n return;\n }\n if (context.ctx.sandboxedFunctions.has(a as Function)) {\n done(undefined, new Prop(a, b, false, false));\n return;\n }\n // Check if constructor or any ancestor is whitelisted\n let ctorProt: {} | null = (a as Function).prototype;\n while (ctorProt !== null) {\n const whitelist = context.ctx.prototypeWhitelist.get(ctorProt as Function);\n if (whitelist && (!whitelist.size || whitelist.has(b))) {\n done(undefined, new Prop(a, b, false, false));\n return;\n }\n ctorProt = Object.getPrototypeOf(ctorProt);\n }\n if (typeof a === 'function') {\n // Constructor not whitelisted, throw\n throw new SandboxAccessError(\n `Method or property access not permitted: ${(a as Function).name}.${b.toString()}`,\n );\n }\n }\n\n let prot: {} = a;\n while ((prot = Object.getPrototypeOf(prot))) {\n if (hasOwnProperty(prot, b) || b === '__proto__') {\n const replace = context.ctx.options.prototypeReplacements.get(prot.constructor);\n if (replace) {\n done(undefined, new Prop(replace(a, false), b));\n return;\n }\n if (context.ctx.sandboxedFunctions.has(prot.constructor)) {\n break;\n }\n // Check if this constructor or any ancestor in its prototype chain is whitelisted\n let ctorProt: {} | null = prot.constructor;\n let whitelisted = false;\n while (ctorProt !== null) {\n const whitelist = context.ctx.prototypeWhitelist.get(ctorProt as Function);\n if (whitelist && (!whitelist.size || whitelist.has(b))) {\n whitelisted = true;\n break;\n }\n ctorProt = Object.getPrototypeOf(ctorProt);\n }\n if (whitelisted) {\n break;\n }\n if (b === '__proto__') {\n throw new SandboxAccessError(`Access to prototype of global object is not permitted`);\n }\n throw new SandboxAccessError(\n `Method or property access not permitted: ${prot.constructor.name}.${b.toString()}`,\n );\n }\n }\n }\n\n const val = a[b as keyof typeof a] as unknown;\n if (typeof a === 'function') {\n if (b === 'prototype' && !context.ctx.sandboxedFunctions.has(a)) {\n throw new SandboxAccessError(`Access to prototype of global object is not permitted`);\n }\n }\n\n if (b === '__proto__' && !context.ctx.sandboxedFunctions.has(val?.constructor as any)) {\n throw new SandboxAccessError(`Access to prototype of global object is not permitted`);\n }\n\n const p = getGlobalProp(val, context, new Prop(a, b, false, false));\n if (p) {\n done(undefined, p);\n return;\n }\n\n const g =\n (obj instanceof Prop && obj.isGlobal) ||\n (typeof a === 'function' && !context.ctx.sandboxedFunctions.has(a)) ||\n context.ctx.globalsWhitelist.has(a);\n\n done(undefined, new Prop(a, b, false, g, false));\n});\n\nfunction getGlobalProp(val: unknown, context: IExecContext, prop?: Prop) {\n if (!val) return;\n const isFunc = typeof val === 'function';\n if (val instanceof Prop) {\n if (!prop) {\n prop = val;\n }\n val = val.get(context);\n }\n const p = prop?.prop || 'prop';\n if (val === globalThis) {\n return new Prop(\n {\n [p]: context.ctx.sandboxGlobal,\n },\n p,\n prop?.isConst || false,\n false,\n prop?.isVariable || false,\n );\n }\n const evl = isFunc && context.evals.get(val as Function);\n if (evl) {\n return new Prop(\n {\n [p]: evl,\n },\n p,\n prop?.isConst || false,\n true,\n prop?.isVariable || false,\n );\n }\n}\n\nfunction sanitizeArray<T>(val: T, context: IExecContext, cache = new WeakSet<object>()): T {\n if (!Array.isArray(val)) return val;\n if (cache.has(val)) return val;\n cache.add(val);\n for (let i = 0; i < val.length; i++) {\n const item = val[i];\n if (item === globalThis) {\n val[i] = context.ctx.sandboxGlobal;\n } else if (typeof item === 'function') {\n const replacement = context.evals.get(item);\n if (replacement) {\n val[i] = replacement;\n }\n } else {\n sanitizeArray(item, context, cache);\n }\n }\n return val;\n}\n\naddOps<unknown, Lisp[], any>(LispType.Call, ({ done, a, b, obj, context }) => {\n if (context.ctx.options.forbidFunctionCalls)\n throw new SandboxCapabilityError('Function invocations are not allowed');\n if (typeof a !== 'function') {\n throw new TypeError(\n `${typeof obj?.prop === 'symbol' ? 'Symbol' : obj?.prop} is not a function`,\n );\n }\n const vals = b\n .map((item) => {\n if (item instanceof SpreadArray) {\n return [...item.item];\n } else {\n return [item];\n }\n })\n .flat()\n .map((item) => valueOrProp(item, context));\n\n if (typeof obj === 'function') {\n const evl = context.evals.get(obj);\n let ret = evl ? evl(obj, ...vals) : obj(...vals);\n ret = getGlobalProp(ret, context) || ret;\n sanitizeArray(ret, context);\n // If the function returns a Promise, await it before signaling completion.\n // Without this, `done(undefined, promise)` resolves the outer await immediately,\n // but the Promise itself is still pending — causing async ops to be skipped.\n if (ret != null && typeof ret.then === 'function') {\n ret.then(\n (resolved: unknown) => { done(undefined, resolved); },\n (err: unknown) => { done(err); }\n );\n } else {\n done(undefined, ret);\n }\n return;\n }\n if (obj.context[obj.prop] === JSON.stringify && context.getSubscriptions.size) {\n const cache = new Set<any>();\n const recurse = (x: unknown) => {\n if (!x || !(typeof x === 'object') || cache.has(x)) return;\n cache.add(x);\n for (const y of Object.keys(x) as (keyof typeof x)[]) {\n context.getSubscriptions.forEach((cb) => cb(x, y));\n recurse(x[y]);\n }\n };\n recurse(vals[0]);\n }\n\n if (\n obj.context instanceof Array &&\n arrayChange.has(obj.context[obj.prop]) &&\n (context.changeSubscriptions.get(obj.context) ||\n context.changeSubscriptionsGlobal.get(obj.context))\n ) {\n let change: Change;\n let changed = false;\n if (obj.prop === 'push') {\n change = {\n type: 'push',\n added: vals,\n };\n changed = !!vals.length;\n } else if (obj.prop === 'pop') {\n change = {\n type: 'pop',\n removed: obj.context.slice(-1),\n };\n changed = !!change.removed.length;\n } else if (obj.prop === 'shift') {\n change = {\n type: 'shift',\n removed: obj.context.slice(0, 1),\n };\n changed = !!change.removed.length;\n } else if (obj.prop === 'unshift') {\n change = {\n type: 'unshift',\n added: vals,\n };\n changed = !!vals.length;\n } else if (obj.prop === 'splice') {\n change = {\n type: 'splice',\n startIndex: vals[0] as number,\n deleteCount: vals[1] === undefined ? obj.context.length : vals[1],\n added: vals.slice(2),\n removed: obj.context.slice(\n vals[0],\n vals[1] === undefined ? undefined : (vals[0] as number) + (vals[1] as number),\n ),\n };\n changed = !!change.added.length || !!change.removed.length;\n } else if (obj.prop === 'reverse' || obj.prop === 'sort') {\n change = { type: obj.prop };\n changed = !!obj.context.length;\n } else if (obj.prop === 'copyWithin') {\n const len =\n vals[2] === undefined\n ? obj.context.length - (vals[1] as number)\n : Math.min(obj.context.length, (vals[2] as number) - (vals[1] as number));\n change = {\n type: 'copyWithin',\n startIndex: vals[0] as number,\n endIndex: (vals[0] as number) + len,\n added: obj.context.slice(vals[1] as number, (vals[1] as number) + len),\n removed: obj.context.slice(vals[0] as number, (vals[0] as number) + len),\n };\n changed = !!change.added.length || !!change.removed.length;\n }\n if (changed) {\n context.changeSubscriptions.get(obj.context)?.forEach((cb) => cb(change));\n context.changeSubscriptionsGlobal.get(obj.context)?.forEach((cb) => cb(change));\n }\n }\n obj.get(context);\n const evl = context.evals.get(obj.context[obj.prop] as any);\n let ret = evl ? evl(obj.context[obj.prop], ...vals) : (obj.context[obj.prop](...vals) as unknown);\n ret = getGlobalProp(ret, context) || ret;\n sanitizeArray(ret, context);\n done(undefined, ret);\n});\n\naddOps<unknown, KeyVal[]>(LispType.CreateObject, ({ done, b }) => {\n let res = {} as any;\n for (const item of b) {\n if (item.key instanceof SpreadObject) {\n res = { ...res, ...item.key.item };\n } else {\n res[item.key] = item.val;\n }\n }\n done(undefined, res);\n});\n\naddOps<string, LispItem>(LispType.KeyVal, ({ done, a, b }) => done(undefined, new KeyVal(a, b)));\n\naddOps<unknown, Lisp[]>(LispType.CreateArray, ({ done, b, context }) => {\n const items = b\n .map((item) => {\n if (item instanceof SpreadArray) {\n return [...item.item];\n } else {\n return [item];\n }\n })\n .flat()\n .map((item) => valueOrProp(item, context));\n done(undefined, items);\n});\n\naddOps<unknown, unknown>(LispType.Group, ({ done, b }) => done(undefined, b));\n\naddOps<unknown, string>(LispType.GlobalSymbol, ({ done, b }) => {\n switch (b) {\n case 'true':\n return done(undefined, true);\n case 'false':\n return done(undefined, false);\n case 'null':\n return done(undefined, null);\n case 'undefined':\n return done(undefined, undefined);\n case 'NaN':\n return done(undefined, NaN);\n case 'Infinity':\n return done(undefined, Infinity);\n }\n done(new Error('Unknown symbol: ' + b));\n});\n\naddOps<unknown, string>(LispType.Number, ({ done, b }) =>\n done(undefined, Number(b.replace(/_/g, ''))),\n);\naddOps<unknown, string>(LispType.BigInt, ({ done, b }) =>\n done(undefined, BigInt(b.replace(/_/g, ''))),\n);\naddOps<unknown, string>(LispType.StringIndex, ({ done, b, context }) =>\n done(undefined, context.constants.strings[parseInt(b)]),\n);\n\naddOps<unknown, string>(LispType.RegexIndex, ({ done, b, context }) => {\n const reg: IRegEx = context.constants.regexes[parseInt(b)];\n if (!context.ctx.globalsWhitelist.has(RegExp)) {\n throw new SandboxCapabilityError('Regex not permitted');\n } else {\n done(undefined, new RegExp(reg.regex, reg.flags));\n }\n});\n\naddOps<unknown, string>(LispType.LiteralIndex, ({ exec, done, ticks, b, context, scope }) => {\n const item = context.constants.literals[parseInt(b)];\n const [, name, js] = item;\n const found: Lisp[] = [];\n let f: RegExpExecArray | null;\n const resnums: string[] = [];\n while ((f = literalRegex.exec(name))) {\n if (!f[2]) {\n found.push(js[parseInt(f[3], 10)]);\n resnums.push(f[3]);\n }\n }\n\n exec<unknown[]>(ticks, found, scope, context, (...args: unknown[]) => {\n const reses: Record<string, unknown> = {};\n if (args.length === 1) {\n done(args[0]);\n return;\n }\n const processed = args[1];\n for (const i of Object.keys(processed!) as (keyof typeof processed)[]) {\n const num = resnums[i];\n reses[num] = processed![i];\n }\n done(\n undefined,\n name.replace(/(\\\\\\\\)*(\\\\)?\\${(\\d+)}/g, (match, $$, $, num) => {\n if ($) return match;\n const res = reses[num];\n return ($$ ? $$ : '') + `${valueOrProp(res, context)}`;\n }),\n );\n });\n});\n\naddOps<unknown, unknown[]>(LispType.SpreadArray, ({ done, b }) => {\n done(undefined, new SpreadArray(b));\n});\n\naddOps<unknown, Record<string, unknown>>(LispType.SpreadObject, ({ done, b }) => {\n done(undefined, new SpreadObject(b));\n});\n\naddOps<unknown, unknown>(LispType.Not, ({ done, b }) => done(undefined, !b));\naddOps<unknown, number>(LispType.Inverse, ({ done, b }) => done(undefined, ~b));\n\naddOps<unknown, unknown, Prop<any>>(LispType.IncrementBefore, ({ done, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, ++obj.context[obj.prop]);\n});\n\naddOps<unknown, unknown, Prop<any>>(LispType.IncrementAfter, ({ done, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop]++);\n});\n\naddOps<unknown, unknown, Prop<any>>(LispType.DecrementBefore, ({ done, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, --obj.context[obj.prop]);\n});\n\naddOps<unknown, unknown, Prop<any>>(LispType.DecrementAfter, ({ done, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop]--);\n});\n\naddOps<unknown, unknown, Prop<any>, Prop<any>>(\n LispType.Assign,\n ({ done, b, obj, context, scope, bobj }) => {\n assignCheck(obj, context);\n obj.isGlobal = bobj?.isGlobal || false;\n if (obj.isVariable) {\n const s = scope.getWhereValScope(obj.prop as string, obj.prop === 'this');\n if (s === null) {\n throw new ReferenceError(`Cannot assign to undeclared variable '${obj.prop.toString()}'`);\n }\n s.set(obj.prop as string, b);\n if (obj.isGlobal) {\n s.globals[obj.prop.toString()] = true;\n } else {\n delete s.globals[obj.prop.toString()];\n }\n done(undefined, b);\n return;\n }\n done(undefined, (obj.context[obj.prop] = b));\n },\n);\n\naddOps<unknown, unknown, Prop<any>>(LispType.AddEquals, ({ done, b, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, (obj.context[obj.prop] += b));\n});\n\naddOps<unknown, number, Prop<any>>(LispType.SubractEquals, ({ done, b, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, (obj.context[obj.prop] -= b));\n});\n\naddOps<unknown, number, Prop<any>>(LispType.DivideEquals, ({ done, b, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, (obj.context[obj.prop] /= b));\n});\n\naddOps<unknown, number, Prop<any>>(LispType.MultiplyEquals, ({ done, b, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, (obj.context[obj.prop] *= b));\n});\n\naddOps<unknown, number, Prop<any>>(LispType.PowerEquals, ({ done, b, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, (obj.context[obj.prop] **= b));\n});\n\naddOps<unknown, number, Prop<any>>(LispType.ModulusEquals, ({ done, b, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, (obj.context[obj.prop] %= b));\n});\n\naddOps<unknown, number, Prop<any>>(LispType.BitNegateEquals, ({ done, b, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, (obj.context[obj.prop] ^= b));\n});\n\naddOps<unknown, number, Prop<any>>(LispType.BitAndEquals, ({ done, b, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, (obj.context[obj.prop] &= b));\n});\n\naddOps<unknown, number, Prop<any>>(LispType.BitOrEquals, ({ done, b, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, (obj.context[obj.prop] |= b));\n});\n\naddOps<unknown, number, Prop<any>>(LispType.ShiftLeftEquals, ({ done, b, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, (obj.context[obj.prop] <<= b));\n});\n\naddOps<unknown, number, Prop<any>>(LispType.ShiftRightEquals, ({ done, b, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, (obj.context[obj.prop] >>= b));\n});\n\naddOps<unknown, number, Prop<any>>(\n LispType.UnsignedShiftRightEquals,\n ({ done, b, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, (obj.context[obj.prop] >>>= b));\n },\n);\n\naddOps<unknown, unknown, Prop<any>>(LispType.AndEquals, ({ done, b, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, (obj.context[obj.prop] &&= b));\n});\n\naddOps<unknown, unknown, Prop<any>>(LispType.OrEquals, ({ done, b, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, (obj.context[obj.prop] ||= b));\n});\n\naddOps<unknown, unknown, Prop<any>>(\n LispType.NullishCoalescingEquals,\n ({ done, b, obj, context }) => {\n assignCheck(obj, context);\n done(undefined, (obj.context[obj.prop] ??= b));\n },\n);\n\naddOps<number, number>(LispType.LargerThan, ({ done, a, b }) => done(undefined, a > b));\naddOps<number, number>(LispType.SmallerThan, ({ done, a, b }) => done(undefined, a < b));\naddOps<number, number>(LispType.LargerEqualThan, ({ done, a, b }) => done(undefined, a >= b));\naddOps<number, number>(LispType.SmallerEqualThan, ({ done, a, b }) => done(undefined, a <= b));\naddOps<number, number>(LispType.Equal, ({ done, a, b }) => done(undefined, a == b));\naddOps<number, number>(LispType.StrictEqual, ({ done, a, b }) => done(undefined, a === b));\naddOps<number, number>(LispType.NotEqual, ({ done, a, b }) => done(undefined, a != b));\naddOps<number, number>(LispType.StrictNotEqual, ({ done, a, b }) => done(undefined, a !== b));\naddOps<number, number>(LispType.And, ({ done, a, b }) => done(undefined, a && b));\naddOps<number, number>(LispType.Or, ({ done, a, b }) => done(undefined, a || b));\naddOps<number, number>(LispType.NullishCoalescing, ({ done, a, b }) => done(undefined, a ?? b));\naddOps<number, number>(LispType.BitAnd, ({ done, a, b }) => done(undefined, a & b));\naddOps<number, number>(LispType.BitOr, ({ done, a, b }) => done(undefined, a | b));\naddOps<number, number>(LispType.Plus, ({ done, a, b }) => done(undefined, a + b));\naddOps<number, number>(LispType.Minus, ({ done, a, b }) => done(undefined, a - b));\naddOps<number, number>(LispType.Positive, ({ done, b }) => done(undefined, +b));\naddOps<number, number>(LispType.Negative, ({ done, b }) => done(undefined, -b));\naddOps<number, number>(LispType.Divide, ({ done, a, b }) => done(undefined, a / b));\naddOps<number, number>(LispType.Power, ({ done, a, b }) => done(undefined, a ** b));\naddOps<number, number>(LispType.BitNegate, ({ done, a, b }) => done(undefined, a ^ b));\naddOps<number, number>(LispType.Multiply, ({ done, a, b }) => done(undefined, a * b));\naddOps<number, number>(LispType.Modulus, ({ done, a, b }) => done(undefined, a % b));\naddOps<number, number>(LispType.BitShiftLeft, ({ done, a, b }) => done(undefined, a << b));\naddOps<number, number>(LispType.BitShiftRight, ({ done, a, b }) => done(undefined, a >> b));\naddOps<number, number>(LispType.BitUnsignedShiftRight, ({ done, a, b }) =>\n done(undefined, a >>> b),\n);\naddOps<unknown, LispItem>(LispType.Typeof, ({ exec, done, ticks, b, context, scope }) => {\n exec(ticks, b, scope, context, (e, prop) => {\n done(undefined, typeof valueOrProp(prop, context));\n });\n});\n\naddOps<unknown, { new (): unknown }>(LispType.Instanceof, ({ done, a, b }) =>\n done(undefined, a instanceof b),\n);\naddOps<string, {}>(LispType.In, ({ done, a, b }) => done(undefined, a in b));\n\naddOps<unknown, unknown>(LispType.Delete, ({ done, context, bobj }) => {\n if (!(bobj instanceof Prop)) {\n done(undefined, true);\n return;\n }\n assignCheck(bobj, context, 'delete');\n if (bobj.isVariable) {\n done(undefined, false);\n return;\n }\n done(undefined, delete (bobj.context as any)?.[bobj.prop]);\n});\n\naddOps(LispType.Return, ({ done, b }) => done(undefined, b));\n\naddOps<string, unknown, unknown, Prop>(LispType.Var, ({ done, a, b, scope, bobj }) => {\n done(undefined, scope.declare(a, VarType.var, b, bobj?.isGlobal || false));\n});\n\naddOps<string, unknown, unknown, Prop>(LispType.Let, ({ done, a, b, scope, bobj }) => {\n done(undefined, scope.declare(a, VarType.let, b, bobj?.isGlobal || false));\n});\n\naddOps<string, unknown, unknown, Prop>(LispType.Const, ({ done, a, b, scope, bobj }) => {\n done(undefined, scope.declare(a, VarType.const, b, bobj?.isGlobal || false));\n});\n\naddOps<string[], Lisp[], Lisp>(\n LispType.ArrowFunction,\n ({ done, ticks, a, b, obj, context, scope }) => {\n a = [...a];\n if (typeof obj[2] === 'string' || obj[2] instanceof CodeString) {\n if (context.allowJit && context.evalContext) {\n obj[2] = b = context.evalContext.lispifyFunction(new CodeString(obj[2]), context.constants);\n } else {\n throw new SandboxCapabilityError('Unevaluated code detected, JIT not allowed');\n }\n }\n if (a.shift()) {\n done(undefined, createFunctionAsync(a, b, ticks, context, scope));\n } else {\n done(undefined, createFunction(a, b, ticks, context, scope));\n }\n },\n);\n\naddOps<(string | LispType)[], Lisp[], Lisp>(\n LispType.Function,\n ({ done, ticks, a, b, obj, context, scope }) => {\n if (typeof obj[2] === 'string' || obj[2] instanceof CodeString) {\n if (context.allowJit && context.evalContext) {\n obj[2] = b = context.evalContext.lispifyFunction(new CodeString(obj[2]), context.constants);\n } else {\n throw new SandboxCapabilityError('Unevaluated code detected, JIT not allowed');\n }\n }\n const isAsync = a.shift();\n const name = a.shift() as string;\n let func;\n if (isAsync === LispType.True) {\n func = createFunctionAsync(a as string[], b, ticks, context, scope, name);\n } else {\n func = createFunction(a as string[], b, ticks, context, scope, name);\n }\n if (name) {\n scope.declare(name, VarType.var, func);\n }\n done(undefined, func);\n },\n);\n\naddOps<(string | LispType)[], Lisp[], Lisp>(\n LispType.InlineFunction,\n ({ done, ticks, a, b, obj, context, scope }) => {\n if (typeof obj[2] === 'string' || obj[2] instanceof CodeString) {\n if (context.allowJit && context.evalContext) {\n obj[2] = b = context.evalContext.lispifyFunction(new CodeString(obj[2]), context.constants);\n } else {\n throw new SandboxCapabilityError('Unevaluated code detected, JIT not allowed');\n }\n }\n const isAsync = a.shift();\n const name = a.shift() as string;\n if (name) {\n scope = new Scope(scope, {});\n }\n let func;\n if (isAsync === LispType.True) {\n func = createFunctionAsync(a as string[], b, ticks, context, scope, name);\n } else {\n func = createFunction(a as string[], b, ticks, context, scope, name);\n }\n if (name) {\n scope.declare(name, VarType.let, func);\n }\n done(undefined, func);\n },\n);\n\naddOps<Lisp[], Lisp[]>(LispType.Loop, ({ exec, done, ticks, a, b, context, scope }) => {\n const [checkFirst, startInternal, getIterator, startStep, step, condition, beforeStep] = a;\n let loop = true;\n const loopScope = new Scope(scope, {});\n const internalVars = {\n $$obj: undefined,\n };\n const interalScope = new Scope(loopScope, internalVars);\n if (exec === execAsync) {\n (async () => {\n let ad: AsyncDoneRet;\n ad = asyncDone((d) => exec(ticks, startStep, loopScope, context, d));\n internalVars['$$obj'] =\n (ad = asyncDone((d) => exec(ticks, getIterator, loopScope, context, d))).isInstant === true\n ? ad.instant\n : (await ad.p).result;\n ad = asyncDone((d) => exec(ticks, startInternal, interalScope, context, d));\n if (checkFirst)\n loop =\n (ad = asyncDone((d) => exec(ticks, condition, interalScope, context, d))).isInstant ===\n true\n ? ad.instant\n : (await ad.p).result;\n while (loop) {\n const innerLoopVars = {};\n ad = asyncDone((d) =>\n exec(ticks, beforeStep, new Scope(interalScope, innerLoopVars), context, d),\n );\n ad.isInstant === true ? ad.instant : (await ad.p).result;\n const res = await executeTreeAsync(\n ticks,\n context,\n b,\n [new Scope(loopScope, innerLoopVars)],\n 'loop',\n );\n if (res instanceof ExecReturn && res.returned) {\n done(undefined, res);\n return;\n }\n if (res instanceof ExecReturn && res.breakLoop) {\n break;\n }\n ad = asyncDone((d) => exec(ticks, step, interalScope, context, d));\n loop =\n (ad = asyncDone((d) => exec(ticks, condition, interalScope, context, d))).isInstant ===\n true\n ? ad.instant\n : (await ad.p).result;\n }\n done();\n })().catch(done);\n } else {\n syncDone((d) => exec(ticks, startStep, loopScope, context, d));\n internalVars['$$obj'] = syncDone((d) => exec(ticks, getIterator, loopScope, context, d)).result;\n syncDone((d) => exec(ticks, startInternal, interalScope, context, d));\n if (checkFirst) loop = syncDone((d) => exec(ticks, condition, interalScope, context, d)).result;\n while (loop) {\n const innerLoopVars = {};\n syncDone((d) => exec(ticks, beforeStep, new Scope(interalScope, innerLoopVars), context, d));\n const res = executeTree(ticks, context, b, [new Scope(loopScope, innerLoopVars)], 'loop');\n if (res instanceof ExecReturn && res.returned) {\n done(undefined, res);\n return;\n }\n if (res instanceof ExecReturn && res.breakLoop) {\n break;\n }\n syncDone((d) => exec(ticks, step, interalScope, context, d));\n loop = syncDone((d) => exec(ticks, condition, interalScope, context, d)).result;\n }\n done();\n }\n});\n\naddOps<LispItem, LispItem>(LispType.LoopAction, ({ done, a, context, inLoopOrSwitch }) => {\n if ((inLoopOrSwitch === 'switch' && a === 'continue') || !inLoopOrSwitch) {\n throw new TypeError('Illegal ' + a + ' statement');\n }\n done(\n undefined,\n new ExecReturn(context.ctx.auditReport, undefined, false, a === 'break', a === 'continue'),\n );\n});\n\naddOps<LispItem, If>(LispType.If, ({ exec, done, ticks, a, b, context, scope, inLoopOrSwitch }) => {\n exec(ticks, valueOrProp(a, context) ? b.t : b.f, scope, context, done, inLoopOrSwitch);\n});\n\naddOps<LispItem, If>(LispType.InlineIf, ({ exec, done, ticks, a, b, context, scope }) => {\n exec(ticks, valueOrProp(a, context) ? b.t : b.f, scope, context, done, undefined);\n});\n\naddOps<Lisp, Lisp>(LispType.InlineIfCase, ({ done, a, b }) => done(undefined, new If(a, b)));\naddOps<Lisp, Lisp>(LispType.IfCase, ({ done, a, b }) => done(undefined, new If(a, b)));\n\naddOps<LispItem, SwitchCase[]>(LispType.Switch, ({ exec, done, ticks, a, b, context, scope }) => {\n exec(ticks, a, scope, context, (...args: unknown[]) => {\n if (args.length === 1) {\n done(args[0]);\n return;\n }\n let toTest = args[1];\n toTest = valueOrProp(toTest, context);\n if (exec === execSync) {\n let res: ExecReturn<unknown>;\n let isTrue = false;\n for (const caseItem of b) {\n if (\n isTrue ||\n (isTrue =\n !caseItem[1] ||\n toTest ===\n valueOrProp(\n syncDone((d) => exec(ticks, caseItem[1], scope, context, d)).result,\n context,\n ))\n ) {\n if (!caseItem[2]) continue;\n res = executeTree(ticks, context, caseItem[2], [scope], 'switch');\n if (res.breakLoop) break;\n if (res.returned) {\n done(undefined, res);\n return;\n }\n if (!caseItem[1]) {\n // default case\n break;\n }\n }\n }\n done();\n } else {\n (async () => {\n let res: ExecReturn<unknown>;\n let isTrue = false;\n for (const caseItem of b) {\n let ad: AsyncDoneRet;\n if (\n isTrue ||\n (isTrue =\n !caseItem[1] ||\n toTest ===\n valueOrProp(\n (ad = asyncDone((d) => exec(ticks, caseItem[1], scope, context, d))).isInstant ===\n true\n ? ad.instant\n : (await ad.p).result,\n context,\n ))\n ) {\n if (!caseItem[2]) continue;\n res = await executeTreeAsync(ticks, context, caseItem[2], [scope], 'switch');\n if (res.breakLoop) break;\n if (res.returned) {\n done(undefined, res);\n return;\n }\n if (!caseItem[1]) {\n // default case\n break;\n }\n }\n }\n done();\n })().catch(done);\n }\n });\n});\n\naddOps<Lisp[], [string, Lisp[], Lisp[]]>(\n LispType.Try,\n ({ exec, done, ticks, a, b, context, scope, inLoopOrSwitch }) => {\n const [exception, catchBody, finallyBody] = b;\n\n // Execute try block\n executeTreeWithDone(\n exec,\n (...tryArgs: unknown[]) => {\n const tryHadError = tryArgs.length === 1;\n const tryError = tryHadError ? tryArgs[0] : undefined;\n const tryResult = !tryHadError && tryArgs.length > 1 ? tryArgs[1] : undefined;\n\n // Handler to execute finally and complete\n const executeFinallyAndComplete = (hadError: boolean, errorOrResult: unknown) => {\n if (finallyBody && finallyBody.length > 0) {\n // Execute finally block\n executeTreeWithDone(\n exec,\n (...finallyArgs: unknown[]) => {\n const finallyHadError = finallyArgs.length === 1;\n const finallyResult =\n !finallyHadError && finallyArgs.length > 1 ? finallyArgs[1] : undefined;\n\n // If finally throws an error, it overrides everything\n if (finallyHadError) {\n done(finallyArgs[0]);\n return;\n }\n\n // If finally has a control flow statement (return/break/continue), it overrides everything\n if (\n finallyResult instanceof ExecReturn &&\n (finallyResult.returned || finallyResult.breakLoop || finallyResult.continueLoop)\n ) {\n done(undefined, finallyResult);\n return;\n }\n\n // Otherwise, return the original try/catch result/error\n if (hadError) {\n done(errorOrResult);\n } else if (errorOrResult instanceof ExecReturn) {\n // If try/catch returned or has some other control flow, pass that through\n if (\n errorOrResult.returned ||\n errorOrResult.breakLoop ||\n errorOrResult.continueLoop\n ) {\n done(undefined, errorOrResult);\n } else {\n // Normal completion - don't return a value\n done();\n }\n } else {\n // Try/catch completed normally, just signal completion with no return value\n done();\n }\n },\n ticks,\n context,\n finallyBody,\n [new Scope(scope, {})],\n inLoopOrSwitch,\n );\n } else {\n // No finally block, just return result/error\n if (hadError) {\n done(errorOrResult);\n } else if (errorOrResult instanceof ExecReturn) {\n // If try/catch returned or has some other control flow, pass that through\n if (errorOrResult.returned || errorOrResult.breakLoop || errorOrResult.continueLoop) {\n done(undefined, errorOrResult);\n } else {\n // Normal completion - don't return a value\n done();\n }\n } else {\n done();\n }\n }\n };\n\n // If try had an error and there's a catch block, execute catch\n if (tryHadError && catchBody && catchBody.length > 0) {\n const sc: Record<string, unknown> = {};\n if (exception) sc[exception] = tryError;\n\n executeTreeWithDone(\n exec,\n (...catchArgs: unknown[]) => {\n const catchHadError = catchArgs.length === 1;\n const catchErrorOrResult = catchHadError\n ? catchArgs[0]\n : catchArgs.length > 1\n ? catchArgs[1]\n : undefined;\n\n // Execute finally with catch result\n executeFinallyAndComplete(catchHadError, catchErrorOrResult);\n },\n ticks,\n context,\n catchBody,\n [new Scope(scope, sc)],\n inLoopOrSwitch,\n );\n } else {\n // No catch or no error, execute finally with try result\n executeFinallyAndComplete(tryHadError, tryHadError ? tryError : tryResult);\n }\n },\n ticks,\n context,\n a,\n [new Scope(scope)],\n inLoopOrSwitch,\n );\n },\n);\n\naddOps(LispType.Void, ({ done }) => {\n done();\n});\naddOps<new (...args: unknown[]) => unknown, unknown[]>(LispType.New, ({ done, a, b, context }) => {\n if (!context.ctx.globalsWhitelist.has(a) && !context.ctx.sandboxedFunctions.has(a)) {\n throw new SandboxAccessError(`Object construction not allowed: ${a.constructor.name}`);\n }\n done(undefined, new a(...b));\n});\n\naddOps(LispType.Throw, ({ done, b }) => {\n done(b);\n});\naddOps<unknown[]>(LispType.Expression, ({ done, a }) => done(undefined, a.pop()));\naddOps(LispType.None, ({ done }) => done());\n\nfunction valueOrProp(a: unknown, context: IExecContext): unknown {\n if (a instanceof Prop) return a.get(context);\n if (a === optional) return undefined;\n return a;\n}\n\nexport function execMany(\n ticks: Ticks,\n exec: Execution,\n tree: Lisp[],\n done: Done,\n scope: Scope,\n context: IExecContext,\n inLoopOrSwitch?: string,\n) {\n if (exec === execSync) {\n _execManySync(ticks, tree, done, scope, context, inLoopOrSwitch);\n } else {\n _execManyAsync(ticks, tree, done, scope, context, inLoopOrSwitch).catch(done);\n }\n}\n\nfunction _execManySync(\n ticks: Ticks,\n tree: Lisp[],\n done: Done,\n scope: Scope,\n context: IExecContext,\n inLoopOrSwitch?: string,\n) {\n const ret: any[] = [];\n for (let i = 0; i < tree.length; i++) {\n let res = syncDone((d) => execSync(ticks, tree[i], scope, context, d, inLoopOrSwitch)).result;\n if (res instanceof ExecReturn && (res.returned || res.breakLoop || res.continueLoop)) {\n done(undefined, res);\n return;\n }\n if (isLisp(tree[i]) && tree[i][0] === LispType.Return) {\n done(undefined, new ExecReturn(context.ctx.auditReport, res, true));\n return;\n }\n ret.push(res);\n }\n done(undefined, ret);\n}\n\nasync function _execManyAsync(\n ticks: Ticks,\n tree: Lisp[],\n done: Done,\n scope: Scope,\n context: IExecContext,\n inLoopOrSwitch?: string,\n) {\n const ret: any[] = [];\n for (let i = 0; i < tree.length; i++) {\n let res;\n try {\n let ad: AsyncDoneRet;\n res =\n (ad = asyncDone((d) => execAsync(ticks, tree[i], scope, context, d, inLoopOrSwitch)))\n .isInstant === true\n ? ad.instant\n : (await ad.p).result;\n } catch (e) {\n done(e);\n return;\n }\n if (res instanceof ExecReturn && (res.returned || res.breakLoop || res.continueLoop)) {\n done(undefined, res);\n return;\n }\n if (isLisp(tree[i]) && tree[i][0] === LispType.Return) {\n done(undefined, new ExecReturn(context.ctx.auditReport, res, true));\n return;\n }\n ret.push(res);\n }\n done(undefined, ret);\n}\n\ntype Execution = <T = any>(\n ticks: Ticks,\n tree: LispItem,\n scope: Scope,\n context: IExecContext,\n done: Done<T>,\n inLoopOrSwitch?: string,\n) => void;\n\nexport interface AsyncDoneRet {\n isInstant: boolean;\n instant: any;\n p: Promise<{ result: any }>;\n}\n\nexport function asyncDone(callback: (done: Done) => void): AsyncDoneRet {\n let isInstant = false;\n let instant: unknown;\n const p = new Promise<any>((resolve, reject) => {\n callback((...args: unknown[]) => {\n if (args.length === 1) reject(args[0]);\n else {\n isInstant = true;\n instant = args[1];\n resolve({ result: args[1] });\n }\n });\n });\n return {\n isInstant,\n instant,\n p,\n };\n}\n\nexport function syncDone(callback: (done: Done) => void): { result: any } {\n let result;\n let err: { error: unknown } | undefined;\n callback((...args: unknown[]) => {\n err = args.length === 1 ? { error: args[0] } : undefined;\n result = args[1];\n });\n if (err) throw err.error;\n return { result };\n}\n\nexport async function execAsync<T = any>(\n ticks: Ticks,\n tree: LispItem,\n scope: Scope,\n context: IExecContext,\n doneOriginal: Done<T>,\n inLoopOrSwitch?: string,\n): Promise<void> {\n let done: Done<T> = doneOriginal;\n const p = new Promise<void>((resolve) => {\n done = (...args: unknown[]) => {\n doneOriginal(...args);\n resolve();\n };\n });\n if (!_execNoneRecurse(ticks, tree, scope, context, done, true, inLoopOrSwitch) && isLisp(tree)) {\n let op = tree[0];\n let obj;\n try {\n let ad: AsyncDoneRet;\n obj =\n (ad = asyncDone((d) => execAsync(ticks, tree[1], scope, context, d, inLoopOrSwitch)))\n .isInstant === true\n ? ad.instant\n : (await ad.p).result;\n } catch (e) {\n done(e);\n return;\n }\n let a = obj;\n try {\n a = obj instanceof Prop ? obj.get(context) : obj;\n } catch (e) {\n done(e);\n return;\n }\n if (op === LispType.PropOptional || op === LispType.CallOptional) {\n if (a === undefined || a === null) {\n done(undefined, optional);\n return;\n }\n op = op === LispType.PropOptional ? LispType.Prop : LispType.Call;\n }\n if (a === optional) {\n if (op === LispType.Prop || op === LispType.Call) {\n done(undefined, a);\n return;\n } else {\n a = undefined;\n }\n }\n // Short-circuit for nullish coalescing: if a is not null/undefined, return a without evaluating b\n if (op === LispType.NullishCoalescing && a !== undefined && a !== null) {\n done(undefined, a);\n return;\n }\n let bobj;\n try {\n let ad: AsyncDoneRet;\n bobj =\n (ad = asyncDone((d) => execAsync(ticks, tree[2], scope, context, d, inLoopOrSwitch)))\n .isInstant === true\n ? ad.instant\n : (await ad.p).result;\n } catch (e) {\n done(e);\n return;\n }\n let b = bobj;\n try {\n b = bobj instanceof Prop ? bobj.get(context) : bobj;\n } catch (e) {\n done(e);\n return;\n }\n if (b === optional) {\n b = undefined;\n }\n performOp({\n op,\n exec: execAsync,\n done,\n ticks,\n a,\n b,\n obj,\n context,\n scope,\n bobj,\n inLoopOrSwitch,\n tree,\n });\n }\n await p;\n}\n\nexport function execSync<T = any>(\n ticks: Ticks,\n tree: LispItem,\n scope: Scope,\n context: IExecContext,\n done: Done<T>,\n inLoopOrSwitch?: string,\n) {\n if (!_execNoneRecurse(ticks, tree, scope, context, done, false, inLoopOrSwitch) && isLisp(tree)) {\n let op = tree[0];\n let obj = syncDone((d) => execSync(ticks, tree[1], scope, context, d, inLoopOrSwitch)).result;\n let a = obj instanceof Prop ? obj.get(context) : obj;\n if (op === LispType.PropOptional || op === LispType.CallOptional) {\n if (a === undefined || a === null) {\n done(undefined, optional);\n return;\n }\n op = op === LispType.PropOptional ? LispType.Prop : LispType.Call;\n }\n if (a === optional) {\n if (op === LispType.Prop || op === LispType.Call) {\n done(undefined, a);\n return;\n } else {\n a = undefined;\n }\n }\n // Short-circuit for nullish coalescing: if a is not null/undefined, return a without evaluating b\n if (op === LispType.NullishCoalescing && a !== undefined && a !== null) {\n done(undefined, a);\n return;\n }\n let bobj = syncDone((d) => execSync(ticks, tree[2], scope, context, d, inLoopOrSwitch)).result;\n let b = bobj instanceof Prop ? bobj.get(context) : bobj;\n if (b === optional) {\n b = undefined;\n }\n performOp({\n op,\n exec: execSync,\n done,\n ticks,\n a,\n b,\n obj,\n context,\n scope,\n bobj,\n inLoopOrSwitch,\n tree,\n });\n }\n}\n\ntype OpsCallbackParams<a, b, obj, bobj> = {\n op: LispType;\n exec: Execution;\n a: a;\n b: b;\n obj: obj;\n bobj: bobj;\n ticks: Ticks;\n tree: LispItem;\n scope: Scope;\n context: IExecContext;\n done: Done;\n inLoopOrSwitch?: string;\n};\n\nfunction checkHaltExpectedTicks(\n params: OpsCallbackParams<any, any, any, any>,\n expectTicks = 0,\n): boolean {\n const sandbox = params.context.ctx.sandbox;\n const options = params.context.ctx.options;\n const { ticks, scope, context, done, op } = params;\n if (sandbox.halted) {\n const sub = sandbox.subscribeResume(() => {\n sub.unsubscribe();\n try {\n const o = ops.get(op);\n if (!o) {\n done(new SyntaxError('Unknown operator: ' + op));\n return;\n }\n o(params);\n } catch (err) {\n if (options.haltOnSandboxError && err instanceof SandboxError) {\n const sub = sandbox.subscribeResume(() => {\n sub.unsubscribe();\n done(err);\n });\n sandbox.haltExecution({\n error: err as Error,\n ticks,\n scope,\n context,\n });\n } else {\n done(err);\n }\n }\n });\n return true;\n } else if (ticks.tickLimit && ticks.tickLimit <= ticks.ticks + BigInt(expectTicks)) {\n const sub = sandbox.subscribeResume(() => {\n sub.unsubscribe();\n try {\n const o = ops.get(op);\n if (!o) {\n done(new SyntaxError('Unknown operator: ' + op));\n return;\n }\n o(params);\n } catch (err) {\n if (context.ctx.options.haltOnSandboxError && err instanceof SandboxError) {\n const sub = sandbox.subscribeResume(() => {\n sub.unsubscribe();\n done(err);\n });\n sandbox.haltExecution({\n error: err as Error,\n ticks,\n scope,\n context,\n });\n } else {\n done(err);\n }\n }\n });\n const error = new SandboxExecutionQuotaExceededError('Execution quota exceeded');\n sandbox.haltExecution({\n error,\n ticks,\n scope: scope,\n context,\n });\n return true;\n }\n return false;\n}\n\nfunction performOp(params: OpsCallbackParams<any, any, any, any>) {\n const { done, op, ticks, context, scope } = params;\n ticks.ticks++;\n const sandbox = context.ctx.sandbox;\n\n if (checkHaltExpectedTicks(params)) {\n return;\n }\n\n try {\n const o = ops.get(op);\n if (!o) {\n done(new SandboxExecutionTreeError('Unknown operator: ' + op));\n return;\n }\n o(params);\n } catch (err) {\n if (context.ctx.options.haltOnSandboxError && err instanceof SandboxError) {\n const sub = sandbox.subscribeResume(() => {\n sub.unsubscribe();\n done(err);\n });\n sandbox.haltExecution({\n error: err as Error,\n ticks,\n scope,\n context,\n });\n } else {\n done(err);\n }\n }\n}\n\nconst unexecTypes = new Set([\n LispType.ArrowFunction,\n LispType.Function,\n LispType.InlineFunction,\n LispType.Loop,\n LispType.Try,\n LispType.Switch,\n LispType.IfCase,\n LispType.InlineIfCase,\n LispType.Typeof,\n]);\n\nfunction _execNoneRecurse<T = any>(\n ticks: Ticks,\n tree: LispItem,\n scope: Scope,\n context: IExecContext,\n done: Done<T>,\n isAsync: boolean,\n inLoopOrSwitch?: string,\n): boolean {\n const exec = isAsync ? execAsync : execSync;\n if (tree instanceof Prop) {\n done(undefined, tree.get(context));\n } else if (tree === optional) {\n done();\n } else if (Array.isArray(tree) && !isLisp(tree)) {\n if (tree[0] === LispType.None) {\n done();\n } else {\n execMany(ticks, exec, tree as Lisp[], done, scope, context, inLoopOrSwitch);\n }\n } else if (!isLisp(tree)) {\n done(undefined, tree);\n } else if (tree[0] === LispType.Block) {\n execMany(ticks, exec, tree[1] as Lisp[], done, scope, context, inLoopOrSwitch);\n } else if (tree[0] === LispType.Await) {\n if (!isAsync) {\n done(new SyntaxError(\"Illegal use of 'await', must be inside async function\"));\n } else if (context.ctx.prototypeWhitelist?.has(Promise.prototype)) {\n execAsync(\n ticks,\n tree[1],\n scope,\n context,\n async (...args: unknown[]) => {\n if (args.length === 1) done(args[0]);\n else\n try {\n done(undefined, (await valueOrProp(args[1], context)) as any);\n } catch (err) {\n done(err);\n }\n },\n inLoopOrSwitch,\n ).catch(done);\n } else {\n done(new SandboxCapabilityError('Async/await is not permitted'));\n }\n } else if (unexecTypes.has(tree[0])) {\n performOp({\n op: tree[0],\n exec,\n done,\n ticks,\n a: tree[1],\n b: tree[2],\n obj: tree,\n tree,\n context,\n scope,\n bobj: undefined,\n inLoopOrSwitch,\n });\n } else {\n return false;\n }\n return true;\n}\nexport function executeTree<T>(\n ticks: Ticks,\n context: IExecContext,\n executionTree: Lisp[],\n scopes: IScope[] = [],\n inLoopOrSwitch?: string,\n): ExecReturn<T> {\n return syncDone((done) =>\n executeTreeWithDone(execSync, done, ticks, context, executionTree, scopes, inLoopOrSwitch),\n ).result;\n}\n\nexport async function executeTreeAsync<T>(\n ticks: Ticks,\n context: IExecContext,\n executionTree: Lisp[],\n scopes: IScope[] = [],\n inLoopOrSwitch?: string,\n): Promise<ExecReturn<T>> {\n let ad: AsyncDoneRet;\n return (ad = asyncDone((done) =>\n executeTreeWithDone(execAsync, done, ticks, context, executionTree, scopes, inLoopOrSwitch),\n )).isInstant === true\n ? ad.instant\n : (await ad.p).result;\n}\n\nfunction executeTreeWithDone(\n exec: Execution,\n done: Done,\n ticks: Ticks,\n context: IExecContext,\n executionTree: Lisp[],\n scopes: IScope[] = [],\n inLoopOrSwitch?: string,\n) {\n if (!executionTree) {\n done();\n return;\n }\n if (!(executionTree instanceof Array)) {\n throw new SyntaxError('Bad execution tree');\n }\n let scope = context.ctx.globalScope;\n let s;\n while ((s = scopes.shift())) {\n if (typeof s !== 'object') continue;\n if (s instanceof Scope) {\n scope = s;\n } else {\n scope = new Scope(scope, s, s instanceof LocalScope ? undefined : null);\n }\n }\n if (context.ctx.options.audit && !context.ctx.auditReport) {\n context.ctx.auditReport = {\n globalsAccess: new Set(),\n prototypeAccess: {},\n };\n }\n if (exec === execSync) {\n _executeWithDoneSync(done, ticks, context, executionTree, scope, inLoopOrSwitch);\n } else {\n _executeWithDoneAsync(done, ticks, context, executionTree, scope, inLoopOrSwitch).catch(done);\n }\n}\n\nfunction _executeWithDoneSync(\n done: Done,\n ticks: Ticks,\n context: IExecContext,\n executionTree: Lisp[],\n scope: Scope,\n inLoopOrSwitch?: string,\n) {\n if (!(executionTree instanceof Array)) throw new SyntaxError('Bad execution tree');\n let i = 0;\n for (i = 0; i < executionTree.length; i++) {\n let res: unknown;\n let err: { error: unknown } | undefined;\n const current = executionTree[i];\n try {\n execSync(\n ticks,\n current,\n scope,\n context,\n (...args: unknown[]) => {\n if (args.length === 1) err = { error: args[0] };\n else res = args[1];\n },\n inLoopOrSwitch,\n );\n } catch (e) {\n err = { error: e };\n }\n if (err) {\n done(err.error);\n return;\n }\n if (res instanceof ExecReturn) {\n done(undefined, res);\n return;\n }\n if (isLisp(current) && current[0] === LispType.Return) {\n done(undefined, new ExecReturn(context.ctx.auditReport, res, true));\n return;\n }\n }\n done(undefined, new ExecReturn(context.ctx.auditReport, undefined, false));\n}\n\nasync function _executeWithDoneAsync(\n done: Done,\n ticks: Ticks,\n context: IExecContext,\n executionTree: Lisp[],\n scope: Scope,\n inLoopOrSwitch?: string,\n) {\n if (!(executionTree instanceof Array)) throw new SyntaxError('Bad execution tree');\n let i = 0;\n for (i = 0; i < executionTree.length; i++) {\n let res: unknown;\n let err: { error: unknown } | undefined;\n const current = executionTree[i];\n try {\n await execAsync(\n ticks,\n current,\n scope,\n context,\n (...args: unknown[]) => {\n if (args.length === 1) err = { error: args[0] };\n else res = args[1];\n },\n inLoopOrSwitch,\n );\n } catch (e) {\n err = { error: e };\n }\n if (err) {\n done(err.error);\n return;\n }\n if (res instanceof ExecReturn) {\n done(undefined, res);\n return;\n }\n if (isLisp(current) && current[0] === LispType.Return) {\n done(undefined, new ExecReturn(context.ctx.auditReport, res, true));\n return;\n }\n }\n done(undefined, new ExecReturn(context.ctx.auditReport, undefined, false));\n}\n"],"names":[],"mappings":"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"}
|
package/dist/node/Sandbox.js
DELETED
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var utils = require('./utils.js');
|
|
6
|
-
var executor = require('./executor.js');
|
|
7
|
-
var parser = require('./parser.js');
|
|
8
|
-
var SandboxExec = require('./SandboxExec.js');
|
|
9
|
-
|
|
10
|
-
function createEvalContext() {
|
|
11
|
-
return {
|
|
12
|
-
sandboxFunction,
|
|
13
|
-
sandboxAsyncFunction,
|
|
14
|
-
sandboxedEval,
|
|
15
|
-
sandboxedSetTimeout,
|
|
16
|
-
sandboxedSetInterval,
|
|
17
|
-
sandboxedClearTimeout,
|
|
18
|
-
sandboxedClearInterval,
|
|
19
|
-
lispifyFunction: parser.lispifyFunction,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
function SB() { }
|
|
23
|
-
function sandboxFunction(context) {
|
|
24
|
-
SandboxFunction.prototype = SB.prototype;
|
|
25
|
-
return SandboxFunction;
|
|
26
|
-
function SandboxFunction(...params) {
|
|
27
|
-
const code = params.pop() || '';
|
|
28
|
-
const parsed = parser.default(code);
|
|
29
|
-
return executor.createFunction(params, parsed.tree, context.ctx.ticks, {
|
|
30
|
-
...context,
|
|
31
|
-
constants: parsed.constants,
|
|
32
|
-
tree: parsed.tree,
|
|
33
|
-
}, undefined, 'anonymous');
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
function SAF() { }
|
|
37
|
-
function sandboxAsyncFunction(context) {
|
|
38
|
-
SandboxAsyncFunction.prototype = SAF.prototype;
|
|
39
|
-
return SandboxAsyncFunction;
|
|
40
|
-
function SandboxAsyncFunction(...params) {
|
|
41
|
-
const code = params.pop() || '';
|
|
42
|
-
const parsed = parser.default(code);
|
|
43
|
-
return executor.createFunctionAsync(params, parsed.tree, context.ctx.ticks, {
|
|
44
|
-
...context,
|
|
45
|
-
constants: parsed.constants,
|
|
46
|
-
tree: parsed.tree,
|
|
47
|
-
}, undefined, 'anonymous');
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
function SE() { }
|
|
51
|
-
function sandboxedEval(func, context) {
|
|
52
|
-
sandboxEval.prototype = SE.prototype;
|
|
53
|
-
return sandboxEval;
|
|
54
|
-
function sandboxEval(code) {
|
|
55
|
-
// Parse the code and wrap last statement in return for completion value
|
|
56
|
-
const parsed = parser.default(code);
|
|
57
|
-
const tree = wrapLastStatementInReturn(parsed.tree);
|
|
58
|
-
// Create and execute function with modified tree
|
|
59
|
-
return executor.createFunction([], tree, context.ctx.ticks, {
|
|
60
|
-
...context,
|
|
61
|
-
constants: parsed.constants,
|
|
62
|
-
tree,
|
|
63
|
-
}, undefined, 'anonymous')();
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
function wrapLastStatementInReturn(tree) {
|
|
67
|
-
if (tree.length === 0)
|
|
68
|
-
return tree;
|
|
69
|
-
const newTree = [...tree];
|
|
70
|
-
const lastIndex = newTree.length - 1;
|
|
71
|
-
const lastStmt = newTree[lastIndex];
|
|
72
|
-
// Only wrap if it's not already a return or throw
|
|
73
|
-
if (Array.isArray(lastStmt) && lastStmt.length >= 1) {
|
|
74
|
-
const op = lastStmt[0];
|
|
75
|
-
// Don't wrap Return (8) or Throw (47) - they already control flow
|
|
76
|
-
if (op === 8 /* LispType.Return */ || op === 46 /* LispType.Throw */) {
|
|
77
|
-
return newTree;
|
|
78
|
-
}
|
|
79
|
-
// List of statement types that should have undefined completion value
|
|
80
|
-
// These match JavaScript semantics where declarations and control structures
|
|
81
|
-
// don't produce a completion value
|
|
82
|
-
const statementTypes = [
|
|
83
|
-
3 /* LispType.Let */, // 3
|
|
84
|
-
4 /* LispType.Const */, // 4
|
|
85
|
-
34 /* LispType.Var */, // 35
|
|
86
|
-
37 /* LispType.Function */, // 38
|
|
87
|
-
13 /* LispType.If */, // 14
|
|
88
|
-
38 /* LispType.Loop */, // 39
|
|
89
|
-
39 /* LispType.Try */, // 40
|
|
90
|
-
40 /* LispType.Switch */, // 41
|
|
91
|
-
42 /* LispType.Block */, // 43
|
|
92
|
-
43 /* LispType.Expression */, // 44
|
|
93
|
-
];
|
|
94
|
-
// If the last statement is a declaration or control structure,
|
|
95
|
-
// don't wrap it (it will naturally return undefined)
|
|
96
|
-
if (statementTypes.includes(op)) {
|
|
97
|
-
return newTree;
|
|
98
|
-
}
|
|
99
|
-
// For all other types (expressions, operators, etc.),
|
|
100
|
-
// wrap in return to capture the completion value
|
|
101
|
-
newTree[lastIndex] = [8 /* LispType.Return */, 0 /* LispType.None */, lastStmt];
|
|
102
|
-
}
|
|
103
|
-
return newTree;
|
|
104
|
-
}
|
|
105
|
-
function sST() { }
|
|
106
|
-
function sandboxedSetTimeout(func, context) {
|
|
107
|
-
sandboxSetTimeout.prototype = sST.prototype;
|
|
108
|
-
return sandboxSetTimeout;
|
|
109
|
-
function sandboxSetTimeout(handler, timeout, ...args) {
|
|
110
|
-
const sandbox = context.ctx.sandbox;
|
|
111
|
-
const exec = (...a) => {
|
|
112
|
-
const h = typeof handler === 'string' ? func(handler) : handler;
|
|
113
|
-
haltsub.unsubscribe();
|
|
114
|
-
contsub.unsubscribe();
|
|
115
|
-
sandbox.setTimeoutHandles.delete(sandBoxhandle);
|
|
116
|
-
return h(...a);
|
|
117
|
-
};
|
|
118
|
-
const sandBoxhandle = ++sandbox.timeoutHandleCounter;
|
|
119
|
-
let start = Date.now();
|
|
120
|
-
let handle = setTimeout(exec, timeout, ...args);
|
|
121
|
-
let elapsed = 0;
|
|
122
|
-
const haltsub = sandbox.subscribeHalt(() => {
|
|
123
|
-
elapsed = Date.now() - start + elapsed;
|
|
124
|
-
clearTimeout(handle);
|
|
125
|
-
});
|
|
126
|
-
const contsub = sandbox.subscribeResume(() => {
|
|
127
|
-
start = Date.now();
|
|
128
|
-
const remaining = Math.floor((timeout || 0) - elapsed);
|
|
129
|
-
handle = setTimeout(exec, remaining, ...args);
|
|
130
|
-
sandbox.setTimeoutHandles.set(sandBoxhandle, {
|
|
131
|
-
handle,
|
|
132
|
-
haltsub,
|
|
133
|
-
contsub,
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
sandbox.setTimeoutHandles.set(sandBoxhandle, {
|
|
137
|
-
handle,
|
|
138
|
-
haltsub,
|
|
139
|
-
contsub,
|
|
140
|
-
});
|
|
141
|
-
return sandBoxhandle;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
function sCT() { }
|
|
145
|
-
function sandboxedClearTimeout(context) {
|
|
146
|
-
sandboxClearTimeout.prototype = sCT.prototype;
|
|
147
|
-
return sandboxClearTimeout;
|
|
148
|
-
function sandboxClearTimeout(handle) {
|
|
149
|
-
const sandbox = context.ctx.sandbox;
|
|
150
|
-
const timeoutHandle = sandbox.setTimeoutHandles.get(handle);
|
|
151
|
-
if (timeoutHandle) {
|
|
152
|
-
clearTimeout(timeoutHandle.handle);
|
|
153
|
-
timeoutHandle.haltsub.unsubscribe();
|
|
154
|
-
timeoutHandle.contsub.unsubscribe();
|
|
155
|
-
sandbox.setTimeoutHandles.delete(handle);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
function sCI() { }
|
|
160
|
-
function sandboxedClearInterval(context) {
|
|
161
|
-
sandboxClearInterval.prototype = sCI.prototype;
|
|
162
|
-
return sandboxClearInterval;
|
|
163
|
-
function sandboxClearInterval(handle) {
|
|
164
|
-
const sandbox = context.ctx.sandbox;
|
|
165
|
-
const intervalHandle = sandbox.setIntervalHandles.get(handle);
|
|
166
|
-
if (intervalHandle) {
|
|
167
|
-
clearInterval(intervalHandle.handle);
|
|
168
|
-
intervalHandle.haltsub.unsubscribe();
|
|
169
|
-
intervalHandle.contsub.unsubscribe();
|
|
170
|
-
sandbox.setIntervalHandles.delete(handle);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
function sSI() { }
|
|
175
|
-
function sandboxedSetInterval(func, context) {
|
|
176
|
-
sandboxSetInterval.prototype = sSI.prototype;
|
|
177
|
-
return sandboxSetInterval;
|
|
178
|
-
function sandboxSetInterval(handler, timeout, ...args) {
|
|
179
|
-
const sandbox = context.ctx.sandbox;
|
|
180
|
-
const h = typeof handler === 'string' ? func(handler) : handler;
|
|
181
|
-
const exec = (...a) => {
|
|
182
|
-
start = Date.now();
|
|
183
|
-
elapsed = 0;
|
|
184
|
-
return h(...a);
|
|
185
|
-
};
|
|
186
|
-
const sandBoxhandle = ++sandbox.timeoutHandleCounter;
|
|
187
|
-
let start = Date.now();
|
|
188
|
-
let handle = setInterval(exec, timeout, ...args);
|
|
189
|
-
let elapsed = 0;
|
|
190
|
-
const haltsub = sandbox.subscribeHalt(() => {
|
|
191
|
-
elapsed = Date.now() - start + elapsed;
|
|
192
|
-
clearInterval(handle);
|
|
193
|
-
});
|
|
194
|
-
const contsub = sandbox.subscribeResume(() => {
|
|
195
|
-
start = Date.now();
|
|
196
|
-
handle = setTimeout(() => {
|
|
197
|
-
start = Date.now();
|
|
198
|
-
elapsed = 0;
|
|
199
|
-
handle = setInterval(exec, timeout, ...args);
|
|
200
|
-
exec(...args);
|
|
201
|
-
}, Math.floor((timeout || 0) - elapsed), ...args);
|
|
202
|
-
handlObj.handle = handle;
|
|
203
|
-
});
|
|
204
|
-
const handlObj = {
|
|
205
|
-
handle,
|
|
206
|
-
haltsub,
|
|
207
|
-
contsub,
|
|
208
|
-
};
|
|
209
|
-
sandbox.setIntervalHandles.set(sandBoxhandle, handlObj);
|
|
210
|
-
return sandBoxhandle;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
class Sandbox extends SandboxExec.default {
|
|
215
|
-
constructor(options) {
|
|
216
|
-
super(options, createEvalContext());
|
|
217
|
-
}
|
|
218
|
-
static audit(code, scopes = []) {
|
|
219
|
-
const globals = {};
|
|
220
|
-
for (const i of Object.getOwnPropertyNames(globalThis)) {
|
|
221
|
-
globals[i] = globalThis[i];
|
|
222
|
-
}
|
|
223
|
-
const sandbox = new SandboxExec.default({
|
|
224
|
-
globals,
|
|
225
|
-
audit: true,
|
|
226
|
-
});
|
|
227
|
-
return sandbox.executeTree(utils.createExecContext(sandbox, parser.default(code, true), createEvalContext()), scopes);
|
|
228
|
-
}
|
|
229
|
-
static parse(code) {
|
|
230
|
-
return parser.default(code);
|
|
231
|
-
}
|
|
232
|
-
compile(code, optimize = false) {
|
|
233
|
-
const parsed = parser.default(code, optimize);
|
|
234
|
-
const exec = (...scopes) => {
|
|
235
|
-
const context = utils.createExecContext(this, parsed, this.evalContext);
|
|
236
|
-
return { context, run: () => this.executeTree(context, [...scopes]).result };
|
|
237
|
-
};
|
|
238
|
-
return exec;
|
|
239
|
-
}
|
|
240
|
-
compileAsync(code, optimize = false) {
|
|
241
|
-
const parsed = parser.default(code, optimize);
|
|
242
|
-
const exec = (...scopes) => {
|
|
243
|
-
const context = utils.createExecContext(this, parsed, this.evalContext);
|
|
244
|
-
return {
|
|
245
|
-
context,
|
|
246
|
-
run: () => this.executeTreeAsync(context, [...scopes]).then((ret) => ret.result),
|
|
247
|
-
};
|
|
248
|
-
};
|
|
249
|
-
return exec;
|
|
250
|
-
}
|
|
251
|
-
compileExpression(code, optimize = false) {
|
|
252
|
-
const parsed = parser.default(code, optimize, true);
|
|
253
|
-
const exec = (...scopes) => {
|
|
254
|
-
const context = utils.createExecContext(this, parsed, this.evalContext);
|
|
255
|
-
return { context, run: () => this.executeTree(context, [...scopes]).result };
|
|
256
|
-
};
|
|
257
|
-
return exec;
|
|
258
|
-
}
|
|
259
|
-
compileExpressionAsync(code, optimize = false) {
|
|
260
|
-
const parsed = parser.default(code, optimize, true);
|
|
261
|
-
const exec = (...scopes) => {
|
|
262
|
-
const context = utils.createExecContext(this, parsed, this.evalContext);
|
|
263
|
-
return {
|
|
264
|
-
context,
|
|
265
|
-
run: () => this.executeTreeAsync(context, [...scopes]).then((ret) => ret.result),
|
|
266
|
-
};
|
|
267
|
-
};
|
|
268
|
-
return exec;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
exports.LocalScope = utils.LocalScope;
|
|
273
|
-
exports.SandboxAccessError = utils.SandboxAccessError;
|
|
274
|
-
exports.SandboxCapabilityError = utils.SandboxCapabilityError;
|
|
275
|
-
exports.SandboxError = utils.SandboxError;
|
|
276
|
-
exports.SandboxExecutionTreeError = utils.SandboxExecutionTreeError;
|
|
277
|
-
exports.default = Sandbox;
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { IEvalContext } from './eval.js';
|
|
2
|
-
import { Change, ExecReturn } from './executor.js';
|
|
3
|
-
import { IContext, IExecContext, IGlobals, IOptionParams, IScope, Scope, SubscriptionSubject, Ticks } from './utils.js';
|
|
4
|
-
export { IOptions, IContext, IExecContext, LocalScope, SandboxExecutionTreeError, SandboxCapabilityError, SandboxAccessError, SandboxError, } from './utils.js';
|
|
5
|
-
export default class SandboxExec {
|
|
6
|
-
evalContext?: IEvalContext | undefined;
|
|
7
|
-
readonly context: IContext;
|
|
8
|
-
readonly setSubscriptions: WeakMap<SubscriptionSubject, Map<string, Set<(modification: Change) => void>>>;
|
|
9
|
-
readonly changeSubscriptions: WeakMap<SubscriptionSubject, Set<(modification: Change) => void>>;
|
|
10
|
-
readonly sandboxFunctions: WeakMap<Function, IExecContext>;
|
|
11
|
-
private haltSubscriptions;
|
|
12
|
-
private resumeSubscriptions;
|
|
13
|
-
halted: boolean;
|
|
14
|
-
timeoutHandleCounter: number;
|
|
15
|
-
readonly setTimeoutHandles: Map<number, {
|
|
16
|
-
handle: number;
|
|
17
|
-
haltsub: {
|
|
18
|
-
unsubscribe: () => void;
|
|
19
|
-
};
|
|
20
|
-
contsub: {
|
|
21
|
-
unsubscribe: () => void;
|
|
22
|
-
};
|
|
23
|
-
}>;
|
|
24
|
-
readonly setIntervalHandles: Map<number, {
|
|
25
|
-
handle: number;
|
|
26
|
-
haltsub: {
|
|
27
|
-
unsubscribe: () => void;
|
|
28
|
-
};
|
|
29
|
-
contsub: {
|
|
30
|
-
unsubscribe: () => void;
|
|
31
|
-
};
|
|
32
|
-
}>;
|
|
33
|
-
constructor(options?: IOptionParams, evalContext?: IEvalContext | undefined);
|
|
34
|
-
static get SAFE_GLOBALS(): IGlobals;
|
|
35
|
-
static get SAFE_PROTOTYPES(): Map<any, Set<string>>;
|
|
36
|
-
subscribeGet(callback: (obj: SubscriptionSubject, name: string) => void, context: IExecContext): {
|
|
37
|
-
unsubscribe: () => void;
|
|
38
|
-
};
|
|
39
|
-
subscribeSet(obj: object, name: string, callback: (modification: Change) => void, context: SandboxExec | IExecContext): {
|
|
40
|
-
unsubscribe: () => void;
|
|
41
|
-
};
|
|
42
|
-
subscribeSetGlobal(obj: SubscriptionSubject, name: string, callback: (modification: Change) => void): {
|
|
43
|
-
unsubscribe: () => void;
|
|
44
|
-
};
|
|
45
|
-
subscribeHalt(cb: (args?: {
|
|
46
|
-
error: Error;
|
|
47
|
-
ticks: Ticks;
|
|
48
|
-
scope: Scope;
|
|
49
|
-
context: IExecContext;
|
|
50
|
-
}) => void): {
|
|
51
|
-
unsubscribe: () => void;
|
|
52
|
-
};
|
|
53
|
-
subscribeResume(cb: () => void): {
|
|
54
|
-
unsubscribe: () => void;
|
|
55
|
-
};
|
|
56
|
-
haltExecution(haltContext?: {
|
|
57
|
-
error: Error;
|
|
58
|
-
ticks: Ticks;
|
|
59
|
-
scope: Scope;
|
|
60
|
-
context: IExecContext;
|
|
61
|
-
}): void;
|
|
62
|
-
resumeExecution(): void;
|
|
63
|
-
getContext(fn: (...args: any[]) => any): IExecContext | undefined;
|
|
64
|
-
executeTree<T>(context: IExecContext, scopes?: IScope[]): ExecReturn<T>;
|
|
65
|
-
executeTreeAsync<T>(context: IExecContext, scopes?: IScope[]): Promise<ExecReturn<T>>;
|
|
66
|
-
}
|