@cuxt/sandboxjs 0.1.1 → 0.1.4
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 +17 -16
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './executorUtils';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
const require_types = require("../../utils/types.js");
|
|
2
|
+
require("../../utils/index.js");
|
|
3
|
+
const require_opsRegistry = require("../opsRegistry.js");
|
|
4
|
+
const require_executorUtils = require("../executorUtils.js");
|
|
5
|
+
//#region src/executor/ops/assignment.ts
|
|
6
|
+
require_opsRegistry.addOps(require_types.LispType.Assign, (params) => {
|
|
7
|
+
const { done, b, obj, context, scope, bobj, internal } = params;
|
|
8
|
+
require_executorUtils.assignCheck(obj, context);
|
|
9
|
+
obj.isGlobal = bobj?.isGlobal || false;
|
|
10
|
+
if (obj.isVariable) {
|
|
11
|
+
const s = scope.getWhereValScope(obj.prop, obj.prop === "this", internal);
|
|
12
|
+
if (s === null) throw new ReferenceError(`Cannot assign to undeclared variable '${obj.prop.toString()}'`);
|
|
13
|
+
s.set(obj.prop, b, internal);
|
|
14
|
+
if (obj.isGlobal) s.globals[obj.prop.toString()] = true;
|
|
15
|
+
else delete s.globals[obj.prop.toString()];
|
|
16
|
+
done(void 0, b);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (obj.prop === "length" && Array.isArray(obj.context) && typeof b === "number") {
|
|
20
|
+
const delta = BigInt(Math.abs(b - obj.context.length));
|
|
21
|
+
if (delta > 0n && require_executorUtils.checkHaltExpectedTicks(params, delta)) return;
|
|
22
|
+
}
|
|
23
|
+
done(void 0, obj.context[obj.prop] = b);
|
|
24
|
+
});
|
|
25
|
+
require_opsRegistry.addOps(require_types.LispType.AddEquals, (params) => {
|
|
26
|
+
const { done, b, obj, context } = params;
|
|
27
|
+
require_executorUtils.assignCheck(obj, context);
|
|
28
|
+
const result = obj.context[obj.prop] + b;
|
|
29
|
+
if (typeof result === "string" && require_executorUtils.checkHaltExpectedTicks(params, BigInt(result.length))) return;
|
|
30
|
+
done(void 0, obj.context[obj.prop] = result);
|
|
31
|
+
});
|
|
32
|
+
require_opsRegistry.addOps(require_types.LispType.SubractEquals, ({ done, b, obj, context }) => {
|
|
33
|
+
require_executorUtils.assignCheck(obj, context);
|
|
34
|
+
done(void 0, obj.context[obj.prop] -= b);
|
|
35
|
+
});
|
|
36
|
+
require_opsRegistry.addOps(require_types.LispType.DivideEquals, ({ done, b, obj, context }) => {
|
|
37
|
+
require_executorUtils.assignCheck(obj, context);
|
|
38
|
+
done(void 0, obj.context[obj.prop] /= b);
|
|
39
|
+
});
|
|
40
|
+
require_opsRegistry.addOps(require_types.LispType.MultiplyEquals, ({ done, b, obj, context }) => {
|
|
41
|
+
require_executorUtils.assignCheck(obj, context);
|
|
42
|
+
done(void 0, obj.context[obj.prop] *= b);
|
|
43
|
+
});
|
|
44
|
+
require_opsRegistry.addOps(require_types.LispType.PowerEquals, ({ done, b, obj, context }) => {
|
|
45
|
+
require_executorUtils.assignCheck(obj, context);
|
|
46
|
+
done(void 0, obj.context[obj.prop] **= b);
|
|
47
|
+
});
|
|
48
|
+
require_opsRegistry.addOps(require_types.LispType.ModulusEquals, ({ done, b, obj, context }) => {
|
|
49
|
+
require_executorUtils.assignCheck(obj, context);
|
|
50
|
+
done(void 0, obj.context[obj.prop] %= b);
|
|
51
|
+
});
|
|
52
|
+
require_opsRegistry.addOps(require_types.LispType.BitNegateEquals, ({ done, b, obj, context }) => {
|
|
53
|
+
require_executorUtils.assignCheck(obj, context);
|
|
54
|
+
done(void 0, obj.context[obj.prop] ^= b);
|
|
55
|
+
});
|
|
56
|
+
require_opsRegistry.addOps(require_types.LispType.BitAndEquals, ({ done, b, obj, context }) => {
|
|
57
|
+
require_executorUtils.assignCheck(obj, context);
|
|
58
|
+
done(void 0, obj.context[obj.prop] &= b);
|
|
59
|
+
});
|
|
60
|
+
require_opsRegistry.addOps(require_types.LispType.BitOrEquals, ({ done, b, obj, context }) => {
|
|
61
|
+
require_executorUtils.assignCheck(obj, context);
|
|
62
|
+
done(void 0, obj.context[obj.prop] |= b);
|
|
63
|
+
});
|
|
64
|
+
require_opsRegistry.addOps(require_types.LispType.ShiftLeftEquals, ({ done, b, obj, context }) => {
|
|
65
|
+
require_executorUtils.assignCheck(obj, context);
|
|
66
|
+
done(void 0, obj.context[obj.prop] <<= b);
|
|
67
|
+
});
|
|
68
|
+
require_opsRegistry.addOps(require_types.LispType.ShiftRightEquals, ({ done, b, obj, context }) => {
|
|
69
|
+
require_executorUtils.assignCheck(obj, context);
|
|
70
|
+
done(void 0, obj.context[obj.prop] >>= b);
|
|
71
|
+
});
|
|
72
|
+
require_opsRegistry.addOps(require_types.LispType.UnsignedShiftRightEquals, ({ done, b, obj, context }) => {
|
|
73
|
+
require_executorUtils.assignCheck(obj, context);
|
|
74
|
+
done(void 0, obj.context[obj.prop] >>>= b);
|
|
75
|
+
});
|
|
76
|
+
require_opsRegistry.addOps(require_types.LispType.AndEquals, ({ done, b, obj, context }) => {
|
|
77
|
+
require_executorUtils.assignCheck(obj, context);
|
|
78
|
+
done(void 0, obj.context[obj.prop] &&= b);
|
|
79
|
+
});
|
|
80
|
+
require_opsRegistry.addOps(require_types.LispType.OrEquals, ({ done, b, obj, context }) => {
|
|
81
|
+
require_executorUtils.assignCheck(obj, context);
|
|
82
|
+
done(void 0, obj.context[obj.prop] ||= b);
|
|
83
|
+
});
|
|
84
|
+
require_opsRegistry.addOps(require_types.LispType.NullishCoalescingEquals, ({ done, b, obj, context }) => {
|
|
85
|
+
require_executorUtils.assignCheck(obj, context);
|
|
86
|
+
done(void 0, obj.context[obj.prop] ??= b);
|
|
87
|
+
});
|
|
88
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
const require_errors = require("../../utils/errors.js");
|
|
2
|
+
const require_types = require("../../utils/types.js");
|
|
3
|
+
const require_functionReplacements = require("../../utils/functionReplacements.js");
|
|
4
|
+
const require_Prop = require("../../utils/Prop.js");
|
|
5
|
+
const require_Scope = require("../../utils/Scope.js");
|
|
6
|
+
require("../../utils/index.js");
|
|
7
|
+
const require_opsRegistry = require("../opsRegistry.js");
|
|
8
|
+
const require_executorUtils = require("../executorUtils.js");
|
|
9
|
+
//#region src/executor/ops/call.ts
|
|
10
|
+
require_opsRegistry.addOps(require_types.LispType.Call, (params) => {
|
|
11
|
+
const { done, a, b, obj, context } = params;
|
|
12
|
+
if (context.ctx.options.forbidFunctionCalls) throw new require_errors.SandboxCapabilityError("Function invocations are not allowed");
|
|
13
|
+
if (typeof a !== "function") throw new TypeError(`${typeof obj?.prop === "symbol" ? "Symbol" : obj?.prop} is not a function`);
|
|
14
|
+
const vals = new Array(b.length);
|
|
15
|
+
let valsLen = 0;
|
|
16
|
+
for (let i = 0; i < b.length; i++) {
|
|
17
|
+
const item = b[i];
|
|
18
|
+
if (item instanceof require_executorUtils.SpreadArray) {
|
|
19
|
+
const expanded = Array.isArray(item.item) ? item.item : [...item.item];
|
|
20
|
+
if (require_executorUtils.checkHaltExpectedTicks(params, BigInt(expanded.length))) return;
|
|
21
|
+
for (let j = 0; j < expanded.length; j++) vals[valsLen++] = require_Scope.sanitizeProp(expanded[j], context);
|
|
22
|
+
} else vals[valsLen++] = require_Scope.sanitizeProp(item, context);
|
|
23
|
+
}
|
|
24
|
+
vals.length = valsLen;
|
|
25
|
+
if (a === String) {
|
|
26
|
+
const result = String(vals[0]);
|
|
27
|
+
require_functionReplacements.checkTicksAndThrow(context, BigInt(result.length));
|
|
28
|
+
done(void 0, result);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (typeof obj === "function") {
|
|
32
|
+
const evl = context.evals.get(obj);
|
|
33
|
+
const receiver = require_Prop.getReplacementReceiver(obj);
|
|
34
|
+
let ret = evl ? evl(obj, ...vals) : receiver === void 0 ? obj(...vals) : obj.call(receiver, ...vals);
|
|
35
|
+
ret = require_Scope.sanitizeProp(ret, context);
|
|
36
|
+
if (ret !== null && typeof ret === "object" && ret instanceof require_Scope.DelayedSynchronousResult) Promise.resolve(ret.result).then((res) => done(void 0, res), (err) => done(err));
|
|
37
|
+
else done(void 0, ret);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const originalFn = obj.context[obj.prop];
|
|
41
|
+
if (originalFn === JSON.stringify && context.getSubscriptions.size) {
|
|
42
|
+
const cache = /* @__PURE__ */ new WeakSet();
|
|
43
|
+
let ticks = 0n;
|
|
44
|
+
const recurse = (x) => {
|
|
45
|
+
if (!x || !(typeof x === "object") || cache.has(x)) return;
|
|
46
|
+
cache.add(x);
|
|
47
|
+
const keys = Object.keys(x);
|
|
48
|
+
ticks += BigInt(keys.length);
|
|
49
|
+
for (const y of keys) {
|
|
50
|
+
context.getSubscriptions.forEach((cb) => cb(x, y));
|
|
51
|
+
recurse(x[y]);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
recurse(vals[0]);
|
|
55
|
+
require_functionReplacements.checkTicksAndThrow(context, ticks);
|
|
56
|
+
}
|
|
57
|
+
if (obj.context instanceof Array && require_executorUtils.arrayChange.has(originalFn) && (context.changeSubscriptions.get(obj.context) || context.changeSubscriptionsGlobal.get(obj.context))) {
|
|
58
|
+
let change = void 0;
|
|
59
|
+
let changed = false;
|
|
60
|
+
if (obj.prop === "push") {
|
|
61
|
+
change = {
|
|
62
|
+
type: "push",
|
|
63
|
+
added: vals
|
|
64
|
+
};
|
|
65
|
+
changed = !!vals.length;
|
|
66
|
+
} else if (obj.prop === "pop") {
|
|
67
|
+
change = {
|
|
68
|
+
type: "pop",
|
|
69
|
+
removed: obj.context.slice(-1)
|
|
70
|
+
};
|
|
71
|
+
changed = !!change.removed.length;
|
|
72
|
+
} else if (obj.prop === "shift") {
|
|
73
|
+
change = {
|
|
74
|
+
type: "shift",
|
|
75
|
+
removed: obj.context.slice(0, 1)
|
|
76
|
+
};
|
|
77
|
+
changed = !!change.removed.length;
|
|
78
|
+
} else if (obj.prop === "unshift") {
|
|
79
|
+
change = {
|
|
80
|
+
type: "unshift",
|
|
81
|
+
added: vals
|
|
82
|
+
};
|
|
83
|
+
changed = !!vals.length;
|
|
84
|
+
} else if (obj.prop === "splice") {
|
|
85
|
+
change = {
|
|
86
|
+
type: "splice",
|
|
87
|
+
startIndex: vals[0],
|
|
88
|
+
deleteCount: vals[1] === void 0 ? obj.context.length : vals[1],
|
|
89
|
+
added: vals.slice(2),
|
|
90
|
+
removed: obj.context.slice(vals[0], vals[1] === void 0 ? void 0 : vals[0] + vals[1])
|
|
91
|
+
};
|
|
92
|
+
changed = !!change.added.length || !!change.removed.length;
|
|
93
|
+
} else if (obj.prop === "reverse" || obj.prop === "sort") {
|
|
94
|
+
change = { type: obj.prop };
|
|
95
|
+
changed = !!obj.context.length;
|
|
96
|
+
} else if (obj.prop === "copyWithin") {
|
|
97
|
+
const len = vals[2] === void 0 ? obj.context.length - vals[1] : Math.min(obj.context.length, vals[2] - vals[1]);
|
|
98
|
+
change = {
|
|
99
|
+
type: "copyWithin",
|
|
100
|
+
startIndex: vals[0],
|
|
101
|
+
endIndex: vals[0] + len,
|
|
102
|
+
added: obj.context.slice(vals[1], vals[1] + len),
|
|
103
|
+
removed: obj.context.slice(vals[0], vals[0] + len)
|
|
104
|
+
};
|
|
105
|
+
changed = !!change.added.length || !!change.removed.length;
|
|
106
|
+
}
|
|
107
|
+
if (changed) {
|
|
108
|
+
const subs = context.changeSubscriptions.get(obj.context);
|
|
109
|
+
if (subs !== void 0) for (const cb of subs) cb(change);
|
|
110
|
+
const subsG = context.changeSubscriptionsGlobal.get(obj.context);
|
|
111
|
+
if (subsG !== void 0) for (const cb of subsG) cb(change);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
obj.get(context);
|
|
115
|
+
const evl = context.evals.get(originalFn);
|
|
116
|
+
const receiver = require_Prop.getReplacementReceiver(originalFn);
|
|
117
|
+
const thisArg = obj.isVariable && receiver !== void 0 ? receiver : obj.context;
|
|
118
|
+
let ret = evl ? evl.call(thisArg, ...vals) : a.call(thisArg, ...vals);
|
|
119
|
+
ret = require_Scope.sanitizeProp(ret, context);
|
|
120
|
+
if (ret !== null && typeof ret === "object" && ret instanceof require_Scope.DelayedSynchronousResult) Promise.resolve(ret.result).then((res) => done(void 0, res), (err) => done(err));
|
|
121
|
+
else done(void 0, ret);
|
|
122
|
+
});
|
|
123
|
+
require_opsRegistry.addOps(require_types.LispType.New, (params) => {
|
|
124
|
+
const { done, a, b, context } = params;
|
|
125
|
+
if (!context.ctx.globalsWhitelist.has(a) && !context.ctx.sandboxedFunctions.has(a)) throw new require_errors.SandboxAccessError(`Object construction not allowed: ${a.constructor.name}`);
|
|
126
|
+
const vals = b.map((item) => require_Scope.sanitizeProp(item, context));
|
|
127
|
+
const replacement = context.evals.get(a);
|
|
128
|
+
if (replacement) {
|
|
129
|
+
done(void 0, new replacement(...vals));
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const expectedTicks = getNewTicks(a, vals);
|
|
133
|
+
if (expectedTicks > 0n && require_executorUtils.checkHaltExpectedTicks(params, expectedTicks)) return;
|
|
134
|
+
done(void 0, new a(...vals));
|
|
135
|
+
});
|
|
136
|
+
function getNewTicks(ctor, args) {
|
|
137
|
+
if (ctor === Array) {
|
|
138
|
+
const n = args[0];
|
|
139
|
+
if (typeof n === "number" && args.length === 1) return BigInt(n);
|
|
140
|
+
return BigInt(args.length);
|
|
141
|
+
}
|
|
142
|
+
if (require_functionReplacements.typedArrayProtos.has(Object.getPrototypeOf(ctor.prototype))) {
|
|
143
|
+
const n = args[0];
|
|
144
|
+
if (typeof n === "number") return BigInt(n);
|
|
145
|
+
if (Array.isArray(n) || ArrayBuffer.isView(n)) return BigInt(n.length);
|
|
146
|
+
return 0n;
|
|
147
|
+
}
|
|
148
|
+
if (ctor === Map || ctor === Set) {
|
|
149
|
+
const iterable = args[0];
|
|
150
|
+
if (Array.isArray(iterable)) return BigInt(iterable.length);
|
|
151
|
+
return 0n;
|
|
152
|
+
}
|
|
153
|
+
if (ctor === String || ctor === RegExp) {
|
|
154
|
+
const s = args[0];
|
|
155
|
+
if (typeof s === "string") return BigInt(s.length);
|
|
156
|
+
return 0n;
|
|
157
|
+
}
|
|
158
|
+
return 0n;
|
|
159
|
+
}
|
|
160
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const require_types = require("../../utils/types.js");
|
|
2
|
+
require("../../utils/index.js");
|
|
3
|
+
const require_opsRegistry = require("../opsRegistry.js");
|
|
4
|
+
const require_executorUtils = require("../executorUtils.js");
|
|
5
|
+
//#region src/executor/ops/comparison.ts
|
|
6
|
+
require_opsRegistry.addOps(require_types.LispType.LargerThan, ({ done, a, b }) => done(void 0, a > b));
|
|
7
|
+
require_opsRegistry.addOps(require_types.LispType.SmallerThan, ({ done, a, b }) => done(void 0, a < b));
|
|
8
|
+
require_opsRegistry.addOps(require_types.LispType.LargerEqualThan, ({ done, a, b }) => done(void 0, a >= b));
|
|
9
|
+
require_opsRegistry.addOps(require_types.LispType.SmallerEqualThan, ({ done, a, b }) => done(void 0, a <= b));
|
|
10
|
+
require_opsRegistry.addOps(require_types.LispType.Equal, ({ done, a, b }) => done(void 0, a == b));
|
|
11
|
+
require_opsRegistry.addOps(require_types.LispType.StrictEqual, ({ done, a, b }) => done(void 0, a === b));
|
|
12
|
+
require_opsRegistry.addOps(require_types.LispType.NotEqual, ({ done, a, b }) => done(void 0, a != b));
|
|
13
|
+
require_opsRegistry.addOps(require_types.LispType.StrictNotEqual, ({ done, a, b }) => done(void 0, a !== b));
|
|
14
|
+
require_opsRegistry.addOps(require_types.LispType.And, ({ done, a, b }) => done(void 0, a && b));
|
|
15
|
+
require_opsRegistry.addOps(require_types.LispType.Or, ({ done, a, b }) => done(void 0, a || b));
|
|
16
|
+
require_opsRegistry.addOps(require_types.LispType.NullishCoalescing, ({ done, a, b }) => done(void 0, a ?? b));
|
|
17
|
+
require_opsRegistry.addOps(require_types.LispType.BitAnd, ({ done, a, b }) => done(void 0, a & b));
|
|
18
|
+
require_opsRegistry.addOps(require_types.LispType.BitOr, ({ done, a, b }) => done(void 0, a | b));
|
|
19
|
+
require_opsRegistry.addOps(require_types.LispType.Plus, (params) => {
|
|
20
|
+
const { done, a, b } = params;
|
|
21
|
+
const result = a + b;
|
|
22
|
+
if (typeof result === "string" && require_executorUtils.checkHaltExpectedTicks(params, BigInt(result.length))) return;
|
|
23
|
+
done(void 0, result);
|
|
24
|
+
});
|
|
25
|
+
require_opsRegistry.addOps(require_types.LispType.Minus, ({ done, a, b }) => done(void 0, a - b));
|
|
26
|
+
require_opsRegistry.addOps(require_types.LispType.Divide, ({ done, a, b }) => done(void 0, a / b));
|
|
27
|
+
require_opsRegistry.addOps(require_types.LispType.Power, ({ done, a, b }) => done(void 0, a ** b));
|
|
28
|
+
require_opsRegistry.addOps(require_types.LispType.BitNegate, ({ done, a, b }) => done(void 0, a ^ b));
|
|
29
|
+
require_opsRegistry.addOps(require_types.LispType.Multiply, ({ done, a, b }) => done(void 0, a * b));
|
|
30
|
+
require_opsRegistry.addOps(require_types.LispType.Modulus, ({ done, a, b }) => done(void 0, a % b));
|
|
31
|
+
require_opsRegistry.addOps(require_types.LispType.BitShiftLeft, ({ done, a, b }) => done(void 0, a << b));
|
|
32
|
+
require_opsRegistry.addOps(require_types.LispType.BitShiftRight, ({ done, a, b }) => done(void 0, a >> b));
|
|
33
|
+
require_opsRegistry.addOps(require_types.LispType.BitUnsignedShiftRight, ({ done, a, b }) => done(void 0, a >>> b));
|
|
34
|
+
require_opsRegistry.addOps(require_types.LispType.Instanceof, ({ done, a, b }) => done(void 0, a instanceof b));
|
|
35
|
+
require_opsRegistry.addOps(require_types.LispType.In, ({ done, a, b }) => done(void 0, a in b));
|
|
36
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
const require_errors = require("../../utils/errors.js");
|
|
2
|
+
const require_types = require("../../utils/types.js");
|
|
3
|
+
const require_Scope = require("../../utils/Scope.js");
|
|
4
|
+
require("../../utils/index.js");
|
|
5
|
+
const require_opsRegistry = require("../opsRegistry.js");
|
|
6
|
+
const require_executorUtils = require("../executorUtils.js");
|
|
7
|
+
//#region src/executor/ops/control.ts
|
|
8
|
+
require_opsRegistry.addOps(require_types.LispType.Loop, ({ exec, done, ticks, a, b, context, scope, statementLabels, internal, generatorYield }) => {
|
|
9
|
+
const [checkFirst, startInternal, getIterator, startStep, step, condition, beforeStep, isForAwait, label] = a;
|
|
10
|
+
const loopStatementTargets = [...require_executorUtils.normalizeStatementLabels(label).map((loopLabel) => require_executorUtils.createLoopTarget(loopLabel, false)), require_executorUtils.createLoopTarget()];
|
|
11
|
+
const loopTargets = require_executorUtils.addControlFlowTargets(statementLabels, loopStatementTargets);
|
|
12
|
+
if (isForAwait === require_types.LispType.True && exec !== require_executorUtils.execAsync) {
|
|
13
|
+
done(/* @__PURE__ */ new SyntaxError("for-await-of loops are only allowed inside async functions"));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
let loop = true;
|
|
17
|
+
const loopScope = new require_Scope.Scope(scope, {});
|
|
18
|
+
const internalVars = { $$obj: void 0 };
|
|
19
|
+
const interalScope = new require_Scope.Scope(loopScope, internalVars);
|
|
20
|
+
if (exec === require_executorUtils.execAsync) (async () => {
|
|
21
|
+
let ad;
|
|
22
|
+
ad = require_executorUtils.asyncDone((d) => exec(ticks, startStep, loopScope, context, d, void 0, internal, generatorYield));
|
|
23
|
+
internalVars["$$obj"] = (ad = require_executorUtils.asyncDone((d) => exec(ticks, getIterator, loopScope, context, d, void 0, internal, generatorYield))).isInstant === true ? ad.instant : (await ad.p).result;
|
|
24
|
+
if (isForAwait === require_types.LispType.True) {
|
|
25
|
+
const obj = internalVars["$$obj"];
|
|
26
|
+
internalVars["$$obj"] = obj[Symbol.asyncIterator] ? obj[Symbol.asyncIterator]() : obj[Symbol.iterator] ? obj[Symbol.iterator]() : obj;
|
|
27
|
+
}
|
|
28
|
+
ad = require_executorUtils.asyncDone((d) => exec(ticks, startInternal, interalScope, context, d, void 0, internal, generatorYield));
|
|
29
|
+
if (isForAwait === require_types.LispType.True) internalVars["$$next"] = await internalVars["$$next"];
|
|
30
|
+
if (checkFirst) loop = (ad = require_executorUtils.asyncDone((d) => exec(ticks, condition, interalScope, context, d, void 0, internal, generatorYield))).isInstant === true ? ad.instant : (await ad.p).result;
|
|
31
|
+
while (loop) {
|
|
32
|
+
const iterScope = new require_Scope.Scope(interalScope, {});
|
|
33
|
+
ad = require_executorUtils.asyncDone((d) => exec(ticks, beforeStep, iterScope, context, d, void 0, internal, generatorYield));
|
|
34
|
+
ad.isInstant === true ? ad.instant : (await ad.p).result;
|
|
35
|
+
const res = await require_executorUtils.executeTreeAsync(ticks, context, b, [iterScope], loopTargets, internal, generatorYield);
|
|
36
|
+
if (res instanceof require_executorUtils.ExecReturn && res.returned) {
|
|
37
|
+
done(void 0, res);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (res instanceof require_executorUtils.ExecReturn && res.controlFlow) {
|
|
41
|
+
if (!loopStatementTargets.some((target) => require_executorUtils.matchesControlFlowTarget(res.controlFlow, target))) {
|
|
42
|
+
done(void 0, res);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (res.breakLoop) break;
|
|
46
|
+
}
|
|
47
|
+
ad = require_executorUtils.asyncDone((d) => exec(ticks, step, interalScope, context, d, void 0, internal, generatorYield));
|
|
48
|
+
if (isForAwait === require_types.LispType.True) internalVars["$$next"] = await internalVars["$$next"];
|
|
49
|
+
loop = (ad = require_executorUtils.asyncDone((d) => exec(ticks, condition, interalScope, context, d, void 0, internal, generatorYield))).isInstant === true ? ad.instant : (await ad.p).result;
|
|
50
|
+
}
|
|
51
|
+
done();
|
|
52
|
+
})().catch(done);
|
|
53
|
+
else {
|
|
54
|
+
require_executorUtils.syncDone((d) => exec(ticks, startStep, loopScope, context, d, void 0, internal, generatorYield));
|
|
55
|
+
internalVars["$$obj"] = require_executorUtils.syncDone((d) => exec(ticks, getIterator, loopScope, context, d, void 0, internal, generatorYield)).result;
|
|
56
|
+
require_executorUtils.syncDone((d) => exec(ticks, startInternal, interalScope, context, d, void 0, internal, generatorYield));
|
|
57
|
+
if (checkFirst) loop = require_executorUtils.syncDone((d) => exec(ticks, condition, interalScope, context, d, void 0, internal, generatorYield)).result;
|
|
58
|
+
while (loop) {
|
|
59
|
+
const iterScope = new require_Scope.Scope(interalScope, {});
|
|
60
|
+
require_executorUtils.syncDone((d) => exec(ticks, beforeStep, iterScope, context, d, void 0, internal, generatorYield));
|
|
61
|
+
const res = require_executorUtils.executeTree(ticks, context, b, [iterScope], loopTargets, internal, generatorYield);
|
|
62
|
+
if (res instanceof require_executorUtils.ExecReturn && res.returned) {
|
|
63
|
+
done(void 0, res);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (res instanceof require_executorUtils.ExecReturn && res.controlFlow) {
|
|
67
|
+
if (!loopStatementTargets.some((target) => require_executorUtils.matchesControlFlowTarget(res.controlFlow, target))) {
|
|
68
|
+
done(void 0, res);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (res.breakLoop) break;
|
|
72
|
+
}
|
|
73
|
+
require_executorUtils.syncDone((d) => exec(ticks, step, interalScope, context, d, void 0, internal, generatorYield));
|
|
74
|
+
loop = require_executorUtils.syncDone((d) => exec(ticks, condition, interalScope, context, d, void 0, internal, generatorYield)).result;
|
|
75
|
+
}
|
|
76
|
+
done();
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
require_opsRegistry.addOps(require_types.LispType.If, ({ exec, done, ticks, a, b, context, scope, statementLabels, internal, generatorYield }) => {
|
|
80
|
+
exec(ticks, require_Scope.sanitizeProp(a, context) ? b.t : b.f, scope, context, done, statementLabels, internal, generatorYield);
|
|
81
|
+
});
|
|
82
|
+
require_opsRegistry.addOps(require_types.LispType.InlineIf, ({ exec, done, ticks, a, b, context, scope, internal, generatorYield }) => {
|
|
83
|
+
exec(ticks, require_Scope.sanitizeProp(a, context) ? b.t : b.f, scope, context, done, void 0, internal, generatorYield);
|
|
84
|
+
});
|
|
85
|
+
require_opsRegistry.addOps(require_types.LispType.InlineIfCase, ({ done, a, b }) => done(void 0, new require_executorUtils.If(a, b)));
|
|
86
|
+
require_opsRegistry.addOps(require_types.LispType.IfCase, ({ done, a, b }) => done(void 0, new require_executorUtils.If(a, b)));
|
|
87
|
+
require_opsRegistry.addOps(require_types.LispType.Labeled, ({ exec, done, ticks, a, b, context, scope, statementLabels, internal, generatorYield }) => {
|
|
88
|
+
const target = require_executorUtils.createLabeledStatementTarget(require_executorUtils.normalizeStatementLabel(a));
|
|
89
|
+
exec(ticks, b, scope, context, (...args) => {
|
|
90
|
+
if (args.length === 1) {
|
|
91
|
+
done(args[0]);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const res = args[1];
|
|
95
|
+
if (res instanceof require_executorUtils.ExecReturn && res.controlFlow && target) {
|
|
96
|
+
if (require_executorUtils.matchesControlFlowTarget(res.controlFlow, target)) {
|
|
97
|
+
done();
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
done(void 0, res);
|
|
102
|
+
}, require_executorUtils.addControlFlowTarget(statementLabels, target), internal, generatorYield);
|
|
103
|
+
});
|
|
104
|
+
require_opsRegistry.addOps(require_types.LispType.Switch, ({ exec, done, ticks, a, b, context, scope, statementLabels, internal, generatorYield }) => {
|
|
105
|
+
const switchTarget = require_executorUtils.createSwitchTarget();
|
|
106
|
+
const switchTargets = require_executorUtils.addControlFlowTarget(statementLabels, switchTarget);
|
|
107
|
+
exec(ticks, a, scope, context, (...args) => {
|
|
108
|
+
if (args.length === 1) {
|
|
109
|
+
done(args[0]);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
let toTest = args[1];
|
|
113
|
+
toTest = require_Scope.sanitizeProp(toTest, context);
|
|
114
|
+
if (exec === require_executorUtils.execSync) {
|
|
115
|
+
let res;
|
|
116
|
+
let isTrue = false;
|
|
117
|
+
for (const caseItem of b) if (isTrue || (isTrue = !caseItem[1] || toTest === require_Scope.sanitizeProp(require_executorUtils.syncDone((d) => exec(ticks, caseItem[1], scope, context, d, void 0, internal, generatorYield)).result, context))) {
|
|
118
|
+
if (!caseItem[2]) continue;
|
|
119
|
+
res = require_executorUtils.executeTree(ticks, context, caseItem[2], [scope], switchTargets, internal, generatorYield);
|
|
120
|
+
if (res.controlFlow) {
|
|
121
|
+
if (!require_executorUtils.matchesControlFlowTarget(res.controlFlow, switchTarget)) {
|
|
122
|
+
done(void 0, res);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (res.breakLoop) break;
|
|
126
|
+
}
|
|
127
|
+
if (res.returned) {
|
|
128
|
+
done(void 0, res);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (!caseItem[1]) break;
|
|
132
|
+
}
|
|
133
|
+
done();
|
|
134
|
+
} else (async () => {
|
|
135
|
+
let res;
|
|
136
|
+
let isTrue = false;
|
|
137
|
+
for (const caseItem of b) {
|
|
138
|
+
let ad;
|
|
139
|
+
if (isTrue || (isTrue = !caseItem[1] || toTest === require_Scope.sanitizeProp((ad = require_executorUtils.asyncDone((d) => exec(ticks, caseItem[1], scope, context, d, void 0, internal, generatorYield))).isInstant === true ? ad.instant : (await ad.p).result, context))) {
|
|
140
|
+
if (!caseItem[2]) continue;
|
|
141
|
+
res = await require_executorUtils.executeTreeAsync(ticks, context, caseItem[2], [scope], switchTargets, internal, generatorYield);
|
|
142
|
+
if (res.controlFlow) {
|
|
143
|
+
if (!require_executorUtils.matchesControlFlowTarget(res.controlFlow, switchTarget)) {
|
|
144
|
+
done(void 0, res);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (res.breakLoop) break;
|
|
148
|
+
}
|
|
149
|
+
if (res.returned) {
|
|
150
|
+
done(void 0, res);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (!caseItem[1]) break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
done();
|
|
157
|
+
})().catch(done);
|
|
158
|
+
}, void 0, internal, generatorYield);
|
|
159
|
+
});
|
|
160
|
+
require_opsRegistry.addOps(require_types.LispType.Try, ({ exec, done, ticks, a, b, context, scope, statementLabels, internal, generatorYield }) => {
|
|
161
|
+
const [exception, catchBody, finallyBody] = b;
|
|
162
|
+
require_executorUtils.executeTreeWithDone(exec, (...tryArgs) => {
|
|
163
|
+
const tryHadError = tryArgs.length === 1;
|
|
164
|
+
const tryError = tryHadError ? tryArgs[0] : void 0;
|
|
165
|
+
const tryResult = !tryHadError && tryArgs.length > 1 ? tryArgs[1] : void 0;
|
|
166
|
+
const executeFinallyAndComplete = (hadError, errorOrResult) => {
|
|
167
|
+
if (finallyBody && finallyBody.length > 0) require_executorUtils.executeTreeWithDone(exec, (...finallyArgs) => {
|
|
168
|
+
const finallyHadError = finallyArgs.length === 1;
|
|
169
|
+
const finallyResult = !finallyHadError && finallyArgs.length > 1 ? finallyArgs[1] : void 0;
|
|
170
|
+
if (finallyHadError) {
|
|
171
|
+
done(finallyArgs[0]);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
if (finallyResult instanceof require_executorUtils.ExecReturn && (finallyResult.returned || finallyResult.breakLoop || finallyResult.continueLoop)) {
|
|
175
|
+
done(void 0, finallyResult);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
if (hadError) done(errorOrResult);
|
|
179
|
+
else if (errorOrResult instanceof require_executorUtils.ExecReturn) if (errorOrResult.returned || errorOrResult.breakLoop || errorOrResult.continueLoop) done(void 0, errorOrResult);
|
|
180
|
+
else done();
|
|
181
|
+
else done();
|
|
182
|
+
}, ticks, context, finallyBody, [new require_Scope.Scope(scope, {})], statementLabels, internal, generatorYield);
|
|
183
|
+
else if (hadError) done(errorOrResult);
|
|
184
|
+
else if (errorOrResult instanceof require_executorUtils.ExecReturn) if (errorOrResult.returned || errorOrResult.breakLoop || errorOrResult.continueLoop) done(void 0, errorOrResult);
|
|
185
|
+
else done();
|
|
186
|
+
else done();
|
|
187
|
+
};
|
|
188
|
+
if (tryHadError && tryError instanceof require_errors.SandboxError) {
|
|
189
|
+
done(tryError);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
if (tryHadError && catchBody && catchBody.length > 0) {
|
|
193
|
+
const sc = {};
|
|
194
|
+
if (exception) sc[exception] = tryError;
|
|
195
|
+
require_executorUtils.executeTreeWithDone(exec, (...catchArgs) => {
|
|
196
|
+
const catchHadError = catchArgs.length === 1;
|
|
197
|
+
executeFinallyAndComplete(catchHadError, catchHadError ? catchArgs[0] : catchArgs.length > 1 ? catchArgs[1] : void 0);
|
|
198
|
+
}, ticks, context, catchBody, [new require_Scope.Scope(scope, sc)], statementLabels, internal, generatorYield);
|
|
199
|
+
} else executeFinallyAndComplete(tryHadError, tryHadError ? tryError : tryResult);
|
|
200
|
+
}, ticks, context, a, [new require_Scope.Scope(scope)], statementLabels, internal, generatorYield);
|
|
201
|
+
});
|
|
202
|
+
require_opsRegistry.addOps(require_types.LispType.Expression, ({ done, a }) => done(void 0, a.pop()));
|
|
203
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
const require_errors = require("../../utils/errors.js");
|
|
2
|
+
const require_CodeString = require("../../utils/CodeString.js");
|
|
3
|
+
const require_types = require("../../utils/types.js");
|
|
4
|
+
const require_Scope = require("../../utils/Scope.js");
|
|
5
|
+
require("../../utils/index.js");
|
|
6
|
+
const require_opsRegistry = require("../opsRegistry.js");
|
|
7
|
+
const require_executorUtils = require("../executorUtils.js");
|
|
8
|
+
//#region src/executor/ops/functions.ts
|
|
9
|
+
require_opsRegistry.addOps(require_types.LispType.ArrowFunction, ({ done, ticks, a, b, obj, context, scope, internal }) => {
|
|
10
|
+
if (typeof obj[2] === "string" || obj[2] instanceof require_CodeString.CodeString) if (context.allowJit && context.evalContext) obj[2] = b = context.evalContext.lispifyFunction(new require_CodeString.CodeString(obj[2]), context.constants);
|
|
11
|
+
else throw new require_errors.SandboxCapabilityError("Unevaluated code detected, JIT not allowed");
|
|
12
|
+
const argNames = a.slice(1);
|
|
13
|
+
if (a[0]) done(void 0, require_executorUtils.createFunctionAsync(argNames, b, ticks, context, scope, void 0, internal));
|
|
14
|
+
else done(void 0, require_executorUtils.createFunction(argNames, b, ticks, context, scope, void 0, internal));
|
|
15
|
+
});
|
|
16
|
+
require_opsRegistry.addOps(require_types.LispType.Function, ({ done, ticks, a, b, obj, context, scope, internal }) => {
|
|
17
|
+
if (typeof obj[2] === "string" || obj[2] instanceof require_CodeString.CodeString) if (context.allowJit && context.evalContext) obj[2] = b = context.evalContext.lispifyFunction(new require_CodeString.CodeString(obj[2]), context.constants, false, {
|
|
18
|
+
generatorDepth: a[1] === require_types.LispType.True ? 1 : 0,
|
|
19
|
+
asyncDepth: a[0] === require_types.LispType.True ? 1 : 0,
|
|
20
|
+
lispDepth: 0
|
|
21
|
+
});
|
|
22
|
+
else throw new require_errors.SandboxCapabilityError("Unevaluated code detected, JIT not allowed");
|
|
23
|
+
const isAsync = a[0];
|
|
24
|
+
const isGenerator = a[1];
|
|
25
|
+
const name = a[2];
|
|
26
|
+
const argNames = a.slice(3);
|
|
27
|
+
let func;
|
|
28
|
+
if (isAsync === require_types.LispType.True && isGenerator === require_types.LispType.True) func = require_executorUtils.createAsyncGeneratorFunction(argNames, b, ticks, context, scope, name, internal);
|
|
29
|
+
else if (isGenerator === require_types.LispType.True) func = require_executorUtils.createGeneratorFunction(argNames, b, ticks, context, scope, name, internal);
|
|
30
|
+
else if (isAsync === require_types.LispType.True) func = require_executorUtils.createFunctionAsync(argNames, b, ticks, context, scope, name, internal);
|
|
31
|
+
else func = require_executorUtils.createFunction(argNames, b, ticks, context, scope, name, internal);
|
|
32
|
+
if (name) scope.declare(name, require_types.VarType.var, func, false, internal);
|
|
33
|
+
done(void 0, func);
|
|
34
|
+
});
|
|
35
|
+
require_opsRegistry.addOps(require_types.LispType.InlineFunction, ({ done, ticks, a, b, obj, context, scope, internal }) => {
|
|
36
|
+
if (typeof obj[2] === "string" || obj[2] instanceof require_CodeString.CodeString) if (context.allowJit && context.evalContext) obj[2] = b = context.evalContext.lispifyFunction(new require_CodeString.CodeString(obj[2]), context.constants, false, {
|
|
37
|
+
generatorDepth: a[1] === require_types.LispType.True ? 1 : 0,
|
|
38
|
+
asyncDepth: a[0] === require_types.LispType.True ? 1 : 0,
|
|
39
|
+
lispDepth: 0
|
|
40
|
+
});
|
|
41
|
+
else throw new require_errors.SandboxCapabilityError("Unevaluated code detected, JIT not allowed");
|
|
42
|
+
const isAsync = a[0];
|
|
43
|
+
const isGenerator = a[1];
|
|
44
|
+
const name = a[2];
|
|
45
|
+
const argNames = a.slice(3);
|
|
46
|
+
if (name) scope = new require_Scope.Scope(scope, {});
|
|
47
|
+
let func;
|
|
48
|
+
if (isAsync === require_types.LispType.True && isGenerator === require_types.LispType.True) func = require_executorUtils.createAsyncGeneratorFunction(argNames, b, ticks, context, scope, name, internal);
|
|
49
|
+
else if (isGenerator === require_types.LispType.True) func = require_executorUtils.createGeneratorFunction(argNames, b, ticks, context, scope, name, internal);
|
|
50
|
+
else if (isAsync === require_types.LispType.True) func = require_executorUtils.createFunctionAsync(argNames, b, ticks, context, scope, name, internal);
|
|
51
|
+
else func = require_executorUtils.createFunction(argNames, b, ticks, context, scope, name, internal);
|
|
52
|
+
if (name) scope.declare(name, require_types.VarType.let, func, false, internal);
|
|
53
|
+
done(void 0, func);
|
|
54
|
+
});
|
|
55
|
+
//#endregion
|
|
File without changes
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require("./prop.js");
|
|
2
|
+
require("./call.js");
|
|
3
|
+
require("./object.js");
|
|
4
|
+
require("./literals.js");
|
|
5
|
+
require("./unary.js");
|
|
6
|
+
require("./assignment.js");
|
|
7
|
+
require("./comparison.js");
|
|
8
|
+
require("./variables.js");
|
|
9
|
+
require("./misc.js");
|
|
10
|
+
require("./functions.js");
|
|
11
|
+
require("./control.js");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
const require_errors = require("../../utils/errors.js");
|
|
2
|
+
const require_types = require("../../utils/types.js");
|
|
3
|
+
const require_Scope = require("../../utils/Scope.js");
|
|
4
|
+
require("../../utils/index.js");
|
|
5
|
+
const require_opsRegistry = require("../opsRegistry.js");
|
|
6
|
+
const require_executorUtils = require("../executorUtils.js");
|
|
7
|
+
//#region src/executor/ops/literals.ts
|
|
8
|
+
require_opsRegistry.addOps(require_types.LispType.Number, ({ done, b }) => done(void 0, Number(b.replace(/_/g, ""))));
|
|
9
|
+
require_opsRegistry.addOps(require_types.LispType.BigInt, ({ done, b }) => done(void 0, BigInt(b.replace(/_/g, ""))));
|
|
10
|
+
require_opsRegistry.addOps(require_types.LispType.RegexIndex, ({ done, b, context }) => {
|
|
11
|
+
const reg = context.constants.regexes[parseInt(b)];
|
|
12
|
+
if (!context.ctx.globalsWhitelist.has(RegExp)) throw new require_errors.SandboxCapabilityError("Regex not permitted");
|
|
13
|
+
else done(void 0, new ((context.evals.get(RegExp)) ?? RegExp)(reg.regex, reg.flags));
|
|
14
|
+
});
|
|
15
|
+
require_opsRegistry.addOps(require_types.LispType.LiteralIndex, (params) => {
|
|
16
|
+
const { exec, done, ticks, b, context, scope, internal, generatorYield } = params;
|
|
17
|
+
const [, name, js] = context.constants.literals[parseInt(b)];
|
|
18
|
+
const found = [];
|
|
19
|
+
let f;
|
|
20
|
+
const resnums = [];
|
|
21
|
+
while (f = require_executorUtils.literalRegex.exec(name)) if (!f[2]) {
|
|
22
|
+
found.push(js[parseInt(f[3], 10)]);
|
|
23
|
+
resnums.push(f[3]);
|
|
24
|
+
}
|
|
25
|
+
exec(ticks, found, scope, context, (...args) => {
|
|
26
|
+
const reses = {};
|
|
27
|
+
if (args.length === 1) {
|
|
28
|
+
done(args[0]);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const processed = args[1];
|
|
32
|
+
for (const i of Object.keys(processed)) {
|
|
33
|
+
const num = resnums[i];
|
|
34
|
+
reses[num] = processed[i];
|
|
35
|
+
}
|
|
36
|
+
const result = name.replace(/(\\\\)*(\\)?\${(\d+)}/g, (match, $$, $, num) => {
|
|
37
|
+
if ($) return match;
|
|
38
|
+
const res = reses[num];
|
|
39
|
+
return ($$ ? $$ : "") + `${require_Scope.sanitizeProp(res, context)}`;
|
|
40
|
+
});
|
|
41
|
+
if (require_executorUtils.checkHaltExpectedTicks(params, BigInt(result.length))) return;
|
|
42
|
+
done(void 0, result);
|
|
43
|
+
}, void 0, internal, generatorYield);
|
|
44
|
+
});
|
|
45
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|