@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.
Files changed (226) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +198 -185
  3. package/{build → dist/cjs}/Sandbox.d.ts +15 -6
  4. package/dist/cjs/Sandbox.js +126 -0
  5. package/dist/{SandboxExec.d.ts → cjs/SandboxExec.d.ts} +8 -17
  6. package/dist/cjs/SandboxExec.js +227 -0
  7. package/{build/eval.d.ts → dist/cjs/eval/index.d.ts} +10 -2
  8. package/dist/cjs/eval/index.js +233 -0
  9. package/dist/cjs/executor/executorUtils.d.ts +161 -0
  10. package/dist/cjs/executor/executorUtils.js +930 -0
  11. package/dist/cjs/executor/index.d.ts +1 -0
  12. package/dist/cjs/executor/index.js +2 -0
  13. package/dist/cjs/executor/ops/assignment.d.ts +1 -0
  14. package/dist/cjs/executor/ops/assignment.js +88 -0
  15. package/dist/cjs/executor/ops/call.d.ts +1 -0
  16. package/dist/cjs/executor/ops/call.js +160 -0
  17. package/dist/cjs/executor/ops/comparison.d.ts +1 -0
  18. package/dist/cjs/executor/ops/comparison.js +36 -0
  19. package/dist/cjs/executor/ops/control.d.ts +1 -0
  20. package/dist/cjs/executor/ops/control.js +203 -0
  21. package/dist/cjs/executor/ops/functions.d.ts +1 -0
  22. package/dist/cjs/executor/ops/functions.js +55 -0
  23. package/dist/cjs/executor/ops/index.d.ts +0 -0
  24. package/dist/cjs/executor/ops/index.js +11 -0
  25. package/dist/cjs/executor/ops/literals.d.ts +1 -0
  26. package/dist/cjs/executor/ops/literals.js +45 -0
  27. package/dist/cjs/executor/ops/misc.d.ts +1 -0
  28. package/dist/cjs/executor/ops/misc.js +25 -0
  29. package/dist/cjs/executor/ops/object.d.ts +1 -0
  30. package/dist/cjs/executor/ops/object.js +51 -0
  31. package/dist/cjs/executor/ops/prop.d.ts +1 -0
  32. package/dist/cjs/executor/ops/prop.js +70 -0
  33. package/dist/cjs/executor/ops/unary.d.ts +1 -0
  34. package/dist/cjs/executor/ops/unary.js +48 -0
  35. package/dist/cjs/executor/ops/variables.d.ts +1 -0
  36. package/dist/cjs/executor/ops/variables.js +16 -0
  37. package/dist/cjs/executor/opsRegistry.d.ts +33 -0
  38. package/dist/cjs/executor/opsRegistry.js +8 -0
  39. package/dist/cjs/package.json +3 -0
  40. package/dist/cjs/parser/index.d.ts +3 -0
  41. package/dist/cjs/parser/index.js +1 -0
  42. package/dist/{parser.d.ts → cjs/parser/lisp.d.ts} +29 -42
  43. package/dist/cjs/parser/lispTypes/conditionals.d.ts +2 -0
  44. package/dist/cjs/parser/lispTypes/conditionals.js +135 -0
  45. package/dist/cjs/parser/lispTypes/control.d.ts +2 -0
  46. package/dist/cjs/parser/lispTypes/control.js +204 -0
  47. package/dist/cjs/parser/lispTypes/declarations.d.ts +2 -0
  48. package/dist/cjs/parser/lispTypes/declarations.js +99 -0
  49. package/dist/cjs/parser/lispTypes/index.d.ts +3 -0
  50. package/dist/cjs/parser/lispTypes/index.js +17 -0
  51. package/dist/cjs/parser/lispTypes/operators.d.ts +2 -0
  52. package/dist/cjs/parser/lispTypes/operators.js +252 -0
  53. package/dist/cjs/parser/lispTypes/shared.d.ts +38 -0
  54. package/dist/cjs/parser/lispTypes/structures.d.ts +2 -0
  55. package/dist/cjs/parser/lispTypes/structures.js +188 -0
  56. package/dist/cjs/parser/lispTypes/values.d.ts +2 -0
  57. package/dist/cjs/parser/lispTypes/values.js +89 -0
  58. package/dist/cjs/parser/parserUtils.d.ts +34 -0
  59. package/dist/cjs/parser/parserUtils.js +968 -0
  60. package/dist/cjs/utils/CodeString.d.ts +16 -0
  61. package/dist/cjs/utils/CodeString.js +64 -0
  62. package/dist/cjs/utils/ExecContext.d.ts +34 -0
  63. package/dist/cjs/utils/ExecContext.js +171 -0
  64. package/dist/cjs/utils/Prop.d.ts +16 -0
  65. package/dist/cjs/utils/Prop.js +81 -0
  66. package/dist/cjs/utils/Scope.d.ts +47 -0
  67. package/dist/cjs/utils/Scope.js +127 -0
  68. package/dist/cjs/utils/errors.d.ts +10 -0
  69. package/dist/cjs/utils/errors.js +12 -0
  70. package/dist/cjs/utils/functionReplacements.d.ts +11 -0
  71. package/dist/cjs/utils/functionReplacements.js +362 -0
  72. package/dist/cjs/utils/index.d.ts +7 -0
  73. package/dist/cjs/utils/index.js +7 -0
  74. package/dist/cjs/utils/types.d.ts +221 -0
  75. package/dist/cjs/utils/types.js +164 -0
  76. package/dist/cjs/utils/unraw.js +145 -0
  77. package/dist/{node → esm}/Sandbox.d.ts +15 -6
  78. package/dist/esm/Sandbox.js +115 -0
  79. package/dist/esm/Sandbox.js.map +1 -0
  80. package/{build → dist/esm}/SandboxExec.d.ts +8 -17
  81. package/dist/esm/SandboxExec.js +224 -0
  82. package/dist/esm/SandboxExec.js.map +1 -0
  83. package/dist/{eval.d.ts → esm/eval/index.d.ts} +10 -2
  84. package/dist/esm/eval/index.js +235 -0
  85. package/dist/esm/eval/index.js.map +1 -0
  86. package/dist/esm/executor/executorUtils.d.ts +161 -0
  87. package/dist/esm/executor/executorUtils.js +898 -0
  88. package/dist/esm/executor/executorUtils.js.map +1 -0
  89. package/dist/esm/executor/index.d.ts +1 -0
  90. package/dist/esm/executor/index.js +2 -0
  91. package/dist/esm/executor/ops/assignment.d.ts +1 -0
  92. package/dist/esm/executor/ops/assignment.js +90 -0
  93. package/dist/esm/executor/ops/assignment.js.map +1 -0
  94. package/dist/esm/executor/ops/call.d.ts +1 -0
  95. package/dist/esm/executor/ops/call.js +162 -0
  96. package/dist/esm/executor/ops/call.js.map +1 -0
  97. package/dist/esm/executor/ops/comparison.d.ts +1 -0
  98. package/dist/esm/executor/ops/comparison.js +38 -0
  99. package/dist/esm/executor/ops/comparison.js.map +1 -0
  100. package/dist/esm/executor/ops/control.d.ts +1 -0
  101. package/dist/esm/executor/ops/control.js +205 -0
  102. package/dist/esm/executor/ops/control.js.map +1 -0
  103. package/dist/esm/executor/ops/functions.d.ts +1 -0
  104. package/dist/esm/executor/ops/functions.js +57 -0
  105. package/dist/esm/executor/ops/functions.js.map +1 -0
  106. package/dist/esm/executor/ops/index.d.ts +0 -0
  107. package/dist/esm/executor/ops/index.js +11 -0
  108. package/dist/esm/executor/ops/literals.d.ts +1 -0
  109. package/dist/esm/executor/ops/literals.js +47 -0
  110. package/dist/esm/executor/ops/literals.js.map +1 -0
  111. package/dist/esm/executor/ops/misc.d.ts +1 -0
  112. package/dist/esm/executor/ops/misc.js +27 -0
  113. package/dist/esm/executor/ops/misc.js.map +1 -0
  114. package/dist/esm/executor/ops/object.d.ts +1 -0
  115. package/dist/esm/executor/ops/object.js +53 -0
  116. package/dist/esm/executor/ops/object.js.map +1 -0
  117. package/dist/esm/executor/ops/prop.d.ts +1 -0
  118. package/dist/esm/executor/ops/prop.js +72 -0
  119. package/dist/esm/executor/ops/prop.js.map +1 -0
  120. package/dist/esm/executor/ops/unary.d.ts +1 -0
  121. package/dist/esm/executor/ops/unary.js +50 -0
  122. package/dist/esm/executor/ops/unary.js.map +1 -0
  123. package/dist/esm/executor/ops/variables.d.ts +1 -0
  124. package/dist/esm/executor/ops/variables.js +18 -0
  125. package/dist/esm/executor/ops/variables.js.map +1 -0
  126. package/dist/esm/executor/opsRegistry.d.ts +33 -0
  127. package/dist/esm/executor/opsRegistry.js +9 -0
  128. package/dist/esm/executor/opsRegistry.js.map +1 -0
  129. package/dist/esm/package.json +3 -0
  130. package/dist/esm/parser/index.d.ts +3 -0
  131. package/dist/esm/parser/index.js +1 -0
  132. package/{build/parser.d.ts → dist/esm/parser/lisp.d.ts} +29 -42
  133. package/dist/esm/parser/lispTypes/conditionals.d.ts +2 -0
  134. package/dist/esm/parser/lispTypes/conditionals.js +137 -0
  135. package/dist/esm/parser/lispTypes/conditionals.js.map +1 -0
  136. package/dist/esm/parser/lispTypes/control.d.ts +2 -0
  137. package/dist/esm/parser/lispTypes/control.js +206 -0
  138. package/dist/esm/parser/lispTypes/control.js.map +1 -0
  139. package/dist/esm/parser/lispTypes/declarations.d.ts +2 -0
  140. package/dist/esm/parser/lispTypes/declarations.js +101 -0
  141. package/dist/esm/parser/lispTypes/declarations.js.map +1 -0
  142. package/dist/esm/parser/lispTypes/index.d.ts +3 -0
  143. package/dist/esm/parser/lispTypes/index.js +19 -0
  144. package/dist/esm/parser/lispTypes/index.js.map +1 -0
  145. package/dist/esm/parser/lispTypes/operators.d.ts +2 -0
  146. package/dist/esm/parser/lispTypes/operators.js +254 -0
  147. package/dist/esm/parser/lispTypes/operators.js.map +1 -0
  148. package/dist/esm/parser/lispTypes/shared.d.ts +38 -0
  149. package/dist/esm/parser/lispTypes/structures.d.ts +2 -0
  150. package/dist/esm/parser/lispTypes/structures.js +190 -0
  151. package/dist/esm/parser/lispTypes/structures.js.map +1 -0
  152. package/dist/esm/parser/lispTypes/values.d.ts +2 -0
  153. package/dist/esm/parser/lispTypes/values.js +91 -0
  154. package/dist/esm/parser/lispTypes/values.js.map +1 -0
  155. package/dist/esm/parser/parserUtils.d.ts +34 -0
  156. package/dist/esm/parser/parserUtils.js +959 -0
  157. package/dist/esm/parser/parserUtils.js.map +1 -0
  158. package/dist/esm/utils/CodeString.d.ts +16 -0
  159. package/dist/esm/utils/CodeString.js +66 -0
  160. package/dist/esm/utils/CodeString.js.map +1 -0
  161. package/dist/esm/utils/ExecContext.d.ts +34 -0
  162. package/dist/esm/utils/ExecContext.js +168 -0
  163. package/dist/esm/utils/ExecContext.js.map +1 -0
  164. package/dist/esm/utils/Prop.d.ts +16 -0
  165. package/dist/esm/utils/Prop.js +80 -0
  166. package/dist/esm/utils/Prop.js.map +1 -0
  167. package/dist/esm/utils/Scope.d.ts +47 -0
  168. package/dist/esm/utils/Scope.js +122 -0
  169. package/dist/esm/utils/Scope.js.map +1 -0
  170. package/dist/esm/utils/errors.d.ts +10 -0
  171. package/dist/esm/utils/errors.js +10 -0
  172. package/dist/esm/utils/errors.js.map +1 -0
  173. package/dist/esm/utils/functionReplacements.d.ts +11 -0
  174. package/dist/esm/utils/functionReplacements.js +361 -0
  175. package/dist/esm/utils/functionReplacements.js.map +1 -0
  176. package/dist/esm/utils/index.d.ts +7 -0
  177. package/dist/esm/utils/index.js +7 -0
  178. package/dist/esm/utils/types.d.ts +221 -0
  179. package/dist/esm/utils/types.js +160 -0
  180. package/dist/esm/utils/types.js.map +1 -0
  181. package/dist/esm/utils/unraw.js +147 -0
  182. package/dist/esm/utils/unraw.js.map +1 -0
  183. package/dist/umd/Sandbox.min.js +2 -0
  184. package/dist/umd/Sandbox.min.js.map +1 -0
  185. package/dist/umd/SandboxExec.min.js +2 -0
  186. package/dist/umd/SandboxExec.min.js.map +1 -0
  187. package/package.json +17 -16
  188. package/build/Sandbox.js +0 -62
  189. package/build/SandboxExec.js +0 -214
  190. package/build/eval.js +0 -205
  191. package/build/executor.d.ts +0 -124
  192. package/build/executor.js +0 -1554
  193. package/build/parser.js +0 -1527
  194. package/build/unraw.js +0 -168
  195. package/build/utils.d.ts +0 -264
  196. package/build/utils.js +0 -362
  197. package/dist/Sandbox.d.ts +0 -25
  198. package/dist/Sandbox.js +0 -270
  199. package/dist/Sandbox.js.map +0 -1
  200. package/dist/Sandbox.min.js +0 -2
  201. package/dist/Sandbox.min.js.map +0 -1
  202. package/dist/SandboxExec.js +0 -218
  203. package/dist/SandboxExec.js.map +0 -1
  204. package/dist/SandboxExec.min.js +0 -2
  205. package/dist/SandboxExec.min.js.map +0 -1
  206. package/dist/executor.d.ts +0 -124
  207. package/dist/executor.js +0 -1558
  208. package/dist/executor.js.map +0 -1
  209. package/dist/node/Sandbox.js +0 -277
  210. package/dist/node/SandboxExec.d.ts +0 -66
  211. package/dist/node/SandboxExec.js +0 -225
  212. package/dist/node/eval.d.ts +0 -27
  213. package/dist/node/executor.d.ts +0 -124
  214. package/dist/node/executor.js +0 -1575
  215. package/dist/node/parser.d.ts +0 -154
  216. package/dist/node/parser.js +0 -1704
  217. package/dist/node/utils.d.ts +0 -264
  218. package/dist/node/utils.js +0 -385
  219. package/dist/parser.js +0 -1690
  220. package/dist/parser.js.map +0 -1
  221. package/dist/unraw.d.ts +0 -11
  222. package/dist/utils.d.ts +0 -264
  223. package/dist/utils.js +0 -365
  224. package/dist/utils.js.map +0 -1
  225. /package/{build → dist/cjs/utils}/unraw.d.ts +0 -0
  226. /package/dist/{node → esm/utils}/unraw.d.ts +0 -0
@@ -0,0 +1 @@
1
+ export * from './executorUtils';
@@ -0,0 +1,2 @@
1
+ require("./opsRegistry.js");
2
+ require("./executorUtils.js");
@@ -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 {};