@cuxt/sandboxjs 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +11 -9
  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
@@ -1 +0,0 @@
1
- {"version":3,"file":"Sandbox.js","sources":["../src/eval.ts","../src/Sandbox.ts"],"sourcesContent":["import { createFunction, createFunctionAsync } from './executor.js';\r\nimport parse, { Lisp, lispifyFunction } from './parser.js';\r\nimport { IExecContext, LispType, Ticks } from './utils.js';\r\n\r\nexport interface IEvalContext {\r\n sandboxFunction: typeof sandboxFunction;\r\n sandboxAsyncFunction: typeof sandboxAsyncFunction;\r\n sandboxedEval: (func: SandboxFunction, context: IExecContext) => SandboxEval;\r\n sandboxedSetTimeout: typeof sandboxedSetTimeout;\r\n sandboxedSetInterval: typeof sandboxedSetInterval;\r\n sandboxedClearTimeout: typeof sandboxedClearTimeout;\r\n sandboxedClearInterval: typeof sandboxedClearInterval;\r\n lispifyFunction: typeof lispifyFunction;\r\n}\r\nexport type SandboxFunction = (code: string, ...args: string[]) => () => unknown;\r\nexport type SandboxEval = (code: string) => unknown;\r\nexport type SandboxSetTimeout = (\r\n handler: TimerHandler,\r\n timeout?: number,\r\n ...args: unknown[]\r\n) => any;\r\nexport type SandboxSetInterval = (\r\n handler: TimerHandler,\r\n timeout?: number,\r\n ...args: unknown[]\r\n) => any;\r\nexport type SandboxClearTimeout = (handle: number) => void;\r\nexport type SandboxClearInterval = (handle: number) => void;\r\n\r\nexport function createEvalContext(): IEvalContext {\r\n return {\r\n sandboxFunction,\r\n sandboxAsyncFunction,\r\n sandboxedEval,\r\n sandboxedSetTimeout,\r\n sandboxedSetInterval,\r\n sandboxedClearTimeout,\r\n sandboxedClearInterval,\r\n lispifyFunction,\r\n };\r\n}\r\n\r\nfunction SB() {}\r\nexport function sandboxFunction(context: IExecContext): SandboxFunction {\r\n SandboxFunction.prototype = SB.prototype;\r\n return SandboxFunction;\r\n function SandboxFunction(...params: string[]) {\r\n const code = params.pop() || '';\r\n const parsed = parse(code);\r\n return createFunction(\r\n params,\r\n parsed.tree,\r\n context.ctx.ticks,\r\n {\r\n ...context,\r\n constants: parsed.constants,\r\n tree: parsed.tree,\r\n },\r\n undefined,\r\n 'anonymous',\r\n );\r\n }\r\n}\r\n\r\nexport type SandboxAsyncFunction = (code: string, ...args: string[]) => () => Promise<unknown>;\r\nfunction SAF() {}\r\nexport function sandboxAsyncFunction(context: IExecContext): SandboxAsyncFunction {\r\n SandboxAsyncFunction.prototype = SAF.prototype;\r\n return SandboxAsyncFunction;\r\n function SandboxAsyncFunction(...params: string[]) {\r\n const code = params.pop() || '';\r\n const parsed = parse(code);\r\n return createFunctionAsync(\r\n params,\r\n parsed.tree,\r\n context.ctx.ticks,\r\n {\r\n ...context,\r\n constants: parsed.constants,\r\n tree: parsed.tree,\r\n },\r\n undefined,\r\n 'anonymous',\r\n );\r\n }\r\n}\r\n\r\nfunction SE() {}\r\nexport function sandboxedEval(func: SandboxFunction, context: IExecContext): SandboxEval {\r\n sandboxEval.prototype = SE.prototype;\r\n return sandboxEval;\r\n function sandboxEval(code: string) {\r\n // Parse the code and wrap last statement in return for completion value\r\n const parsed = parse(code);\r\n const tree = wrapLastStatementInReturn(parsed.tree);\r\n // Create and execute function with modified tree\r\n return createFunction(\r\n [],\r\n tree,\r\n context.ctx.ticks,\r\n {\r\n ...context,\r\n constants: parsed.constants,\r\n tree,\r\n },\r\n undefined,\r\n 'anonymous',\r\n )();\r\n }\r\n}\r\n\r\nfunction wrapLastStatementInReturn(tree: Lisp[]): Lisp[] {\r\n if (tree.length === 0) return tree;\r\n const newTree = [...tree];\r\n const lastIndex = newTree.length - 1;\r\n const lastStmt = newTree[lastIndex];\r\n\r\n // Only wrap if it's not already a return or throw\r\n if (Array.isArray(lastStmt) && lastStmt.length >= 1) {\r\n const op = lastStmt[0];\r\n\r\n // Don't wrap Return (8) or Throw (47) - they already control flow\r\n if (op === LispType.Return || op === LispType.Throw) {\r\n return newTree;\r\n }\r\n\r\n // List of statement types that should have undefined completion value\r\n // These match JavaScript semantics where declarations and control structures\r\n // don't produce a completion value\r\n const statementTypes = [\r\n LispType.Let, // 3\r\n LispType.Const, // 4\r\n LispType.Var, // 35\r\n LispType.Function, // 38\r\n LispType.If, // 14\r\n LispType.Loop, // 39\r\n LispType.Try, // 40\r\n LispType.Switch, // 41\r\n LispType.Block, // 43\r\n LispType.Expression, // 44\r\n ];\r\n\r\n // If the last statement is a declaration or control structure,\r\n // don't wrap it (it will naturally return undefined)\r\n if (statementTypes.includes(op)) {\r\n return newTree;\r\n }\r\n\r\n // For all other types (expressions, operators, etc.),\r\n // wrap in return to capture the completion value\r\n newTree[lastIndex] = [LispType.Return, LispType.None, lastStmt];\r\n }\r\n\r\n return newTree;\r\n}\r\n\r\nfunction sST() {}\r\nexport function sandboxedSetTimeout(\r\n func: SandboxFunction,\r\n context: IExecContext,\r\n): SandboxSetTimeout {\r\n sandboxSetTimeout.prototype = sST.prototype;\r\n return sandboxSetTimeout;\r\n function sandboxSetTimeout(handler: TimerHandler, timeout?: number, ...args: unknown[]) {\r\n const sandbox = context.ctx.sandbox;\r\n const exec = (...a: any[]) => {\r\n const h = typeof handler === 'string' ? func(handler) : handler;\r\n haltsub.unsubscribe();\r\n contsub.unsubscribe();\r\n sandbox.setTimeoutHandles.delete(sandBoxhandle);\r\n return h(...a);\r\n };\r\n\r\n const sandBoxhandle = ++sandbox.timeoutHandleCounter;\r\n\r\n let start = Date.now();\r\n let handle: number = setTimeout(exec, timeout, ...args);\r\n\r\n let elapsed = 0;\r\n const haltsub = sandbox.subscribeHalt(() => {\r\n elapsed = Date.now() - start + elapsed;\r\n clearTimeout(handle);\r\n });\r\n const contsub = sandbox.subscribeResume(() => {\r\n start = Date.now();\r\n const remaining = Math.floor((timeout || 0) - elapsed);\r\n handle = setTimeout(exec, remaining, ...args);\r\n sandbox.setTimeoutHandles.set(sandBoxhandle, {\r\n handle,\r\n haltsub,\r\n contsub,\r\n });\r\n });\r\n sandbox.setTimeoutHandles.set(sandBoxhandle, {\r\n handle,\r\n haltsub,\r\n contsub,\r\n });\r\n return sandBoxhandle;\r\n }\r\n}\r\n\r\nfunction sCT() {}\r\nexport function sandboxedClearTimeout(context: IExecContext): SandboxClearTimeout {\r\n sandboxClearTimeout.prototype = sCT.prototype;\r\n return sandboxClearTimeout;\r\n function sandboxClearTimeout(handle: number) {\r\n const sandbox = context.ctx.sandbox;\r\n const timeoutHandle = sandbox.setTimeoutHandles.get(handle);\r\n if (timeoutHandle) {\r\n clearTimeout(timeoutHandle.handle);\r\n timeoutHandle.haltsub.unsubscribe();\r\n timeoutHandle.contsub.unsubscribe();\r\n sandbox.setTimeoutHandles.delete(handle);\r\n }\r\n }\r\n}\r\nfunction sCI() {}\r\nexport function sandboxedClearInterval(context: IExecContext): SandboxClearInterval {\r\n sandboxClearInterval.prototype = sCI.prototype;\r\n return sandboxClearInterval;\r\n function sandboxClearInterval(handle: number) {\r\n const sandbox = context.ctx.sandbox;\r\n const intervalHandle = sandbox.setIntervalHandles.get(handle);\r\n if (intervalHandle) {\r\n clearInterval(intervalHandle.handle);\r\n intervalHandle.haltsub.unsubscribe();\r\n intervalHandle.contsub.unsubscribe();\r\n sandbox.setIntervalHandles.delete(handle);\r\n }\r\n }\r\n}\r\n\r\nfunction sSI() {}\r\nexport function sandboxedSetInterval(\r\n func: SandboxFunction,\r\n context: IExecContext,\r\n): SandboxSetInterval {\r\n sandboxSetInterval.prototype = sSI.prototype;\r\n return sandboxSetInterval;\r\n function sandboxSetInterval(\r\n handler: TimerHandler,\r\n timeout: number | undefined,\r\n ...args: unknown[]\r\n ) {\r\n const sandbox = context.ctx.sandbox;\r\n const h = typeof handler === 'string' ? func(handler) : handler;\r\n const exec = (...a: any[]) => {\r\n start = Date.now();\r\n elapsed = 0;\r\n return h(...a);\r\n };\r\n\r\n const sandBoxhandle = ++sandbox.timeoutHandleCounter;\r\n\r\n let start = Date.now();\r\n let handle: number = setInterval(exec, timeout, ...args);\r\n\r\n let elapsed = 0;\r\n const haltsub = sandbox.subscribeHalt(() => {\r\n elapsed = Date.now() - start + elapsed;\r\n clearInterval(handle);\r\n });\r\n const contsub = sandbox.subscribeResume(() => {\r\n start = Date.now();\r\n handle = setTimeout(\r\n () => {\r\n start = Date.now();\r\n elapsed = 0;\r\n handle = setInterval(exec, timeout, ...args);\r\n exec(...args);\r\n },\r\n Math.floor((timeout || 0) - elapsed),\r\n ...args,\r\n );\r\n handlObj.handle = handle;\r\n });\r\n\r\n const handlObj = {\r\n handle,\r\n haltsub,\r\n contsub,\r\n };\r\n sandbox.setIntervalHandles.set(sandBoxhandle, handlObj);\r\n return sandBoxhandle;\r\n }\r\n}\r\n","import { createExecContext, IExecContext, IOptionParams, IScope } from './utils.js';\r\nimport { createEvalContext } from './eval.js';\r\nimport { ExecReturn } from './executor.js';\r\nimport parse from './parser.js';\r\nimport SandboxExec from './SandboxExec.js';\r\nexport {\r\n LocalScope,\r\n SandboxExecutionTreeError,\r\n SandboxCapabilityError,\r\n SandboxAccessError,\r\n SandboxError,\r\n} from './utils.js';\r\n\r\nexport default class Sandbox extends SandboxExec {\r\n constructor(options?: IOptionParams) {\r\n super(options, createEvalContext());\r\n }\r\n\r\n static audit<T>(code: string, scopes: IScope[] = []): ExecReturn<T> {\r\n const globals: Record<string, unknown> = {};\r\n for (const i of Object.getOwnPropertyNames(globalThis) as [keyof typeof globalThis]) {\r\n globals[i] = globalThis[i];\r\n }\r\n const sandbox = new SandboxExec({\r\n globals,\r\n audit: true,\r\n });\r\n return sandbox.executeTree(\r\n createExecContext(sandbox, parse(code, true), createEvalContext()),\r\n scopes,\r\n );\r\n }\r\n\r\n static parse(code: string) {\r\n return parse(code);\r\n }\r\n\r\n compile<T>(\r\n code: string,\r\n optimize = false,\r\n ): (...scopes: IScope[]) => { context: IExecContext; run: () => T } {\r\n const parsed = parse(code, optimize);\r\n const exec = (...scopes: IScope[]) => {\r\n const context = createExecContext(this, parsed, this.evalContext);\r\n return { context, run: () => this.executeTree<T>(context, [...scopes]).result };\r\n };\r\n return exec;\r\n }\r\n\r\n compileAsync<T>(\r\n code: string,\r\n optimize = false,\r\n ): (...scopes: IScope[]) => { context: IExecContext; run: () => Promise<T> } {\r\n const parsed = parse(code, optimize);\r\n const exec = (...scopes: IScope[]) => {\r\n const context = createExecContext(this, parsed, this.evalContext);\r\n return {\r\n context,\r\n run: () => this.executeTreeAsync<T>(context, [...scopes]).then((ret) => ret.result),\r\n };\r\n };\r\n return exec;\r\n }\r\n\r\n compileExpression<T>(\r\n code: string,\r\n optimize = false,\r\n ): (...scopes: IScope[]) => { context: IExecContext; run: () => T } {\r\n const parsed = parse(code, optimize, true);\r\n const exec = (...scopes: IScope[]) => {\r\n const context = createExecContext(this, parsed, this.evalContext);\r\n return { context, run: () => this.executeTree<T>(context, [...scopes]).result };\r\n };\r\n return exec;\r\n }\r\n\r\n compileExpressionAsync<T>(\r\n code: string,\r\n optimize = false,\r\n ): (...scopes: IScope[]) => { context: IExecContext; run: () => Promise<T> } {\r\n const parsed = parse(code, optimize, true);\r\n const exec = (...scopes: IScope[]) => {\r\n const context = createExecContext(this, parsed, this.evalContext);\r\n return {\r\n context,\r\n run: () => this.executeTreeAsync<T>(context, [...scopes]).then((ret) => ret.result),\r\n };\r\n };\r\n return exec;\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- const AsyncFunction=Object.getPrototypeOf(async function(){}).constructor,GeneratorFunction=Object.getPrototypeOf(function*(){}).constructor,AsyncGeneratorFunction=Object.getPrototypeOf(async function*(){}).constructor,SandboxGlobal=function(e){for(const t in e)this[t]=e[t]};class ExecContext{constructor(e,t,n,o,r,s,i,a,c,p,l,d){this.ctx=e,this.constants=t,this.tree=n,this.getSubscriptions=o,this.setSubscriptions=r,this.changeSubscriptions=s,this.setSubscriptionsGlobal=i,this.changeSubscriptionsGlobal=a,this.evals=c,this.registerSandboxFunction=p,this.allowJit=l,this.evalContext=d}}function createContext(e,t){const n=new SandboxGlobal(t.globals),o={sandbox:e,globalsWhitelist:new Set(Object.values(t.globals)),prototypeWhitelist:new Map([...t.prototypeWhitelist].map(e=>[e[0].prototype,e[1]])),options:t,globalScope:new Scope(null,t.globals,n),sandboxGlobal:n,ticks:{ticks:0n,tickLimit:t.executionQuota},sandboxedFunctions:new WeakSet};return o.prototypeWhitelist.set(Object.getPrototypeOf([][Symbol.iterator]()),new Set),"undefined"!=typeof Response&&o.prototypeWhitelist.set(Response.prototype,new Set),"undefined"!=typeof Request&&o.prototypeWhitelist.set(Request.prototype,new Set),"undefined"!=typeof Headers&&o.prototypeWhitelist.set(Headers.prototype,new Set),"undefined"!=typeof FormData&&o.prototypeWhitelist.set(FormData.prototype,new Set),"undefined"!=typeof Blob&&o.prototypeWhitelist.set(Blob.prototype,new Set),"undefined"!=typeof URLSearchParams&&o.prototypeWhitelist.set(URLSearchParams.prototype,new Set),"undefined"!=typeof AbortController&&o.prototypeWhitelist.set(AbortController.prototype,new Set),"undefined"!=typeof ReadableStream&&o.prototypeWhitelist.set(ReadableStream.prototype,new Set),"undefined"!=typeof TransformStream&&o.prototypeWhitelist.set(TransformStream.prototype,new Set),"undefined"!=typeof WritableStream&&o.prototypeWhitelist.set(WritableStream.prototype,new Set),"undefined"!=typeof TextEncoder&&o.prototypeWhitelist.set(TextEncoder.prototype,new Set),"undefined"!=typeof TextDecoder&&o.prototypeWhitelist.set(TextDecoder.prototype,new Set),o}function createExecContext(sandbox,executionTree,evalContext){const evals=new Map,execContext=new ExecContext(sandbox.context,executionTree.constants,executionTree.tree,new Set,new WeakMap,new WeakMap,sandbox.setSubscriptions,sandbox.changeSubscriptions,evals,e=>sandbox.sandboxFunctions.set(e,execContext),!!evalContext,evalContext);if(evalContext){const func=evalContext.sandboxFunction(execContext),asyncFunc=evalContext.sandboxAsyncFunction(execContext);evals.set(Function,func),evals.set(AsyncFunction,asyncFunc),evals.set(GeneratorFunction,func),evals.set(AsyncGeneratorFunction,asyncFunc),evals.set(eval,evalContext.sandboxedEval(func,execContext)),evals.set(setTimeout,evalContext.sandboxedSetTimeout(func,execContext)),evals.set(setInterval,evalContext.sandboxedSetInterval(func,execContext)),evals.set(clearTimeout,evalContext.sandboxedClearTimeout(execContext)),evals.set(clearInterval,evalContext.sandboxedClearInterval(execContext));for(const[e,t]of evals)sandbox.context.prototypeWhitelist.set(t.prototype,new Set),sandbox.context.prototypeWhitelist.set(e.prototype,new Set)}return execContext}class CodeString{constructor(e){this.ref={str:""},e instanceof CodeString?(this.ref=e.ref,this.start=e.start,this.end=e.end):(this.ref.str=e,this.start=0,this.end=e.length)}substring(e,t){if(!this.length)return this;(e=this.start+e)<0&&(e=0),e>this.end&&(e=this.end),(t=void 0===t?this.end:this.start+t)<0&&(t=0),t>this.end&&(t=this.end);const n=new CodeString(this);return n.start=e,n.end=t,n}get length(){const e=this.end-this.start;return e<0?0:e}char(e){if(this.start!==this.end)return this.ref.str[this.start+e]}toString(){return this.ref.str.substring(this.start,this.end)}trimStart(){const e=/^\s+/.exec(this.toString()),t=new CodeString(this);return e&&(t.start+=e[0].length),t}slice(e,t){return e<0&&(e=this.end-this.start+e),e<0&&(e=0),void 0===t&&(t=this.end-this.start),t<0&&(t=this.end-this.start+t),t<0&&(t=0),this.substring(e,t)}trim(){const e=this.trimStart(),t=/\s+$/.exec(e.toString());return t&&(e.end-=t[0].length),e}valueOf(){return this.toString()}}function keysOnly(e){const t=Object.assign({},e);for(const e in t)t[e]=!0;return t}const reservedWords=new Set(["await","break","case","catch","class","const","continue","debugger","default","delete","do","else","enum","export","extends","false","finally","for","function","if","implements","import","in","instanceof","let","new","null","return","super","switch","this","throw","true","try","typeof","var","void","while","with"]);class Scope{constructor(e,t={},n){this.const={},this.let={},this.var={};const o=void 0!==n||null===e;this.parent=e,this.allVars=t,this.let=o?this.let:keysOnly(t),this.var=o?keysOnly(t):this.var,this.globals=null===e?keysOnly(t):{},this.functionThis=n}get(e){const t="this"===e,n=this.getWhereValScope(e,t);return n&&t?new Prop({this:n.functionThis},e,!1,!1,!0):n?new Prop(n.allVars,e,e in n.const,e in n.globals,!0):new Prop(void 0,e)}set(e,t){if("this"===e)throw new SyntaxError('"this" cannot be assigned');if(reservedWords.has(e))throw new SyntaxError("Unexepected token '"+e+"'");const n=this.get(e);if(void 0===n.context)throw new ReferenceError(`Variable '${e}' was not declared.`);if(null===n.context)throw new TypeError(`Cannot set properties of null, (setting '${e}')`);if(n.isConst)throw new TypeError("Assignment to constant variable");if(n.isGlobal)throw new SandboxError(`Cannot override global variable '${e}'`);return n.context[n.prop]=t,n}getWhereValScope(e,t){return t?void 0!==this.functionThis?this:this.parent?.getWhereValScope(e,t)||null:!(e in this.allVars)||e in{}&&!hasOwnProperty(this.allVars,e)?this.parent?.getWhereValScope(e,t)||null:this}getWhereVarScope(e,t=!1){return!(e in this.allVars)||e in{}&&!hasOwnProperty(this.allVars,e)?null===this.parent||t||void 0!==this.functionThis?this:this.parent.getWhereVarScope(e,t):this}declare(e,t,n=void 0,o=!1){if("this"===e)throw new SyntaxError('"this" cannot be declared');if(reservedWords.has(e))throw new SyntaxError("Unexepected token '"+e+"'");const r=this.getWhereVarScope(e,"var"!==t);if("var"===t){if(r.var[e])return r.allVars[e]=n,o?r.globals[e]=!0:delete r.globals[e],new Prop(r.allVars,e,!1,r.globals[e],!0);if(e in r.allVars)throw new SyntaxError(`Identifier '${e}' has already been declared`)}if(e in r.allVars)throw new SyntaxError(`Identifier '${e}' has already been declared`);return o&&(r.globals[e]=!0),r[t][e]=!0,r.allVars[e]=n,new Prop(this.allVars,e,"const"===t,o,!0)}}class LocalScope{}class SandboxError extends Error{}class SandboxExecutionQuotaExceededError extends SandboxError{}class SandboxExecutionTreeError extends SandboxError{}class SandboxCapabilityError extends SandboxError{}class SandboxAccessError extends SandboxError{}function isLisp(e){return Array.isArray(e)&&"number"==typeof e[0]&&0!==e[0]&&88!==e[0]}class Prop{constructor(e,t,n=!1,o=!1,r=!1){this.context=e,this.prop=t,this.isConst=n,this.isGlobal=o,this.isVariable=r}get(e){const t=this.context;if(void 0===t)throw new ReferenceError(`${this.prop.toString()} is not defined`);if(null===t)throw new TypeError(`Cannot read properties of null, (reading '${this.prop.toString()}')`);return e.getSubscriptions.forEach(e=>e(t,this.prop.toString())),t[this.prop]}}function hasOwnProperty(e,t){return Object.prototype.hasOwnProperty.call(e,t)}class ExecReturn{constructor(e,t,n,o=!1,r=!1){this.auditReport=e,this.result=t,this.returned=n,this.breakLoop=o,this.continueLoop=r}}const optional={};function generateArgs(e,t){const n={};return e.forEach((e,o)=>{e.startsWith("...")?n[e.substring(3)]=t.slice(o):n[e]=t[o]}),n}function createFunction(e,t,n,o,r,s){if(o.ctx.options.forbidFunctionCreation)throw new SandboxCapabilityError("Function creation is forbidden");let i;return i=void 0===s?(...s)=>{const i=generateArgs(e,s);return executeTree(n,o,t,void 0===r?[]:[new Scope(r,i)]).result}:function(...s){const i=generateArgs(e,s);return executeTree(n,o,t,void 0===r?[]:[new Scope(r,i,this)]).result},o.registerSandboxFunction(i),o.ctx.sandboxedFunctions.add(i),i}function createFunctionAsync(e,t,n,o,r,s){if(o.ctx.options.forbidFunctionCreation)throw new SandboxCapabilityError("Function creation is forbidden");if(!o.ctx.prototypeWhitelist?.has(Promise.prototype))throw new SandboxCapabilityError("Async/await not permitted");let i;return i=void 0===s?async(...s)=>{const i=generateArgs(e,s);return(await executeTreeAsync(n,o,t,void 0===r?[]:[new Scope(r,i)])).result}:async function(...s){const i=generateArgs(e,s);return(await executeTreeAsync(n,o,t,void 0===r?[]:[new Scope(r,i,this)])).result},o.registerSandboxFunction(i),o.ctx.sandboxedFunctions.add(i),i}function assignCheck(e,t,n="assign"){if(void 0===e.context)throw new ReferenceError(`Cannot ${n} value to undefined.`);if(e.isConst)throw new TypeError("Assignment to constant variable.");if(e.isGlobal)throw new SandboxAccessError(`Cannot ${n} property '${e.prop.toString()}' of a global object`);if(null===e.context)throw new TypeError("Cannot set properties of null");if("function"==typeof e.context[e.prop]&&!hasOwnProperty(e.context,e.prop))throw new SandboxAccessError(`Override prototype property '${e.prop.toString()}' not allowed`);"delete"===n?hasOwnProperty(e.context,e.prop)&&(t.changeSubscriptions.get(e.context)?.forEach(t=>t({type:"delete",prop:e.prop.toString()})),t.changeSubscriptionsGlobal.get(e.context)?.forEach(t=>t({type:"delete",prop:e.prop.toString()}))):hasOwnProperty(e.context,e.prop)?(t.setSubscriptions.get(e.context)?.get(e.prop.toString())?.forEach(e=>e({type:"replace"})),t.setSubscriptionsGlobal.get(e.context)?.get(e.prop.toString())?.forEach(e=>e({type:"replace"}))):(t.changeSubscriptions.get(e.context)?.forEach(t=>t({type:"create",prop:e.prop.toString()})),t.changeSubscriptionsGlobal.get(e.context)?.forEach(t=>t({type:"create",prop:e.prop.toString()})))}const arrayChange=new Set([[].push,[].pop,[].shift,[].unshift,[].splice,[].reverse,[].sort,[].copyWithin]);class KeyVal{constructor(e,t){this.key=e,this.val=t}}class SpreadObject{constructor(e){this.item=e}}class SpreadArray{constructor(e){this.item=e}}class If{constructor(e,t){this.t=e,this.f=t}}const literalRegex=/(\$\$)*(\$)?\${(\d+)}/g,ops=new Map;function addOps(e,t){ops.set(e,t)}const prorptyKeyTypes=["string","number","symbol"];function isPropertyKey(e){return prorptyKeyTypes.includes(typeof e)}function hasPossibleProperties(e){return null!=e}function getGlobalProp(e,t,n){if(!e)return;const o="function"==typeof e;e instanceof Prop&&(n||(n=e),e=e.get(t));const r=n?.prop||"prop";if(e===globalThis)return new Prop({[r]:t.ctx.sandboxGlobal},r,n?.isConst||!1,!1,n?.isVariable||!1);const s=o&&t.evals.get(e);return s?new Prop({[r]:s},r,n?.isConst||!1,!0,n?.isVariable||!1):void 0}function sanitizeArray(e,t,n=new WeakSet){if(!Array.isArray(e))return e;if(n.has(e))return e;n.add(e);for(let o=0;o<e.length;o++){const r=e[o];if(r===globalThis)e[o]=t.ctx.sandboxGlobal;else if("function"==typeof r){const n=t.evals.get(r);n&&(e[o]=n)}else sanitizeArray(r,t,n)}return e}function valueOrProp(e,t){return e instanceof Prop?e.get(t):e!==optional?e:void 0}function execMany(e,t,n,o,r,s,i){t===execSync?_execManySync(e,n,o,r,s,i):_execManyAsync(e,n,o,r,s,i).catch(o)}function _execManySync(e,t,n,o,r,s){const i=[];for(let a=0;a<t.length;a++){let c=syncDone(n=>execSync(e,t[a],o,r,n,s)).result;if(c instanceof ExecReturn&&(c.returned||c.breakLoop||c.continueLoop))return void n(void 0,c);if(isLisp(t[a])&&8===t[a][0])return void n(void 0,new ExecReturn(r.ctx.auditReport,c,!0));i.push(c)}n(void 0,i)}async function _execManyAsync(e,t,n,o,r,s){const i=[];for(let a=0;a<t.length;a++){let c;try{let n;c=!0===(n=asyncDone(n=>execAsync(e,t[a],o,r,n,s))).isInstant?n.instant:(await n.p).result}catch(e){return void n(e)}if(c instanceof ExecReturn&&(c.returned||c.breakLoop||c.continueLoop))return void n(void 0,c);if(isLisp(t[a])&&8===t[a][0])return void n(void 0,new ExecReturn(r.ctx.auditReport,c,!0));i.push(c)}n(void 0,i)}function asyncDone(e){let t,n=!1;const o=new Promise((o,r)=>{e((...e)=>{1===e.length?r(e[0]):(n=!0,t=e[1],o({result:e[1]}))})});return{isInstant:n,instant:t,p:o}}function syncDone(e){let t,n;if(e((...e)=>{n=1===e.length?{error:e[0]}:void 0,t=e[1]}),n)throw n.error;return{result:t}}async function execAsync(e,t,n,o,r,s){let i=r;const a=new Promise(e=>{i=(...t)=>{r(...t),e()}});if(!_execNoneRecurse(e,t,n,o,i,!0,s)&&isLisp(t)){let r,a=t[0];try{let i;r=!0===(i=asyncDone(r=>execAsync(e,t[1],n,o,r,s))).isInstant?i.instant:(await i.p).result}catch(e){return void i(e)}let c,p=r;try{p=r instanceof Prop?r.get(o):r}catch(e){return void i(e)}if(20===a||21===a){if(null==p)return void i(void 0,optional);a=20===a?1:5}if(p===optional){if(1===a||5===a)return void i(void 0,p);p=void 0}if(89===a&&null!=p)return void i(void 0,p);try{let r;c=!0===(r=asyncDone(r=>execAsync(e,t[2],n,o,r,s))).isInstant?r.instant:(await r.p).result}catch(e){return void i(e)}let l=c;try{l=c instanceof Prop?c.get(o):c}catch(e){return void i(e)}l===optional&&(l=void 0),performOp({op:a,exec:execAsync,done:i,ticks:e,a:p,b:l,obj:r,context:o,scope:n,bobj:c,inLoopOrSwitch:s,tree:t})}await a}function execSync(e,t,n,o,r,s){if(!_execNoneRecurse(e,t,n,o,r,!1,s)&&isLisp(t)){let i=t[0],a=syncDone(r=>execSync(e,t[1],n,o,r,s)).result,c=a instanceof Prop?a.get(o):a;if(20===i||21===i){if(null==c)return void r(void 0,optional);i=20===i?1:5}if(c===optional){if(1===i||5===i)return void r(void 0,c);c=void 0}if(89===i&&null!=c)return void r(void 0,c);let p=syncDone(r=>execSync(e,t[2],n,o,r,s)).result,l=p instanceof Prop?p.get(o):p;l===optional&&(l=void 0),performOp({op:i,exec:execSync,done:r,ticks:e,a:c,b:l,obj:a,context:o,scope:n,bobj:p,inLoopOrSwitch:s,tree:t})}}function checkHaltExpectedTicks(e,t=0){const n=e.context.ctx.sandbox,o=e.context.ctx.options,{ticks:r,scope:s,context:i,done:a,op:c}=e;if(n.halted){const t=n.subscribeResume(()=>{t.unsubscribe();try{const t=ops.get(c);if(!t)return void a(new SyntaxError("Unknown operator: "+c));t(e)}catch(e){if(o.haltOnSandboxError&&e instanceof SandboxError){const t=n.subscribeResume(()=>{t.unsubscribe(),a(e)});n.haltExecution({error:e,ticks:r,scope:s,context:i})}else a(e)}});return!0}if(r.tickLimit&&r.tickLimit<=r.ticks+BigInt(t)){const t=n.subscribeResume(()=>{t.unsubscribe();try{const t=ops.get(c);if(!t)return void a(new SyntaxError("Unknown operator: "+c));t(e)}catch(e){if(i.ctx.options.haltOnSandboxError&&e instanceof SandboxError){const t=n.subscribeResume(()=>{t.unsubscribe(),a(e)});n.haltExecution({error:e,ticks:r,scope:s,context:i})}else a(e)}}),o=new SandboxExecutionQuotaExceededError("Execution quota exceeded");return n.haltExecution({error:o,ticks:r,scope:s,context:i}),!0}return!1}function performOp(e){const{done:t,op:n,ticks:o,context:r,scope:s}=e;o.ticks++;const i=r.ctx.sandbox;if(!checkHaltExpectedTicks(e))try{const o=ops.get(n);if(!o)return void t(new SandboxExecutionTreeError("Unknown operator: "+n));o(e)}catch(e){if(r.ctx.options.haltOnSandboxError&&e instanceof SandboxError){const n=i.subscribeResume(()=>{n.unsubscribe(),t(e)});i.haltExecution({error:e,ticks:o,scope:s,context:r})}else t(e)}}addOps(1,({done:e,a:t,b:n,obj:o,context:r,scope:s})=>{if(null===t)throw new TypeError(`Cannot read properties of null (reading '${n?.toString()}')`);if(isPropertyKey(n)||(n=`${n}`),void 0===t&&void 0===o&&"string"==typeof n){const t=s.get(n);t.context===r.ctx.sandboxGlobal&&r.ctx.options.audit&&r.ctx.auditReport?.globalsAccess.add(n);return void e(void 0,getGlobalProp(t.context?t.context[t.prop]:void 0,r,t)||t)}if(void 0===t)throw new TypeError(`Cannot read properties of undefined (reading '${n.toString()}')`);if(!hasPossibleProperties(t))return void e(void 0,new Prop(void 0,n));const i="function"==typeof t||!hasOwnProperty(t,n);if(r.ctx.options.audit&&i){let e=Object.getPrototypeOf(t);do{hasOwnProperty(e,n)&&(r.ctx.auditReport&&!r.ctx.auditReport.prototypeAccess[e.constructor.name]&&(r.ctx.auditReport.prototypeAccess[e.constructor.name]=new Set),r.ctx.auditReport?.prototypeAccess[e.constructor.name].add(n))}while(e=Object.getPrototypeOf(e))}if(i){if("function"==typeof t&&hasOwnProperty(t,n)){const o=r.ctx.prototypeWhitelist.get(t.prototype),s=r.ctx.options.prototypeReplacements.get(t);if(s)return void e(void 0,new Prop(s(t,!0),n));if((!o||o.size&&!o.has(n))&&!r.ctx.sandboxedFunctions.has(t))throw new SandboxAccessError(`Static method or property access not permitted: ${t.name}.${n.toString()}`)}if(hasOwnProperty(t,n)){const o=r.ctx.options.prototypeReplacements.get(t);if(o)return void e(void 0,new Prop(o(t,!0),n));if(r.ctx.sandboxedFunctions.has(t))return void e(void 0,new Prop(t,n,!1,!1));let s=t.prototype;for(;null!==s;){const o=r.ctx.prototypeWhitelist.get(s);if(o&&(!o.size||o.has(n)))return void e(void 0,new Prop(t,n,!1,!1));s=Object.getPrototypeOf(s)}if("function"==typeof t)throw new SandboxAccessError(`Method or property access not permitted: ${t.name}.${n.toString()}`)}let o=t;for(;o=Object.getPrototypeOf(o);)if(hasOwnProperty(o,n)||"__proto__"===n){const s=r.ctx.options.prototypeReplacements.get(o.constructor);if(s)return void e(void 0,new Prop(s(t,!1),n));if(r.ctx.sandboxedFunctions.has(o.constructor))break;let i=o.constructor,a=!1;for(;null!==i;){const e=r.ctx.prototypeWhitelist.get(i);if(e&&(!e.size||e.has(n))){a=!0;break}i=Object.getPrototypeOf(i)}if(a)break;if("__proto__"===n)throw new SandboxAccessError("Access to prototype of global object is not permitted");throw new SandboxAccessError(`Method or property access not permitted: ${o.constructor.name}.${n.toString()}`)}}const a=t[n];if("function"==typeof t&&"prototype"===n&&!r.ctx.sandboxedFunctions.has(t))throw new SandboxAccessError("Access to prototype of global object is not permitted");if("__proto__"===n&&!r.ctx.sandboxedFunctions.has(a?.constructor))throw new SandboxAccessError("Access to prototype of global object is not permitted");const c=getGlobalProp(a,r,new Prop(t,n,!1,!1));if(c)return void e(void 0,c);const p=o instanceof Prop&&o.isGlobal||"function"==typeof t&&!r.ctx.sandboxedFunctions.has(t)||r.ctx.globalsWhitelist.has(t);e(void 0,new Prop(t,n,!1,p,!1))}),addOps(5,({done:e,a:t,b:n,obj:o,context:r})=>{if(r.ctx.options.forbidFunctionCalls)throw new SandboxCapabilityError("Function invocations are not allowed");if("function"!=typeof t)throw new TypeError(`${"symbol"==typeof o?.prop?"Symbol":o?.prop} is not a function`);const s=n.map(e=>e instanceof SpreadArray?[...e.item]:[e]).flat().map(e=>valueOrProp(e,r));if("function"==typeof o){const t=r.evals.get(o);let n=t?t(o,...s):o(...s);return n=getGlobalProp(n,r)||n,sanitizeArray(n,r),void(null!=n&&"function"==typeof n.then?n.then(t=>{e(void 0,t)},t=>{e(t)}):e(void 0,n))}if(o.context[o.prop]===JSON.stringify&&r.getSubscriptions.size){const e=new Set,t=n=>{if(n&&"object"==typeof n&&!e.has(n)){e.add(n);for(const e of Object.keys(n))r.getSubscriptions.forEach(t=>t(n,e)),t(n[e])}};t(s[0])}if(o.context instanceof Array&&arrayChange.has(o.context[o.prop])&&(r.changeSubscriptions.get(o.context)||r.changeSubscriptionsGlobal.get(o.context))){let e,t=!1;if("push"===o.prop)e={type:"push",added:s},t=!!s.length;else if("pop"===o.prop)e={type:"pop",removed:o.context.slice(-1)},t=!!e.removed.length;else if("shift"===o.prop)e={type:"shift",removed:o.context.slice(0,1)},t=!!e.removed.length;else if("unshift"===o.prop)e={type:"unshift",added:s},t=!!s.length;else if("splice"===o.prop)e={type:"splice",startIndex:s[0],deleteCount:void 0===s[1]?o.context.length:s[1],added:s.slice(2),removed:o.context.slice(s[0],void 0===s[1]?void 0:s[0]+s[1])},t=!!e.added.length||!!e.removed.length;else if("reverse"===o.prop||"sort"===o.prop)e={type:o.prop},t=!!o.context.length;else if("copyWithin"===o.prop){const n=void 0===s[2]?o.context.length-s[1]:Math.min(o.context.length,s[2]-s[1]);e={type:"copyWithin",startIndex:s[0],endIndex:s[0]+n,added:o.context.slice(s[1],s[1]+n),removed:o.context.slice(s[0],s[0]+n)},t=!!e.added.length||!!e.removed.length}t&&(r.changeSubscriptions.get(o.context)?.forEach(t=>t(e)),r.changeSubscriptionsGlobal.get(o.context)?.forEach(t=>t(e)))}o.get(r);const i=r.evals.get(o.context[o.prop]);let a=i?i(o.context[o.prop],...s):o.context[o.prop](...s);a=getGlobalProp(a,r)||a,sanitizeArray(a,r),e(void 0,a)}),addOps(22,({done:e,b:t})=>{let n={};for(const e of t)e.key instanceof SpreadObject?n={...n,...e.key.item}:n[e.key]=e.val;e(void 0,n)}),addOps(6,({done:e,a:t,b:n})=>e(void 0,new KeyVal(t,n))),addOps(12,({done:e,b:t,context:n})=>{e(void 0,t.map(e=>e instanceof SpreadArray?[...e.item]:[e]).flat().map(e=>valueOrProp(e,n)))}),addOps(23,({done:e,b:t})=>e(void 0,t)),addOps(35,({done:e,b:t})=>{switch(t){case"true":return e(void 0,!0);case"false":return e(void 0,!1);case"null":return e(void 0,null);case"undefined":return e(void 0,void 0);case"NaN":return e(void 0,NaN);case"Infinity":return e(void 0,1/0)}e(new Error("Unknown symbol: "+t))}),addOps(7,({done:e,b:t})=>e(void 0,Number(t.replace(/_/g,"")))),addOps(83,({done:e,b:t})=>e(void 0,BigInt(t.replace(/_/g,"")))),addOps(2,({done:e,b:t,context:n})=>e(void 0,n.constants.strings[parseInt(t)])),addOps(85,({done:e,b:t,context:n})=>{const o=n.constants.regexes[parseInt(t)];if(!n.ctx.globalsWhitelist.has(RegExp))throw new SandboxCapabilityError("Regex not permitted");e(void 0,new RegExp(o.regex,o.flags))}),addOps(84,({exec:e,done:t,ticks:n,b:o,context:r,scope:s})=>{const i=r.constants.literals[parseInt(o)],[,a,c]=i,p=[];let l;const d=[];for(;l=literalRegex.exec(a);)l[2]||(p.push(c[parseInt(l[3],10)]),d.push(l[3]));e(n,p,s,r,(...e)=>{const n={};if(1===e.length)return void t(e[0]);const o=e[1];for(const e of Object.keys(o)){const t=d[e];n[t]=o[e]}t(void 0,a.replace(/(\\\\)*(\\)?\${(\d+)}/g,(e,t,o,s)=>{if(o)return e;return(t||"")+`${valueOrProp(n[s],r)}`}))})}),addOps(18,({done:e,b:t})=>{e(void 0,new SpreadArray(t))}),addOps(17,({done:e,b:t})=>{e(void 0,new SpreadObject(t))}),addOps(24,({done:e,b:t})=>e(void 0,!t)),addOps(64,({done:e,b:t})=>e(void 0,~t)),addOps(25,({done:e,obj:t,context:n})=>{assignCheck(t,n),e(void 0,++t.context[t.prop])}),addOps(26,({done:e,obj:t,context:n})=>{assignCheck(t,n),e(void 0,t.context[t.prop]++)}),addOps(27,({done:e,obj:t,context:n})=>{assignCheck(t,n),e(void 0,--t.context[t.prop])}),addOps(28,({done:e,obj:t,context:n})=>{assignCheck(t,n),e(void 0,t.context[t.prop]--)}),addOps(9,({done:e,b:t,obj:n,context:o,scope:r,bobj:s})=>{if(assignCheck(n,o),n.isGlobal=s?.isGlobal||!1,n.isVariable){const o=r.getWhereValScope(n.prop,"this"===n.prop);if(null===o)throw new ReferenceError(`Cannot assign to undeclared variable '${n.prop.toString()}'`);return o.set(n.prop,t),n.isGlobal?o.globals[n.prop.toString()]=!0:delete o.globals[n.prop.toString()],void e(void 0,t)}e(void 0,n.context[n.prop]=t)}),addOps(66,({done:e,b:t,obj:n,context:o})=>{assignCheck(n,o),e(void 0,n.context[n.prop]+=t)}),addOps(65,({done:e,b:t,obj:n,context:o})=>{assignCheck(n,o),e(void 0,n.context[n.prop]-=t)}),addOps(67,({done:e,b:t,obj:n,context:o})=>{assignCheck(n,o),e(void 0,n.context[n.prop]/=t)}),addOps(69,({done:e,b:t,obj:n,context:o})=>{assignCheck(n,o),e(void 0,n.context[n.prop]*=t)}),addOps(68,({done:e,b:t,obj:n,context:o})=>{assignCheck(n,o),e(void 0,n.context[n.prop]**=t)}),addOps(70,({done:e,b:t,obj:n,context:o})=>{assignCheck(n,o),e(void 0,n.context[n.prop]%=t)}),addOps(71,({done:e,b:t,obj:n,context:o})=>{assignCheck(n,o),e(void 0,n.context[n.prop]^=t)}),addOps(72,({done:e,b:t,obj:n,context:o})=>{assignCheck(n,o),e(void 0,n.context[n.prop]&=t)}),addOps(73,({done:e,b:t,obj:n,context:o})=>{assignCheck(n,o),e(void 0,n.context[n.prop]|=t)}),addOps(76,({done:e,b:t,obj:n,context:o})=>{assignCheck(n,o),e(void 0,n.context[n.prop]<<=t)}),addOps(75,({done:e,b:t,obj:n,context:o})=>{assignCheck(n,o),e(void 0,n.context[n.prop]>>=t)}),addOps(74,({done:e,b:t,obj:n,context:o})=>{assignCheck(n,o),e(void 0,n.context[n.prop]>>>=t)}),addOps(90,({done:e,b:t,obj:n,context:o})=>{var r,s;assignCheck(n,o),e(void 0,(r=n.context)[s=n.prop]&&(r[s]=t))}),addOps(91,({done:e,b:t,obj:n,context:o})=>{var r,s;assignCheck(n,o),e(void 0,(r=n.context)[s=n.prop]||(r[s]=t))}),addOps(92,({done:e,b:t,obj:n,context:o})=>{var r,s;assignCheck(n,o),e(void 0,(r=n.context)[s=n.prop]??(r[s]=t))}),addOps(57,({done:e,a:t,b:n})=>e(void 0,t>n)),addOps(56,({done:e,a:t,b:n})=>e(void 0,t<n)),addOps(55,({done:e,a:t,b:n})=>e(void 0,t>=n)),addOps(54,({done:e,a:t,b:n})=>e(void 0,t<=n)),addOps(52,({done:e,a:t,b:n})=>e(void 0,t==n)),addOps(32,({done:e,a:t,b:n})=>e(void 0,t===n)),addOps(53,({done:e,a:t,b:n})=>e(void 0,t!=n)),addOps(31,({done:e,a:t,b:n})=>e(void 0,t!==n)),addOps(29,({done:e,a:t,b:n})=>e(void 0,t&&n)),addOps(30,({done:e,a:t,b:n})=>e(void 0,t||n)),addOps(89,({done:e,a:t,b:n})=>e(void 0,t??n)),addOps(77,({done:e,a:t,b:n})=>e(void 0,t&n)),addOps(78,({done:e,a:t,b:n})=>e(void 0,t|n)),addOps(33,({done:e,a:t,b:n})=>e(void 0,t+n)),addOps(47,({done:e,a:t,b:n})=>e(void 0,t-n)),addOps(59,({done:e,b:t})=>e(void 0,+t)),addOps(58,({done:e,b:t})=>e(void 0,-t)),addOps(48,({done:e,a:t,b:n})=>e(void 0,t/n)),addOps(49,({done:e,a:t,b:n})=>e(void 0,t**n)),addOps(79,({done:e,a:t,b:n})=>e(void 0,t^n)),addOps(50,({done:e,a:t,b:n})=>e(void 0,t*n)),addOps(51,({done:e,a:t,b:n})=>e(void 0,t%n)),addOps(80,({done:e,a:t,b:n})=>e(void 0,t<<n)),addOps(81,({done:e,a:t,b:n})=>e(void 0,t>>n)),addOps(82,({done:e,a:t,b:n})=>e(void 0,t>>>n)),addOps(60,({exec:e,done:t,ticks:n,b:o,context:r,scope:s})=>{e(n,o,s,r,(e,n)=>{t(void 0,typeof valueOrProp(n,r))})}),addOps(62,({done:e,a:t,b:n})=>e(void 0,t instanceof n)),addOps(63,({done:e,a:t,b:n})=>e(void 0,t in n)),addOps(61,({done:e,context:t,bobj:n})=>{n instanceof Prop?(assignCheck(n,t,"delete"),n.isVariable?e(void 0,!1):e(void 0,delete n.context?.[n.prop])):e(void 0,!0)}),addOps(8,({done:e,b:t})=>e(void 0,t)),addOps(34,({done:e,a:t,b:n,scope:o,bobj:r})=>{e(void 0,o.declare(t,"var",n,r?.isGlobal||!1))}),addOps(3,({done:e,a:t,b:n,scope:o,bobj:r})=>{e(void 0,o.declare(t,"let",n,r?.isGlobal||!1))}),addOps(4,({done:e,a:t,b:n,scope:o,bobj:r})=>{e(void 0,o.declare(t,"const",n,r?.isGlobal||!1))}),addOps(11,({done:e,ticks:t,a:n,b:o,obj:r,context:s,scope:i})=>{if(n=[...n],"string"==typeof r[2]||r[2]instanceof CodeString){if(!s.allowJit||!s.evalContext)throw new SandboxCapabilityError("Unevaluated code detected, JIT not allowed");r[2]=o=s.evalContext.lispifyFunction(new CodeString(r[2]),s.constants)}n.shift()?e(void 0,createFunctionAsync(n,o,t,s,i)):e(void 0,createFunction(n,o,t,s,i))}),addOps(37,({done:e,ticks:t,a:n,b:o,obj:r,context:s,scope:i})=>{if("string"==typeof r[2]||r[2]instanceof CodeString){if(!s.allowJit||!s.evalContext)throw new SandboxCapabilityError("Unevaluated code detected, JIT not allowed");r[2]=o=s.evalContext.lispifyFunction(new CodeString(r[2]),s.constants)}const a=n.shift(),c=n.shift();let p;p=88===a?createFunctionAsync(n,o,t,s,i,c):createFunction(n,o,t,s,i,c),c&&i.declare(c,"var",p),e(void 0,p)}),addOps(10,({done:e,ticks:t,a:n,b:o,obj:r,context:s,scope:i})=>{if("string"==typeof r[2]||r[2]instanceof CodeString){if(!s.allowJit||!s.evalContext)throw new SandboxCapabilityError("Unevaluated code detected, JIT not allowed");r[2]=o=s.evalContext.lispifyFunction(new CodeString(r[2]),s.constants)}const a=n.shift(),c=n.shift();let p;c&&(i=new Scope(i,{})),p=88===a?createFunctionAsync(n,o,t,s,i,c):createFunction(n,o,t,s,i,c),c&&i.declare(c,"let",p),e(void 0,p)}),addOps(38,({exec:e,done:t,ticks:n,a:o,b:r,context:s,scope:i})=>{const[a,c,p,l,d,u,f]=o;let x=!0;const h=new Scope(i,{}),b={$$obj:void 0},g=new Scope(h,b);if(e===execAsync)(async()=>{let o;for(o=asyncDone(t=>e(n,l,h,s,t)),b.$$obj=!0===(o=asyncDone(t=>e(n,p,h,s,t))).isInstant?o.instant:(await o.p).result,o=asyncDone(t=>e(n,c,g,s,t)),a&&(x=!0===(o=asyncDone(t=>e(n,u,g,s,t))).isInstant?o.instant:(await o.p).result);x;){const i={};o=asyncDone(t=>e(n,f,new Scope(g,i),s,t)),!0===o.isInstant?o.instant:(await o.p).result;const a=await executeTreeAsync(n,s,r,[new Scope(h,i)],"loop");if(a instanceof ExecReturn&&a.returned)return void t(void 0,a);if(a instanceof ExecReturn&&a.breakLoop)break;o=asyncDone(t=>e(n,d,g,s,t)),x=!0===(o=asyncDone(t=>e(n,u,g,s,t))).isInstant?o.instant:(await o.p).result}t()})().catch(t);else{for(syncDone(t=>e(n,l,h,s,t)),b.$$obj=syncDone(t=>e(n,p,h,s,t)).result,syncDone(t=>e(n,c,g,s,t)),a&&(x=syncDone(t=>e(n,u,g,s,t)).result);x;){const o={};syncDone(t=>e(n,f,new Scope(g,o),s,t));const i=executeTree(n,s,r,[new Scope(h,o)],"loop");if(i instanceof ExecReturn&&i.returned)return void t(void 0,i);if(i instanceof ExecReturn&&i.breakLoop)break;syncDone(t=>e(n,d,g,s,t)),x=syncDone(t=>e(n,u,g,s,t)).result}t()}}),addOps(86,({done:e,a:t,context:n,inLoopOrSwitch:o})=>{if("switch"===o&&"continue"===t||!o)throw new TypeError("Illegal "+t+" statement");e(void 0,new ExecReturn(n.ctx.auditReport,void 0,!1,"break"===t,"continue"===t))}),addOps(13,({exec:e,done:t,ticks:n,a:o,b:r,context:s,scope:i,inLoopOrSwitch:a})=>{e(n,valueOrProp(o,s)?r.t:r.f,i,s,t,a)}),addOps(15,({exec:e,done:t,ticks:n,a:o,b:r,context:s,scope:i})=>{e(n,valueOrProp(o,s)?r.t:r.f,i,s,t,void 0)}),addOps(16,({done:e,a:t,b:n})=>e(void 0,new If(t,n))),addOps(14,({done:e,a:t,b:n})=>e(void 0,new If(t,n))),addOps(40,({exec:e,done:t,ticks:n,a:o,b:r,context:s,scope:i})=>{e(n,o,i,s,(...o)=>{if(1===o.length)return void t(o[0]);let a=o[1];if(a=valueOrProp(a,s),e===execSync){let o,c=!1;for(const p of r)if(c||(c=!p[1]||a===valueOrProp(syncDone(t=>e(n,p[1],i,s,t)).result,s))){if(!p[2])continue;if(o=executeTree(n,s,p[2],[i],"switch"),o.breakLoop)break;if(o.returned)return void t(void 0,o);if(!p[1])break}t()}else(async()=>{let o,c=!1;for(const p of r){let r;if(c||(c=!p[1]||a===valueOrProp(!0===(r=asyncDone(t=>e(n,p[1],i,s,t))).isInstant?r.instant:(await r.p).result,s))){if(!p[2])continue;if(o=await executeTreeAsync(n,s,p[2],[i],"switch"),o.breakLoop)break;if(o.returned)return void t(void 0,o);if(!p[1])break}}t()})().catch(t)})}),addOps(39,({exec:e,done:t,ticks:n,a:o,b:r,context:s,scope:i,inLoopOrSwitch:a})=>{const[c,p,l]=r;executeTreeWithDone(e,(...o)=>{const r=1===o.length,d=r?o[0]:void 0,u=!r&&o.length>1?o[1]:void 0,f=(o,r)=>{l&&l.length>0?executeTreeWithDone(e,(...e)=>{const n=1===e.length,s=!n&&e.length>1?e[1]:void 0;n?t(e[0]):s instanceof ExecReturn&&(s.returned||s.breakLoop||s.continueLoop)?t(void 0,s):o?t(r):r instanceof ExecReturn&&(r.returned||r.breakLoop||r.continueLoop)?t(void 0,r):t()},n,s,l,[new Scope(i,{})],a):o?t(r):r instanceof ExecReturn&&(r.returned||r.breakLoop||r.continueLoop)?t(void 0,r):t()};if(r&&p&&p.length>0){const t={};c&&(t[c]=d),executeTreeWithDone(e,(...e)=>{const t=1===e.length,n=t?e[0]:e.length>1?e[1]:void 0;f(t,n)},n,s,p,[new Scope(i,t)],a)}else f(r,r?d:u)},n,s,o,[new Scope(i)],a)}),addOps(87,({done:e})=>{e()}),addOps(45,({done:e,a:t,b:n,context:o})=>{if(!o.ctx.globalsWhitelist.has(t)&&!o.ctx.sandboxedFunctions.has(t))throw new SandboxAccessError(`Object construction not allowed: ${t.constructor.name}`);e(void 0,new t(...n))}),addOps(46,({done:e,b:t})=>{e(t)}),addOps(43,({done:e,a:t})=>e(void 0,t.pop())),addOps(0,({done:e})=>e());const unexecTypes=new Set([11,37,10,38,39,40,14,16,60]);function _execNoneRecurse(e,t,n,o,r,s,i){const a=s?execAsync:execSync;if(t instanceof Prop)r(void 0,t.get(o));else if(t===optional)r();else if(Array.isArray(t)&&!isLisp(t))0===t[0]?r():execMany(e,a,t,r,n,o,i);else if(isLisp(t))if(42===t[0])execMany(e,a,t[1],r,n,o,i);else if(44===t[0])s?o.ctx.prototypeWhitelist?.has(Promise.prototype)?execAsync(e,t[1],n,o,async(...e)=>{if(1===e.length)r(e[0]);else try{r(void 0,await valueOrProp(e[1],o))}catch(e){r(e)}},i).catch(r):r(new SandboxCapabilityError("Async/await is not permitted")):r(new SyntaxError("Illegal use of 'await', must be inside async function"));else{if(!unexecTypes.has(t[0]))return!1;performOp({op:t[0],exec:a,done:r,ticks:e,a:t[1],b:t[2],obj:t,tree:t,context:o,scope:n,bobj:void 0,inLoopOrSwitch:i})}else r(void 0,t);return!0}function executeTree(e,t,n,o=[],r){return syncDone(s=>executeTreeWithDone(execSync,s,e,t,n,o,r)).result}async function executeTreeAsync(e,t,n,o=[],r){let s;return!0===(s=asyncDone(s=>executeTreeWithDone(execAsync,s,e,t,n,o,r))).isInstant?s.instant:(await s.p).result}function executeTreeWithDone(e,t,n,o,r,s=[],i){if(!r)return void t();if(!(r instanceof Array))throw new SyntaxError("Bad execution tree");let a,c=o.ctx.globalScope;for(;a=s.shift();)"object"==typeof a&&(c=a instanceof Scope?a:new Scope(c,a,a instanceof LocalScope?void 0:null));o.ctx.options.audit&&!o.ctx.auditReport&&(o.ctx.auditReport={globalsAccess:new Set,prototypeAccess:{}}),e===execSync?_executeWithDoneSync(t,n,o,r,c,i):_executeWithDoneAsync(t,n,o,r,c,i).catch(t)}function _executeWithDoneSync(e,t,n,o,r,s){if(!(o instanceof Array))throw new SyntaxError("Bad execution tree");let i=0;for(i=0;i<o.length;i++){let a,c;const p=o[i];try{execSync(t,p,r,n,(...e)=>{1===e.length?c={error:e[0]}:a=e[1]},s)}catch(e){c={error:e}}if(c)return void e(c.error);if(a instanceof ExecReturn)return void e(void 0,a);if(isLisp(p)&&8===p[0])return void e(void 0,new ExecReturn(n.ctx.auditReport,a,!0))}e(void 0,new ExecReturn(n.ctx.auditReport,void 0,!1))}async function _executeWithDoneAsync(e,t,n,o,r,s){if(!(o instanceof Array))throw new SyntaxError("Bad execution tree");let i=0;for(i=0;i<o.length;i++){let a,c;const p=o[i];try{await execAsync(t,p,r,n,(...e)=>{1===e.length?c={error:e[0]}:a=e[1]},s)}catch(e){c={error:e}}if(c)return void e(c.error);if(a instanceof ExecReturn)return void e(void 0,a);if(isLisp(p)&&8===p[0])return void e(void 0,new ExecReturn(n.ctx.auditReport,a,!0))}e(void 0,new ExecReturn(n.ctx.auditReport,void 0,!1))}function parseHexToInt(e){return!e.match(/[^a-f0-9]/i)?parseInt(e,16):NaN}function validateAndParseHex(e,t,n){const o=parseHexToInt(e);if(Number.isNaN(o)||void 0!==n&&n!==e.length)throw new SyntaxError(t+": "+e);return o}function parseHexadecimalCode(e){const t=validateAndParseHex(e,"Malformed Hexadecimal",2);return String.fromCharCode(t)}function parseUnicodeCode(e,t){const n=validateAndParseHex(e,"Malformed Unicode",4);if(void 0!==t){const e=validateAndParseHex(t,"Malformed Unicode",4);return String.fromCharCode(n,e)}return String.fromCharCode(n)}function isCurlyBraced(e){return"{"===e.charAt(0)&&"}"===e.charAt(e.length-1)}function parseUnicodeCodePointCode(e){if(!isCurlyBraced(e))throw new SyntaxError("Malformed Unicode: +"+e);const t=validateAndParseHex(e.slice(1,-1),"Malformed Unicode");try{return String.fromCodePoint(t)}catch(e){throw e instanceof RangeError?new SyntaxError("Code Point Limit:"+t):e}}const singleCharacterEscapes=new Map([["b","\b"],["f","\f"],["n","\n"],["r","\r"],["t","\t"],["v","\v"],["0","\0"]]);function parseSingleCharacterCode(e){return singleCharacterEscapes.get(e)||e}const escapeMatch=/\\(?:(\\)|x([\s\S]{0,2})|u(\{[^}]*\}?)|u([\s\S]{4})\\u([^{][\s\S]{0,3})|u([\s\S]{0,4})|([0-3]?[0-7]{1,2})|([\s\S])|$)/g;function unraw(e){return e.replace(escapeMatch,function(e,t,n,o,r,s,i,a,c){if(void 0!==t)return"\\";if(void 0!==n)return parseHexadecimalCode(n);if(void 0!==o)return parseUnicodeCodePointCode(o);if(void 0!==r)return parseUnicodeCode(r,s);if(void 0!==i)return parseUnicodeCode(i);if("0"===a)return"\0";if(void 0!==a)throw new SyntaxError("Octal Deprecation: "+a);if(void 0!==c)return parseSingleCharacterCode(c);throw new SyntaxError("End of string")})}function createLisp(e){return[e.op,e.a,e.b]}const NullLisp=createLisp({op:0,a:0,b:0}),lispTypes=new Map;class ParseError extends Error{constructor(e,t){super(e+": "+t.substring(0,40)),this.code=t}}let lastType;const inlineIfElse=/^:/,elseIf=/^else(?![\w$])/,ifElse=/^if(?![\w$])/,space=/^\s/,expectTypes={splitter:{types:{power:/^(\*\*)(?!=)/,opHigh:/^(\/|\*(?!\*)|%)(?!=)/,op:/^(\+(?!(\+))|-(?!(-)))(?!=)/,comparitor:/^(<=|>=|<(?!<)|>(?!>)|!==|!=(?!=)|===|==)/,bitwiseShift:/^(<<|>>(?!>)|>>>)(?!=)/,bitwiseAnd:/^(&(?!&))(?!=)/,bitwiseXor:/^(\^)(?!=)/,bitwiseOr:/^(\|(?!\|))(?!=)/,boolOpAnd:/^(&&)(?!=)/,boolOpOr:/^(\|\|(?!=)|instanceof(?![\w$])|in(?![\w$]))/,nullishCoalescing:/^\?\?(?!=)/},next:["modifier","value","prop","incrementerBefore"]},inlineIf:{types:{inlineIf:/^\?(?!\.(?!\d))/},next:["expEnd"]},assignment:{types:{assignModify:/^(-=|\+=|\/=|\*\*=|\*=|%=|\^=|&=|\|=|>>>=|>>=|<<=|&&=|\|\|=|\?\?=)/,assign:/^(=)(?!=)/},next:["modifier","value","prop","incrementerBefore"]},incrementerBefore:{types:{incrementerBefore:/^(\+\+|--)/},next:["prop"]},expEdge:{types:{call:/^(\?\.)?[(]/,incrementerAfter:/^(\+\+|--)/,taggedTemplate:/^`(\d+)`/},next:["splitter","expEdge","dot","inlineIf","expEnd"]},modifier:{types:{not:/^!/,inverse:/^~/,negative:/^-(?!-)/,positive:/^\+(?!\+)/,typeof:/^typeof(?![\w$])/,delete:/^delete(?![\w$])/},next:["modifier","value","prop","incrementerBefore"]},dot:{types:{arrayProp:/^(\?\.)?\[/,dot:/^(\?)?\.(?=\s*[a-zA-Z$_])/},next:["splitter","assignment","expEdge","dot","inlineIf","expEnd"]},prop:{types:{prop:/^[a-zA-Z$_][a-zA-Z\d$_]*/},next:["splitter","assignment","expEdge","dot","inlineIf","expEnd"]},value:{types:{createObject:/^\{/,createArray:/^\[/,number:/^(0b[01]+(_[01]+)*|0o[0-7]+(_[0-7]+)*|0x[\da-f]+(_[\da-f]+)*|(\d+(_\d+)*(\.\d+(_\d+)*)?|\.\d+(_\d+)*))(e[+-]?\d+(_\d+)*)?(n)?(?!\d)/i,string:/^"(\d+)"/,literal:/^`(\d+)`/,regex:/^\/(\d+)\/r(?![\w$])/,boolean:/^(true|false)(?![\w$])/,null:/^null(?![\w$])/,und:/^undefined(?![\w$])/,arrowFunctionSingle:/^(async\s+)?([a-zA-Z$_][a-zA-Z\d$_]*)\s*=>\s*({)?/,arrowFunction:/^(async\s*)?\(\s*((\.\.\.)?\s*[a-zA-Z$_][a-zA-Z\d$_]*(\s*,\s*(\.\.\.)?\s*[a-zA-Z$_][a-zA-Z\d$_]*)*)?\s*\)\s*=>\s*({)?/,inlineFunction:/^(async\s+)?function(\s*[a-zA-Z$_][a-zA-Z\d$_]*)?\s*\(\s*((\.\.\.)?\s*[a-zA-Z$_][a-zA-Z\d$_]*(\s*,\s*(\.\.\.)?\s*[a-zA-Z$_][a-zA-Z\d$_]*)*)?\s*\)\s*{/,group:/^\(/,NaN:/^NaN(?![\w$])/,Infinity:/^Infinity(?![\w$])/,void:/^void(?![\w$])\s*/,await:/^await(?![\w$])\s*/,new:/^new(?![\w$])\s*/},next:["splitter","expEdge","dot","inlineIf","expEnd"]},initialize:{types:{initialize:/^(var|let|const)\s+([a-zA-Z$_][a-zA-Z\d$_]*)\s*(=)?/,return:/^return(?![\w$])/,throw:/^throw(?![\w$])\s*/},next:["modifier","value","prop","incrementerBefore","expEnd"]},spreadObject:{types:{spreadObject:/^\.\.\./},next:["value","prop"]},spreadArray:{types:{spreadArray:/^\.\.\./},next:["value","prop"]},expEnd:{types:{},next:[]},expFunction:{types:{function:/^(async\s+)?function(\s*[a-zA-Z$_][a-zA-Z\d$_]*)\s*\(\s*((\.\.\.)?\s*[a-zA-Z$_][a-zA-Z\d$_]*(\s*,\s*(\.\.\.)?\s*[a-zA-Z$_][a-zA-Z\d$_]*)*)?\s*\)\s*{/},next:["expEdge","expEnd"]},expSingle:{types:{for:/^(([a-zA-Z$_][\w$]*)\s*:)?\s*for\s*\(/,do:/^(([a-zA-Z$_][\w$]*)\s*:)?\s*do(?![\w$])\s*(\{)?/,while:/^(([a-zA-Z$_][\w$]*)\s*:)?\s*while\s*\(/,loopAction:/^(break|continue)(?![\w$])\s*([a-zA-Z$_][\w$]*)?/,if:/^((([a-zA-Z$_][\w$]*)\s*:)?\s*)if\s*\(/,try:/^try\s*{/,block:/^{/,switch:/^(([a-zA-Z$_][\w$]*)\s*:)?\s*switch\s*\(/},next:["expEnd"]}},closings={"(":")","[":"]","{":"}","'":"'",'"':'"',"`":"`"};function testMultiple(e,t){let n=null;for(let o=0;o<t.length;o++){if(n=t[o].exec(e),n)break}return n}const emptyString=new CodeString(""),okFirstChars=/^[+\-~ !]/,aNumber=expectTypes.value.types.number,wordReg=/^((if|for|else|while|do|function)(?![\w$])|[\w$]+)/,semiColon=/^;/,insertedSemicolons=new WeakMap,quoteCache=new WeakMap;function restOfExp(e,t,n,o,r,s,i={}){if(!t.length)return t;i.words=i.words||[];let a=!0;const c=(n=n||[]).includes(semiColon);c&&(n=n.filter(e=>e!==semiColon));const p=insertedSemicolons.get(t.ref)||[],l=quoteCache.get(t.ref)||new Map;if(quoteCache.set(t.ref,l),o&&l.has(t.start-1))return t.substring(0,l.get(t.start-1)-t.start);let d,u=!1,f=!1,x="",h=!1,b=!1,g=!1,y=!1;for(d=0;d<t.length&&!f;d++){let w=t.char(d);if('"'===o||"'"===o||"`"===o){if("`"!==o||"$"!==w||"{"!==t.char(d+1)||u){if(w===o&&!u)return t.substring(0,d)}else{d+=restOfExp(e,t.substring(d+2),[],"{").length+2}u=!u&&"\\"===w}else if(closings[w]){if(!b&&p[d+t.start]){if(b=!0,c)break;d--,x=";";continue}if(h&&"{"===w&&(h=!1),w===r){f=!0;break}{const n=restOfExp(e,t.substring(d+1),[],w);if(l.set(n.start-1,n.end),d+=n.length+1,a=!1,s){let e;(e=testMultiple(t.substring(d).toString(),s))&&(i.regRes=e,f=!0)}}}else if(o){if(w===closings[o])return t.substring(0,d)}else{let e,o,r=t.substring(d).toString();if(s){let e;if(e=testMultiple(r,s)){i.regRes=e,d++,f=!0;break}}if(o=aNumber.exec(r)){if(d+=o[0].length-1,r=t.substring(d).toString(),s){let e;if(e=testMultiple(r,s)){i.regRes=e,d++,f=!0;break}}}else if(x!=w){let o=null;if(";"===w||p[d+t.start]&&!a&&!b){if(c)o=[";"];else if(p[d+t.start]){b=!0,d--,x=";";continue}w=r=";"}else b=!1;o||(o=testMultiple(r,n)),o&&(f=!0),!f&&(e=wordReg.exec(r))&&(h=!0,e[2]?(g=!0,y=!0):g&&(y?y=!1:i.bodyContentAfterKeyword=!0),e[0].length>1&&(i.words.push(e[1]),i.lastAnyWord=e[1],e[2]&&(i.lastWord=e[2])),e[0].length>2&&(d+=e[0].length-2))}if(a&&(okFirstChars.test(r)?f=!1:a=!1),f)break}x=w}if(o)throw new SyntaxError("Unclosed '"+o+"'");return i&&(i.oneliner=h),t.substring(0,d)}restOfExp.next=["splitter","expEnd","inlineIf"];const startingExecpted=["initialize","expSingle","expFunction","value","modifier","prop","incrementerBefore","expEnd"],setLispType=(e,t)=>{e.forEach(e=>{lispTypes.set(e,t)})},closingsCreate={createArray:/^\]/,createObject:/^\}/,group:/^\)/,arrayProp:/^\]/,call:/^\)/},typesCreate={createArray:12,createObject:22,group:23,arrayProp:19,call:5,prop:1,"?prop":20,"?call":21};setLispType(["createArray","createObject","group","arrayProp","call"],(e,t,n,o,r,s)=>{let i=emptyString;const a=[];let c=!1,p=o[0].length;const l=p;for(;p<n.length&&!c;)i=restOfExp(e,n.substring(p),[closingsCreate[t],/^,/]),p+=i.length,i.trim().length&&a.push(i),","!==n.char(p)?c=!0:p++;const d=["value","modifier","prop","incrementerBefore","expEnd"];let u,f;switch(t){case"group":case"arrayProp":u=lispifyExpr(e,n.substring(l,p));break;case"call":case"createArray":u=a.map(t=>lispify(e,t,[...d,"spreadArray"]));break;case"createObject":u=a.map(t=>{let n;t=t.trimStart();let o="";if(f=expectTypes.expFunction.types.function.exec("function "+t),f)o=f[2].trimStart(),n=lispify(e,new CodeString("function "+t.toString().replace(o,"")));else{const r=restOfExp(e,t,[/^:/]);o=lispify(e,r,[...d,"spreadObject"]),isLisp(o)&&17===o[0]?n=NullLisp:(1===o[0]&&(o=o[2]),n=t.length>r.length&&":"===t.char(r.length)?lispify(e,t.substring(r.length+1)):lispify(e,r,d))}return createLisp({op:6,a:o,b:n})})}const x="arrayProp"===t?o[1]?20:1:"call"===t?o[1]?21:5:typesCreate[t];s.lispTree=lispify(e,n.substring(p+1),expectTypes[r].next,createLisp({op:x,a:s.lispTree,b:u}))});const modifierTypes={inverse:64,not:24,positive:59,negative:58,typeof:60,delete:61};setLispType(["inverse","not","negative","positive","typeof","delete"],(e,t,n,o,r,s)=>{const i=restOfExp(e,n.substring(o[0].length),[/^([^\s.?\w$]|\?[^.])/]);if(n.substring(i.length+o[0].length).trim().toString().startsWith("**"))throw new SyntaxError("Unary operator used immediately before exponentiation expression. Parenthesis must be used to disambiguate operator precedence");s.lispTree=lispify(e,n.substring(i.length+o[0].length),restOfExp.next,createLisp({op:modifierTypes[t],a:s.lispTree,b:lispify(e,i,expectTypes[r].next)}))}),setLispType(["taggedTemplate"],(e,t,n,o,r,s)=>{const i=o[1],a=e.literals[parseInt(i)],[,c,p]=a,l=[],d=[];let u="",f=0;for(;f<c.length;)if("${"===c.substring(f,f+2)){let e=f+2,t="",n=!1;for(;e<c.length&&"}"!==c[e];)t+=c[e],e++;e<c.length&&"}"===c[e]&&/^\d+$/.test(t)&&(n=!0),n?(l.push(u),u="",d.push(p[parseInt(t)]),f=e+1):(u+=c[f],f++)}else u+=c[f],f++;l.push(u);const x=l.map(t=>createLisp({op:2,a:0,b:String(e.strings.push(t)-1)})),h=createLisp({op:12,a:createLisp({op:0,a:0,b:0}),b:x});s.lispTree=lispify(e,n.substring(o[0].length),expectTypes[r].next,createLisp({op:5,a:s.lispTree,b:[h,...d]}))});const incrementTypes={"++$":25,"--$":27,"$++":26,"$--":28};setLispType(["incrementerBefore"],(e,t,n,o,r,s)=>{const i=restOfExp(e,n.substring(2),[/^[^\s.\w$]/]);s.lispTree=lispify(e,n.substring(i.length+2),restOfExp.next,createLisp({op:incrementTypes[o[0]+"$"],a:lispify(e,i,expectTypes[r].next),b:0}))}),setLispType(["incrementerAfter"],(e,t,n,o,r,s)=>{s.lispTree=lispify(e,n.substring(o[0].length),expectTypes[r].next,createLisp({op:incrementTypes["$"+o[0]],a:s.lispTree,b:0}))});const adderTypes={"&&":29,"||":30,"??":89,instanceof:62,in:63,"=":9,"-=":65,"+=":66,"/=":67,"**=":68,"*=":69,"%=":70,"^=":71,"&=":72,"|=":73,">>>=":74,"<<=":76,">>=":75,"&&=":90,"||=":91,"??=":92};setLispType(["assign","assignModify","nullishCoalescing"],(e,t,n,o,r,s)=>{s.lispTree=createLisp({op:adderTypes[o[0]],a:s.lispTree,b:lispify(e,n.substring(o[0].length),expectTypes[r].next)})});const opTypes={"&":77,"|":78,"^":79,"<<":80,">>":81,">>>":82,"<=":54,">=":55,"<":56,">":57,"!==":31,"!=":53,"===":32,"==":52,"+":33,"-":47,"/":48,"**":49,"*":50,"%":51,"&&":29,"||":30,instanceof:62,in:63};function extractIfElse(e,t){let n,o,r=0,s=t.substring(0,0),i=emptyString,a=!0,c={};for(;(s=restOfExp(e,t.substring(s.end-t.start),[elseIf,ifElse,semiColon],void 0,void 0,void 0,c)).length||a;){a=!1;const p=t.substring(s.end-t.start).toString();if(p.startsWith("if"))s.end++,r++;else if(p.startsWith("else"))n=t.substring(0,s.end-t.start),s.end++,r--,r||s.end--;else{if(!(o=/^;?\s*else(?![\w$])/.exec(p))){n=i.length?n:t.substring(0,s.end-t.start);break}n=t.substring(0,s.end-t.start),s.end+=o[0].length-1,r--,r||(s.end-=o[0].length-1)}if(!r){i=extractIfElse(e,t.substring(s.end-t.start+(/^;?\s*else(?![\w$])/.exec(p)?.[0].length||0))).all;break}c={}}return n=n||t.substring(0,s.end-t.start),{all:t.substring(0,Math.max(n.end,i.end)-t.start),true:n,false:i}}setLispType(["power","opHigh","op","comparitor","bitwiseShift","bitwiseAnd","bitwiseXor","bitwiseOr","boolOpAnd","boolOpOr"],(e,t,n,o,r,s)=>{const i=[expectTypes.inlineIf.types.inlineIf,inlineIfElse];switch(t){case"power":break;case"opHigh":i.push(expectTypes.splitter.types.opHigh);case"op":i.push(expectTypes.splitter.types.op);case"comparitor":i.push(expectTypes.splitter.types.comparitor);case"bitwiseShift":i.push(expectTypes.splitter.types.bitwiseShift);case"bitwiseAnd":i.push(expectTypes.splitter.types.bitwiseAnd);case"bitwiseXor":i.push(expectTypes.splitter.types.bitwiseXor);case"bitwiseOr":i.push(expectTypes.splitter.types.bitwiseOr);case"boolOpAnd":i.push(expectTypes.splitter.types.boolOpAnd);case"boolOpOr":i.push(expectTypes.splitter.types.boolOpOr)}const a=restOfExp(e,n.substring(o[0].length),i);s.lispTree=lispify(e,n.substring(a.length+o[0].length),restOfExp.next,createLisp({op:opTypes[o[0]],a:s.lispTree,b:lispify(e,a,expectTypes[r].next)}))}),setLispType(["inlineIf"],(e,t,n,o,r,s)=>{let i=!1;const a=n.substring(0,0);let c=1;for(;!i&&a.length<n.length;)a.end=restOfExp(e,n.substring(a.length+1),[expectTypes.inlineIf.types.inlineIf,inlineIfElse]).end,"?"===n.char(a.length)?c++:c--,c||(i=!0);a.start=n.start+1,s.lispTree=createLisp({op:15,a:s.lispTree,b:createLisp({op:16,a:lispifyExpr(e,a),b:lispifyExpr(e,n.substring(o[0].length+a.length+1))})})}),setLispType(["if"],(e,t,n,o,r,s)=>{let i=restOfExp(e,n.substring(o[0].length),[],"(");const a=extractIfElse(e,n.substring(o[1].length)),c=o[0].length-o[1].length+i.length+1;let p=a.true.substring(c),l=a.false;i=i.trim(),p=p.trim(),l=l.trim(),"{"===p.char(0)&&(p=p.slice(1,-1)),"{"===l.char(0)&&(l=l.slice(1,-1)),s.lispTree=createLisp({op:13,a:lispifyExpr(e,i),b:createLisp({op:14,a:lispifyBlock(p,e),b:lispifyBlock(l,e)})})}),setLispType(["switch"],(e,t,n,o,r,s)=>{const i=restOfExp(e,n.substring(o[0].length),[],"(");let a=n.toString().indexOf("{",o[0].length+i.length+1);if(-1===a)throw new SyntaxError("Invalid switch");let c,p=insertSemicolons(e,restOfExp(e,n.substring(a+1),[],"{"));const l=/^\s*(case\s|default)\s*/,d=[];let u=!1;for(;c=l.exec(p.toString());){if("default"===c[1]){if(u)throw new SyntaxError("Only one default switch case allowed");u=!0}const t=restOfExp(e,p.substring(c[0].length),[/^:/]);let n=emptyString,o=a=c[0].length+t.length+1;const r=/^\s*\{/.exec(p.substring(o).toString());let s=[];if(r)o+=r[0].length,n=restOfExp(e,p.substring(o),[],"{"),o+=n.length+1,s=lispifyBlock(n,e);else{const t=restOfExp(e,p.substring(o),[l]);if(t.trim().length){for(;(n=restOfExp(e,p.substring(o),[semiColon])).length&&(o+=n.length+(";"===p.char(o+n.length)?1:0),!l.test(p.substring(o).toString())););s=lispifyBlock(p.substring(a,n.end-p.start),e)}else s=[],o+=t.length}p=p.substring(o),d.push(createLisp({op:41,a:"default"===c[1]?0:lispifyExpr(e,t),b:s}))}s.lispTree=createLisp({op:40,a:lispifyExpr(e,i),b:d})}),setLispType(["dot","prop"],(e,t,n,o,r,s)=>{let i=o[0],a=o[0].length,c="prop";if("dot"===t){o[1]&&(c="?prop");const e=n.substring(o[0].length).toString().match(expectTypes.prop.types.prop);if(!e||!e.length)throw new SyntaxError("Hanging dot");i=e[0],a=i.length+o[0].length}else if(reservedWords.has(i)&&"this"!==i)throw new SyntaxError(`Unexpected token '${i}'`);s.lispTree=lispify(e,n.substring(a),expectTypes[r].next,createLisp({op:typesCreate[c],a:s.lispTree,b:i}))}),setLispType(["spreadArray","spreadObject"],(e,t,n,o,r,s)=>{s.lispTree=createLisp({op:"spreadArray"===t?18:17,a:0,b:lispify(e,n.substring(o[0].length),expectTypes[r].next)})}),setLispType(["return","throw"],(e,t,n,o,r,s)=>{s.lispTree=createLisp({op:"return"===t?8:46,a:0,b:lispifyExpr(e,n.substring(o[0].length))})}),setLispType(["number","boolean","null","und","NaN","Infinity"],(e,t,n,o,r,s)=>{s.lispTree=lispify(e,n.substring(o[0].length),expectTypes[r].next,createLisp({op:"number"===t?o[12]?83:7:35,a:0,b:o[12]?o[1]:o[0]}))}),setLispType(["string","literal","regex"],(e,t,n,o,r,s)=>{s.lispTree=lispify(e,n.substring(o[0].length),expectTypes[r].next,createLisp({op:"string"===t?2:"literal"===t?84:85,a:0,b:o[1]}))}),setLispType(["initialize"],(e,t,n,o,r,s)=>{const i="var"===o[1]?34:"let"===o[1]?3:4;o[3]?s.lispTree=createLisp({op:i,a:o[2],b:lispify(e,n.substring(o[0].length),expectTypes[r].next)}):s.lispTree=lispify(e,n.substring(o[0].length),expectTypes[r].next,createLisp({op:i,a:o[2],b:0}))}),setLispType(["function","inlineFunction","arrowFunction","arrowFunctionSingle"],(e,t,n,o,r,s)=>{const i="function"!==t&&"inlineFunction"!==t,a=i&&!o[o.length-1],c=i?2:3,p=o[1]?88:0,l=o[c]?o[c].replace(/\s+/g,"").split(/,/g):[];i||l.unshift((o[2]||"").trimStart());let d=!1;l.forEach(e=>{if(d)throw new SyntaxError("Rest parameter must be last formal parameter");e.startsWith("...")&&(d=!0)});const u=restOfExp(e,n.substring(o[0].length),a?[/^[,)}\]]/,semiColon]:[/^}/]),f=a?"return "+u:u.toString();l.forEach(e=>{if(reservedWords.has(e.replace(/^\.\.\./,"")))throw new SyntaxError(`Unexpected token '${e}'`)}),s.lispTree=lispify(e,n.substring(o[0].length+f.length+1),expectTypes[r].next,createLisp({op:i?11:"function"===t?37:10,a:[p,...l],b:e.eager?lispifyFunction(new CodeString(f),e):f}))});const iteratorRegex=/^((let|var|const)\s+)?\s*([a-zA-Z$_][a-zA-Z\d$_]*)\s+(in|of)(?![\w$])/;setLispType(["for","do","while"],(e,t,n,o,r,s)=>{let i,a,c=0,p=88,l=[],d=0,u=0,f=88,x=88;switch(t){case"while":{c=n.toString().indexOf("(")+1;const t=restOfExp(e,n.substring(c),[],"(");i=lispifyReturnExpr(e,t),a=restOfExp(e,n.substring(c+t.length+1)).trim(),"{"===a.char(0)&&(a=a.slice(1,-1));break}case"for":{c=n.toString().indexOf("(")+1;const t=[];let o,r=emptyString;for(let o=0;o<3&&(r=restOfExp(e,n.substring(c),[/^[;)]/]),t.push(r.trim()),c+=r.length+1,")"!==n.char(c-1));o++);if(1===t.length&&(o=iteratorRegex.exec(t[0].toString())))"of"===o[4]?(d=lispifyReturnExpr(e,t[0].substring(o[0].length)),l=[ofStart2,ofStart3],i=ofCondition,x=ofStep,u=lispify(e,new CodeString((o[1]||"let ")+o[3]+" = $$next.value"),["initialize"])):(d=lispifyReturnExpr(e,t[0].substring(o[0].length)),l=[inStart2,inStart3],x=inStep,i=inCondition,u=lispify(e,new CodeString((o[1]||"let ")+o[3]+" = $$keys[$$keyIndex]"),["initialize"]));else{if(3!==t.length)throw new SyntaxError("Invalid for loop definition");p=lispifyExpr(e,t.shift(),startingExecpted),i=lispifyReturnExpr(e,t.shift()),x=lispifyExpr(e,t.shift())}a=restOfExp(e,n.substring(c)).trim(),"{"===a.char(0)&&(a=a.slice(1,-1));break}case"do":{f=0;const t=!!o[3];a=restOfExp(e,n.substring(o[0].length),t?[/^\}/]:[semiColon]),i=lispifyReturnExpr(e,restOfExp(e,n.substring(n.toString().indexOf("(",o[0].length+a.length)+1),[],"("));break}}const h=[f,l,d,p,x,i,u];s.lispTree=createLisp({op:38,a:h,b:lispifyBlock(a,e)})}),setLispType(["block"],(e,t,n,o,r,s)=>{s.lispTree=createLisp({op:42,a:lispifyBlock(restOfExp(e,n.substring(1),[],"{"),e),b:0})}),setLispType(["loopAction"],(e,t,n,o,r,s)=>{s.lispTree=createLisp({op:86,a:o[1],b:0})});const catchReg=/^\s*(catch\s*(\(\s*([a-zA-Z$_][a-zA-Z\d$_]*)\s*\))?|finally)\s*\{/;setLispType(["try"],(e,t,n,o,r,s)=>{const i=restOfExp(e,n.substring(o[0].length),[],"{");let a,c,p=catchReg.exec(n.substring(o[0].length+i.length+1).toString()),l="",d=0;p[1].startsWith("catch")?(p=catchReg.exec(n.substring(o[0].length+i.length+1).toString()),l=p[3]||"",c=restOfExp(e,n.substring(o[0].length+i.length+1+p[0].length),[],"{"),d=o[0].length+i.length+1+p[0].length+c.length+1,(p=catchReg.exec(n.substring(d).toString()))&&p[1].startsWith("finally")&&(a=restOfExp(e,n.substring(d+p[0].length),[],"{"))):a=restOfExp(e,n.substring(o[0].length+i.length+1+p[0].length),[],"{");const u=[l,lispifyBlock(insertSemicolons(e,c||emptyString),e),lispifyBlock(insertSemicolons(e,a||emptyString),e)];s.lispTree=createLisp({op:39,a:lispifyBlock(insertSemicolons(e,i),e),b:u})}),setLispType(["void","await"],(e,t,n,o,r,s)=>{const i=restOfExp(e,n.substring(o[0].length),[/^([^\s.?\w$]|\?[^.])/]);s.lispTree=lispify(e,n.substring(o[0].length+i.length),expectTypes[r].next,createLisp({op:"void"===t?87:44,a:lispify(e,i),b:0}))}),setLispType(["new"],(e,t,n,o,r,s)=>{let i=o[0].length;const a=restOfExp(e,n.substring(i),[],void 0,"(");i+=a.length+1;const c=[];if("("===n.char(i-1)){const t=restOfExp(e,n.substring(i),[],"(");let o;i+=t.length+1;let r=0;for(;(o=restOfExp(e,t.substring(r),[/^,/])).length;)r+=o.length+1,c.push(o.trim())}s.lispTree=lispify(e,n.substring(i),expectTypes.expEdge.next,createLisp({op:45,a:lispify(e,a,expectTypes.initialize.next),b:c.map(t=>lispify(e,t,expectTypes.initialize.next))}))});const ofStart2=lispify(void 0,new CodeString("let $$iterator = $$obj[Symbol.iterator]()"),["initialize"]),ofStart3=lispify(void 0,new CodeString("let $$next = $$iterator.next()"),["initialize"]),ofCondition=lispify(void 0,new CodeString("return !$$next.done"),["initialize"]),ofStep=lispify(void 0,new CodeString("$$next = $$iterator.next()")),inStart2=lispify(void 0,new CodeString("let $$keys = Object.keys($$obj)"),["initialize"]),inStart3=lispify(void 0,new CodeString("let $$keyIndex = 0"),["initialize"]),inStep=lispify(void 0,new CodeString("$$keyIndex++")),inCondition=lispify(void 0,new CodeString("return $$keyIndex < $$keys.length"),["initialize"]);function lispify(e,t,n,o,r=!1){if(o=o||NullLisp,n=n||expectTypes.initialize.next,void 0===t)return o;const s=(t=t.trimStart()).toString();if(!t.length&&!n.includes("expEnd"))throw new SyntaxError("Unexpected end of expression");if(!t.length)return o;const i={lispTree:o};let a;for(const o of n)if("expEnd"!==o){for(const n in expectTypes[o].types)if("expEnd"!==n&&(a=expectTypes[o].types[n].exec(s))){lastType=n;try{lispTypes.get(n)?.(e,n,t,a,o,i)}catch(e){if(r&&e instanceof SyntaxError)throw new ParseError(e.message,s);throw e}break}if(a)break}if(!a&&t.length){if(r)throw new ParseError(`Unexpected token after ${lastType}: ${t.char(0)}`,s);throw new SyntaxError(`Unexpected token after ${lastType}: ${t.char(0)}`)}return i.lispTree}const startingExpectedWithoutSingle=startingExecpted.filter(e=>"expSingle"!==e);function lispifyExpr(e,t,n){if(!t.trimStart().length)return NullLisp;const o=[];let r,s=0;if((n=n||expectTypes.initialize.next).includes("expSingle")&&testMultiple(t.toString(),Object.values(expectTypes.expSingle.types)))return lispify(e,t,["expSingle"],void 0,!0);for(n===startingExecpted&&(n=startingExpectedWithoutSingle);(r=restOfExp(e,t.substring(s),[/^,/])).length;)o.push(r.trimStart()),s+=r.length+1;if(1===o.length)return lispify(e,t,n,void 0,!0);if(n.includes("initialize")){const r=expectTypes.initialize.types.initialize.exec(o[0].toString());if(r)return createLisp({op:42,a:o.map((t,n)=>lispify(e,n?new CodeString(r[1]+" "+t):t,["initialize"],void 0,!0)),b:0});if(expectTypes.initialize.types.return.exec(o[0].toString()))return lispify(e,t,n,void 0,!0)}const i=o.map(t=>lispify(e,t,n,void 0,!0));return createLisp({op:43,a:i,b:0})}function lispifyReturnExpr(e,t){return createLisp({op:8,a:0,b:lispifyExpr(e,t)})}function lispifyBlock(e,t,n=!1){if(!(e=insertSemicolons(t,e)).trim().length)return[];const o=[];let r,s=0,i=0,a={},c=!1,p=!1;for(;(r=restOfExp(t,e.substring(s),[semiColon],void 0,void 0,void 0,a)).length&&(p=!(!e.char(s+r.length)||";"===e.char(s+r.length)),s+=r.length+(p?0:1),/^\s*else(?![\w$])/.test(e.substring(s).toString())||a.words?.includes("do")&&/^\s*while(?![\w$])/.test(e.substring(s).toString())?c=!0:(c=!1,o.push(e.substring(i,s-(p?0:1))),i=s),a={},!n););return c&&o.push(e.substring(i,s-(p?0:1))),o.map(e=>e.trimStart()).filter(e=>e.length).map(e=>lispifyExpr(t,e.trimStart(),startingExecpted))}function lispifyFunction(e,t,n=!1){if(!e.trim().length)return[];const o=lispifyBlock(e,t,n);return hoist(o),o}function hoist(e,t=[]){if(isLisp(e)){if(!isLisp(e))return!1;const[n,o,r]=e;if(39===n||13===n||38===n||40===n)hoist(o,t),hoist(r,t);else if(34===n)t.push(createLisp({op:34,a:o,b:0}));else if(37===n&&o[1])return t.push(e),!0}else if(Array.isArray(e)){const n=[];for(const o of e)hoist(o,t)||n.push(o);n.length!==e.length&&(e.length=0,e.push(...t,...n))}return!1}const closingsNoInsertion=/^(\})\s*(catch|finally|else|while|instanceof)(?![\w$])/,colonsRegex=/^((([\w$\])"'`]|\+\+|--)\s*\r?\n\s*([\w$+\-!~]))|(\}\s*[\w$!~+\-{("'`]))/;function insertSemicolons(e,t){let n=t,o=emptyString,r={},s=!1;const i=insertedSemicolons.get(t.ref)||new Array(t.ref.str.length);for(;(o=restOfExp(e,n,[],void 0,void 0,[colonsRegex],r)).length;){let e=!1,t=o,a=o.length;if(r.regRes){e=!0;const[,,i,,,c]=r.regRes;if(a="++"===r.regRes[3]||"--"===r.regRes[3]?o.length+1:o.length,t=n.substring(0,a),c){const t=closingsNoInsertion.exec(n.substring(o.length-1).toString());t?"while"===t[2]?"do"===r.lastWord?(e=!1,s=!0):e=!0:e=!1:"function"===r.lastWord&&"}"===r.regRes[5][0]&&"("===r.regRes[5].slice(-1)&&(e=!1)}else i&&(s&&"while"===r.lastWord?(e=!0,s=!1):"if"!==r.lastWord&&"while"!==r.lastWord&&"for"!==r.lastWord&&"else"!==r.lastWord||(e=!!r.bodyContentAfterKeyword))}e&&(i[t.end]=!0),n=n.substring(a),r={}}return insertedSemicolons.set(t.ref,i),t}function checkRegex(e){let t=1,n=!1,o=!1,r=!1;for(;t<e.length&&!o&&!r;)o="/"===e[t]&&!n,n="\\"===e[t]&&!n,r="\n"===e[t],t++;const s=e.substring(t);if(r=r||!o||/^\s*\d/.test(s),r)return null;const i=/^[a-z]*/.exec(s);return/^\s+[\w$]/.test(e.substring(t+i[0].length))?null:{regex:e.substring(1,t-1),flags:i&&i[0]||"",length:t+(i&&i[0].length||0)}}const notDivide=/(typeof|delete|instanceof|return|in|of|throw|new|void|do|if)$/,possibleDivide=/^([\w$\])]|\+\+|--)[\s/]/;function extractConstants(e,t,n=""){let o,r,s=[],i=!1,a="",c=-1,p=[],l="";const d=[],u=[];let f=null,x=0;for(x=0;x<t.length;x++)if(l=t[x],a)l===a&&("*"===a&&"/"===t[x+1]?(a="",x++):"\n"===a&&(a="",d.push("\n")));else{if(i){i=!1,s.push(l);continue}if(o)if("`"===o&&"$"===l&&"{"===t[x+1]){const n=extractConstants(e,t.substring(x+2),"{");p.push(n.str),s.push("${",p.length-1,"}"),x+=n.length+2}else if(o===l){if("`"===o){const t=createLisp({op:36,a:unraw(s.join("")),b:[]});t.tempJsStrings=p,e.literals.push(t),d.push("`",e.literals.length-1,"`")}else e.strings.push(unraw(s.join(""))),d.push('"',e.strings.length-1,'"');o=null,s=[]}else s.push(l);else{if("'"===l||'"'===l||"`"===l)p=[],o=l;else{if(closings[n]===l&&!u.length)return{str:d.join(""),length:x};closings[l]?(u.push(l),d.push(l)):closings[u[u.length-1]]===l?(u.pop(),d.push(l)):"/"!==l||"*"!==t[x+1]&&"/"!==t[x+1]?"/"===l&&!f&&(r=checkRegex(t.substring(x)))?(e.regexes.push(r),d.push("/",e.regexes.length-1,"/r"),x+=r.length-1):d.push(l):(a="*"===t[x+1]?"*":"\n",c=x)}f&&space.test(l)||(f=possibleDivide.exec(t.substring(x)))&&notDivide.test(t.substring(0,x+f[1].length))&&(f=null)}i=!(!o||"\\"!==l)}if(a&&"*"===a)throw new SyntaxError(`Unclosed comment '/*': ${t.substring(c)}`);return{str:d.join(""),length:x}}function parse(e,t=!1,n=!1){if("string"!=typeof e)throw new ParseError(`Cannot parse ${e}`,e);let o=" "+e;const r={strings:[],literals:[],regexes:[],eager:t};o=extractConstants(r,o).str;for(const e of r.literals)e[2]=e.tempJsStrings.map(e=>lispifyExpr(r,new CodeString(e))),delete e.tempJsStrings;return{tree:lispifyFunction(new CodeString(o),r,n),constants:r}}function createEvalContext(){return{sandboxFunction:sandboxFunction,sandboxAsyncFunction:sandboxAsyncFunction,sandboxedEval:sandboxedEval,sandboxedSetTimeout:sandboxedSetTimeout,sandboxedSetInterval:sandboxedSetInterval,sandboxedClearTimeout:sandboxedClearTimeout,sandboxedClearInterval:sandboxedClearInterval,lispifyFunction:lispifyFunction}}function SB(){}function sandboxFunction(e){return SandboxFunction.prototype=SB.prototype,SandboxFunction;function SandboxFunction(...t){const n=parse(t.pop()||"");return createFunction(t,n.tree,e.ctx.ticks,{...e,constants:n.constants,tree:n.tree},void 0,"anonymous")}}function SAF(){}function sandboxAsyncFunction(e){return t.prototype=SAF.prototype,t;function t(...t){const n=parse(t.pop()||"");return createFunctionAsync(t,n.tree,e.ctx.ticks,{...e,constants:n.constants,tree:n.tree},void 0,"anonymous")}}function SE(){}function sandboxedEval(e,t){return n.prototype=SE.prototype,n;function n(e){const n=parse(e),o=wrapLastStatementInReturn(n.tree);return createFunction([],o,t.ctx.ticks,{...t,constants:n.constants,tree:o},void 0,"anonymous")()}}function wrapLastStatementInReturn(e){if(0===e.length)return e;const t=[...e],n=t.length-1,o=t[n];if(Array.isArray(o)&&o.length>=1){const e=o[0];if(8===e||46===e)return t;if([3,4,34,37,13,38,39,40,42,43].includes(e))return t;t[n]=[8,0,o]}return t}function sST(){}function sandboxedSetTimeout(e,t){return n.prototype=sST.prototype,n;function n(n,o,...r){const s=t.ctx.sandbox,i=(...t)=>{const o="string"==typeof n?e(n):n;return d.unsubscribe(),u.unsubscribe(),s.setTimeoutHandles.delete(a),o(...t)},a=++s.timeoutHandleCounter;let c=Date.now(),p=setTimeout(i,o,...r),l=0;const d=s.subscribeHalt(()=>{l=Date.now()-c+l,clearTimeout(p)}),u=s.subscribeResume(()=>{c=Date.now();const e=Math.floor((o||0)-l);p=setTimeout(i,e,...r),s.setTimeoutHandles.set(a,{handle:p,haltsub:d,contsub:u})});return s.setTimeoutHandles.set(a,{handle:p,haltsub:d,contsub:u}),a}}function sCT(){}function sandboxedClearTimeout(e){return t.prototype=sCT.prototype,t;function t(t){const n=e.ctx.sandbox,o=n.setTimeoutHandles.get(t);o&&(clearTimeout(o.handle),o.haltsub.unsubscribe(),o.contsub.unsubscribe(),n.setTimeoutHandles.delete(t))}}function sCI(){}function sandboxedClearInterval(e){return t.prototype=sCI.prototype,t;function t(t){const n=e.ctx.sandbox,o=n.setIntervalHandles.get(t);o&&(clearInterval(o.handle),o.haltsub.unsubscribe(),o.contsub.unsubscribe(),n.setIntervalHandles.delete(t))}}function sSI(){}function sandboxedSetInterval(e,t){return n.prototype=sSI.prototype,n;function n(n,o,...r){const s=t.ctx.sandbox,i="string"==typeof n?e(n):n,a=(...e)=>(p=Date.now(),d=0,i(...e)),c=++s.timeoutHandleCounter;let p=Date.now(),l=setInterval(a,o,...r),d=0;const u=s.subscribeHalt(()=>{d=Date.now()-p+d,clearInterval(l)}),f=s.subscribeResume(()=>{p=Date.now(),l=setTimeout(()=>{p=Date.now(),d=0,l=setInterval(a,o,...r),a(...r)},Math.floor((o||0)-d),...r),x.handle=l}),x={handle:l,haltsub:u,contsub:f};return s.setIntervalHandles.set(c,x),c}}function subscribeSet(e,t,n,o){const r=o.setSubscriptions.get(e)||new Map;o.setSubscriptions.set(e,r);const s=r.get(t)||new Set;let i;r.set(t,s),s.add(n);const a=e[t];return a instanceof Object&&(i=o.changeSubscriptions.get(a)||new Set,i.add(n),o.changeSubscriptions.set(a,i)),{unsubscribe:()=>{s.delete(n),i?.delete(n)}}}class SandboxExec{constructor(e,t){this.evalContext=t,this.setSubscriptions=new WeakMap,this.changeSubscriptions=new WeakMap,this.sandboxFunctions=new WeakMap,this.haltSubscriptions=new Set,this.resumeSubscriptions=new Set,this.halted=!1,this.timeoutHandleCounter=0,this.setTimeoutHandles=new Map,this.setIntervalHandles=new Map;const n=Object.assign({audit:!1,forbidFunctionCalls:!1,forbidFunctionCreation:!1,globals:SandboxExec.SAFE_GLOBALS,prototypeWhitelist:SandboxExec.SAFE_PROTOTYPES,prototypeReplacements:new Map},e||{});this.context=createContext(this,n)}static get SAFE_GLOBALS(){return{globalThis:globalThis,Function:Function,eval:eval,console:{debug:console.debug,error:console.error,info:console.info,log:console.log,table:console.table,warn:console.warn},isFinite:isFinite,isNaN:isNaN,parseFloat:parseFloat,parseInt:parseInt,decodeURI:decodeURI,decodeURIComponent:decodeURIComponent,encodeURI:encodeURI,encodeURIComponent:encodeURIComponent,escape:escape,unescape:unescape,Boolean:Boolean,Number:Number,BigInt:BigInt,String:String,Object:Object,Array:Array,Symbol:Symbol,Error:Error,EvalError:EvalError,RangeError:RangeError,ReferenceError:ReferenceError,SyntaxError:SyntaxError,TypeError:TypeError,URIError:URIError,Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array,Map:Map,Set:Set,WeakMap:WeakMap,WeakSet:WeakSet,Promise:Promise,Intl:Intl,JSON:JSON,Math:Math,Date:Date,RegExp:RegExp}}static get SAFE_PROTOTYPES(){const e=[SandboxGlobal,Function,Boolean,Number,BigInt,String,Date,Error,Array,Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,Map,Set,WeakMap,WeakSet,Promise,Symbol,Date,RegExp,Response,Request,Headers,FormData],t=new Map;return e.forEach(e=>{t.set(e,new Set)}),t.set(Object,new Set(["constructor","name","entries","fromEntries","getOwnPropertyNames","is","keys","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf","values"])),t}subscribeGet(e,t){return t.getSubscriptions.add(e),{unsubscribe:()=>t.getSubscriptions.delete(e)}}subscribeSet(e,t,n,o){return subscribeSet(e,t,n,o)}subscribeSetGlobal(e,t,n){return subscribeSet(e,t,n,this)}subscribeHalt(e){return this.haltSubscriptions.add(e),{unsubscribe:()=>{this.haltSubscriptions.delete(e)}}}subscribeResume(e){return this.resumeSubscriptions.add(e),{unsubscribe:()=>{this.resumeSubscriptions.delete(e)}}}haltExecution(e){if(!this.halted){this.halted=!0;for(const t of this.haltSubscriptions)t(e)}}resumeExecution(){if(this.halted){if(this.context.ticks.tickLimit&&this.context.ticks.ticks>=this.context.ticks.tickLimit)throw new SandboxExecutionQuotaExceededError("Cannot resume execution: tick limit exceeded");this.halted=!1;for(const e of this.resumeSubscriptions)e()}}getContext(e){return this.sandboxFunctions.get(e)}executeTree(e,t=[]){return executeTree(e.ctx.ticks,e,e.tree,t)}executeTreeAsync(e,t=[]){return executeTreeAsync(e.ctx.ticks,e,e.tree,t)}}class Sandbox extends SandboxExec{constructor(e){super(e,createEvalContext())}static audit(e,t=[]){const n={};for(const e of Object.getOwnPropertyNames(globalThis))n[e]=globalThis[e];const o=new SandboxExec({globals:n,audit:!0});return o.executeTree(createExecContext(o,parse(e,!0),createEvalContext()),t)}static parse(e){return parse(e)}compile(e,t=!1){const n=parse(e,t);return(...e)=>{const t=createExecContext(this,n,this.evalContext);return{context:t,run:()=>this.executeTree(t,[...e]).result}}}compileAsync(e,t=!1){const n=parse(e,t);return(...e)=>{const t=createExecContext(this,n,this.evalContext);return{context:t,run:()=>this.executeTreeAsync(t,[...e]).then(e=>e.result)}}}compileExpression(e,t=!1){const n=parse(e,t,!0);return(...e)=>{const t=createExecContext(this,n,this.evalContext);return{context:t,run:()=>this.executeTree(t,[...e]).result}}}compileExpressionAsync(e,t=!1){const n=parse(e,t,!0);return(...e)=>{const t=createExecContext(this,n,this.evalContext);return{context:t,run:()=>this.executeTreeAsync(t,[...e]).then(e=>e.result)}}}}export{LocalScope,SandboxAccessError,SandboxCapabilityError,SandboxError,SandboxExecutionTreeError,Sandbox as default};
2
- //# sourceMappingURL=Sandbox.min.js.map