@poe-platform/safe-js 0.1.0

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 (326) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +206 -0
  3. package/dist/agent-defs/agents/claude-code.d.ts +2 -0
  4. package/dist/agent-defs/agents/claude-desktop.d.ts +2 -0
  5. package/dist/agent-defs/agents/codex.d.ts +2 -0
  6. package/dist/agent-defs/agents/cursor.d.ts +2 -0
  7. package/dist/agent-defs/agents/gemini-cli.d.ts +2 -0
  8. package/dist/agent-defs/agents/goose.d.ts +2 -0
  9. package/dist/agent-defs/agents/index.d.ts +10 -0
  10. package/dist/agent-defs/agents/kimi.d.ts +2 -0
  11. package/dist/agent-defs/agents/opencode.d.ts +2 -0
  12. package/dist/agent-defs/agents/pi.d.ts +2 -0
  13. package/dist/agent-defs/agents/poe-agent.d.ts +2 -0
  14. package/dist/agent-defs/capabilities.d.ts +14 -0
  15. package/dist/agent-defs/index.d.ts +6 -0
  16. package/dist/agent-defs/registry.d.ts +3 -0
  17. package/dist/agent-defs/specifier.d.ts +7 -0
  18. package/dist/agent-defs/types.d.ts +35 -0
  19. package/dist/agent-harness-tools/binary-exists.d.ts +10 -0
  20. package/dist/agent-harness-tools/execution-env.d.ts +108 -0
  21. package/dist/agent-harness-tools/hooks.d.ts +30 -0
  22. package/dist/agent-harness-tools/index.d.ts +18 -0
  23. package/dist/agent-harness-tools/log-stream.d.ts +28 -0
  24. package/dist/agent-harness-tools/participant.d.ts +10 -0
  25. package/dist/agent-harness-tools/paths.d.ts +14 -0
  26. package/dist/agent-harness-tools/plan-readiness.d.ts +7 -0
  27. package/dist/agent-harness-tools/plans.d.ts +35 -0
  28. package/dist/agent-harness-tools/poe-command-execution.d.ts +37 -0
  29. package/dist/agent-harness-tools/run-logs.d.ts +17 -0
  30. package/dist/agent-harness-tools/run-poe-command.d.ts +33 -0
  31. package/dist/agent-harness-tools/runner.d.ts +33 -0
  32. package/dist/agent-harness-tools/select-agent.d.ts +18 -0
  33. package/dist/agent-harness-tools/sequence.d.ts +7 -0
  34. package/dist/agent-harness-tools/skill-config.d.ts +1 -0
  35. package/dist/agent-harness-tools/stage.d.ts +22 -0
  36. package/dist/agent-harness-tools/workspace-transfer.d.ts +3 -0
  37. package/dist/agent-spawn/acp/middleware.d.ts +38 -0
  38. package/dist/agent-spawn/acp/types.d.ts +180 -0
  39. package/dist/agent-spawn/adapters/claude.d.ts +3 -0
  40. package/dist/agent-spawn/adapters/codex.d.ts +2 -0
  41. package/dist/agent-spawn/adapters/cursor.d.ts +2 -0
  42. package/dist/agent-spawn/adapters/index.d.ts +12 -0
  43. package/dist/agent-spawn/adapters/kimi.d.ts +2 -0
  44. package/dist/agent-spawn/adapters/native.d.ts +5 -0
  45. package/dist/agent-spawn/adapters/opencode.d.ts +2 -0
  46. package/dist/agent-spawn/adapters/pi.d.ts +2 -0
  47. package/dist/agent-spawn/environment.d.ts +2 -0
  48. package/dist/agent-spawn/parallel.d.ts +30 -0
  49. package/dist/agent-spawn/retry.d.ts +26 -0
  50. package/dist/agent-spawn/types.d.ts +272 -0
  51. package/dist/auth-store/create-secret-store.d.ts +2 -0
  52. package/dist/auth-store/encrypted-file-store.d.ts +47 -0
  53. package/dist/auth-store/index.d.ts +7 -0
  54. package/dist/auth-store/keychain-store.d.ts +25 -0
  55. package/dist/auth-store/provider-store.d.ts +14 -0
  56. package/dist/auth-store/types.d.ts +22 -0
  57. package/dist/config-mutations/execution/run-mutations.d.ts +7 -0
  58. package/dist/config-mutations/fs-utils.d.ts +18 -0
  59. package/dist/config-mutations/index.d.ts +8 -0
  60. package/dist/config-mutations/mutations/config-mutation.d.ts +47 -0
  61. package/dist/config-mutations/mutations/file-mutation.d.ts +62 -0
  62. package/dist/config-mutations/mutations/template-mutation.d.ts +40 -0
  63. package/dist/config-mutations/template/render.d.ts +6 -0
  64. package/dist/config-mutations/types.d.ts +168 -0
  65. package/dist/poe-code-config/compile/schema-compiler.d.ts +11 -0
  66. package/dist/poe-code-config/config.d.ts +2 -0
  67. package/dist/poe-code-config/configured-services.d.ts +29 -0
  68. package/dist/poe-code-config/index.d.ts +16 -0
  69. package/dist/poe-code-config/inspect.d.ts +13 -0
  70. package/dist/poe-code-config/memory.d.ts +14 -0
  71. package/dist/poe-code-config/merge-callbacks.d.ts +38 -0
  72. package/dist/poe-code-config/merge.d.ts +2 -0
  73. package/dist/poe-code-config/plan-scope.d.ts +8 -0
  74. package/dist/poe-code-config/provider-config.d.ts +16 -0
  75. package/dist/poe-code-config/resolve.d.ts +2 -0
  76. package/dist/poe-code-config/runtime.d.ts +114 -0
  77. package/dist/poe-code-config/schema.d.ts +14 -0
  78. package/dist/poe-code-config/state/fs.d.ts +24 -0
  79. package/dist/poe-code-config/state/index.d.ts +12 -0
  80. package/dist/poe-code-config/state/jobs.d.ts +34 -0
  81. package/dist/poe-code-config/state/templates.d.ts +18 -0
  82. package/dist/poe-code-config/store.d.ts +12 -0
  83. package/dist/poe-code-config/types.d.ts +88 -0
  84. package/dist/process-runner/docker/build-context.d.ts +5 -0
  85. package/dist/process-runner/docker/context.d.ts +3 -0
  86. package/dist/process-runner/docker/docker-execution-env.d.ts +28 -0
  87. package/dist/process-runner/docker/docker-runner.d.ts +2 -0
  88. package/dist/process-runner/docker/engine.d.ts +3 -0
  89. package/dist/process-runner/host/host-execution-env.d.ts +2 -0
  90. package/dist/process-runner/host/host-runner.d.ts +3 -0
  91. package/dist/process-runner/index.d.ts +10 -0
  92. package/dist/process-runner/testing/index.d.ts +2 -0
  93. package/dist/process-runner/testing/mock-runner.d.ts +3 -0
  94. package/dist/process-runner/types.d.ts +191 -0
  95. package/dist/process-runner/workspace-transfer.d.ts +61 -0
  96. package/dist/providers/auth/api-key.d.ts +5 -0
  97. package/dist/providers/auth/types.d.ts +14 -0
  98. package/dist/providers/compatibility.d.ts +4 -0
  99. package/dist/providers/index.d.ts +8 -0
  100. package/dist/providers/providers/anthropic.d.ts +1 -0
  101. package/dist/providers/providers/cloudflare.d.ts +1 -0
  102. package/dist/providers/providers/generated.d.ts +5 -0
  103. package/dist/providers/providers/openai.d.ts +1 -0
  104. package/dist/providers/providers/poe.d.ts +2 -0
  105. package/dist/providers/registry.d.ts +44 -0
  106. package/dist/providers/types.d.ts +54 -0
  107. package/dist/safe-fs/bridge/filesystem.d.ts +88 -0
  108. package/dist/safe-fs/bridge/index.d.ts +6 -0
  109. package/dist/safe-fs/bridge/types.d.ts +75 -0
  110. package/dist/safe-fs/config.d.ts +15 -0
  111. package/dist/safe-fs/config.node.d.ts +2 -0
  112. package/dist/safe-fs/contracts/errors.d.ts +50 -0
  113. package/dist/safe-fs/contracts/filesystem.d.ts +96 -0
  114. package/dist/safe-fs/contracts/index.d.ts +4 -0
  115. package/dist/safe-fs/contracts/io.d.ts +8 -0
  116. package/dist/safe-fs/contracts/path.d.ts +8 -0
  117. package/dist/safe-fs/contracts/portable-path.d.ts +13 -0
  118. package/dist/safe-fs/contracts/virtual-path.d.ts +7 -0
  119. package/dist/safe-fs/core.d.ts +12 -0
  120. package/dist/safe-fs/fs/memory/index.d.ts +58 -0
  121. package/dist/safe-fs/fs/mount/comparison.d.ts +19 -0
  122. package/dist/safe-fs/fs/mount/index.d.ts +44 -0
  123. package/dist/safe-fs/fs/overlay/index.d.ts +73 -0
  124. package/dist/safe-fs/fs/readonly/index.d.ts +31 -0
  125. package/dist/safe-fs/fs/real/index.d.ts +76 -0
  126. package/dist/safe-fs/fs/s3/filesystem.d.ts +93 -0
  127. package/dist/safe-fs/fs/s3/http/index.d.ts +2 -0
  128. package/dist/safe-fs/fs/s3/http/transport.d.ts +3 -0
  129. package/dist/safe-fs/fs/s3/http/types.d.ts +30 -0
  130. package/dist/safe-fs/fs/s3/index.d.ts +6 -0
  131. package/dist/safe-fs/fs/s3/mock.d.ts +48 -0
  132. package/dist/safe-fs/fs/s3/transport.d.ts +103 -0
  133. package/dist/safe-fs/fs/webdav/index.d.ts +2 -0
  134. package/dist/safe-fs/fs/webdav/webdav.d.ts +101 -0
  135. package/dist/safe-fs/index.d.ts +14 -0
  136. package/dist/safe-fs/node/filesystem.d.ts +11 -0
  137. package/dist/safe-fs/node/index.d.ts +2 -0
  138. package/dist/safe-fs/node-host.d.ts +1 -0
  139. package/dist/safe-fs/node-unavailable.d.ts +1 -0
  140. package/dist/safe-fs/platform/browser.d.ts +12 -0
  141. package/dist/safe-fs/platform/node.d.ts +13 -0
  142. package/dist/safe-js/browser/chunks/chunk-QGN6DKT5.js +4335 -0
  143. package/dist/safe-js/browser/chunks/chunk-QGN6DKT5.js.map +7 -0
  144. package/dist/safe-js/browser/safe-fs-core.js +67 -0
  145. package/dist/safe-js/browser/safe-fs-core.js.map +7 -0
  146. package/dist/safe-js/browser/safe-fs.js +67 -0
  147. package/dist/safe-js/browser/safe-fs.js.map +7 -0
  148. package/dist/safe-js/chunks/chunk-2QRYPKQQ.js +4315 -0
  149. package/dist/safe-js/chunks/chunk-2QRYPKQQ.js.map +7 -0
  150. package/dist/safe-js/chunks/chunk-4YIDX44G.js +40 -0
  151. package/dist/safe-js/chunks/chunk-4YIDX44G.js.map +7 -0
  152. package/dist/safe-js/chunks/chunk-7M2SJPSZ.js +2613 -0
  153. package/dist/safe-js/chunks/chunk-7M2SJPSZ.js.map +7 -0
  154. package/dist/safe-js/chunks/chunk-DC5B3GYM.js +8248 -0
  155. package/dist/safe-js/chunks/chunk-DC5B3GYM.js.map +7 -0
  156. package/dist/safe-js/chunks/chunk-Z3D76J4U.js +30732 -0
  157. package/dist/safe-js/chunks/chunk-Z3D76J4U.js.map +7 -0
  158. package/dist/safe-js/cli.d.ts +36 -0
  159. package/dist/safe-js/cli.js +724 -0
  160. package/dist/safe-js/cli.js.map +7 -0
  161. package/dist/safe-js/core.d.ts +6 -0
  162. package/dist/safe-js/core.js +14 -0
  163. package/dist/safe-js/core.js.map +7 -0
  164. package/dist/safe-js/dump.d.ts +2 -0
  165. package/dist/safe-js/error/format.d.ts +15 -0
  166. package/dist/safe-js/error/shape.d.ts +28 -0
  167. package/dist/safe-js/index.d.ts +56 -0
  168. package/dist/safe-js/index.js +454 -0
  169. package/dist/safe-js/index.js.map +7 -0
  170. package/dist/safe-js/interp/arguments.d.ts +10 -0
  171. package/dist/safe-js/interp/async.d.ts +56 -0
  172. package/dist/safe-js/interp/budget.d.ts +95 -0
  173. package/dist/safe-js/interp/exceptions.d.ts +45 -0
  174. package/dist/safe-js/interp/generator.d.ts +16 -0
  175. package/dist/safe-js/interp/globals/console-json.d.ts +14 -0
  176. package/dist/safe-js/interp/host-bridge.d.ts +29 -0
  177. package/dist/safe-js/interp/host-call.d.ts +130 -0
  178. package/dist/safe-js/interp/interpreter.d.ts +63 -0
  179. package/dist/safe-js/interp/promise-replay.d.ts +70 -0
  180. package/dist/safe-js/interp/regex/compile-guard.d.ts +33 -0
  181. package/dist/safe-js/interp/regex/parse.d.ts +62 -0
  182. package/dist/safe-js/interp/scope.d.ts +43 -0
  183. package/dist/safe-js/interp/values.d.ts +136 -0
  184. package/dist/safe-js/lint/index.d.ts +38 -0
  185. package/dist/safe-js/lint/rules/AS-export-import-meta.d.ts +21 -0
  186. package/dist/safe-js/lint/rules/module-registry.d.ts +33 -0
  187. package/dist/safe-js/lint.d.ts +1 -0
  188. package/dist/safe-js/loader/extract-block.d.ts +10 -0
  189. package/dist/safe-js/loader/find-exported.d.ts +2 -0
  190. package/dist/safe-js/loader/frontmatter.d.ts +5 -0
  191. package/dist/safe-js/migrate.d.ts +33 -0
  192. package/dist/safe-js/migration-file.d.ts +55 -0
  193. package/dist/safe-js/modules/agent.d.ts +132 -0
  194. package/dist/safe-js/modules/env.d.ts +14 -0
  195. package/dist/safe-js/modules/fail.d.ts +6 -0
  196. package/dist/safe-js/modules/fs-config.d.ts +12 -0
  197. package/dist/safe-js/modules/fs.d.ts +82 -0
  198. package/dist/safe-js/modules/harness.d.ts +19 -0
  199. package/dist/safe-js/modules/log.d.ts +16 -0
  200. package/dist/safe-js/modules/mcp-transport.d.ts +26 -0
  201. package/dist/safe-js/modules/mcp.d.ts +63 -0
  202. package/dist/safe-js/modules/metric.d.ts +4 -0
  203. package/dist/safe-js/modules/registry.d.ts +16 -0
  204. package/dist/safe-js/modules/time.d.ts +12 -0
  205. package/dist/safe-js/observability/otel.d.ts +21 -0
  206. package/dist/safe-js/output-stream.d.ts +12 -0
  207. package/dist/safe-js/parse/parse-export.d.ts +36 -0
  208. package/dist/safe-js/parse/parser.d.ts +356 -0
  209. package/dist/safe-js/parse/tokenizer.d.ts +26 -0
  210. package/dist/safe-js/parse.d.ts +4 -0
  211. package/dist/safe-js/random.d.ts +9 -0
  212. package/dist/safe-js/restore.d.ts +26 -0
  213. package/dist/safe-js/run.d.ts +74 -0
  214. package/dist/safe-js/runner/run-harness.d.ts +32 -0
  215. package/dist/safe-js/safe-fs-core.js +130 -0
  216. package/dist/safe-js/safe-fs-core.js.map +7 -0
  217. package/dist/safe-js/safe-fs-node.js +94 -0
  218. package/dist/safe-js/safe-fs-node.js.map +7 -0
  219. package/dist/safe-js/safe-fs.js +94 -0
  220. package/dist/safe-js/safe-fs.js.map +7 -0
  221. package/dist/safe-js/snapshot/arguments.d.ts +17 -0
  222. package/dist/safe-js/snapshot/backend.d.ts +19 -0
  223. package/dist/safe-js/snapshot/dump-format.d.ts +7 -0
  224. package/dist/safe-js/snapshot/dump.d.ts +23 -0
  225. package/dist/safe-js/snapshot/float32array.d.ts +12 -0
  226. package/dist/safe-js/snapshot/migration.d.ts +35 -0
  227. package/dist/safe-js/snapshot/policy.d.ts +49 -0
  228. package/dist/safe-js/snapshot/replay-data.d.ts +71 -0
  229. package/dist/safe-js/snapshot/validation.d.ts +15 -0
  230. package/dist/task-list/backends/gh-issues-client.d.ts +19 -0
  231. package/dist/task-list/backends/gh-issues-sync.d.ts +46 -0
  232. package/dist/task-list/backends/gh-issues.d.ts +21 -0
  233. package/dist/task-list/index.d.ts +9 -0
  234. package/dist/task-list/move.d.ts +2 -0
  235. package/dist/task-list/open.d.ts +5 -0
  236. package/dist/task-list/state-machine.d.ts +16 -0
  237. package/dist/task-list/state.d.ts +29 -0
  238. package/dist/task-list/types.d.ts +206 -0
  239. package/dist/tiny-mcp-client/index.d.ts +662 -0
  240. package/dist/tiny-stdio-mcp-server/content/audio.d.ts +15 -0
  241. package/dist/tiny-stdio-mcp-server/content/convert.d.ts +16 -0
  242. package/dist/tiny-stdio-mcp-server/content/file-type.d.ts +11 -0
  243. package/dist/tiny-stdio-mcp-server/content/file.d.ts +28 -0
  244. package/dist/tiny-stdio-mcp-server/content/image.d.ts +15 -0
  245. package/dist/tiny-stdio-mcp-server/content/index.d.ts +7 -0
  246. package/dist/tiny-stdio-mcp-server/content/mime.d.ts +7 -0
  247. package/dist/tiny-stdio-mcp-server/content/remote.d.ts +5 -0
  248. package/dist/tiny-stdio-mcp-server/index.d.ts +9 -0
  249. package/dist/tiny-stdio-mcp-server/schema.d.ts +20 -0
  250. package/dist/tiny-stdio-mcp-server/server.d.ts +35 -0
  251. package/dist/tiny-stdio-mcp-server/types.d.ts +247 -0
  252. package/dist/toolcraft-design/acp/components.d.ts +19 -0
  253. package/dist/toolcraft-design/acp/index.d.ts +4 -0
  254. package/dist/toolcraft-design/acp/writer.d.ts +13 -0
  255. package/dist/toolcraft-design/components/browser.d.ts +15 -0
  256. package/dist/toolcraft-design/components/catalog.d.ts +26 -0
  257. package/dist/toolcraft-design/components/color.d.ts +31 -0
  258. package/dist/toolcraft-design/components/command-errors.d.ts +18 -0
  259. package/dist/toolcraft-design/components/detail-card.d.ts +22 -0
  260. package/dist/toolcraft-design/components/file-changes.d.ts +16 -0
  261. package/dist/toolcraft-design/components/help-formatter-plain.d.ts +5 -0
  262. package/dist/toolcraft-design/components/help-formatter.d.ts +50 -0
  263. package/dist/toolcraft-design/components/inspector-card.d.ts +21 -0
  264. package/dist/toolcraft-design/components/logger.d.ts +11 -0
  265. package/dist/toolcraft-design/components/resource-browser.d.ts +21 -0
  266. package/dist/toolcraft-design/components/symbols.d.ts +12 -0
  267. package/dist/toolcraft-design/components/table.d.ts +16 -0
  268. package/dist/toolcraft-design/components/template.d.ts +19 -0
  269. package/dist/toolcraft-design/components/text.d.ts +16 -0
  270. package/dist/toolcraft-design/dashboard/buffer.d.ts +25 -0
  271. package/dist/toolcraft-design/dashboard/components/footer.d.ts +8 -0
  272. package/dist/toolcraft-design/dashboard/dashboard.d.ts +20 -0
  273. package/dist/toolcraft-design/dashboard/index.d.ts +8 -0
  274. package/dist/toolcraft-design/dashboard/should-use-dashboard.d.ts +10 -0
  275. package/dist/toolcraft-design/dashboard/snapshot.d.ts +10 -0
  276. package/dist/toolcraft-design/dashboard/terminal.d.ts +37 -0
  277. package/dist/toolcraft-design/dashboard/types.d.ts +38 -0
  278. package/dist/toolcraft-design/explorer/events.d.ts +77 -0
  279. package/dist/toolcraft-design/explorer/index.d.ts +8 -0
  280. package/dist/toolcraft-design/explorer/keymap.d.ts +31 -0
  281. package/dist/toolcraft-design/explorer/runtime.d.ts +2 -0
  282. package/dist/toolcraft-design/explorer/state.d.ts +224 -0
  283. package/dist/toolcraft-design/index.d.ts +62 -0
  284. package/dist/toolcraft-design/internal/output-format.d.ts +6 -0
  285. package/dist/toolcraft-design/internal/strip-ansi.d.ts +1 -0
  286. package/dist/toolcraft-design/internal/theme-detect.d.ts +12 -0
  287. package/dist/toolcraft-design/internal/theme-state.d.ts +12 -0
  288. package/dist/toolcraft-design/prompts/index.d.ts +91 -0
  289. package/dist/toolcraft-design/prompts/interactive/cancel-symbol.d.ts +2 -0
  290. package/dist/toolcraft-design/prompts/interactive/select.d.ts +18 -0
  291. package/dist/toolcraft-design/prompts/primitives/cancel.d.ts +2 -0
  292. package/dist/toolcraft-design/prompts/primitives/intro.d.ts +1 -0
  293. package/dist/toolcraft-design/prompts/primitives/log.d.ts +18 -0
  294. package/dist/toolcraft-design/prompts/primitives/note.d.ts +1 -0
  295. package/dist/toolcraft-design/prompts/primitives/outro.d.ts +1 -0
  296. package/dist/toolcraft-design/prompts/primitives/spinner.d.ts +6 -0
  297. package/dist/toolcraft-design/prompts/theme.d.ts +11 -0
  298. package/dist/toolcraft-design/screen/screen.d.ts +40 -0
  299. package/dist/toolcraft-design/screen/style.d.ts +16 -0
  300. package/dist/toolcraft-design/static/index.d.ts +4 -0
  301. package/dist/toolcraft-design/static/menu.d.ts +11 -0
  302. package/dist/toolcraft-design/static/spinner.d.ts +14 -0
  303. package/dist/toolcraft-design/terminal/driver.d.ts +34 -0
  304. package/dist/toolcraft-design/terminal/input.d.ts +25 -0
  305. package/dist/toolcraft-design/terminal-markdown/ast.d.ts +98 -0
  306. package/dist/toolcraft-design/terminal-markdown/html-renderer.d.ts +7 -0
  307. package/dist/toolcraft-design/terminal-markdown/index.d.ts +12 -0
  308. package/dist/toolcraft-design/terminal-markdown/parser.d.ts +5 -0
  309. package/dist/toolcraft-design/terminal-markdown/plaintext-renderer.d.ts +11 -0
  310. package/dist/toolcraft-design/terminal-markdown/renderer.d.ts +7 -0
  311. package/dist/toolcraft-design/tokens/brand.d.ts +5 -0
  312. package/dist/toolcraft-design/tokens/colors.d.ts +37 -0
  313. package/dist/toolcraft-design/tokens/index.d.ts +6 -0
  314. package/dist/toolcraft-design/tokens/spacing.d.ts +6 -0
  315. package/dist/toolcraft-design/tokens/typography.d.ts +7 -0
  316. package/dist/toolcraft-design/tokens/widths.d.ts +5 -0
  317. package/dist/toolcraft-schema/index.d.ts +184 -0
  318. package/dist/toolcraft-schema/json-schema/index.d.ts +5 -0
  319. package/dist/toolcraft-schema/json-schema/types.d.ts +33 -0
  320. package/dist/toolcraft-schema/json-schema-document.d.ts +14 -0
  321. package/dist/toolcraft-schema/json.d.ts +10 -0
  322. package/dist/toolcraft-schema/oneof.d.ts +15 -0
  323. package/dist/toolcraft-schema/record.d.ts +5 -0
  324. package/dist/toolcraft-schema/union.d.ts +8 -0
  325. package/dist/toolcraft-schema/validate.d.ts +17 -0
  326. package/package.json +89 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/error/shape.ts", "../../src/interp/budget.ts", "../../src/parse/bindings.ts", "../../src/interp/regex/compile-guard.ts", "../../src/parse/tokenizer.ts", "../../src/parse/assign-ids.ts", "../../src/parse/format-error.ts", "../../src/parse/parse-export.ts", "../../src/parse/parse-import-meta.ts", "../../src/interp/regex/parse.ts", "../../src/parse/parser.ts", "../../src/snapshot/validation.ts", "../../src/interp/arguments.ts", "../../src/graph-depth.ts", "../../src/snapshot/arguments.ts", "../../src/snapshot/arrays.ts", "../../src/interp/float32.ts", "../../src/snapshot/float32array.ts", "../../src/snapshot/dump-format.ts", "../../src/observability/otel.ts", "../../src/interp/values.ts", "../../src/interp/promise-tracker.ts", "../../src/interp/promise-replay.ts", "../../src/interp/cancel.ts", "../../src/interp/host-call.ts", "../../src/snapshot/replay-data.ts", "../../src/snapshot/policy.ts", "../../src/interp/exceptions.ts", "../../src/interp/running-state.ts", "../../src/interp/iteration.ts", "../../src/interp/jobs.ts", "../../src/interp/promise.ts", "../../src/parse/hash.ts", "../../src/snapshot/migration.ts", "../../src/restore.ts", "../../src/lint/rules/AS001.ts", "../../src/lint/rules/known-globals.ts", "../../src/lint/rules/AS003.ts", "../../src/lint/rules/module-registry.ts", "../../src/lint/rules/AS004.ts", "../../src/lint/rules/AS005.ts", "../../src/lint/rules/AS006-007.ts", "../../src/lint/rules/AS009.ts", "../../src/lint/rules/AS010.ts", "../../src/lint/rules/AS011.ts", "../../src/lint/rules/AS013.ts", "../../src/lint/rules/AS015.ts", "../../src/lint/rules/AS-async-not-needed.ts", "../../src/lint/rules/AS-destructure-null-default.ts", "../../src/lint/rules/AS-export-import-meta.ts", "../../src/lint/rules/AS-floating-promise.ts", "../../src/lint/rules/AS-frontmatter-field-unused.ts", "../../src/lint/rules/AS-import-cycle.ts", "../../src/lint/rules/AS-jsdoc-type.ts", "../../src/lint/rules/AS-large-literal.ts", "../../src/lint/rules/AS-missing-async.ts", "../../src/lint/rules/AS-mutating-frozen.ts", "../../src/lint/rules/AS-needless-template.ts", "../../src/lint/rules/AS-shadow-global.ts", "../../src/lint/rules/AS-unbounded-loop.ts", "../../src/lint/rules/AS-unreachable.ts", "../../src/lint/rules/AS-unused-import.ts", "../../src/lint/index.ts", "../../src/random.ts", "../../src/interp/globals/math.ts", "../../src/interp/generator.ts", "../../src/interp/patterns.ts", "../../src/interp/var-hoist.ts", "../../src/interp/async.ts", "../../src/interp/host-bridge.ts", "../../src/snapshot/dump.ts", "../../src/error-codes.ts", "../../src/snapshot/backend.ts", "../../src/run.ts", "../../src/interp/resources.ts", "../../src/interp/globals/console-json.ts", "../../src/interp/globals/collections.ts", "../../src/interp/globals/float32array.ts", "../../src/interp/globals/error.ts", "../../src/interp/globals/regex.ts", "../../src/interp/globals/misc.ts", "../../src/interp/string-coercion.ts", "../../src/interp/globals/object-array.ts", "../../src/interp/methods/array.ts", "../../src/interp/methods/function.ts", "../../src/interp/methods/collection-callback.ts", "../../src/interp/methods/map.ts", "../../src/interp/methods/number.ts", "../../src/interp/methods/generator.ts", "../../src/interp/regex/engine.ts", "../../src/interp/methods/regex.ts", "../../src/interp/methods/string.ts", "../../src/interp/methods/set.ts", "../../src/interp/scope.ts", "../../src/interp/interpreter.ts", "../../src/modules/registry.ts", "../../src/snapshot/scheduler.ts", "../../src/snapshot/serialize.ts", "../../src/snapshot/replay-inputs.ts"],
4
+ "sourcesContent": ["export type ErrorSourceSpan = {\n start: ErrorSourcePosition;\n end: ErrorSourcePosition;\n};\n\nexport type ErrorSourcePosition = {\n line: number;\n column: number;\n offset: number;\n};\n\nconst wrappedErrorCause = Symbol(\"wrappedErrorCause\");\n\nexport const sandboxErrorNames = [\n \"Error\",\n \"TypeError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"AbortError\",\n \"AggregateError\",\n \"HarnessFailure\"\n] as const;\n\nexport type SandboxErrorName = (typeof sandboxErrorNames)[number];\n\nexport const sandboxErrorTypes = new WeakMap<object, SandboxErrorName>();\nexport const hostErrorData = new WeakMap<Error, Record<string, unknown>>();\n\nexport function formatErrorStack(\n name: string,\n message: string,\n stackFrames: readonly string[] = []\n): string {\n const header = message.length === 0 ? name : `${name}: ${message}`;\n return [header, ...stackFrames].join(\"\\n\");\n}\n\nexport function replaceErrorStack(\n error: { message: string; name: string; stack?: string },\n stackFrames: readonly string[] = []\n): void {\n error.stack = formatErrorStack(error.name, error.message, stackFrames);\n}\n\nexport function attachErrorSpan(error: object, span: ErrorSourceSpan | undefined): void {\n if (span === undefined || hasOwnProperty(error, \"span\")) {\n return;\n }\n\n Object.defineProperty(error, \"span\", {\n configurable: true,\n value: span\n });\n}\n\nexport function attachErrorCause(error: object, cause: unknown): void {\n if (cause === undefined || hasOwnProperty(error, \"cause\")) {\n return;\n }\n\n Object.defineProperty(error, \"cause\", {\n configurable: true,\n value: cause\n });\n}\n\nexport function attachWrappedErrorCause(error: object, cause: unknown): void {\n if (cause === undefined || wrappedErrorCause in error) {\n return;\n }\n\n Object.defineProperty(error, wrappedErrorCause, {\n configurable: true,\n value: cause\n });\n}\n\nexport function materializeWrappedErrorCause(value: unknown): void {\n if (typeof value !== \"object\" || value === null || !(wrappedErrorCause in value)) {\n return;\n }\n\n attachErrorCause(value, (value as { [wrappedErrorCause]?: unknown })[wrappedErrorCause]);\n}\n\nexport function readErrorSpan(value: unknown): ErrorSourceSpan | undefined {\n if (typeof value !== \"object\" || value === null || !hasOwnProperty(value, \"span\")) {\n return undefined;\n }\n\n const span = value.span;\n return isErrorSourceSpan(span) ? span : undefined;\n}\n\nexport function readErrorCause(value: unknown): unknown {\n return typeof value === \"object\" && value !== null && hasOwnProperty(value, \"cause\")\n ? value.cause\n : undefined;\n}\n\nexport function isErrorSourceSpan(value: unknown): value is ErrorSourceSpan {\n if (\n typeof value !== \"object\" ||\n value === null ||\n !hasOwnProperty(value, \"start\") ||\n !hasOwnProperty(value, \"end\")\n ) {\n return false;\n }\n\n return isErrorSourcePosition(value.start) && isErrorSourcePosition(value.end);\n}\n\nexport function createSourceSpan(\n source: string,\n line: number,\n column: number,\n endLine: number,\n endColumn: number\n): ErrorSourceSpan {\n const start = createSourcePosition(source, line, column);\n const rawEnd = createSourcePosition(source, endLine, endColumn);\n const end =\n rawEnd.offset > start.offset\n ? rawEnd\n : createSourcePositionFromOffset(source, Math.min(start.offset + 1, source.length));\n\n return { start, end };\n}\n\nexport function describeThrownValue(value: unknown): string {\n if (value instanceof Error) {\n return value.message.length > 0 ? `${value.name}: ${value.message}` : value.name;\n }\n\n if (typeof value === \"string\") {\n return value;\n }\n\n if (\n value === undefined ||\n value === null ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\" ||\n typeof value === \"symbol\"\n ) {\n return String(value);\n }\n\n try {\n const serialized = JSON.stringify(value);\n return serialized === undefined ? String(value) : serialized;\n } catch {\n return String(value);\n }\n}\n\nfunction isErrorSourcePosition(value: unknown): value is ErrorSourcePosition {\n return (\n typeof value === \"object\" &&\n value !== null &&\n hasOwnProperty(value, \"line\") &&\n typeof value.line === \"number\" &&\n hasOwnProperty(value, \"column\") &&\n typeof value.column === \"number\" &&\n hasOwnProperty(value, \"offset\") &&\n typeof value.offset === \"number\"\n );\n}\n\nfunction hasOwnProperty<Name extends PropertyKey>(\n value: object,\n name: Name\n): value is Record<Name, unknown> {\n return Object.prototype.hasOwnProperty.call(value, name);\n}\n\nfunction createSourcePosition(source: string, line: number, column: number): ErrorSourcePosition {\n return createSourcePositionFromOffset(source, findSourceOffset(source, line, column));\n}\n\nfunction createSourcePositionFromOffset(source: string, offset: number): ErrorSourcePosition {\n let line = 1;\n let column = 1;\n\n for (let index = 0; index < offset; index += 1) {\n if (source[index] === \"\\n\") {\n line += 1;\n column = 1;\n } else {\n column += 1;\n }\n }\n\n return {\n column,\n line,\n offset\n };\n}\n\nfunction findSourceOffset(source: string, line: number, column: number): number {\n let currentLine = 1;\n let currentColumn = 1;\n\n for (let offset = 0; offset <= source.length; offset += 1) {\n if (currentLine === line && currentColumn === column) {\n return offset;\n }\n\n const character = source[offset];\n if (character === undefined) {\n return source.length;\n }\n\n if (character === \"\\n\") {\n currentLine += 1;\n currentColumn = 1;\n } else {\n currentColumn += 1;\n }\n }\n\n return source.length;\n}\n", "import { replaceErrorStack } from \"../error/shape.js\";\n\nexport type BudgetName =\n | \"steps\"\n | \"deadline\"\n | \"callDepth\"\n | \"stringLength\"\n | \"arrayLength\"\n | \"dataSize\"\n | \"dataDepth\";\n\nexport type BudgetOptions = {\n maxSteps?: number;\n deadline?: number | Date;\n maxCallDepth?: number;\n stringLength?: number;\n arrayLength?: number;\n dataSize?: number;\n};\n\nexport const REGEX_STEP_LIMIT = 2_000;\nexport const REGEX_COMPILE_LIMITS = Object.freeze({\n sourceLength: 4_096,\n flagsLength: 8,\n depth: 64,\n allocations: 16_384\n});\nconst DEADLINE_CHECK_INTERVAL = 1_024;\n\nexport class SandboxError extends Error {\n readonly code: \"aborted\" | \"budgetExceeded\" | \"reentry\";\n readonly budget?: BudgetName;\n readonly current?: number;\n readonly limit?: number;\n\n constructor(input: \"aborted\");\n constructor(input: \"reentry\");\n constructor(input: { budget: BudgetName; current: number; limit: number });\n constructor(\n input: \"aborted\" | \"reentry\" | { budget: BudgetName; current: number; limit: number }\n ) {\n super(\n input === \"aborted\"\n ? \"aborted\"\n : input === \"reentry\"\n ? \"Sandbox object is already running.\"\n : `Sandbox budget exceeded for ${input.budget}: ${input.current} > ${input.limit}.`\n );\n this.name = \"SandboxError\";\n replaceErrorStack(this);\n\n if (input === \"aborted\") {\n this.code = \"aborted\";\n return;\n }\n\n if (input === \"reentry\") {\n this.code = \"reentry\";\n return;\n }\n\n this.code = \"budgetExceeded\";\n this.budget = input.budget;\n this.current = input.current;\n this.limit = input.limit;\n }\n}\n\ntype BudgetLimits = {\n maxSteps?: number;\n maxCallDepth?: number;\n stringLength?: number;\n arrayLength?: number;\n dataSize?: number;\n};\n\nexport type CompileOwner = {\n readonly budget: Budget;\n readonly generation: number;\n};\n\nexport type CompileTicket = {\n readonly owner: CompileOwner;\n};\n\nexport class Budget {\n readonly deadline?: number;\n readonly limits: Readonly<BudgetLimits>;\n stepsUsed = 0;\n peakCallDepth = 0;\n currentDataSize = 0;\n peakDataSize = 0;\n\n currentCallDepth = 0;\n private allChecksSuspended = 0;\n private deadlineChecksSuspended = 0;\n private visitsUntilDeadlineCheck = DEADLINE_CHECK_INTERVAL;\n private retainedDataSize = 0;\n private readonly retainedData = new Map<object, number>();\n private readonly retainedValueSources = new Map<object, () => Iterable<unknown>>();\n private compileGeneration = 0;\n private activeCompileOwner?: CompileOwner;\n private compileUses = 0;\n private provisionalScopes = 0;\n private readonly compileTickets = new Map<CompileTicket, number>();\n private readonly completedCompileTickets = new Set<CompileTicket>();\n\n constructor(options: BudgetOptions = {}) {\n this.deadline = normalizeDeadline(options.deadline);\n this.limits = Object.freeze({\n maxSteps: normalizeLimit(\"maxSteps\", options.maxSteps),\n maxCallDepth: normalizeLimit(\"maxCallDepth\", options.maxCallDepth),\n stringLength: normalizeLimit(\"stringLength\", options.stringLength),\n arrayLength: normalizeLimit(\"arrayLength\", options.arrayLength),\n dataSize: normalizeLimit(\"dataSize\", options.dataSize)\n });\n }\n\n visitNode(): void {\n this.stepsUsed += 1;\n this.checkSampledDeadline();\n\n if (\n this.allChecksSuspended === 0 &&\n this.limits.maxSteps !== undefined &&\n this.stepsUsed > this.limits.maxSteps\n ) {\n throw new SandboxError({\n budget: \"steps\",\n current: this.stepsUsed,\n limit: this.limits.maxSteps\n });\n }\n }\n\n allocateString(value: string): string {\n if (\n this.allChecksSuspended === 0 &&\n this.limits.stringLength !== undefined &&\n value.length > this.limits.stringLength\n ) {\n throw new SandboxError({\n budget: \"stringLength\",\n current: value.length,\n limit: this.limits.stringLength\n });\n }\n\n return value;\n }\n\n allocateArrayLength(length: number): void {\n if (\n this.allChecksSuspended === 0 &&\n this.limits.arrayLength !== undefined &&\n length > this.limits.arrayLength\n ) {\n throw new SandboxError({\n budget: \"arrayLength\",\n current: length,\n limit: this.limits.arrayLength\n });\n }\n }\n\n allocateCollectionEntries(count: number): void {\n this.allocateArrayLength(count);\n }\n\n reconcileDataUsage(usage: number): void {\n const total = usage + this.retainedDataSize;\n this.checkDataUsage(total);\n this.currentDataSize = total;\n this.peakDataSize = Math.max(this.peakDataSize, total);\n }\n\n setRetainedDataUsage(owner: object, usage: number): void {\n if (!Number.isSafeInteger(usage) || usage < 0) {\n throw new TypeError(\"Retained data usage must be a non-negative safe integer.\");\n }\n const delta = usage - (this.retainedData.get(owner) ?? 0);\n const total = this.currentDataSize + delta;\n this.checkDataUsage(total);\n if (usage === 0) this.retainedData.delete(owner);\n else this.retainedData.set(owner, usage);\n this.retainedDataSize += delta;\n this.currentDataSize = total;\n this.peakDataSize = Math.max(this.peakDataSize, total);\n }\n\n setRetainedValues(owner: object, values: (() => Iterable<unknown>) | undefined): void {\n if (values === undefined) this.retainedValueSources.delete(owner);\n else this.retainedValueSources.set(owner, values);\n }\n\n *retainedValues(): Iterable<unknown> {\n for (const values of this.retainedValueSources.values()) yield* values();\n }\n\n acquireCompileOwner(\n reset = false,\n owner?: CompileOwner\n ): {\n owner: CompileOwner;\n release: () => void;\n } {\n if (\n (owner !== undefined &&\n (owner.budget !== this || owner.generation !== this.compileGeneration)) ||\n (this.activeCompileOwner !== undefined && this.activeCompileOwner !== owner) ||\n (reset && (this.compileUses !== 0 || owner !== undefined))\n ) {\n throw new SandboxError(\"reentry\");\n }\n if (reset) this.reset();\n const selected = owner ?? Object.freeze({ budget: this, generation: this.compileGeneration });\n this.activeCompileOwner = selected;\n this.compileUses += 1;\n let released = false;\n return {\n owner: selected,\n release: () => {\n if (released) return;\n released = true;\n this.compileUses -= 1;\n if (this.compileUses === 0) this.activeCompileOwner = undefined;\n }\n };\n }\n\n createCompileTicket(owner: CompileOwner): CompileTicket {\n if (\n owner.budget !== this ||\n owner.generation !== this.compileGeneration ||\n this.activeCompileOwner !== owner\n ) {\n throw new SandboxError(\"reentry\");\n }\n const ticket = Object.freeze({ owner });\n this.compileTickets.set(ticket, 0);\n return ticket;\n }\n\n compileTicketUsage(ticket: CompileTicket): number {\n return ticket.owner.generation === this.compileGeneration\n ? (this.compileTickets.get(ticket) ?? 0)\n : 0;\n }\n\n resizeCompileTicket(ticket: CompileTicket, usage: number): void {\n if (ticket.owner.generation !== this.compileGeneration || !this.compileTickets.has(ticket)) {\n throw new SandboxError(\"reentry\");\n }\n this.setRetainedDataUsage(ticket, usage);\n this.compileTickets.set(ticket, usage);\n }\n\n discardCompileTicket(ticket: CompileTicket): void {\n if (ticket.owner.generation !== this.compileGeneration) return;\n const usage = this.compileTickets.get(ticket);\n if (usage === undefined) return;\n this.compileTickets.delete(ticket);\n this.completedCompileTickets.delete(ticket);\n this.retainedData.delete(ticket);\n this.retainedDataSize -= usage;\n this.currentDataSize -= usage;\n }\n\n reconcileCompileData(\n usage: number,\n included: ReadonlySet<CompileTicket>,\n transferred: ReadonlySet<CompileTicket> = included,\n retainedOwner?: object,\n complete = false\n ): ReadonlySet<CompileTicket> {\n let includedUsage = 0;\n let transferredUsage = 0;\n let discardedUsage = 0;\n const releasing: CompileTicket[] = [];\n const retained = new Set<CompileTicket>();\n for (const ticket of included) {\n const charge = this.compileTicketUsage(ticket);\n includedUsage += charge;\n if (\n charge > 0 &&\n transferred.has(ticket) &&\n (this.provisionalScopes === 0 || retainedOwner !== undefined)\n ) {\n releasing.push(ticket);\n transferredUsage += charge;\n } else if (charge > 0 && complete && transferred.has(ticket)) {\n retained.add(ticket);\n }\n }\n if (retainedOwner === undefined) {\n for (const ticket of this.completedCompileTickets) {\n if (included.has(ticket)) continue;\n releasing.push(ticket);\n discardedUsage += this.compileTicketUsage(ticket);\n }\n }\n const oldOwnerUsage =\n retainedOwner === undefined ? 0 : (this.retainedData.get(retainedOwner) ?? 0);\n const nextRetained =\n this.retainedDataSize -\n transferredUsage -\n discardedUsage +\n (retainedOwner === undefined ? 0 : usage - oldOwnerUsage);\n const measured =\n retainedOwner === undefined\n ? usage - includedUsage + transferredUsage\n : this.currentDataSize - this.retainedDataSize;\n const total = measured + nextRetained;\n this.checkDataUsage(total);\n for (const ticket of releasing) {\n this.compileTickets.delete(ticket);\n this.completedCompileTickets.delete(ticket);\n this.retainedData.delete(ticket);\n }\n if (retainedOwner !== undefined) {\n if (usage === 0) this.retainedData.delete(retainedOwner);\n else this.retainedData.set(retainedOwner, usage);\n }\n this.retainedDataSize = nextRetained;\n this.currentDataSize = total;\n this.peakDataSize = Math.max(this.peakDataSize, total);\n for (const ticket of retained) this.completedCompileTickets.add(ticket);\n return retained;\n }\n\n chargeDataUsage(usage: number): void {\n const total = this.currentDataSize + usage;\n this.checkDataUsage(total);\n this.currentDataSize = total;\n this.peakDataSize = Math.max(this.peakDataSize, total);\n }\n\n provisionDataUsage(usage: number): () => void {\n const previous = this.currentDataSize;\n const previousRetained = this.retainedDataSize;\n const next = previous + usage;\n this.checkDataUsage(next);\n this.currentDataSize = next;\n this.peakDataSize = Math.max(this.peakDataSize, next);\n const generation = this.compileGeneration;\n this.provisionalScopes += 1;\n\n let released = false;\n return () => {\n if (released) return;\n released = true;\n if (generation !== this.compileGeneration) return;\n this.provisionalScopes -= 1;\n this.currentDataSize = previous + this.retainedDataSize - previousRetained;\n };\n }\n\n enterCall(): () => void {\n return this.enterDepth();\n }\n\n enterAwait(): () => void {\n return this.enterDepth();\n }\n\n reset(): void {\n if (this.compileUses !== 0) throw new SandboxError(\"reentry\");\n this.compileGeneration += 1;\n this.provisionalScopes = 0;\n this.compileTickets.clear();\n this.completedCompileTickets.clear();\n this.stepsUsed = 0;\n this.peakCallDepth = 0;\n this.currentCallDepth = 0;\n this.currentDataSize = 0;\n this.peakDataSize = 0;\n this.retainedDataSize = 0;\n this.retainedData.clear();\n this.retainedValueSources.clear();\n this.allChecksSuspended = 0;\n this.deadlineChecksSuspended = 0;\n this.visitsUntilDeadlineCheck = DEADLINE_CHECK_INTERVAL;\n }\n\n suspendChecks(): () => void {\n this.allChecksSuspended += 1;\n\n let resumed = false;\n return () => {\n if (resumed) {\n return;\n }\n\n resumed = true;\n this.allChecksSuspended -= 1;\n };\n }\n\n suspendDeadlineChecks(): () => void {\n this.deadlineChecksSuspended += 1;\n\n let resumed = false;\n return () => {\n if (resumed) {\n return;\n }\n\n resumed = true;\n this.deadlineChecksSuspended -= 1;\n };\n }\n\n private checkDeadline(): void {\n if (\n this.allChecksSuspended > 0 ||\n this.deadlineChecksSuspended > 0 ||\n this.deadline === undefined\n ) {\n return;\n }\n\n const now = Date.now();\n if (now <= this.deadline) {\n return;\n }\n\n throw new SandboxError({\n budget: \"deadline\",\n current: now,\n limit: this.deadline\n });\n }\n\n private checkDataUsage(usage: number): void {\n if (\n this.allChecksSuspended === 0 &&\n this.limits.dataSize !== undefined &&\n usage > this.limits.dataSize\n ) {\n throw new SandboxError({\n budget: \"dataSize\",\n current: usage,\n limit: this.limits.dataSize\n });\n }\n }\n\n private checkSampledDeadline(): void {\n if (\n this.allChecksSuspended > 0 ||\n this.deadlineChecksSuspended > 0 ||\n this.deadline === undefined\n ) {\n return;\n }\n\n this.visitsUntilDeadlineCheck -= 1;\n if (this.visitsUntilDeadlineCheck > 0) {\n return;\n }\n\n this.visitsUntilDeadlineCheck = DEADLINE_CHECK_INTERVAL;\n this.checkDeadline();\n }\n\n private enterDepth(): () => void {\n const nextDepth = this.currentCallDepth + 1;\n\n if (\n this.allChecksSuspended === 0 &&\n this.limits.maxCallDepth !== undefined &&\n nextDepth > this.limits.maxCallDepth\n ) {\n throw new SandboxError({\n budget: \"callDepth\",\n current: nextDepth,\n limit: this.limits.maxCallDepth\n });\n }\n\n this.currentCallDepth = nextDepth;\n if (nextDepth > this.peakCallDepth) {\n this.peakCallDepth = nextDepth;\n }\n\n let left = false;\n return () => {\n if (left) {\n return;\n }\n\n left = true;\n this.currentCallDepth -= 1;\n };\n }\n}\n\nexport function allocateRegexSteps(steps: number): void {\n if (!Number.isInteger(steps) || steps < 0) {\n throw new Error(\"steps must be a non-negative integer.\");\n }\n if (steps > REGEX_STEP_LIMIT) {\n throw new SandboxError({ budget: \"steps\", current: steps, limit: REGEX_STEP_LIMIT });\n }\n}\n\nfunction normalizeDeadline(deadline: BudgetOptions[\"deadline\"]): number | undefined {\n if (deadline === undefined) {\n return undefined;\n }\n\n return deadline instanceof Date ? deadline.getTime() : deadline;\n}\n\nfunction normalizeLimit(name: keyof BudgetLimits, value: number | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (!Number.isInteger(value) || value < 0) {\n throw new Error(`${name} must be a non-negative integer.`);\n }\n\n return value;\n}\n", "import type {\n ArrowFunctionExpression,\n ArrayPattern,\n AssignmentPattern,\n Identifier,\n MemberExpression,\n ObjectPattern,\n ParseResult,\n RestElement,\n VariableDeclaration\n} from \"./parser.js\";\n\ntype BindingPattern =\n | Identifier\n | ArrayPattern\n | ObjectPattern\n | AssignmentPattern\n | RestElement\n | MemberExpression;\n\nexport function getFunctionLength(params: ArrowFunctionExpression[\"params\"]): number {\n const firstOptional = params.findIndex(\n (param) => param.type === \"AssignmentPattern\" || param.type === \"RestElement\"\n );\n return firstOptional === -1 ? params.length : firstOptional;\n}\n\nexport function* boundIdentifiers(pattern: BindingPattern): Iterable<Identifier> {\n switch (pattern.type) {\n case \"Identifier\":\n yield pattern;\n return;\n case \"AssignmentPattern\":\n yield* boundIdentifiers(pattern.left);\n return;\n case \"RestElement\":\n yield* boundIdentifiers(pattern.argument);\n return;\n case \"ArrayPattern\":\n for (const element of pattern.elements) {\n if (element !== null) yield* boundIdentifiers(element);\n }\n return;\n case \"ObjectPattern\":\n for (const property of pattern.properties) {\n yield* boundIdentifiers(property.type === \"RestElement\" ? property : property.value);\n }\n return;\n case \"MemberExpression\":\n return;\n }\n}\n\nexport function containsParameterExpression(pattern: BindingPattern): boolean {\n switch (pattern.type) {\n case \"AssignmentPattern\":\n case \"MemberExpression\":\n return true;\n case \"RestElement\":\n return containsParameterExpression(pattern.argument);\n case \"ArrayPattern\":\n return pattern.elements.some(\n (element) => element !== null && containsParameterExpression(element)\n );\n case \"ObjectPattern\":\n return pattern.properties.some((property) =>\n property.type === \"RestElement\"\n ? containsParameterExpression(property.argument)\n : property.computed || containsParameterExpression(property.value)\n );\n case \"Identifier\":\n return false;\n }\n}\n\nexport function* hoistedVarDeclarations(\n nodes: readonly ParseResult[]\n): Iterable<VariableDeclaration> {\n for (const node of nodes) {\n switch (node.type) {\n case \"VariableDeclaration\":\n if (node.kind === \"var\") yield node;\n break;\n case \"BlockStatement\":\n yield* hoistedVarDeclarations(node.body);\n break;\n case \"IfStatement\":\n yield* hoistedVarDeclarations([node.consequent]);\n if (node.alternate !== undefined) yield* hoistedVarDeclarations([node.alternate]);\n break;\n case \"ForStatement\":\n if (node.init?.type === \"VariableDeclaration\") yield* hoistedVarDeclarations([node.init]);\n yield* hoistedVarDeclarations([node.body]);\n break;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n if (node.left.type === \"VariableDeclaration\") yield* hoistedVarDeclarations([node.left]);\n yield* hoistedVarDeclarations([node.body]);\n break;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n yield* hoistedVarDeclarations([node.body]);\n break;\n case \"TryStatement\":\n yield* hoistedVarDeclarations([node.block]);\n if (node.handler !== undefined) yield* hoistedVarDeclarations([node.handler.body]);\n if (node.finalizer !== undefined) yield* hoistedVarDeclarations([node.finalizer]);\n break;\n case \"SwitchStatement\":\n for (const switchCase of node.cases) yield* hoistedVarDeclarations(switchCase.consequent);\n break;\n case \"ExportNamedDeclaration\":\n yield* hoistedVarDeclarations([node.declaration]);\n break;\n }\n }\n}\n", "import {\n REGEX_COMPILE_LIMITS,\n SandboxError,\n type CompileOwner,\n type CompileTicket\n} from \"../budget.js\";\nimport type { RegexNode, RegexPattern } from \"./parse.js\";\n\nconst compiledData = new WeakMap<RegexPattern, { units: number; ticket?: CompileTicket }>();\n\nexport class CompileScope {\n readonly tickets = new Set<CompileTicket>();\n closed = false;\n\n constructor(\n readonly owner?: CompileOwner,\n readonly parent?: CompileScope\n ) {}\n\n forward(tickets: Iterable<CompileTicket>, parent: CompileScope): void {\n if (parent === this) return;\n if (this.owner !== parent.owner) throw new SandboxError(\"reentry\");\n for (const ticket of tickets) {\n if (!this.tickets.delete(ticket)) continue;\n if (ticket.owner.budget.compileTicketUsage(ticket) > 0) parent.tickets.add(ticket);\n }\n }\n\n dispose(): void {\n for (const ticket of this.tickets) ticket.owner.budget.discardCompileTicket(ticket);\n this.tickets.clear();\n this.closed = true;\n }\n}\n\nexport class RegexCompileGuard {\n private allocations = 0;\n private depth = 0;\n private readonly ticket?: CompileTicket;\n private retained = false;\n\n constructor(private readonly scope?: CompileScope) {\n if (scope?.owner !== undefined) {\n this.ticket = scope.owner.budget.createCompileTicket(scope.owner);\n scope.tickets.add(this.ticket);\n }\n }\n\n checkLength(length: number, flags = false): void {\n const hard = flags ? REGEX_COMPILE_LIMITS.flagsLength : REGEX_COMPILE_LIMITS.sourceLength;\n const limit = Math.min(hard, this.scope?.owner?.budget.limits.stringLength ?? hard);\n if (length > limit) throw new SandboxError({ budget: \"stringLength\", current: length, limit });\n }\n\n work(units: number): void {\n const budget = this.scope?.owner?.budget;\n if (budget === undefined) return;\n for (let index = 0; index < units; index += 1) budget.visitNode();\n }\n\n allocate(units: number): void {\n const next = this.allocations + units;\n if (next > REGEX_COMPILE_LIMITS.allocations) {\n throw new SandboxError({\n budget: \"dataSize\",\n current: next,\n limit: REGEX_COMPILE_LIMITS.allocations\n });\n }\n this.work(units);\n if (this.ticket !== undefined) {\n this.ticket.owner.budget.resizeCompileTicket(this.ticket, next);\n }\n this.allocations = next;\n }\n\n array(length: number): void {\n this.scope?.owner?.budget.allocateArrayLength(length);\n this.allocate(1);\n }\n\n enterGroup(): void {\n const next = this.depth + 1;\n if (next > REGEX_COMPILE_LIMITS.depth) {\n throw new SandboxError({\n budget: \"dataDepth\",\n current: next,\n limit: REGEX_COMPILE_LIMITS.depth\n });\n }\n this.depth = next;\n }\n\n leaveGroup(): void {\n this.depth -= 1;\n }\n\n preflight(source: string, flags: string): void {\n this.checkLength(source.length);\n this.checkLength(flags.length, true);\n let escaped = false;\n let characterClass = false;\n let nesting = 0;\n for (let position = 0; position < source.length; position += 1) {\n this.work(1);\n const character = source[position];\n if (escaped) {\n escaped = false;\n } else if (character === \"\\\\\") {\n escaped = true;\n } else if (character === \"[\" && !characterClass) {\n characterClass = true;\n } else if (character === \"]\" && characterClass) {\n characterClass = false;\n } else if (!characterClass && character === \"(\") {\n nesting += 1;\n this.enterGroup();\n } else if (!characterClass && character === \")\" && nesting > 0) {\n nesting -= 1;\n this.leaveGroup();\n }\n }\n this.depth = 0;\n this.work(flags.length);\n }\n\n retain(pattern: RegexPattern, valueUnits = 0): void {\n const units = 10 + pattern.source.length + measureNode(pattern.body);\n if (this.ticket !== undefined) {\n this.ticket.owner.budget.resizeCompileTicket(this.ticket, units + valueUnits);\n }\n compiledData.set(pattern, { units, ticket: this.ticket });\n this.retained = true;\n }\n\n retainScratch(): void {\n this.retained = true;\n }\n\n close(): void {\n if (this.retained || this.ticket === undefined) return;\n this.ticket.owner.budget.discardCompileTicket(this.ticket);\n this.scope?.tickets.delete(this.ticket);\n }\n}\n\nexport function regexCompiledData(pattern: RegexPattern): {\n units: number;\n ticket?: CompileTicket;\n} {\n return (\n compiledData.get(pattern) ?? { units: 10 + pattern.source.length + measureNode(pattern.body) }\n );\n}\n\nfunction measureNode(node: RegexNode): number {\n switch (node.type) {\n case \"empty\":\n case \"dot\":\n return 2;\n case \"literal\":\n return 3 + node.value.length;\n case \"anchor\":\n case \"wordBoundary\":\n return 3;\n case \"characterClass\": {\n let usage = 5 + node.items.length;\n for (const item of node.items) {\n usage +=\n item.type === \"character\"\n ? 3 + item.value.length\n : item.type === \"range\"\n ? 4 + item.from.length + item.to.length\n : 4;\n }\n return usage;\n }\n case \"sequence\":\n case \"alternation\": {\n const children = node.type === \"sequence\" ? node.elements : node.alternatives;\n let usage = 4 + children.length;\n for (const child of children) usage += measureNode(child);\n return usage;\n }\n case \"group\":\n return 5 + measureNode(node.body);\n case \"quantifier\":\n return (Object.hasOwn(node, \"max\") ? 6 : 5) + measureNode(node.body);\n }\n}\n", "import { RegexCompileGuard, type CompileScope } from \"../interp/regex/compile-guard.js\";\n\nexport type Position = {\n line: number;\n column: number;\n offset: number;\n};\n\nexport type TokenType =\n | \"identifier\"\n | \"keyword\"\n | \"numeric\"\n | \"regex\"\n | \"string\"\n | \"template\"\n | \"punctuator\"\n | \"eof\";\n\nexport type Token = {\n type: TokenType;\n value: string;\n start: Position;\n end: Position;\n};\n\nexport type Comment = {\n type: \"block\" | \"line\";\n value: string;\n start: Position;\n end: Position;\n};\n\nexport type TokenizeOptions = {\n allowRegexLiterals?: boolean;\n comments?: Comment[];\n compilation?: CompileScope;\n};\n\nconst KEYWORDS = new Set([\n \"const\",\n \"let\",\n \"if\",\n \"else\",\n \"for\",\n \"do\",\n \"while\",\n \"return\",\n \"break\",\n \"continue\",\n \"try\",\n \"catch\",\n \"finally\",\n \"throw\",\n \"function\",\n \"async\",\n \"await\",\n \"yield\",\n \"import\",\n \"as\",\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"typeof\",\n \"void\",\n \"delete\",\n \"this\",\n \"instanceof\",\n \"in\",\n \"of\"\n]);\n\nconst EXPRESSION_ENDING_KEYWORDS = new Set([\"true\", \"false\", \"null\", \"undefined\"]);\nconst CONTROL_FLOW_PAREN_KEYWORDS = new Set([\"if\", \"while\", \"for\", \"catch\"]);\nconst MAX_UNICODE_CODE_POINT = 0x10ffff;\nconst IDENTIFIER_START_PATTERN = /^\\p{ID_Start}$/u;\nconst IDENTIFIER_PART_PATTERN = /^\\p{ID_Continue}$/u;\n\nconst PUNCTUATORS = [\n \">>>=\",\n \"&&=\",\n \"||=\",\n \"??=\",\n \"===\",\n \"!==\",\n \">>>\",\n \"<<=\",\n \">>=\",\n \"**=\",\n \"?.\",\n \"...\",\n \"??\",\n \"&&\",\n \"||\",\n \"==\",\n \"!=\",\n \"<=\",\n \">=\",\n \"=>\",\n \"++\",\n \"--\",\n \"<<\",\n \">>\",\n \"**\",\n \"+=\",\n \"-=\",\n \"*=\",\n \"/=\",\n \"%=\",\n \"&=\",\n \"|=\",\n \"^=\",\n \"??\",\n \"{\",\n \"}\",\n \"(\",\n \")\",\n \"[\",\n \"]\",\n \".\",\n \";\",\n \",\",\n \":\",\n \"?\",\n \"~\",\n \"+\",\n \"-\",\n \"*\",\n \"/\",\n \"%\",\n \"&\",\n \"|\",\n \"^\",\n \"!\",\n \"<\",\n \">\",\n \"=\"\n];\n\nexport function tokenize(source: string, options: TokenizeOptions = {}): Token[] {\n const lexer = new Lexer(source, options);\n return lexer.tokenize();\n}\n\nexport function collectComments(source: string): Comment[] {\n const comments: Comment[] = [];\n tokenize(source, { allowRegexLiterals: true, comments });\n return comments;\n}\n\ntype GroupingContext = {\n value: \"(\" | \"[\" | \"{\";\n isControlCondition?: boolean;\n};\n\nclass Lexer {\n private index = 0;\n private line = 1;\n private column = 1;\n private readonly tokens: Token[] = [];\n private readonly groupingStack: GroupingContext[] = [];\n private lastClosedControlParenthesis = false;\n\n constructor(\n private readonly source: string,\n private readonly options: TokenizeOptions\n ) {}\n\n tokenize(): Token[] {\n while (!this.isAtEnd()) {\n this.skipTrivia();\n\n if (this.isAtEnd()) {\n break;\n }\n\n const start = this.position();\n const char = this.currentChar();\n const codePointChar = this.currentCodePointChar();\n\n if (this.isHtmlStyleCommentDelimiter()) {\n this.syntaxError(\"HTML-style comments are not supported in Agent Script\", start);\n }\n\n if (char === \"*\" && this.peekChar(1) === \"/\") {\n this.syntaxError(\"Unexpected block comment terminator\", start);\n }\n\n if (isIdentifierStart(codePointChar) || this.startsUnicodeEscape()) {\n this.readIdentifierOrKeyword(start);\n continue;\n }\n\n if (char === \"'\" || char === '\"') {\n this.readString(start, char);\n continue;\n }\n\n if (char === \"`\") {\n this.readTemplate(start);\n continue;\n }\n\n if (isDecimalDigit(char) || (char === \".\" && isDecimalDigit(this.peekChar(1)))) {\n this.readNumber(start);\n continue;\n }\n\n this.readSlashOrPunctuator(start);\n }\n\n const end = this.position();\n this.tokens.push({\n type: \"eof\",\n value: \"\",\n start: end,\n end\n });\n return this.tokens;\n }\n\n private skipTrivia(): void {\n while (!this.isAtEnd()) {\n const char = this.currentChar();\n\n if (this.isHashbangCommentStart()) {\n this.skipLineComment();\n continue;\n }\n\n if (isWhitespace(char) || isLineBreak(char)) {\n this.advance();\n continue;\n }\n\n if (char === \"/\" && this.peekChar(1) === \"/\") {\n const start = this.position();\n this.advance();\n this.advance();\n const valueStart = this.index;\n while (!this.isAtEnd() && !isLineBreak(this.currentChar())) {\n this.advance();\n }\n this.recordComment(\"line\", start, valueStart);\n continue;\n }\n\n if (char === \"/\" && this.peekChar(1) === \"*\") {\n this.skipBlockComment();\n continue;\n }\n\n break;\n }\n }\n\n private readIdentifierOrKeyword(start: Position): void {\n let value = \"\";\n let isStart = true;\n\n while (!this.isAtEnd()) {\n if (this.startsUnicodeEscape()) {\n const escapeStart = this.position();\n const escaped = this.readUnicodeEscape();\n const isValidIdentifierCharacter = isStart\n ? isIdentifierStart(escaped)\n : isIdentifierPart(escaped);\n\n if (!isValidIdentifierCharacter) {\n this.syntaxError(\"Invalid identifier escape\", escapeStart);\n }\n\n value += escaped;\n isStart = false;\n continue;\n }\n\n const char = this.currentCodePointChar();\n const isValidIdentifierCharacter = isStart ? isIdentifierStart(char) : isIdentifierPart(char);\n\n if (!isValidIdentifierCharacter) {\n break;\n }\n\n this.advanceBy(char.length);\n value += char;\n isStart = false;\n }\n\n this.pushToken(KEYWORDS.has(value) ? \"keyword\" : \"identifier\", start, value);\n }\n\n private readString(start: Position, quote: string): void {\n this.advance();\n\n while (!this.isAtEnd()) {\n const char = this.currentChar();\n if (char === quote) {\n this.advance();\n this.pushToken(\"string\", start, this.source.slice(start.offset, this.index));\n return;\n }\n\n if (char === \"\\\\\") {\n this.readEscapedLiteralCharacter();\n continue;\n }\n\n if (isLineBreak(char)) {\n this.syntaxError(\"Unterminated string literal\", start);\n }\n\n this.advance();\n }\n\n this.syntaxError(\"Unterminated string literal\", start);\n }\n\n private readTemplate(start: Position): void {\n this.advance();\n\n while (!this.isAtEnd()) {\n const char = this.currentChar();\n\n if (char === \"`\") {\n this.advance();\n this.pushToken(\"template\", start, this.source.slice(start.offset, this.index));\n return;\n }\n\n if (char === \"\\\\\") {\n this.skipEscapedTemplateCharacter();\n continue;\n }\n\n if (char === \"$\" && this.peekChar(1) === \"{\") {\n const expressionStart = this.position();\n this.advance();\n this.advance();\n this.skipTemplateExpression(expressionStart);\n continue;\n }\n\n this.advance();\n }\n\n this.syntaxError(\"Unterminated template literal\", start);\n }\n\n private skipTemplateExpression(start: Position): void {\n let depth = 1;\n const tokens: Array<Pick<Token, \"type\" | \"value\">> = [];\n const groupingStack: GroupingContext[] = [];\n let lastClosedControlParenthesis = false;\n\n while (!this.isAtEnd() && depth > 0) {\n const char = this.currentChar();\n\n if (this.isHtmlStyleCommentDelimiter()) {\n this.syntaxError(\"HTML-style comments are not supported in Agent Script\", this.position());\n }\n\n if (char === \"'\" || char === '\"') {\n this.skipQuotedString(char);\n tokens.push({ type: \"string\", value: char });\n lastClosedControlParenthesis = false;\n continue;\n }\n\n if (char === \"`\") {\n this.skipNestedTemplate();\n tokens.push({ type: \"template\", value: \"`\" });\n lastClosedControlParenthesis = false;\n continue;\n }\n\n if (char === \"/\" && this.peekChar(1) === \"/\") {\n this.skipLineComment();\n continue;\n }\n\n if (char === \"/\" && this.peekChar(1) === \"*\") {\n this.skipBlockComment();\n continue;\n }\n\n if (char === \"*\" && this.peekChar(1) === \"/\") {\n this.syntaxError(\"Unexpected block comment terminator\", this.position());\n }\n\n if (isIdentifierStart(this.currentCodePointChar()) || this.startsUnicodeEscape()) {\n let value = \"\";\n let isStart = true;\n\n while (!this.isAtEnd()) {\n if (this.startsUnicodeEscape()) {\n const escapeStart = this.position();\n const escaped = this.readUnicodeEscape();\n const isValidIdentifierCharacter = isStart\n ? isIdentifierStart(escaped)\n : isIdentifierPart(escaped);\n\n if (!isValidIdentifierCharacter) {\n this.syntaxError(\"Invalid identifier escape\", escapeStart);\n }\n\n value += escaped;\n isStart = false;\n continue;\n }\n\n const identifierChar = this.currentCodePointChar();\n const isValidIdentifierCharacter = isStart\n ? isIdentifierStart(identifierChar)\n : isIdentifierPart(identifierChar);\n\n if (!isValidIdentifierCharacter) {\n break;\n }\n\n this.advanceBy(identifierChar.length);\n value += identifierChar;\n isStart = false;\n }\n\n tokens.push({ type: KEYWORDS.has(value) ? \"keyword\" : \"identifier\", value });\n lastClosedControlParenthesis = false;\n continue;\n }\n\n if (isDecimalDigit(char) || (char === \".\" && isDecimalDigit(this.peekChar(1)))) {\n const start = this.position();\n const value = this.scanNumber(start);\n tokens.push({ type: \"numeric\", value });\n lastClosedControlParenthesis = false;\n continue;\n }\n\n if (char === \"{\") {\n depth += 1;\n this.advance();\n groupingStack.push({ value: \"{\" });\n tokens.push({ type: \"punctuator\", value: \"{\" });\n lastClosedControlParenthesis = false;\n continue;\n }\n\n if (char === \"}\") {\n depth -= 1;\n this.advance();\n\n if (depth === 0) {\n return;\n }\n\n popGroupingContext(groupingStack, \"{\");\n tokens.push({ type: \"punctuator\", value: \"}\" });\n lastClosedControlParenthesis = false;\n continue;\n }\n\n if (\n char === \"/\" &&\n this.peekChar(1) !== \"=\" &&\n shouldRejectRegexLiteral(tokens[tokens.length - 1], lastClosedControlParenthesis)\n ) {\n if (!this.options.allowRegexLiterals) {\n this.syntaxError(\"Regular expression literals are not supported\", this.position());\n }\n\n const start = this.position();\n const value = this.scanRegexLiteral(start);\n tokens.push({ type: \"regex\", value });\n lastClosedControlParenthesis = false;\n continue;\n }\n\n const punctuator = matchPunctuator(this.source, this.index);\n if (punctuator !== undefined) {\n const previousToken = tokens[tokens.length - 1];\n this.advanceBy(punctuator.length);\n tokens.push({ type: \"punctuator\", value: punctuator });\n lastClosedControlParenthesis = updateGroupingState(\n groupingStack,\n previousToken,\n punctuator\n );\n continue;\n }\n\n this.advance();\n }\n\n if (depth !== 0) {\n this.syntaxError(\"Unterminated template expression\", start);\n }\n }\n\n private skipQuotedString(quote: string): void {\n const start = this.position();\n this.advance();\n\n while (!this.isAtEnd()) {\n const char = this.currentChar();\n if (char === quote) {\n this.advance();\n return;\n }\n if (char === \"\\\\\") {\n this.readEscapedLiteralCharacter();\n continue;\n }\n if (isLineBreak(char)) {\n this.syntaxError(\"Unterminated string literal\", start);\n }\n this.advance();\n }\n\n this.syntaxError(\"Unterminated string literal\", start);\n }\n\n private skipNestedTemplate(): void {\n const start = this.position();\n this.advance();\n\n while (!this.isAtEnd()) {\n const char = this.currentChar();\n if (char === \"`\") {\n this.advance();\n return;\n }\n if (char === \"\\\\\") {\n this.skipEscapedTemplateCharacter();\n continue;\n }\n if (char === \"$\" && this.peekChar(1) === \"{\") {\n const expressionStart = this.position();\n this.advance();\n this.advance();\n this.skipTemplateExpression(expressionStart);\n continue;\n }\n this.advance();\n }\n\n this.syntaxError(\"Unterminated template literal\", start);\n }\n\n private skipLineComment(): void {\n const start = this.position();\n this.advance();\n this.advance();\n const valueStart = this.index;\n while (!this.isAtEnd() && !isLineBreak(this.currentChar())) {\n this.advance();\n }\n this.recordComment(\"line\", start, valueStart);\n }\n\n private skipBlockComment(): void {\n const start = this.position();\n this.advance();\n this.advance();\n const valueStart = this.index;\n\n while (!this.isAtEnd()) {\n if (this.currentChar() === \"*\" && this.peekChar(1) === \"/\") {\n const valueEnd = this.index;\n this.advance();\n this.advance();\n this.recordComment(\"block\", start, valueStart, valueEnd);\n return;\n }\n this.advance();\n }\n\n this.syntaxError(\"Unterminated block comment\", start);\n }\n\n private recordComment(\n type: Comment[\"type\"],\n start: Position,\n valueStart: number,\n valueEnd = this.index\n ): void {\n this.options.comments?.push({\n type,\n value: this.source.slice(valueStart, valueEnd),\n start,\n end: this.position()\n });\n }\n\n private readNumber(start: Position): void {\n const value = this.scanNumber(start);\n this.pushToken(\"numeric\", start, value);\n }\n\n private scanNumber(start: Position): string {\n if (this.currentChar() === \".\") {\n this.advance();\n this.consumeDecimalDigits();\n this.consumeExponent();\n this.rejectBigIntSuffix();\n this.rejectInvalidNumericLiteralContinuation();\n return this.source.slice(start.offset, this.index);\n }\n\n if (this.currentChar() === \"0\") {\n const prefix = this.peekChar(1);\n if (prefix === \"x\" || prefix === \"X\") {\n this.advance();\n this.advance();\n this.consumeDigitsForBase(isHexDigit, \"hexadecimal\");\n this.rejectBigIntSuffix();\n this.rejectInvalidNumericLiteralContinuation();\n return this.source.slice(start.offset, this.index);\n }\n if (prefix === \"b\" || prefix === \"B\") {\n this.advance();\n this.advance();\n this.consumeDigitsForBase(isBinaryDigit, \"binary\");\n this.rejectBigIntSuffix();\n this.rejectInvalidNumericLiteralContinuation();\n return this.source.slice(start.offset, this.index);\n }\n if (prefix === \"o\" || prefix === \"O\") {\n this.advance();\n this.advance();\n this.consumeDigitsForBase(isOctalDigit, \"octal\");\n this.rejectBigIntSuffix();\n this.rejectInvalidNumericLiteralContinuation();\n return this.source.slice(start.offset, this.index);\n }\n\n if (isDecimalDigit(prefix)) {\n // Agent Script uses strict-mode JavaScript numeric grammar, so legacy octal\n // and non-octal leading-zero decimal literals are not accepted.\n this.advance();\n this.syntaxError(\"Legacy octal numeric literals are not supported in strict mode\", start);\n }\n\n if (prefix === \"_\") {\n this.advance();\n this.syntaxError(\"Invalid decimal numeric literal\", this.position());\n }\n }\n\n this.consumeDecimalDigits();\n\n if (this.currentChar() === \".\" && (this.peekChar(1) !== \".\" || this.peekChar(2) !== \".\")) {\n this.advance();\n this.consumeOptionalDecimalDigits();\n }\n\n this.consumeExponent();\n this.rejectBigIntSuffix();\n this.rejectInvalidNumericLiteralContinuation();\n return this.source.slice(start.offset, this.index);\n }\n\n private consumeDecimalDigits(): void {\n this.consumeDigitsForBase(isDecimalDigit, \"decimal\");\n }\n\n private consumeOptionalDecimalDigits(): void {\n let consumedDigit = false;\n let lastWasSeparator = false;\n\n while (!this.isAtEnd()) {\n const char = this.currentChar();\n if (isDecimalDigit(char)) {\n consumedDigit = true;\n lastWasSeparator = false;\n this.advance();\n continue;\n }\n\n if (char === \"_\") {\n if (!consumedDigit || lastWasSeparator || !isDecimalDigit(this.peekChar(1))) {\n this.syntaxError(\"Invalid decimal numeric literal\", this.position());\n }\n lastWasSeparator = true;\n this.advance();\n continue;\n }\n\n break;\n }\n\n if (lastWasSeparator) {\n this.syntaxError(\"Invalid decimal numeric literal\", this.position());\n }\n }\n\n private consumeDigitsForBase(isValidDigit: (char: string) => boolean, label: string): void {\n let consumedDigit = false;\n let lastWasSeparator = false;\n\n while (!this.isAtEnd()) {\n const char = this.currentChar();\n if (isValidDigit(char)) {\n consumedDigit = true;\n lastWasSeparator = false;\n this.advance();\n continue;\n }\n\n if (char === \"_\") {\n if (!consumedDigit || lastWasSeparator || !isValidDigit(this.peekChar(1))) {\n this.syntaxError(`Invalid ${label} numeric literal`, this.position());\n }\n lastWasSeparator = true;\n this.advance();\n continue;\n }\n\n break;\n }\n\n if (!consumedDigit || lastWasSeparator) {\n this.syntaxError(`Invalid ${label} numeric literal`, this.position());\n }\n }\n\n private consumeExponent(): void {\n const char = this.currentChar();\n if (char !== \"e\" && char !== \"E\") {\n return;\n }\n\n const exponentStart = this.position();\n this.advance();\n\n if (this.currentChar() === \"+\" || this.currentChar() === \"-\") {\n this.advance();\n }\n\n let consumedDigit = false;\n let lastWasSeparator = false;\n\n while (!this.isAtEnd()) {\n const next = this.currentChar();\n if (isDecimalDigit(next)) {\n consumedDigit = true;\n lastWasSeparator = false;\n this.advance();\n continue;\n }\n\n if (next === \"_\") {\n if (!consumedDigit || lastWasSeparator || !isDecimalDigit(this.peekChar(1))) {\n this.syntaxError(\"Invalid decimal numeric literal\", this.position());\n }\n lastWasSeparator = true;\n this.advance();\n continue;\n }\n\n break;\n }\n\n if (!consumedDigit || lastWasSeparator) {\n this.syntaxError(\"Invalid decimal numeric literal\", exponentStart);\n }\n }\n\n private rejectBigIntSuffix(): void {\n if (this.currentChar() === \"n\") {\n this.syntaxError(\"BigInt not supported\", this.position());\n }\n }\n\n private rejectInvalidNumericLiteralContinuation(): void {\n const char = this.currentChar();\n if (\n char === \"_\" ||\n isIdentifierStart(this.currentCodePointChar()) ||\n isDecimalDigit(char) ||\n this.startsUnicodeEscape()\n ) {\n this.syntaxError(\"Invalid number\", this.position());\n }\n }\n\n private readSlashOrPunctuator(start: Position): void {\n if (\n this.currentChar() === \"/\" &&\n this.peekChar(1) !== \"=\" &&\n shouldRejectRegexLiteral(this.lastSignificantToken(), this.lastClosedControlParenthesis)\n ) {\n if (!this.options.allowRegexLiterals) {\n this.syntaxError(\"Regular expression literals are not supported\", start);\n }\n\n this.pushToken(\"regex\", start, this.scanRegexLiteral(start));\n return;\n }\n\n const punctuator = matchPunctuator(this.source, this.index);\n if (punctuator !== undefined) {\n this.advanceBy(punctuator.length);\n this.pushToken(\"punctuator\", start, punctuator);\n return;\n }\n\n this.syntaxError(`Unexpected character '${this.currentChar()}'`, start);\n }\n\n private lastSignificantToken(): Token | undefined {\n for (let index = this.tokens.length - 1; index >= 0; index -= 1) {\n const token = this.tokens[index];\n if (token.type !== \"eof\") {\n return token;\n }\n }\n return undefined;\n }\n\n private scanRegexLiteral(start: Position): string {\n const guard = new RegexCompileGuard(this.options.compilation);\n try {\n guard.work(1);\n this.advance();\n const patternStart = this.index;\n let inCharacterClass = false;\n const advancePattern = () => {\n const width = this.currentChar() === \"\\r\" && this.peekChar(1) === \"\\n\" ? 2 : 1;\n guard.checkLength(this.index - patternStart + width);\n guard.work(width);\n this.advance();\n };\n while (!this.isAtEnd()) {\n const char = this.currentChar();\n if (char === \"\\\\\") {\n advancePattern();\n if (!this.isAtEnd()) advancePattern();\n continue;\n }\n if (char === \"[\" && !inCharacterClass) {\n inCharacterClass = true;\n advancePattern();\n continue;\n }\n if (char === \"]\" && inCharacterClass) {\n inCharacterClass = false;\n advancePattern();\n continue;\n }\n if (char === \"/\" && !inCharacterClass) {\n guard.work(1);\n this.advance();\n const flagsStart = this.index;\n while (!this.isAtEnd() && isAsciiLetter(this.currentChar())) {\n guard.checkLength(this.index - flagsStart + 1, true);\n guard.work(1);\n this.advance();\n }\n break;\n }\n advancePattern();\n }\n guard.allocate(this.index - start.offset);\n guard.work(this.index - start.offset);\n const raw = this.source.slice(start.offset, this.index);\n guard.retainScratch();\n return raw;\n } finally {\n guard.close();\n }\n }\n\n private pushToken(type: TokenType, start: Position, value: string): void {\n const previousToken = this.lastSignificantToken();\n const token = {\n type,\n value,\n start,\n end: this.position()\n };\n\n this.tokens.push(token);\n\n if (type === \"punctuator\") {\n this.lastClosedControlParenthesis = updateGroupingState(\n this.groupingStack,\n previousToken,\n value\n );\n return;\n }\n\n this.lastClosedControlParenthesis = false;\n }\n\n private currentChar(): string {\n return this.source[this.index] ?? \"\";\n }\n\n private peekChar(distance: number): string {\n return this.source[this.index + distance] ?? \"\";\n }\n\n private currentCodePointChar(): string {\n const codePoint = this.source.codePointAt(this.index);\n return codePoint === undefined ? \"\" : String.fromCodePoint(codePoint);\n }\n\n private startsUnicodeEscape(): boolean {\n return this.currentChar() === \"\\\\\" && this.peekChar(1) === \"u\";\n }\n\n private isHtmlStyleCommentDelimiter(): boolean {\n return this.source.startsWith(\"<!--\", this.index) || this.source.startsWith(\"-->\", this.index);\n }\n\n private isHashbangCommentStart(): boolean {\n return (\n this.source.startsWith(\"#!\", this.index) &&\n (this.index === 0 || (this.index === 1 && this.source[0] === \"\\uFEFF\"))\n );\n }\n\n private readUnicodeEscape(): string {\n const escapeStart = this.position();\n this.advance();\n return this.readUnicodeEscapeAfterBackslash(escapeStart);\n }\n\n private readUnicodeEscapeAfterBackslash(escapeStart: Position): string {\n this.advance();\n\n if (this.currentChar() === \"{\") {\n return this.readExtendedUnicodeEscape(escapeStart);\n }\n\n let value = \"\";\n for (let index = 0; index < 4; index += 1) {\n const char = this.currentChar();\n if (!isHexDigit(char)) {\n this.syntaxError(\"Invalid unicode escape\", escapeStart);\n }\n value += char;\n this.advance();\n }\n\n return String.fromCharCode(Number.parseInt(value, 16));\n }\n\n private readEscapedLiteralCharacter(): void {\n const escapeStart = this.position();\n this.advance();\n\n if (this.isAtEnd()) {\n return;\n }\n\n const escaped = this.currentChar();\n if (escaped === \"u\") {\n this.readUnicodeEscapeAfterBackslash(escapeStart);\n return;\n }\n\n if (escaped === \"x\") {\n this.advance();\n for (let index = 0; index < 2; index += 1) {\n if (!isHexDigit(this.currentChar())) {\n this.syntaxError(\"Invalid hex escape\", escapeStart);\n }\n this.advance();\n }\n return;\n }\n\n if (escaped === \"0\") {\n this.advance();\n if (isDecimalDigit(this.currentChar())) {\n this.syntaxError(\"Legacy octal escape sequences are not supported\", escapeStart);\n }\n return;\n }\n\n if (isOctalDigit(escaped)) {\n this.syntaxError(\"Legacy octal escape sequences are not supported\", escapeStart);\n }\n\n this.advance();\n }\n\n private skipEscapedTemplateCharacter(): void {\n this.advance();\n\n if (this.isAtEnd()) {\n return;\n }\n\n const escaped = this.currentChar();\n if (escaped === \"\\r\") {\n this.advance();\n if (this.currentChar() === \"\\n\") {\n this.advance();\n }\n return;\n }\n\n this.advance();\n }\n\n private readExtendedUnicodeEscape(escapeStart: Position): string {\n this.advance();\n const codePointStart = this.position();\n let value = \"\";\n\n while (!this.isAtEnd() && this.currentChar() !== \"}\") {\n const char = this.currentChar();\n if (!isHexDigit(char)) {\n this.syntaxError(\"Invalid unicode escape\", this.position());\n }\n\n value += char;\n this.advance();\n }\n\n if (value.length === 0) {\n this.syntaxError(\"Invalid unicode escape\", escapeStart);\n }\n\n if (this.isAtEnd()) {\n this.syntaxError(\"Invalid unicode escape\", escapeStart);\n }\n\n const codePoint = Number.parseInt(value, 16);\n if (codePoint > MAX_UNICODE_CODE_POINT) {\n this.syntaxError(\"Invalid unicode escape\", codePointStart);\n }\n\n this.advance();\n return String.fromCodePoint(codePoint);\n }\n\n private isAtEnd(): boolean {\n return this.index >= this.source.length;\n }\n\n private position(): Position {\n return {\n line: this.line,\n column: this.column,\n offset: this.index\n };\n }\n\n private advance(): void {\n if (this.isAtEnd()) {\n return;\n }\n\n const char = this.currentChar();\n if (char === \"\\r\") {\n this.index += 1;\n if (this.currentChar() === \"\\n\") {\n this.index += 1;\n }\n this.line += 1;\n this.column = 1;\n return;\n }\n\n this.index += 1;\n if (char === \"\\n\") {\n this.line += 1;\n this.column = 1;\n return;\n }\n\n this.column += 1;\n }\n\n private advanceBy(length: number): void {\n for (let index = 0; index < length; index += 1) {\n this.advance();\n }\n }\n\n private syntaxError(message: string, position: Position): never {\n throw new Error(`${message} at line ${position.line}, column ${position.column}.`);\n }\n}\n\nfunction isIdentifierStart(char: string): boolean {\n return char === \"_\" || char === \"$\" || IDENTIFIER_START_PATTERN.test(char);\n}\n\nfunction isIdentifierPart(char: string): boolean {\n return (\n isIdentifierStart(char) ||\n isDecimalDigit(char) ||\n char === \"\\u200c\" ||\n char === \"\\u200d\" ||\n IDENTIFIER_PART_PATTERN.test(char)\n );\n}\n\nfunction isAsciiLetter(char: string): boolean {\n return (char >= \"a\" && char <= \"z\") || (char >= \"A\" && char <= \"Z\");\n}\n\nfunction isDecimalDigit(char: string): boolean {\n return char >= \"0\" && char <= \"9\";\n}\n\nfunction isHexDigit(char: string): boolean {\n return isDecimalDigit(char) || (char >= \"a\" && char <= \"f\") || (char >= \"A\" && char <= \"F\");\n}\n\nfunction isBinaryDigit(char: string): boolean {\n return char === \"0\" || char === \"1\";\n}\n\nfunction isOctalDigit(char: string): boolean {\n return char >= \"0\" && char <= \"7\";\n}\n\nfunction isWhitespace(char: string): boolean {\n return char === \" \" || char === \"\\t\" || char === \"\\v\" || char === \"\\f\" || char === \"\\uFEFF\";\n}\n\nfunction isLineBreak(char: string): boolean {\n return char === \"\\n\" || char === \"\\r\";\n}\n\nfunction isExpressionEndingPunctuator(value: string): boolean {\n return value === \")\" || value === \"]\" || value === \"}\" || value === \"++\" || value === \"--\";\n}\n\nfunction matchPunctuator(source: string, index: number): string | undefined {\n return PUNCTUATORS.find(\n (punctuator) =>\n source.startsWith(punctuator, index) &&\n (punctuator !== \"?.\" || !isDecimalDigit(source[index + 2] ?? \"\"))\n );\n}\n\nfunction shouldRejectRegexLiteral(\n previousToken: Pick<Token, \"type\" | \"value\"> | undefined,\n lastClosedControlParenthesis: boolean\n): boolean {\n if (previousToken === undefined) {\n return true;\n }\n\n if (\n previousToken.type === \"identifier\" ||\n previousToken.type === \"numeric\" ||\n previousToken.type === \"string\" ||\n previousToken.type === \"template\"\n ) {\n return false;\n }\n\n if (previousToken.type === \"keyword\") {\n return !EXPRESSION_ENDING_KEYWORDS.has(previousToken.value);\n }\n\n if (previousToken.value === \")\") {\n return lastClosedControlParenthesis;\n }\n\n return !isExpressionEndingPunctuator(previousToken.value);\n}\n\nfunction updateGroupingState(\n groupingStack: GroupingContext[],\n previousToken: Pick<Token, \"type\" | \"value\"> | undefined,\n punctuator: string\n): boolean {\n if (punctuator === \"(\") {\n groupingStack.push({\n value: \"(\",\n isControlCondition:\n previousToken?.type === \"keyword\" && CONTROL_FLOW_PAREN_KEYWORDS.has(previousToken.value)\n });\n return false;\n }\n\n if (punctuator === \"[\") {\n groupingStack.push({ value: \"[\" });\n return false;\n }\n\n if (punctuator === \"{\") {\n groupingStack.push({ value: \"{\" });\n return false;\n }\n\n if (punctuator === \")\") {\n return popGroupingContext(groupingStack, \"(\")?.isControlCondition === true;\n }\n\n if (punctuator === \"]\") {\n popGroupingContext(groupingStack, \"[\");\n return false;\n }\n\n if (punctuator === \"}\") {\n popGroupingContext(groupingStack, \"{\");\n return false;\n }\n\n return false;\n}\n\nfunction popGroupingContext(\n groupingStack: GroupingContext[],\n expected: GroupingContext[\"value\"]\n): GroupingContext | undefined {\n const top = groupingStack[groupingStack.length - 1];\n if (top?.value !== expected) {\n return undefined;\n }\n\n return groupingStack.pop();\n}\n", "import type { Module, ParseResult, SourceSpan } from \"./parser.js\";\n\ntype AstNode = {\n nodeId?: number;\n span: SourceSpan;\n type: string;\n [key: string]: unknown;\n};\n\nexport function assignIds<T extends Module | ParseResult>(root: T): T {\n const visited = new Set<AstNode>();\n const children: AstNode[] = [];\n let nextId = 0;\n const stack: AstNode[] = [root];\n\n while (stack.length > 0) {\n const node = stack.pop()!;\n if (visited.has(node)) {\n continue;\n }\n\n visited.add(node);\n Object.defineProperty(node, \"nodeId\", {\n value: nextId,\n writable: true,\n configurable: true,\n enumerable: false\n });\n nextId += 1;\n\n if (node.type === \"UnaryExpression\") {\n const argument = (node as { argument?: unknown }).argument;\n if (isAstNode(argument)) {\n stack.push(argument);\n }\n continue;\n }\n\n if (node.type === \"ExpressionStatement\") {\n const expression = (node as { expression?: unknown }).expression;\n if (isAstNode(expression)) {\n stack.push(expression);\n }\n continue;\n }\n\n if (node.type === \"Module\") {\n const body = (node as { body?: unknown }).body;\n if (Array.isArray(body)) {\n for (let index = body.length - 1; index >= 0; index -= 1) {\n const statement = body[index];\n if (isAstNode(statement)) {\n stack.push(statement);\n }\n }\n }\n continue;\n }\n\n collectChildren(node, children);\n for (let index = children.length - 1; index >= 0; index -= 1) {\n stack.push(children[index]!);\n }\n children.length = 0;\n }\n\n return root;\n}\n\nfunction collectChildren(node: AstNode, children: AstNode[]): void {\n for (const key in node) {\n if (key === \"nodeId\" || key === \"span\" || key === \"type\") {\n continue;\n }\n\n collectChild(node[key], children);\n }\n\n if (children.length <= 1) {\n return;\n }\n\n children.sort(compareBySourceOrder);\n const seen = new Set<AstNode>();\n let writeIndex = 0;\n for (const child of children) {\n if (seen.has(child)) {\n continue;\n }\n\n seen.add(child);\n children[writeIndex] = child;\n writeIndex += 1;\n }\n children.length = writeIndex;\n}\n\nfunction collectChild(value: unknown, discovered: AstNode[]): void {\n if (isAstNode(value)) {\n discovered.push(value);\n return;\n }\n\n if (!Array.isArray(value)) {\n return;\n }\n\n for (const entry of value) {\n if (isAstNode(entry)) {\n discovered.push(entry);\n }\n }\n}\n\nfunction compareBySourceOrder(left: AstNode, right: AstNode): number {\n const startOffset = left.span.start.offset - right.span.start.offset;\n if (startOffset !== 0) {\n return startOffset;\n }\n\n return left.span.end.offset - right.span.end.offset;\n}\n\nfunction isAstNode(value: unknown): value is AstNode {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"type\" in value &&\n typeof (value as { type?: unknown }).type === \"string\" &&\n \"span\" in value &&\n typeof (value as { span?: SourceSpan }).span?.start.offset === \"number\" &&\n typeof (value as { span?: SourceSpan }).span?.end.offset === \"number\"\n );\n}\n", "import { createSourceSpan, replaceErrorStack, type ErrorSourceSpan } from \"../error/shape.js\";\n\nexport type ParseDiagnostic = {\n kind: \"ParseError\";\n filename: string;\n line: number;\n column: number;\n excerpt: string;\n caret: string;\n message: string;\n};\n\nexport class ParseError extends Error implements ParseDiagnostic {\n readonly kind = \"ParseError\";\n readonly line: number;\n readonly column: number;\n readonly excerpt: string;\n readonly caret: string;\n readonly span: ErrorSourceSpan;\n\n constructor(\n readonly filename: string,\n message: string,\n line: number,\n column: number,\n excerpt: string,\n caret: string,\n span: ErrorSourceSpan\n ) {\n super(message);\n this.name = \"ParseError\";\n this.line = line;\n this.column = column;\n this.excerpt = excerpt;\n this.caret = caret;\n this.span = span;\n replaceErrorStack(this);\n }\n}\n\nconst MAX_EXCERPT_CONTENT_LENGTH = 120;\nconst ELLIPSIS = \"...\";\n\ntype ParseErrorLocation = {\n line: number;\n column: number;\n endLine: number;\n endColumn: number;\n};\n\ntype RenderedLine = {\n number: number;\n content: string;\n sourceColumnStart: number;\n};\n\nexport function formatParseError(source: string, filename: string, error: Error): ParseError {\n const location = parseErrorLocation(error.message);\n if (location === undefined) {\n throw error;\n }\n\n const lines = splitLines(source);\n const startLine = Math.max(1, location.line - 2);\n const lastSpannedLine = Math.max(location.line, location.endLine);\n const sourceEndLine = Math.max(lines.length, 1);\n const endLine = Math.min(sourceEndLine, Math.max(lastSpannedLine, location.line) + 1);\n const lineNumberWidth = String(endLine).length;\n const excerpt: RenderedLine[] = [];\n\n for (let line = startLine; line <= endLine; line += 1) {\n excerpt.push(\n renderLine(\n line,\n lines[line - 1] ?? \"\",\n getHighlightStartColumn(location, line),\n getHighlightEndColumn(location, line)\n )\n );\n }\n\n const caret = excerpt\n .filter((line) => line.number >= location.line && line.number <= location.endLine)\n .map((line) => createCaret(line, lineNumberWidth, location))\n .join(\"\\n\");\n return new ParseError(\n filename,\n error.message,\n location.line,\n location.column,\n excerpt\n .map((line) => `${String(line.number).padStart(lineNumberWidth)} | ${line.content}`)\n .join(\"\\n\"),\n caret,\n createSourceSpan(source, location.line, location.column, location.endLine, location.endColumn)\n );\n}\n\nfunction parseErrorLocation(message: string): ParseErrorLocation | undefined {\n const linePrefix = \" at line \";\n const columnPrefix = \", column \";\n const lineIndex = message.lastIndexOf(linePrefix);\n if (lineIndex === -1) {\n return undefined;\n }\n\n const columnIndex = message.indexOf(columnPrefix, lineIndex + linePrefix.length);\n if (columnIndex === -1) {\n return undefined;\n }\n\n const line = Number(message.slice(lineIndex + linePrefix.length, columnIndex));\n const columnStart = columnIndex + columnPrefix.length;\n const columnEnd = findNumberEnd(message, columnStart);\n const column = Number(message.slice(columnStart, columnEnd));\n if (!Number.isInteger(line) || !Number.isInteger(column)) {\n return undefined;\n }\n\n const endLocation = parseEndLocation(message, columnEnd);\n return {\n line,\n column,\n endLine: endLocation?.line ?? line,\n endColumn: endLocation?.column ?? column\n };\n}\n\nfunction splitLines(source: string): string[] {\n return source.split(/\\r\\n|\\n|\\r/);\n}\n\nfunction renderLine(\n lineNumber: number,\n line: string,\n startColumn: number,\n endColumn: number\n): RenderedLine {\n const characters = Array.from(line);\n if (characters.length <= MAX_EXCERPT_CONTENT_LENGTH) {\n return {\n number: lineNumber,\n content: line,\n sourceColumnStart: 1\n };\n }\n\n const visibleLength = MAX_EXCERPT_CONTENT_LENGTH - ELLIPSIS.length * 2;\n const highlightStartIndex = Math.max(startColumn - 1, 0);\n const highlightEndIndex =\n endColumn === Number.MAX_SAFE_INTEGER\n ? highlightStartIndex\n : Math.max(endColumn - 1, highlightStartIndex);\n const highlightCenter = Math.floor((highlightStartIndex + highlightEndIndex) / 2);\n let sourceStartIndex = Math.max(0, highlightCenter - Math.floor(visibleLength / 2));\n sourceStartIndex = Math.min(sourceStartIndex, Math.max(characters.length - visibleLength, 0));\n\n const sourceEndIndex = Math.min(sourceStartIndex + visibleLength, characters.length);\n const prefix = sourceStartIndex > 0 ? ELLIPSIS : \"\";\n const suffix = sourceEndIndex < characters.length ? ELLIPSIS : \"\";\n\n return {\n number: lineNumber,\n content: `${prefix}${characters.slice(sourceStartIndex, sourceEndIndex).join(\"\")}${suffix}`,\n sourceColumnStart: sourceStartIndex + 1 - prefix.length\n };\n}\n\nfunction createCaret(\n line: RenderedLine,\n lineNumberWidth: number,\n location: ParseErrorLocation\n): string {\n const contentColumns = Array.from(line.content).length;\n const isSpan = location.line !== location.endLine || location.column !== location.endColumn;\n const startColumn = getHighlightStartColumn(location, line.number);\n const endColumn = isSpan ? getHighlightEndColumn(location, line.number) : startColumn + 1;\n const renderedStartColumn = Math.max(startColumn - line.sourceColumnStart + 1, 1);\n const renderedEndColumn = Math.min(\n Math.max(endColumn - line.sourceColumnStart + 1, renderedStartColumn + 1),\n contentColumns + 1\n );\n const caretPadding = createCaretPadding(line.content, renderedStartColumn);\n const caretLength = Math.max(renderedEndColumn - renderedStartColumn, 1);\n return `${\" \".repeat(lineNumberWidth)} | ${caretPadding}${\"^\".repeat(caretLength)}`;\n}\n\nfunction createCaretPadding(line: string, column: number): string {\n let padding = \"\";\n const characters = Array.from(line);\n const maxColumn = Math.max(column - 1, 0);\n\n // Parser columns are character indexes. Terminals may render full-width glyphs wider.\n for (const character of characters.slice(0, maxColumn)) {\n padding += character === \"\\t\" ? \"\\t\" : \" \";\n }\n\n if (maxColumn > characters.length) {\n padding += \" \".repeat(maxColumn - characters.length);\n }\n\n return padding;\n}\n\nfunction getHighlightStartColumn(location: ParseErrorLocation, line: number): number {\n if (line === location.line) {\n return location.column;\n }\n\n return 1;\n}\n\nfunction getHighlightEndColumn(location: ParseErrorLocation, line: number): number {\n if (line === location.endLine) {\n return location.endColumn;\n }\n\n return Number.MAX_SAFE_INTEGER;\n}\n\nfunction parseEndLocation(\n message: string,\n startIndex: number\n): { line: number; column: number } | undefined {\n const linePrefix = \" to line \";\n const columnPrefix = \", column \";\n const lineIndex = message.indexOf(linePrefix, startIndex);\n if (lineIndex === -1) {\n return undefined;\n }\n\n const columnIndex = message.indexOf(columnPrefix, lineIndex + linePrefix.length);\n if (columnIndex === -1) {\n return undefined;\n }\n\n const line = Number(message.slice(lineIndex + linePrefix.length, columnIndex));\n const columnStart = columnIndex + columnPrefix.length;\n const columnEnd = findNumberEnd(message, columnStart);\n const column = Number(message.slice(columnStart, columnEnd));\n if (!Number.isInteger(line) || !Number.isInteger(column)) {\n return undefined;\n }\n\n return { line, column };\n}\n\nfunction findNumberEnd(value: string, startIndex: number): number {\n let index = startIndex;\n while (index < value.length) {\n const code = value.charCodeAt(index);\n if (code < 48 || code > 57) {\n break;\n }\n index += 1;\n }\n\n return index;\n}\n", "import type { Token } from \"./tokenizer.js\";\nimport type {\n Expression,\n Module,\n SourceSpan,\n VariableDeclaration,\n VariableDeclarator\n} from \"./parser.js\";\n\nexport type ExportNamedDeclaration = {\n nodeId?: number;\n type: \"ExportNamedDeclaration\";\n declaration: VariableDeclaration;\n span: SourceSpan;\n};\n\nexport type ExportDefaultDeclaration = {\n nodeId?: number;\n type: \"ExportDefaultDeclaration\";\n declaration: Expression;\n span: SourceSpan;\n};\n\nexport type ExtractedNamedExport = {\n type: \"named\";\n name: string;\n declaration: VariableDeclarator;\n statement: ExportNamedDeclaration;\n span: SourceSpan;\n};\n\nexport type ExtractedDefaultExport = {\n type: \"default\";\n name: \"default\";\n declaration: Expression;\n statement: ExportDefaultDeclaration;\n span: SourceSpan;\n};\n\nexport type ExtractedTopLevelExport = ExtractedDefaultExport | ExtractedNamedExport;\n\nexport class ExportExtractionError extends Error {\n readonly span?: SourceSpan;\n\n constructor(message: string, span?: SourceSpan) {\n super(\n span === undefined\n ? message\n : `${message} At line ${span.start.line}, column ${span.start.column}.`\n );\n this.name = \"ExportExtractionError\";\n this.span = span;\n }\n}\n\nexport function extractTopLevelExports(module: Module): ExtractedTopLevelExport[] {\n const exports: ExtractedTopLevelExport[] = [];\n let defaultExport: ExportDefaultDeclaration | undefined;\n\n for (const statement of module.body) {\n if (statement.type === \"ExportDefaultDeclaration\") {\n if (defaultExport !== undefined) {\n throw new ExportExtractionError(\n \"Module contains more than one export default declaration.\",\n statement.span\n );\n }\n\n defaultExport = statement;\n exports.push({\n type: \"default\",\n name: \"default\",\n declaration: statement.declaration,\n statement,\n span: statement.span\n });\n continue;\n }\n\n if (statement.type !== \"ExportNamedDeclaration\") {\n continue;\n }\n\n for (const declaration of statement.declaration.declarations) {\n if (declaration.id.type !== \"Identifier\") {\n throw new ExportExtractionError(\n \"Exported const declarations must bind identifiers.\",\n declaration.id.span\n );\n }\n\n exports.push({\n type: \"named\",\n name: declaration.id.name,\n declaration,\n statement,\n span: declaration.span\n });\n }\n }\n\n return exports;\n}\n\nexport function createExportNamedDeclaration(\n exportToken: Token,\n declaration: VariableDeclaration\n): ExportNamedDeclaration {\n return {\n type: \"ExportNamedDeclaration\",\n declaration,\n span: createSpan(exportToken.start, declaration.span.end)\n };\n}\n\nexport function createExportDefaultDeclaration(\n exportToken: Token,\n declaration: Expression\n): ExportDefaultDeclaration {\n return {\n type: \"ExportDefaultDeclaration\",\n declaration,\n span: createSpan(exportToken.start, declaration.span.end)\n };\n}\n\nfunction createSpan(start: SourceSpan[\"start\"], end: SourceSpan[\"end\"]): SourceSpan {\n return {\n start: { ...start },\n end: { ...end }\n };\n}\n", "import type { Token } from \"./tokenizer.js\";\nimport type { Identifier, MetaProperty } from \"./parser.js\";\n\nexport function isImportMetaTokenSequence(\n importToken: Token,\n dotToken: Token,\n metaToken: Token\n): boolean {\n return (\n importToken.type === \"keyword\" &&\n importToken.value === \"import\" &&\n dotToken.type === \"punctuator\" &&\n dotToken.value === \".\" &&\n metaToken.type === \"identifier\" &&\n metaToken.value === \"meta\" &&\n importToken.end.offset === dotToken.start.offset &&\n dotToken.end.offset === metaToken.start.offset\n );\n}\n\nexport function createImportMeta(importToken: Token, metaToken: Token): MetaProperty {\n return {\n type: \"MetaProperty\",\n meta: createIdentifier(importToken, \"import\"),\n property: createIdentifier(metaToken, \"meta\"),\n span: {\n start: importToken.start,\n end: metaToken.end\n }\n };\n}\n\nfunction createIdentifier<TName extends string>(\n token: Token,\n name: TName\n): Identifier & { name: TName } {\n return {\n type: \"Identifier\",\n name,\n span: {\n start: token.start,\n end: token.end\n }\n };\n}\n", "import { RegexCompileGuard, type CompileScope } from \"./compile-guard.js\";\n\nexport type RegexFlags = {\n global: boolean;\n ignoreCase: boolean;\n multiline: boolean;\n dotAll: boolean;\n};\n\nexport type CharacterKind = \"digit\" | \"word\" | \"space\";\n\nexport type CharacterClassItem =\n | { type: \"character\"; value: string }\n | { type: \"range\"; from: string; to: string }\n | { type: \"kind\"; kind: CharacterKind; negated: boolean };\n\nexport type RegexNode =\n | { type: \"empty\" }\n | { type: \"literal\"; value: string }\n | { type: \"dot\" }\n | { type: \"anchor\"; kind: \"start\" | \"end\" }\n | { type: \"wordBoundary\"; negated: boolean }\n | { type: \"characterClass\"; negated: boolean; items: CharacterClassItem[] }\n | { type: \"sequence\"; elements: RegexNode[] }\n | { type: \"alternation\"; alternatives: RegexNode[] }\n | { type: \"group\"; capturing: boolean; index?: number; body: RegexNode }\n | { type: \"quantifier\"; body: RegexNode; min: number; max?: number; greedy: boolean };\n\nexport type RegexPattern = {\n source: string;\n flags: RegexFlags;\n captureCount: number;\n body: RegexNode;\n};\n\nexport function parseRegex(\n source: string,\n flags = \"\",\n compilation?: CompileScope,\n valueUnits = 0\n): RegexPattern {\n const guard = new RegexCompileGuard(compilation);\n try {\n guard.checkLength(source.length);\n guard.checkLength(flags.length, true);\n guard.allocate(5 + valueUnits);\n const parsedFlags = parseFlags(flags, guard);\n const parser = new RegexParser(source, guard);\n const body = parser.parse();\n guard.allocate(5 + source.length);\n const pattern = { source, flags: parsedFlags, captureCount: parser.captureCount, body };\n guard.retain(pattern, valueUnits);\n return pattern;\n } finally {\n guard.close();\n }\n}\n\nclass RegexParser {\n captureCount = 0;\n private cursor = 0;\n\n constructor(\n private readonly source: string,\n private readonly guard: RegexCompileGuard\n ) {}\n\n private get position(): number {\n return this.cursor;\n }\n\n private set position(next: number) {\n this.guard.work(Math.max(0, next - this.cursor));\n this.cursor = next;\n }\n\n parse(): RegexNode {\n const body = this.parseAlternation();\n if (!this.atEnd()) {\n if (this.peek() === \")\") {\n this.fail(\"Unmatched closing parenthesis\");\n }\n this.fail(`Unexpected character '${this.peek()}'`);\n }\n return body;\n }\n\n private parseAlternation(): RegexNode {\n this.guard.allocate(1);\n this.guard.array(1);\n const alternatives = [this.parseSequence()];\n while (this.peek() === \"|\") {\n this.position += 1;\n this.guard.array(alternatives.length + 1);\n alternatives.push(this.parseSequence());\n }\n\n if (alternatives.length === 1) return alternatives[0];\n this.guard.allocate(3);\n return { type: \"alternation\", alternatives };\n }\n\n private parseSequence(): RegexNode {\n this.guard.allocate(1);\n const elements: RegexNode[] = [];\n while (!this.atEnd() && this.peek() !== \")\" && this.peek() !== \"|\") {\n this.guard.array(elements.length + 1);\n elements.push(this.parseQuantifiedAtom());\n }\n\n if (elements.length === 0) {\n this.guard.allocate(2);\n return { type: \"empty\" };\n }\n if (elements.length === 1) return elements[0];\n this.guard.allocate(3);\n return { type: \"sequence\", elements };\n }\n\n private parseQuantifiedAtom(): RegexNode {\n const quantifierStart = this.position;\n const current = this.peek();\n if (current === \"*\" || current === \"+\" || current === \"?\" || current === \"{\") {\n this.fail(\"Nothing to repeat\", quantifierStart);\n }\n\n const body = this.parseAtom();\n const quantifier = this.parseQuantifier();\n if (quantifier === undefined) {\n return body;\n }\n\n if (body.type === \"anchor\" || body.type === \"wordBoundary\") {\n this.fail(\"Invalid quantifier target\", quantifierStart);\n }\n\n const greedy = this.peek() !== \"?\";\n if (!greedy) {\n this.position += 1;\n }\n\n this.guard.allocate(Object.hasOwn(quantifier, \"max\") ? 6 : 5);\n return { type: \"quantifier\", body, ...quantifier, greedy };\n }\n\n private parseAtom(): RegexNode {\n const character = this.take();\n switch (character) {\n case \".\":\n this.guard.allocate(2);\n return { type: \"dot\" };\n case \"^\":\n this.guard.allocate(3);\n return { type: \"anchor\", kind: \"start\" };\n case \"$\":\n this.guard.allocate(3);\n return { type: \"anchor\", kind: \"end\" };\n case \"(\":\n return this.parseGroup(this.position - 1);\n case \"[\":\n return this.parseCharacterClass(this.position - 1);\n case \"\\\\\":\n return this.parseEscape(false, this.position - 1);\n default:\n this.guard.allocate(3 + character.length);\n return { type: \"literal\", value: character };\n }\n }\n\n private parseGroup(start: number): RegexNode {\n let capturing = true;\n if (this.peek() === \"?\") {\n this.guard.allocate(Math.min(3, this.source.length - this.position));\n this.guard.work(Math.min(3, this.source.length - this.position));\n const extension = this.source.slice(this.position, this.position + 3);\n if (extension.startsWith(\"?:\")) {\n capturing = false;\n this.position += 2;\n } else if (extension.startsWith(\"?=\") || extension.startsWith(\"?!\")) {\n this.fail(\"Lookahead is not supported\", start);\n } else if (extension.startsWith(\"?<=\") || extension.startsWith(\"?<!\")) {\n this.fail(\"Lookbehind is not supported\", start);\n } else if (extension.startsWith(\"?<\")) {\n this.fail(\"Named groups are not supported\", start);\n } else {\n this.fail(\"Unsupported group construct\", start);\n }\n }\n\n if (capturing) this.guard.allocate(1);\n const index = capturing ? ++this.captureCount : undefined;\n this.guard.enterGroup();\n let body: RegexNode;\n try {\n body = this.parseAlternation();\n } finally {\n this.guard.leaveGroup();\n }\n if (this.peek() !== \")\") {\n this.fail(\"Unterminated group\", start);\n }\n this.position += 1;\n\n this.guard.allocate(5);\n return { type: \"group\", capturing, index, body };\n }\n\n private parseCharacterClass(start: number): RegexNode {\n const negated = this.peek() === \"^\";\n if (negated) {\n this.position += 1;\n }\n\n this.guard.allocate(1);\n const items: CharacterClassItem[] = [];\n while (!this.atEnd()) {\n if (this.peek() === \"]\") {\n this.position += 1;\n this.guard.allocate(4);\n return { type: \"characterClass\", negated, items };\n }\n\n this.guard.array(items.length + 1);\n const left = this.parseClassItem(start);\n if (this.peek() === \"-\" && this.source[this.position + 1] !== \"]\") {\n const rangePosition = this.position;\n this.position += 1;\n const right = this.parseClassItem(start);\n if (left.type !== \"character\" || right.type !== \"character\") {\n this.fail(\"Character class ranges require literal endpoints\", rangePosition);\n }\n if (left.value.charCodeAt(0) > right.value.charCodeAt(0)) {\n this.fail(\"Character class range is out of order\", rangePosition);\n }\n this.guard.allocate(4 + left.value.length + right.value.length);\n items.push({ type: \"range\", from: left.value, to: right.value });\n } else {\n items.push(left);\n }\n }\n\n this.fail(\"Unterminated character class\", start);\n }\n\n private parseClassItem(classStart: number): CharacterClassItem {\n if (this.atEnd()) {\n this.fail(\"Unterminated character class\", classStart);\n }\n if (this.peek() === \"\\\\\") {\n const escapeStart = this.position;\n this.position += 1;\n const escaped = this.parseEscape(true, escapeStart);\n if (escaped.type === \"literal\") {\n this.guard.allocate(3 + escaped.value.length);\n return { type: \"character\", value: escaped.value };\n }\n if (escaped.type === \"characterClass\" && escaped.items.length === 1) {\n return escaped.items[0];\n }\n this.fail(\"Unsupported character class escape\", escapeStart);\n }\n\n this.guard.allocate(4);\n return { type: \"character\", value: this.take() };\n }\n\n private parseEscape(inCharacterClass: boolean, start: number): RegexNode {\n if (this.atEnd()) {\n this.fail(\"Trailing escape\", start);\n }\n\n const escaped = this.take();\n if (escaped >= \"1\" && escaped <= \"9\") {\n this.fail(\"Backreferences are not supported\", start);\n }\n if (escaped === \"p\" || escaped === \"P\") {\n this.fail(\"Unicode property escapes are not supported\", start);\n }\n if (escaped === \"x\") {\n this.guard.allocate(4);\n return { type: \"literal\", value: this.parseHexEscape(2, \"hexadecimal\", start) };\n }\n if (escaped === \"u\") {\n this.guard.allocate(4);\n return { type: \"literal\", value: this.parseHexEscape(4, \"Unicode\", start) };\n }\n\n this.guard.allocate(25);\n const kinds: Partial<Record<string, { kind: CharacterKind; negated: boolean }>> = {\n d: { kind: \"digit\", negated: false },\n D: { kind: \"digit\", negated: true },\n w: { kind: \"word\", negated: false },\n W: { kind: \"word\", negated: true },\n s: { kind: \"space\", negated: false },\n S: { kind: \"space\", negated: true }\n };\n const kind = kinds[escaped];\n if (kind !== undefined) {\n this.guard.allocate(9);\n this.guard.array(1);\n return { type: \"characterClass\", negated: false, items: [{ type: \"kind\", ...kind }] };\n }\n if (!inCharacterClass && (escaped === \"b\" || escaped === \"B\")) {\n this.guard.allocate(3);\n return { type: \"wordBoundary\", negated: escaped === \"B\" };\n }\n\n this.guard.allocate(8);\n const controls: Partial<Record<string, string>> = {\n b: \"\\b\",\n f: \"\\f\",\n n: \"\\n\",\n r: \"\\r\",\n t: \"\\t\",\n v: \"\\v\",\n \"0\": \"\\0\"\n };\n this.guard.allocate(4);\n return { type: \"literal\", value: controls[escaped] ?? escaped };\n }\n\n private parseHexEscape(length: number, name: string, start: number): string {\n const end = this.position + length;\n this.guard.allocate(Math.min(length, this.source.length - this.position));\n this.guard.work(Math.min(length, this.source.length - this.position));\n const digits = this.source.slice(this.position, end);\n if (digits.length !== length || !allHexDigits(digits)) {\n this.fail(`Invalid ${name} escape`, start);\n }\n this.position = end;\n return String.fromCharCode(Number.parseInt(digits, 16));\n }\n\n private parseQuantifier(): { min: number; max?: number } | undefined {\n const character = this.peek();\n if (character === \"*\") {\n this.position += 1;\n this.guard.allocate(2);\n return { min: 0 };\n }\n if (character === \"+\") {\n this.position += 1;\n this.guard.allocate(2);\n return { min: 1 };\n }\n if (character === \"?\") {\n this.position += 1;\n this.guard.allocate(3);\n return { min: 0, max: 1 };\n }\n if (character !== \"{\") {\n return undefined;\n }\n\n const start = this.position;\n this.position += 1;\n const min = this.parseDecimal();\n if (min === undefined) {\n this.position = start;\n return undefined;\n }\n\n if (this.peek() === \"}\") {\n this.position += 1;\n this.guard.allocate(3);\n return { min, max: min };\n }\n if (this.peek() !== \",\") {\n this.fail(\"Invalid quantifier\", start);\n }\n this.position += 1;\n const max = this.parseDecimal();\n if (this.peek() !== \"}\") {\n this.fail(\"Unterminated quantifier\", start);\n }\n this.position += 1;\n if (max !== undefined && min > max) {\n this.fail(\"Quantifier range is out of order\", start);\n }\n this.guard.allocate(3);\n return { min, max };\n }\n\n private parseDecimal(): number | undefined {\n const start = this.position;\n while (isDecimalDigit(this.peek())) {\n this.position += 1;\n }\n if (start === this.position) {\n return undefined;\n }\n\n this.guard.allocate(this.position - start);\n this.guard.work(this.position - start);\n const value = Number(this.source.slice(start, this.position));\n if (!Number.isSafeInteger(value)) {\n this.fail(\"Quantifier is too large\", start);\n }\n return value;\n }\n\n private peek(): string {\n return this.source[this.position] ?? \"\";\n }\n\n private take(): string {\n const character = this.peek();\n this.position += 1;\n return character;\n }\n\n private atEnd(): boolean {\n return this.position >= this.source.length;\n }\n\n private fail(message: string, position = this.position): never {\n throw new SyntaxError(`${message} at position ${position}`);\n }\n}\n\nfunction parseFlags(flags: string, guard: RegexCompileGuard): RegexFlags {\n guard.allocate(10);\n const parsed: RegexFlags = {\n global: false,\n ignoreCase: false,\n multiline: false,\n dotAll: false\n };\n const names: Record<string, keyof RegexFlags> = {\n g: \"global\",\n i: \"ignoreCase\",\n m: \"multiline\",\n s: \"dotAll\"\n };\n\n for (let position = 0; position < flags.length; position += 1) {\n guard.work(1);\n const flag = flags[position];\n const name = names[flag];\n if (name === undefined) {\n throw new SyntaxError(`Unsupported regex flag '${flag}' at position ${position}`);\n }\n if (parsed[name]) {\n throw new SyntaxError(`Duplicate regex flag '${flag}' at position ${position}`);\n }\n parsed[name] = true;\n }\n\n return parsed;\n}\n\nfunction isDecimalDigit(character: string): boolean {\n return character >= \"0\" && character <= \"9\";\n}\n\nfunction allHexDigits(value: string): boolean {\n for (const character of value) {\n if (\n !isDecimalDigit(character) &&\n !(character >= \"A\" && character <= \"F\") &&\n !(character >= \"a\" && character <= \"f\")\n ) {\n return false;\n }\n }\n return true;\n}\n", "import { boundIdentifiers } from \"./bindings.js\";\nimport { tokenize, type Position, type Token } from \"./tokenizer.js\";\nimport { assignIds } from \"./assign-ids.js\";\nimport { formatParseError } from \"./format-error.js\";\nimport {\n createExportDefaultDeclaration,\n createExportNamedDeclaration,\n type ExportDefaultDeclaration,\n type ExportNamedDeclaration\n} from \"./parse-export.js\";\nimport { createImportMeta, isImportMetaTokenSequence } from \"./parse-import-meta.js\";\nimport { parseRegex } from \"../interp/regex/parse.js\";\nimport { CompileScope, RegexCompileGuard } from \"../interp/regex/compile-guard.js\";\nimport { SandboxError, type CompileOwner } from \"../interp/budget.js\";\n\nexport type { ExportDefaultDeclaration, ExportNamedDeclaration } from \"./parse-export.js\";\n\nconst MAX_CONDITIONAL_EXPRESSION_DEPTH = 256;\nconst MAX_IF_STATEMENT_DEPTH = 2_048;\n\nexport type SourceSpan = {\n start: Position;\n end: Position;\n};\n\nexport class DisallowedSyntaxError extends Error {\n constructor(syntax: string, position: Position) {\n super(`Disallowed syntax '${syntax}' at line ${position.line}, column ${position.column}.`);\n this.name = \"DisallowedSyntaxError\";\n }\n}\n\ntype BaseNode = {\n nodeId?: number;\n type: string;\n span: SourceSpan;\n};\n\nexport type Identifier = BaseNode & {\n type: \"Identifier\";\n name: string;\n};\n\nexport type ThisExpression = BaseNode & {\n type: \"ThisExpression\";\n};\n\nexport type NumericLiteral = BaseNode & {\n type: \"NumericLiteral\";\n raw: string;\n value: number;\n};\n\nexport type StringLiteral = BaseNode & {\n type: \"StringLiteral\";\n raw: string;\n value: string;\n};\n\nexport type RegexLiteral = BaseNode & {\n type: \"RegexLiteral\";\n raw: string;\n};\n\nexport type BooleanLiteral = BaseNode & {\n type: \"BooleanLiteral\";\n raw: \"true\" | \"false\";\n value: boolean;\n};\n\nexport type NullLiteral = BaseNode & {\n type: \"NullLiteral\";\n raw: \"null\";\n value: null;\n};\n\nexport type UndefinedLiteral = BaseNode & {\n type: \"UndefinedLiteral\";\n raw: \"undefined\";\n value: undefined;\n elision?: true;\n};\n\nexport type TemplateElement = BaseNode & {\n type: \"TemplateElement\";\n tail: boolean;\n value: {\n raw: string;\n cooked: string | undefined;\n };\n};\n\nexport type TemplateLiteral = BaseNode & {\n type: \"TemplateLiteral\";\n expressions: Expression[];\n quasis: TemplateElement[];\n};\n\nexport type TaggedTemplateExpression = BaseNode & {\n type: \"TaggedTemplateExpression\";\n tag: Expression;\n quasi: TemplateLiteral;\n};\n\nexport type SpreadElement = BaseNode & {\n type: \"SpreadElement\";\n argument: Expression;\n};\n\nexport type Property = BaseNode & {\n type: \"Property\";\n computed: boolean;\n shorthand: boolean;\n key: Expression;\n value: Expression;\n};\n\nexport type PatternTarget = ArrayPattern | Identifier | MemberExpression | ObjectPattern;\nexport type AssignmentTarget = MetaProperty | PatternTarget;\nexport type UpdateTarget = Identifier | MemberExpression;\n\nexport type AssignmentPattern = BaseNode & {\n type: \"AssignmentPattern\";\n left: PatternTarget;\n right: Expression;\n};\n\nexport type RestElement = BaseNode & {\n type: \"RestElement\";\n argument: PatternTarget;\n};\n\nexport type AssignmentProperty = BaseNode & {\n type: \"AssignmentProperty\";\n computed: boolean;\n shorthand: boolean;\n key: Expression;\n value: AssignmentPattern | ArrayPattern | Identifier | MemberExpression | ObjectPattern;\n};\n\nexport type ArrayPattern = BaseNode & {\n type: \"ArrayPattern\";\n elements: Array<\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n | null\n >;\n};\n\nexport type ObjectPattern = BaseNode & {\n type: \"ObjectPattern\";\n properties: Array<AssignmentProperty | RestElement>;\n};\n\nexport type ArrayExpression = BaseNode & {\n type: \"ArrayExpression\";\n elements: Array<Expression | SpreadElement>;\n};\n\nexport type ObjectExpression = BaseNode & {\n type: \"ObjectExpression\";\n properties: Array<Property | SpreadElement>;\n};\n\nexport type UnaryOperator = \"!\" | \"+\" | \"-\" | \"~\" | \"delete\" | \"typeof\" | \"void\";\n\nexport type UnaryExpression = BaseNode & {\n type: \"UnaryExpression\";\n operator: UnaryOperator;\n prefix: true;\n argument: Expression;\n};\n\nexport type UpdateOperator = \"++\" | \"--\";\n\nexport type UpdateExpression = BaseNode & {\n type: \"UpdateExpression\";\n operator: UpdateOperator;\n prefix: boolean;\n argument: UpdateTarget;\n};\n\nexport type AwaitExpression = BaseNode & {\n type: \"AwaitExpression\";\n argument: Expression;\n};\n\nexport type YieldExpression = BaseNode & {\n type: \"YieldExpression\";\n argument?: Expression;\n delegate: boolean;\n};\n\nexport type BinaryOperator =\n | \"!=\"\n | \"!==\"\n | \"%\"\n | \"&\"\n | \"*\"\n | \"**\"\n | \"+\"\n | \"-\"\n | \"/\"\n | \"<\"\n | \"<<\"\n | \"<=\"\n | \"==\"\n | \"===\"\n | \">\"\n | \">=\"\n | \">>\"\n | \">>>\"\n | \"instanceof\"\n | \"in\"\n | \"^\"\n | \"|\";\n\nexport type BinaryExpression = BaseNode & {\n type: \"BinaryExpression\";\n operator: BinaryOperator;\n left: Expression;\n right: Expression;\n};\n\nexport type LogicalOperator = \"&&\" | \"??\" | \"||\";\n\nexport type LogicalExpression = BaseNode & {\n type: \"LogicalExpression\";\n operator: LogicalOperator;\n left: Expression;\n right: Expression;\n};\n\nexport type ConditionalExpression = BaseNode & {\n type: \"ConditionalExpression\";\n test: Expression;\n consequent: Expression;\n alternate: Expression;\n};\n\nexport type SequenceExpression = BaseNode & {\n type: \"SequenceExpression\";\n expressions: Expression[];\n};\n\nexport type MemberExpression = BaseNode & {\n type: \"MemberExpression\";\n computed: boolean;\n object: Expression;\n optional: boolean;\n property: Expression;\n};\n\nexport type MetaProperty = BaseNode & {\n type: \"MetaProperty\";\n meta: Identifier & { name: \"import\" };\n property: Identifier & { name: \"meta\" };\n};\n\nexport type AssignmentOperator =\n | \"=\"\n | \"+=\"\n | \"-=\"\n | \"*=\"\n | \"/=\"\n | \"%=\"\n | \"**=\"\n | \"&=\"\n | \"|=\"\n | \"^=\"\n | \"<<=\"\n | \">>=\"\n | \">>>=\"\n | \"&&=\"\n | \"||=\"\n | \"??=\";\n\nexport type AssignmentExpression = BaseNode & {\n type: \"AssignmentExpression\";\n operator: AssignmentOperator;\n left: AssignmentTarget;\n right: Expression;\n};\n\nexport type CallExpression = BaseNode & {\n type: \"CallExpression\";\n arguments: Array<Expression | SpreadElement>;\n callee: Expression;\n optional: boolean;\n};\n\nexport type NewExpression = BaseNode & {\n type: \"NewExpression\";\n arguments: Array<Expression | SpreadElement>;\n callee: Expression;\n};\n\nexport type VariableDeclarator = BaseNode & {\n type: \"VariableDeclarator\";\n id: ArrayPattern | Identifier | ObjectPattern;\n init?: Expression;\n};\n\nexport type VariableDeclarationKind = \"const\" | \"let\" | \"var\";\n\nexport type VariableDeclaration = BaseNode & {\n type: \"VariableDeclaration\";\n declarations: VariableDeclarator[];\n kind: VariableDeclarationKind;\n};\n\nexport type ReturnStatement = BaseNode & {\n type: \"ReturnStatement\";\n argument?: Expression;\n};\n\nexport type BreakStatement = BaseNode & {\n type: \"BreakStatement\";\n label?: string;\n};\n\nexport type ContinueStatement = BaseNode & {\n type: \"ContinueStatement\";\n label?: string;\n};\n\nexport type ExpressionStatement = BaseNode & {\n type: \"ExpressionStatement\";\n expression: Expression;\n};\n\nexport type EmptyStatement = BaseNode & {\n type: \"EmptyStatement\";\n};\n\nexport type BlockStatement = BaseNode & {\n type: \"BlockStatement\";\n body: Statement[];\n};\n\nexport type FunctionDeclaration = BaseNode & {\n type: \"FunctionDeclaration\";\n async: boolean;\n body: BlockStatement;\n generator: boolean;\n id: Identifier;\n params: ArrowFunctionExpression[\"params\"];\n};\n\nexport type FunctionExpression = BaseNode & {\n type: \"FunctionExpression\";\n async: boolean;\n body: BlockStatement;\n generator: boolean;\n id?: Identifier;\n method?: true;\n params: ArrowFunctionExpression[\"params\"];\n};\n\nexport type IfStatement = BaseNode & {\n type: \"IfStatement\";\n test: Expression;\n consequent: Statement;\n alternate?: Statement;\n};\n\nexport type ForStatement = BaseNode & {\n type: \"ForStatement\";\n init?: Expression | VariableDeclaration;\n test?: Expression;\n update?: Expression;\n body: Statement;\n label?: string;\n labels?: string[];\n};\n\nexport type ForOfStatement = BaseNode & {\n type: \"ForOfStatement\";\n left: PatternTarget | VariableDeclaration;\n right: Expression;\n body: Statement;\n label?: string;\n labels?: string[];\n};\n\nexport type ForInStatement = BaseNode & {\n type: \"ForInStatement\";\n left: Identifier | VariableDeclaration;\n right: Expression;\n body: Statement;\n label?: string;\n labels?: string[];\n};\n\nexport type WhileStatement = BaseNode & {\n type: \"WhileStatement\";\n test: Expression;\n body: Statement;\n label?: string;\n labels?: string[];\n};\n\nexport type DoWhileStatement = BaseNode & {\n type: \"DoWhileStatement\";\n body: Statement;\n test: Expression;\n label?: string;\n labels?: string[];\n};\n\nexport type ThrowStatement = BaseNode & {\n type: \"ThrowStatement\";\n argument: Expression;\n};\n\nexport type CatchClause = BaseNode & {\n type: \"CatchClause\";\n param?: ArrayPattern | Identifier | ObjectPattern;\n body: BlockStatement;\n};\n\nexport type TryStatement = BaseNode & {\n type: \"TryStatement\";\n block: BlockStatement;\n handler?: CatchClause;\n finalizer?: BlockStatement;\n};\n\nexport type SwitchCase = BaseNode & {\n type: \"SwitchCase\";\n test?: Expression;\n consequent: Statement[];\n};\n\nexport type SwitchStatement = BaseNode & {\n type: \"SwitchStatement\";\n discriminant: Expression;\n cases: SwitchCase[];\n};\n\nexport type ImportSpecifier = BaseNode & {\n type: \"ImportSpecifier\";\n imported: Identifier;\n local: Identifier;\n};\n\nexport type ImportDefaultSpecifier = BaseNode & {\n type: \"ImportDefaultSpecifier\";\n local: Identifier;\n};\n\nexport type ImportNamespaceSpecifier = BaseNode & {\n type: \"ImportNamespaceSpecifier\";\n local: Identifier;\n};\n\nexport type ImportDeclaration = BaseNode & {\n type: \"ImportDeclaration\";\n specifiers: Array<ImportDefaultSpecifier | ImportNamespaceSpecifier | ImportSpecifier>;\n source: StringLiteral;\n};\n\nexport type Module = BaseNode & {\n type: \"Module\";\n body: Statement[];\n};\n\nexport type Statement =\n | BlockStatement\n | BreakStatement\n | DoWhileStatement\n | ExportDefaultDeclaration\n | ExportNamedDeclaration\n | ImportDeclaration\n | TryStatement\n | ContinueStatement\n | EmptyStatement\n | ExpressionStatement\n | FunctionDeclaration\n | ForInStatement\n | ForOfStatement\n | ForStatement\n | IfStatement\n | ReturnStatement\n | SwitchStatement\n | ThrowStatement\n | VariableDeclaration\n | WhileStatement;\n\nexport type ArrowFunctionExpression = BaseNode & {\n type: \"ArrowFunctionExpression\";\n async: boolean;\n body: BlockStatement | Expression;\n expression: boolean;\n params: Array<AssignmentPattern | ArrayPattern | Identifier | ObjectPattern | RestElement>;\n};\n\nexport type FunctionNode = ArrowFunctionExpression | FunctionDeclaration | FunctionExpression;\n\nexport type Expression =\n | ArrowFunctionExpression\n | AssignmentExpression\n | ArrayExpression\n | AwaitExpression\n | BinaryExpression\n | BooleanLiteral\n | CallExpression\n | ConditionalExpression\n | FunctionExpression\n | Identifier\n | LogicalExpression\n | MemberExpression\n | MetaProperty\n | NewExpression\n | NullLiteral\n | NumericLiteral\n | ObjectExpression\n | RegexLiteral\n | SequenceExpression\n | StringLiteral\n | TaggedTemplateExpression\n | TemplateLiteral\n | ThisExpression\n | UnaryExpression\n | UpdateExpression\n | UndefinedLiteral\n | YieldExpression;\n\nexport type ParseResult = Expression | Statement;\n\ntype ParsedExpression = {\n node: Expression;\n parenthesized: boolean;\n};\n\ntype ExpressionParseOptions = {\n allowSequence?: boolean;\n};\n\nconst EQUALITY_OPERATORS = new Set<BinaryOperator>([\"==\", \"!=\", \"===\", \"!==\"]);\nconst RELATIONAL_OPERATORS = new Set<BinaryOperator>([\"<\", \"<=\", \">\", \">=\", \"in\", \"instanceof\"]);\nconst SHIFT_OPERATORS = new Set<BinaryOperator>([\"<<\", \">>\", \">>>\"]);\nconst ADDITIVE_OPERATORS = new Set<BinaryOperator>([\"+\", \"-\"]);\nconst MULTIPLICATIVE_OPERATORS = new Set<BinaryOperator>([\"*\", \"/\", \"%\"]);\nconst BITWISE_OR_OPERATORS = new Set<BinaryOperator>([\"|\"]);\nconst BITWISE_XOR_OPERATORS = new Set<BinaryOperator>([\"^\"]);\nconst BITWISE_AND_OPERATORS = new Set<BinaryOperator>([\"&\"]);\nconst MAX_UNICODE_CODE_POINT = 0x10ffff;\nconst TOP_LEVEL_STATEMENT_KEYWORDS = new Set([\n \"break\",\n \"const\",\n \"continue\",\n \"do\",\n \"for\",\n \"function\",\n \"if\",\n \"import\",\n \"let\",\n \"return\",\n \"throw\",\n \"try\",\n \"while\"\n]);\n\nexport function parse(source: string, filename = \"<input>\", owner?: CompileOwner): ParseResult {\n const compilation = new CompileScope(owner);\n try {\n const result = assignIds(\n parseTokens(tokenize(source, { allowRegexLiterals: true, compilation }), compilation)\n );\n const regexLiteral = findRegexLiteral(result);\n if (regexLiteral !== undefined) {\n throw new Error(\n `Regular expression literals are not supported at line ${regexLiteral.span.start.line}, column ${regexLiteral.span.start.column}.`\n );\n }\n throwIfImportMetaAssignment(result);\n return result;\n } catch (error) {\n if (error instanceof DisallowedSyntaxError || error instanceof SandboxError) {\n throw error;\n }\n if (error instanceof Error) {\n throw formatParseError(source, filename, error);\n }\n throw error;\n } finally {\n compilation.dispose();\n }\n}\n\nexport function parseModule(source: string, filename = \"<input>\", owner?: CompileOwner): Module {\n const compilation = new CompileScope(owner);\n try {\n return assignIds(\n parseModuleTokens(tokenize(source, { allowRegexLiterals: true, compilation }), compilation)\n );\n } catch (error) {\n if (error instanceof DisallowedSyntaxError || error instanceof SandboxError) {\n throw error;\n }\n if (error instanceof Error) {\n throw formatParseError(source, filename, error);\n }\n throw error;\n } finally {\n compilation.dispose();\n }\n}\n\nexport function parseExecutableModule(\n source: string,\n filename = \"<input>\",\n owner?: CompileOwner\n): Module {\n const compilation = new CompileScope(owner);\n try {\n const result = assignIds(\n parseModuleTokens(tokenize(source, { allowRegexLiterals: true, compilation }), compilation)\n );\n throwIfImportMetaAssignment(result);\n return result;\n } catch (error) {\n if (error instanceof DisallowedSyntaxError || error instanceof SandboxError) {\n throw error;\n }\n if (error instanceof Error) {\n throw formatParseError(source, filename, error);\n }\n throw error;\n } finally {\n compilation.dispose();\n }\n}\n\nfunction parseTokens(tokens: Token[], compilation?: CompileScope): ParseResult {\n return new Parser(tokens, compilation).parseTopLevel();\n}\n\nfunction parseModuleTokens(tokens: Token[], compilation?: CompileScope): Module {\n return new Parser(tokens, compilation).parseModule();\n}\n\nfunction parseExpressionTokens(tokens: Token[], compilation?: CompileScope): Expression {\n return new Parser(tokens, compilation).parseExpressionOnly();\n}\n\ntype ParserBindingKind = \"lexical\" | \"function\" | \"parameter\" | \"catch\";\ntype ParserScope = Map<string, ParserBindingKind>;\n\nclass Parser {\n private index = 0;\n private breakableDepth = 0;\n private conditionalExpressionDepth = 0;\n private ifStatementDepth = 0;\n private loopDepth = 0;\n private generatorBody = false;\n private readonly scopes: ParserScope[] = [new Map()];\n private readonly functionScopes = new WeakSet<ParserScope>();\n private readonly varNames = new WeakMap<ParserScope, Set<string>>();\n\n constructor(\n private readonly tokens: Token[],\n private readonly compilation?: CompileScope\n ) {\n this.functionScopes.add(this.scopes[0]!);\n }\n\n parseTopLevel(): ParseResult {\n if (this.isExportToken(this.currentToken())) {\n throw new DisallowedSyntaxError(\"export\", this.currentToken().start);\n }\n\n const node = this.shouldParseTopLevelStatement()\n ? this.parseStatement()\n : this.parseExpression({ allowSequence: true }).node;\n while (this.consumePunctuator(\";\") !== undefined) {\n continue;\n }\n this.expectEof();\n return node;\n }\n\n parseModule(): Module {\n const body: Statement[] = [];\n\n while (this.currentToken().type !== \"eof\") {\n const statement = this.parseTopLevelItem();\n body.push(statement);\n while (statement.type !== \"EmptyStatement\" && this.consumePunctuator(\";\") !== undefined) {\n continue;\n }\n }\n\n const end = this.currentToken().end;\n return {\n type: \"Module\",\n body,\n span: createSpan(body[0]?.span.start ?? end, body[body.length - 1]?.span.end ?? end)\n };\n }\n\n parseExpressionOnly(): Expression {\n const expression = this.parseExpression({ allowSequence: true }).node;\n while (this.consumePunctuator(\";\") !== undefined) {\n continue;\n }\n this.expectEof();\n return expression;\n }\n\n private parseTopLevelItem(): Statement {\n const emptyStatement = this.parseEmptyStatement();\n if (emptyStatement !== undefined) {\n return emptyStatement;\n }\n\n if (this.isExportToken(this.currentToken())) {\n return this.parseExportDeclaration();\n }\n\n const token = this.currentToken();\n if (\n token.type === \"keyword\" &&\n token.value === \"return\" &&\n !this.hasReturnArgument(token, this.peekToken(1))\n ) {\n throw new Error(\n `Top-level return statements must return a value at line ${token.start.line}, column ${token.start.column}.`\n );\n }\n\n if (\n this.shouldParseTopLevelStatement() ||\n (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"{\")\n ) {\n return this.parseStatement();\n }\n\n const expression = this.parseExpression({ allowSequence: true }).node;\n return {\n type: \"ExpressionStatement\",\n expression,\n span: expression.span\n };\n }\n\n private parseExpression(options: ExpressionParseOptions = {}): ParsedExpression {\n const first = this.parseAssignmentExpression();\n if (options.allowSequence !== true || this.consumePunctuator(\",\") === undefined) {\n return first;\n }\n\n const expressions = [first.node];\n do {\n expressions.push(this.parseAssignmentExpression().node);\n } while (this.consumePunctuator(\",\") !== undefined);\n\n return {\n node: {\n type: \"SequenceExpression\",\n expressions,\n span: createSpan(expressions[0]!.span.start, expressions[expressions.length - 1]!.span.end)\n },\n parenthesized: false\n };\n }\n\n private parseAssignmentExpression(): ParsedExpression {\n const arrowFunction = this.tryParseArrowFunctionExpression();\n if (arrowFunction !== undefined) {\n return {\n node: arrowFunction,\n parenthesized: false\n };\n }\n\n const patternAssignment = this.tryParsePatternAssignmentExpression();\n if (patternAssignment !== undefined) {\n return {\n node: patternAssignment,\n parenthesized: false\n };\n }\n\n const left = this.parseConditionalExpression();\n const operator = this.consumeAssignmentOperator();\n if (operator === undefined) {\n return left;\n }\n\n const right = this.parseAssignmentExpression();\n return {\n node: {\n type: \"AssignmentExpression\",\n operator,\n left: this.toAssignmentTarget(left.node),\n right: right.node,\n span: createSpan(left.node.span.start, right.node.span.end)\n },\n parenthesized: false\n };\n }\n\n private tryParseArrowFunctionExpression(): ArrowFunctionExpression | undefined {\n if (this.isAsyncArrowWithParenthesizedParams()) {\n const asyncToken = this.currentToken();\n this.index += 1;\n const params = this.parseArrowParameters();\n return this.finishArrowFunctionExpression(asyncToken.start, true, params);\n }\n\n if (this.isAsyncArrowWithSingleParam()) {\n const asyncToken = this.currentToken();\n this.index += 1;\n const param = this.parseBindingIdentifier();\n return this.finishArrowFunctionExpression(asyncToken.start, true, [param]);\n }\n\n if (this.isParenthesizedArrowFunction()) {\n const start = this.currentToken().start;\n const params = this.parseArrowParameters();\n return this.finishArrowFunctionExpression(start, false, params);\n }\n\n if (this.isSingleParamArrowFunction()) {\n const param = this.parseBindingIdentifier();\n return this.finishArrowFunctionExpression(param.span.start, false, [param]);\n }\n\n return undefined;\n }\n\n private finishArrowFunctionExpression(\n start: Position,\n isAsync: boolean,\n params: ArrowFunctionExpression[\"params\"]\n ): ArrowFunctionExpression {\n this.withScope(() => {\n for (const param of params) {\n for (const identifier of boundIdentifiers(param)) this.declareBinding(identifier);\n }\n });\n this.expectPunctuator(\"=>\");\n const body = this.parseArrowFunctionBody(params);\n return {\n type: \"ArrowFunctionExpression\",\n async: isAsync,\n body,\n expression: body.type !== \"BlockStatement\",\n params,\n span: createSpan(start, body.span.end)\n };\n }\n\n private parseConditionalExpression(): ParsedExpression {\n if (this.conditionalExpressionDepth >= MAX_CONDITIONAL_EXPRESSION_DEPTH) {\n const token = this.currentToken();\n throw new Error(\n `Conditional expression nesting limit exceeded at line ${token.start.line}, column ${token.start.column}.`\n );\n }\n\n this.conditionalExpressionDepth += 1;\n try {\n const test = this.parseCoalesceExpression();\n if (this.consumePunctuator(\"?\") === undefined) {\n return test;\n }\n\n const consequent = this.parseExpression();\n this.expectPunctuator(\":\");\n const alternate = this.parseAssignmentExpression();\n return {\n node: {\n type: \"ConditionalExpression\",\n test: test.node,\n consequent: consequent.node,\n alternate: alternate.node,\n span: createSpan(test.node.span.start, alternate.node.span.end)\n },\n parenthesized: false\n };\n } finally {\n this.conditionalExpressionDepth -= 1;\n }\n }\n\n private parseArrowFunctionBody(\n params: ArrowFunctionExpression[\"params\"]\n ): BlockStatement | Expression {\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"{\") {\n return this.withFunctionContext(false, () => this.parseBlockStatement(params));\n }\n\n return this.withFunctionContext(false, () => this.parseExpression().node);\n }\n\n private parseBlockStatement(\n params?: ArrowFunctionExpression[\"params\"],\n catchParam?: CatchClause[\"param\"]\n ): BlockStatement {\n const start = this.expectPunctuator(\"{\");\n return this.withScope(() => {\n for (const param of params ?? []) {\n for (const identifier of boundIdentifiers(param)) {\n this.declareBinding(identifier, \"parameter\");\n }\n }\n if (catchParam !== undefined) {\n for (const identifier of boundIdentifiers(catchParam)) {\n this.declareBinding(identifier, catchParam.type === \"Identifier\" ? \"catch\" : \"lexical\");\n }\n }\n return this.parseBlockStatementBody(start);\n }, params !== undefined);\n }\n\n private parseBlockStatementBody(start: Token): BlockStatement {\n const body: Statement[] = [];\n\n while (this.consumePunctuator(\"}\") === undefined) {\n if (this.currentToken().type === \"eof\") {\n throw new Error(\n `Unterminated block at line ${start.start.line}, column ${start.start.column}.`\n );\n }\n\n const statement = this.parseStatement();\n body.push(statement);\n while (statement.type !== \"EmptyStatement\" && this.consumePunctuator(\";\") !== undefined) {\n continue;\n }\n }\n\n return {\n type: \"BlockStatement\",\n body,\n span: createSpan(start.start, this.previousToken().end)\n };\n }\n\n private parseStatement(): Statement {\n const emptyStatement = this.parseEmptyStatement();\n if (emptyStatement !== undefined) {\n return emptyStatement;\n }\n\n const token = this.currentToken();\n\n if (\n token.type === \"identifier\" &&\n this.peekToken(1).type === \"punctuator\" &&\n this.peekToken(1).value === \":\"\n ) {\n this.index += 2;\n return this.parseLabeledStatement([token.value], token);\n }\n\n this.assertAllowedStatementStart(token);\n\n if (token.type === \"punctuator\" && token.value === \"{\") {\n return this.parseBlockStatement();\n }\n\n if (token.type === \"keyword\" && token.value === \"if\") {\n return this.parseIfStatement();\n }\n\n if (token.type === \"identifier\" && token.value === \"switch\") {\n return this.parseSwitchStatement();\n }\n\n if (\n (token.type === \"keyword\" && token.value === \"function\") ||\n this.isAsyncFunctionDeclarationStart()\n ) {\n return this.parseFunctionDeclaration();\n }\n\n if (token.type === \"keyword\" && token.value === \"for\") {\n return this.parseForStatement();\n }\n\n if (token.type === \"keyword\" && token.value === \"while\") {\n return this.parseWhileStatement();\n }\n\n if (token.type === \"keyword\" && token.value === \"do\") {\n return this.parseDoWhileStatement();\n }\n\n if (token.type === \"keyword\" && token.value === \"try\") {\n return this.parseTryStatement();\n }\n\n if (token.type === \"keyword\" && token.value === \"import\" && !this.isImportMetaStart()) {\n return this.parseImportDeclaration();\n }\n\n if (token.type === \"keyword\" && token.value === \"return\") {\n this.index += 1;\n const hasArgument = this.hasReturnArgument(token, this.currentToken());\n const argument = hasArgument ? this.parseExpression({ allowSequence: true }).node : undefined;\n const end = argument?.span.end ?? token.end;\n return {\n type: \"ReturnStatement\",\n argument,\n span: createSpan(token.start, end)\n };\n }\n\n if (token.type === \"keyword\" && token.value === \"throw\") {\n this.index += 1;\n if (hasLineBreakBetween(token, this.currentToken())) {\n throw new Error(\n `Illegal newline after throw at line ${token.start.line}, column ${token.start.column}.`\n );\n }\n if (\n this.currentToken().type === \"punctuator\" &&\n (this.currentToken().value === \";\" || this.currentToken().value === \"}\")\n ) {\n throw unexpectedTokenError(this.currentToken());\n }\n if (this.currentToken().type === \"eof\") {\n throw unexpectedTokenError(this.currentToken());\n }\n const argument = this.parseExpression({ allowSequence: true }).node;\n return {\n type: \"ThrowStatement\",\n argument,\n span: createSpan(token.start, argument.span.end)\n };\n }\n\n if (\n (token.type === \"keyword\" && (token.value === \"const\" || token.value === \"let\")) ||\n (token.type === \"identifier\" && token.value === \"var\")\n ) {\n return this.parseVariableDeclaration();\n }\n\n if (token.type === \"keyword\" && token.value === \"break\") {\n if (this.breakableDepth === 0) {\n throw new Error(\n `Illegal break statement outside a loop or switch at line ${token.start.line}, column ${token.start.column}.`\n );\n }\n this.index += 1;\n const label = this.consumeControlLabel(token);\n return {\n type: \"BreakStatement\",\n ...(label === undefined ? {} : { label: label.value }),\n span: createSpan(token.start, label?.end ?? token.end)\n };\n }\n\n if (token.type === \"keyword\" && token.value === \"continue\") {\n if (this.loopDepth === 0) {\n throw new Error(\n `Illegal continue statement outside a loop at line ${token.start.line}, column ${token.start.column}.`\n );\n }\n this.index += 1;\n const label = this.consumeControlLabel(token);\n return {\n type: \"ContinueStatement\",\n ...(label === undefined ? {} : { label: label.value }),\n span: createSpan(token.start, label?.end ?? token.end)\n };\n }\n\n const expression = this.parseExpression({ allowSequence: true }).node;\n return {\n type: \"ExpressionStatement\",\n expression,\n span: createSpan(expression.span.start, expression.span.end)\n };\n }\n\n private parseEmptyStatement(): EmptyStatement | undefined {\n const token = this.consumePunctuator(\";\");\n if (token === undefined) {\n return undefined;\n }\n\n return {\n type: \"EmptyStatement\",\n span: createTokenSpan(token)\n };\n }\n\n private parseLabeledStatement(labels: string[], firstLabelToken: Token): Statement {\n const token = this.currentToken();\n\n if (\n token.type === \"identifier\" &&\n this.peekToken(1).type === \"punctuator\" &&\n this.peekToken(1).value === \":\"\n ) {\n this.index += 2;\n return this.parseLabeledStatement([...labels, token.value], firstLabelToken);\n }\n\n if (token.type === \"keyword\" && token.value === \"for\") {\n return this.parseForStatement(labels);\n }\n\n if (token.type === \"keyword\" && token.value === \"while\") {\n return this.parseWhileStatement(labels);\n }\n\n if (token.type === \"keyword\" && token.value === \"do\") {\n return this.parseDoWhileStatement(labels);\n }\n\n throw new DisallowedSyntaxError(\"label\", firstLabelToken.start);\n }\n\n private parseIfStatement(): IfStatement {\n if (this.ifStatementDepth >= MAX_IF_STATEMENT_DEPTH) {\n const token = this.currentToken();\n throw new Error(\n `If statement nesting limit exceeded at line ${token.start.line}, column ${token.start.column}.`\n );\n }\n\n this.ifStatementDepth += 1;\n try {\n const ifToken = this.expectKeyword(\"if\");\n this.expectPunctuator(\"(\");\n const test = this.parseExpression({ allowSequence: true }).node;\n this.expectPunctuator(\")\");\n const consequent = this.parseStatement();\n if (consequent.type !== \"BlockStatement\") {\n while (\n this.currentToken().type === \"punctuator\" &&\n this.currentToken().value === \";\" &&\n this.peekToken(1).type === \"keyword\" &&\n this.peekToken(1).value === \"else\"\n ) {\n this.index += 1;\n }\n }\n const elseToken = this.consumeKeyword(\"else\");\n const alternate = elseToken === undefined ? undefined : this.parseStatement();\n return {\n type: \"IfStatement\",\n test,\n consequent,\n alternate,\n span: createSpan(ifToken.start, alternate?.span.end ?? consequent.span.end)\n };\n } finally {\n this.ifStatementDepth -= 1;\n }\n }\n\n private parseSwitchStatement(): SwitchStatement {\n const switchToken = this.currentToken();\n this.index += 1;\n this.expectPunctuator(\"(\");\n const discriminant = this.parseExpression({ allowSequence: true }).node;\n this.expectPunctuator(\")\");\n const openBrace = this.expectPunctuator(\"{\");\n\n return this.withScope(() =>\n this.withBreakableContext(() => {\n const cases: SwitchCase[] = [];\n let hasDefault = false;\n\n while (this.consumePunctuator(\"}\") === undefined) {\n if (this.currentToken().type === \"eof\") {\n throw new Error(\n `Unterminated switch statement at line ${openBrace.start.line}, column ${openBrace.start.column}.`\n );\n }\n\n const clauseToken = this.currentToken();\n let test: Expression | undefined;\n if (clauseToken.type === \"identifier\" && clauseToken.value === \"case\") {\n this.index += 1;\n test = this.parseExpression({ allowSequence: true }).node;\n } else if (clauseToken.type === \"identifier\" && clauseToken.value === \"default\") {\n if (hasDefault) {\n throw new Error(\n `Duplicate default clause at line ${clauseToken.start.line}, column ${clauseToken.start.column}.`\n );\n }\n hasDefault = true;\n this.index += 1;\n } else {\n throw unexpectedTokenError(clauseToken);\n }\n\n const colon = this.expectPunctuator(\":\");\n const consequent: Statement[] = [];\n while (!this.isSwitchClauseStart() && !this.isCurrentPunctuator(\"}\")) {\n const statement = this.parseStatement();\n consequent.push(statement);\n while (\n statement.type !== \"EmptyStatement\" &&\n this.consumePunctuator(\";\") !== undefined\n ) {\n continue;\n }\n }\n\n cases.push({\n type: \"SwitchCase\",\n test,\n consequent,\n span: createSpan(clauseToken.start, consequent.at(-1)?.span.end ?? colon.end)\n });\n }\n\n return {\n type: \"SwitchStatement\",\n discriminant,\n cases,\n span: createSpan(switchToken.start, this.previousToken().end)\n };\n })\n );\n }\n\n private isSwitchClauseStart(): boolean {\n const token = this.currentToken();\n return token.type === \"identifier\" && (token.value === \"case\" || token.value === \"default\");\n }\n\n private isCurrentPunctuator(value: string): boolean {\n const token = this.currentToken();\n return token.type === \"punctuator\" && token.value === value;\n }\n\n private parseForStatement(labels?: string[]): ForInStatement | ForOfStatement | ForStatement {\n const forToken = this.expectKeyword(\"for\");\n return this.withScope(() => {\n this.expectPunctuator(\"(\");\n const iterationOperator = this.findTopLevelForIterationOperator(this.index);\n\n if (iterationOperator?.value === \"in\") {\n const left = this.parseForInLeft();\n this.expectKeyword(\"in\");\n const right = this.parseExpression().node;\n this.expectPunctuator(\")\");\n const body = this.withLoopContext(() => this.parseStatement());\n return {\n type: \"ForInStatement\",\n left,\n right,\n body,\n ...createLoopLabelFields(labels),\n span: createSpan(forToken.start, body.span.end)\n };\n }\n\n if (iterationOperator?.value === \"of\") {\n const left = this.parseForOfLeft();\n this.expectKeyword(\"of\");\n const right = this.parseExpression().node;\n this.expectPunctuator(\")\");\n const body = this.withLoopContext(() => this.parseStatement());\n return {\n type: \"ForOfStatement\",\n left,\n right,\n body,\n ...createLoopLabelFields(labels),\n span: createSpan(forToken.start, body.span.end)\n };\n }\n\n let init: Expression | VariableDeclaration | undefined;\n if (this.consumePunctuator(\";\") === undefined) {\n init =\n (this.currentToken().type === \"keyword\" || this.currentToken().type === \"identifier\") &&\n (this.currentToken().value === \"const\" ||\n this.currentToken().value === \"let\" ||\n this.currentToken().value === \"var\")\n ? this.parseVariableDeclaration()\n : this.parseExpression({ allowSequence: true }).node;\n this.expectPunctuator(\";\");\n }\n\n let test: Expression | undefined;\n if (this.consumePunctuator(\";\") === undefined) {\n test = this.parseExpression({ allowSequence: true }).node;\n this.expectPunctuator(\";\");\n }\n\n const update =\n this.currentToken().type === \"punctuator\" && this.currentToken().value === \")\"\n ? undefined\n : this.parseExpression({ allowSequence: true }).node;\n\n this.expectPunctuator(\")\");\n const body = this.withLoopContext(() => this.parseStatement());\n return {\n type: \"ForStatement\",\n init,\n test,\n update,\n body,\n ...createLoopLabelFields(labels),\n span: createSpan(forToken.start, body.span.end)\n };\n });\n }\n\n private parseForInLeft(): Identifier | VariableDeclaration {\n const left = this.parseForOfLeft();\n const target = left.type === \"VariableDeclaration\" ? left.declarations[0]?.id : left;\n if (target?.type !== \"Identifier\") {\n throw new Error(\"for...in keys are strings; destructure inside the body\");\n }\n return left as Identifier | VariableDeclaration;\n }\n\n private parseForOfLeft(): PatternTarget | VariableDeclaration {\n if (\n (this.currentToken().type === \"keyword\" || this.currentToken().type === \"identifier\") &&\n (this.currentToken().value === \"const\" ||\n this.currentToken().value === \"let\" ||\n this.currentToken().value === \"var\")\n ) {\n return this.parseForOfDeclaration();\n }\n\n return this.toPatternTarget(this.parseAssignmentTarget());\n }\n\n private parseForOfDeclaration(): VariableDeclaration {\n const kindToken = this.currentToken();\n if (\n (kindToken.type !== \"keyword\" && kindToken.type !== \"identifier\") ||\n (kindToken.value !== \"const\" && kindToken.value !== \"let\" && kindToken.value !== \"var\")\n ) {\n throw unexpectedTokenError(kindToken);\n }\n\n this.index += 1;\n const id = this.parseBindingTarget();\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"=\") {\n throw new Error(\n `for...of declarations cannot include an initializer at line ${kindToken.start.line}, column ${kindToken.start.column}.`\n );\n }\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \",\") {\n throw new Error(\n `for...of declarations must include exactly one declarator at line ${kindToken.start.line}, column ${kindToken.start.column}.`\n );\n }\n\n const declarator: VariableDeclarator = {\n type: \"VariableDeclarator\",\n id,\n span: id.span\n };\n this.declarePatternBindings(id);\n\n return {\n type: \"VariableDeclaration\",\n declarations: [declarator],\n kind: kindToken.value,\n span: createSpan(kindToken.start, id.span.end)\n };\n }\n\n private parseWhileStatement(labels?: string[]): WhileStatement {\n const whileToken = this.expectKeyword(\"while\");\n this.expectPunctuator(\"(\");\n const test = this.parseExpression({ allowSequence: true }).node;\n this.expectPunctuator(\")\");\n const body = this.withLoopContext(() => this.parseStatement());\n return {\n type: \"WhileStatement\",\n test,\n body,\n ...createLoopLabelFields(labels),\n span: createSpan(whileToken.start, body.span.end)\n };\n }\n\n private parseDoWhileStatement(labels?: string[]): DoWhileStatement {\n const doToken = this.expectKeyword(\"do\");\n const body = this.withLoopContext(() => this.parseStatement());\n this.expectKeyword(\"while\");\n this.expectPunctuator(\"(\");\n const test = this.parseExpression({ allowSequence: true }).node;\n const closeParen = this.expectPunctuator(\")\");\n return {\n type: \"DoWhileStatement\",\n body,\n test,\n ...createLoopLabelFields(labels),\n span: createSpan(doToken.start, closeParen.end)\n };\n }\n\n private parseTryStatement(): TryStatement {\n const tryToken = this.expectKeyword(\"try\");\n const block = this.parseBlockStatement();\n const handler =\n this.currentToken().type === \"keyword\" && this.currentToken().value === \"catch\"\n ? this.parseCatchClause()\n : undefined;\n\n let finalizer: BlockStatement | undefined;\n if (this.currentToken().type === \"keyword\" && this.currentToken().value === \"finally\") {\n this.index += 1;\n finalizer = this.parseBlockStatement();\n }\n\n if (this.currentToken().type === \"keyword\" && this.currentToken().value === \"catch\") {\n throw new Error(\n `Try statements support only one catch clause at line ${this.currentToken().start.line}, column ${this.currentToken().start.column}.`\n );\n }\n\n if (handler === undefined && finalizer === undefined) {\n throw new Error(\n `Expected 'catch' or 'finally' at line ${this.currentToken().start.line}, column ${this.currentToken().start.column}.`\n );\n }\n\n return {\n type: \"TryStatement\",\n block,\n handler,\n finalizer,\n span: createSpan(tryToken.start, finalizer?.span.end ?? handler?.span.end ?? block.span.end)\n };\n }\n\n private parseImportDeclaration(): ImportDeclaration {\n const importToken = this.expectKeyword(\"import\");\n let specifiers: ImportDeclaration[\"specifiers\"];\n\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"{\") {\n specifiers = this.parseImportNamedSpecifiers();\n } else if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"*\") {\n const start = this.expectPunctuator(\"*\");\n this.expectKeyword(\"as\");\n const local = this.parseBindingIdentifier();\n specifiers = [\n {\n type: \"ImportNamespaceSpecifier\",\n local,\n span: createSpan(start.start, local.span.end)\n }\n ];\n } else {\n const local = this.parseBindingIdentifier();\n specifiers = [\n {\n type: \"ImportDefaultSpecifier\",\n local,\n span: local.span\n }\n ];\n }\n\n const fromToken = this.currentToken();\n if (\n fromToken.type !== \"identifier\" ||\n fromToken.value !== \"from\" ||\n fromToken.end.offset - fromToken.start.offset !== fromToken.value.length\n ) {\n throw new Error(\n `Expected 'from' at line ${fromToken.start.line}, column ${fromToken.start.column}.`\n );\n }\n this.index += 1;\n const sourceToken = this.currentToken();\n if (sourceToken.type !== \"string\") {\n throw unexpectedTokenError(sourceToken);\n }\n\n this.index += 1;\n const source = createStringLiteral(sourceToken);\n assertBareImportSpecifier(source);\n\n return {\n type: \"ImportDeclaration\",\n specifiers,\n source,\n span: createSpan(importToken.start, source.span.end)\n };\n }\n\n private parseImportNamedSpecifiers(): ImportDeclaration[\"specifiers\"] {\n this.expectPunctuator(\"{\");\n const specifiers: ImportDeclaration[\"specifiers\"] = [];\n\n while (true) {\n const imported = this.parseIdentifierName();\n let local = imported;\n\n if (this.consumeKeyword(\"as\") !== undefined) {\n local = this.parseBindingIdentifier();\n }\n\n specifiers.push({\n type: \"ImportSpecifier\",\n imported,\n local,\n span: createSpan(imported.span.start, local.span.end)\n });\n\n const comma = this.consumePunctuator(\",\");\n if (comma === undefined) {\n break;\n }\n\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"}\") {\n break;\n }\n }\n\n if (specifiers.length === 0) {\n throw unexpectedTokenError(this.currentToken());\n }\n\n this.expectPunctuator(\"}\");\n return specifiers;\n }\n\n private parseExportDeclaration(): ExportDefaultDeclaration | ExportNamedDeclaration {\n const exportToken = this.currentToken();\n if (!this.isExportToken(exportToken)) {\n throw unexpectedTokenError(exportToken);\n }\n\n this.index += 1;\n\n if (this.currentToken().value === \"default\") {\n return this.parseExportDefaultDeclaration(exportToken);\n }\n\n if (this.currentToken().type === \"keyword\" && this.currentToken().value === \"const\") {\n return this.parseExportNamedDeclaration(exportToken);\n }\n\n throw new DisallowedSyntaxError(`export ${this.currentToken().value}`, exportToken.start);\n }\n\n private parseExportNamedDeclaration(exportToken: Token): ExportNamedDeclaration {\n const declaration = this.parseVariableDeclaration();\n for (const declarator of declaration.declarations) {\n if (declarator.id.type !== \"Identifier\") {\n throw new DisallowedSyntaxError(\"export const\", declarator.id.span.start);\n }\n }\n\n return createExportNamedDeclaration(exportToken, declaration);\n }\n\n private parseExportDefaultDeclaration(exportToken: Token): ExportDefaultDeclaration {\n this.index += 1;\n\n if (this.currentToken().value === \"class\") {\n throw new DisallowedSyntaxError(\n `export default ${this.currentToken().value}`,\n this.currentToken().start\n );\n }\n\n const declaration = this.parseExpression().node;\n return createExportDefaultDeclaration(exportToken, declaration);\n }\n\n private parseCatchClause(): CatchClause {\n const catchToken = this.expectKeyword(\"catch\");\n let param: ArrayPattern | Identifier | ObjectPattern | undefined;\n if (this.consumePunctuator(\"(\") !== undefined) {\n param = this.parseBindingTarget();\n this.expectPunctuator(\")\");\n }\n const body = this.parseBlockStatement(undefined, param);\n return {\n type: \"CatchClause\",\n param,\n body,\n span: createSpan(catchToken.start, body.span.end)\n };\n }\n\n private parseVariableDeclaration(): VariableDeclaration {\n const kindToken = this.currentToken();\n if (\n (kindToken.type !== \"keyword\" && kindToken.type !== \"identifier\") ||\n (kindToken.value !== \"const\" && kindToken.value !== \"let\" && kindToken.value !== \"var\")\n ) {\n throw unexpectedTokenError(kindToken);\n }\n\n this.index += 1;\n const declarations: VariableDeclaration[\"declarations\"] = [];\n\n while (true) {\n const declarator = this.parseVariableDeclarator(kindToken.value);\n if (kindToken.value !== \"var\") {\n this.declarePatternBindings(declarator.id);\n } else {\n for (const identifier of boundIdentifiers(declarator.id)) {\n this.declareVarBinding(identifier);\n }\n }\n declarations.push(declarator);\n const comma = this.consumePunctuator(\",\");\n if (comma === undefined) {\n break;\n }\n }\n\n return {\n type: \"VariableDeclaration\",\n declarations,\n kind: kindToken.value,\n span: createSpan(kindToken.start, declarations[declarations.length - 1]!.span.end)\n };\n }\n\n private parseFunctionDeclaration(): FunctionDeclaration {\n const asyncToken = this.consumeKeyword(\"async\");\n const functionToken = this.expectKeyword(\"function\");\n const generatorToken = this.consumePunctuator(\"*\");\n if (asyncToken !== undefined && generatorToken !== undefined) {\n throw new Error(\n `async function* is not supported at line ${asyncToken.start.line}, column ${asyncToken.start.column}.`\n );\n }\n const id = this.parseBindingIdentifier();\n this.declareBinding(id, \"function\");\n const params = this.withScope(() => {\n const parsedParams = this.parseArrowParameters();\n for (const param of parsedParams) {\n for (const identifier of boundIdentifiers(param)) {\n this.declareBinding(identifier);\n }\n }\n return parsedParams;\n });\n const generator = generatorToken !== undefined;\n const body = this.withFunctionContext(generator, () => this.parseBlockStatement(params));\n\n return {\n type: \"FunctionDeclaration\",\n async: asyncToken !== undefined,\n body,\n generator,\n id,\n params,\n span: createSpan(asyncToken?.start ?? functionToken.start, body.span.end)\n };\n }\n\n private parseVariableDeclarator(kind: VariableDeclarationKind): VariableDeclarator {\n const id = this.parseBindingTarget();\n let init: Expression | undefined;\n\n if (this.consumePunctuator(\"=\") !== undefined) {\n init = this.parseExpression().node;\n }\n\n if (kind === \"const\" && init === undefined) {\n throw new Error(\n `Missing initializer in const declaration at line ${id.span.start.line}, column ${id.span.start.column}.`\n );\n }\n\n if (init === undefined && id.type !== \"Identifier\") {\n throw new Error(\n `Destructuring declarations require an initializer at line ${id.span.start.line}, column ${id.span.start.column}.`\n );\n }\n\n return {\n type: \"VariableDeclarator\",\n id,\n init,\n span: createSpan(id.span.start, init?.span.end ?? id.span.end)\n };\n }\n\n private parseArrowParameters(): ArrowFunctionExpression[\"params\"] {\n this.expectPunctuator(\"(\");\n const params: ArrowFunctionExpression[\"params\"] = [];\n\n if (this.consumePunctuator(\")\") !== undefined) {\n return params;\n }\n\n while (true) {\n const param = this.parseBindingElement();\n params.push(param);\n\n const comma = this.consumePunctuator(\",\");\n if (comma === undefined) {\n break;\n }\n\n if (param.type === \"RestElement\") {\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \")\") {\n throw unexpectedTokenError(comma);\n }\n throw new Error(\n `Rest element must be the last parameter at line ${comma.start.line}, column ${comma.start.column}.`\n );\n }\n\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \")\") {\n break;\n }\n }\n\n this.expectPunctuator(\")\");\n return params;\n }\n\n private parseBindingElement():\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | ObjectPattern\n | RestElement {\n if (this.consumePunctuator(\"...\") !== undefined) {\n const start = this.previousToken().start;\n const argument = this.parseBindingTarget();\n return {\n type: \"RestElement\",\n argument,\n span: createSpan(start, argument.span.end)\n };\n }\n\n const left = this.parseBindingTarget();\n if (this.consumePunctuator(\"=\") === undefined) {\n return left;\n }\n\n const right = this.parseExpression().node;\n return {\n type: \"AssignmentPattern\",\n left,\n right,\n span: createSpan(left.span.start, right.span.end)\n };\n }\n\n private parseBindingTarget(): ArrayPattern | Identifier | ObjectPattern {\n const token = this.currentToken();\n\n if (isIdentifierLikeToken(token)) {\n return this.parseBindingIdentifier();\n }\n\n if (token.type === \"punctuator\" && token.value === \"[\") {\n return this.parseArrayPattern();\n }\n\n if (token.type === \"punctuator\" && token.value === \"{\") {\n return this.parseObjectPattern();\n }\n\n throw unexpectedTokenError(token);\n }\n\n private parseBindingIdentifier(): Identifier {\n const token = this.currentToken();\n if (!isIdentifierLikeToken(token)) {\n throw unexpectedTokenError(token);\n }\n\n this.index += 1;\n return createIdentifier(token);\n }\n\n private parseArrayPattern(): ArrayPattern {\n const start = this.expectPunctuator(\"[\");\n const elements: ArrayPattern[\"elements\"] = [];\n\n if (this.consumePunctuator(\"]\") !== undefined) {\n return {\n type: \"ArrayPattern\",\n elements,\n span: createSpan(start.start, this.previousToken().end)\n };\n }\n\n while (true) {\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \",\") {\n this.index += 1;\n elements.push(null);\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"]\") {\n break;\n }\n continue;\n }\n\n const element = this.parseBindingElement();\n elements.push(element);\n\n const comma = this.consumePunctuator(\",\");\n if (comma === undefined) {\n break;\n }\n\n if (element.type === \"RestElement\") {\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"]\") {\n throw unexpectedTokenError(comma);\n }\n throw new Error(\n `Rest element must be the last element in an array pattern at line ${comma.start.line}, column ${comma.start.column}.`\n );\n }\n\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"]\") {\n break;\n }\n }\n\n const end = this.expectPunctuator(\"]\");\n return {\n type: \"ArrayPattern\",\n elements,\n span: createSpan(start.start, end.end)\n };\n }\n\n private parseObjectPattern(): ObjectPattern {\n const start = this.expectPunctuator(\"{\");\n const properties: ObjectPattern[\"properties\"] = [];\n\n if (this.consumePunctuator(\"}\") !== undefined) {\n return {\n type: \"ObjectPattern\",\n properties,\n span: createSpan(start.start, this.previousToken().end)\n };\n }\n\n while (true) {\n const property = this.parseObjectPatternProperty();\n properties.push(property);\n\n const comma = this.consumePunctuator(\",\");\n if (comma === undefined) {\n break;\n }\n\n if (property.type === \"RestElement\") {\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"...\") {\n throw new Error(\n `Object pattern can contain only one rest element at line ${this.currentToken().start.line}, column ${this.currentToken().start.column}.`\n );\n }\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"}\") {\n throw unexpectedTokenError(comma);\n }\n throw new Error(\n `Rest element must be the last property in an object pattern at line ${comma.start.line}, column ${comma.start.column}.`\n );\n }\n\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"}\") {\n break;\n }\n }\n\n const end = this.expectPunctuator(\"}\");\n return {\n type: \"ObjectPattern\",\n properties,\n span: createSpan(start.start, end.end)\n };\n }\n\n private parseObjectPatternProperty(): AssignmentProperty | RestElement {\n if (this.consumePunctuator(\"...\") !== undefined) {\n const start = this.previousToken().start;\n const token = this.currentToken();\n if (token.type !== \"identifier\") {\n throw new Error(\n `Object rest element must bind to an identifier at line ${token.start.line}, column ${token.start.column}.`\n );\n }\n const argument = this.parseBindingIdentifier();\n return {\n type: \"RestElement\",\n argument,\n span: createSpan(start, argument.span.end)\n };\n }\n\n if (this.consumePunctuator(\"[\") !== undefined) {\n const start = this.previousToken().start;\n const key = this.parsePatternComputedKey();\n this.expectPunctuator(\":\");\n const value = this.parseBindingElement();\n if (value.type === \"RestElement\") {\n throw unexpectedTokenError(this.previousToken());\n }\n return {\n type: \"AssignmentProperty\",\n computed: true,\n shorthand: false,\n key,\n value,\n span: createSpan(start, value.span.end)\n };\n }\n\n const token = this.currentToken();\n if (token.type === \"identifier\") {\n this.index += 1;\n const key = createIdentifier(token);\n if (this.consumePunctuator(\":\") !== undefined) {\n const value = this.parseBindingElement();\n if (value.type === \"RestElement\") {\n throw unexpectedTokenError(this.previousToken());\n }\n return {\n type: \"AssignmentProperty\",\n computed: false,\n shorthand: false,\n key,\n value,\n span: createSpan(key.span.start, value.span.end)\n };\n }\n\n let value: AssignmentPattern | ArrayPattern | Identifier | ObjectPattern = key;\n if (this.consumePunctuator(\"=\") !== undefined) {\n const right = this.parseExpression().node;\n value = {\n type: \"AssignmentPattern\",\n left: createIdentifier(token),\n right,\n span: createSpan(key.span.start, right.span.end)\n };\n }\n return {\n type: \"AssignmentProperty\",\n computed: false,\n shorthand: true,\n key,\n value,\n span: createSpan(key.span.start, value.span.end)\n };\n }\n\n if (isLiteralPropertyKey(token)) {\n this.index += 1;\n const key = createLiteralFromToken(token);\n this.expectPunctuator(\":\");\n const value = this.parseBindingElement();\n if (value.type === \"RestElement\") {\n throw unexpectedTokenError(this.previousToken());\n }\n return {\n type: \"AssignmentProperty\",\n computed: false,\n shorthand: false,\n key,\n value,\n span: createSpan(key.span.start, value.span.end)\n };\n }\n\n throw unexpectedTokenError(token);\n }\n\n private tryParsePatternAssignmentExpression(): AssignmentExpression | undefined {\n const token = this.currentToken();\n if (\n token.type !== \"punctuator\" ||\n (token.value !== \"[\" && token.value !== \"{\") ||\n !this.isPatternAssignmentStart(this.index)\n ) {\n return undefined;\n }\n\n const left =\n token.value === \"[\"\n ? this.parseAssignmentArrayPattern()\n : this.parseAssignmentObjectPattern();\n this.expectPunctuator(\"=\");\n const right = this.parseAssignmentExpression().node;\n return {\n type: \"AssignmentExpression\",\n operator: \"=\",\n left,\n right,\n span: createSpan(left.span.start, right.span.end)\n };\n }\n\n private parseAssignmentPatternElement():\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement {\n if (this.consumePunctuator(\"...\") !== undefined) {\n const start = this.previousToken().start;\n const argument = this.toPatternTarget(this.parseAssignmentTarget());\n return {\n type: \"RestElement\",\n argument,\n span: createSpan(start, argument.span.end)\n };\n }\n\n const left = this.parseAssignmentTarget();\n if (this.consumePunctuator(\"=\") === undefined) {\n return this.toPatternTarget(left);\n }\n\n const right = this.parseAssignmentExpression().node;\n return {\n type: \"AssignmentPattern\",\n left: this.toPatternTarget(left),\n right,\n span: createSpan(left.span.start, right.span.end)\n };\n }\n\n private parseAssignmentTarget(): AssignmentTarget {\n const token = this.currentToken();\n\n if (token.type === \"punctuator\" && token.value === \"[\") {\n return this.parseAssignmentArrayPattern();\n }\n\n if (token.type === \"punctuator\" && token.value === \"{\") {\n return this.parseAssignmentObjectPattern();\n }\n\n const expression = this.parseLeftHandSideExpression().node;\n if (expression.type === \"Identifier\") {\n return expression;\n }\n\n if (\n expression.type === \"MetaProperty\" ||\n (expression.type === \"MemberExpression\" && !expression.optional)\n ) {\n return expression;\n }\n\n throw invalidAssignmentTargetError(expression.span.start);\n }\n\n private parseAssignmentArrayPattern(): ArrayPattern {\n const start = this.expectPunctuator(\"[\");\n const elements: ArrayPattern[\"elements\"] = [];\n\n if (this.consumePunctuator(\"]\") !== undefined) {\n return {\n type: \"ArrayPattern\",\n elements,\n span: createSpan(start.start, this.previousToken().end)\n };\n }\n\n while (true) {\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \",\") {\n this.index += 1;\n elements.push(null);\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"]\") {\n break;\n }\n continue;\n }\n\n const element = this.parseAssignmentPatternElement();\n elements.push(element);\n\n const comma = this.consumePunctuator(\",\");\n if (comma === undefined) {\n break;\n }\n\n if (element.type === \"RestElement\") {\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"]\") {\n throw unexpectedTokenError(comma);\n }\n throw new Error(\n `Rest element must be the last element in an array pattern at line ${comma.start.line}, column ${comma.start.column}.`\n );\n }\n\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"]\") {\n break;\n }\n }\n\n const end = this.expectPunctuator(\"]\");\n return {\n type: \"ArrayPattern\",\n elements,\n span: createSpan(start.start, end.end)\n };\n }\n\n private parseAssignmentObjectPattern(): ObjectPattern {\n const start = this.expectPunctuator(\"{\");\n const properties: ObjectPattern[\"properties\"] = [];\n\n if (this.consumePunctuator(\"}\") !== undefined) {\n return {\n type: \"ObjectPattern\",\n properties,\n span: createSpan(start.start, this.previousToken().end)\n };\n }\n\n while (true) {\n const property = this.parseAssignmentObjectPatternProperty();\n properties.push(property);\n\n const comma = this.consumePunctuator(\",\");\n if (comma === undefined) {\n break;\n }\n\n if (property.type === \"RestElement\") {\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"...\") {\n throw new Error(\n `Object pattern can contain only one rest element at line ${this.currentToken().start.line}, column ${this.currentToken().start.column}.`\n );\n }\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"}\") {\n throw unexpectedTokenError(comma);\n }\n throw new Error(\n `Rest element must be the last property in an object pattern at line ${comma.start.line}, column ${comma.start.column}.`\n );\n }\n\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"}\") {\n break;\n }\n }\n\n const end = this.expectPunctuator(\"}\");\n return {\n type: \"ObjectPattern\",\n properties,\n span: createSpan(start.start, end.end)\n };\n }\n\n private parseAssignmentObjectPatternProperty(): AssignmentProperty | RestElement {\n if (this.consumePunctuator(\"...\") !== undefined) {\n const start = this.previousToken().start;\n const token = this.currentToken();\n if (token.type !== \"identifier\") {\n throw new Error(\n `Object rest element must bind to an identifier at line ${token.start.line}, column ${token.start.column}.`\n );\n }\n const argument = this.parseBindingIdentifier();\n return {\n type: \"RestElement\",\n argument,\n span: createSpan(start, argument.span.end)\n };\n }\n\n if (this.consumePunctuator(\"[\") !== undefined) {\n const start = this.previousToken().start;\n const key = this.parsePatternComputedKey();\n this.expectPunctuator(\":\");\n const value = this.parseAssignmentPatternElement();\n if (value.type === \"RestElement\") {\n throw unexpectedTokenError(this.previousToken());\n }\n return {\n type: \"AssignmentProperty\",\n computed: true,\n shorthand: false,\n key,\n value,\n span: createSpan(start, value.span.end)\n };\n }\n\n const token = this.currentToken();\n if (token.type === \"identifier\") {\n this.index += 1;\n const key = createIdentifier(token);\n if (this.consumePunctuator(\":\") !== undefined) {\n const value = this.parseAssignmentPatternElement();\n if (value.type === \"RestElement\") {\n throw unexpectedTokenError(this.previousToken());\n }\n return {\n type: \"AssignmentProperty\",\n computed: false,\n shorthand: false,\n key,\n value,\n span: createSpan(key.span.start, value.span.end)\n };\n }\n\n let value: AssignmentPattern | ArrayPattern | Identifier | MemberExpression | ObjectPattern =\n key;\n if (this.consumePunctuator(\"=\") !== undefined) {\n const right = this.parseAssignmentExpression().node;\n value = {\n type: \"AssignmentPattern\",\n left: createIdentifier(token),\n right,\n span: createSpan(key.span.start, right.span.end)\n };\n }\n return {\n type: \"AssignmentProperty\",\n computed: false,\n shorthand: true,\n key,\n value,\n span: createSpan(key.span.start, value.span.end)\n };\n }\n\n if (isLiteralPropertyKey(token)) {\n this.index += 1;\n const key = createLiteralFromToken(token);\n this.expectPunctuator(\":\");\n const value = this.parseAssignmentPatternElement();\n if (value.type === \"RestElement\") {\n throw unexpectedTokenError(this.previousToken());\n }\n return {\n type: \"AssignmentProperty\",\n computed: false,\n shorthand: false,\n key,\n value,\n span: createSpan(key.span.start, value.span.end)\n };\n }\n\n throw unexpectedTokenError(token);\n }\n\n private parsePatternComputedKey(): Expression {\n const key = this.parseExpression({ allowSequence: true }).node;\n this.expectPunctuator(\"]\");\n\n return key;\n }\n\n private parseCoalesceExpression(): ParsedExpression {\n let left = this.parseLogicalOrExpression();\n\n while (this.consumePunctuator(\"??\") !== undefined) {\n this.assertNullishOperand(left);\n const right = this.parseLogicalOrExpression();\n this.assertNullishOperand(right);\n left = {\n node: {\n type: \"LogicalExpression\",\n operator: \"??\",\n left: left.node,\n right: right.node,\n span: createSpan(left.node.span.start, right.node.span.end)\n },\n parenthesized: false\n };\n }\n\n return left;\n }\n\n private parseLogicalOrExpression(): ParsedExpression {\n return this.parseLogicalExpression(() => this.parseLogicalAndExpression(), \"||\");\n }\n\n private parseLogicalAndExpression(): ParsedExpression {\n return this.parseLogicalExpression(() => this.parseBitwiseOrExpression(), \"&&\");\n }\n\n private parseBitwiseOrExpression(): ParsedExpression {\n return this.parseBinaryExpression(() => this.parseBitwiseXorExpression(), BITWISE_OR_OPERATORS);\n }\n\n private parseBitwiseXorExpression(): ParsedExpression {\n return this.parseBinaryExpression(\n () => this.parseBitwiseAndExpression(),\n BITWISE_XOR_OPERATORS\n );\n }\n\n private parseBitwiseAndExpression(): ParsedExpression {\n return this.parseBinaryExpression(() => this.parseEqualityExpression(), BITWISE_AND_OPERATORS);\n }\n\n private parseEqualityExpression(): ParsedExpression {\n return this.parseBinaryExpression(() => this.parseRelationalExpression(), EQUALITY_OPERATORS);\n }\n\n private parseRelationalExpression(): ParsedExpression {\n return this.parseBinaryExpression(() => this.parseShiftExpression(), RELATIONAL_OPERATORS);\n }\n\n private parseShiftExpression(): ParsedExpression {\n return this.parseBinaryExpression(() => this.parseAdditiveExpression(), SHIFT_OPERATORS);\n }\n\n private parseAdditiveExpression(): ParsedExpression {\n return this.parseBinaryExpression(\n () => this.parseMultiplicativeExpression(),\n ADDITIVE_OPERATORS\n );\n }\n\n private parseMultiplicativeExpression(): ParsedExpression {\n return this.parseBinaryExpression(\n () => this.parseExponentiationExpression(),\n MULTIPLICATIVE_OPERATORS\n );\n }\n\n private parseExponentiationExpression(): ParsedExpression {\n const left = this.parseUnaryExpression();\n\n if (this.consumePunctuator(\"**\") === undefined) {\n return left;\n }\n\n if (!left.parenthesized && left.node.type === \"UnaryExpression\") {\n const operator = this.previousToken();\n throw new Error(\n `Unary expressions cannot be used as the left-hand side of '**' without parentheses at line ${operator.start.line}, column ${operator.start.column}.`\n );\n }\n\n const right = this.parseExponentiationExpression();\n return {\n node: {\n type: \"BinaryExpression\",\n operator: \"**\",\n left: left.node,\n right: right.node,\n span: createSpan(left.node.span.start, right.node.span.end)\n },\n parenthesized: false\n };\n }\n\n private parseUnaryExpression(): ParsedExpression {\n const token = this.currentToken();\n if (token.type === \"punctuator\" && (token.value === \"++\" || token.value === \"--\")) {\n this.index += 1;\n const argument = this.parseUnaryExpression();\n const target = this.toUpdateTarget(argument.node);\n return {\n node: {\n type: \"UpdateExpression\",\n operator: token.value,\n prefix: true,\n argument: target,\n span: createSpan(token.start, argument.node.span.end)\n },\n parenthesized: false\n };\n }\n\n if (token.type === \"keyword\" && token.value === \"yield\") {\n if (!this.generatorBody) {\n throw new Error(\n `yield is only valid inside a generator body at line ${token.start.line}, column ${token.start.column}.`\n );\n }\n\n this.index += 1;\n if (\n hasLineBreakBetween(token, this.currentToken()) &&\n this.currentToken().type === \"punctuator\" &&\n this.currentToken().value === \"*\"\n ) {\n throw unexpectedTokenError(this.currentToken());\n }\n const delegate = this.consumePunctuator(\"*\") !== undefined;\n const next = this.currentToken();\n const hasArgument =\n delegate ||\n (!hasLineBreakBetween(token, next) &&\n !(next.type === \"punctuator\" && isYieldArgumentTerminator(next.value)) &&\n next.type !== \"eof\");\n const argument = hasArgument ? this.parseAssignmentExpression().node : undefined;\n if (delegate && argument === undefined) {\n throw unexpectedTokenError(next);\n }\n return {\n node: {\n type: \"YieldExpression\",\n argument,\n delegate,\n span: createSpan(token.start, argument?.span.end ?? token.end)\n },\n parenthesized: false\n };\n }\n\n if (token.type === \"keyword\" && token.value === \"await\") {\n if (this.generatorBody) {\n throw new Error(\n `generators cannot await; use a regular async function at line ${token.start.line}, column ${token.start.column}.`\n );\n }\n this.index += 1;\n const argument = this.parseUnaryExpression();\n return {\n node: {\n type: \"AwaitExpression\",\n argument: argument.node,\n span: createSpan(token.start, argument.node.span.end)\n },\n parenthesized: false\n };\n }\n\n if (\n token.type === \"keyword\" &&\n (token.value === \"delete\" || token.value === \"typeof\" || token.value === \"void\")\n ) {\n this.index += 1;\n const argument = this.parseUnaryExpression();\n return {\n node: {\n type: \"UnaryExpression\",\n operator: token.value,\n prefix: true,\n argument: argument.node,\n span: createSpan(token.start, argument.node.span.end)\n },\n parenthesized: false\n };\n }\n\n if (\n token.type === \"punctuator\" &&\n (token.value === \"!\" || token.value === \"+\" || token.value === \"-\" || token.value === \"~\")\n ) {\n this.index += 1;\n const argument = this.parseUnaryExpression();\n return {\n node: {\n type: \"UnaryExpression\",\n operator: token.value as UnaryOperator,\n prefix: true,\n argument: argument.node,\n span: createSpan(token.start, argument.node.span.end)\n },\n parenthesized: false\n };\n }\n\n return this.parseLeftHandSideExpression();\n }\n\n private parseLeftHandSideExpression(): ParsedExpression {\n let expression = this.parsePrimaryExpression();\n\n while (true) {\n const optionalChain = this.consumePunctuator(\"?.\");\n if (optionalChain !== undefined) {\n if (this.consumePunctuator(\"(\") !== undefined) {\n expression = {\n node: this.createCallExpression(expression.node, true),\n parenthesized: false\n };\n continue;\n }\n\n if (this.consumePunctuator(\"[\") !== undefined) {\n const property = this.parseExpression({ allowSequence: true });\n const end = this.expectPunctuator(\"]\");\n expression = {\n node: {\n type: \"MemberExpression\",\n computed: true,\n object: expression.node,\n optional: true,\n property: property.node,\n span: createSpan(expression.node.span.start, end.end)\n },\n parenthesized: false\n };\n continue;\n }\n\n const property = this.parseIdentifierName();\n expression = {\n node: {\n type: \"MemberExpression\",\n computed: false,\n object: expression.node,\n optional: true,\n property,\n span: createSpan(expression.node.span.start, property.span.end)\n },\n parenthesized: false\n };\n continue;\n }\n\n if (this.consumePunctuator(\".\") !== undefined) {\n const property = this.parseIdentifierName();\n expression = {\n node: {\n type: \"MemberExpression\",\n computed: false,\n object: expression.node,\n optional: false,\n property,\n span: createSpan(expression.node.span.start, property.span.end)\n },\n parenthesized: false\n };\n continue;\n }\n\n if (this.consumePunctuator(\"[\") !== undefined) {\n const property = this.parseExpression({ allowSequence: true });\n const end = this.expectPunctuator(\"]\");\n expression = {\n node: {\n type: \"MemberExpression\",\n computed: true,\n object: expression.node,\n optional: false,\n property: property.node,\n span: createSpan(expression.node.span.start, end.end)\n },\n parenthesized: false\n };\n continue;\n }\n\n if (this.consumePunctuator(\"(\") !== undefined) {\n expression = {\n node: this.createCallExpression(expression.node, false),\n parenthesized: false\n };\n continue;\n }\n\n if (this.currentToken().type === \"template\") {\n const quasi = createTemplateLiteral(\n this.currentToken(),\n { allowMalformedEscapes: true },\n this.compilation\n );\n this.index += 1;\n expression = {\n node: {\n type: \"TaggedTemplateExpression\",\n tag: expression.node,\n quasi,\n span: createSpan(expression.node.span.start, quasi.span.end)\n },\n parenthesized: false\n };\n continue;\n }\n\n break;\n }\n\n const token = this.currentToken();\n if (\n token.type === \"punctuator\" &&\n (token.value === \"++\" || token.value === \"--\") &&\n token.start.line === expression.node.span.end.line\n ) {\n this.index += 1;\n const target = this.toUpdateTarget(expression.node);\n return {\n node: {\n type: \"UpdateExpression\",\n operator: token.value,\n prefix: false,\n argument: target,\n span: createSpan(expression.node.span.start, token.end)\n },\n parenthesized: false\n };\n }\n\n return expression;\n }\n\n private parsePrimaryExpression(): ParsedExpression {\n const token = this.currentToken();\n\n if (token.type === \"keyword\" && token.value === \"this\") {\n this.index += 1;\n return {\n node: {\n type: \"ThisExpression\",\n span: createTokenSpan(token)\n },\n parenthesized: false\n };\n }\n\n if (\n (token.type === \"keyword\" && token.value === \"function\") ||\n this.isAsyncFunctionDeclarationStart()\n ) {\n return {\n node: this.parseFunctionExpression(),\n parenthesized: false\n };\n }\n\n if (isNewToken(token)) {\n return this.parseNewExpression();\n }\n\n if (isIdentifierLikeToken(token)) {\n assertAllowedIdentifierReference(token);\n this.index += 1;\n return {\n node: createIdentifier(token),\n parenthesized: false\n };\n }\n\n if (token.type === \"numeric\") {\n this.index += 1;\n return {\n node: createNumericLiteral(token),\n parenthesized: false\n };\n }\n\n if (token.type === \"string\") {\n this.index += 1;\n return {\n node: createStringLiteral(token),\n parenthesized: false\n };\n }\n\n if (token.type === \"regex\") {\n this.index += 1;\n return {\n node: createRegexLiteral(token, this.compilation),\n parenthesized: false\n };\n }\n\n if (token.type === \"template\") {\n this.index += 1;\n return {\n node: createTemplateLiteral(token, { allowMalformedEscapes: false }, this.compilation),\n parenthesized: false\n };\n }\n\n if (token.type === \"keyword\") {\n if (this.isImportMetaStart()) {\n return {\n node: this.parseImportMeta(),\n parenthesized: false\n };\n }\n\n this.index += 1;\n return {\n node: createKeywordLiteral(token),\n parenthesized: false\n };\n }\n\n if (token.type === \"punctuator\" && token.value === \"(\") {\n const start = this.expectPunctuator(\"(\");\n const expression = this.parseExpression({ allowSequence: true });\n const end = this.expectPunctuator(\")\");\n expression.node.span = createSpan(start.start, end.end);\n return {\n node: expression.node,\n parenthesized: true\n };\n }\n\n if (token.type === \"punctuator\" && token.value === \"[\") {\n return {\n node: this.parseArrayExpression(),\n parenthesized: false\n };\n }\n\n if (token.type === \"punctuator\" && token.value === \"{\") {\n return {\n node: this.parseObjectExpression(),\n parenthesized: false\n };\n }\n\n throw unexpectedTokenError(token);\n }\n\n private parseNewExpression(): ParsedExpression {\n const newToken = this.currentToken();\n this.index += 1;\n\n if (this.consumePunctuator(\".\") !== undefined) {\n throw new DisallowedSyntaxError(newToken.value, newToken.start);\n }\n\n let callee = this.parsePrimaryExpression();\n while (true) {\n if (this.consumePunctuator(\".\") !== undefined) {\n const property = this.parseIdentifierName();\n callee = {\n node: {\n type: \"MemberExpression\",\n computed: false,\n object: callee.node,\n optional: false,\n property,\n span: createSpan(callee.node.span.start, property.span.end)\n },\n parenthesized: false\n };\n continue;\n }\n\n if (this.consumePunctuator(\"[\") !== undefined) {\n const property = this.parseExpression({ allowSequence: true });\n const end = this.expectPunctuator(\"]\");\n callee = {\n node: {\n type: \"MemberExpression\",\n computed: true,\n object: callee.node,\n optional: false,\n property: property.node,\n span: createSpan(callee.node.span.start, end.end)\n },\n parenthesized: false\n };\n continue;\n }\n\n break;\n }\n\n this.expectPunctuator(\"(\");\n const args = this.parseArguments();\n const end = this.previousToken();\n\n return {\n node: {\n type: \"NewExpression\",\n arguments: args,\n callee: callee.node,\n span: createSpan(newToken.start, end.end)\n },\n parenthesized: false\n };\n }\n\n private parseFunctionExpression(): FunctionExpression {\n const asyncToken = this.consumeKeyword(\"async\");\n const functionToken = this.expectKeyword(\"function\");\n const generatorToken = this.consumePunctuator(\"*\");\n if (asyncToken !== undefined && generatorToken !== undefined) {\n throw new Error(\n `async function* is not supported at line ${asyncToken.start.line}, column ${asyncToken.start.column}.`\n );\n }\n const id = isIdentifierLikeToken(this.currentToken())\n ? this.parseBindingIdentifier()\n : undefined;\n const params = this.withScope(() => {\n const parsedParams = this.parseArrowParameters();\n for (const param of parsedParams) {\n for (const identifier of boundIdentifiers(param)) {\n this.declareBinding(identifier);\n }\n }\n return parsedParams;\n });\n const generator = generatorToken !== undefined;\n const body = this.withFunctionContext(generator, () => this.parseBlockStatement(params));\n\n return {\n type: \"FunctionExpression\",\n async: asyncToken !== undefined,\n body,\n generator,\n id,\n params,\n span: createSpan(asyncToken?.start ?? functionToken.start, body.span.end)\n };\n }\n\n private parseArrayExpression(): ArrayExpression {\n const start = this.expectPunctuator(\"[\");\n const elements: Array<Expression | SpreadElement> = [];\n\n const emptyEnd = this.consumePunctuator(\"]\");\n if (emptyEnd !== undefined) {\n return {\n type: \"ArrayExpression\",\n elements,\n span: createSpan(start.start, emptyEnd.end)\n };\n }\n\n while (true) {\n if (this.consumePunctuator(\",\") !== undefined) {\n const comma = this.previousToken();\n elements.push({\n type: \"UndefinedLiteral\",\n raw: \"undefined\",\n value: undefined,\n elision: true,\n span: createSpan(comma.start, comma.end)\n });\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"]\") {\n break;\n }\n continue;\n }\n\n if (this.consumePunctuator(\"...\") !== undefined) {\n const spreadStart = this.previousToken();\n const argument = this.parseExpression();\n elements.push({\n type: \"SpreadElement\",\n argument: argument.node,\n span: createSpan(spreadStart.start, argument.node.span.end)\n });\n } else {\n elements.push(this.parseExpression().node);\n }\n\n if (this.consumePunctuator(\",\") !== undefined) {\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"]\") {\n break;\n }\n continue;\n }\n\n break;\n }\n\n const end = this.expectPunctuator(\"]\");\n return {\n type: \"ArrayExpression\",\n elements,\n span: createSpan(start.start, end.end)\n };\n }\n\n private parseObjectExpression(): ObjectExpression {\n const start = this.expectPunctuator(\"{\");\n const properties: Array<Property | SpreadElement> = [];\n\n const emptyEnd = this.consumePunctuator(\"}\");\n if (emptyEnd !== undefined) {\n return {\n type: \"ObjectExpression\",\n properties,\n span: createSpan(start.start, emptyEnd.end)\n };\n }\n\n while (true) {\n if (this.consumePunctuator(\"...\") !== undefined) {\n const spreadStart = this.previousToken();\n const argument = this.parseExpression();\n properties.push({\n type: \"SpreadElement\",\n argument: argument.node,\n span: createSpan(spreadStart.start, argument.node.span.end)\n });\n } else {\n properties.push(this.parseObjectProperty());\n }\n\n if (this.consumePunctuator(\",\") !== undefined) {\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"}\") {\n break;\n }\n continue;\n }\n\n break;\n }\n\n const end = this.expectPunctuator(\"}\");\n return {\n type: \"ObjectExpression\",\n properties,\n span: createSpan(start.start, end.end)\n };\n }\n\n private parseObjectProperty(): Property {\n const generatorToken =\n this.currentToken().type === \"punctuator\" && this.currentToken().value === \"*\"\n ? this.currentToken()\n : this.currentToken().type === \"keyword\" &&\n this.currentToken().value === \"async\" &&\n this.peekToken(1).type === \"punctuator\" &&\n this.peekToken(1).value === \"*\"\n ? this.peekToken(1)\n : undefined;\n if (generatorToken !== undefined) {\n throw new Error(\n `Generator shorthand methods are not supported at line ${generatorToken.start.line}, column ${generatorToken.start.column}.`\n );\n }\n\n if (\n this.currentToken().type === \"identifier\" &&\n (this.currentToken().value === \"get\" || this.currentToken().value === \"set\") &&\n this.isObjectMethodStart()\n ) {\n const token = this.currentToken();\n const syntax = token.value === \"get\" ? \"Getter\" : \"Setter\";\n throw new Error(\n `${syntax} shorthand methods are not supported at line ${token.start.line}, column ${token.start.column}.`\n );\n }\n\n const modifierToken = this.currentToken();\n const asyncToken =\n modifierToken.type === \"keyword\" &&\n modifierToken.value === \"async\" &&\n modifierToken.end.offset - modifierToken.start.offset === modifierToken.value.length &&\n this.isObjectMethodStart() &&\n !hasLineBreakBetween(modifierToken, this.peekToken(1))\n ? modifierToken\n : undefined;\n if (asyncToken !== undefined) {\n this.index += 1;\n }\n\n if (this.consumePunctuator(\"[\") !== undefined) {\n const propertyStart = this.previousToken();\n const key = this.parseExpression();\n this.expectPunctuator(\"]\");\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"(\") {\n const value = this.parseObjectMethod(asyncToken, propertyStart.start);\n return {\n type: \"Property\",\n computed: true,\n shorthand: false,\n key: key.node,\n value,\n span: createSpan(asyncToken?.start ?? propertyStart.start, value.span.end)\n };\n }\n this.expectPunctuator(\":\");\n const value = this.parseExpression();\n return {\n type: \"Property\",\n computed: true,\n shorthand: false,\n key: key.node,\n value: value.node,\n span: createSpan(propertyStart.start, value.node.span.end)\n };\n }\n\n const token = this.currentToken();\n if (\n isIdentifierLikeToken(token) ||\n (token.type === \"keyword\" &&\n this.peekToken(1).type === \"punctuator\" &&\n this.peekToken(1).value === \"(\")\n ) {\n this.index += 1;\n const key = createIdentifier(token);\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"(\") {\n const value = this.parseObjectMethod(asyncToken, key.span.start);\n return {\n type: \"Property\",\n computed: false,\n shorthand: false,\n key,\n value,\n span: createSpan(asyncToken?.start ?? key.span.start, value.span.end)\n };\n }\n if (this.consumePunctuator(\":\") === undefined) {\n assertAllowedIdentifierReference(token);\n return {\n type: \"Property\",\n computed: false,\n shorthand: true,\n key,\n value: createIdentifier(token),\n span: key.span\n };\n }\n const value = this.parseExpression();\n return {\n type: \"Property\",\n computed: false,\n shorthand: false,\n key,\n value: value.node,\n span: createSpan(key.span.start, value.node.span.end)\n };\n }\n\n if (isLiteralPropertyKey(token)) {\n this.index += 1;\n const key = createLiteralFromToken(token);\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"(\") {\n const value = this.parseObjectMethod(asyncToken, key.span.start);\n return {\n type: \"Property\",\n computed: false,\n shorthand: false,\n key,\n value,\n span: createSpan(asyncToken?.start ?? key.span.start, value.span.end)\n };\n }\n this.expectPunctuator(\":\");\n const value = this.parseExpression();\n return {\n type: \"Property\",\n computed: false,\n shorthand: false,\n key,\n value: value.node,\n span: createSpan(key.span.start, value.node.span.end)\n };\n }\n\n throw unexpectedTokenError(token);\n }\n\n private isObjectMethodStart(): boolean {\n const propertyToken = this.peekToken(1);\n if (propertyToken.type === \"punctuator\" && propertyToken.value === \"[\") {\n let depth = 0;\n let offset = 1;\n while (true) {\n const token = this.peekToken(offset);\n if (token.type === \"eof\") {\n return false;\n }\n if (token.type === \"punctuator\" && token.value === \"[\") {\n depth += 1;\n } else if (token.type === \"punctuator\" && token.value === \"]\") {\n depth -= 1;\n if (depth === 0) {\n const next = this.peekToken(offset + 1);\n return next.type === \"punctuator\" && next.value === \"(\";\n }\n }\n offset += 1;\n }\n }\n return (\n (propertyToken.type === \"identifier\" ||\n propertyToken.type === \"keyword\" ||\n propertyToken.type === \"numeric\" ||\n propertyToken.type === \"string\") &&\n this.peekToken(2).type === \"punctuator\" &&\n this.peekToken(2).value === \"(\"\n );\n }\n\n private parseObjectMethod(\n asyncToken: Token | undefined,\n methodStart: Position\n ): FunctionExpression {\n const params = this.withScope(() => {\n const parsedParams = this.parseArrowParameters();\n for (const param of parsedParams) {\n for (const identifier of boundIdentifiers(param)) {\n this.declareBinding(identifier);\n }\n }\n return parsedParams;\n });\n const body = this.withFunctionContext(false, () => this.parseBlockStatement(params));\n\n return {\n type: \"FunctionExpression\",\n async: asyncToken !== undefined,\n body,\n generator: false,\n id: undefined,\n method: true,\n params,\n span: createSpan(asyncToken?.start ?? methodStart, body.span.end)\n };\n }\n\n private parseIdentifierName(): Identifier {\n const token = this.currentToken();\n if (token.type !== \"identifier\" && token.type !== \"keyword\") {\n throw unexpectedTokenError(token);\n }\n this.index += 1;\n return createIdentifierName(token);\n }\n\n private parseArguments(): Array<Expression | SpreadElement> {\n const args: Array<Expression | SpreadElement> = [];\n\n const emptyEnd = this.consumePunctuator(\")\");\n if (emptyEnd !== undefined) {\n return args;\n }\n\n while (true) {\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \",\") {\n throw unexpectedTokenError(this.currentToken());\n }\n\n if (this.consumePunctuator(\"...\") !== undefined) {\n const spreadStart = this.previousToken();\n const argument = this.parseExpression();\n args.push({\n type: \"SpreadElement\",\n argument: argument.node,\n span: createSpan(spreadStart.start, argument.node.span.end)\n });\n } else {\n args.push(this.parseExpression().node);\n }\n\n if (this.consumePunctuator(\",\") !== undefined) {\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \")\") {\n break;\n }\n continue;\n }\n\n break;\n }\n\n this.expectPunctuator(\")\");\n return args;\n }\n\n private createCallExpression(callee: Expression, optional: boolean): CallExpression {\n const args = this.parseArguments();\n const end = this.previousToken();\n return {\n type: \"CallExpression\",\n arguments: args,\n callee,\n optional,\n span: createSpan(callee.span.start, end.end)\n };\n }\n\n private parseLogicalExpression(\n parseOperand: () => ParsedExpression,\n operator: Exclude<LogicalOperator, \"??\">\n ): ParsedExpression {\n let left = parseOperand();\n\n while (this.consumePunctuator(operator) !== undefined) {\n const right = parseOperand();\n left = {\n node: {\n type: \"LogicalExpression\",\n operator,\n left: left.node,\n right: right.node,\n span: createSpan(left.node.span.start, right.node.span.end)\n },\n parenthesized: false\n };\n }\n\n return left;\n }\n\n private parseBinaryExpression(\n parseOperand: () => ParsedExpression,\n operators: ReadonlySet<BinaryOperator>\n ): ParsedExpression {\n let left = parseOperand();\n\n while (true) {\n const token = this.currentToken();\n if (!operators.has(token.value as BinaryOperator)) {\n return left;\n }\n\n this.index += 1;\n const right = parseOperand();\n left = {\n node: {\n type: \"BinaryExpression\",\n operator: token.value as BinaryOperator,\n left: left.node,\n right: right.node,\n span: createSpan(left.node.span.start, right.node.span.end)\n },\n parenthesized: false\n };\n }\n }\n\n private assertNullishOperand(expression: ParsedExpression): void {\n if (\n !expression.parenthesized &&\n expression.node.type === \"LogicalExpression\" &&\n (expression.node.operator === \"&&\" || expression.node.operator === \"||\")\n ) {\n throw new Error(\n `Cannot mix '??' with '&&' or '||' without parentheses at line ${expression.node.right.span.start.line}, column ${expression.node.right.span.start.column}.`\n );\n }\n }\n\n private toAssignmentTarget(node: Expression): AssignmentTarget {\n if (node.type === \"Identifier\") {\n return node;\n }\n\n if (node.type === \"MetaProperty\" || (node.type === \"MemberExpression\" && !node.optional)) {\n return node;\n }\n\n if (node.type === \"ArrayExpression\") {\n return this.arrayExpressionToPattern(node);\n }\n\n if (node.type === \"ObjectExpression\") {\n return this.objectExpressionToPattern(node);\n }\n\n throw invalidAssignmentTargetError(node.span.start);\n }\n\n private toUpdateTarget(node: Expression): UpdateTarget {\n if (node.type === \"Identifier\") {\n return node;\n }\n\n if (node.type === \"MemberExpression\" && !node.optional) {\n return node;\n }\n\n throw new Error(\n `Invalid update target at line ${node.span.start.line}, column ${node.span.start.column}.`\n );\n }\n\n private arrayExpressionToPattern(node: ArrayExpression): ArrayPattern {\n const elements = node.elements.map((element, index) => {\n if (element.type === \"UndefinedLiteral\" && element.elision === true) {\n return null;\n }\n const patternElement = this.toArrayPatternElement(element);\n if (patternElement.type === \"RestElement\" && index < node.elements.length - 1) {\n const nextElement = node.elements[index + 1]!;\n throw new Error(\n `Rest element must be the last element in an array pattern at line ${nextElement.span.start.line}, column ${nextElement.span.start.column}.`\n );\n }\n return patternElement;\n });\n\n return {\n type: \"ArrayPattern\",\n elements,\n span: node.span\n };\n }\n\n private toArrayPatternElement(\n element: Expression | SpreadElement\n ):\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement {\n if (element.type === \"SpreadElement\") {\n const argument = this.toPatternTarget(this.toAssignmentTarget(element.argument));\n return {\n type: \"RestElement\",\n argument,\n span: element.span\n };\n }\n\n if (element.type === \"AssignmentExpression\" && element.operator === \"=\") {\n return {\n type: \"AssignmentPattern\",\n left: this.toPatternTarget(element.left),\n right: element.right,\n span: element.span\n };\n }\n\n return this.toPatternTarget(this.toAssignmentTarget(element));\n }\n\n private objectExpressionToPattern(node: ObjectExpression): ObjectPattern {\n const properties: ObjectPattern[\"properties\"] = [];\n let restElement: RestElement | undefined;\n\n for (const property of node.properties) {\n const patternProperty = this.toObjectPatternProperty(property);\n if (patternProperty.type === \"RestElement\") {\n if (restElement !== undefined) {\n throw new Error(\n `Object pattern can contain only one rest element at line ${patternProperty.span.start.line}, column ${patternProperty.span.start.column}.`\n );\n }\n restElement = patternProperty;\n } else if (restElement !== undefined) {\n throw new Error(\n `Rest element must be the last property in an object pattern at line ${patternProperty.span.start.line}, column ${patternProperty.span.start.column}.`\n );\n }\n properties.push(patternProperty);\n }\n\n return {\n type: \"ObjectPattern\",\n properties,\n span: node.span\n };\n }\n\n private toObjectPatternProperty(\n property: Property | SpreadElement\n ): AssignmentProperty | RestElement {\n if (property.type === \"SpreadElement\") {\n if (property.argument.type !== \"Identifier\") {\n throw new Error(\n `Object rest element must bind to an identifier at line ${property.argument.span.start.line}, column ${property.argument.span.start.column}.`\n );\n }\n\n return {\n type: \"RestElement\",\n argument: property.argument,\n span: property.span\n };\n }\n\n const value =\n property.shorthand && property.value.type === \"Identifier\"\n ? property.value\n : this.toObjectPropertyValue(property.value);\n\n return {\n type: \"AssignmentProperty\",\n computed: property.computed,\n shorthand: property.shorthand,\n key: property.key,\n value,\n span: property.span\n };\n }\n\n private toObjectPropertyValue(\n value: Expression\n ): AssignmentPattern | ArrayPattern | Identifier | MemberExpression | ObjectPattern {\n if (value.type === \"AssignmentExpression\" && value.operator === \"=\") {\n return {\n type: \"AssignmentPattern\",\n left: this.toPatternTarget(value.left),\n right: value.right,\n span: value.span\n };\n }\n\n return this.toPatternTarget(this.toAssignmentTarget(value));\n }\n\n private isPatternAssignmentStart(startIndex: number): boolean {\n const startToken = this.tokens[startIndex];\n if (\n startToken?.type !== \"punctuator\" ||\n (startToken.value !== \"[\" && startToken.value !== \"{\")\n ) {\n return false;\n }\n\n const stack: string[] = [];\n for (let index = startIndex; index < this.tokens.length; index += 1) {\n const token = this.tokens[index];\n if (token.type !== \"punctuator\") {\n continue;\n }\n\n if (token.value === \"(\" || token.value === \"[\" || token.value === \"{\") {\n stack.push(token.value);\n continue;\n }\n\n if (token.value === \")\" || token.value === \"]\" || token.value === \"}\") {\n const expected = matchingOpeningPunctuator(token.value);\n if (stack[stack.length - 1] === expected) {\n stack.pop();\n }\n\n if (stack.length === 0) {\n return (\n this.tokens[index + 1]?.type === \"punctuator\" && this.tokens[index + 1]?.value === \"=\"\n );\n }\n }\n }\n\n return false;\n }\n\n private isSingleParamArrowFunction(): boolean {\n const token = this.currentToken();\n if (!isIdentifierLikeToken(token) || this.peekToken(1).value !== \"=>\") {\n return false;\n }\n\n const arrowToken = this.peekToken(1);\n if (hasLineBreakBetween(token, arrowToken)) {\n throw new Error(\n `Unexpected line break before '=>' at line ${arrowToken.start.line}, column ${arrowToken.start.column}.`\n );\n }\n\n return true;\n }\n\n private isAsyncArrowWithSingleParam(): boolean {\n const token = this.currentToken();\n if (\n token.type !== \"keyword\" ||\n token.value !== \"async\" ||\n this.peekToken(1).type !== \"identifier\" ||\n this.peekToken(2).value !== \"=>\"\n ) {\n return false;\n }\n\n const paramToken = this.peekToken(1);\n if (hasLineBreakBetween(token, paramToken)) {\n throw new Error(\n `Unexpected line break after 'async' at line ${paramToken.start.line}, column ${paramToken.start.column}.`\n );\n }\n\n const arrowToken = this.peekToken(2);\n if (hasLineBreakBetween(paramToken, arrowToken)) {\n throw new Error(\n `Unexpected line break before '=>' at line ${arrowToken.start.line}, column ${arrowToken.start.column}.`\n );\n }\n\n return true;\n }\n\n private isParenthesizedArrowFunction(): boolean {\n return this.findArrowFromParenthesizedParams(this.index) !== undefined;\n }\n\n private isAsyncArrowWithParenthesizedParams(): boolean {\n const token = this.currentToken();\n if (token.type !== \"keyword\" || token.value !== \"async\") {\n return false;\n }\n\n const nextToken = this.peekToken(1);\n const arrowIndex = this.findArrowFromParenthesizedParams(this.index + 1);\n if (arrowIndex === undefined) {\n return false;\n }\n\n if (hasLineBreakBetween(token, nextToken)) {\n throw new Error(\n `Unexpected line break after 'async' at line ${nextToken.start.line}, column ${nextToken.start.column}.`\n );\n }\n\n return true;\n }\n\n private findArrowFromParenthesizedParams(startIndex: number): number | undefined {\n const startToken = this.tokens[startIndex];\n if (startToken?.type !== \"punctuator\" || startToken.value !== \"(\") {\n return undefined;\n }\n\n let depth = 0;\n for (let index = startIndex; index < this.tokens.length; index += 1) {\n const token = this.tokens[index];\n if (token.type !== \"punctuator\") {\n continue;\n }\n\n if (token.value === \"(\") {\n depth += 1;\n continue;\n }\n\n if (token.value === \")\") {\n depth -= 1;\n if (depth === 0) {\n const arrowToken = this.tokens[index + 1];\n if (arrowToken?.value !== \"=>\") {\n return undefined;\n }\n\n if (hasLineBreakBetween(token, arrowToken)) {\n throw new Error(\n `Unexpected line break before '=>' at line ${arrowToken.start.line}, column ${arrowToken.start.column}.`\n );\n }\n\n return index + 1;\n }\n }\n }\n\n return undefined;\n }\n\n private findTopLevelForIterationOperator(startIndex: number): Token | undefined {\n let depth = 0;\n let previousToken: Token | undefined;\n\n for (let index = startIndex; index < this.tokens.length; index += 1) {\n const token = this.tokens[index];\n if (token.type === \"punctuator\") {\n if (token.value === \"(\" || token.value === \"[\" || token.value === \"{\") {\n depth += 1;\n } else if (token.value === \")\" || token.value === \"]\" || token.value === \"}\") {\n if (depth === 0 && token.value === \")\") {\n return undefined;\n }\n depth -= 1;\n } else if (depth === 0 && token.value === \";\") {\n return undefined;\n }\n }\n\n if (\n depth === 0 &&\n token.type === \"keyword\" &&\n (token.value === \"of\" || token.value === \"in\") &&\n previousToken?.value !== \".\" &&\n previousToken?.value !== \"?.\"\n ) {\n return token;\n }\n\n previousToken = token;\n }\n\n return undefined;\n }\n\n private shouldParseTopLevelStatement(): boolean {\n const token = this.currentToken();\n if (this.isAsyncFunctionDeclarationStart()) {\n return true;\n }\n if (token.type === \"keyword\" && TOP_LEVEL_STATEMENT_KEYWORDS.has(token.value)) {\n if (token.value === \"import\" && this.isImportMetaStart()) {\n return false;\n }\n return true;\n }\n\n return (\n token.type === \"identifier\" &&\n (token.value === \"switch\" ||\n token.value === \"var\" ||\n (this.peekToken(1).type === \"punctuator\" && this.peekToken(1).value === \":\"))\n );\n }\n\n private isAsyncFunctionDeclarationStart(): boolean {\n const token = this.currentToken();\n const next = this.peekToken(1);\n return (\n token.type === \"keyword\" &&\n token.value === \"async\" &&\n next.type === \"keyword\" &&\n next.value === \"function\" &&\n !hasLineBreakBetween(token, next)\n );\n }\n\n private assertAllowedStatementStart(token: Token): void {\n if (this.isExportToken(token)) {\n throw new DisallowedSyntaxError(\"export\", token.start);\n }\n\n if (\n token.type === \"identifier\" &&\n this.peekToken(1).type === \"punctuator\" &&\n this.peekToken(1).value === \":\"\n ) {\n throw new DisallowedSyntaxError(\"label\", token.start);\n }\n }\n\n private consumeControlLabel(token: Token): Token | undefined {\n if (\n this.currentToken().type === \"identifier\" &&\n !hasLineBreakBetween(token, this.currentToken())\n ) {\n const label = this.currentToken();\n this.index += 1;\n return label;\n }\n\n return undefined;\n }\n\n private hasReturnArgument(returnToken: Token, nextToken: Token): boolean {\n return !(\n hasLineBreakBetween(returnToken, nextToken) ||\n (nextToken.type === \"punctuator\" && (nextToken.value === \";\" || nextToken.value === \"}\")) ||\n nextToken.type === \"eof\"\n );\n }\n\n private withFunctionContext<T>(generatorBody: boolean, callback: () => T): T {\n const previousBreakableDepth = this.breakableDepth;\n const previousLoopDepth = this.loopDepth;\n const previousGeneratorBody = this.generatorBody;\n this.breakableDepth = 0;\n this.loopDepth = 0;\n this.generatorBody = generatorBody;\n try {\n return callback();\n } finally {\n this.breakableDepth = previousBreakableDepth;\n this.loopDepth = previousLoopDepth;\n this.generatorBody = previousGeneratorBody;\n }\n }\n\n private withLoopContext<T>(callback: () => T): T {\n this.breakableDepth += 1;\n this.loopDepth += 1;\n try {\n return callback();\n } finally {\n this.breakableDepth -= 1;\n this.loopDepth -= 1;\n }\n }\n\n private withBreakableContext<T>(callback: () => T): T {\n this.breakableDepth += 1;\n try {\n return callback();\n } finally {\n this.breakableDepth -= 1;\n }\n }\n\n private withScope<T>(callback: () => T, functionBody = false): T {\n const scope: ParserScope = new Map();\n if (functionBody) this.functionScopes.add(scope);\n this.scopes.push(scope);\n try {\n return callback();\n } finally {\n this.scopes.pop();\n }\n }\n\n private declarePatternBindings(pattern: ArrayPattern | Identifier | ObjectPattern): void {\n for (const identifier of boundIdentifiers(pattern)) {\n this.declareBinding(identifier);\n }\n }\n\n private declareBinding(identifier: Identifier, kind: ParserBindingKind = \"lexical\"): void {\n const scope = this.scopes[this.scopes.length - 1];\n if (scope === undefined) {\n return;\n }\n\n const existing = scope.get(identifier.name);\n const variableFunction = kind === \"function\" && this.functionScopes.has(scope);\n if (\n (existing !== undefined &&\n !(variableFunction && (existing === \"function\" || existing === \"parameter\"))) ||\n (!variableFunction && this.varNames.get(scope)?.has(identifier.name))\n ) {\n throw new Error(\n `Cannot redeclare binding '${identifier.name}' at line ${identifier.span.start.line}, column ${identifier.span.start.column}.`\n );\n }\n\n scope.set(identifier.name, kind);\n }\n\n private declareVarBinding(identifier: Identifier): void {\n for (let index = this.scopes.length - 1; index >= 0; index--) {\n const scope = this.scopes[index]!;\n const existing = scope.get(identifier.name);\n if (existing === \"lexical\" || (existing === \"function\" && !this.functionScopes.has(scope))) {\n throw new Error(\n `Cannot redeclare binding '${identifier.name}' at line ${identifier.span.start.line}, column ${identifier.span.start.column}.`\n );\n }\n let names = this.varNames.get(scope);\n if (names === undefined) {\n names = new Set();\n this.varNames.set(scope, names);\n }\n names.add(identifier.name);\n if (this.functionScopes.has(scope)) return;\n }\n }\n\n private consumePunctuator(value: string): Token | undefined {\n const token = this.currentToken();\n if (token.type !== \"punctuator\" || token.value !== value) {\n return undefined;\n }\n this.index += 1;\n return token;\n }\n\n private consumeAssignmentOperator(): AssignmentOperator | undefined {\n const token = this.currentToken();\n if (token.type !== \"punctuator\" || !isAssignmentOperator(token.value)) {\n return undefined;\n }\n\n this.index += 1;\n return token.value;\n }\n\n private expectPunctuator(value: string): Token {\n const token = this.currentToken();\n if (token.type !== \"punctuator\" || token.value !== value) {\n throw new Error(\n `Expected '${value}' at line ${token.start.line}, column ${token.start.column}.`\n );\n }\n this.index += 1;\n return token;\n }\n\n private consumeKeyword(value: string): Token | undefined {\n const token = this.currentToken();\n if (token.type !== \"keyword\" || token.value !== value) {\n return undefined;\n }\n this.index += 1;\n return token;\n }\n\n private expectKeyword(value: string): Token {\n const token = this.currentToken();\n if (token.type !== \"keyword\" || token.value !== value) {\n throw new Error(\n `Expected '${value}' at line ${token.start.line}, column ${token.start.column}.`\n );\n }\n this.index += 1;\n return token;\n }\n\n private expectEof(): void {\n const token = this.currentToken();\n if (token.type !== \"eof\") {\n throw unexpectedTokenError(token);\n }\n }\n\n private currentToken(): Token {\n return this.tokens[this.index] ?? this.tokens[this.tokens.length - 1];\n }\n\n private peekToken(offset: number): Token {\n return this.tokens[this.index + offset] ?? this.tokens[this.tokens.length - 1];\n }\n\n private previousToken(): Token {\n return this.tokens[this.index - 1] ?? this.tokens[0];\n }\n\n private isExportToken(token: Token): boolean {\n return token.value === \"export\";\n }\n\n private isImportMetaStart(): boolean {\n return isImportMetaTokenSequence(this.currentToken(), this.peekToken(1), this.peekToken(2));\n }\n\n private parseImportMeta(): MetaProperty {\n const importToken = this.currentToken();\n if (!this.isImportMetaStart()) {\n throw unexpectedTokenError(importToken);\n }\n\n this.index += 3;\n return createImportMeta(importToken, this.previousToken());\n }\n\n private toPatternTarget(target: AssignmentTarget): PatternTarget {\n if (target.type === \"MetaProperty\") {\n throw new DisallowedSyntaxError(\"import.meta assignment\", target.span.start);\n }\n\n return target;\n }\n}\n\nfunction createIdentifier(token: Token): Identifier {\n return {\n type: \"Identifier\",\n name: token.value,\n span: createTokenSpan(token)\n };\n}\n\nfunction createIdentifierName(token: Token): Identifier {\n return {\n type: \"Identifier\",\n name: token.value,\n span: createTokenSpan(token)\n };\n}\n\nfunction createLoopLabelFields(labels: string[] | undefined): {\n label?: string;\n labels?: string[];\n} {\n if (labels === undefined || labels.length === 0) {\n return {};\n }\n\n const label = labels[labels.length - 1]!;\n return labels.length === 1 ? { label } : { label, labels };\n}\n\nfunction throwIfImportMetaAssignment(node: ParseResult | Module): void {\n const importMetaAssignment = findImportMetaAssignmentTarget(node);\n if (importMetaAssignment !== undefined) {\n throw new DisallowedSyntaxError(\"import.meta assignment\", importMetaAssignment.start);\n }\n}\n\nfunction findImportMetaAssignmentTarget(node: ParseResult | Module): SourceSpan | undefined {\n return findImportMetaAssignmentInNode(node);\n}\n\nfunction findImportMetaAssignmentInNode(\n node: Expression | Statement | Module\n): SourceSpan | undefined {\n switch (node.type) {\n case \"Module\":\n return findImportMetaAssignmentInList(node.body);\n case \"AssignmentExpression\":\n if (isImportMetaAssignmentTarget(node.left)) {\n return node.left.span;\n }\n return findImportMetaAssignmentInNode(node.right);\n case \"ForOfStatement\":\n if (node.left.type !== \"VariableDeclaration\" && isImportMetaAssignmentTarget(node.left)) {\n return node.left.span;\n }\n return (\n findImportMetaAssignmentInNode(node.right) ?? findImportMetaAssignmentInNode(node.body)\n );\n case \"BlockStatement\":\n return findImportMetaAssignmentInList(node.body);\n case \"ExpressionStatement\":\n return findImportMetaAssignmentInNode(node.expression);\n case \"IfStatement\":\n return (\n findImportMetaAssignmentInNode(node.test) ??\n findImportMetaAssignmentInNode(node.consequent) ??\n (node.alternate === undefined ? undefined : findImportMetaAssignmentInNode(node.alternate))\n );\n case \"ForStatement\":\n return (\n findImportMetaAssignmentInOptionalForInit(node.init) ??\n findImportMetaAssignmentInOptionalExpression(node.test) ??\n findImportMetaAssignmentInOptionalExpression(node.update) ??\n findImportMetaAssignmentInNode(node.body)\n );\n case \"WhileStatement\":\n return findImportMetaAssignmentInNode(node.test) ?? findImportMetaAssignmentInNode(node.body);\n case \"DoWhileStatement\":\n return findImportMetaAssignmentInNode(node.body) ?? findImportMetaAssignmentInNode(node.test);\n case \"TryStatement\":\n return (\n findImportMetaAssignmentInNode(node.block) ??\n (node.handler === undefined\n ? undefined\n : findImportMetaAssignmentInNode(node.handler.body)) ??\n (node.finalizer === undefined ? undefined : findImportMetaAssignmentInNode(node.finalizer))\n );\n case \"VariableDeclaration\":\n for (const declarator of node.declarations) {\n if (declarator.init !== undefined) {\n const result = findImportMetaAssignmentInNode(declarator.init);\n if (result !== undefined) {\n return result;\n }\n }\n }\n return undefined;\n case \"ReturnStatement\":\n return node.argument === undefined\n ? undefined\n : findImportMetaAssignmentInNode(node.argument);\n case \"ThrowStatement\":\n return findImportMetaAssignmentInNode(node.argument);\n case \"ArrowFunctionExpression\":\n return node.body.type === \"BlockStatement\"\n ? findImportMetaAssignmentInNode(node.body)\n : findImportMetaAssignmentInNode(node.body);\n case \"AwaitExpression\":\n return findImportMetaAssignmentInNode(node.argument);\n case \"YieldExpression\":\n return node.argument === undefined\n ? undefined\n : findImportMetaAssignmentInNode(node.argument);\n case \"ArrayExpression\":\n return findImportMetaAssignmentInList(node.elements);\n case \"ObjectExpression\":\n for (const property of node.properties) {\n const result =\n property.type === \"SpreadElement\"\n ? findImportMetaAssignmentInNode(property.argument)\n : findImportMetaAssignmentInNode(property.value);\n if (result !== undefined) {\n return result;\n }\n }\n return undefined;\n case \"UnaryExpression\":\n return findImportMetaAssignmentInNode(node.argument);\n case \"UpdateExpression\":\n if (isImportMetaReference(node.argument)) {\n return node.argument.span;\n }\n return findImportMetaAssignmentInNode(node.argument);\n case \"SequenceExpression\":\n return findImportMetaAssignmentInList(node.expressions);\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n return (\n findImportMetaAssignmentInNode(node.left) ?? findImportMetaAssignmentInNode(node.right)\n );\n case \"ConditionalExpression\":\n return (\n findImportMetaAssignmentInNode(node.test) ??\n findImportMetaAssignmentInNode(node.consequent) ??\n findImportMetaAssignmentInNode(node.alternate)\n );\n case \"MemberExpression\":\n return (\n findImportMetaAssignmentInNode(node.object) ??\n (node.computed ? findImportMetaAssignmentInNode(node.property) : undefined)\n );\n case \"CallExpression\":\n return (\n findImportMetaAssignmentInNode(node.callee) ??\n findImportMetaAssignmentInList(node.arguments)\n );\n case \"TaggedTemplateExpression\":\n return findImportMetaAssignmentInNode(node.tag) ?? findImportMetaAssignmentInNode(node.quasi);\n case \"TemplateLiteral\":\n return findImportMetaAssignmentInList(node.expressions);\n case \"BreakStatement\":\n case \"ContinueStatement\":\n case \"EmptyStatement\":\n case \"ExportDefaultDeclaration\":\n case \"ExportNamedDeclaration\":\n case \"Identifier\":\n case \"ImportDeclaration\":\n case \"BooleanLiteral\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"StringLiteral\":\n case \"ThisExpression\":\n case \"RegexLiteral\":\n case \"MetaProperty\":\n case \"UndefinedLiteral\":\n return undefined;\n }\n}\n\nfunction findImportMetaAssignmentInOptionalForInit(\n node: Expression | VariableDeclaration | undefined\n): SourceSpan | undefined {\n return node === undefined ? undefined : findImportMetaAssignmentInNode(node);\n}\n\nfunction findImportMetaAssignmentInOptionalExpression(\n node: Expression | undefined\n): SourceSpan | undefined {\n return node === undefined ? undefined : findImportMetaAssignmentInNode(node);\n}\n\nfunction findImportMetaAssignmentInList(\n nodes: ReadonlyArray<Expression | SpreadElement | Statement>\n): SourceSpan | undefined {\n for (const node of nodes) {\n const result =\n node.type === \"SpreadElement\"\n ? findImportMetaAssignmentInNode(node.argument)\n : findImportMetaAssignmentInNode(node);\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n}\n\nfunction isImportMetaAssignmentTarget(\n node: AssignmentExpression[\"left\"] | AssignmentPattern | RestElement\n): boolean {\n switch (node.type) {\n case \"MetaProperty\":\n return true;\n case \"MemberExpression\":\n return isImportMetaReference(node);\n case \"AssignmentPattern\":\n return isImportMetaAssignmentTarget(node.left);\n case \"RestElement\":\n return isImportMetaAssignmentTarget(node.argument);\n case \"ArrayPattern\":\n return node.elements.some(\n (element) => element !== null && isImportMetaAssignmentTarget(element)\n );\n case \"ObjectPattern\":\n return node.properties.some((property) =>\n isImportMetaAssignmentTarget(property.type === \"RestElement\" ? property : property.value)\n );\n case \"Identifier\":\n return false;\n }\n}\n\nfunction isImportMetaReference(node: Expression): boolean {\n if (node.type === \"MetaProperty\") {\n return true;\n }\n\n return (\n node.type === \"MemberExpression\" &&\n (isImportMetaReference(node.object) || (node.computed && isImportMetaReference(node.property)))\n );\n}\n\nfunction isAssignmentOperator(value: string): value is AssignmentOperator {\n switch (value) {\n case \"=\":\n case \"+=\":\n case \"-=\":\n case \"*=\":\n case \"/=\":\n case \"%=\":\n case \"**=\":\n case \"&=\":\n case \"|=\":\n case \"^=\":\n case \"<<=\":\n case \">>=\":\n case \">>>=\":\n case \"&&=\":\n case \"||=\":\n case \"??=\":\n return true;\n default:\n return false;\n }\n}\n\nfunction isYieldArgumentTerminator(value: string): boolean {\n return value === \";\" || value === \"}\" || value === \")\" || value === \"]\" || value === \",\";\n}\n\nfunction createNumericLiteral(token: Token): NumericLiteral {\n return {\n type: \"NumericLiteral\",\n raw: token.value,\n value: Number(token.value.replaceAll(\"_\", \"\")),\n span: createTokenSpan(token)\n };\n}\n\nfunction createStringLiteral(token: Token): StringLiteral {\n return {\n type: \"StringLiteral\",\n raw: token.value,\n value: decodeEscapedText(token.value.slice(1, -1)),\n span: createTokenSpan(token)\n };\n}\n\nfunction createRegexLiteral(token: Token, parent?: CompileScope): RegexLiteral {\n const compilation = new CompileScope(parent?.owner);\n const guard = new RegexCompileGuard(compilation);\n const lastSlash = token.value.lastIndexOf(\"/\");\n try {\n guard.checkLength(Math.max(0, lastSlash - 1));\n guard.checkLength(token.value.length - lastSlash - 1, true);\n guard.allocate(Math.max(0, token.value.length - 2));\n guard.work(Math.max(0, token.value.length - 2));\n parseRegex(token.value.slice(1, lastSlash), token.value.slice(lastSlash + 1), compilation);\n } catch (error) {\n if (error instanceof SyntaxError) {\n const relativePosition = readRegexErrorPosition(error.message);\n if (relativePosition !== undefined) {\n const flagColumn = token.start.column + lastSlash + 1 + relativePosition;\n throw new Error(\n `${error.message.replace(/ at position \\d+$/, \"\")} at line ${token.start.line}, column ${flagColumn}.`\n );\n }\n }\n throw error;\n } finally {\n guard.close();\n compilation.dispose();\n }\n return {\n type: \"RegexLiteral\",\n raw: token.value,\n span: createTokenSpan(token)\n };\n}\n\nfunction readRegexErrorPosition(message: string): number | undefined {\n const marker = \" at position \";\n const markerIndex = message.lastIndexOf(marker);\n if (markerIndex < 0) return undefined;\n const position = Number(message.slice(markerIndex + marker.length));\n return Number.isSafeInteger(position) && position >= 0 ? position : undefined;\n}\n\nfunction createKeywordLiteral(token: Token): BooleanLiteral | NullLiteral | UndefinedLiteral {\n if (token.value === \"true\" || token.value === \"false\") {\n return {\n type: \"BooleanLiteral\",\n raw: token.value,\n value: token.value === \"true\",\n span: createTokenSpan(token)\n };\n }\n\n if (token.value === \"null\") {\n return {\n type: \"NullLiteral\",\n raw: \"null\",\n value: null,\n span: createTokenSpan(token)\n };\n }\n\n if (token.value === \"undefined\") {\n return {\n type: \"UndefinedLiteral\",\n raw: \"undefined\",\n value: undefined,\n span: createTokenSpan(token)\n };\n }\n\n throw unexpectedTokenError(token);\n}\n\nfunction createLiteralFromToken(\n token: Token\n): BooleanLiteral | NullLiteral | NumericLiteral | StringLiteral | UndefinedLiteral {\n if (token.type === \"numeric\") {\n return createNumericLiteral(token);\n }\n\n if (token.type === \"string\") {\n return createStringLiteral(token);\n }\n\n return createKeywordLiteral(token);\n}\n\nfunction createTemplateLiteral(\n token: Token,\n options: { allowMalformedEscapes: boolean } = { allowMalformedEscapes: false },\n compilation?: CompileScope\n): TemplateLiteral {\n const raw = token.value;\n const expressions: Expression[] = [];\n const quasis: TemplateElement[] = [];\n let cursor = 1;\n let quasiStart = 1;\n\n while (cursor < raw.length - 1) {\n const char = raw[cursor];\n\n if (char === \"\\\\\") {\n cursor = skipEscapedCharacter(raw, cursor);\n continue;\n }\n\n if (char === \"$\" && raw[cursor + 1] === \"{\") {\n quasis.push(createTemplateElement(token.start, raw, quasiStart, cursor, false, options));\n const expressionStart = cursor + 2;\n const expressionEnd = findTemplateExpressionEnd(raw, expressionStart);\n expressions.push(\n parseEmbeddedExpression(\n raw.slice(expressionStart, expressionEnd),\n positionWithinRaw(token.start, raw, expressionStart),\n compilation\n )\n );\n quasiStart = expressionEnd + 1;\n cursor = expressionEnd + 1;\n continue;\n }\n\n cursor += 1;\n }\n\n quasis.push(createTemplateElement(token.start, raw, quasiStart, raw.length - 1, true, options));\n\n return {\n type: \"TemplateLiteral\",\n expressions,\n quasis,\n span: createTokenSpan(token)\n };\n}\n\nfunction assertBareImportSpecifier(specifier: StringLiteral): void {\n if (\n specifier.value.includes(\"/\") ||\n hasInvalidImportPathDots(specifier.value) ||\n hasProtocolPrefix(specifier.value)\n ) {\n throw new Error(\n `Invalid import specifier '${specifier.value}' at line ${specifier.span.start.line}, column ${specifier.span.start.column}.`\n );\n }\n}\n\nfunction hasInvalidImportPathDots(value: string): boolean {\n const segments = value.split(\".\");\n\n if (segments.some((segment) => segment.length === 0)) {\n return true;\n }\n\n return (\n segments.length > 1 &&\n [\"js\", \"mjs\", \"cjs\", \"ts\", \"mts\", \"cts\", \"json\"].includes(segments.at(-1) ?? \"\")\n );\n}\n\nfunction hasProtocolPrefix(value: string): boolean {\n const colonIndex = value.indexOf(\":\");\n if (colonIndex <= 0) {\n return false;\n }\n\n const firstChar = value[0];\n if (firstChar === undefined || !isAsciiLetter(firstChar)) {\n return false;\n }\n\n for (let index = 1; index < colonIndex; index += 1) {\n const char = value[index];\n if (char === undefined) {\n return false;\n }\n if (\n isAsciiLetter(char) ||\n isDecimalDigit(char) ||\n char === \"+\" ||\n char === \"-\" ||\n char === \".\"\n ) {\n continue;\n }\n return false;\n }\n\n return true;\n}\n\nfunction isAsciiLetter(value: string): boolean {\n const code = value.charCodeAt(0);\n return (code >= 65 && code <= 90) || (code >= 97 && code <= 122);\n}\n\nfunction isDecimalDigit(value: string): boolean {\n const code = value.charCodeAt(0);\n return code >= 48 && code <= 57;\n}\n\nfunction isHexDigit(value: string): boolean {\n return isDecimalDigit(value) || (value >= \"a\" && value <= \"f\") || (value >= \"A\" && value <= \"F\");\n}\n\nfunction isOctalDigit(value: string): boolean {\n return value >= \"0\" && value <= \"7\";\n}\n\nfunction createTemplateElement(\n templateStart: Position,\n rawTemplate: string,\n rawStart: number,\n rawEnd: number,\n tail: boolean,\n options: { allowMalformedEscapes: boolean }\n): TemplateElement {\n const rawValue = rawTemplate.slice(rawStart, rawEnd);\n const cooked = decodeTemplateElementCooked(rawValue, options.allowMalformedEscapes);\n if (cooked.invalid !== undefined && !options.allowMalformedEscapes) {\n const position = positionWithinRaw(templateStart, rawTemplate, rawStart + cooked.invalid.index);\n throw new Error(\n `${cooked.invalid.message} at line ${position.line}, column ${position.column}.`\n );\n }\n\n return {\n type: \"TemplateElement\",\n tail,\n value: {\n raw: rawValue,\n cooked: cooked.invalid === undefined ? cooked.value : undefined\n },\n span: createSpan(\n positionWithinRaw(templateStart, rawTemplate, rawStart),\n positionWithinRaw(templateStart, rawTemplate, rawEnd)\n )\n };\n}\n\nfunction decodeTemplateElementCooked(\n value: string,\n allowMalformedEscapes: boolean\n): { invalid?: { index: number; message: string }; value?: string } {\n const normalized = normalizeTemplateLineTerminators(value);\n const invalid = findMalformedTemplateEscape(normalized);\n if (invalid !== undefined) {\n return allowMalformedEscapes ? { invalid } : { invalid };\n }\n\n return {\n value: decodeEscapedText(normalized)\n };\n}\n\nfunction findMalformedTemplateEscape(\n value: string\n): { index: number; message: string } | undefined {\n let index = 0;\n\n while (index < value.length) {\n if (value[index] !== \"\\\\\") {\n index += 1;\n continue;\n }\n\n const next = value[index + 1];\n if (next === undefined || next === \"\\n\") {\n index += 2;\n continue;\n }\n\n if (next === \"u\") {\n if (!isValidUnicodeEscape(value, index)) {\n return { index, message: \"Invalid unicode escape\" };\n }\n index += 2;\n continue;\n }\n\n if (next === \"x\") {\n const hex = value.slice(index + 2, index + 4);\n if (hex.length !== 2 || ![...hex].every(isHexDigit)) {\n return { index, message: \"Invalid hex escape\" };\n }\n index += 4;\n continue;\n }\n\n if (next === \"0\") {\n if (isDecimalDigit(value[index + 2] ?? \"\")) {\n return { index, message: \"Legacy octal escape sequences are not supported\" };\n }\n index += 2;\n continue;\n }\n\n if (isOctalDigit(next)) {\n return { index, message: \"Legacy octal escape sequences are not supported\" };\n }\n\n index += 2;\n }\n\n return undefined;\n}\n\nfunction isValidUnicodeEscape(value: string, start: number): boolean {\n let index = start + 2;\n if (value[index] === \"{\") {\n index += 1;\n const codePointStart = index;\n while (index < value.length && value[index] !== \"}\") {\n if (!isHexDigit(value[index] ?? \"\")) {\n return false;\n }\n index += 1;\n }\n\n if (index === codePointStart || value[index] !== \"}\") {\n return false;\n }\n\n return Number.parseInt(value.slice(codePointStart, index), 16) <= MAX_UNICODE_CODE_POINT;\n }\n\n const hex = value.slice(index, index + 4);\n return hex.length === 4 && [...hex].every(isHexDigit);\n}\n\nfunction findTemplateExpressionEnd(raw: string, start: number): number {\n let depth = 1;\n let index = start;\n\n while (index < raw.length - 1) {\n const char = raw[index];\n\n if (char === \"'\" || char === '\"') {\n index = skipQuotedString(raw, index, char);\n continue;\n }\n\n if (char === \"`\") {\n index = skipNestedTemplate(raw, index);\n continue;\n }\n\n if (char === \"/\" && raw[index + 1] === \"/\") {\n index = skipLineComment(raw, index);\n continue;\n }\n\n if (char === \"/\" && raw[index + 1] === \"*\") {\n index = skipBlockComment(raw, index);\n continue;\n }\n\n if (char === \"{\") {\n depth += 1;\n index += 1;\n continue;\n }\n\n if (char === \"}\") {\n depth -= 1;\n if (depth === 0) {\n return index;\n }\n index += 1;\n continue;\n }\n\n index += 1;\n }\n\n throw new Error(`Unterminated template literal at line ${1}, column ${raw.length}.`);\n}\n\nfunction skipQuotedString(raw: string, start: number, quote: string): number {\n let index = start + 1;\n\n while (index < raw.length) {\n const char = raw[index];\n if (char === \"\\\\\") {\n index = skipEscapedCharacter(raw, index);\n continue;\n }\n if (char === quote) {\n return index + 1;\n }\n index += 1;\n }\n\n return index;\n}\n\nfunction skipNestedTemplate(raw: string, start: number): number {\n let index = start + 1;\n\n while (index < raw.length) {\n const char = raw[index];\n if (char === \"\\\\\") {\n index = skipEscapedCharacter(raw, index);\n continue;\n }\n if (char === \"`\") {\n return index + 1;\n }\n if (char === \"$\" && raw[index + 1] === \"{\") {\n index = findTemplateExpressionEnd(raw, index + 2) + 1;\n continue;\n }\n index += 1;\n }\n\n return index;\n}\n\nfunction skipLineComment(raw: string, start: number): number {\n let index = start + 2;\n while (index < raw.length && raw[index] !== \"\\n\" && raw[index] !== \"\\r\") {\n index += 1;\n }\n return index;\n}\n\nfunction skipBlockComment(raw: string, start: number): number {\n let index = start + 2;\n while (index < raw.length - 1) {\n if (raw[index] === \"*\" && raw[index + 1] === \"/\") {\n return index + 2;\n }\n index += 1;\n }\n return raw.length;\n}\n\nfunction skipEscapedCharacter(raw: string, start: number): number {\n const next = raw[start + 1];\n if (next === \"\\r\") {\n if (raw[start + 2] === \"\\n\") {\n return start + 3;\n }\n return start + 2;\n }\n\n if (next === \"\\n\") {\n return start + 2;\n }\n\n return Math.min(start + 2, raw.length);\n}\n\nfunction decodeEscapedText(value: string): string {\n let decoded = \"\";\n let index = 0;\n\n while (index < value.length) {\n const char = value[index];\n if (char !== \"\\\\\") {\n decoded += char;\n index += 1;\n continue;\n }\n\n const next = value[index + 1];\n if (next === undefined) {\n decoded += \"\\\\\";\n break;\n }\n\n if (next === \"\\n\") {\n index += 2;\n continue;\n }\n\n if (next === \"\\r\") {\n if (value[index + 2] === \"\\n\") {\n index += 3;\n } else {\n index += 2;\n }\n continue;\n }\n\n if (next === \"u\") {\n const unicodeEscape = decodeUnicodeEscape(value, index);\n if (unicodeEscape !== undefined) {\n decoded += unicodeEscape.value;\n index = unicodeEscape.end;\n continue;\n }\n }\n\n if (next === \"x\") {\n const hexEscape = decodeHexEscape(value, index);\n if (hexEscape !== undefined) {\n decoded += hexEscape.value;\n index = hexEscape.end;\n continue;\n }\n }\n\n decoded += decodeEscapeCharacter(next);\n index += 2;\n }\n\n return decoded;\n}\n\nfunction normalizeTemplateLineTerminators(value: string): string {\n let normalized = \"\";\n let index = 0;\n\n while (index < value.length) {\n const char = value[index];\n if (char === \"\\r\") {\n normalized += \"\\n\";\n index += value[index + 1] === \"\\n\" ? 2 : 1;\n continue;\n }\n\n normalized += char;\n index += 1;\n }\n\n return normalized;\n}\n\nfunction decodeUnicodeEscape(\n value: string,\n start: number\n): { value: string; end: number } | undefined {\n let index = start + 2;\n if (value[index] === \"{\") {\n index += 1;\n const codePointStart = index;\n while (index < value.length && value[index] !== \"}\") {\n if (!isHexDigit(value[index] ?? \"\")) {\n return undefined;\n }\n index += 1;\n }\n\n if (index === codePointStart || value[index] !== \"}\") {\n return undefined;\n }\n\n return {\n value: String.fromCodePoint(Number.parseInt(value.slice(codePointStart, index), 16)),\n end: index + 1\n };\n }\n\n const hex = value.slice(index, index + 4);\n if (hex.length !== 4 || ![...hex].every(isHexDigit)) {\n return undefined;\n }\n\n return {\n value: String.fromCharCode(Number.parseInt(hex, 16)),\n end: index + 4\n };\n}\n\nfunction decodeHexEscape(value: string, start: number): { value: string; end: number } | undefined {\n const index = start + 2;\n const hex = value.slice(index, index + 2);\n if (hex.length !== 2 || ![...hex].every(isHexDigit)) {\n return undefined;\n }\n\n return {\n value: String.fromCharCode(Number.parseInt(hex, 16)),\n end: index + 2\n };\n}\n\nfunction parseEmbeddedExpression(\n source: string,\n base: Position,\n compilation?: CompileScope\n): Expression {\n const tokens = tokenize(source, { allowRegexLiterals: true, compilation }).map((token) => ({\n ...token,\n start: rebasePosition(token.start, base),\n end: rebasePosition(token.end, base)\n }));\n return parseExpressionTokens(tokens, compilation);\n}\n\nexport function findRegexLiteral(node: unknown): RegexLiteral | undefined {\n if (node === null || node === undefined) {\n return undefined;\n }\n\n if (Array.isArray(node)) {\n for (const value of node) {\n const match = findRegexLiteral(value);\n if (match !== undefined) {\n return match;\n }\n }\n return undefined;\n }\n\n if (typeof node !== \"object\") {\n return undefined;\n }\n\n if (\"type\" in node && node.type === \"RegexLiteral\") {\n return node as RegexLiteral;\n }\n\n for (const value of Object.values(node)) {\n const match = findRegexLiteral(value);\n if (match !== undefined) {\n return match;\n }\n }\n\n return undefined;\n}\n\nfunction decodeEscapeCharacter(char: string): string {\n if (char === \"n\") {\n return \"\\n\";\n }\n if (char === \"r\") {\n return \"\\r\";\n }\n if (char === \"t\") {\n return \"\\t\";\n }\n if (char === \"b\") {\n return \"\\b\";\n }\n if (char === \"f\") {\n return \"\\f\";\n }\n if (char === \"v\") {\n return \"\\v\";\n }\n if (char === \"0\") {\n return \"\\0\";\n }\n return char;\n}\n\nfunction positionWithinRaw(base: Position, raw: string, index: number): Position {\n let line = base.line;\n let column = base.column;\n let offset = base.offset;\n let cursor = 0;\n\n while (cursor < index) {\n const char = raw[cursor];\n\n if (char === \"\\r\") {\n cursor += 1;\n offset += 1;\n if (raw[cursor] === \"\\n\" && cursor < index) {\n cursor += 1;\n offset += 1;\n }\n line += 1;\n column = 1;\n continue;\n }\n\n cursor += 1;\n offset += 1;\n if (char === \"\\n\") {\n line += 1;\n column = 1;\n continue;\n }\n column += 1;\n }\n\n return { line, column, offset };\n}\n\nfunction rebasePosition(position: Position, base: Position): Position {\n return {\n line: base.line + position.line - 1,\n column: position.line === 1 ? base.column + position.column - 1 : position.column,\n offset: base.offset + position.offset\n };\n}\n\nfunction isLiteralPropertyKey(token: Token): boolean {\n if (token.type === \"numeric\" || token.type === \"string\") {\n return true;\n }\n\n return (\n token.type === \"keyword\" &&\n (token.value === \"true\" ||\n token.value === \"false\" ||\n token.value === \"null\" ||\n token.value === \"undefined\")\n );\n}\n\nfunction isIdentifierLikeToken(token: Token): boolean {\n return token.type === \"identifier\" || (token.type === \"keyword\" && token.value === \"async\");\n}\n\nfunction isNewToken(token: Token): boolean {\n return token.value === \"new\";\n}\n\nfunction createTokenSpan(token: Token): SourceSpan {\n return createSpan(token.start, token.end);\n}\n\nfunction assertAllowedIdentifierReference(token: Token): void {\n if (token.value === \"new\") {\n throw new DisallowedSyntaxError(token.value, token.start);\n }\n}\n\nfunction createSpan(start: Position, end: Position): SourceSpan {\n return {\n start: { ...start },\n end: { ...end }\n };\n}\n\nfunction hasLineBreakBetween(left: Token, right: Token): boolean {\n return left.end.line !== right.start.line;\n}\n\nfunction unexpectedTokenError(token: Token): Error {\n if (token.type === \"eof\") {\n return new Error(\n `Unexpected end of input at line ${token.start.line}, column ${token.start.column}.`\n );\n }\n\n return new Error(\n `Unexpected token '${token.value}' at line ${token.start.line}, column ${token.start.column}.`\n );\n}\n\nfunction invalidAssignmentTargetError(position: Position): Error {\n return new Error(\n `Invalid assignment target at line ${position.line}, column ${position.column}.`\n );\n}\n\nfunction matchingOpeningPunctuator(value: \")\" | \"]\" | \"}\"): \"(\" | \"[\" | \"{\" {\n if (value === \")\") {\n return \"(\";\n }\n\n if (value === \"]\") {\n return \"[\";\n }\n\n return \"{\";\n}\n", "import { replaceErrorStack, sandboxErrorNames, type SandboxErrorName } from \"../error/shape.js\";\nimport { types } from \"node:util\";\nimport type { Budget } from \"../interp/budget.js\";\nimport type { ParseResult } from \"../parse/parser.js\";\nimport { DUMP_FORMAT_VERSION } from \"./dump-format.js\";\nimport { MAX_DATA_DEPTH } from \"../graph-depth.js\";\nimport { validateFloat32Storage } from \"./float32array.js\";\n\nconst DEFAULT_MAX_DEPTH = MAX_DATA_DEPTH;\nconst DEFAULT_MAX_ENTRIES = 100_000;\nconst DEFAULT_MAX_STRING_LENGTH = 1_000_000;\nconst DEFAULT_MAX_DATA_SIZE = 16_000_000;\nconst TAGGED_VALUE_KINDS = new Set([\n \"arguments\",\n \"array\",\n \"fn\",\n \"generator\",\n \"host-call-side-effect\",\n \"map\",\n \"number\",\n \"object\",\n \"promise\",\n \"ref\",\n \"regex\",\n \"set\",\n \"undefined\"\n]);\n\nexport type SnapshotValidationCode =\n | \"budgetExceeded\"\n | \"danglingReference\"\n | \"duplicateId\"\n | \"invalidCycle\"\n | \"invalidState\"\n | \"invalidType\"\n | \"invalidValue\"\n | \"unknownTag\"\n | \"unsupportedVersion\";\n\nexport class SnapshotValidationError extends Error {\n readonly code: SnapshotValidationCode;\n readonly path: string;\n\n constructor(code: SnapshotValidationCode, path: string, detail: string) {\n super(`Invalid snapshot at ${path}: ${detail}`);\n this.name = \"SnapshotValidationError\";\n this.code = code;\n this.path = path;\n replaceErrorStack(this);\n }\n}\n\ntype ValidationLimits = {\n maxAggregateEntries: number;\n maxCallDepth: number;\n maxDepth: number;\n maxEntries: number;\n maxStringLength: number;\n maxDataSize: number;\n};\n\ntype ValidationState = {\n allowFunctions: boolean;\n allowUndefined: boolean;\n entries: number;\n dataSize: number;\n limits: ValidationLimits;\n validateTaggedPayloads: boolean;\n dataPropertiesOnly?: boolean;\n};\n\nexport function validateSnapshotData(value: unknown): void {\n validateGenericValue(value, \"$\", 0, {\n allowFunctions: false,\n allowUndefined: false,\n entries: 0,\n dataSize: 0,\n limits: defaultLimits(),\n validateTaggedPayloads: false,\n dataPropertiesOnly: true\n });\n}\n\nexport function validateDumpEnvelope(\n snapshot: unknown\n): asserts snapshot is Record<string, unknown> {\n const limits = defaultLimits();\n const root = requireRecord(snapshot, \"$\");\n if (root.version !== DUMP_FORMAT_VERSION) {\n fail(\"unsupportedVersion\", \"$.version\", `expected ${DUMP_FORMAT_VERSION}`);\n }\n requireNonEmptyString(root.sourceHash, \"$.sourceHash\", limits);\n const replayError = Object.getOwnPropertyDescriptor(root, \"replayError\");\n if (replayError !== undefined) {\n if (!(\"value\" in replayError)) fail(\"invalidType\", \"$.replayError\", \"must be a data property\");\n const reason = requireNonEmptyString(replayError.value, \"$.replayError\", limits);\n fail(\"invalidState\", \"$.replayError\", `snapshot is not replayable: ${reason}`);\n }\n const state = {\n allowFunctions: true,\n allowUndefined: true,\n entries: 0,\n dataSize: 0,\n limits,\n validateTaggedPayloads: false\n };\n validateGenericValue(root, \"$\", 0, state);\n validateRunSnapshotState(root, state);\n validateDumpHeap(root, state);\n}\n\nfunction validateDumpHeap(root: Record<string, unknown>, state: ValidationState): void {\n const heap = root.heap === undefined ? Object.create(null) : requireRecord(root.heap, \"$.heap\");\n const heapIds = new Set<number>();\n\n for (const [key, value] of Object.entries(heap)) {\n const path = `$.heap${formatKey(key)}`;\n const id = parseHeapId(key, path);\n addUnique(heapIds, id, path);\n const entry = requireRecord(value, path);\n validateErrorType(entry, path);\n if (entry.kind === \"float32array\") {\n validateFloat32Storage(entry);\n requireRecord(entry.entries, `${path}.entries`);\n continue;\n }\n if (entry.kind === \"arguments\") {\n validateArgumentsProperties(entry, path);\n continue;\n }\n if (entry.kind === \"array\") {\n validateArrayHeap(entry, path, state);\n continue;\n }\n if (entry.kind === \"object\") {\n requireRecord(entry.entries, `${path}.entries`);\n continue;\n }\n fail(\"unknownTag\", `${path}.kind`, \"unknown dump heap tag\");\n }\n\n validateDumpReferences(root, \"$\", 0, state, heapIds);\n}\n\nfunction validateDumpReferences(\n value: unknown,\n path: string,\n depth: number,\n state: ValidationState,\n heapIds: Set<number>\n): void {\n if (value === null || typeof value !== \"object\") return;\n if (depth > state.limits.maxDepth)\n fail(\"budgetExceeded\", path, `exceeds nesting limit ${state.limits.maxDepth}`);\n if (Array.isArray(value)) {\n value.forEach((entry, index) =>\n validateDumpReferences(entry, `${path}[${index}]`, depth + 1, state, heapIds)\n );\n return;\n }\n\n const record = value as Record<string, unknown>;\n if (record.kind === \"ref\") {\n const id = requireSafeInteger(record.id, `${path}.id`, 1);\n if (!heapIds.has(id)) fail(\"danglingReference\", `${path}.id`, `unknown heap value ${id}`);\n }\n for (const [key, entry] of Object.entries(record)) {\n validateDumpReferences(entry, `${path}${formatKey(key)}`, depth + 1, state, heapIds);\n }\n}\n\nfunction validateRunSnapshotState(root: Record<string, unknown>, state: ValidationState): void {\n if (root.clock !== undefined) {\n const clock = requireRecord(root.clock, \"$.clock\");\n requireSafeInteger(clock.next, \"$.clock.next\", 0);\n }\n if (root.random !== undefined) {\n const random = requireRecord(root.random, \"$.random\");\n requireSafeInteger(random.seed, \"$.random.seed\", 0);\n requireSafeInteger(random.state, \"$.random.state\", 0);\n for (const field of [\"initialState\", \"resumeState\"]) {\n if (random[field] !== undefined) requireSafeInteger(random[field], `$.random.${field}`, 0);\n }\n }\n if (root.loopIterations !== undefined) {\n const iterations = requireRecord(root.loopIterations, \"$.loopIterations\");\n for (const [nodeId, value] of Object.entries(iterations)) {\n const path = `$.loopIterations${formatKey(nodeId)}`;\n requireSafeInteger(Number(nodeId), `${path}#key`, 0);\n if (typeof value === \"number\") {\n requireSafeInteger(value, path, 0);\n continue;\n }\n const iteration = requireRecord(value, path);\n requireSafeInteger(iteration.index, `${path}.index`, 0);\n requireArray(iteration.values, `${path}.values`, state);\n }\n }\n if (root.pendingAwaits !== undefined) {\n const pendingAwaits = requireArray(root.pendingAwaits, \"$.pendingAwaits\", state);\n pendingAwaits.forEach((value, index) => {\n const path = `$.pendingAwaits[${index}]`;\n const pending = requireRecord(value, path);\n if (pending.nodeId !== undefined) requireSafeInteger(pending.nodeId, `${path}.nodeId`, 0);\n const span = requireRecord(pending.span, `${path}.span`);\n const start = validatePosition(span.start, `${path}.span.start`);\n const end = validatePosition(span.end, `${path}.span.end`);\n if (start > end) {\n fail(\"invalidValue\", `${path}.span`, \"start must not exceed end\");\n }\n });\n }\n}\n\nfunction validatePosition(value: unknown, path: string): number {\n const position = requireRecord(value, path);\n requireSafeInteger(position.line, `${path}.line`, 1);\n requireSafeInteger(position.column, `${path}.column`, 0);\n return requireSafeInteger(position.offset, `${path}.offset`, 0);\n}\n\nexport function validateInterpreterSnapshot(\n snapshot: unknown,\n nodeById: ReadonlyMap<number, ParseResult>,\n budget: Budget\n): asserts snapshot is Record<string, unknown> {\n const limits = limitsFromBudget(budget);\n const state: ValidationState = {\n allowFunctions: false,\n allowUndefined: false,\n entries: 0,\n dataSize: 0,\n limits,\n validateTaggedPayloads: true\n };\n const root = requireRecord(snapshot, \"$\");\n requireNonEmptyString(root.sourceHash, \"$.sourceHash\", limits);\n requireNodeId(root.currentAstNodeId, \"$.currentAstNodeId\", nodeById);\n const scopes = requireArray(root.scopeChain, \"$.scopeChain\", state);\n const calls = requireArray(root.callStack, \"$.callStack\", state);\n const promises = requireArray(root.pendingPromises, \"$.pendingPromises\", state);\n const moduleBindings = requireRecord(root.moduleBindings, \"$.moduleBindings\");\n const heap = root.heap === undefined ? Object.create(null) : requireRecord(root.heap, \"$.heap\");\n\n if (calls.length > limits.maxCallDepth) {\n fail(\"budgetExceeded\", \"$.callStack\", `exceeds call-depth limit ${limits.maxCallDepth}`);\n }\n\n const scopeIds = new Set<string | number>();\n const parentById = new Map<string | number, string | number>();\n scopes.forEach((value, index) => {\n const path = `$.scopeChain[${index}]`;\n const scope = requireRecord(value, path);\n const id = requireSnapshotId(scope.id, `${path}.id`);\n addUnique(scopeIds, id, `${path}.id`);\n if (scope.parentId !== undefined) {\n parentById.set(id, requireSnapshotId(scope.parentId, `${path}.parentId`));\n }\n validateValue(requireRecord(scope.bindings, `${path}.bindings`), `${path}.bindings`, 1, state);\n });\n for (const [id, parentId] of parentById) {\n if (!scopeIds.has(parentId))\n fail(\"danglingReference\", scopeParentPath(scopes, id), `unknown scope ${String(parentId)}`);\n }\n validateScopeCycles(scopeIds, parentById);\n\n const promiseIds = new Set<string | number>();\n promises.forEach((value, index) => {\n const path = `$.pendingPromises[${index}]`;\n const promise = requireRecord(value, path);\n addUnique(promiseIds, requireSnapshotId(promise.id, `${path}.id`), `${path}.id`);\n validateValue(promise, path, 1, state);\n if (\n promise.status !== undefined &&\n ![\"pending\", \"fulfilled\", \"rejected\"].includes(String(promise.status))\n ) {\n fail(\"invalidState\", `${path}.status`, \"unknown promise state\");\n }\n if (\n promise.status === \"pending\" &&\n (Object.hasOwn(promise, \"value\") || Object.hasOwn(promise, \"reason\"))\n ) {\n fail(\"invalidState\", path, \"pending promise cannot contain a settled value\");\n }\n if (promise.status === \"fulfilled\") {\n if (!Object.hasOwn(promise, \"value\")) {\n fail(\"invalidState\", `${path}.value`, \"fulfilled promise must contain a value\");\n }\n if (Object.hasOwn(promise, \"reason\")) {\n fail(\"invalidState\", path, \"fulfilled promise cannot contain a rejection reason\");\n }\n }\n if (promise.status === \"rejected\") {\n if (!Object.hasOwn(promise, \"reason\")) {\n fail(\"invalidState\", `${path}.reason`, \"rejected promise must contain a reason\");\n }\n if (Object.hasOwn(promise, \"value\")) {\n fail(\"invalidState\", path, \"rejected promise cannot contain a fulfilled value\");\n }\n }\n validatePendingHostCall(promise, path, state);\n });\n\n calls.forEach((value, index) => {\n const path = `$.callStack[${index}]`;\n const frame = requireRecord(value, path);\n requireNodeId(frame.astNodeId, `${path}.astNodeId`, nodeById);\n const scopeId = requireSnapshotId(frame.scopeId, `${path}.scopeId`);\n if (!scopeIds.has(scopeId))\n fail(\"danglingReference\", `${path}.scopeId`, `unknown scope ${String(scopeId)}`);\n if (frame.awaitingPromiseId !== undefined) {\n const promiseId = requireSnapshotId(frame.awaitingPromiseId, `${path}.awaitingPromiseId`);\n if (!promiseIds.has(promiseId))\n fail(\n \"danglingReference\",\n `${path}.awaitingPromiseId`,\n `unknown promise ${String(promiseId)}`\n );\n }\n });\n\n for (const [key, value] of Object.entries(moduleBindings)) {\n requireNonEmptyString(key, `$.moduleBindings${formatKey(key)}`, limits);\n requireNonEmptyString(value, `$.moduleBindings${formatKey(key)}`, limits);\n }\n\n const heapIds = new Set<number>();\n for (const [key, value] of Object.entries(heap)) {\n const id = parseHeapId(key, `$.heap${formatKey(key)}`);\n addUnique(heapIds, id, `$.heap${formatKey(key)}`);\n validateHeapValue(value, `$.heap${formatKey(key)}`, state);\n }\n validateReferences(root, \"$\", 0, state, { heapIds, nodeById, promiseIds, scopeIds });\n}\n\nfunction validatePendingHostCall(\n promise: Record<string, unknown>,\n path: string,\n state: ValidationState\n): void {\n if (promise.sideEffectTag === undefined) return;\n const tag = requireRecord(promise.sideEffectTag, `${path}.sideEffectTag`);\n if (tag.kind !== \"host-call-side-effect\") {\n fail(\"unknownTag\", `${path}.sideEffectTag.kind`, \"unknown host-call tag\");\n }\n const callId = requireNonEmptyString(tag.callId, `${path}.sideEffectTag.callId`, state.limits);\n const moduleId = requireNonEmptyString(\n tag.moduleId,\n `${path}.sideEffectTag.moduleId`,\n state.limits\n );\n const operation = requireNonEmptyString(\n tag.operation,\n `${path}.sideEffectTag.operation`,\n state.limits\n );\n if (String(promise.id) !== callId) {\n fail(\"invalidState\", `${path}.sideEffectTag.callId`, \"must match pending promise id\");\n }\n if (promise.moduleId !== moduleId) {\n fail(\"invalidState\", `${path}.sideEffectTag.moduleId`, \"must match pending module id\");\n }\n if (promise.operation !== operation) {\n fail(\"invalidState\", `${path}.sideEffectTag.operation`, \"must match pending operation\");\n }\n}\n\nexport function validateSnapshotSourceHash(\n snapshot: unknown\n): asserts snapshot is { sourceHash: string } {\n const root = requireRecord(snapshot, \"$\");\n requireNonEmptyString(root.sourceHash, \"$.sourceHash\", defaultLimits());\n}\n\nfunction validateReferences(\n value: unknown,\n path: string,\n depth: number,\n state: ValidationState,\n refs: {\n heapIds: Set<number>;\n nodeById: ReadonlyMap<number, ParseResult>;\n promiseIds: Set<string | number>;\n scopeIds: Set<string | number>;\n }\n): void {\n if (value === null || typeof value !== \"object\") return;\n if (depth > state.limits.maxDepth)\n fail(\"budgetExceeded\", path, `exceeds nesting limit ${state.limits.maxDepth}`);\n if (Array.isArray(value)) {\n value.forEach((entry, index) =>\n validateReferences(entry, `${path}[${index}]`, depth + 1, state, refs)\n );\n return;\n }\n const record = value as Record<string, unknown>;\n if (typeof record.kind === \"string\") {\n if (record.kind === \"ref\") {\n const id = requireSafeInteger(record.id, `${path}.id`, 1);\n if (!refs.heapIds.has(id))\n fail(\"danglingReference\", `${path}.id`, `unknown heap value ${id}`);\n } else if (record.kind === \"promise\") {\n const id = requireSnapshotId(record.id, `${path}.id`);\n if (!refs.promiseIds.has(id))\n fail(\"danglingReference\", `${path}.id`, `unknown promise ${String(id)}`);\n } else if (record.kind === \"fn\" || record.kind === \"generator\") {\n if (record.state !== \"done\") {\n requireNodeId(record.astNodeId, `${path}.astNodeId`, refs.nodeById);\n const scopeId = requireSnapshotId(record.capturedScopeId, `${path}.capturedScopeId`);\n if (!refs.scopeIds.has(scopeId))\n fail(\"danglingReference\", `${path}.capturedScopeId`, `unknown scope ${String(scopeId)}`);\n }\n if (record.kind === \"generator\") validateGenerator(record, path, refs.nodeById);\n }\n }\n for (const [key, entry] of Object.entries(record))\n validateReferences(entry, `${path}${formatKey(key)}`, depth + 1, state, refs);\n}\n\nfunction validateValue(value: unknown, path: string, depth: number, state: ValidationState): void {\n validateGenericValue(value, path, depth, state);\n}\n\nfunction validateTaggedValue(\n record: Record<string, unknown>,\n path: string,\n state: ValidationState\n): void {\n switch (record.kind) {\n case \"undefined\":\n return;\n case \"number\":\n if (![\"-Infinity\", \"Infinity\", \"NaN\"].includes(String(record.value))) {\n fail(\"invalidValue\", `${path}.value`, \"unknown non-finite number value\");\n }\n return;\n case \"fn\":\n requireSafeInteger(record.astNodeId, `${path}.astNodeId`, 0);\n requireSnapshotId(record.capturedScopeId, `${path}.capturedScopeId`);\n return;\n case \"generator\":\n validateGeneratorShape(record, path, state);\n return;\n case \"promise\":\n requireSnapshotId(record.id, `${path}.id`);\n return;\n case \"ref\":\n requireSafeInteger(record.id, `${path}.id`, 1);\n return;\n case \"regex\":\n requireString(record.source, `${path}.source`, state.limits);\n requireString(record.flags, `${path}.flags`, state.limits);\n requireSafeInteger(record.lastIndex, `${path}.lastIndex`, 0);\n return;\n case \"array\":\n case \"arguments\":\n case \"object\":\n case \"map\":\n case \"set\":\n return;\n }\n}\n\nfunction validateGeneratorShape(\n record: Record<string, unknown>,\n path: string,\n state: ValidationState\n): void {\n if (![\"start\", \"suspended\", \"done\"].includes(String(record.state))) {\n fail(\"invalidState\", `${path}.state`, \"unknown generator state\");\n }\n if (record.state === \"done\") {\n if (\n record.astNodeId !== undefined ||\n record.capturedScopeId !== undefined ||\n record.sent !== undefined ||\n record.yieldNodeId !== undefined\n ) {\n fail(\"invalidState\", path, \"done generator cannot contain resume state\");\n }\n return;\n }\n\n requireSafeInteger(record.astNodeId, `${path}.astNodeId`, 0);\n requireSnapshotId(record.capturedScopeId, `${path}.capturedScopeId`);\n if (record.state === \"start\") {\n if (record.sent !== undefined || record.yieldNodeId !== undefined) {\n fail(\"invalidState\", path, \"unstarted generator cannot contain a resume cursor\");\n }\n return;\n }\n\n requireSafeInteger(record.yieldNodeId, `${path}.yieldNodeId`, 0);\n const sent = requireArray(record.sent, `${path}.sent`, state);\n sent.forEach((completion, index) => {\n const completionPath = `${path}.sent[${index}]`;\n const candidate = requireRecord(completion, completionPath);\n if (!Object.hasOwn(candidate, \"type\")) {\n fail(\"invalidValue\", `${completionPath}.type`, \"completion type is required\");\n }\n if (![\"normal\", \"return\", \"throw\"].includes(String(candidate.type))) {\n fail(\"invalidState\", `${completionPath}.type`, \"unknown generator completion type\");\n }\n if (!Object.hasOwn(candidate, \"value\")) {\n fail(\"invalidValue\", `${completionPath}.value`, \"completion value is required\");\n }\n });\n}\n\nfunction validateHeapValue(value: unknown, path: string, state: ValidationState): void {\n const record = requireRecord(value, path);\n validateErrorType(record, path);\n if (![\"arguments\", \"array\", \"object\", \"map\", \"set\", \"float32array\"].includes(String(record.kind)))\n fail(\"unknownTag\", `${path}.kind`, \"unknown heap tag\");\n validateValue(record, path, 1, state);\n if (record.kind === \"arguments\") validateArgumentsProperties(record, path);\n if (record.kind === \"array\") validateArrayHeap(record, path, state);\n if (record.kind === \"object\") requireRecord(record.entries, `${path}.entries`);\n if (record.kind === \"float32array\") {\n validateFloat32Storage(record);\n requireRecord(record.entries, `${path}.entries`);\n }\n if (record.kind === \"map\") {\n const entries = requireArray(record.entries, `${path}.entries`, state);\n entries.forEach((entry, index) => {\n if (!Array.isArray(entry) || entry.length !== 2)\n fail(\"invalidValue\", `${path}.entries[${index}]`, \"map entry must contain two values\");\n });\n }\n if (record.kind === \"set\") requireArray(record.values, `${path}.values`, state);\n}\n\nfunction validateArrayHeap(\n record: Record<string, unknown>,\n path: string,\n state: ValidationState\n): void {\n if (Object.hasOwn(record, \"items\")) {\n requireArray(record.items, `${path}.items`, state);\n if (Object.hasOwn(record, \"length\") || Object.hasOwn(record, \"entries\"))\n fail(\"invalidValue\", path, \"array must use either items or length and entries\");\n return;\n }\n\n const length = requireSafeInteger(record.length, `${path}.length`, 0);\n if (length > 0xffff_ffff) fail(\"invalidValue\", `${path}.length`, \"exceeds maximum array length\");\n if (length > state.limits.maxEntries)\n fail(\n \"budgetExceeded\",\n `${path}.length`,\n `exceeds collection entry limit ${state.limits.maxEntries}`\n );\n const entries = requireRecord(record.entries, `${path}.entries`);\n for (const key of Object.keys(entries)) {\n if (key === \"length\")\n fail(\"invalidValue\", `${path}.entries.length`, \"array length is stored separately\");\n const index = Number(key);\n if (\n String(index) === key &&\n Number.isInteger(index) &&\n index >= 0 &&\n index < 0xffff_ffff &&\n index >= length\n )\n fail(\"invalidValue\", `${path}.entries${formatKey(key)}`, \"array index exceeds its length\");\n }\n}\n\nfunction validateErrorType(record: Record<string, unknown>, path: string): void {\n if (!Object.hasOwn(record, \"errorType\")) return;\n if (\n record.kind !== \"object\" ||\n !sandboxErrorNames.includes(record.errorType as SandboxErrorName)\n ) {\n fail(\"invalidValue\", `${path}.errorType`, \"invalid error metadata\");\n }\n}\n\nexport function validateArgumentsProperties(record: Record<string, unknown>, path: string): void {\n if (typeof record.extensible !== \"boolean\") {\n fail(\"invalidType\", `${path}.extensible`, \"expected boolean\");\n }\n if (typeof record.lengthBeforeCallee !== \"boolean\") {\n fail(\"invalidType\", `${path}.lengthBeforeCallee`, \"expected boolean\");\n }\n const properties = requireRecord(record.properties, `${path}.properties`);\n if (record.iterator !== null) {\n const iterator = requireRecord(record.iterator, `${path}.iterator`);\n for (const key of Object.keys(iterator)) {\n if (![\"configurable\", \"enumerable\", \"writable\"].includes(key)) {\n fail(\n \"invalidValue\",\n `${path}.iterator${formatKey(key)}`,\n \"unknown iterator descriptor field\"\n );\n }\n }\n for (const flag of [\"configurable\", \"enumerable\", \"writable\"]) {\n if (typeof iterator[flag] !== \"boolean\")\n fail(\"invalidType\", `${path}.iterator.${flag}`, \"expected boolean\");\n }\n }\n if (record.lengthBeforeCallee && !Object.hasOwn(properties, \"length\")) {\n fail(\"invalidValue\", `${path}.properties`, \"initial length property is required\");\n }\n for (const [key, value] of Object.entries(properties)) {\n const propertyPath = `${path}.properties${formatKey(key)}`;\n if (key === \"callee\")\n fail(\"invalidValue\", propertyPath, \"strict callee accessor cannot be replaced\");\n const descriptor = requireRecord(value, propertyPath);\n for (const field of Object.keys(descriptor)) {\n if (![\"value\", \"configurable\", \"enumerable\", \"writable\"].includes(field)) {\n fail(\n \"invalidValue\",\n `${propertyPath}${formatKey(field)}`,\n \"unknown property descriptor field\"\n );\n }\n }\n if (!Object.hasOwn(descriptor, \"value\"))\n fail(\"invalidValue\", propertyPath, \"property value is required\");\n for (const flag of [\"configurable\", \"enumerable\", \"writable\"]) {\n if (typeof descriptor[flag] !== \"boolean\")\n fail(\"invalidType\", `${propertyPath}.${flag}`, \"expected boolean\");\n }\n }\n}\n\nfunction validateGenerator(\n record: Record<string, unknown>,\n path: string,\n nodeById: ReadonlyMap<number, ParseResult>\n): void {\n if (record.state === \"suspended\") {\n requireNodeId(record.yieldNodeId, `${path}.yieldNodeId`, nodeById);\n }\n}\n\nfunction validateGenericValue(\n value: unknown,\n path: string,\n depth: number,\n state: ValidationState\n): void {\n if (state.dataPropertiesOnly && types.isProxy(value)) {\n fail(\"invalidType\", path, \"proxy objects are not snapshot data\");\n }\n if (depth > state.limits.maxDepth)\n fail(\"budgetExceeded\", path, `exceeds nesting limit ${state.limits.maxDepth}`);\n state.entries += 1;\n if (state.entries > state.limits.maxAggregateEntries)\n fail(\n \"budgetExceeded\",\n path,\n `exceeds aggregate entry limit ${state.limits.maxAggregateEntries}`\n );\n if (typeof value === \"string\") {\n requireString(value, path, state.limits);\n state.dataSize += value.length;\n } else if (Array.isArray(value)) {\n if (value.length > state.limits.maxEntries) fail(\"budgetExceeded\", path, \"array is too large\");\n if (state.dataPropertiesOnly) {\n const entries = snapshotDataEntries(value, path).filter(([key]) => key !== \"length\");\n if (entries.length !== value.length)\n fail(\"invalidType\", path, \"snapshot arrays must be dense\");\n for (const [key, entry] of entries) {\n const index = Number(key);\n if (\n !Number.isInteger(index) ||\n index < 0 ||\n index >= value.length ||\n String(index) !== key\n ) {\n fail(\"invalidType\", path, \"snapshot arrays cannot have named properties\");\n }\n validateGenericValue(entry, `${path}[${key}]`, depth + 1, state);\n }\n } else {\n value.forEach((entry, index) =>\n validateGenericValue(entry, `${path}[${index}]`, depth + 1, state)\n );\n }\n } else if (value !== null && typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n if (state.validateTaggedPayloads && isTaggedValueShape(record)) {\n validateTaggedValue(record, path, state);\n }\n const entries = state.dataPropertiesOnly\n ? snapshotDataEntries(value, path)\n : Object.entries(value);\n for (const [key, entry] of entries) {\n requireString(key, `${path}${formatKey(key)}`, state.limits);\n state.dataSize += key.length;\n validateGenericValue(entry, `${path}${formatKey(key)}`, depth + 1, state);\n }\n } else if (\n ![\"boolean\", \"number\"].includes(typeof value) &&\n !(state.allowFunctions && typeof value === \"function\") &&\n !(state.allowUndefined && value === undefined) &&\n value !== null\n ) {\n fail(\"invalidType\", path, \"contains an unsupported value\");\n }\n if (state.dataSize > state.limits.maxDataSize)\n fail(\"budgetExceeded\", path, `exceeds aggregate data limit ${state.limits.maxDataSize}`);\n}\n\nfunction snapshotDataEntries(value: object, path: string): Array<[string, unknown]> {\n const prototype = Object.getPrototypeOf(value);\n if (\n prototype !== null &&\n prototype !== (Array.isArray(value) ? Array.prototype : Object.prototype)\n ) {\n fail(\"invalidType\", path, \"snapshot data must not have a custom prototype\");\n }\n if (Object.getOwnPropertySymbols(value).length > 0) {\n fail(\"invalidType\", path, \"snapshot data must not have symbol properties\");\n }\n return Object.entries(Object.getOwnPropertyDescriptors(value)).map(([key, descriptor]) => {\n if (!(\"value\" in descriptor))\n fail(\"invalidType\", `${path}${formatKey(key)}`, \"snapshot data must not have accessors\");\n return [key, descriptor.value];\n });\n}\n\nfunction validateScopeCycles(\n ids: Set<string | number>,\n parentById: Map<string | number, string | number>\n): void {\n for (const id of ids) {\n const seen = new Set<string | number>();\n let current: string | number | undefined = id;\n while (current !== undefined) {\n if (seen.has(current))\n fail(\"invalidCycle\", \"$.scopeChain\", `scope parent cycle includes ${String(current)}`);\n seen.add(current);\n current = parentById.get(current);\n }\n }\n}\n\nfunction limitsFromBudget(budget: Budget): ValidationLimits {\n return {\n maxAggregateEntries: DEFAULT_MAX_ENTRIES,\n maxCallDepth: budget.limits.maxCallDepth ?? 10_000,\n maxDepth: Math.min(DEFAULT_MAX_DEPTH, budget.limits.maxCallDepth ?? DEFAULT_MAX_DEPTH),\n maxEntries: budget.limits.arrayLength ?? DEFAULT_MAX_ENTRIES,\n maxStringLength: budget.limits.stringLength ?? DEFAULT_MAX_STRING_LENGTH,\n maxDataSize: budget.limits.dataSize ?? DEFAULT_MAX_DATA_SIZE\n };\n}\n\nfunction defaultLimits(): ValidationLimits {\n return {\n maxAggregateEntries: DEFAULT_MAX_ENTRIES,\n maxCallDepth: 10_000,\n maxDepth: DEFAULT_MAX_DEPTH,\n maxEntries: DEFAULT_MAX_ENTRIES,\n maxStringLength: DEFAULT_MAX_STRING_LENGTH,\n maxDataSize: DEFAULT_MAX_DATA_SIZE\n };\n}\n\nfunction requireArray(value: unknown, path: string, state: ValidationState): unknown[] {\n if (!Array.isArray(value)) fail(\"invalidType\", path, \"must be an array\");\n if (value.length > state.limits.maxEntries)\n fail(\"budgetExceeded\", path, `exceeds collection entry limit ${state.limits.maxEntries}`);\n return value;\n}\n\nfunction requireRecord(value: unknown, path: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value))\n fail(\"invalidType\", path, \"must be an object\");\n return value as Record<string, unknown>;\n}\n\nfunction requireNodeId(\n value: unknown,\n path: string,\n nodeById: ReadonlyMap<number, ParseResult>\n): number {\n const id = requireSafeInteger(value, path, 0);\n if (!nodeById.has(id)) fail(\"danglingReference\", path, `unknown AST node ${id}`);\n return id;\n}\n\nfunction requireSnapshotId(value: unknown, path: string): string | number {\n if (typeof value === \"string\") {\n if (value.length === 0) fail(\"invalidValue\", path, \"id must not be empty\");\n return value;\n }\n return requireSafeInteger(value, path, 0);\n}\n\nfunction requireSafeInteger(value: unknown, path: string, minimum: number): number {\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < minimum)\n fail(\"invalidValue\", path, `must be a safe integer >= ${minimum}`);\n return value;\n}\n\nfunction requireNonEmptyString(value: unknown, path: string, limits: ValidationLimits): string {\n const text = requireString(value, path, limits);\n if (text.length === 0) fail(\"invalidValue\", path, \"must not be empty\");\n return text;\n}\n\nfunction requireString(value: unknown, path: string, limits: ValidationLimits): string {\n if (typeof value !== \"string\") fail(\"invalidType\", path, \"must be a string\");\n if (value.length > limits.maxStringLength)\n fail(\"budgetExceeded\", path, `exceeds string limit ${limits.maxStringLength}`);\n return value;\n}\n\nfunction addUnique<T>(values: Set<T>, value: T, path: string): void {\n if (values.has(value)) fail(\"duplicateId\", path, `duplicate id ${String(value)}`);\n values.add(value);\n}\n\nfunction parseHeapId(value: string, path: string): number {\n if (String(Number(value)) !== value)\n fail(\"invalidValue\", path, \"heap key must be a canonical positive integer\");\n return requireSafeInteger(Number(value), path, 1);\n}\n\nfunction scopeParentPath(scopes: unknown[], id: string | number): string {\n const index = scopes.findIndex(\n (entry) =>\n typeof entry === \"object\" &&\n entry !== null &&\n !Array.isArray(entry) &&\n (entry as Record<string, unknown>).id === id\n );\n return `$.scopeChain[${index}].parentId`;\n}\n\nfunction formatKey(key: string): string {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key) ? `.${key}` : `[${JSON.stringify(key)}]`;\n}\n\nfunction isTaggedValueShape(value: Record<string, unknown>): boolean {\n return typeof value.kind === \"string\" && TAGGED_VALUE_KINDS.has(value.kind);\n}\n\nfunction fail(code: SnapshotValidationCode, path: string, detail: string): never {\n throw new SnapshotValidationError(code, path, detail);\n}\n", "import type { SandboxObject, SandboxValue } from \"./values.js\";\n\nconst sandboxArgumentsBrand = Symbol(\"SandboxArguments\");\n\nexport type SandboxArguments = SandboxObject & { readonly [sandboxArgumentsBrand]: true };\n\nexport function createSandboxArguments(values: readonly SandboxValue[]): SandboxArguments {\n const result = (function () {\n return arguments;\n })();\n for (let index = 0; index < values.length; index += 1) {\n result[index] = values[index];\n }\n result.length = values.length;\n Object.defineProperty(result, sandboxArgumentsBrand, { value: true });\n return result as unknown as SandboxArguments;\n}\n\nexport function isSandboxArguments(value: unknown): value is SandboxArguments {\n return typeof value === \"object\" && value !== null && Object.hasOwn(value, sandboxArgumentsBrand);\n}\n\nexport function getSandboxArgumentEntries(value: SandboxObject): Array<[string, SandboxValue]> {\n return Object.entries(Object.getOwnPropertyDescriptors(value)).flatMap(([key, descriptor]) =>\n \"value\" in descriptor ? [[key, descriptor.value]] : []\n );\n}\n\nexport function copySandboxArgumentProperties(\n source: SandboxObject,\n target: object,\n copyValue: (value: SandboxValue, key: string) => unknown\n): void {\n const names = Object.getOwnPropertyNames(source);\n if (!names.includes(\"length\") || names.indexOf(\"length\") > names.indexOf(\"callee\")) {\n Reflect.deleteProperty(target, \"length\");\n }\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(source))) {\n if (!(\"value\" in descriptor)) {\n if (key !== \"callee\") throw new TypeError(`Cannot copy arguments accessor '${key}'.`);\n continue;\n }\n Object.defineProperty(target, key, { ...descriptor, value: copyValue(descriptor.value, key) });\n }\n const iterator = Object.getOwnPropertyDescriptor(source, Symbol.iterator);\n if (iterator === undefined) {\n Reflect.deleteProperty(target, Symbol.iterator);\n } else {\n if (iterator.value !== Array.prototype.values) {\n throw new TypeError(\"Cannot copy a replaced arguments iterator.\");\n }\n Object.defineProperty(target, Symbol.iterator, iterator);\n }\n if (!Object.isExtensible(source)) Object.preventExtensions(target);\n}\n", "import { replaceErrorStack } from \"./error/shape.js\";\nimport { SandboxError } from \"./interp/budget.js\";\nimport { getSandboxArgumentEntries, isSandboxArguments } from \"./interp/arguments.js\";\n\nexport const MAX_DATA_DEPTH = 1_024;\n\nexport class SnapshotBudgetError extends Error {\n readonly code = \"budgetExceeded\";\n readonly budget = \"dataDepth\";\n readonly current: number;\n readonly limit: number;\n readonly path: string;\n\n constructor(path: string, current: number, limit = MAX_DATA_DEPTH) {\n super(`Snapshot budget exceeded for dataDepth at ${path}: ${current} > ${limit}.`);\n this.name = \"SnapshotBudgetError\";\n this.current = current;\n this.limit = limit;\n this.path = path;\n replaceErrorStack(this);\n }\n}\n\nexport function assertSandboxDataDepth(depth: number): void {\n if (depth > MAX_DATA_DEPTH) {\n throw new SandboxError({ budget: \"dataDepth\", current: depth, limit: MAX_DATA_DEPTH });\n }\n}\n\nexport function assertSnapshotDataDepth(depth: number, path: string): void {\n if (depth > MAX_DATA_DEPTH) throw new SnapshotBudgetError(path, depth);\n}\n\nexport function assertSnapshotGraphDepth(value: unknown, rootPath = \"$\"): void {\n walkGraphDepth(value, rootPath, (depth, path) => assertSnapshotDataDepth(depth, path));\n}\n\nexport function assertSandboxGraphDepth(value: unknown): void {\n walkGraphDepth(value, \"<root>\", (depth) => assertSandboxDataDepth(depth));\n}\n\nfunction walkGraphDepth(\n root: unknown,\n rootPath: string,\n assertDepth: (depth: number, path: string) => void\n): void {\n type Frame = { value: unknown; path: string; depth: number; exiting: boolean };\n const ancestors = new WeakSet<object>();\n const stack: Frame[] = [{ value: root, path: rootPath, depth: 0, exiting: false }];\n\n while (stack.length > 0) {\n const frame = stack.pop() as Frame;\n if (typeof frame.value !== \"object\" || frame.value === null) continue;\n if (frame.exiting) {\n ancestors.delete(frame.value);\n continue;\n }\n assertDepth(frame.depth, frame.path);\n if (ancestors.has(frame.value)) continue;\n ancestors.add(frame.value);\n stack.push({ ...frame, exiting: true });\n\n const entries = graphEntries(frame.value);\n for (let index = entries.length - 1; index >= 0; index -= 1) {\n const [key, entry] = entries[index] as [string, unknown];\n stack.push({\n value: entry,\n path: `${frame.path}${key}`,\n depth: frame.depth + 1,\n exiting: false\n });\n }\n }\n}\n\nfunction graphEntries(value: object): Array<[string, unknown]> {\n if (isSandboxArguments(value)) {\n return getSandboxArgumentEntries(value).map(([key, entry]) => [`.${key}`, entry]);\n }\n if (value instanceof Map) {\n return [...value.entries()].flatMap(([key, entry], index) => [\n [`.<map>[${index}].key`, key] as [string, unknown],\n [`.<map>[${index}].value`, entry] as [string, unknown]\n ]);\n }\n if (value instanceof Set) {\n return [...value.values()].map((entry, index) => [`.<set>[${index}]`, entry]);\n }\n\n const entries: Array<[string, unknown]> = [];\n for (const key of Object.keys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor !== undefined && \"value\" in descriptor)\n entries.push([Array.isArray(value) ? `[${key}]` : `.${key}`, descriptor.value]);\n }\n return entries;\n}\n", "import type { SandboxObject, SandboxValue } from \"../interp/values.js\";\n\ntype PropertyFlags = {\n configurable: boolean;\n enumerable: boolean;\n writable: boolean;\n};\n\nexport type SerializedArguments<TValue> = {\n kind: \"arguments\";\n extensible: boolean;\n lengthBeforeCallee: boolean;\n iterator: PropertyFlags | null;\n properties: Record<string, PropertyFlags & { value: TValue }>;\n};\n\nexport function serializeArguments<TValue>(\n value: SandboxObject,\n serializeValue: (entry: SandboxValue, key: string) => TValue\n): SerializedArguments<TValue> {\n const properties: SerializedArguments<TValue>[\"properties\"] = Object.create(null);\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(value))) {\n if (!(\"value\" in descriptor)) {\n if (key !== \"callee\") throw new TypeError(`Cannot snapshot arguments accessor '${key}'.`);\n continue;\n }\n properties[key] = {\n value: serializeValue(descriptor.value, key),\n configurable: descriptor.configurable === true,\n enumerable: descriptor.enumerable === true,\n writable: descriptor.writable === true\n };\n }\n const iterator = Object.getOwnPropertyDescriptor(value, Symbol.iterator);\n if (iterator !== undefined && iterator.value !== Array.prototype.values) {\n throw new TypeError(\"Cannot snapshot a replaced arguments iterator.\");\n }\n const names = Object.getOwnPropertyNames(value);\n return {\n kind: \"arguments\",\n extensible: Object.isExtensible(value),\n lengthBeforeCallee:\n names.includes(\"length\") && names.indexOf(\"length\") < names.indexOf(\"callee\"),\n iterator:\n iterator === undefined\n ? null\n : {\n configurable: iterator.configurable === true,\n enumerable: iterator.enumerable === true,\n writable: iterator.writable === true\n },\n properties\n };\n}\n", "export type SerializedArray<TValue> =\n | { kind: \"array\"; items: TValue[] }\n | { kind: \"array\"; length: number; entries: Record<string, TValue> };\n\nexport function requiresArrayEntries(value: unknown[]): boolean {\n const keys = Object.keys(value);\n return keys.length !== value.length || keys.some((key, index) => key !== String(index));\n}\n\nexport function serializeArray<TValue>(\n value: unknown[],\n serializeValue: (entry: unknown, key: string) => TValue\n): SerializedArray<TValue> {\n if (!requiresArrayEntries(value)) {\n return {\n kind: \"array\",\n items: Array.from({ length: value.length }, (_, index) => {\n const key = String(index);\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n return serializeValue(\n descriptor !== undefined && \"value\" in descriptor ? descriptor.value : undefined,\n key\n );\n })\n };\n }\n\n const entries = Object.create(null) as Record<string, TValue>;\n for (const key of Object.keys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor !== undefined && \"value\" in descriptor) {\n entries[key] = serializeValue(descriptor.value, key);\n }\n }\n return { kind: \"array\", length: value.length, entries };\n}\n", "import type { Budget } from \"./budget.js\";\n\nconst typedArrayPrototype = Object.getPrototypeOf(Float32Array.prototype);\nconst readLength = Object.getOwnPropertyDescriptor(typedArrayPrototype, \"length\")!.get!;\nconst readOffset = Object.getOwnPropertyDescriptor(typedArrayPrototype, \"byteOffset\")!.get!;\nconst readBuffer = Object.getOwnPropertyDescriptor(typedArrayPrototype, \"buffer\")!.get!;\nconst readTag = Object.getOwnPropertyDescriptor(typedArrayPrototype, Symbol.toStringTag)!.get!;\nconst bufferLength = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, \"byteLength\")!.get!;\nconst bufferResizable = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, \"resizable\")?.get;\n\nexport function isFloat32Array(value: unknown): value is Float32Array {\n return (\n ArrayBuffer.isView(value) &&\n Object.getPrototypeOf(value) === Float32Array.prototype &&\n Reflect.apply(readTag, value, []) === \"Float32Array\"\n );\n}\n\nexport function float32Storage(value: Float32Array): {\n buffer: ArrayBuffer;\n byteOffset: number;\n length: number;\n byteLength: number;\n} {\n const buffer = Reflect.apply(readBuffer, value, []) as ArrayBuffer;\n if (\n Object.getPrototypeOf(buffer) !== ArrayBuffer.prototype ||\n (bufferResizable !== undefined && Reflect.apply(bufferResizable, buffer, []))\n ) {\n throw new TypeError(\"Float32Array requires a fixed, non-shared ArrayBuffer.\");\n }\n return {\n buffer,\n byteOffset: Reflect.apply(readOffset, value, []) as number,\n length: Reflect.apply(readLength, value, []) as number,\n byteLength: Reflect.apply(bufferLength, buffer, []) as number\n };\n}\n\nexport function float32DataProperties(value: Float32Array): Array<[string, PropertyDescriptor]> {\n if (Object.getOwnPropertySymbols(value).length > 0)\n throw new TypeError(\"Float32Array symbol properties are not supported.\");\n const properties: Array<[string, PropertyDescriptor]> = [];\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(value))) {\n if (isFloat32Index(key)) continue;\n if (!(\"value\" in descriptor))\n throw new TypeError(`Float32Array accessor property '${key}' is not supported.`);\n properties.push([key, descriptor]);\n }\n return properties;\n}\n\nexport function isFloat32Index(key: string): boolean {\n return key === \"-0\" || String(Number(key)) === key;\n}\n\nexport function float32Number(value: unknown): number {\n if (\n (value !== null && typeof value === \"object\") ||\n typeof value === \"function\" ||\n typeof value === \"symbol\" ||\n typeof value === \"bigint\"\n ) {\n throw new TypeError(\n \"Float32Array numeric arguments must be primitive numeric-coercible values.\"\n );\n }\n return Number(value);\n}\n\nexport function checkFloat32Allocation(length: number, budget: Budget): void {\n budget.allocateArrayLength(length);\n budget.provisionDataUsage(length * Float32Array.BYTES_PER_ELEMENT + 1)();\n}\n\nexport function copyFloat32Storage<TValue>(\n value: Float32Array,\n state: {\n seen: WeakMap<object, TValue>;\n float32Buffers?: WeakMap<ArrayBuffer, ArrayBuffer>;\n }\n): Float32Array {\n const storage = float32Storage(value);\n state.float32Buffers ??= new WeakMap();\n let buffer = state.float32Buffers.get(storage.buffer);\n if (buffer === undefined) {\n buffer = new ArrayBuffer(storage.byteLength);\n new Uint8Array(buffer).set(new Uint8Array(storage.buffer));\n state.float32Buffers.set(storage.buffer, buffer);\n }\n return new Float32Array(buffer, storage.byteOffset, storage.length);\n}\n", "import { float32Storage, isFloat32Array } from \"../interp/float32.js\";\n\nexport type Float32Data<TReference> = {\n kind: \"float32array\";\n byteOffset: number;\n length: number;\n} & ({ bytes: number[] } | { buffer: TReference });\n\nexport function encodeFloat32Storage<TReference>(\n value: Float32Array,\n id: number,\n buffers: WeakMap<ArrayBuffer, number>,\n reference: (id: number) => TReference\n): Float32Data<TReference> {\n const storage = float32Storage(value);\n const existing = buffers.get(storage.buffer);\n if (existing === undefined) buffers.set(storage.buffer, id);\n return {\n kind: \"float32array\",\n byteOffset: storage.byteOffset,\n length: storage.length,\n ...(existing === undefined\n ? { bytes: Array.from(new Uint8Array(storage.buffer)) }\n : { buffer: reference(existing) })\n };\n}\n\nexport function validateFloat32Storage(value: Record<string, unknown>): void {\n if (\n !Number.isSafeInteger(value.length) ||\n Number(value.length) < 0 ||\n !Number.isSafeInteger(value.byteOffset) ||\n Number(value.byteOffset) < 0 ||\n Number(value.byteOffset) % 4 !== 0\n )\n throw new TypeError(\"Invalid Float32Array view dimensions.\");\n if (Object.hasOwn(value, \"bytes\") === Object.hasOwn(value, \"buffer\"))\n throw new TypeError(\"Float32Array requires one backing storage description.\");\n if (Object.hasOwn(value, \"bytes\")) {\n if (\n !Array.isArray(value.bytes) ||\n value.bytes.some((byte) => !Number.isInteger(byte) || byte < 0 || byte > 255) ||\n Number(value.length) > Math.floor((value.bytes.length - Number(value.byteOffset)) / 4)\n )\n throw new TypeError(\"Invalid Float32Array backing bytes.\");\n }\n}\n\nexport function decodeFloat32Storage(\n value: Record<string, unknown>,\n resolve: (reference: unknown) => unknown\n): Float32Array {\n validateFloat32Storage(value);\n let buffer: ArrayBuffer;\n if (Array.isArray(value.bytes)) {\n buffer = new ArrayBuffer(value.bytes.length);\n new Uint8Array(buffer).set(value.bytes);\n } else {\n const referenced = resolve(value.buffer);\n if (!isFloat32Array(referenced)) throw new TypeError(\"Invalid Float32Array backing reference.\");\n buffer = float32Storage(referenced).buffer;\n }\n return new Float32Array(buffer, Number(value.byteOffset), Number(value.length));\n}\n", "export const DUMP_FORMAT_VERSION = 1;\nexport const EXECUTION_SEMANTICS = \"jobs-v7\";\nimport { assertSnapshotGraphDepth } from \"../graph-depth.js\";\nimport { sandboxErrorTypes, type SandboxErrorName } from \"../error/shape.js\";\nimport { getSandboxArgumentEntries, isSandboxArguments } from \"../interp/arguments.js\";\nimport { serializeArguments, type SerializedArguments } from \"./arguments.js\";\nimport { requiresArrayEntries, serializeArray, type SerializedArray } from \"./arrays.js\";\nimport { float32DataProperties, isFloat32Array } from \"../interp/float32.js\";\nimport { encodeFloat32Storage, type Float32Data } from \"./float32array.js\";\n\nconst SKIP_VALUE = Symbol(\"SafeJS.skip-dump-value\");\n\ntype DumpPrimitive = boolean | null | number | string;\n\ntype DumpValue =\n | DumpPrimitive\n | DumpValue[]\n | {\n [key: string]: DumpValue;\n };\n\ntype DumpHeapValue =\n | (Float32Data<DumpValue> & { entries: Record<string, DumpValue> })\n | SerializedArguments<DumpValue>\n | SerializedArray<DumpValue>\n | {\n kind: \"object\";\n entries: Record<string, DumpValue>;\n errorType?: SandboxErrorName;\n };\n\ntype DumpState = {\n float32Buffers: WeakMap<ArrayBuffer, number>;\n heap: Record<string, DumpHeapValue>;\n heapIds: WeakMap<object, number>;\n serializedHeapIds: Set<number>;\n};\n\ntype ContainerStat = {\n count: number;\n cyclic: boolean;\n expanded: boolean;\n};\n\nexport type DumpableSnapshot = {\n sourceHash: string;\n [key: string]: unknown;\n};\n\nexport function serializeSafeJSSnapshot(snapshot: DumpableSnapshot): string {\n const replayError = Object.getOwnPropertyDescriptor(snapshot, \"replayError\");\n if (replayError !== undefined) {\n const reason =\n \"value\" in replayError && typeof replayError.value === \"string\"\n ? replayError.value\n : \"missing resume capability\";\n throw new TypeError(`Snapshot is not replayable: ${reason}`);\n }\n for (const [key, value] of getEnumerableDataEntries(snapshot)) {\n if (key !== \"version\" && key !== \"sourceHash\" && key !== \"heap\") {\n assertSnapshotGraphDepth(value, key);\n }\n }\n return JSON.stringify(createDumpFile(snapshot), null, 2);\n}\n\nfunction createDumpFile(snapshot: DumpableSnapshot): Record<string, DumpValue> {\n const state: DumpState = {\n float32Buffers: new WeakMap(),\n heap: {},\n heapIds: indexHeapContainers(snapshot),\n serializedHeapIds: new Set()\n };\n const dumped: Record<string, DumpValue> = {\n version: DUMP_FORMAT_VERSION,\n sourceHash: snapshot.sourceHash\n };\n\n for (const [key, value] of getEnumerableDataEntries(snapshot)) {\n if (key === \"version\" || key === \"sourceHash\" || key === \"heap\") {\n continue;\n }\n\n const serialized = serializeDumpValue(value, key, state);\n if (serialized !== SKIP_VALUE) {\n dumped[key] = serialized;\n }\n }\n\n if (Object.keys(state.heap).length > 0) {\n dumped.heap = state.heap;\n }\n\n return dumped;\n}\n\nfunction serializeDumpValue(\n value: unknown,\n path: string,\n state: DumpState\n): DumpValue | typeof SKIP_VALUE {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") {\n return value;\n }\n\n if (typeof value === \"number\") {\n if (Number.isFinite(value)) {\n return value;\n }\n\n return {\n kind: \"number\",\n value: Number.isNaN(value)\n ? \"NaN\"\n : value === Number.POSITIVE_INFINITY\n ? \"Infinity\"\n : \"-Infinity\"\n };\n }\n\n if (typeof value !== \"object\") {\n return SKIP_VALUE;\n }\n\n if (isFloat32Array(value)) return serializeHeapReference(value, path, state)!;\n\n if (Array.isArray(value)) {\n const reference = serializeHeapReference(value, path, state);\n if (reference !== undefined) {\n return reference;\n }\n\n return serializeArrayItems(value, path, state);\n }\n\n if (!isPlainObject(value)) {\n return SKIP_VALUE;\n }\n\n const reference = serializeHeapReference(value, path, state);\n if (reference !== undefined) {\n return reference;\n }\n\n return serializeObjectEntries(value, path, state);\n}\n\nfunction serializeHeapReference(\n value: unknown[] | Record<string, unknown> | Float32Array,\n path: string,\n state: DumpState\n):\n | {\n kind: \"ref\";\n id: number;\n }\n | undefined {\n const id = state.heapIds.get(value);\n if (id === undefined) {\n return undefined;\n }\n\n if (!state.serializedHeapIds.has(id)) {\n state.serializedHeapIds.add(id);\n\n if (isFloat32Array(value)) {\n const storage = encodeFloat32Storage(value, id, state.float32Buffers, (id) => ({\n kind: \"ref\",\n id\n }));\n const entries: Record<string, DumpValue> = Object.create(null);\n state.heap[String(id)] = { ...storage, entries };\n for (const [key, descriptor] of float32DataProperties(value)) {\n const serialized = serializeDumpValue(descriptor.value, `${path}.${key}`, state);\n entries[key] = serialized === SKIP_VALUE ? { kind: \"undefined\" } : serialized;\n }\n } else if (isSandboxArguments(value)) {\n state.heap[String(id)] = serializeArguments(value, (entry, key) => {\n const serialized = serializeDumpValue(entry, `${path}.${key}`, state);\n return serialized === SKIP_VALUE ? { kind: \"undefined\" } : serialized;\n });\n } else if (Array.isArray(value)) {\n state.heap[String(id)] = serializeArray(value, (entry, key) => {\n const serialized = serializeDumpValue(entry, `${path}[${key}]`, state);\n return serialized === SKIP_VALUE ? { kind: \"undefined\" } : serialized;\n });\n } else {\n const errorType = sandboxErrorTypes.get(value);\n state.heap[String(id)] = {\n kind: \"object\",\n entries: serializeObjectEntries(value, path, state),\n ...(errorType === undefined ? {} : { errorType })\n };\n }\n }\n\n return {\n kind: \"ref\",\n id\n };\n}\n\nfunction serializeObjectEntries(\n value: Record<string, unknown>,\n path: string,\n state: DumpState\n): Record<string, DumpValue> {\n const serialized: Record<string, DumpValue> = {};\n\n for (const [key, entry] of getEnumerableDataEntries(value)) {\n const dumped = serializeDumpValue(entry, `${path}.${key}`, state);\n if (dumped !== SKIP_VALUE) {\n serialized[key] = dumped;\n }\n }\n\n return serialized;\n}\n\nfunction indexHeapContainers(snapshot: DumpableSnapshot): WeakMap<object, number> {\n const stats = new Map<object, ContainerStat>();\n const ancestors = new WeakSet<object>();\n\n for (const [key, value] of getEnumerableDataEntries(snapshot)) {\n if (key === \"version\" || key === \"sourceHash\" || key === \"heap\") {\n continue;\n }\n\n collectContainerStats(value, stats, ancestors);\n }\n\n const heapIds = new WeakMap<object, number>();\n let nextId = 1;\n for (const [value, stat] of stats.entries()) {\n if (\n stat.count > 1 ||\n stat.cyclic ||\n isFloat32Array(value) ||\n (Array.isArray(value) && requiresArrayEntries(value)) ||\n isSandboxArguments(value) ||\n sandboxErrorTypes.has(value)\n ) {\n heapIds.set(value, nextId);\n nextId += 1;\n }\n }\n\n return heapIds;\n}\n\nfunction collectContainerStats(\n value: unknown,\n stats: Map<object, ContainerStat>,\n ancestors: WeakSet<object>\n): void {\n if (value === null || typeof value !== \"object\") {\n return;\n }\n\n if (!Array.isArray(value) && !isPlainObject(value) && !isFloat32Array(value)) {\n return;\n }\n\n let stat = stats.get(value);\n if (stat === undefined) {\n stat = {\n count: 0,\n cyclic: false,\n expanded: false\n };\n stats.set(value, stat);\n }\n\n stat.count += 1;\n\n if (ancestors.has(value)) {\n stat.cyclic = true;\n return;\n }\n\n if (stat.expanded) {\n return;\n }\n\n stat.expanded = true;\n ancestors.add(value);\n\n const entries = isSandboxArguments(value)\n ? getSandboxArgumentEntries(value).map(([, entry]) => entry)\n : getEnumerableDataValues(value);\n for (const entry of entries) {\n collectContainerStats(entry, stats, ancestors);\n }\n\n ancestors.delete(value);\n}\n\nfunction isPlainObject(value: object): value is Record<string, unknown> {\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction serializeArrayItems(value: unknown[], path: string, state: DumpState): DumpValue[] {\n return getArrayDataItems(value).map((entry, index) => {\n const serialized = serializeDumpValue(entry, `${path}[${index}]`, state);\n return serialized === SKIP_VALUE ? { kind: \"undefined\" } : serialized;\n });\n}\n\nfunction getArrayDataItems(value: unknown[]): unknown[] {\n const items: unknown[] = [];\n\n for (let index = 0; index < value.length; index += 1) {\n const descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n items.push(descriptor !== undefined && \"value\" in descriptor ? descriptor.value : undefined);\n }\n\n return items;\n}\n\nfunction getEnumerableDataEntries(value: object): Array<[string, unknown]> {\n const entries: Array<[string, unknown]> = [];\n\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(value))) {\n if (!descriptor.enumerable || !(\"value\" in descriptor)) {\n continue;\n }\n\n entries.push([key, descriptor.value]);\n }\n\n return entries;\n}\n\nfunction getEnumerableDataValues(value: object): unknown[] {\n return getEnumerableDataEntries(value).map(([, entry]) => entry);\n}\n", "export type OtelSpan = {\n setAttribute(key: string, value: unknown): void;\n addEvent(name: string, attrs: Record<string, unknown>): void;\n end(): void;\n};\n\nexport interface OtelSink {\n startSpan(name: string, attrs: Record<string, unknown>): OtelSpan;\n recordException(span: ReturnType<OtelSink[\"startSpan\"]>, error: unknown): void;\n}\n\nexport const noopOtelSink: OtelSink = {\n startSpan: () => noopOtelSpan,\n recordException: () => undefined\n};\n\nconst noopOtelSpan: OtelSpan = {\n setAttribute: () => undefined,\n addEvent: () => undefined,\n end: () => undefined\n};\n\nconst spanByAsyncValue = new WeakMap<object, OtelSpan>();\nconst activeSpans: OtelSpan[] = [];\nconst activeSinks: OtelSink[] = [];\n\nexport function bindOtelSpan(value: object, span: OtelSpan): void {\n spanByAsyncValue.set(value, span);\n}\n\nexport function getBoundOtelSpan(value: unknown): OtelSpan | undefined {\n return typeof value === \"object\" && value !== null ? spanByAsyncValue.get(value) : undefined;\n}\n\nexport function activateOtelSpan(span: OtelSpan): () => void {\n activeSpans.push(span);\n return () => {\n const index = activeSpans.lastIndexOf(span);\n if (index !== -1) {\n activeSpans.splice(index, 1);\n }\n };\n}\n\nexport function getActiveOtelSpan(): OtelSpan | undefined {\n return activeSpans.at(-1);\n}\n\nexport function activateOtelSink(sink: OtelSink | undefined): () => void {\n if (sink === undefined) {\n return () => undefined;\n }\n\n activeSinks.push(sink);\n return () => {\n const index = activeSinks.lastIndexOf(sink);\n if (index !== -1) {\n activeSinks.splice(index, 1);\n }\n };\n}\n\nexport function getActiveOtelSink(): OtelSink | undefined {\n return activeSinks.at(-1);\n}\n\nexport function safeStartSpan(\n sink: OtelSink | undefined,\n name: string,\n attrs: Record<string, unknown>\n): OtelSpan {\n if (sink === undefined) {\n return noopOtelSpan;\n }\n\n try {\n return sink.startSpan(name, attrs);\n } catch (error) {\n warnOtelSinkFailure(\"startSpan\", error);\n return noopOtelSpan;\n }\n}\n\nexport function safeSetAttribute(span: OtelSpan, key: string, value: unknown): void {\n try {\n span.setAttribute(key, value);\n } catch (error) {\n warnOtelSinkFailure(\"setAttribute\", error);\n }\n}\n\nexport function safeAddEvent(\n span: OtelSpan | undefined,\n name: string,\n attrs?: Record<string, unknown>\n): void {\n if (span === undefined) {\n return;\n }\n\n try {\n span.addEvent(name, attrs ?? {});\n } catch (error) {\n warnOtelSinkFailure(\"addEvent\", error);\n }\n}\n\nexport function safeRecordException(\n sink: OtelSink | undefined,\n span: OtelSpan,\n error: unknown\n): void {\n if (sink === undefined) {\n return;\n }\n\n try {\n sink.recordException(span, error);\n } catch (recordError) {\n warnOtelSinkFailure(\"recordException\", recordError);\n }\n}\n\nexport function safeEndSpan(span: OtelSpan): void {\n try {\n span.end();\n } catch (error) {\n warnOtelSinkFailure(\"end\", error);\n }\n}\n\nfunction warnOtelSinkFailure(method: string, error: unknown): void {\n console.warn(`OpenTelemetry sink ${method} failed: ${readErrorMessage(error)}`);\n}\n\nfunction readErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n", "import { bindOtelSpan, getBoundOtelSpan } from \"../observability/otel.js\";\nimport type { Budget, CompileTicket } from \"./budget.js\";\nimport { types as nodeTypes } from \"node:util\";\nimport { CompileScope, RegexCompileGuard, regexCompiledData } from \"./regex/compile-guard.js\";\nimport {\n copyFloat32Storage,\n float32DataProperties,\n float32Storage,\n isFloat32Array\n} from \"./float32.js\";\nimport type { GeneratorChannel } from \"./generator.js\";\nimport { SandboxError } from \"./budget.js\";\nimport { observeSandboxPromise, trackSandboxPromise } from \"./promise-tracker.js\";\nimport { promiseReplayContext } from \"./promise-replay.js\";\nimport {\n invokeCancelableClosure,\n readPromiseCancellation,\n registerPromiseCancellation\n} from \"./cancel.js\";\nimport { parseRegex, type RegexPattern } from \"./regex/parse.js\";\nimport { assertSandboxDataDepth } from \"../graph-depth.js\";\nimport { sandboxErrorTypes } from \"../error/shape.js\";\nimport {\n copySandboxArgumentProperties,\n createSandboxArguments,\n getSandboxArgumentEntries,\n isSandboxArguments\n} from \"./arguments.js\";\n\nexport { createSandboxArguments, isSandboxArguments } from \"./arguments.js\";\n\nconst sandboxClosureBrand = Symbol(\"SandboxClosure\");\nconst sandboxGeneratorBrand = Symbol(\"SandboxGenerator\");\nconst sandboxMapBrand = Symbol(\"SandboxMap\");\nconst sandboxPromiseBrand = Symbol(\"SandboxPromise\");\nconst sandboxRegexBrand = Symbol(\"SandboxRegex\");\nconst sandboxRegexPattern = Symbol(\"SandboxRegexPattern\");\nconst sandboxSetBrand = Symbol(\"SandboxSet\");\nconst sandboxRetainedValues = Symbol(\"SandboxRetainedValues\");\n\nexport type SandboxPrimitive = string | number | boolean | null | undefined;\n\nexport type SandboxValue =\n | SandboxPrimitive\n | Float32Array\n | SandboxObject\n | SandboxArray\n | SandboxClosure\n | SandboxGenerator\n | SandboxMap\n | SandboxSet\n | SandboxPromise\n | SandboxRegex;\n\nexport type SandboxObject = {\n [key: string]: SandboxValue;\n};\n\nexport type SandboxArray = SandboxValue[];\n\nexport type SandboxMap = {\n readonly kind: \"map\";\n readonly entries: Map<SandboxValue, SandboxValue>;\n readonly [sandboxMapBrand]: true;\n};\n\nexport type SandboxSet = {\n readonly kind: \"set\";\n readonly values: Set<SandboxValue>;\n readonly [sandboxSetBrand]: true;\n};\n\nexport type SandboxRegex = {\n readonly kind: \"regex\";\n readonly source: string;\n readonly flags: string;\n lastIndex: number;\n readonly [sandboxRegexBrand]: true;\n readonly [sandboxRegexPattern]: RegexPattern;\n};\n\nexport type SandboxCallContext = {\n readonly compilation?: CompileScope;\n readonly span?: {\n readonly end: {\n readonly column: number;\n readonly line: number;\n readonly offset: number;\n };\n readonly start: {\n readonly column: number;\n readonly line: number;\n readonly offset: number;\n };\n };\n readonly stack: readonly string[];\n readonly thisValue: SandboxValue;\n readonly invokeClosure?: (\n closure: SandboxClosure,\n args: readonly SandboxValue[],\n thisValue: SandboxValue\n ) => Promise<SandboxValue>;\n};\n\nexport type SandboxClosure = {\n readonly async?: true;\n readonly sandbox?: true;\n readonly boundTarget?: SandboxClosure;\n readonly cancellationSignal?: AbortSignal;\n readonly kind: \"fn\";\n readonly length?: number;\n readonly name?: string;\n readonly properties?: SandboxObject;\n readonly call: (\n args: readonly SandboxValue[],\n context?: SandboxCallContext\n ) => SandboxValue | Promise<SandboxValue>;\n readonly construct?: (\n args: readonly SandboxValue[],\n context?: SandboxCallContext\n ) => SandboxValue | Promise<SandboxValue>;\n readonly [sandboxClosureBrand]: true;\n readonly [sandboxRetainedValues]?: () => Iterable<SandboxValue>;\n};\n\nexport type SandboxPromise = {\n readonly kind: \"promise\";\n readonly synchronousPrefix?: Promise<void>;\n readonly promise: Promise<SandboxValue>;\n readonly hostCall?: import(\"./host-call.js\").HostCallRecord;\n readonly hostCallJournal?: import(\"./host-call.js\").HostCallJournal;\n readonly span?: SandboxCallContext[\"span\"];\n readonly [sandboxPromiseBrand]: true;\n};\n\nexport type SandboxGenerator = {\n readonly kind: \"generator\";\n state: \"start\" | \"running\" | \"suspended\" | \"done\";\n readonly channel: GeneratorChannel;\n readonly astNodeId?: number;\n readonly capturedScopeId?: number | string;\n readonly [sandboxGeneratorBrand]: true;\n};\n\ntype CopyFromSandboxOptions = {\n wrapClosure?: (value: SandboxClosure) => unknown;\n compilation?: CompileScope;\n};\n\ntype CopyState<TValue> = {\n seen: WeakMap<object, TValue>;\n};\n\nexport function createSandboxClosure(input: {\n async?: boolean;\n sandbox?: boolean;\n boundTarget?: SandboxClosure;\n cancellationSignal?: AbortSignal;\n call: (\n args: readonly SandboxValue[],\n context?: SandboxCallContext\n ) => SandboxValue | Promise<SandboxValue>;\n construct?: (\n args: readonly SandboxValue[],\n context?: SandboxCallContext\n ) => SandboxValue | Promise<SandboxValue>;\n name?: string;\n length?: number;\n properties?: SandboxObject | ((closure: SandboxClosure) => SandboxObject);\n retainedValues?: () => Iterable<SandboxValue>;\n}): SandboxClosure {\n const closure = {\n kind: \"fn\" as const,\n call: (args: readonly SandboxValue[], context?: SandboxCallContext) =>\n invokeCancelableClosure(closure, input.call, args, context),\n name: input.name,\n ...(input.construct === undefined\n ? {}\n : {\n construct: (args: readonly SandboxValue[], context?: SandboxCallContext) =>\n invokeCancelableClosure(closure, input.construct!, args, context, true)\n }),\n ...(input.async === true ? { async: true as const } : {})\n } as SandboxClosure;\n\n Object.defineProperty(closure, sandboxClosureBrand, {\n enumerable: false,\n value: true\n });\n\n if (input.sandbox === true) {\n Object.defineProperty(closure, \"sandbox\", { value: true });\n }\n\n if (input.length !== undefined) {\n Object.defineProperty(closure, \"length\", { value: input.length });\n }\n\n if (input.boundTarget !== undefined) {\n Object.defineProperty(closure, \"boundTarget\", { value: input.boundTarget });\n }\n\n if (input.cancellationSignal !== undefined) {\n Object.defineProperty(closure, \"cancellationSignal\", {\n value: input.cancellationSignal\n });\n }\n\n if (input.properties !== undefined) {\n Object.defineProperty(closure, \"properties\", {\n enumerable: false,\n value: Object.freeze(\n typeof input.properties === \"function\" ? input.properties(closure) : input.properties\n )\n });\n }\n\n if (input.retainedValues !== undefined) {\n Object.defineProperty(closure, sandboxRetainedValues, {\n value: input.retainedValues\n });\n }\n\n return Object.freeze(closure);\n}\n\nexport function createSandboxPromise(\n promise: Promise<SandboxValue>,\n metadata: {\n trackReplay?: boolean;\n synchronousPrefix?: Promise<void>;\n hostCall?: import(\"./host-call.js\").HostCallRecord;\n hostCallJournal?: import(\"./host-call.js\").HostCallJournal;\n span?: SandboxCallContext[\"span\"];\n } = {}\n): SandboxPromise {\n const original =\n metadata.trackReplay === false\n ? promise\n : (promiseReplayContext.getStore()?.track(promise) ?? promise);\n const sandboxPromise = {\n kind: \"promise\" as const,\n get promise() {\n return readPromiseCancellation(sandboxPromise, original);\n }\n } as SandboxPromise;\n\n Object.defineProperty(sandboxPromise, sandboxPromiseBrand, {\n enumerable: false,\n value: true\n });\n\n Object.defineProperty(sandboxPromise, Symbol.toStringTag, { value: \"Promise\" });\n\n if (metadata.span !== undefined) {\n Object.defineProperty(sandboxPromise, \"span\", {\n value: metadata.span\n });\n }\n\n if (metadata.synchronousPrefix !== undefined) {\n Object.defineProperty(sandboxPromise, \"synchronousPrefix\", {\n value: metadata.synchronousPrefix\n });\n }\n\n if (metadata.hostCall !== undefined) {\n Object.defineProperty(sandboxPromise, \"hostCall\", { value: metadata.hostCall });\n }\n if (metadata.hostCallJournal !== undefined) {\n Object.defineProperty(sandboxPromise, \"hostCallJournal\", {\n value: metadata.hostCallJournal\n });\n }\n\n trackSandboxPromise(sandboxPromise);\n registerPromiseCancellation(sandboxPromise);\n\n return Object.freeze(sandboxPromise);\n}\n\nexport function createSandboxGenerator(\n channel: GeneratorChannel,\n metadata: { astNodeId: number; capturedScopeId: number | string } | undefined = undefined\n): SandboxGenerator {\n const generator = {\n kind: \"generator\" as const,\n state: \"start\" as const,\n channel,\n ...metadata\n } as SandboxGenerator;\n\n Object.defineProperty(generator, sandboxGeneratorBrand, {\n enumerable: false,\n value: true\n });\n\n return generator;\n}\n\nexport function createSandboxMap(\n entries: Iterable<readonly [SandboxValue, SandboxValue]> = []\n): SandboxMap {\n const map = {} as SandboxMap;\n\n Object.defineProperties(map, {\n kind: {\n value: \"map\"\n },\n entries: {\n value: new Map(entries)\n }\n });\n\n Object.defineProperty(map, sandboxMapBrand, {\n enumerable: false,\n value: true\n });\n\n return Object.freeze(map);\n}\n\nexport function createSandboxSet(values: Iterable<SandboxValue> = []): SandboxSet {\n const set = {} as SandboxSet;\n\n Object.defineProperties(set, {\n kind: {\n value: \"set\"\n },\n values: {\n value: new Set(values)\n }\n });\n\n Object.defineProperty(set, sandboxSetBrand, {\n enumerable: false,\n value: true\n });\n\n return Object.freeze(set);\n}\n\nexport function createSandboxRegex(\n source: string,\n flags = \"\",\n lastIndex = 0,\n compilation?: CompileScope\n): SandboxRegex {\n if (typeof source !== \"string\" || typeof flags !== \"string\") {\n throw new TypeError(\n \"Invalid sandbox RegExp source or flags: expected own string data properties.\"\n );\n }\n const pattern = parseRegex(source, flags, compilation, 7 + source.length + flags.length);\n const regex = { kind: \"regex\", source, flags, lastIndex } as SandboxRegex;\n Object.defineProperties(regex, {\n [sandboxRegexBrand]: { value: true },\n [sandboxRegexPattern]: { value: pattern }\n });\n return Object.seal(regex);\n}\n\nexport function getSandboxRegexPattern(regex: SandboxRegex): RegexPattern {\n return regex[sandboxRegexPattern];\n}\n\nexport function isSandboxClosure(value: unknown): value is SandboxClosure {\n return typeof value === \"object\" && value !== null && sandboxClosureBrand in value;\n}\n\nexport function isSandboxMap(value: unknown): value is SandboxMap {\n return typeof value === \"object\" && value !== null && sandboxMapBrand in value;\n}\n\nexport function isSandboxPromise(value: unknown): value is SandboxPromise {\n return typeof value === \"object\" && value !== null && sandboxPromiseBrand in value;\n}\n\nexport function isSandboxSet(value: unknown): value is SandboxSet {\n return typeof value === \"object\" && value !== null && sandboxSetBrand in value;\n}\n\nexport function isSandboxGenerator(value: unknown): value is SandboxGenerator {\n return typeof value === \"object\" && value !== null && sandboxGeneratorBrand in value;\n}\n\nexport function isSandboxRegex(value: unknown): value is SandboxRegex {\n return typeof value === \"object\" && value !== null && sandboxRegexBrand in value;\n}\n\nexport function deepCopyToSandbox(value: unknown): SandboxValue {\n return copyToSandbox(value, {\n seen: new WeakMap()\n });\n}\n\nexport function cloneSandboxValue(value: SandboxValue): SandboxValue {\n return copyToSandbox(\n value,\n {\n seen: new WeakMap()\n },\n \"<root>\",\n true\n );\n}\n\nexport function allocateProducedSandboxValue(value: SandboxValue, budget: Budget): SandboxValue {\n allocateSandboxValue(value, budget, new WeakSet());\n return value;\n}\n\nexport function measureSandboxData(\n values: Iterable<unknown>,\n options: {\n ignoreClosures?: boolean;\n ignoreClosureCaptures?: boolean;\n compileTickets?: Set<CompileTicket>;\n } = {}\n): number {\n const seen = new WeakSet<object>();\n let usage = 0;\n\n const visit = (value: unknown): void => {\n if (typeof value === \"string\") {\n usage += value.length;\n return;\n }\n if (typeof value !== \"object\" || value === null) return;\n if (seen.has(value)) return;\n seen.add(value);\n\n usage += 1;\n if (isFloat32Array(value)) {\n const storage = float32Storage(value);\n if (!seen.has(storage.buffer)) {\n seen.add(storage.buffer);\n usage += storage.byteLength;\n }\n for (const [key, descriptor] of float32DataProperties(value)) {\n usage += key.length + 1;\n visit(descriptor.value);\n }\n return;\n }\n if (Array.isArray(value)) {\n usage += value.length;\n for (let index = 0; index < value.length; index += 1) {\n const descriptor = Object.getOwnPropertyDescriptor(value, index);\n if (descriptor !== undefined && \"value\" in descriptor) visit(descriptor.value);\n }\n return;\n }\n if (isSandboxMap(value)) {\n usage += value.entries.size;\n for (const [key, entry] of value.entries) {\n visit(key);\n visit(entry);\n }\n return;\n }\n if (isSandboxSet(value)) {\n usage += value.values.size;\n for (const entry of value.values) visit(entry);\n return;\n }\n if (isSandboxClosure(value)) {\n if (options.ignoreClosures) return;\n if (value.properties !== undefined) visit(value.properties);\n if (!options.ignoreClosureCaptures)\n for (const retained of value[sandboxRetainedValues]?.() ?? []) visit(retained);\n return;\n }\n if (isSandboxGenerator(value)) {\n const snapshot = value.channel.snapshot();\n usage += snapshot.sent.length;\n for (const completion of snapshot.sent) visit(completion.value);\n return;\n }\n if (isSandboxPromise(value)) return;\n if (isSandboxRegex(value)) {\n const { source, flags } = captureRegexData(value);\n const compiled = regexCompiledData(getSandboxRegexPattern(value));\n const staged =\n compiled.ticket === undefined\n ? 0\n : compiled.ticket.owner.budget.compileTicketUsage(compiled.ticket);\n usage += Math.max(6 + source.length + flags.length + compiled.units, staged - 1);\n if (compiled.ticket !== undefined) options.compileTickets?.add(compiled.ticket);\n return;\n }\n\n if (isSandboxArguments(value)) {\n const entries = getSandboxArgumentEntries(value);\n usage += entries.length;\n for (const [key, entry] of entries) {\n usage += key.length;\n visit(entry);\n }\n return;\n }\n\n const descriptors = Object.getOwnPropertyDescriptors(value);\n const keys = Object.keys(descriptors);\n let entryCount = 0;\n for (const key of keys) {\n if (descriptors[key].enumerable) entryCount += 1;\n }\n usage += entryCount;\n for (const key of keys) {\n const descriptor = descriptors[key];\n if (!descriptor.enumerable) continue;\n usage += key.length;\n visit(\"value\" in descriptor ? descriptor.value : undefined);\n }\n };\n\n for (const value of values) visit(value);\n return usage;\n}\n\nexport function reconcileCompiledValues(\n budget: Budget,\n values: Iterable<unknown>,\n compilation?: CompileScope,\n parent?: CompileScope,\n escaping: Iterable<unknown> = []\n): void {\n while (parent?.closed) parent = parent.parent;\n const included = new Set<CompileTicket>();\n const usage = measureSandboxData(values, { compileTickets: included });\n const kept = new Set<CompileTicket>();\n if (parent !== undefined) measureSandboxData(escaping, { compileTickets: kept });\n const transferred = new Set<CompileTicket>();\n for (const ticket of included) {\n if (!kept.has(ticket)) {\n transferred.add(ticket);\n }\n }\n const retained = budget.reconcileCompileData(\n usage,\n included,\n transferred,\n undefined,\n parent === undefined\n );\n for (const ticket of retained) compilation?.tickets.delete(ticket);\n if (compilation !== undefined && parent !== undefined) compilation.forward(included, parent);\n}\n\nfunction captureRegexData(value: object): { source: string; flags: string; lastIndex: number } {\n const source = Object.getOwnPropertyDescriptor(value, \"source\");\n const flags = Object.getOwnPropertyDescriptor(value, \"flags\");\n if (\n source === undefined ||\n !(\"value\" in source) ||\n typeof source.value !== \"string\" ||\n flags === undefined ||\n !(\"value\" in flags) ||\n typeof flags.value !== \"string\"\n ) {\n throw new TypeError(\n \"Invalid sandbox RegExp source or flags: expected own string data properties.\"\n );\n }\n const cursor = Object.getOwnPropertyDescriptor(value, \"lastIndex\");\n if (cursor === undefined || !(\"value\" in cursor)) {\n throw new TypeError(\"Invalid sandbox RegExp lastIndex: expected an own data property.\");\n }\n return { source: source.value, flags: flags.value, lastIndex: cursor.value as number };\n}\n\nexport function deepCopyFromSandbox(\n value: SandboxPromise,\n options?: CopyFromSandboxOptions\n): Promise<unknown>;\nexport function deepCopyFromSandbox(value: SandboxValue, options?: CopyFromSandboxOptions): unknown;\nexport function deepCopyFromSandbox(\n value: SandboxValue,\n options: CopyFromSandboxOptions = {}\n): unknown {\n return copyFromSandbox(\n value,\n {\n seen: new WeakMap()\n },\n \"<root>\",\n options\n );\n}\n\nfunction copyToSandbox(\n value: unknown,\n state: CopyState<SandboxValue>,\n path = \"<root>\",\n cloneSandboxCollections = false,\n depth = 0\n): SandboxValue {\n assertSandboxDataDepth(depth);\n if (isSandboxPrimitive(value)) {\n return value;\n }\n\n if (\n isSandboxClosure(value) ||\n isSandboxGenerator(value) ||\n isSandboxRegex(value) ||\n isSandboxPromise(value)\n ) {\n return value;\n }\n\n if (isSandboxMap(value)) {\n if (!cloneSandboxCollections) return value;\n const existing = state.seen.get(value);\n if (existing !== undefined) return existing;\n const copy = createSandboxMap();\n state.seen.set(value, copy);\n for (const [key, entry] of value.entries) {\n copy.entries.set(\n copyToSandbox(key, state, `${path}.<key>`, true, depth + 1),\n copyToSandbox(entry, state, `${path}.<value>`, true, depth + 1)\n );\n }\n return copy;\n }\n\n if (isSandboxSet(value)) {\n if (!cloneSandboxCollections) return value;\n const existing = state.seen.get(value);\n if (existing !== undefined) return existing;\n const copy = createSandboxSet();\n state.seen.set(value, copy);\n for (const entry of value.values) {\n copy.values.add(copyToSandbox(entry, state, `${path}.<value>`, true, depth + 1));\n }\n return copy;\n }\n\n if (isHostPromise(value)) {\n const existing = state.seen.get(value);\n if (existing !== undefined) return existing;\n const promise = Promise.resolve(value).then(\n (resolved) => copyToSandbox(resolved, { seen: new WeakMap() }),\n (reason) => Promise.reject(copyToSandbox(reason, { seen: new WeakMap() }))\n );\n const sandboxPromise = createSandboxPromise(promise);\n state.seen.set(value, sandboxPromise);\n const span = getBoundOtelSpan(value);\n if (span !== undefined) {\n bindOtelSpan(promise, span);\n bindOtelSpan(sandboxPromise, span);\n }\n return sandboxPromise;\n }\n\n if (isFloat32Array(value)) {\n const existing = state.seen.get(value);\n if (existing !== undefined) return existing;\n const copy = copyFloat32Storage(value, state);\n state.seen.set(value, copy);\n for (const [key, descriptor] of float32DataProperties(value)) {\n Object.defineProperty(copy, key, {\n ...descriptor,\n value: copyToSandbox(\n descriptor.value,\n state,\n joinPath(path, key),\n cloneSandboxCollections,\n depth + 1\n )\n });\n }\n if (!Object.isExtensible(value)) Object.preventExtensions(copy);\n return copy;\n }\n\n if (value instanceof Map) {\n const existing = state.seen.get(value);\n if (existing !== undefined) {\n return existing;\n }\n\n const copy = createSandboxMap();\n state.seen.set(value, copy);\n for (const [key, entry] of value) {\n copy.entries.set(\n copyToSandbox(key, state, `${path}.<key>`, cloneSandboxCollections, depth + 1),\n copyToSandbox(entry, state, `${path}.<value>`, cloneSandboxCollections, depth + 1)\n );\n }\n return copy;\n }\n\n if (value instanceof Set) {\n const existing = state.seen.get(value);\n if (existing !== undefined) {\n return existing;\n }\n\n const copy = createSandboxSet();\n state.seen.set(value, copy);\n for (const entry of value) {\n copy.values.add(\n copyToSandbox(entry, state, `${path}.<value>`, cloneSandboxCollections, depth + 1)\n );\n }\n return copy;\n }\n\n if (isPlainArray(value)) {\n const existing = state.seen.get(value);\n if (existing !== undefined) {\n return existing;\n }\n\n const copy = new Array(value.length) as SandboxArray;\n state.seen.set(value, copy);\n\n for (const entry of getEnumerableArrayEntries(value, path)) {\n defineOwnDataProperty(\n copy,\n entry.key,\n copyToSandbox(\n entry.value,\n state,\n joinArrayPath(path, entry.key),\n cloneSandboxCollections,\n depth + 1\n )\n );\n }\n\n return copy;\n }\n\n if (isSandboxArguments(value)) {\n const existing = state.seen.get(value);\n if (existing !== undefined) return existing;\n const copy = createSandboxArguments([]);\n state.seen.set(value, copy);\n copySandboxArgumentProperties(value, copy, (entry, key) =>\n copyToSandbox(entry, state, joinPath(path, key), cloneSandboxCollections, depth + 1)\n );\n return copy;\n }\n\n if (isPlainObject(value)) {\n const existing = state.seen.get(value);\n if (existing !== undefined) {\n return existing;\n }\n\n const copy = createPlainObject(\n !cloneSandboxCollections || Object.getPrototypeOf(value) === null\n );\n state.seen.set(value, copy);\n const errorType = sandboxErrorTypes.get(value);\n if (errorType !== undefined) sandboxErrorTypes.set(copy, errorType);\n\n for (const entry of getEnumerableObjectEntries(value, path)) {\n defineOwnDataProperty(\n copy,\n entry.key,\n copyToSandbox(\n entry.value,\n state,\n joinPath(path, entry.key),\n cloneSandboxCollections,\n depth + 1\n )\n );\n }\n\n return copy;\n }\n\n throw new TypeError(`Unsupported sandbox value at ${path}: ${describeValue(value)}`);\n}\n\nfunction copyFromSandbox(\n value: SandboxValue,\n state: CopyState<unknown>,\n path = \"<root>\",\n options: CopyFromSandboxOptions,\n depth = 0\n): unknown {\n assertSandboxDataDepth(depth);\n if (isSandboxPrimitive(value)) {\n return value;\n }\n\n if (nodeTypes.isProxy(value)) throw new TypeError(\"Unsupported proxy sandbox value.\");\n const regexBrand = Object.getOwnPropertyDescriptor(value, sandboxRegexBrand);\n if (regexBrand !== undefined) {\n if (!(\"value\" in regexBrand) || regexBrand.value !== true) {\n throw new TypeError(\"Invalid sandbox RegExp brand.\");\n }\n const { source, flags, lastIndex } = captureRegexData(value);\n const guard = new RegexCompileGuard(options.compilation);\n try {\n guard.preflight(source, flags);\n const existing = state.seen.get(value);\n if (existing !== undefined) return existing;\n guard.allocate(1 + source.length + flags.length);\n const regex = new RegExp(source, flags);\n regex.lastIndex = lastIndex;\n guard.retainScratch();\n state.seen.set(value, regex);\n return regex;\n } finally {\n guard.close();\n }\n }\n\n if (isFloat32Array(value)) {\n const existing = state.seen.get(value);\n if (existing !== undefined) return existing;\n const copy = copyFloat32Storage(value, state);\n state.seen.set(value, copy);\n for (const [key, descriptor] of float32DataProperties(value)) {\n Object.defineProperty(copy, key, {\n ...descriptor,\n value: copyFromSandbox(descriptor.value, state, joinPath(path, key), options, depth + 1)\n });\n }\n if (!Object.isExtensible(value)) Object.preventExtensions(copy);\n return copy;\n }\n\n if (isSandboxClosure(value)) {\n if (options.wrapClosure === undefined) {\n throw new TypeError(\n \"Sandbox closures cannot cross into host values without an explicit wrapper.\"\n );\n }\n\n const existing = state.seen.get(value);\n if (existing !== undefined) {\n return existing;\n }\n\n const wrapped = options.wrapClosure(value);\n state.seen.set(value, wrapped);\n return wrapped;\n }\n\n if (isSandboxPromise(value)) {\n observeSandboxPromise(value);\n const copySettlement = (settled: SandboxValue): unknown => {\n const owner = options.compilation?.owner;\n const operation = owner?.budget.acquireCompileOwner(false, owner);\n const compilation = new CompileScope(operation?.owner);\n try {\n return copyFromSandbox(settled, { seen: new WeakMap() }, \"<root>\", {\n ...options,\n compilation\n });\n } finally {\n compilation.dispose();\n operation?.release();\n }\n };\n return value.promise.then(copySettlement, (reason: SandboxValue) =>\n Promise.reject(reason instanceof SandboxError ? reason : copySettlement(reason))\n );\n }\n\n if (isSandboxGenerator(value)) {\n throw new TypeError(\"Sandbox generators cannot cross into host values.\");\n }\n\n if (isSandboxRegex(value)) {\n throw new TypeError(\"Invalid sandbox RegExp brand.\");\n }\n\n if (isSandboxMap(value)) {\n const existing = state.seen.get(value);\n if (existing !== undefined) {\n return existing;\n }\n\n const copy = new Map<unknown, unknown>();\n state.seen.set(value, copy);\n for (const [key, entry] of value.entries) {\n copy.set(\n copyFromSandbox(key, state, `${path}.<key>`, options, depth + 1),\n copyFromSandbox(entry, state, `${path}.<value>`, options, depth + 1)\n );\n }\n return copy;\n }\n\n if (isSandboxSet(value)) {\n const existing = state.seen.get(value);\n if (existing !== undefined) {\n return existing;\n }\n\n const copy = new Set<unknown>();\n state.seen.set(value, copy);\n for (const entry of value.values) {\n copy.add(copyFromSandbox(entry, state, `${path}.<value>`, options, depth + 1));\n }\n return copy;\n }\n\n if (isPlainArray(value)) {\n const existing = state.seen.get(value);\n if (existing !== undefined) {\n return existing;\n }\n\n const copy = new Array(value.length);\n state.seen.set(value, copy);\n\n for (const entry of getEnumerableArrayEntries(value, path)) {\n defineOwnDataProperty(\n copy,\n entry.key,\n copyFromSandbox(entry.value, state, joinArrayPath(path, entry.key), options, depth + 1)\n );\n }\n\n return copy;\n }\n\n if (isSandboxArguments(value)) {\n const existing = state.seen.get(value);\n if (existing !== undefined) return existing;\n const copy = createSandboxArguments([]);\n state.seen.set(value, copy);\n copySandboxArgumentProperties(value, copy, (entry, key) =>\n copyFromSandbox(entry, state, joinPath(path, key), options, depth + 1)\n );\n return copy;\n }\n\n if (isPlainObject(value)) {\n const existing = state.seen.get(value);\n if (existing !== undefined) {\n return existing;\n }\n\n const copy = createPlainObject(Object.getPrototypeOf(value) === null) as Record<\n string,\n unknown\n >;\n state.seen.set(value, copy);\n\n for (const entry of getEnumerableObjectEntries(value, path)) {\n defineOwnDataProperty(\n copy,\n entry.key,\n copyFromSandbox(entry.value, state, joinPath(path, entry.key), options, depth + 1)\n );\n }\n\n return copy;\n }\n\n throw new TypeError(`Unsupported sandbox value at ${path}: ${describeValue(value)}`);\n}\n\nfunction isSandboxPrimitive(value: unknown): value is SandboxPrimitive {\n return (\n value === null ||\n value === undefined ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n );\n}\n\nfunction isHostPromise(value: unknown): value is Promise<unknown> {\n return value instanceof Promise;\n}\n\nfunction allocateSandboxValue(value: SandboxValue, budget: Budget, seen: WeakSet<object>): void {\n if (typeof value === \"string\") {\n budget.allocateString(value);\n return;\n }\n\n if (isFloat32Array(value)) {\n if (seen.has(value)) return;\n seen.add(value);\n budget.allocateArrayLength(Math.ceil(float32Storage(value).byteLength / 4));\n for (const [key, descriptor] of float32DataProperties(value)) {\n budget.allocateString(key);\n allocateSandboxValue(descriptor.value, budget, seen);\n }\n return;\n }\n\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n return;\n }\n\n seen.add(value);\n budget.allocateArrayLength(value.length);\n for (const entry of value) {\n allocateSandboxValue(entry, budget, seen);\n }\n\n return;\n }\n\n if (isSandboxMap(value)) {\n if (seen.has(value)) {\n return;\n }\n\n seen.add(value);\n budget.allocateCollectionEntries(value.entries.size);\n for (const [key, entry] of value.entries) {\n allocateSandboxValue(key, budget, seen);\n allocateSandboxValue(entry, budget, seen);\n }\n return;\n }\n\n if (isSandboxSet(value)) {\n if (seen.has(value)) {\n return;\n }\n\n seen.add(value);\n budget.allocateCollectionEntries(value.values.size);\n for (const entry of value.values) {\n allocateSandboxValue(entry, budget, seen);\n }\n return;\n }\n\n if (\n typeof value !== \"object\" ||\n value === null ||\n isSandboxClosure(value) ||\n isSandboxMap(value) ||\n isSandboxSet(value) ||\n isSandboxPromise(value)\n ) {\n return;\n }\n\n if (seen.has(value)) {\n return;\n }\n\n seen.add(value);\n const entries = isSandboxArguments(value)\n ? getSandboxArgumentEntries(value).map(([, entry]) => entry)\n : Object.values(value);\n for (const entry of entries) {\n allocateSandboxValue(entry, budget, seen);\n }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction isPlainArray(value: unknown): value is unknown[] {\n return Array.isArray(value) && Object.getPrototypeOf(value) === Array.prototype;\n}\n\nfunction createPlainObject(useNullPrototype: boolean): SandboxObject {\n return (useNullPrototype ? Object.create(null) : {}) as SandboxObject;\n}\n\nexport function defineOwnDataProperty(target: object, key: string, value: unknown): void {\n Object.defineProperty(target, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value\n });\n}\n\nfunction getEnumerableObjectEntries<TValue>(\n value: Record<string, TValue>,\n path: string\n): Array<{ key: string; value: TValue }> {\n const descriptors = Object.getOwnPropertyDescriptors(value);\n const entries: Array<{ key: string; value: TValue }> = [];\n\n for (const [key, descriptor] of Object.entries(descriptors)) {\n if (!descriptor.enumerable) {\n continue;\n }\n\n if (\"get\" in descriptor || \"set\" in descriptor) {\n throw new TypeError(`Unsupported sandbox value at ${joinPath(path, key)}: accessor property`);\n }\n\n entries.push({\n key,\n value: descriptor.value as TValue\n });\n }\n\n return entries;\n}\n\nfunction getEnumerableArrayEntries<TValue>(\n value: TValue[],\n path: string\n): Array<{ key: string; value: TValue }> {\n const descriptors = Object.getOwnPropertyDescriptors(value);\n const entries: Array<{ key: string; value: TValue }> = [];\n\n for (const [key, descriptor] of Object.entries(descriptors)) {\n if (key === \"length\" || !descriptor.enumerable) {\n continue;\n }\n\n if (\"get\" in descriptor || \"set\" in descriptor) {\n throw new TypeError(\n `Unsupported sandbox value at ${joinArrayPath(path, key)}: accessor property`\n );\n }\n\n entries.push({\n key,\n value: descriptor.value as TValue\n });\n }\n\n return entries;\n}\n\nexport function isArrayIndexKey(value: string): boolean {\n if (value === \"\") {\n return false;\n }\n\n const index = Number(value);\n return Number.isInteger(index) && index >= 0 && index < 4_294_967_295 && String(index) === value;\n}\n\nfunction describeValue(value: unknown): string {\n if (typeof value === \"function\") {\n return \"function\";\n }\n\n if (typeof value === \"bigint\" || typeof value === \"symbol\") {\n return typeof value;\n }\n\n if (typeof value === \"object\" && value !== null) {\n return value.constructor?.name ?? \"Object\";\n }\n\n return typeof value;\n}\n\nfunction joinPath(path: string, key: string): string {\n return path === \"<root>\" ? `<root>.${key}` : `${path}.${key}`;\n}\n\nfunction joinArrayPath(path: string, key: string): string {\n return isArrayIndexKey(key) ? `${path}[${key}]` : joinPath(path, key);\n}\n", "import { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport type { ErrorSourceSpan } from \"../error/shape.js\";\nimport { SandboxError } from \"./budget.js\";\nimport type { SandboxPromise, SandboxValue } from \"./values.js\";\n\ntype TrackedPromise = {\n observed: boolean;\n promise: SandboxPromise;\n rejectionReason?: SandboxValue;\n rejected: boolean;\n};\n\nexport class SandboxPromiseRejectionTracker {\n private readonly records = new Set<TrackedPromise>();\n private readonly recordsByPromise = new WeakMap<SandboxPromise, TrackedPromise>();\n private fatalRejection: SandboxError | undefined;\n private readonly fatalWaiters = new Set<(error: SandboxError) => void>();\n\n get failure(): SandboxError | undefined {\n return this.fatalRejection;\n }\n\n onFatalRejection(interrupt: (error: SandboxError) => void): () => void {\n if (this.fatalRejection === undefined) this.fatalWaiters.add(interrupt);\n else interrupt(this.fatalRejection);\n return () => this.fatalWaiters.delete(interrupt);\n }\n\n interruptOnFatalRejection(pending: Promise<SandboxValue>): Promise<SandboxValue> {\n return new Promise((resolve, reject) => {\n const detach = this.onFatalRejection(reject);\n pending.then(\n (value) => {\n detach();\n resolve(value);\n },\n (reason: unknown) => {\n detach();\n reject(reason);\n }\n );\n });\n }\n\n observe(promise: SandboxPromise): void {\n const record = this.recordsByPromise.get(promise);\n if (record !== undefined) {\n record.observed = true;\n }\n }\n\n track(promise: SandboxPromise, outcome?: Promise<SandboxValue>): void {\n const existing = this.recordsByPromise.get(promise);\n if (existing !== undefined && outcome === undefined) {\n return;\n }\n\n const record: TrackedPromise = existing ?? {\n observed: false,\n promise,\n rejected: false\n };\n this.records.add(record);\n this.recordsByPromise.set(promise, record);\n\n const pending = outcome ?? promise.promise;\n pending.then(\n () => undefined,\n (reason: SandboxValue) => {\n if (\n this.fatalRejection === undefined &&\n reason instanceof SandboxError &&\n (reason.code === \"budgetExceeded\" || reason.code === \"reentry\")\n ) {\n this.fatalRejection = reason;\n for (const interrupt of this.fatalWaiters) interrupt(reason);\n this.fatalWaiters.clear();\n }\n if (record.rejected) return;\n record.rejected = true;\n record.rejectionReason = reason;\n }\n );\n pending.catch(() => undefined);\n }\n\n async findUnhandledRejection(): Promise<\n | {\n reason: SandboxValue | undefined;\n span: ErrorSourceSpan | undefined;\n }\n | undefined\n > {\n await flushPromiseJobs();\n\n if (this.fatalRejection !== undefined) throw this.fatalRejection;\n\n for (const record of this.records) {\n if (record.rejected && !record.observed) {\n return {\n reason: record.rejectionReason,\n span: record.promise.span\n };\n }\n }\n\n return undefined;\n }\n}\n\nconst activePromiseTracker = new AsyncLocalStorage<SandboxPromiseRejectionTracker>();\nconst fatalRejectionCleanup = new AsyncLocalStorage<boolean>();\n\nexport function assertPromiseExecutionAllowed(): void {\n const failure = activePromiseTracker.getStore()?.failure;\n if (failure !== undefined && fatalRejectionCleanup.getStore() !== true) throw failure;\n}\n\nexport function onFatalPromiseRejection(\n interrupt: (error: SandboxError) => void\n): (() => void) | undefined {\n if (fatalRejectionCleanup.getStore() === true) return undefined;\n return activePromiseTracker.getStore()?.onFatalRejection(interrupt);\n}\n\nexport function interruptOnFatalPromiseRejection(\n pending: Promise<SandboxValue>\n): Promise<SandboxValue> {\n if (fatalRejectionCleanup.getStore() === true) return pending;\n return activePromiseTracker.getStore()?.interruptOnFatalRejection(pending) ?? pending;\n}\n\nexport function withFatalPromiseCleanup<TResult>(callback: () => TResult): TResult {\n return fatalRejectionCleanup.run(true, callback);\n}\n\nexport function createSandboxPromiseRejectionTracker(): SandboxPromiseRejectionTracker {\n return new SandboxPromiseRejectionTracker();\n}\n\nexport function observeSandboxPromise(promise: SandboxPromise): void {\n activePromiseTracker.getStore()?.observe(promise);\n}\n\nexport function trackSandboxPromise(\n promise: SandboxPromise,\n outcome?: Promise<SandboxValue>\n): void {\n activePromiseTracker.getStore()?.track(promise, outcome);\n}\n\nexport function withSandboxPromiseRejectionTracker<TResult>(\n tracker: SandboxPromiseRejectionTracker,\n callback: () => TResult\n): TResult {\n return activePromiseTracker.run(tracker, callback);\n}\n\nasync function flushPromiseJobs(): Promise<void> {\n for (let index = 0; index < 20; index += 1) {\n await Promise.resolve();\n }\n}\n", "import { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport { validateSnapshotData } from \"../snapshot/validation.js\";\nimport { SandboxError, type Budget } from \"./budget.js\";\n\ntype ReplayEvent =\n | { kind: \"promise\"; id: number; step: number }\n | { kind: \"callback-start\"; token: string; step: number; promises: number }\n | { kind: \"callback-end\"; token: string; step: number };\n\nexport type PromiseReplaySnapshot = {\n version: 1;\n steps: number;\n promises: number;\n settlements: Array<{ id: number; step: number }>;\n events?: ReplayEvent[];\n executionTrace?: { start: number; nodes: number[] };\n};\n\nexport class PromiseReplay {\n private steps = 0;\n private nextPromise = 1;\n private position = 0;\n private readonly replaying: boolean;\n private readonly restored: PromiseReplaySnapshot;\n private readonly restoredEvents: ReplayEvent[];\n private readonly events: ReplayEvent[];\n private readonly ready = new Map<number, () => void>();\n private readonly callbackTasks = new Map<string, () => void>();\n private readonly completedCallbacks = new Set<string>();\n private readonly rejectors = new Map<number, (reason: unknown) => void>();\n private failure?: { reason: unknown };\n private callbackCount = 0;\n private readonly waiting = new Set<() => void>();\n private readonly liveWaiters = new Set<{\n resolve: () => void;\n reject: (reason: unknown) => void;\n }>();\n private budget?: Budget;\n private executionTrace?: { start: number; nodes: number[] };\n\n constructor(snapshot?: unknown) {\n this.replaying = snapshot !== undefined;\n this.restored =\n snapshot === undefined\n ? { version: 1, steps: 0, promises: 0, settlements: [] }\n : validateReplay(snapshot);\n this.restoredEvents =\n this.restored.events ??\n this.restored.settlements.map((entry) => ({ kind: \"promise\", ...entry }));\n this.events = [...this.restoredEvents];\n this.callbackCount = this.events.filter((entry) => entry.kind === \"callback-start\").length;\n this.executionTrace =\n this.restored.executionTrace === undefined\n ? undefined\n : structuredClone(this.restored.executionTrace);\n }\n\n get currentStep(): number {\n return this.steps;\n }\n\n beforeNode(nodeId?: number): void | Promise<void> {\n this.assertHealthy();\n this.drain();\n this.assertHealthy();\n const expected = this.restoredEvents[this.position];\n if (expected !== undefined && expected.step <= this.steps) {\n if (expected.kind === \"promise\" && expected.id >= this.nextPromise) {\n throw new TypeError(\"Promise replay references work not created at this position.\");\n }\n return new Promise<void>((resolve) => this.waiting.add(resolve)).then(() =>\n this.beforeNode(nodeId)\n );\n }\n const expectedNode =\n this.restored.executionTrace?.nodes[this.steps - this.restored.executionTrace.start];\n if (expectedNode !== undefined && expectedNode !== nodeId) {\n return new Promise<void>((resolve) => this.waiting.add(resolve)).then(() =>\n this.beforeNode(nodeId)\n );\n }\n if (nodeId !== undefined && this.callbackCount > 0) {\n this.executionTrace ??= { start: this.steps, nodes: [] };\n if (this.steps >= this.executionTrace.start + this.executionTrace.nodes.length) {\n this.budget?.setRetainedDataUsage(\n this,\n Math.max(this.nextPromise - 1, this.restored.promises) * 3 +\n this.callbackCount * 4 +\n this.executionTrace.nodes.length +\n 1\n );\n this.executionTrace.nodes.push(nodeId);\n }\n }\n this.steps += 1;\n this.drain();\n for (const wake of this.waiting) wake();\n this.waiting.clear();\n }\n\n track<TValue>(promise: Promise<TValue>): Promise<TValue> {\n if (this.failure !== undefined) {\n void promise.catch(() => undefined);\n return Promise.reject(this.failure.reason);\n }\n try {\n this.budget?.setRetainedDataUsage(\n this,\n Math.max(this.nextPromise, this.restored.promises) * 3 +\n this.callbackCount * 4 +\n (this.executionTrace?.nodes.length ?? 0)\n );\n } catch (error) {\n void promise.catch(() => undefined);\n throw error;\n }\n const id = this.nextPromise++;\n if (!this.replaying) {\n const settled = () => {\n if (this.failure !== undefined) return;\n this.events.push({ kind: \"promise\", id, step: this.steps });\n };\n void promise.then(settled, (reason: unknown) => {\n if (\n reason instanceof SandboxError &&\n (reason.code === \"budgetExceeded\" || reason.code === \"reentry\")\n )\n return;\n settled();\n });\n return promise;\n }\n const tracked = new Promise<TValue>((resolve, reject) => {\n this.rejectors.set(id, reject);\n promise.then(\n (value) => {\n if (this.failure !== undefined) return;\n this.ready.set(id, () => {\n this.rejectors.delete(id);\n resolve(value);\n });\n this.drain();\n },\n (reason: unknown) => {\n if (this.failure !== undefined) return;\n if (\n reason instanceof SandboxError &&\n (reason.code === \"budgetExceeded\" || reason.code === \"reentry\")\n ) {\n this.rejectors.delete(id);\n reject(reason);\n return;\n }\n this.ready.set(id, () => {\n this.rejectors.delete(id);\n reject(reason);\n });\n this.drain();\n }\n );\n });\n this.drain();\n return tracked;\n }\n\n beginCallback(token: string): void {\n const expected = this.restoredEvents[this.position];\n if (expected !== undefined) {\n if (\n expected.kind !== \"callback-start\" ||\n expected.token !== token ||\n expected.step !== this.steps\n ) {\n throw new TypeError(\"Host callback does not match its recorded invocation.\");\n }\n this.position += 1;\n return;\n }\n this.budget?.setRetainedDataUsage(\n this,\n Math.max(this.nextPromise - 1, this.restored.promises) * 3 +\n (this.callbackCount + 1) * 4 +\n (this.executionTrace?.nodes.length ?? 0)\n );\n this.callbackCount += 1;\n this.events.push({\n kind: \"callback-start\",\n token,\n step: this.steps,\n promises: this.nextPromise - 1\n });\n }\n\n completeCallback(token: string): void {\n if (this.failure !== undefined) return;\n this.completedCallbacks.add(token);\n this.drain();\n }\n\n waitForLiveExecution(): void | Promise<void> {\n this.assertHealthy();\n if (\n this.position >= this.restoredEvents.length &&\n this.steps >= this.restored.steps &&\n this.nextPromise - 1 >= this.restored.promises\n )\n return;\n return new Promise<void>((resolve, reject) => this.liveWaiters.add({ resolve, reject }));\n }\n\n registerCallbacks(callbacks: ReadonlyArray<{ token: string; start: () => void }>): void {\n this.assertHealthy();\n for (const callback of callbacks) {\n if (this.callbackTasks.has(callback.token))\n throw new TypeError(\"Duplicate replay callback registration.\");\n this.callbackTasks.set(callback.token, callback.start);\n }\n this.drain();\n this.assertHealthy();\n }\n\n private assertHealthy(): void {\n if (this.failure !== undefined) throw this.failure.reason;\n }\n\n fail(reason: unknown): void {\n if (this.failure !== undefined) return;\n this.failure = { reason };\n for (const reject of this.rejectors.values()) reject(reason);\n this.rejectors.clear();\n this.ready.clear();\n this.callbackTasks.clear();\n this.completedCallbacks.clear();\n for (const wake of this.waiting) wake();\n this.waiting.clear();\n for (const waiter of this.liveWaiters) waiter.reject(reason);\n this.liveWaiters.clear();\n }\n\n validateCallbacks(positions: ReadonlyMap<string, number>): void {\n const callbacks = this.restoredEvents.filter((entry) => entry.kind === \"callback-start\");\n if (\n callbacks.length !== positions.size ||\n callbacks.some((entry) => positions.get(entry.token) !== entry.step)\n ) {\n throw new TypeError(\"Callback trace does not match the host call journal.\");\n }\n }\n\n validateNodes(root: object): void {\n if (this.restored.executionTrace === undefined) return;\n const nodes = new Set<number>();\n const seen = new WeakSet<object>();\n const pending: unknown[] = [root];\n while (pending.length > 0) {\n const value = pending.pop();\n if (value === null || typeof value !== \"object\" || seen.has(value)) continue;\n seen.add(value);\n if (\"nodeId\" in value && typeof value.nodeId === \"number\") nodes.add(value.nodeId);\n for (const child of Object.values(value)) {\n if (child !== null && typeof child === \"object\") pending.push(child);\n }\n }\n if (this.restored.executionTrace.nodes.some((id) => !nodes.has(id)))\n throw new TypeError(\"Replay execution trace references a missing source node.\");\n }\n\n snapshot(): PromiseReplaySnapshot {\n return {\n version: 1,\n steps: Math.max(this.steps, this.restored.steps),\n promises: Math.max(this.nextPromise - 1, this.restored.promises),\n settlements: this.events\n .filter((entry) => entry.kind === \"promise\")\n .map(({ id, step }) => ({ id, step })),\n ...(this.callbackCount === 0 ? {} : { events: this.events.map((entry) => ({ ...entry })) }),\n ...(this.executionTrace === undefined\n ? {}\n : { executionTrace: structuredClone(this.executionTrace) })\n };\n }\n\n attachBudget(budget: Budget): void {\n if (this.budget !== undefined) throw new TypeError(\"Promise replay already has a budget.\");\n budget.setRetainedDataUsage(\n this,\n Math.max(this.nextPromise - 1, this.restored.promises) * 3 +\n this.callbackCount * 4 +\n (this.executionTrace?.nodes.length ?? 0)\n );\n this.budget = budget;\n }\n\n dispose(): void {\n this.budget?.setRetainedDataUsage(this, 0);\n this.budget = undefined;\n }\n\n private drain(): void {\n if (this.failure !== undefined) return;\n while (this.position < this.restoredEvents.length) {\n const expected = this.restoredEvents[this.position]!;\n if (expected.step > this.steps) return;\n if (expected.kind === \"promise\") {\n const settle = this.ready.get(expected.id);\n if (settle === undefined) return;\n this.ready.delete(expected.id);\n this.position += 1;\n settle();\n } else if (expected.kind === \"callback-start\") {\n if (expected.promises >= this.nextPromise) return;\n const start = this.callbackTasks.get(expected.token);\n if (start === undefined) return;\n this.callbackTasks.delete(expected.token);\n this.position += 1;\n try {\n start();\n } catch (error) {\n this.fail(error);\n return;\n }\n if (this.failure !== undefined) return;\n } else {\n if (!this.completedCallbacks.delete(expected.token)) return;\n this.position += 1;\n }\n for (const wake of this.waiting) wake();\n this.waiting.clear();\n }\n if (this.steps < this.restored.steps || this.nextPromise - 1 < this.restored.promises) return;\n for (const [id, settle] of this.ready) {\n this.ready.delete(id);\n this.events.push({ kind: \"promise\", id, step: this.steps });\n settle();\n }\n for (const token of this.completedCallbacks) {\n this.completedCallbacks.delete(token);\n this.events.push({ kind: \"callback-end\", token, step: this.steps });\n }\n for (const waiter of this.liveWaiters) waiter.resolve();\n this.liveWaiters.clear();\n }\n}\n\nexport const promiseReplayContext = new AsyncLocalStorage<PromiseReplay>();\n\nfunction validateReplay(value: unknown): PromiseReplaySnapshot {\n validateSnapshotData(value);\n if (\n value === null ||\n typeof value !== \"object\" ||\n !(\"version\" in value) ||\n value.version !== 1 ||\n !(\"steps\" in value) ||\n !isCounter(value.steps) ||\n !(\"promises\" in value) ||\n !isCounter(value.promises) ||\n !(\"settlements\" in value) ||\n !Array.isArray(value.settlements)\n ) {\n throw new TypeError(\"Invalid promise replay header.\");\n }\n const seen = new Set<number>();\n const { promises, steps } = value;\n let previousStep = 0;\n const settlements = value.settlements.map((entry: unknown) => {\n if (\n entry === null ||\n typeof entry !== \"object\" ||\n !(\"id\" in entry) ||\n !isCounter(entry.id) ||\n entry.id === 0 ||\n entry.id > promises ||\n seen.has(entry.id) ||\n !(\"step\" in entry) ||\n !isCounter(entry.step) ||\n entry.step < previousStep ||\n entry.step > steps\n ) {\n throw new TypeError(\"Invalid promise replay settlement.\");\n }\n previousStep = entry.step;\n seen.add(entry.id);\n return { id: entry.id, step: entry.step };\n });\n const events =\n \"events\" in value ? validateEvents(value.events, steps, promises, settlements) : undefined;\n let executionTrace: PromiseReplaySnapshot[\"executionTrace\"];\n if (\"executionTrace\" in value) {\n const trace = value.executionTrace;\n if (\n trace === null ||\n typeof trace !== \"object\" ||\n !(\"start\" in trace) ||\n !isCounter(trace.start) ||\n !(\"nodes\" in trace) ||\n !Array.isArray(trace.nodes) ||\n trace.start + trace.nodes.length !== steps ||\n trace.nodes.some((node) => !isCounter(node))\n )\n throw new TypeError(\"Invalid replay execution trace.\");\n executionTrace = { start: trace.start, nodes: [...trace.nodes] };\n }\n return {\n version: 1,\n steps,\n promises,\n settlements,\n ...(events === undefined ? {} : { events }),\n ...(executionTrace === undefined ? {} : { executionTrace })\n };\n}\n\nfunction validateEvents(\n value: unknown,\n steps: number,\n promises: number,\n settlements: PromiseReplaySnapshot[\"settlements\"]\n): ReplayEvent[] {\n if (!Array.isArray(value)) throw new TypeError(\"Invalid replay event trace.\");\n const started = new Set<string>();\n const completed = new Set<string>();\n let previousStep = 0;\n let promisePosition = 0;\n const events = value.map((entry: unknown): ReplayEvent => {\n if (\n entry === null ||\n typeof entry !== \"object\" ||\n !(\"step\" in entry) ||\n !isCounter(entry.step) ||\n entry.step < previousStep ||\n entry.step > steps ||\n !(\"kind\" in entry)\n ) {\n throw new TypeError(\"Invalid replay event position.\");\n }\n previousStep = entry.step;\n if (entry.kind === \"promise\") {\n const settlement = settlements[promisePosition++];\n if (!(\"id\" in entry) || settlement?.id !== entry.id || settlement.step !== entry.step)\n throw new TypeError(\"Replay events disagree with promise settlements.\");\n return { kind: \"promise\", id: settlement.id, step: entry.step };\n }\n if (!(\"token\" in entry) || typeof entry.token !== \"string\" || entry.token.length === 0)\n throw new TypeError(\"Invalid replay callback token.\");\n if (entry.kind === \"callback-start\") {\n if (\n started.has(entry.token) ||\n !(\"promises\" in entry) ||\n !isCounter(entry.promises) ||\n entry.promises > promises\n )\n throw new TypeError(\"Invalid callback start event.\");\n started.add(entry.token);\n return {\n kind: \"callback-start\",\n token: entry.token,\n step: entry.step,\n promises: entry.promises\n };\n }\n if (entry.kind !== \"callback-end\" || !started.has(entry.token) || completed.has(entry.token))\n throw new TypeError(\"Invalid callback completion event.\");\n completed.add(entry.token);\n return { kind: \"callback-end\", token: entry.token, step: entry.step };\n });\n if (promisePosition !== settlements.length)\n throw new TypeError(\"Replay events omit promise settlements.\");\n return events;\n}\n\nfunction isCounter(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0;\n}\n", "import { AsyncLocalStorage } from \"node:async_hooks\";\nimport {\n createSandboxPromise,\n isSandboxClosure,\n isSandboxMap,\n isSandboxPromise,\n isSandboxSet,\n type SandboxCallContext,\n type SandboxClosure,\n type SandboxPromise,\n type SandboxValue\n} from \"./values.js\";\nimport {\n assertPromiseExecutionAllowed,\n interruptOnFatalPromiseRejection,\n onFatalPromiseRejection,\n observeSandboxPromise,\n trackSandboxPromise\n} from \"./promise-tracker.js\";\nimport { replaceErrorStack } from \"../error/shape.js\";\nimport { consumeSettledHostCall, resolveSandboxValue } from \"./promise.js\";\nimport type { Budget } from \"./budget.js\";\n\nconst activeCancellation = new AsyncLocalStorage<{ signal?: AbortSignal; host: boolean }>();\nconst sandboxPromises = new WeakSet<SandboxPromise>();\nconst cancelableOutcomes = new WeakMap<\n SandboxPromise,\n WeakMap<AbortSignal, Promise<SandboxValue>>\n>();\n\nexport function withCancellationSignal<T>(signal: AbortSignal | undefined, task: () => T): T {\n return activeCancellation.run({ signal, host: false }, task);\n}\n\nexport function invokeCancelableClosure(\n closure: SandboxClosure,\n operation: SandboxClosure[\"call\"],\n args: readonly SandboxValue[],\n context?: SandboxCallContext,\n construct = false\n): SandboxValue | Promise<SandboxValue> {\n assertPromiseExecutionAllowed();\n const active = activeCancellation.getStore();\n if (active === undefined) return operation(args, context);\n if (closure.sandbox === true) {\n return activeCancellation.run({ signal: active.signal, host: false }, () =>\n operation(args, context)\n );\n }\n const signal = active.signal;\n const managed = signal !== undefined && closure.cancellationSignal === signal;\n if (signal?.aborted && !managed) {\n if (!construct && closure.async === true)\n return createRejectedSandboxPromise(readAbortReason(signal));\n throw readAbortReason(signal);\n }\n return activeCancellation.run({ signal, host: true }, () => {\n const result = operation(args, context);\n if (signal === undefined || managed) return result;\n if (isPromiseLike(result))\n return awaitWithSignal(result, signal).then((value) => {\n registerCancelablePromises(value, signal);\n return value;\n });\n registerCancelablePromises(result, signal);\n return result;\n });\n}\n\nexport function wrapCancelableBindings(\n bindings: Record<string, SandboxValue>,\n signal?: AbortSignal\n): Record<string, SandboxValue> {\n if (signal !== undefined) registerCancelablePromises(bindings, signal);\n return bindings;\n}\n\nexport function registerPromiseCancellation(promise: SandboxPromise): void {\n const active = activeCancellation.getStore();\n if (active?.host === false) sandboxPromises.add(promise);\n else if (active?.signal !== undefined) managePromiseCancellation(promise, active.signal);\n}\n\nexport function readPromiseCancellation(\n promise: SandboxPromise,\n original: Promise<SandboxValue>\n): Promise<SandboxValue> {\n const signal = activeCancellation.getStore()?.signal;\n return signal === undefined\n ? original\n : (cancelableOutcomes.get(promise)?.get(signal) ?? original);\n}\n\nfunction managePromiseCancellation(promise: SandboxPromise, signal: AbortSignal): void {\n let outcomes = cancelableOutcomes.get(promise);\n if (outcomes?.has(signal)) return;\n if (outcomes === undefined) {\n outcomes = new WeakMap();\n cancelableOutcomes.set(promise, outcomes);\n }\n const outcome = awaitWithSignal(promise.promise, signal);\n outcomes.set(signal, outcome);\n trackSandboxPromise(promise, outcome);\n}\n\nfunction registerCancelablePromises(value: SandboxValue, signal: AbortSignal): void {\n const seen = new WeakSet<object>();\n const pending = [value];\n while (pending.length > 0) {\n const current = pending.pop();\n if (typeof current !== \"object\" || current === null || seen.has(current)) continue;\n seen.add(current);\n if (isSandboxPromise(current)) {\n if (!sandboxPromises.has(current)) managePromiseCancellation(current, signal);\n continue;\n }\n if (isSandboxClosure(current)) {\n if (current.properties !== undefined) pending.push(current.properties);\n } else if (isSandboxMap(current)) {\n for (const [key, entry] of current.entries) pending.push(key, entry);\n } else if (isSandboxSet(current)) {\n for (const entry of current.values) pending.push(entry);\n } else {\n for (const descriptor of Object.values(Object.getOwnPropertyDescriptors(current))) {\n if (\"value\" in descriptor) pending.push(descriptor.value as SandboxValue);\n }\n }\n }\n}\n\nexport function awaitSandboxValue(\n value: SandboxValue,\n signal?: AbortSignal,\n budget?: Budget\n): Promise<SandboxValue> {\n let resolved: Promise<SandboxValue>;\n if (isSandboxPromise(value)) {\n observeSandboxPromise(value);\n const outcome =\n signal === undefined\n ? value.promise\n : (cancelableOutcomes.get(value)?.get(signal) ?? value.promise);\n resolved = new Promise((resolve, reject) => {\n const detach = onFatalPromiseRejection(reject);\n const complete = (state: \"fulfilled\" | \"rejected\", result: unknown) => {\n detach?.();\n try {\n consumeSettledHostCall(value);\n if (state === \"fulfilled\") resolve(result as SandboxValue);\n else reject(result);\n } catch (error) {\n reject(error);\n }\n };\n outcome.then(\n (result) => complete(\"fulfilled\", result),\n (reason: unknown) => complete(\"rejected\", reason)\n );\n });\n } else {\n resolved = resolveSandboxValue(value, { budget });\n }\n const pending =\n isSandboxPromise(value) &&\n (value.synchronousPrefix !== undefined ||\n (signal !== undefined && cancelableOutcomes.get(value)?.has(signal)))\n ? resolved\n : awaitWithSignal(resolved, signal);\n return isSandboxPromise(value) ? pending : interruptOnFatalPromiseRejection(pending);\n}\n\nfunction awaitWithSignal<T>(promise: PromiseLike<T>, signal?: AbortSignal): Promise<T> {\n if (signal === undefined) return Promise.resolve(promise);\n if (signal.aborted) {\n void Promise.resolve(promise).catch(() => undefined);\n return Promise.reject(readAbortReason(signal));\n }\n\n return new Promise((resolve, reject) => {\n let listenerActive = true;\n let settled = false;\n const onAbort = () => {\n cleanup();\n queueMicrotask(() => {\n settle(() => reject(readAbortReason(signal)));\n });\n };\n const cleanup = () => {\n if (!listenerActive) {\n return;\n }\n\n listenerActive = false;\n signal.removeEventListener(\"abort\", onAbort);\n };\n const settle = (complete: () => void) => {\n if (settled) {\n return;\n }\n\n settled = true;\n cleanup();\n complete();\n };\n\n signal.addEventListener(\"abort\", onAbort, { once: true });\n\n Promise.resolve(promise).then(\n (value) => {\n settle(() => resolve(value));\n },\n (reason) => {\n settle(() => reject(reason));\n }\n );\n });\n}\n\nfunction readAbortReason(signal: AbortSignal): unknown {\n return signal.reason ?? createAbortError();\n}\n\nfunction createAbortError(): Error {\n if (typeof DOMException === \"function\") {\n const error = new DOMException(\"This operation was aborted\", \"AbortError\");\n replaceErrorStack(error);\n return error;\n }\n\n const error = new Error(\"This operation was aborted\");\n error.name = \"AbortError\";\n replaceErrorStack(error);\n return error;\n}\n\nfunction createRejectedSandboxPromise(reason: unknown): ReturnType<typeof createSandboxPromise> {\n const promise = Promise.reject(reason) as Promise<SandboxValue>;\n promise.catch(() => undefined);\n return createSandboxPromise(promise);\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<SandboxValue> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"then\" in value &&\n typeof (value as { then: unknown }).then === \"function\"\n );\n}\n", "import { createHash, randomUUID } from \"node:crypto\";\nimport { float32DataProperties, float32Storage, isFloat32Array } from \"./float32.js\";\nimport {\n cloneSandboxValue,\n createSandboxClosure,\n defineOwnDataProperty,\n isArrayIndexKey,\n measureSandboxData,\n type SandboxClosure,\n type SandboxValue\n} from \"./values.js\";\nimport type { Budget, CompileOwner, CompileTicket } from \"./budget.js\";\nimport { CompileScope } from \"./regex/compile-guard.js\";\nimport { decodeReplayData, encodeReplayData, type ReplayData } from \"../snapshot/replay-data.js\";\nimport { validateSnapshotData } from \"../snapshot/validation.js\";\nimport {\n pendingHostCallResumeIdentityMatches,\n type PendingHostCallPolicyMode\n} from \"../snapshot/policy.js\";\n\nexport type HostCallLifecycle = \"created\" | \"running\" | \"settled\" | \"consumed\" | \"cancelled\";\nexport type HostCallOutcome =\n | { status: \"fulfilled\"; value: SandboxValue }\n | { status: \"rejected\"; reason: SandboxValue };\n\nexport type HostCallRecord = {\n id: string;\n runId: string;\n sourceHash: string;\n moduleId: string;\n operation: string;\n argumentDigest: string;\n policy: PendingHostCallPolicyMode;\n lifecycle: HostCallLifecycle;\n outcome?: HostCallOutcome;\n asynchronous?: boolean;\n callbacks?: Array<{ id: number; step: number; arguments: ReplayData }>;\n functions?: number[];\n};\n\nexport type HostCallReplay = {\n version: 1;\n calls: Array<\n Omit<HostCallRecord, \"outcome\" | \"asynchronous\"> & {\n asynchronous: boolean;\n outcome?: { status: \"fulfilled\" | \"rejected\"; data: ReplayData };\n }\n >;\n};\n\nexport type HostCallResumeProof = {\n callId: string;\n sourceHash: string;\n moduleId: string;\n operation: string;\n argumentDigest: string;\n outcome: HostCallOutcome;\n callbackDisposition?: \"joined\" | \"detached\";\n};\n\nexport type HostCallResumeContext = {\n callbacks: ReadonlyMap<number, (...args: readonly unknown[]) => Promise<unknown>>;\n replayed: ReadonlyArray<{ callbackId: number; result: Promise<unknown> }>;\n waitForCallbacks: () => Promise<void>;\n toSandboxValue: (value: unknown) => SandboxValue;\n};\n\nexport type HostCallResumeRequest = Omit<HostCallRecord, \"id\" | \"outcome\"> & {\n callId: string;\n requirement: \"external-reconciliation\";\n};\n\nexport type HostCallResumeProvider = (\n request: HostCallResumeRequest,\n context?: HostCallResumeContext\n) => HostCallResumeProof | Promise<HostCallResumeProof>;\n\nexport class HostCallResumabilityError extends Error {\n readonly #nativeInstance = true;\n readonly action: \"reset\" | \"external-reconciliation\";\n readonly callId: string;\n readonly lifecycle: HostCallLifecycle;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n return (\n typeof value === \"object\" &&\n value !== null &&\n #nativeInstance in value &&\n Function.prototype[Symbol.hasInstance].call(this, value)\n );\n }\n\n constructor(\n record: HostCallRecord,\n action: \"reset\" | \"external-reconciliation\",\n message: string\n ) {\n super(message);\n this.name = \"HostCallResumabilityError\";\n this.action = action;\n this.callId = record.id;\n this.lifecycle = record.lifecycle;\n }\n}\n\nexport class UnresolvedReplayCapabilityError extends TypeError {\n constructor(readonly id: string) {\n super(`Missing replay capability '${id}'.`);\n this.name = \"UnresolvedReplayCapabilityError\";\n }\n}\n\nexport class HostCallJournal {\n readonly runId: string;\n private nextCall = 1;\n private readonly records: HostCallRecord[];\n private readonly restored: HostCallRecord[];\n private readonly outcomes = new Map<string, HostCallOutcome>();\n private readonly recordedReplay: boolean;\n private retainedSize = 0;\n private readonly outcomeSizes = new Map<string, number>();\n private readonly capabilities = new Map<string, SandboxClosure>();\n private readonly requiredHostCapabilities = new Set<string>();\n private readonly capabilityIds = new WeakMap<SandboxClosure, string>();\n readonly nativeClosures = new WeakMap<object, SandboxClosure>();\n private readonly hostSources = new WeakMap<SandboxClosure, object>();\n private readonly encodedOutcomes = new Map<\n string,\n { status: \"fulfilled\" | \"rejected\"; data: ReplayData }\n >();\n private readonly callbackSizes = new Map<string, number>();\n private readonly completedCallbackOwners = new Set<string>();\n private readonly capabilityWaiters = new Map<\n string,\n {\n promise: Promise<void>;\n resolve: () => void;\n reject: (reason: unknown) => void;\n }\n >();\n readonly identifyCapability = this.capabilityIds.get.bind(this.capabilityIds);\n readonly resolveCapability = (id: string): SandboxClosure => {\n const capability = this.capabilities.get(id);\n if (capability === undefined) throw new UnresolvedReplayCapabilityError(id);\n return capability;\n };\n\n constructor(\n private readonly sourceHash: string,\n records: readonly HostCallRecord[] = [],\n private readonly resumeProvider?: HostCallResumeProvider,\n replay?: unknown,\n private budget?: Budget,\n private compileOwner?: CompileOwner\n ) {\n const operation = budget?.acquireCompileOwner(false, compileOwner);\n this.compileOwner = operation?.owner;\n const compilation = new CompileScope(operation?.owner);\n try {\n this.recordedReplay = replay !== undefined;\n if (replay !== undefined) {\n const replayRecords = restoreReplayCalls(\n replay,\n this.encodedOutcomes,\n this.callbackSizes,\n this.requiredHostCapabilities,\n compilation\n );\n const restoredRunId = replayRecords[0]?.runId ?? records[0]?.runId ?? randomUUID();\n validateRestoredRecords(records, restoredRunId, sourceHash);\n for (const record of records) {\n const replayRecord = replayRecords[readCallOrdinal(record) - 1];\n if (\n replayRecord === undefined ||\n !callIdentityMatches(record, replayRecord) ||\n record.lifecycle !== replayRecord.lifecycle\n ) {\n throw new HostCallResumabilityError(\n record,\n \"reset\",\n `Host call ${record.id} conflicts with the replay journal; reset is required.`\n );\n }\n }\n records = replayRecords;\n }\n this.runId = records[0]?.runId ?? randomUUID();\n this.records = records.map((record) => ({\n ...record,\n ...(record.functions === undefined ? {} : { functions: [...record.functions] }),\n ...(record.callbacks === undefined ? {} : { callbacks: structuredClone(record.callbacks) }),\n ...(record.outcome === undefined ? {} : { outcome: copyOutcome(record.outcome) })\n }));\n validateRestoredRecords(this.records, this.runId, sourceHash);\n this.retainedSize = this.records.length;\n try {\n this.budget?.setRetainedDataUsage(this, this.retainedSize);\n for (const record of this.records) {\n if (record.outcome !== undefined) this.retainOutcome(record, record.outcome);\n for (const [index, callback] of (record.callbacks ?? []).entries()) {\n let size = this.callbackSizes.get(`${record.id}/callback/${index + 1}`);\n if (size === undefined) {\n const validation = new CompileScope(operation?.owner);\n try {\n size = measureSandboxData([decodeReplayData(callback.arguments, {}, validation)]);\n } finally {\n validation.dispose();\n }\n }\n this.retainedSize += 1 + size;\n }\n }\n this.budget?.setRetainedDataUsage(this, this.retainedSize);\n } catch (error) {\n this.dispose();\n throw error;\n }\n this.restored = [...this.records];\n this.budget?.setRetainedValues(this, () => this.capabilities.values());\n } finally {\n compilation.dispose();\n operation?.release();\n }\n }\n\n issue(input: {\n moduleId: string;\n operation: string;\n argumentDigest: string;\n policy: PendingHostCallPolicyMode;\n }): { record: HostCallRecord; restored: boolean } {\n const restored = this.restored[0];\n if (restored !== undefined) {\n const restoredOrdinal = readCallOrdinal(restored);\n if (this.nextCall < restoredOrdinal) {\n return { record: this.createRecord(input), restored: false };\n }\n if (!callIdentityMatches(restored, input)) {\n throw new HostCallResumabilityError(\n restored,\n \"reset\",\n `Host call ${restored.id} does not match the next restored invocation; reset is required.`\n );\n }\n this.restored.shift();\n this.nextCall += 1;\n return { record: restored, restored: true };\n }\n\n return { record: this.createRecord(input), restored: false };\n }\n\n private createRecord(input: {\n moduleId: string;\n operation: string;\n argumentDigest: string;\n policy: PendingHostCallPolicyMode;\n }): HostCallRecord {\n this.budget?.setRetainedDataUsage(this, this.retainedSize + 1);\n this.retainedSize += 1;\n const record: HostCallRecord = {\n id: `${this.runId}:${this.nextCall++}`,\n runId: this.runId,\n sourceHash: this.sourceHash,\n moduleId: input.moduleId,\n operation: input.operation,\n argumentDigest: input.argumentDigest,\n policy: input.policy,\n lifecycle: \"created\"\n };\n this.records.push(record);\n this.records.sort((left, right) => readCallOrdinal(left) - readCallOrdinal(right));\n return record;\n }\n\n start(record: HostCallRecord): void {\n record.lifecycle = \"running\";\n }\n\n settle(record: HostCallRecord, outcome: HostCallOutcome): void {\n if (record.lifecycle === \"cancelled\") return;\n this.retainOutcome(record, outcome);\n record.lifecycle = \"settled\";\n }\n\n consume(record: HostCallRecord): void {\n if (record.lifecycle === \"consumed\") {\n throw new HostCallResumabilityError(\n record,\n \"reset\",\n `Host call ${record.id} result was already consumed; reset is required.`\n );\n }\n if (record.lifecycle !== \"settled\") return;\n record.lifecycle = \"consumed\";\n }\n\n cancel(record: HostCallRecord, reason: SandboxValue): void {\n if (record.lifecycle === \"settled\" || record.lifecycle === \"consumed\") return;\n this.retainOutcome(record, { status: \"rejected\", reason });\n record.lifecycle = \"cancelled\";\n }\n\n async reconcile(\n record: HostCallRecord,\n context?: HostCallResumeContext\n ): Promise<HostCallOutcome> {\n if (record.lifecycle === \"settled\" && record.outcome !== undefined) return record.outcome;\n if (record.lifecycle === \"consumed\") {\n throw new HostCallResumabilityError(\n record,\n \"reset\",\n `Host call ${record.id} result was already consumed; reset is required.`\n );\n }\n if (record.lifecycle === \"cancelled\") {\n throw new HostCallResumabilityError(\n record,\n \"reset\",\n `Host call ${record.id} was cancelled; reset is required.`\n );\n }\n if (record.policy === \"re-issue\") {\n throw new HostCallResumabilityError(\n record,\n \"reset\",\n `Host call ${record.id} must be re-issued by the runtime.`\n );\n }\n if (this.resumeProvider === undefined) {\n throw new HostCallResumabilityError(\n record,\n \"external-reconciliation\",\n `Host call ${record.id} may have executed before process death; external reconciliation is required.`\n );\n }\n const { id, outcome: ignoredOutcome, ...request } = record;\n void ignoredOutcome;\n const proof = await this.resumeProvider(\n {\n ...request,\n callId: id,\n requirement: \"external-reconciliation\"\n },\n context\n );\n validateProof(record, proof);\n if (\n context !== undefined &&\n context.callbacks.size > 0 &&\n proof.callbackDisposition === undefined\n ) {\n throw new HostCallResumabilityError(\n record,\n \"external-reconciliation\",\n `Host call ${record.id} has sandbox callbacks; its proof must specify callbackDisposition as joined or detached.`\n );\n }\n if (proof.callbackDisposition === \"joined\") await context?.waitForCallbacks();\n this.settle(record, proof.outcome);\n return proof.outcome;\n }\n\n snapshot(): HostCallRecord[] {\n return this.records\n .filter(\n (record) =>\n record.policy === \"read-side-effect\" ||\n record.lifecycle === \"created\" ||\n record.lifecycle === \"running\" ||\n record.lifecycle === \"cancelled\"\n )\n .map(({ outcome, ...record }) => ({\n ...structuredClone(record),\n ...(outcome === undefined ? {} : { outcome: copyOutcome(outcome) })\n }));\n }\n\n dispose(): void {\n this.budget?.setRetainedDataUsage(this, 0);\n this.budget?.setRetainedValues(this, undefined);\n this.capabilities.clear();\n for (const [id, waiter] of this.capabilityWaiters)\n waiter.reject(new UnresolvedReplayCapabilityError(id));\n this.capabilityWaiters.clear();\n this.budget = undefined;\n }\n\n registerCallbackFunction(\n record: HostCallRecord,\n id: number,\n closure: SandboxClosure,\n native: object\n ): void {\n const identity = `${record.id}/function/${id}`;\n const existing = this.capabilities.get(identity);\n if (existing !== undefined && existing !== closure)\n throw new TypeError(`Conflicting replay capability '${identity}'.`);\n if (!(record.functions ?? []).includes(id)) (record.functions ??= []).push(id);\n this.capabilities.set(identity, closure);\n this.capabilityWaiters.get(identity)?.resolve();\n this.capabilityWaiters.delete(identity);\n if (!this.capabilityIds.has(closure)) this.capabilityIds.set(closure, identity);\n this.nativeClosures.set(native, closure);\n }\n\n registerHostCapability(path: string, closure: SandboxClosure, native: object): void {\n const identity = `host:${path}`;\n const existing = this.capabilities.get(identity);\n if (existing !== undefined && existing !== closure)\n throw new TypeError(`Conflicting replay capability '${identity}'.`);\n this.capabilities.set(identity, closure);\n if (!this.capabilityIds.has(closure)) this.capabilityIds.set(closure, identity);\n if (!this.nativeClosures.has(native)) this.nativeClosures.set(native, closure);\n this.hostSources.set(closure, native);\n }\n\n rebindHostCapability(original: SandboxClosure, restored: SandboxClosure): void {\n const identity = this.capabilityIds.get(original);\n const source = this.hostSources.get(original);\n if (identity === undefined || source === undefined) return;\n this.capabilities.set(identity, restored);\n this.capabilityIds.set(restored, identity);\n this.nativeClosures.set(source, restored);\n this.hostSources.set(restored, source);\n }\n\n validateHostCapabilities(): void {\n for (const identity of this.requiredHostCapabilities) {\n if (!this.capabilities.has(identity)) throw new UnresolvedReplayCapabilityError(identity);\n }\n }\n\n waitForCapability(id: string): Promise<void> {\n if (this.capabilities.has(id)) return Promise.resolve();\n const owner = id.slice(0, id.lastIndexOf(\"/function/\"));\n if (this.completedCallbackOwners.has(owner))\n return Promise.reject(new UnresolvedReplayCapabilityError(id));\n let waiter = this.capabilityWaiters.get(id);\n if (waiter === undefined) {\n let resolve!: () => void;\n let reject!: (reason: unknown) => void;\n const promise = new Promise<void>((resolveResult, rejectResult) => {\n resolve = resolveResult;\n reject = rejectResult;\n });\n void promise.catch(() => undefined);\n waiter = { promise, resolve, reject };\n this.capabilityWaiters.set(id, waiter);\n }\n return waiter.promise;\n }\n\n trackCallbackCompletion(record: HostCallRecord, callbacks: readonly Promise<unknown>[]): void {\n const complete = () => {\n this.completedCallbackOwners.add(record.id);\n for (const [id, waiter] of this.capabilityWaiters) {\n if (!id.startsWith(`${record.id}/function/`)) continue;\n waiter.reject(new UnresolvedReplayCapabilityError(id));\n this.capabilityWaiters.delete(id);\n }\n };\n if (callbacks.length === 0) complete();\n else void Promise.allSettled(callbacks).then(complete);\n }\n\n recordCallback(record: HostCallRecord, id: number, args: SandboxValue[], step: number): string {\n const retainedSize =\n this.retainedSize + 1 + measureSandboxData([args], { ignoreClosures: true });\n this.budget?.setRetainedDataUsage(this, retainedSize);\n let data: ReplayData;\n try {\n data = encodeReplayData(args, { identifyCapability: this.identifyCapability });\n } catch (error) {\n this.budget?.setRetainedDataUsage(this, this.retainedSize);\n throw error;\n }\n this.retainedSize = retainedSize;\n (record.callbacks ??= []).push({ id, step, arguments: data });\n return `${record.id}/callback/${record.callbacks.length}`;\n }\n\n callbackPositions(): ReadonlyMap<string, number> {\n const positions = new Map<string, number>();\n for (const record of this.records) {\n for (const [index, callback] of (record.callbacks ?? []).entries()) {\n positions.set(`${record.id}/callback/${index + 1}`, callback.step);\n }\n }\n return positions;\n }\n\n private retainOutcome(\n record: HostCallRecord,\n outcome: HostCallOutcome,\n budget = this.budget\n ): void {\n const included = new Set<CompileTicket>();\n const size = measureSandboxData(\n [outcome.status === \"fulfilled\" ? outcome.value : outcome.reason],\n { ignoreClosures: true, compileTickets: included }\n );\n const retainedSize = this.retainedSize + size - (this.outcomeSizes.get(record.id) ?? 0);\n budget?.reconcileCompileData(retainedSize, included, included, this);\n let copied: HostCallOutcome;\n try {\n copied = copyOutcome(outcome);\n } catch (error) {\n budget?.setRetainedDataUsage(this, this.retainedSize);\n throw error;\n }\n this.retainedSize = retainedSize;\n this.outcomeSizes.set(record.id, size);\n this.outcomes.set(record.id, copied);\n record.outcome = copied;\n }\n\n replayOutcome(record: HostCallRecord): HostCallOutcome | undefined {\n if (!this.recordedReplay || (record.lifecycle !== \"settled\" && record.lifecycle !== \"consumed\"))\n return undefined;\n const encoded = this.encodedOutcomes.get(record.id);\n if (encoded !== undefined) {\n const budget = this.compileOwner?.budget ?? this.budget;\n const operation = budget?.acquireCompileOwner(false, this.compileOwner);\n const compilation = new CompileScope(operation?.owner);\n try {\n const value = decodeReplayData(\n encoded.data,\n { resolveCapability: this.resolveCapability },\n compilation\n );\n const outcome: HostCallOutcome =\n encoded.status === \"fulfilled\"\n ? { status: \"fulfilled\", value }\n : { status: \"rejected\", reason: value };\n this.retainOutcome(record, outcome, budget);\n return outcome;\n } finally {\n compilation.dispose();\n operation?.release();\n }\n }\n const outcome = this.outcomes.get(record.id);\n return outcome === undefined ? undefined : copyOutcome(outcome);\n }\n\n snapshotReplay(): HostCallReplay {\n return structuredClone({\n version: 1,\n calls: this.records.map(({ outcome: ignoredOutcome, asynchronous, ...record }) => {\n void ignoredOutcome;\n const outcome = this.outcomes.get(record.id);\n return {\n ...record,\n asynchronous: asynchronous === true,\n ...(outcome === undefined\n ? {}\n : {\n outcome: {\n status: outcome.status,\n data:\n this.encodedOutcomes.get(record.id)?.data ??\n encodeReplayData(\n outcome.status === \"fulfilled\" ? outcome.value : outcome.reason,\n { identifyCapability: this.identifyCapability }\n )\n }\n })\n };\n })\n });\n }\n}\n\nfunction copyOutcome(outcome: HostCallOutcome): HostCallOutcome {\n return outcome.status === \"fulfilled\"\n ? { status: \"fulfilled\", value: cloneSandboxValue(outcome.value) }\n : { status: \"rejected\", reason: cloneSandboxValue(outcome.reason) };\n}\n\nfunction restoreReplayCalls(\n input: unknown,\n encodedOutcomes: Map<string, { status: \"fulfilled\" | \"rejected\"; data: ReplayData }>,\n callbackSizes: Map<string, number>,\n requiredHostCapabilities = new Set<string>(),\n compilation?: CompileScope\n): HostCallRecord[] {\n validateSnapshotData(input);\n if (\n input === null ||\n typeof input !== \"object\" ||\n !(\"version\" in input) ||\n input.version !== 1 ||\n !(\"calls\" in input) ||\n !Array.isArray(input.calls)\n ) {\n throw new TypeError(\"Invalid host call replay header.\");\n }\n const capabilities = new Map<string, SandboxClosure>();\n for (const entry of input.calls) {\n if (entry?.functions === undefined) continue;\n if (\n !Array.isArray(entry.functions) ||\n new Set(entry.functions).size !== entry.functions.length ||\n entry.functions.some((id: unknown) => !Number.isSafeInteger(id) || Number(id) < 1)\n )\n throw new TypeError(\"Invalid replay capability declarations.\");\n for (const id of entry.functions) {\n capabilities.set(\n `${entry.id}/function/${id}`,\n createSandboxClosure({\n call: () => {\n throw new TypeError(\"Replay capability has not been reconstructed.\");\n }\n })\n );\n }\n }\n const resolveCapability = (id: string) => {\n if (!capabilities.has(id) && id.startsWith(\"host:\")) {\n const path: unknown = JSON.parse(id.slice(5));\n if (\n !Array.isArray(path) ||\n path.length < 2 ||\n path.some((value) => typeof value !== \"string\")\n )\n throw new TypeError(\"Invalid host capability identity.\");\n requiredHostCapabilities.add(id);\n capabilities.set(\n id,\n createSandboxClosure({\n call: () => {\n throw new TypeError(\"Host capability has not been reconstructed.\");\n }\n })\n );\n }\n return capabilities.get(id);\n };\n return input.calls.map((entry, index) => {\n if (entry === null || typeof entry !== \"object\" || Array.isArray(entry))\n throw new TypeError(\"Invalid replay call.\");\n for (const field of [\"id\", \"runId\", \"sourceHash\", \"moduleId\", \"operation\", \"argumentDigest\"]) {\n if (\n !Object.hasOwn(entry, field) ||\n typeof entry[field] !== \"string\" ||\n entry[field].length === 0\n )\n throw new TypeError(`Invalid replay call ${field}.`);\n }\n if (\n typeof entry.asynchronous !== \"boolean\" ||\n ![\"re-issue\", \"read-side-effect\"].includes(entry.policy) ||\n ![\"created\", \"running\", \"settled\", \"consumed\", \"cancelled\"].includes(entry.lifecycle)\n ) {\n throw new TypeError(\"Invalid replay call state.\");\n }\n if (readCallOrdinal(entry) !== index + 1)\n throw new TypeError(\"Replay calls must have consecutive ordinals.\");\n if (entry.callbacks !== undefined) {\n if (!Array.isArray(entry.callbacks)) throw new TypeError(\"Invalid replay callbacks.\");\n let previousStep = 0;\n for (const [index, callback] of entry.callbacks.entries()) {\n if (\n callback === null ||\n typeof callback !== \"object\" ||\n !Number.isSafeInteger(callback.id) ||\n callback.id < 1 ||\n !Number.isSafeInteger(callback.step) ||\n callback.step < previousStep\n )\n throw new TypeError(\"Invalid replay callback.\");\n previousStep = callback.step;\n const validation = new CompileScope(compilation?.owner);\n try {\n const args = decodeReplayData(callback.arguments, { resolveCapability }, validation);\n if (!Array.isArray(args)) throw new TypeError(\"Invalid replay callback.\");\n callbackSizes.set(`${entry.id}/callback/${index + 1}`, measureSandboxData([args]));\n } finally {\n validation.dispose();\n }\n }\n }\n let outcome: HostCallOutcome | undefined;\n if (entry.outcome !== undefined) {\n if (\n entry.outcome === null ||\n typeof entry.outcome !== \"object\" ||\n ![\"fulfilled\", \"rejected\"].includes(entry.outcome.status)\n )\n throw new TypeError(\"Invalid replay call outcome.\");\n const value = decodeReplayData(entry.outcome.data, { resolveCapability }, compilation);\n encodedOutcomes.set(entry.id, structuredClone(entry.outcome));\n outcome =\n entry.outcome.status === \"fulfilled\"\n ? { status: \"fulfilled\", value }\n : { status: \"rejected\", reason: value };\n } else if ([\"settled\", \"consumed\", \"cancelled\"].includes(entry.lifecycle)) {\n throw new TypeError(\"Missing replay call outcome.\");\n }\n return { ...entry, ...(outcome === undefined ? {} : { outcome }) } as HostCallRecord;\n });\n}\n\nfunction validateRestoredRecords(\n records: readonly HostCallRecord[],\n runId: string,\n sourceHash: string\n): void {\n const ids = new Set<string>();\n let previousOrdinal = 0;\n for (const record of records) {\n if (record.runId !== runId || !record.id.startsWith(`${runId}:`)) {\n throw new HostCallResumabilityError(\n record,\n \"reset\",\n `Host call ${record.id} does not belong to restored run ${runId}; reset is required.`\n );\n }\n if (record.sourceHash !== sourceHash) {\n throw new HostCallResumabilityError(\n record,\n \"reset\",\n `Host call ${record.id} does not match the restored source; reset is required.`\n );\n }\n if (ids.has(record.id)) {\n throw new HostCallResumabilityError(\n record,\n \"reset\",\n `Host call ${record.id} appears more than once; reset is required.`\n );\n }\n const ordinal = readCallOrdinal(record);\n if (ordinal <= previousOrdinal) {\n throw new HostCallResumabilityError(\n record,\n \"reset\",\n `Host call ${record.id} is out of order; reset is required.`\n );\n }\n previousOrdinal = ordinal;\n ids.add(record.id);\n }\n}\n\nfunction readCallOrdinal(record: HostCallRecord): number {\n const ordinal = Number(record.id.slice(record.id.lastIndexOf(\":\") + 1));\n if (!Number.isSafeInteger(ordinal) || ordinal < 1) {\n throw new HostCallResumabilityError(\n record,\n \"reset\",\n `Host call ${record.id} has an invalid ordinal; reset is required.`\n );\n }\n return ordinal;\n}\n\nfunction callIdentityMatches(\n record: HostCallRecord,\n input: {\n moduleId: string;\n operation: string;\n argumentDigest: string;\n policy: PendingHostCallPolicyMode;\n }\n): boolean {\n return (\n record.moduleId === input.moduleId &&\n record.operation === input.operation &&\n record.argumentDigest === input.argumentDigest &&\n record.policy === input.policy\n );\n}\n\nexport function digestHostCallArguments(args: readonly unknown[]): string {\n return createHash(\"sha256\").update(stableStringify(args)).digest(\"hex\");\n}\n\nfunction validateProof(record: HostCallRecord, proof: HostCallResumeProof): void {\n if (\n proof.callbackDisposition !== undefined &&\n proof.callbackDisposition !== \"joined\" &&\n proof.callbackDisposition !== \"detached\"\n ) {\n throw new HostCallResumabilityError(\n record,\n \"external-reconciliation\",\n \"Invalid callbackDisposition in external result proof.\"\n );\n }\n if (\n !pendingHostCallResumeIdentityMatches(\n {\n argumentDigest: record.argumentDigest,\n callId: record.id,\n moduleId: record.moduleId,\n operation: record.operation,\n sourceHash: record.sourceHash\n },\n proof\n )\n ) {\n throw new HostCallResumabilityError(\n record,\n \"external-reconciliation\",\n `External result proof does not match host call ${record.id}.`\n );\n }\n}\n\nfunction stableStringify(value: unknown): string {\n const seen = new WeakSet<object>();\n return JSON.stringify(normalize(value, seen));\n}\n\nfunction normalize(value: unknown, seen: WeakSet<object>): unknown {\n if (typeof value === \"function\") return undefined;\n if (typeof value === \"bigint\") throw new TypeError(\"Do not know how to serialize a BigInt\");\n if (value === undefined) return Object.assign(Object.create(null), { $type: \"undefined\" });\n if (typeof value === \"number\" && !Number.isFinite(value))\n return Object.assign(Object.create(null), { $type: \"number\", value: String(value) });\n if (value === null || typeof value !== \"object\") return value;\n if (seen.has(value)) throw new TypeError(\"Host call arguments cannot contain cycles.\");\n seen.add(value);\n try {\n if (isFloat32Array(value)) {\n const storage = float32Storage(value);\n const properties = Object.create(null) as Record<string, unknown>;\n for (const [key, descriptor] of float32DataProperties(value).sort(([left], [right]) =>\n left < right ? -1 : left > right ? 1 : 0\n )) {\n defineOwnDataProperty(properties, key, normalize(descriptor.value, seen));\n }\n return Object.assign(Object.create(null), {\n $type: \"float32array\",\n bytes: normalize(Array.from(new Uint8Array(storage.buffer)), seen),\n byteOffset: storage.byteOffset,\n length: storage.length,\n properties\n });\n }\n if (Array.isArray(value)) {\n const normalized = new Array<unknown>(value.length);\n Object.setPrototypeOf(normalized, null);\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(value))) {\n if (!isArrayIndexKey(key)) continue;\n if (!(\"value\" in descriptor)) {\n throw new TypeError(\"Host call arguments cannot contain accessor properties.\");\n }\n defineOwnDataProperty(normalized, key, normalize(descriptor.value, seen));\n }\n return normalized;\n }\n const normalized = Object.create(null) as Record<string, unknown>;\n const descriptors = Object.getOwnPropertyDescriptors(value);\n for (const key of Object.keys(descriptors).sort()) {\n const descriptor = descriptors[key]!;\n if (!descriptor.enumerable) continue;\n if (!(\"value\" in descriptor)) {\n throw new TypeError(\"Host call arguments cannot contain accessor properties.\");\n }\n defineOwnDataProperty(normalized, key, normalize(descriptor.value, seen));\n }\n return normalized;\n } finally {\n seen.delete(value);\n }\n}\n", "import { MAX_DATA_DEPTH } from \"../graph-depth.js\";\nimport { CompileScope } from \"../interp/regex/compile-guard.js\";\nimport { float32DataProperties, isFloat32Array } from \"../interp/float32.js\";\nimport { decodeFloat32Storage, encodeFloat32Storage, type Float32Data } from \"./float32array.js\";\nimport { sandboxErrorNames, sandboxErrorTypes, type SandboxErrorName } from \"../error/shape.js\";\nimport {\n createSandboxArguments,\n createSandboxClosure,\n createSandboxMap,\n createSandboxRegex,\n createSandboxSet,\n isSandboxArguments,\n isSandboxClosure,\n isSandboxGenerator,\n isSandboxMap,\n isSandboxPromise,\n isSandboxRegex,\n isSandboxSet,\n type SandboxClosure,\n type SandboxPromise,\n type SandboxValue\n} from \"../interp/values.js\";\nimport { serializeArguments, type SerializedArguments } from \"./arguments.js\";\nimport { validateArgumentsProperties, validateSnapshotData } from \"./validation.js\";\n\ntype Atom =\n | boolean\n | null\n | number\n | string\n | { tag: \"undefined\" }\n | { tag: \"number\"; value: \"NaN\" | \"Infinity\" | \"-Infinity\" | \"-0\" }\n | { tag: \"capability\"; id: string }\n | { tag: \"promise-capability\"; id: string }\n | { tag: \"ref\"; id: number };\ntype Properties = Record<\n string,\n { value: Atom; configurable: boolean; enumerable: boolean; writable: boolean }\n>;\ntype DataNode =\n | (Float32Data<Atom> & { properties: Properties; extensible: boolean })\n | { kind: \"capability\"; id: string; properties: Atom }\n | {\n kind: \"array\" | \"object\";\n properties: Properties;\n extensible: boolean;\n nullPrototype: boolean;\n errorType?: SandboxErrorName;\n }\n | { kind: \"arguments\"; data: SerializedArguments<Atom> }\n | { kind: \"map\"; entries: Array<[Atom, Atom]> }\n | { kind: \"set\"; values: Atom[] }\n | { kind: \"regex\"; source: string; flags: string; lastIndex: number };\nexport type ReplayData = { root: Atom; nodes: DataNode[] };\n\nexport class MissingReplayCapabilityError extends TypeError {}\n\nexport function encodeReplayData(\n value: SandboxValue,\n options: {\n identifyCapability?: (value: SandboxClosure, path: readonly string[]) => string | undefined;\n captureCapabilityProperties?: boolean;\n identifyPromise?: (value: SandboxPromise, path: readonly string[]) => string | undefined;\n } = {}\n): ReplayData {\n const nodes: DataNode[] = [];\n const seen = new WeakMap<object, number>();\n const float32Buffers = new WeakMap<ArrayBuffer, number>();\n const encode = (entry: SandboxValue, depth: number, path: readonly string[]): Atom => {\n if (depth > MAX_DATA_DEPTH) throw new TypeError(\"Replay data exceeds the nesting limit.\");\n if (entry === null || typeof entry === \"boolean\" || typeof entry === \"string\") return entry;\n if (entry === undefined) return { tag: \"undefined\" };\n if (typeof entry === \"number\") {\n if (Object.is(entry, -0)) return { tag: \"number\", value: \"-0\" };\n if (Number.isFinite(entry)) return entry;\n return {\n tag: \"number\",\n value: Number.isNaN(entry) ? \"NaN\" : entry > 0 ? \"Infinity\" : \"-Infinity\"\n };\n }\n if (isSandboxPromise(entry)) {\n const id = options.identifyPromise?.(entry, path);\n if (typeof id === \"string\" && id.length > 0) return { tag: \"promise-capability\", id };\n }\n let capabilityId: string | undefined;\n if (isSandboxClosure(entry)) {\n capabilityId = options.identifyCapability?.(entry, path);\n if (typeof capabilityId !== \"string\" || capabilityId.length === 0)\n throw new MissingReplayCapabilityError(\"A callable needs an explicit resume capability.\");\n if (!options.captureCapabilityProperties) return { tag: \"capability\", id: capabilityId };\n }\n if (typeof entry !== \"object\" || isSandboxPromise(entry) || isSandboxGenerator(entry)) {\n throw new MissingReplayCapabilityError(\n \"A host result containing a callable or live execution state needs an explicit resume capability.\"\n );\n }\n const existing = seen.get(entry);\n if (existing !== undefined) return { tag: \"ref\", id: existing };\n const id = nodes.length;\n seen.set(entry, id);\n nodes.push(undefined as unknown as DataNode);\n const child = (value: SandboxValue, key: string) => encode(value, depth + 1, [...path, key]);\n if (isSandboxClosure(entry)) {\n nodes[id] = {\n kind: \"capability\",\n id: capabilityId!,\n properties: child(entry.properties, \"properties\")\n };\n } else if (isFloat32Array(entry)) {\n const storage = encodeFloat32Storage(entry, id, float32Buffers, (id) => ({\n tag: \"ref\" as const,\n id\n }));\n const properties: Properties = Object.create(null);\n for (const [key, descriptor] of float32DataProperties(entry)) {\n properties[key] = {\n value: child(descriptor.value, key),\n configurable: descriptor.configurable === true,\n enumerable: descriptor.enumerable === true,\n writable: descriptor.writable === true\n };\n }\n nodes[id] = { ...storage, properties, extensible: Object.isExtensible(entry) };\n } else if (isSandboxMap(entry)) {\n nodes[id] = {\n kind: \"map\",\n entries: [...entry.entries].map(([key, value], index) => [\n child(key, `key:${index}`),\n child(value, `value:${index}`)\n ])\n };\n } else if (isSandboxSet(entry)) {\n nodes[id] = {\n kind: \"set\",\n values: [...entry.values].map((value, index) => child(value, String(index)))\n };\n } else if (isSandboxRegex(entry)) {\n nodes[id] = {\n kind: \"regex\",\n source: entry.source,\n flags: entry.flags,\n lastIndex: entry.lastIndex\n };\n } else if (isSandboxArguments(entry)) {\n nodes[id] = { kind: \"arguments\", data: serializeArguments(entry, child) };\n } else {\n const prototype = Object.getPrototypeOf(entry);\n if (\n (!Array.isArray(entry) && prototype !== null && prototype !== Object.prototype) ||\n Object.getOwnPropertySymbols(entry).length > 0\n ) {\n throw new TypeError(\"Replay data contains an unsupported host object or symbol property.\");\n }\n const properties: Properties = Object.create(null);\n const errorType = sandboxErrorTypes.get(entry);\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(entry))) {\n if (!(\"value\" in descriptor))\n throw new TypeError(`Cannot record replay data accessor '${key}'.`);\n properties[key] = {\n value: child(descriptor.value, key),\n configurable: descriptor.configurable === true,\n enumerable: descriptor.enumerable === true,\n writable: descriptor.writable === true\n };\n }\n nodes[id] = {\n kind: Array.isArray(entry) ? \"array\" : \"object\",\n nullPrototype: prototype === null,\n ...(errorType === undefined ? {} : { errorType }),\n extensible: Object.isExtensible(entry),\n properties\n };\n }\n return { tag: \"ref\", id };\n };\n return { root: encode(value, 0, []), nodes };\n}\n\nexport function decodeReplayData(\n input: unknown,\n options: {\n resolveCapability?: (id: string) => SandboxClosure | undefined;\n resolvePromise?: (id: string) => SandboxPromise | undefined;\n onCapabilityRestored?: (original: SandboxClosure, restored: SandboxClosure) => void;\n } = {},\n parent?: CompileScope\n): SandboxValue {\n const compilation = new CompileScope(parent?.owner);\n try {\n validateSnapshotData(input);\n const graph = record(input);\n const nodes = list(own(graph, \"nodes\"));\n const restored = new Map<number, SandboxValue>();\n const decode = (entry: unknown, depth = 0): SandboxValue => {\n if (depth > MAX_DATA_DEPTH) throw new TypeError(\"Replay data exceeds the nesting limit.\");\n if (entry === null || typeof entry === \"boolean\" || typeof entry === \"string\") return entry;\n if (typeof entry === \"number\" && Number.isFinite(entry)) return entry;\n const atom = record(entry);\n if (own(atom, \"tag\") === \"promise-capability\") {\n const id = own(atom, \"id\");\n if (typeof id !== \"string\" || id.length === 0)\n throw new TypeError(\"Invalid replay promise capability reference.\");\n const promise = options.resolvePromise?.(id);\n if (!isSandboxPromise(promise))\n throw new TypeError(`Missing replay promise capability '${id}'.`);\n return promise;\n }\n if (own(atom, \"tag\") === \"capability\") {\n const id = own(atom, \"id\");\n if (typeof id !== \"string\" || id.length === 0)\n throw new TypeError(\"Invalid replay capability reference.\");\n const capability = options.resolveCapability?.(id);\n if (!isSandboxClosure(capability))\n throw new TypeError(`Missing replay capability '${id}'.`);\n return capability;\n }\n if (own(atom, \"tag\") === \"undefined\") return undefined;\n if (atom.tag === \"number\") {\n switch (own(atom, \"value\")) {\n case \"NaN\":\n return NaN;\n case \"Infinity\":\n return Infinity;\n case \"-Infinity\":\n return -Infinity;\n case \"-0\":\n return -0;\n default:\n throw new TypeError(\"Invalid replay number.\");\n }\n }\n if (\n atom.tag !== \"ref\" ||\n !Number.isSafeInteger(atom.id) ||\n Number(atom.id) < 0 ||\n Number(atom.id) >= nodes.length\n ) {\n throw new TypeError(\"Invalid replay data reference.\");\n }\n const id = Number(atom.id);\n if (restored.has(id)) return restored.get(id);\n const node = record(nodes[id]);\n const kind = own(node, \"kind\");\n if (\n Object.hasOwn(node, \"errorType\") &&\n (kind !== \"object\" || !sandboxErrorNames.includes(node.errorType as SandboxErrorName))\n ) {\n throw new TypeError(\"Invalid replay error metadata.\");\n }\n const child = (value: unknown) => decode(value, depth + 1);\n if (kind === \"capability\") {\n const capabilityId = own(node, \"id\");\n if (typeof capabilityId !== \"string\" || capabilityId.length === 0)\n throw new TypeError(\"Invalid replay capability reference.\");\n const capability = options.resolveCapability?.(capabilityId);\n if (!isSandboxClosure(capability))\n throw new TypeError(`Missing replay capability '${capabilityId}'.`);\n if (record(own(node, \"properties\")).tag === \"undefined\") {\n restored.set(id, capability);\n return capability;\n }\n const copy = createSandboxClosure({\n ...capability,\n boundTarget: capability.boundTarget,\n cancellationSignal: capability.cancellationSignal,\n sandbox: capability.sandbox,\n retainedValues: () => [capability],\n properties: (closure) => {\n restored.set(id, closure);\n const properties = child(own(node, \"properties\"));\n if (\n properties === null ||\n typeof properties !== \"object\" ||\n Array.isArray(properties) ||\n isSandboxClosure(properties)\n )\n throw new TypeError(\"Invalid replay capability properties.\");\n return properties as Record<string, SandboxValue>;\n }\n });\n options.onCapabilityRestored?.(capability, copy);\n return copy;\n }\n if (kind === \"float32array\") {\n if (typeof node.extensible !== \"boolean\")\n throw new TypeError(\"Invalid Float32Array extensibility.\");\n const result = decodeFloat32Storage(node, child);\n restored.set(id, result);\n defineProperties(result, record(own(node, \"properties\")), child);\n if (!node.extensible) Object.preventExtensions(result);\n return result;\n }\n if (kind === \"map\") {\n const result = createSandboxMap();\n restored.set(id, result);\n for (const pair of list(own(node, \"entries\"))) {\n const entries = list(pair);\n if (entries.length !== 2) throw new TypeError(\"Invalid replay map entry.\");\n result.entries.set(child(entries[0]), child(entries[1]));\n }\n return result;\n }\n if (kind === \"set\") {\n const result = createSandboxSet();\n restored.set(id, result);\n for (const value of list(own(node, \"values\"))) result.values.add(child(value));\n return result;\n }\n if (kind === \"regex\") {\n if (\n typeof node.source !== \"string\" ||\n typeof node.flags !== \"string\" ||\n typeof node.lastIndex !== \"number\" ||\n !Number.isFinite(node.lastIndex)\n ) {\n throw new TypeError(\"Invalid replay regular expression.\");\n }\n const result = createSandboxRegex(node.source, node.flags, node.lastIndex, compilation);\n restored.set(id, result);\n return result;\n }\n if (kind === \"arguments\") {\n const data = record(own(node, \"data\"));\n validateArgumentsProperties(data, \"arguments\");\n if (data.kind !== \"arguments\") throw new TypeError(\"Invalid replay arguments.\");\n const args = createSandboxArguments([]);\n restored.set(id, args);\n if (!data.lengthBeforeCallee) delete args.length;\n defineProperties(args, record(data.properties), child);\n if (data.iterator === null) Reflect.deleteProperty(args, Symbol.iterator);\n else\n Object.defineProperty(args, Symbol.iterator, {\n ...record(data.iterator),\n value: Array.prototype.values\n });\n if (!data.extensible) Object.preventExtensions(args);\n return args;\n }\n if (kind !== \"array\" && kind !== \"object\") throw new TypeError(\"Invalid replay data node.\");\n if (typeof node.extensible !== \"boolean\" || typeof node.nullPrototype !== \"boolean\") {\n throw new TypeError(\"Invalid replay object metadata.\");\n }\n const result =\n kind === \"array\" ? [] : Object.create(node.nullPrototype ? null : Object.prototype);\n if (Object.hasOwn(node, \"errorType\")) {\n sandboxErrorTypes.set(result, node.errorType as SandboxErrorName);\n }\n if (kind === \"array\" && node.nullPrototype) Object.setPrototypeOf(result, null);\n restored.set(id, result);\n defineProperties(result, record(own(node, \"properties\")), child);\n if (!node.extensible) Object.preventExtensions(result);\n return result;\n };\n const result = decode(own(graph, \"root\"));\n if (parent !== undefined) compilation.forward(compilation.tickets, parent);\n return result;\n } finally {\n compilation.dispose();\n }\n}\n\nfunction defineProperties(\n target: object,\n properties: Record<string, unknown>,\n decode: (value: unknown) => SandboxValue\n): void {\n for (const [key, value] of Object.entries(properties)) {\n const descriptor = record(value);\n for (const field of Object.keys(descriptor)) {\n if (![\"value\", \"writable\", \"enumerable\", \"configurable\"].includes(field))\n throw new TypeError(\"Invalid replay property descriptor.\");\n }\n if (\n typeof descriptor.configurable !== \"boolean\" ||\n typeof descriptor.enumerable !== \"boolean\" ||\n typeof descriptor.writable !== \"boolean\"\n ) {\n throw new TypeError(\"Invalid replay property flags.\");\n }\n Object.defineProperty(target, key, {\n value: decode(own(descriptor, \"value\")),\n configurable: descriptor.configurable,\n enumerable: descriptor.enumerable,\n writable: descriptor.writable\n });\n }\n}\n\nfunction record(value: unknown): Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value))\n throw new TypeError(\"Expected replay data object.\");\n return value as Record<string, unknown>;\n}\n\nfunction list(value: unknown): unknown[] {\n if (!Array.isArray(value)) throw new TypeError(\"Expected replay data array.\");\n return value;\n}\n\nfunction own(value: Record<string, unknown>, key: string): unknown {\n if (!Object.hasOwn(value, key)) throw new TypeError(`Missing replay data field '${key}'.`);\n return value[key];\n}\n", "type SnapshotId = number | string;\n\nexport type PendingHostCallResumeIdentity = {\n argumentDigest: string;\n callId: string;\n moduleId: string;\n operation: string;\n sourceHash: string;\n};\n\nexport type PendingHostCallDescriptor = {\n id: SnapshotId;\n moduleId?: string;\n operation?: string;\n};\n\nexport type PendingHostCallSideEffectTag = {\n kind: \"host-call-side-effect\";\n callId: string;\n moduleId: string;\n operation: string;\n};\n\nexport type PendingHostCallIssuePolicy =\n | {\n kind: \"re-issue\";\n }\n | {\n kind: \"read-side-effect\";\n sideEffectTag: PendingHostCallSideEffectTag;\n };\n\nexport type PendingHostCallResumePolicy = PendingHostCallIssuePolicy;\n\nexport type PendingHostCallPolicyMode = PendingHostCallIssuePolicy[\"kind\"];\n\ntype ModulePolicyRegistry = Record<string, Record<string, PendingHostCallPolicyMode>>;\n\nexport type PendingHostCallPolicyRegistration = {\n moduleId: string;\n operation: string;\n policy: PendingHostCallPolicyMode;\n};\n\nconst DEFAULT_PENDING_HOST_CALL_POLICY: PendingHostCallPolicyMode = \"re-issue\";\n\nconst MODULE_PENDING_HOST_CALL_POLICIES = Object.assign(\n Object.create(null) as ModulePolicyRegistry,\n {\n agent: Object.assign(Object.create(null) as Record<string, PendingHostCallPolicyMode>, {\n spawn: \"read-side-effect\"\n })\n }\n);\n\nexport class HostOperationResumePolicyError extends Error {\n readonly moduleId: string;\n readonly operation: string;\n\n constructor(moduleId: string, operation: string) {\n super(\n `Host operation ${moduleId}.${operation} has no resume policy; declare 're-issue' (idempotent) or 'read-side-effect' (effectful).`\n );\n this.name = \"HostOperationResumePolicyError\";\n this.moduleId = moduleId;\n this.operation = operation;\n }\n}\n\nexport function registerPendingHostCallPolicy(\n registration: PendingHostCallPolicyRegistration\n): void {\n const moduleId = readRequiredString(registration.moduleId, \"moduleId\");\n const operation = readRequiredString(registration.operation, \"operation\");\n const policy = readPendingHostCallPolicyModeValue(registration.policy);\n\n MODULE_PENDING_HOST_CALL_POLICIES[moduleId] ??= Object.create(null) as Record<\n string,\n PendingHostCallPolicyMode\n >;\n MODULE_PENDING_HOST_CALL_POLICIES[moduleId][operation] = policy;\n}\n\nexport function readRegisteredPendingHostCallPolicy(\n moduleId: string,\n operation: string\n): PendingHostCallPolicyMode | undefined {\n return MODULE_PENDING_HOST_CALL_POLICIES[moduleId]?.[operation];\n}\n\nexport function resolvePendingHostCallIssuePolicy(\n call: PendingHostCallDescriptor\n): PendingHostCallIssuePolicy {\n const mode = readPendingHostCallPolicyMode(call);\n\n if (mode === \"re-issue\") {\n return {\n kind: \"re-issue\"\n };\n }\n\n return {\n kind: \"read-side-effect\",\n sideEffectTag: createPendingHostCallSideEffectTag(call)\n };\n}\n\nexport function tagPendingHostCallAtIssue<TCall extends PendingHostCallDescriptor>(\n call: TCall\n): TCall & {\n sideEffectTag?: PendingHostCallSideEffectTag;\n} {\n const policy = resolvePendingHostCallIssuePolicy(call);\n\n if (policy.kind === \"re-issue\") {\n return { ...call };\n }\n\n return {\n ...call,\n sideEffectTag: policy.sideEffectTag\n };\n}\n\nexport function resolvePendingHostCallResumePolicy(\n call: PendingHostCallDescriptor & {\n sideEffectTag?: PendingHostCallSideEffectTag;\n }\n): PendingHostCallResumePolicy {\n readPendingHostCallPolicyMode(call);\n\n if (call.sideEffectTag !== undefined) {\n const expectedTag = createPendingHostCallSideEffectTag(call);\n const sideEffectTag = normalizePendingHostCallSideEffectTag(call.sideEffectTag);\n\n if (sideEffectTag.callId !== expectedTag.callId) {\n throw new Error(\n \"Pending host call side-effect tag callId must match the pending host call id.\"\n );\n }\n\n if (\n sideEffectTag.moduleId !== expectedTag.moduleId ||\n sideEffectTag.operation !== expectedTag.operation\n ) {\n throw new Error(\n \"Pending host call side-effect tag moduleId and operation must match the pending host call.\"\n );\n }\n\n return {\n kind: \"read-side-effect\",\n sideEffectTag\n };\n }\n\n return resolvePendingHostCallIssuePolicy(call);\n}\n\nexport function createPendingHostCallSideEffectTag(\n call: PendingHostCallDescriptor\n): PendingHostCallSideEffectTag {\n return {\n kind: \"host-call-side-effect\",\n callId: readRequiredString(String(call.id), \"id\"),\n moduleId: readRequiredString(call.moduleId, \"moduleId\"),\n operation: readRequiredString(call.operation, \"operation\")\n };\n}\n\nexport function pendingHostCallResumeIdentityMatches(\n expected: PendingHostCallResumeIdentity,\n actual: PendingHostCallResumeIdentity\n): boolean {\n return (\n actual.callId === expected.callId &&\n actual.sourceHash === expected.sourceHash &&\n actual.moduleId === expected.moduleId &&\n actual.operation === expected.operation &&\n actual.argumentDigest === expected.argumentDigest\n );\n}\n\nfunction readPendingHostCallPolicyMode(call: PendingHostCallDescriptor): PendingHostCallPolicyMode {\n const moduleId = call.moduleId?.trim();\n const operation = call.operation?.trim();\n\n if (\n moduleId === undefined ||\n moduleId.length === 0 ||\n operation === undefined ||\n operation.length === 0\n ) {\n return DEFAULT_PENDING_HOST_CALL_POLICY;\n }\n\n const policy = readRegisteredPendingHostCallPolicy(moduleId, operation);\n\n if (policy === undefined) {\n throw new HostOperationResumePolicyError(moduleId, operation);\n }\n\n return policy;\n}\n\nfunction readRequiredString(value: string | undefined, label: string): string {\n const normalizedValue = value?.trim();\n\n if (normalizedValue === undefined || normalizedValue.length === 0) {\n throw new Error(`Pending host call ${label} must be a non-empty string.`);\n }\n\n return normalizedValue;\n}\n\nfunction readPendingHostCallPolicyModeValue(value: string): PendingHostCallPolicyMode {\n if (value === \"re-issue\" || value === \"read-side-effect\") {\n return value;\n }\n\n throw new Error(\"Pending host call policy must be 're-issue' or 'read-side-effect'.\");\n}\n\nfunction normalizePendingHostCallSideEffectTag(\n value: PendingHostCallSideEffectTag\n): PendingHostCallSideEffectTag {\n if (value.kind !== \"host-call-side-effect\") {\n throw new Error(\"Pending host call side-effect tag kind must be 'host-call-side-effect'.\");\n }\n\n return {\n kind: \"host-call-side-effect\",\n callId: readRequiredString(value.callId, \"side-effect tag callId\"),\n moduleId: readRequiredString(value.moduleId, \"side-effect tag moduleId\"),\n operation: readRequiredString(value.operation, \"side-effect tag operation\")\n };\n}\n", "import type {\n ArrayPattern,\n AssignmentPattern,\n AssignmentProperty,\n BlockStatement,\n CatchClause,\n BreakStatement,\n ContinueStatement,\n Expression,\n Identifier,\n MemberExpression,\n ObjectPattern,\n ParseResult,\n RestElement,\n ThrowStatement,\n TryStatement,\n VariableDeclaration\n} from \"../parse.js\";\nimport {\n attachErrorSpan,\n attachWrappedErrorCause,\n describeThrownValue,\n formatErrorStack,\n readErrorCause,\n readErrorSpan,\n sandboxErrorNames,\n sandboxErrorTypes,\n type SandboxErrorName,\n type ErrorSourceSpan\n} from \"../error/shape.js\";\nimport { SandboxError, type Budget } from \"./budget.js\";\nimport { HostCallResumabilityError } from \"./host-call.js\";\nimport { withFatalPromiseCleanup } from \"./promise-tracker.js\";\nimport type { Scope } from \"./scope.js\";\nimport { deepCopyToSandbox, type SandboxObject, type SandboxValue } from \"./values.js\";\n\nconst capturedExceptionBrand = Symbol(\"CapturedException\");\nexport type { SandboxErrorName } from \"../error/shape.js\";\n\nexport type CompletionKind = \"normal\" | \"return\" | \"throw\" | \"break\" | \"continue\";\n\nexport type CompletionResult = {\n kind: CompletionKind;\n hasValue: boolean;\n span?: ErrorSourceSpan;\n stackFrames?: readonly string[];\n value: SandboxValue;\n label?: string;\n node?: BreakStatement | ContinueStatement;\n};\n\nexport type EvaluationResult<TError> =\n | CompletionResult\n | {\n kind: \"error\";\n error: TError;\n };\n\ntype PatternBindingResult<TError> =\n | {\n ok: true;\n }\n | {\n ok: false;\n result: EvaluationResult<TError>;\n };\n\ntype CapturedException = {\n readonly reason: unknown;\n readonly sandbox: boolean;\n readonly stackFrames: readonly string[];\n readonly [capturedExceptionBrand]: true;\n};\n\ntype ExceptionContext = {\n budget: Budget;\n callStack: readonly string[];\n scope: Scope;\n};\n\ntype EvaluateExceptionNode<TContext, TError> = (\n node: ParseResult,\n context: TContext\n) => Promise<EvaluationResult<TError>>;\n\nexport async function evaluateThrowStatement<TContext extends ExceptionContext, TError>(\n node: ThrowStatement,\n context: TContext,\n evaluateNode: EvaluateExceptionNode<TContext, TError>\n): Promise<EvaluationResult<TError>> {\n const argument = await evaluateNode(node.argument, context);\n if (argument.kind !== \"normal\") {\n return argument;\n }\n\n return {\n kind: \"throw\",\n hasValue: true,\n span: node.span,\n stackFrames: context.callStack,\n value: argument.value\n };\n}\n\nexport async function evaluateTryStatement<TContext extends ExceptionContext, TError>(\n node: TryStatement,\n context: TContext,\n evaluateNode: EvaluateExceptionNode<TContext, TError>\n): Promise<EvaluationResult<TError>> {\n let fatalBudgetError: SandboxError | undefined;\n let tryResult: EvaluationResult<TError>;\n\n try {\n tryResult = await evaluateBlockCompletion(node.block, context, evaluateNode);\n } catch (error) {\n if (!isBudgetExceeded(error) || node.finalizer === undefined) {\n throw error;\n }\n\n fatalBudgetError = error;\n tryResult = {\n kind: \"throw\",\n hasValue: true,\n value: undefined\n };\n }\n\n const tryOrCatchResult =\n fatalBudgetError === undefined && tryResult.kind === \"throw\" && node.handler !== undefined\n ? await evaluateCatchClause(node.handler, tryResult.value, context, evaluateNode)\n : tryResult;\n\n if (node.finalizer === undefined || tryOrCatchResult.kind === \"error\") {\n return tryOrCatchResult;\n }\n\n const evaluateFinalizer = () =>\n fatalBudgetError?.budget === \"deadline\"\n ? evaluateWithoutDeadlineChecks(context, () =>\n evaluateBlockCompletion(node.finalizer as BlockStatement, context, evaluateNode)\n )\n : evaluateBlockCompletion(node.finalizer as BlockStatement, context, evaluateNode);\n const finalizerResult = await (fatalBudgetError === undefined\n ? evaluateFinalizer()\n : withFatalPromiseCleanup(evaluateFinalizer));\n\n if (fatalBudgetError !== undefined) {\n throw fatalBudgetError;\n }\n\n if (finalizerResult.kind === \"normal\") {\n return tryOrCatchResult;\n }\n\n return finalizerResult;\n}\n\nexport function createCapturedException(\n reason: unknown,\n stackFrames: readonly string[],\n sandbox = false\n): CapturedException {\n return {\n reason,\n sandbox,\n stackFrames,\n [capturedExceptionBrand]: true\n };\n}\n\nexport function isCapturedException(value: unknown): value is CapturedException {\n return typeof value === \"object\" && value !== null && capturedExceptionBrand in value;\n}\n\nexport function coerceThrownValue(\n reason: unknown,\n budget: Budget,\n stackFrames: readonly string[],\n span?: ErrorSourceSpan,\n sandbox = false\n): SandboxValue {\n if (reason instanceof HostCallResumabilityError) {\n throw reason;\n }\n\n if (isSubsetErrorValue(reason)) {\n attachErrorSpan(reason, readErrorSpan(reason) ?? span);\n return reason;\n }\n\n if (reason instanceof Error) {\n return createSubsetErrorValue(reason.name || \"Error\", reason.message, stackFrames, budget, {\n chargeBudget: false,\n cause: readErrorCause(reason),\n span\n });\n }\n\n if (sandbox) {\n return reason as SandboxValue;\n }\n\n if (isErrorLikeValue(reason)) {\n return createSubsetErrorValue(reason.name || \"Error\", reason.message, stackFrames, budget, {\n chargeBudget: false,\n cause: readErrorCause(reason),\n span\n });\n }\n\n return deepCopyToSandbox(reason);\n}\n\nexport function surfaceThrownValue(\n reason: unknown,\n budget: Budget,\n stackFrames: readonly string[] = [],\n span?: ErrorSourceSpan\n): SandboxObject {\n if (reason instanceof HostCallResumabilityError) {\n throw reason;\n }\n\n if (isSubsetErrorValue(reason)) {\n normalizeSurfacedSubsetError(reason, budget, stackFrames, span);\n return reason;\n }\n\n if (reason instanceof Error) {\n const error = createSubsetErrorValue(\n reason.name || \"Error\",\n reason.message,\n stackFrames,\n budget,\n {\n cause: reason,\n chargeBudget: false,\n span\n }\n );\n normalizeSurfacedSubsetError(error, budget, stackFrames, span);\n return error;\n }\n\n if (isErrorLikeValue(reason)) {\n const error = createSubsetErrorValue(\n reason.name || \"Error\",\n reason.message,\n stackFrames,\n budget,\n {\n cause: readErrorCause(reason),\n chargeBudget: false,\n span\n }\n );\n normalizeSurfacedSubsetError(error, budget, stackFrames, span);\n return error;\n }\n\n return createSubsetErrorValue(\"Error\", describeThrownValue(reason), stackFrames, budget, {\n chargeBudget: false,\n span\n });\n}\n\nexport function createSubsetErrorValue(\n name: string,\n message: SandboxValue,\n stackFrames: readonly string[],\n budget: Budget,\n options: { cause?: unknown; chargeBudget?: boolean; span?: ErrorSourceSpan } = {}\n): SandboxObject {\n const resumeChecks = options.chargeBudget === false ? budget.suspendChecks() : undefined;\n\n try {\n const errorName = budget.allocateString(name === \"\" ? \"Error\" : name);\n const errorMessage = budget.allocateString(coerceErrorMessage(message));\n const header = errorMessage === \"\" ? errorName : `${errorName}: ${errorMessage}`;\n const stack = budget.allocateString([header, ...[...stackFrames].reverse()].join(\"\\n\"));\n const error = {\n name: errorName,\n message: errorMessage,\n stack\n };\n\n sandboxErrorTypes.set(error, toSandboxErrorName(errorName));\n attachErrorSpan(error, options.span);\n attachWrappedErrorCause(error, options.cause);\n return error;\n } finally {\n resumeChecks?.();\n }\n}\n\nexport function isSandboxErrorConstructorInstance(\n value: SandboxValue,\n name: SandboxErrorName\n): boolean {\n if (typeof value !== \"object\" || value === null) return false;\n const errorType = sandboxErrorTypes.get(value);\n return errorType !== undefined && (name === \"Error\" || name === errorType);\n}\n\nfunction toSandboxErrorName(name: string): SandboxErrorName {\n return sandboxErrorNames.includes(name as SandboxErrorName)\n ? (name as SandboxErrorName)\n : \"Error\";\n}\n\nfunction isSubsetErrorValue(value: unknown): value is SandboxObject {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return (\n (prototype === Object.prototype || prototype === null) &&\n typeof (value as { name?: unknown }).name === \"string\" &&\n typeof (value as { message?: unknown }).message === \"string\" &&\n typeof (value as { stack?: unknown }).stack === \"string\"\n );\n}\n\nfunction normalizeSurfacedSubsetError(\n error: SandboxObject,\n budget: Budget,\n stackFrames: readonly string[],\n span: ErrorSourceSpan | undefined\n): void {\n const resumeChecks = budget.suspendChecks();\n\n try {\n const name = budget.allocateString(toSandboxErrorName(readErrorName(error)));\n const message = budget.allocateString(readSurfacedErrorMessage(error, name));\n const frames = readSandboxStackFrames(error.stack);\n error.name = name;\n error.message = message;\n error.stack = budget.allocateString(\n formatErrorStack(name, message, frames.length > 0 ? frames : [...stackFrames].reverse())\n );\n attachErrorSpan(error, readErrorSpan(error) ?? span);\n } finally {\n resumeChecks();\n }\n}\n\nfunction readErrorName(error: SandboxObject): string {\n return typeof error.name === \"string\" && error.name.length > 0 ? error.name : \"Error\";\n}\n\nfunction readSurfacedErrorMessage(error: SandboxObject, name: string): string {\n const message = typeof error.message === \"string\" ? error.message : \"\";\n\n if (message === \"\") {\n return `${name} thrown`;\n }\n\n if (message === \"[object Object]\") {\n return `${name} thrown with non-string message`;\n }\n\n return message;\n}\n\nfunction readSandboxStackFrames(stack: unknown): string[] {\n if (typeof stack !== \"string\") {\n return [];\n }\n\n const [, ...frames] = stack.split(\"\\n\");\n return frames;\n}\n\nfunction isErrorLikeValue(value: unknown): value is { message: string; name: string } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { name?: unknown }).name === \"string\" &&\n typeof (value as { message?: unknown }).message === \"string\"\n );\n}\n\nfunction coerceErrorMessage(message: SandboxValue): string {\n if (message === undefined) {\n return \"\";\n }\n\n if (Array.isArray(message)) {\n return message\n .map((value) => (value === null || value === undefined ? \"\" : String(value)))\n .join(\",\");\n }\n\n if (typeof message === \"object\" && message !== null) {\n return \"[object Object]\";\n }\n\n return String(message);\n}\n\nasync function evaluateWithoutDeadlineChecks<TValue>(\n context: ExceptionContext,\n evaluate: () => Promise<TValue>\n): Promise<TValue> {\n const resumeDeadlineChecks = context.budget.suspendDeadlineChecks();\n\n try {\n return await evaluate();\n } finally {\n resumeDeadlineChecks();\n }\n}\n\nfunction isBudgetExceeded(error: unknown): error is SandboxError {\n return error instanceof SandboxError && error.code === \"budgetExceeded\";\n}\n\nasync function evaluateCatchClause<TContext extends ExceptionContext, TError>(\n node: CatchClause,\n thrownValue: SandboxValue,\n context: TContext,\n evaluateNode: EvaluateExceptionNode<TContext, TError>\n): Promise<EvaluationResult<TError>> {\n const scope = context.scope.child();\n const catchContext = {\n ...context,\n scope\n };\n\n if (node.param !== undefined) {\n const binding = await bindPattern(node.param, thrownValue, catchContext, evaluateNode);\n if (!binding.ok) {\n return binding.result;\n }\n }\n\n return evaluateBlockCompletion(node.body, catchContext, evaluateNode);\n}\n\nasync function evaluateBlockCompletion<TContext extends ExceptionContext, TError>(\n node: BlockStatement,\n context: TContext,\n evaluateNode: EvaluateExceptionNode<TContext, TError>\n): Promise<EvaluationResult<TError>> {\n const blockContext = {\n ...context,\n scope: context.scope.child()\n };\n predeclareBlockBindings(node, blockContext.scope);\n let result: EvaluationResult<TError> = {\n kind: \"normal\",\n hasValue: false,\n value: undefined\n };\n\n for (const statement of node.body) {\n result = await evaluateNode(statement, blockContext);\n if (result.kind !== \"normal\") {\n return result;\n }\n }\n\n return result;\n}\n\nfunction predeclareBlockBindings(node: BlockStatement, scope: Scope): void {\n const names = new Set<string>();\n\n for (const statement of node.body) {\n if (statement.type !== \"VariableDeclaration\" || statement.kind === \"var\") {\n continue;\n }\n\n for (const name of getDeclarationBindingNames(statement)) {\n if (names.has(name) || scope.hasOwnBinding(name)) {\n throw new Error(`Cannot redeclare binding '${name}' in the same scope.`);\n }\n\n names.add(name);\n scope.predeclare(name, statement.kind);\n }\n }\n}\n\nfunction getDeclarationBindingNames(node: VariableDeclaration): string[] {\n return node.declarations.flatMap((declarator) => getPatternBindingNames(declarator.id));\n}\n\nfunction getPatternBindingNames(\n pattern:\n | ArrayPattern\n | AssignmentPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n): string[] {\n switch (pattern.type) {\n case \"Identifier\":\n return [pattern.name];\n case \"MemberExpression\":\n return [];\n case \"AssignmentPattern\":\n return getPatternBindingNames(pattern.left);\n case \"ArrayPattern\":\n return pattern.elements.flatMap((element) =>\n element === null ? [] : getPatternBindingNames(element)\n );\n case \"ObjectPattern\":\n return pattern.properties.flatMap((property) =>\n property.type === \"RestElement\"\n ? getPatternBindingNames(property)\n : getPatternBindingNames(property.value)\n );\n case \"RestElement\":\n return getPatternBindingNames(pattern.argument);\n }\n}\n\nasync function bindPattern<TContext extends ExceptionContext, TError>(\n pattern:\n | ArrayPattern\n | AssignmentPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement,\n value: SandboxValue,\n context: TContext,\n evaluateNode: EvaluateExceptionNode<TContext, TError>\n): Promise<PatternBindingResult<TError>> {\n switch (pattern.type) {\n case \"Identifier\":\n context.scope.declare(pattern.name, \"let\", value);\n return { ok: true };\n case \"MemberExpression\":\n throw new TypeError(\"Catch bindings do not support member expressions.\");\n case \"AssignmentPattern\":\n return bindAssignmentPattern(pattern, value, context, evaluateNode);\n case \"ArrayPattern\":\n return bindArrayPattern(pattern, value, context, evaluateNode);\n case \"ObjectPattern\":\n return bindObjectPattern(pattern, value, context, evaluateNode);\n case \"RestElement\":\n return bindPattern(pattern.argument, value, context, evaluateNode);\n }\n}\n\nasync function bindAssignmentPattern<TContext extends ExceptionContext, TError>(\n pattern: AssignmentPattern,\n value: SandboxValue,\n context: TContext,\n evaluateNode: EvaluateExceptionNode<TContext, TError>\n): Promise<PatternBindingResult<TError>> {\n let nextValue = value;\n\n if (nextValue === undefined) {\n const defaultValue = await evaluateNode(pattern.right, context);\n if (defaultValue.kind !== \"normal\") {\n return {\n ok: false,\n result: defaultValue\n };\n }\n\n nextValue = defaultValue.value;\n }\n\n return bindPattern(pattern.left, nextValue, context, evaluateNode);\n}\n\nasync function bindArrayPattern<TContext extends ExceptionContext, TError>(\n pattern: ArrayPattern,\n value: SandboxValue,\n context: TContext,\n evaluateNode: EvaluateExceptionNode<TContext, TError>\n): Promise<PatternBindingResult<TError>> {\n if (!Array.isArray(value)) {\n throw new TypeError(\"Array catch bindings require an array value.\");\n }\n\n for (let index = 0; index < pattern.elements.length; index += 1) {\n const element = pattern.elements[index];\n if (element === null) {\n continue;\n }\n\n const elementValue =\n element.type === \"RestElement\" ? value.slice(index) : (value[index] as SandboxValue);\n const binding = await bindPattern(element, elementValue, context, evaluateNode);\n if (!binding.ok) {\n return binding;\n }\n }\n\n return { ok: true };\n}\n\nasync function bindObjectPattern<TContext extends ExceptionContext, TError>(\n pattern: ObjectPattern,\n value: SandboxValue,\n context: TContext,\n evaluateNode: EvaluateExceptionNode<TContext, TError>\n): Promise<PatternBindingResult<TError>> {\n if ((typeof value !== \"object\" && !Array.isArray(value)) || value === null) {\n throw new TypeError(\"Object catch bindings require a non-null object value.\");\n }\n\n const excludedKeys = new Set<string>();\n\n for (const property of pattern.properties) {\n if (property.type === \"RestElement\") {\n const restValue = copyObjectRest(value, excludedKeys);\n const binding = await bindPattern(property, restValue, context, evaluateNode);\n if (!binding.ok) {\n return binding;\n }\n\n continue;\n }\n\n const key = await resolvePatternPropertyKey(property, context, evaluateNode);\n if (!key.ok) {\n return key;\n }\n\n excludedKeys.add(String(key.value));\n const binding = await bindPattern(\n property.value,\n getObjectPatternValue(value, key.value),\n context,\n evaluateNode\n );\n if (!binding.ok) {\n return binding;\n }\n }\n\n return { ok: true };\n}\n\nasync function resolvePatternPropertyKey<TContext extends ExceptionContext, TError>(\n property: AssignmentProperty,\n context: TContext,\n evaluateNode: EvaluateExceptionNode<TContext, TError>\n): Promise<\n | {\n ok: true;\n value: string | number;\n }\n | {\n ok: false;\n result: EvaluationResult<TError>;\n }\n> {\n if (!property.computed) {\n return {\n ok: true,\n value: getStaticPropertyKey(property.key)\n };\n }\n\n const computedKey = await evaluateNode(property.key as Expression, context);\n if (computedKey.kind !== \"normal\") {\n return {\n ok: false,\n result: computedKey\n };\n }\n\n if (typeof computedKey.value !== \"string\" && typeof computedKey.value !== \"number\") {\n throw new TypeError(\"Computed catch binding keys must evaluate to a string or number.\");\n }\n\n return {\n ok: true,\n value: computedKey.value\n };\n}\n\nfunction getStaticPropertyKey(property: AssignmentProperty[\"key\"]): string | number {\n switch (property.type) {\n case \"Identifier\":\n return property.name;\n case \"StringLiteral\":\n case \"NumericLiteral\":\n return property.value;\n default:\n throw new TypeError(`Unsupported catch binding property key '${property.type}'.`);\n }\n}\n\nfunction getObjectPatternValue(\n value: Exclude<SandboxValue, null | undefined>,\n key: string | number\n): SandboxValue {\n return (value as Record<string | number, SandboxValue>)[key];\n}\n\nfunction copyObjectRest(\n value: Exclude<SandboxValue, null | undefined>,\n excludedKeys: ReadonlySet<string>\n): SandboxObject {\n const rest = Object.create(null) as SandboxObject;\n\n for (const [key, entryValue] of Object.entries(value)) {\n if (excludedKeys.has(key)) {\n continue;\n }\n\n rest[key] = entryValue;\n }\n\n return rest;\n}\n", "import { SandboxError } from \"./budget.js\";\n\nconst runningObjects = new WeakSet<object>();\nconst lockedCollections = new WeakSet<object>();\nconst activeSnapshots = new WeakSet<object>();\n\nexport function enterRunningState(object: object): () => void {\n if (runningObjects.has(object)) {\n throw new SandboxError(\"reentry\");\n }\n\n runningObjects.add(object);\n let active = true;\n return () => {\n if (!active) return;\n active = false;\n runningObjects.delete(object);\n };\n}\n\nexport function enterCollectionCallback(object: object): () => void {\n const leaveRunning = enterRunningState(object);\n lockedCollections.add(object);\n return () => {\n lockedCollections.delete(object);\n leaveRunning();\n };\n}\n\nexport function assertCollectionMutable(object: object): void {\n if (lockedCollections.has(object)) {\n throw new SandboxError(\"reentry\");\n }\n}\n\nexport function enterSnapshotRun(snapshot: object): () => void {\n if (activeSnapshots.has(snapshot)) {\n throw new SandboxError(\"reentry\");\n }\n activeSnapshots.add(snapshot);\n return () => activeSnapshots.delete(snapshot);\n}\n\nexport function assertSnapshotInactive(snapshot: object): void {\n if (activeSnapshots.has(snapshot)) {\n throw new SandboxError(\"reentry\");\n }\n}\n", "import {\n isSandboxGenerator,\n isSandboxMap,\n isSandboxSet,\n type SandboxGenerator,\n type SandboxValue\n} from \"./values.js\";\nimport { enterRunningState } from \"./running-state.js\";\nimport { isFloat32Array } from \"./float32.js\";\n\nexport type SandboxIterator = {\n readonly generator?: true;\n snapshotIndex?(): number;\n next(value?: SandboxValue): IteratorResult<SandboxValue> | Promise<IteratorResult<SandboxValue>>;\n return?(\n value?: SandboxValue\n ): IteratorResult<SandboxValue> | Promise<IteratorResult<SandboxValue>>;\n throw?(\n error?: SandboxValue\n ): IteratorResult<SandboxValue> | Promise<IteratorResult<SandboxValue>>;\n};\n\nexport function getSandboxIterator(value: SandboxValue): SandboxIterator | undefined {\n if (isFloat32Array(value)) {\n return syncIterator(Float32Array.prototype.values.call(value));\n }\n if (isSandboxGenerator(value)) {\n return generatorIterator(value);\n }\n\n if (typeof value === \"string\") {\n return syncIterator(value[Symbol.iterator]());\n }\n\n if (isSandboxMap(value)) {\n return collectionIterator(value.entries);\n }\n\n if (isSandboxSet(value)) {\n return collectionIterator(value.values);\n }\n\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value === null) {\n return undefined;\n }\n\n const iteratorMethod = (value as { [Symbol.iterator]?: unknown })[Symbol.iterator];\n if (typeof iteratorMethod !== \"function\") {\n return undefined;\n }\n\n return syncIterator(Reflect.apply(iteratorMethod, value, []) as Iterator<SandboxValue>);\n}\n\nfunction collectionIterator(\n collection: Map<SandboxValue, SandboxValue> | Set<SandboxValue>\n): SandboxIterator {\n let iterator: Iterator<SandboxValue> = collection[Symbol.iterator]();\n let exhausted = false;\n return {\n ...syncIterator({\n next: () => {\n if (exhausted) return { done: true, value: undefined };\n const result = iterator.next();\n exhausted = result.done === true;\n return result;\n }\n }),\n snapshotIndex: () => {\n if (exhausted) return collection.size;\n let remaining = 0;\n while (!iterator.next().done) remaining += 1;\n const index = collection.size - remaining;\n iterator = collection[Symbol.iterator]();\n for (let skipped = 0; skipped < index; skipped += 1) iterator.next();\n return index;\n }\n };\n}\n\nfunction generatorIterator(generator: SandboxGenerator): SandboxIterator {\n const invoke = async (\n method: \"next\" | \"return\" | \"throw\",\n value?: SandboxValue\n ): Promise<IteratorResult<SandboxValue>> => {\n const leaveRunning = enterRunningState(generator);\n generator.state = \"running\";\n try {\n const result = (await generator.channel[method](value)) as IteratorResult<SandboxValue>;\n generator.state = result.done ? \"done\" : \"suspended\";\n return result;\n } catch (error) {\n generator.state = \"done\";\n throw error;\n } finally {\n leaveRunning();\n }\n };\n\n return {\n generator: true,\n next: (value) => invoke(\"next\", value),\n return: (value) => invoke(\"return\", value),\n throw: (error) => invoke(\"throw\", error)\n };\n}\n\nfunction syncIterator(iterator: Iterator<SandboxValue>): SandboxIterator {\n const next = iterator.next;\n const invoke = (\n method: (...args: [] | [SandboxValue]) => IteratorResult<SandboxValue>,\n args: readonly SandboxValue[]\n ) => {\n const leaveRunning = enterRunningState(iterator as object);\n try {\n return Reflect.apply(method, iterator, args);\n } finally {\n leaveRunning();\n }\n };\n return {\n next: (...args: [value?: SandboxValue]) => invoke(next, args),\n get return() {\n const method = iterator.return;\n if (method === undefined || method === null) return undefined;\n if (typeof method !== \"function\") throw new TypeError(\"Iterator return must be callable.\");\n return (...args: [value?: SandboxValue]) => invoke(method, args);\n },\n get throw() {\n const method = iterator.throw;\n if (method === undefined || method === null) return undefined;\n if (typeof method !== \"function\") throw new TypeError(\"Iterator throw must be callable.\");\n return (...args: [value?: SandboxValue]) => invoke(method, args);\n }\n };\n}\n", "import { AsyncLocalStorage } from \"node:async_hooks\";\n\ntype ExecutionJob = {\n queue: SandboxJobQueue;\n ownsExecution: boolean;\n prefixParent?: ExecutionJob;\n};\n\nconst activeJob = new AsyncLocalStorage<ExecutionJob>();\n\nexport class SandboxJobQueue {\n private running = false;\n private readonly pending: Array<() => void> = [];\n private readonly idle: Array<() => void> = [];\n private generation = 0;\n\n acquire(job: ExecutionJob): Promise<void> {\n return new Promise((resolve) => {\n this.pending.push(() => {\n this.running = true;\n this.generation += 1;\n job.ownsExecution = true;\n resolve();\n });\n this.advance();\n });\n }\n\n release(job: ExecutionJob): void {\n job.prefixParent = undefined;\n if (!job.ownsExecution) return;\n job.ownsExecution = false;\n this.running = false;\n this.advance();\n }\n\n async run<T>(task: () => T | Promise<T>): Promise<T> {\n const job = { queue: this, ownsExecution: false };\n await this.acquire(job);\n return activeJob.run(job, async () => {\n try {\n return await task();\n } finally {\n this.release(job);\n }\n });\n }\n\n async drain(): Promise<void> {\n let idleTurns = 0;\n while (idleTurns < 20) {\n const generation = this.generation;\n if (this.running) await new Promise<void>((resolve) => this.idle.push(resolve));\n await Promise.resolve();\n idleTurns = generation === this.generation ? idleTurns + 1 : 0;\n }\n }\n\n private advance(): void {\n if (this.running) return;\n const next = this.pending.shift();\n if (next !== undefined) {\n next();\n } else {\n for (const resolve of this.idle.splice(0)) resolve();\n }\n }\n}\n\nexport function runPromiseJob<T>(task: () => T | Promise<T>): Promise<T> {\n const job = activeJob.getStore();\n return job === undefined ? Promise.resolve().then(task) : job.queue.run(task);\n}\n\nexport function runAsyncPrefix<T>(task: () => Promise<T>): Promise<T> {\n const parent = activeJob.getStore();\n if (parent === undefined) return task();\n let owner: ExecutionJob | undefined = parent;\n while (owner !== undefined && !owner.ownsExecution) owner = owner.prefixParent;\n if (owner === undefined) return parent.queue.run(task);\n const job = { queue: parent.queue, ownsExecution: false, prefixParent: parent };\n return activeJob.run(job, async () => {\n try {\n return await task();\n } finally {\n job.queue.release(job);\n }\n });\n}\n\nexport async function suspendJob<T>(pending: Promise<T>): Promise<T> {\n const job = activeJob.getStore();\n if (job === undefined) return pending;\n job.queue.release(job);\n try {\n return await pending;\n } finally {\n await job.queue.acquire(job);\n }\n}\n", "import { SandboxError, type Budget } from \"./budget.js\";\nimport { coerceThrownValue, createSubsetErrorValue } from \"./exceptions.js\";\nimport { getSandboxIterator } from \"./iteration.js\";\nimport { runPromiseJob } from \"./jobs.js\";\nimport { observeSandboxPromise } from \"./promise-tracker.js\";\nimport {\n createSandboxClosure,\n createSandboxPromise,\n isSandboxClosure,\n isSandboxPromise,\n type SandboxCallContext,\n type SandboxClosure,\n type SandboxObject,\n type SandboxPromise,\n type SandboxValue\n} from \"./values.js\";\n\nexport type PromiseGlobals = {\n Promise: SandboxClosure;\n};\n\nconst promiseConstructors = new WeakSet<SandboxClosure>();\nconst intrinsicPromiseConstructors = new WeakMap<Budget, SandboxClosure>();\nconst promisePrototypes = new WeakMap<Budget, SandboxObject>();\n\nexport function isSandboxPromiseConstructor(value: unknown): value is SandboxClosure {\n return isSandboxClosure(value) && promiseConstructors.has(value);\n}\n\nexport function createPromiseGlobals(options: { budget: Budget }): PromiseGlobals {\n promisePrototypes.delete(options.budget);\n const prototype = getPromisePrototype(options.budget);\n const construct: NonNullable<SandboxClosure[\"construct\"]> = async ([executor], context) => {\n if (!isSandboxClosure(executor)) throw new TypeError(\"Promise executor must be a function.\");\n let fulfill!: (value: SandboxValue | PromiseLike<SandboxValue>) => void;\n let reject!: (reason: unknown) => void;\n const pending = createSandboxPromise(\n new Promise<SandboxValue>((resolve, rejectPromise) => {\n fulfill = resolve;\n reject = rejectPromise;\n }),\n { span: context?.span }\n );\n let settled = false;\n const settle = (state: \"fulfilled\" | \"rejected\", value: SandboxValue) => {\n if (settled) return;\n settled = true;\n try {\n if (state === \"rejected\") {\n reject(budgetSandboxValue(value, options.budget));\n } else if (value === pending) {\n reject(\n createSubsetErrorValue(\n \"TypeError\",\n \"Promise cannot resolve to itself.\",\n context?.stack ?? [],\n options.budget\n )\n );\n } else {\n fulfill(resolveSandboxValue(value, { budget: options.budget, self: pending }));\n }\n } catch (error) {\n reject(error);\n }\n };\n try {\n const result = executor.call(\n [\n createSandboxClosure({\n sandbox: true,\n name: \"resolve\",\n retainedValues: () => [pending],\n call: ([value]) => {\n settle(\"fulfilled\", value);\n return undefined;\n }\n }),\n createSandboxClosure({\n sandbox: true,\n name: \"reject\",\n retainedValues: () => [pending],\n call: ([reason]) => {\n settle(\"rejected\", reason);\n return undefined;\n }\n })\n ],\n { stack: context?.stack ?? [], thisValue: undefined }\n );\n if (executor.async !== true) await result;\n else if (isSandboxPromise(result) && result.synchronousPrefix !== undefined)\n await result.synchronousPrefix;\n else if (isPromiseLike(result)) createSandboxPromise(Promise.resolve(result));\n } catch (error) {\n if (\n error instanceof SandboxError &&\n (error.code === \"budgetExceeded\" || error.code === \"reentry\")\n ) {\n observeSandboxPromise(pending);\n throw error;\n }\n settle(\"rejected\", error as SandboxValue);\n }\n return pending;\n };\n const promiseConstructor = createSandboxClosure({\n sandbox: true,\n name: \"Promise\",\n construct,\n call: () => {\n throw new TypeError(\"Constructor Promise requires 'new'.\");\n },\n properties: {\n prototype,\n all: createSandboxClosure({\n sandbox: true,\n call: ([values], context) =>\n settleIterable(\n values,\n \"all\",\n options.budget,\n context === undefined ? promiseConstructor : context.thisValue,\n context\n ),\n name: \"all\"\n }),\n race: createSandboxClosure({\n sandbox: true,\n call: ([values], context) =>\n settleIterable(\n values,\n \"race\",\n options.budget,\n context === undefined ? promiseConstructor : context.thisValue,\n context\n ),\n name: \"race\"\n }),\n allSettled: createSandboxClosure({\n sandbox: true,\n call: ([values], context) =>\n settleIterable(\n values,\n \"allSettled\",\n options.budget,\n context === undefined ? promiseConstructor : context.thisValue,\n context\n ),\n name: \"allSettled\"\n }),\n any: createSandboxClosure({\n sandbox: true,\n call: ([values], context) =>\n settleIterable(\n values,\n \"any\",\n options.budget,\n context === undefined ? promiseConstructor : context.thisValue,\n context\n ),\n name: \"any\"\n }),\n resolve: createSandboxClosure({\n sandbox: true,\n call: ([value], context) => {\n const constructor = context === undefined ? promiseConstructor : context.thisValue;\n if (typeof constructor !== \"object\" || constructor === null) {\n throw new TypeError(\"Promise.resolve requires an object receiver.\");\n }\n if (\n isSandboxPromise(value) &&\n getPromiseMember(\"constructor\", options.budget) === constructor\n ) {\n return value;\n }\n return isSandboxPromiseConstructor(constructor)\n ? createSandboxPromise(resolveSandboxValue(value, { budget: options.budget }))\n : settleConstructedPromise(constructor, value, \"fulfilled\", options.budget, context);\n },\n name: \"resolve\"\n }),\n reject: createSandboxClosure({\n sandbox: true,\n call: ([reason], context) => {\n const constructor = context === undefined ? promiseConstructor : context.thisValue;\n return isSandboxPromiseConstructor(constructor)\n ? createRejectedSandboxPromise(reason, options.budget, context?.span)\n : settleConstructedPromise(constructor, reason, \"rejected\", options.budget, context);\n },\n name: \"reject\"\n })\n }\n });\n Object.defineProperty(prototype, \"constructor\", {\n value: promiseConstructor,\n writable: true,\n configurable: true\n });\n promiseConstructors.add(promiseConstructor);\n intrinsicPromiseConstructors.set(options.budget, promiseConstructor);\n return { Promise: promiseConstructor };\n}\n\nexport function getPromiseMember(property: string | number, budget: Budget): SandboxValue {\n const prototype = getPromisePrototype(budget);\n return Object.hasOwn(prototype, property) ? prototype[property] : undefined;\n}\n\nasync function settleConstructedPromise(\n constructor: SandboxValue,\n value: SandboxValue,\n state: \"fulfilled\" | \"rejected\",\n budget: Budget,\n context: SandboxCallContext | undefined\n): Promise<SandboxValue> {\n const capability = await createPromiseCapability(constructor, budget, context);\n await callPromiseClosure(\n state === \"fulfilled\" ? capability.resolve : capability.reject,\n [value],\n undefined,\n budget,\n context\n );\n return capability.promise;\n}\n\nasync function createPromiseCapability(\n constructor: SandboxValue,\n budget: Budget,\n context: SandboxCallContext | undefined\n): Promise<{ promise: SandboxValue; resolve: SandboxClosure; reject: SandboxClosure }> {\n if (!isSandboxClosure(constructor) || constructor.construct === undefined) {\n throw new TypeError(\"Promise method requires a constructor receiver.\");\n }\n let resolve: SandboxValue;\n let reject: SandboxValue;\n const executor = createSandboxClosure({\n sandbox: true,\n retainedValues: () => [resolve, reject],\n call: (args) => {\n if (resolve !== undefined || reject !== undefined) {\n throw new TypeError(\"Promise capability is already initialized.\");\n }\n [resolve, reject] = args;\n return undefined;\n }\n });\n const leaveCall = budget.enterCall();\n try {\n const promise = await constructor.construct([executor], {\n stack: context?.stack ?? [],\n thisValue: undefined,\n ...(context?.span === undefined ? {} : { span: context.span })\n });\n if (!isSandboxClosure(resolve) || !isSandboxClosure(reject)) {\n throw new TypeError(\"Promise capability requires callable resolve and reject functions.\");\n }\n return { promise, resolve, reject };\n } finally {\n leaveCall();\n }\n}\n\nasync function callPromiseClosure(\n callback: SandboxClosure,\n args: readonly SandboxValue[],\n thisValue: SandboxValue,\n budget: Budget,\n context?: SandboxCallContext\n): Promise<SandboxValue> {\n const leaveCall = budget.enterCall();\n try {\n const stack = context?.stack ?? [];\n const values = args.map((value) =>\n value instanceof Error && !(value instanceof SandboxError)\n ? coerceThrownValue(value, budget, stack)\n : value\n );\n let result = callback.call(values, { stack, thisValue });\n if (callback.async !== true) result = await result;\n else if (isPromiseLike(result)) result = createSandboxPromise(Promise.resolve(result));\n if (isSandboxPromise(result) && result.synchronousPrefix !== undefined) {\n await result.synchronousPrefix;\n }\n return result;\n } finally {\n leaveCall();\n }\n}\n\nfunction getPromisePrototype(budget: Budget): SandboxObject {\n const existing = promisePrototypes.get(budget);\n if (existing !== undefined) return existing;\n const prototype: SandboxObject = {\n then: createSandboxClosure({\n sandbox: true,\n call: ([onFulfilled, onRejected], context) => {\n const target = context?.thisValue;\n if (!isSandboxPromise(target))\n throw new TypeError(\"Promise.then requires a promise receiver.\");\n validatePromiseConstructorProperty(target, prototype);\n observeSandboxPromise(target);\n const chained = createSandboxPromise(\n target.promise.then(\n (value) => {\n consumeSettledHostCall(target);\n return runPromiseReaction(onFulfilled, value, \"fulfilled\", budget, chained);\n },\n (reason: SandboxValue) => {\n consumeSettledHostCall(target);\n return runPromiseReaction(onRejected, reason, \"rejected\", budget, chained);\n }\n )\n );\n return chained;\n },\n name: \"then\"\n }),\n catch: createSandboxClosure({\n sandbox: true,\n call: ([onRejected], context) => {\n const target = context?.thisValue;\n const then = readPromiseReceiverProperty(target, \"then\", prototype);\n if (!isSandboxClosure(then)) throw new TypeError(\"Promise.catch requires a callable then.\");\n return then.call([undefined, onRejected], {\n stack: context?.stack ?? [],\n thisValue: target\n });\n },\n name: \"catch\"\n }),\n finally: createSandboxClosure({\n sandbox: true,\n call: ([onFinally], context) => {\n const target = context?.thisValue;\n if (typeof target !== \"object\" || target === null) {\n throw new TypeError(\"Promise.finally requires an object receiver.\");\n }\n validatePromiseConstructorProperty(target, prototype);\n const then = readPromiseReceiverProperty(target, \"then\", prototype);\n if (!isSandboxClosure(then))\n throw new TypeError(\"Promise.finally requires a callable then.\");\n const handlers = isSandboxClosure(onFinally)\n ? ([\"fulfilled\", \"rejected\"] as const).map((state) =>\n createSandboxClosure({\n sandbox: true,\n retainedValues: () => [onFinally],\n call: async ([value]) => {\n const result = await callPromiseClosure(\n onFinally,\n [],\n undefined,\n budget,\n context\n );\n const pending =\n isSandboxPromise(result) &&\n getPromiseMember(\"constructor\", budget) ===\n intrinsicPromiseConstructors.get(budget)\n ? result\n : createSandboxPromise(resolveSandboxValue(result, { budget }));\n const cleanupThen = getPromiseMember(\"then\", budget);\n if (!isSandboxClosure(cleanupThen))\n throw new TypeError(\"Promise cleanup requires a callable then.\");\n return callPromiseClosure(\n cleanupThen,\n [\n createSandboxClosure({\n sandbox: true,\n retainedValues: () => [value],\n call: () => {\n if (state === \"rejected\") throw value;\n return value;\n }\n })\n ],\n pending,\n budget,\n context\n );\n }\n })\n )\n : [onFinally, onFinally];\n return then.call(handlers, { stack: context?.stack ?? [], thisValue: target });\n },\n name: \"finally\"\n })\n };\n for (const name of Object.keys(prototype)) {\n Object.defineProperty(prototype, name, { enumerable: false });\n }\n promisePrototypes.set(budget, prototype);\n return prototype;\n}\n\nfunction readPromiseReceiverProperty(\n receiver: SandboxValue,\n property: string,\n prototype: SandboxObject\n): SandboxValue {\n const properties = isSandboxPromise(receiver)\n ? prototype\n : isSandboxClosure(receiver)\n ? receiver.properties\n : receiver;\n return typeof properties === \"object\" &&\n properties !== null &&\n Object.hasOwn(properties, property)\n ? (properties as SandboxObject)[property]\n : undefined;\n}\n\nfunction validatePromiseConstructorProperty(\n receiver: SandboxValue,\n prototype: SandboxObject\n): void {\n const constructor = readPromiseReceiverProperty(receiver, \"constructor\", prototype);\n if (constructor !== undefined && (typeof constructor !== \"object\" || constructor === null)) {\n throw new TypeError(\"Promise constructor property must be an object.\");\n }\n}\n\nasync function settleIterable(\n iterable: SandboxValue,\n method: \"all\" | \"allSettled\" | \"race\" | \"any\",\n budget: Budget,\n constructor: SandboxValue,\n context: SandboxCallContext | undefined\n): Promise<SandboxValue> {\n const capability = await createPromiseCapability(constructor, budget, context);\n const prototype = getPromisePrototype(budget);\n const values: SandboxValue[] = [];\n let remaining = 1;\n const complete = async () => {\n if (remaining !== 0 || method === \"race\") return;\n if (method === \"any\") {\n const error = createSubsetErrorValue(\n \"AggregateError\",\n \"All promises were rejected\",\n [],\n budget\n );\n error.errors = values;\n await callPromiseClosure(\n capability.reject,\n [budgetSandboxValue(error, budget)],\n undefined,\n budget,\n context\n );\n } else {\n await callPromiseClosure(\n capability.resolve,\n [budgetSandboxValue(values, budget)],\n undefined,\n budget,\n context\n );\n }\n };\n try {\n const promiseResolve = readPromiseReceiverProperty(constructor, \"resolve\", prototype);\n if (!isSandboxClosure(promiseResolve))\n throw new TypeError(\"Promise constructor requires a callable resolve.\");\n const iterator = getSandboxIterator(iterable);\n if (iterator === undefined) throw new TypeError(\"Promise helpers require an iterable.\");\n let index = 0;\n while (true) {\n budget.visitNode();\n const next = iterator.generator\n ? await iterator.next()\n : (iterator.next() as IteratorResult<SandboxValue>);\n if (typeof next !== \"object\" || next === null)\n throw new TypeError(\"Iterator result must be an object.\");\n if (next.done) break;\n const value = next.value;\n try {\n budget.allocateArrayLength(index + 1);\n const entryIndex = index++;\n if (method !== \"race\") values.push(undefined);\n const entry = await callPromiseClosure(\n promiseResolve,\n [value],\n constructor,\n budget,\n context\n );\n let called = false;\n const handlers = ([\"fulfilled\", \"rejected\"] as const).map((state) => {\n if (method === \"race\" || (method === \"any\" && state === \"fulfilled\"))\n return state === \"fulfilled\" ? capability.resolve : capability.reject;\n if (method === \"all\" && state === \"rejected\") return capability.reject;\n return createSandboxClosure({\n sandbox: true,\n retainedValues: () => [\n capability.promise,\n capability.resolve,\n capability.reject,\n values\n ],\n call: async ([settlement]) => {\n if (called) return undefined;\n called = true;\n values[entryIndex] =\n method === \"allSettled\"\n ? state === \"fulfilled\"\n ? { status: state, value: settlement }\n : { status: state, reason: settlement }\n : settlement;\n remaining--;\n await complete();\n return undefined;\n }\n });\n });\n remaining++;\n const then = readPromiseReceiverProperty(entry, \"then\", prototype);\n if (!isSandboxClosure(then))\n throw new TypeError(\"Promise resolver result requires a callable then.\");\n await callPromiseClosure(then, handlers, entry, budget, context);\n } catch (error) {\n try {\n const closed = iterator.return?.();\n if (iterator.generator) await closed;\n } catch {\n throw error;\n }\n throw error;\n }\n }\n remaining--;\n await complete();\n } catch (error) {\n if (\n error instanceof SandboxError &&\n (error.code === \"budgetExceeded\" || error.code === \"reentry\")\n ) {\n if (isSandboxPromise(capability.promise)) observeSandboxPromise(capability.promise);\n throw error;\n }\n await callPromiseClosure(\n capability.reject,\n [error as SandboxValue],\n undefined,\n budget,\n context\n );\n }\n return capability.promise;\n}\n\nfunction schedulePromise(promise: Promise<SandboxValue>, budget: Budget): Promise<SandboxValue> {\n return Promise.resolve().then(() =>\n promise.then(\n (value) => resolveSandboxValue(value, { budget }),\n (reason: SandboxValue) => Promise.reject(budgetSandboxValue(reason, budget))\n )\n );\n}\n\nfunction createRejectedSandboxPromise(\n reason: SandboxValue,\n budget: Budget,\n span?: SandboxPromise[\"span\"]\n): ReturnType<typeof createSandboxPromise> {\n const promise = schedulePromise(Promise.reject(reason), budget);\n\n // Mark the host promise as handled immediately while preserving its rejected state for sandbox await.\n promise.catch(() => undefined);\n return createSandboxPromise(promise, { span });\n}\n\nfunction budgetSandboxValue(value: SandboxValue, budget: Budget): SandboxValue {\n allocateSandboxValue(value, budget, new WeakSet());\n return value;\n}\n\nexport function resolveSandboxValue(\n value: SandboxValue | Promise<SandboxValue> | PromiseLike<SandboxValue>,\n options: { budget?: Budget; self?: SandboxPromise } = {}\n): Promise<SandboxValue> {\n try {\n return resolveSandboxValueNow(value, options);\n } catch (error) {\n return Promise.reject(error);\n }\n}\n\n// A host call result is consumed once, when it settles. Observing the same promise\n// again is ordinary JavaScript and must not be reported as a double consumption.\nexport function consumeSettledHostCall(value: SandboxPromise): undefined {\n if (value.hostCall?.lifecycle !== \"settled\") {\n return;\n }\n\n value.hostCallJournal?.consume(value.hostCall);\n}\n\nfunction resolveSandboxValueNow(\n value: SandboxValue | Promise<SandboxValue> | PromiseLike<SandboxValue>,\n options: { budget?: Budget; self?: SandboxPromise }\n): Promise<SandboxValue> {\n if (isPromiseLike(value)) {\n return Promise.resolve(value).then(\n (resolved) => resolveSandboxValueNow(resolved, options),\n (reason: SandboxValue) => Promise.reject(budgetIfNeeded(reason, options.budget))\n );\n }\n\n if (isSandboxPromise(value)) {\n if (options.budget !== undefined) {\n return resolvePromiseResult(value, options.budget, options.self);\n }\n observeSandboxPromise(value);\n return value.promise.then(\n (resolved) => {\n consumeSettledHostCall(value);\n return resolveSandboxValueNow(resolved, options);\n },\n (reason: SandboxValue) => {\n consumeSettledHostCall(value);\n return Promise.reject(budgetIfNeeded(reason, options.budget));\n }\n );\n }\n\n const then = getThenable(value);\n if (then !== undefined) {\n return resolveThenable(value, then, options);\n }\n\n return Promise.resolve(budgetIfNeeded(value, options.budget));\n}\n\nfunction resolveThenable(\n value: SandboxValue,\n then: SandboxClosure,\n options: { budget?: Budget; self?: SandboxPromise }\n): Promise<SandboxValue> {\n if (typeof value !== \"object\" || value === null) {\n return Promise.resolve(budgetIfNeeded(value, options.budget));\n }\n\n return new Promise<SandboxValue>((resolve, reject) => {\n let settlement:\n | { state: \"fulfilled\"; value: SandboxValue }\n | { state: \"rejected\"; value: SandboxValue }\n | undefined;\n let completed = false;\n let invocationPending = true;\n const complete = () => {\n if (completed || invocationPending || settlement === undefined) return;\n completed = true;\n try {\n if (settlement.state === \"fulfilled\") {\n resolve(\n isSandboxPromise(settlement.value) || getThenable(settlement.value) !== undefined\n ? resolveSandboxValueNow(settlement.value, options)\n : budgetIfNeeded(settlement.value, options.budget)\n );\n } else {\n reject(budgetIfNeeded(settlement.value, options.budget));\n }\n } catch (error) {\n reject(error);\n }\n };\n const recordSettlement = (state: \"fulfilled\" | \"rejected\", settledValue: SandboxValue) => {\n if (settlement !== undefined) {\n return;\n }\n settlement = { state, value: settledValue };\n queueMicrotask(complete);\n };\n callInPromiseJob(\n then,\n [\n createSandboxClosure({\n sandbox: true,\n call: ([resolved]) => {\n recordSettlement(\"fulfilled\", resolved);\n return undefined;\n },\n name: \"resolve\"\n }),\n createSandboxClosure({\n sandbox: true,\n call: ([reason]) => {\n recordSettlement(\"rejected\", reason);\n return undefined;\n },\n name: \"reject\"\n })\n ],\n value,\n {\n fulfilled: () => {\n invocationPending = false;\n complete();\n },\n rejected: (error: SandboxValue) => {\n invocationPending = false;\n if (\n error instanceof SandboxError &&\n (error.code === \"budgetExceeded\" || error.code === \"reentry\")\n ) {\n completed = true;\n reject(error);\n return;\n }\n recordSettlement(\"rejected\", error);\n complete();\n }\n }\n ).catch(reject);\n });\n}\n\nfunction runPromiseReaction(\n handler: SandboxValue,\n value: SandboxValue,\n state: \"fulfilled\" | \"rejected\",\n budget: Budget,\n self?: SandboxPromise\n): Promise<SandboxValue> {\n return new Promise<SandboxValue>((resolve, reject) => {\n if (\n state === \"rejected\" &&\n value instanceof SandboxError &&\n (value.code === \"budgetExceeded\" || value.code === \"reentry\")\n ) {\n reject(value);\n return;\n }\n const argument =\n state === \"rejected\" && value instanceof Error ? coerceThrownValue(value, budget, []) : value;\n const fulfilled = (result: SandboxValue | Promise<SandboxValue>) => {\n if (isPromiseLike(result)) {\n resolve(resolvePromiseResult(result, budget, self));\n } else if (isSelfResolution(result, self)) {\n reject(\n createSubsetErrorValue(\"TypeError\", \"Promise cannot resolve to itself.\", [], budget)\n );\n } else if (isSandboxPromise(result) || getThenable(result) !== undefined) {\n resolve(resolvePromiseResult(result, budget, self));\n } else {\n resolve(budgetSandboxValue(result, budget));\n }\n };\n if (isSandboxClosure(handler)) {\n callInPromiseJob(handler, [argument], undefined, { fulfilled, rejected: reject }).catch(\n reject\n );\n } else {\n runPromiseJob(() => {\n if (state === \"fulfilled\") fulfilled(value);\n else reject(budgetSandboxValue(value, budget));\n }).catch(reject);\n }\n });\n}\n\nfunction callInPromiseJob(\n handler: SandboxClosure,\n args: readonly SandboxValue[],\n thisValue: SandboxValue = undefined,\n completion?: {\n fulfilled: (value: SandboxValue | Promise<SandboxValue>) => void;\n rejected: (reason: SandboxValue) => void;\n }\n): Promise<{ value: SandboxValue | Promise<SandboxValue> }> {\n return runPromiseJob(async () => {\n try {\n let result = handler.call(args, { stack: [], thisValue });\n if (handler.async !== true) result = await result;\n if (isSandboxPromise(result) && result.synchronousPrefix !== undefined) {\n await result.synchronousPrefix;\n }\n completion?.fulfilled(result);\n return { value: result };\n } catch (error) {\n if (completion === undefined) throw error;\n completion.rejected(error as SandboxValue);\n return { value: undefined };\n }\n });\n}\n\nfunction resolvePromiseResult(\n result: SandboxValue | Promise<SandboxValue> | PromiseLike<SandboxValue>,\n budget: Budget,\n self: SandboxPromise | undefined\n): Promise<SandboxValue> {\n if (isPromiseLike(result)) {\n return Promise.resolve(result).then((resolved) => resolvePromiseResult(resolved, budget, self));\n }\n if (isSelfResolution(result, self)) {\n return Promise.reject(\n createSubsetErrorValue(\"TypeError\", \"Promise cannot resolve to itself.\", [], budget)\n );\n }\n if (!isSandboxPromise(result)) return resolveSandboxValue(result, { budget, self });\n const then = getPromiseMember(\"then\", budget);\n if (!isSandboxClosure(then)) return Promise.resolve(result);\n return new Promise<SandboxValue>((resolve, reject) => {\n let settled = false;\n const settle = (state: \"fulfilled\" | \"rejected\", value: SandboxValue) => {\n if (settled) return;\n settled = true;\n try {\n if (state === \"rejected\") reject(budgetSandboxValue(value, budget));\n else if (isSandboxPromise(value) || getThenable(value) !== undefined) {\n resolve(resolvePromiseResult(value, budget, self));\n } else {\n resolve(budgetSandboxValue(value, budget));\n }\n } catch (error) {\n reject(error);\n }\n };\n runPromiseJob(async () => {\n try {\n const completion = await callPromiseClosure(\n then,\n [\n createSandboxClosure({\n sandbox: true,\n call: ([value]) => {\n settle(\"fulfilled\", value);\n return undefined;\n }\n }),\n createSandboxClosure({\n sandbox: true,\n call: ([reason]) => {\n settle(\"rejected\", reason);\n return undefined;\n }\n })\n ],\n result,\n budget\n );\n if (isSandboxPromise(completion)) {\n completion.promise.catch((reason: unknown) => {\n if (\n reason instanceof SandboxError &&\n (reason.code === \"budgetExceeded\" || reason.code === \"reentry\")\n ) {\n reject(reason);\n }\n });\n }\n } catch (error) {\n settle(\"rejected\", error as SandboxValue);\n }\n }).catch(reject);\n });\n}\n\nfunction isSelfResolution(result: SandboxValue, self: SandboxPromise | undefined): boolean {\n return (\n self !== undefined &&\n (result === self || (isSandboxPromise(result) && result.promise === self.promise))\n );\n}\n\nexport function getThenable(value: SandboxValue): SandboxClosure | undefined {\n if (typeof value !== \"object\" || value === null || isSandboxPromise(value)) {\n return undefined;\n }\n\n const then = isSandboxClosure(value)\n ? value.properties?.then\n : (value as Record<string, SandboxValue>).then;\n return isSandboxClosure(then) ? then : undefined;\n}\n\nfunction budgetIfNeeded(value: SandboxValue, budget: Budget | undefined): SandboxValue {\n return budget === undefined ? value : budgetSandboxValue(value, budget);\n}\n\nfunction allocateSandboxValue(value: SandboxValue, budget: Budget, seen: WeakSet<object>): void {\n if (typeof value === \"string\") {\n budget.allocateString(value);\n return;\n }\n\n if (Array.isArray(value)) {\n budget.allocateArrayLength(value.length);\n\n if (seen.has(value)) {\n return;\n }\n\n seen.add(value);\n for (const entry of value) {\n allocateSandboxValue(entry, budget, seen);\n }\n\n return;\n }\n\n if (\n typeof value !== \"object\" ||\n value === null ||\n isSandboxClosure(value) ||\n isSandboxPromise(value)\n ) {\n return;\n }\n\n if (seen.has(value)) {\n return;\n }\n\n seen.add(value);\n for (const entry of Object.values(value)) {\n allocateSandboxValue(entry, budget, seen);\n }\n}\n\nfunction isPromiseLike(\n value: SandboxValue | Promise<SandboxValue> | PromiseLike<SandboxValue>\n): value is PromiseLike<SandboxValue> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"then\" in value &&\n typeof (value as { then: unknown }).then === \"function\" &&\n !isSandboxClosure(value) &&\n !isSandboxPromise(value)\n );\n}\n", "import { parse, parseModule, type Module, type ParseResult } from \"./parser.js\";\nimport { SandboxError, type CompileOwner } from \"../interp/budget.js\";\n\nconst FNV_OFFSET_BASIS = 0x811c9dc5;\nconst FNV_PRIME = 0x01000193;\n\nconst IGNORED_KEYS = new Set([\"nodeId\", \"raw\", \"span\"]);\n\nexport function hashSource(source: string, owner?: CompileOwner): string {\n try {\n return hashParsedAst(parse(source, \"<input>\", owner));\n } catch (error) {\n if (error instanceof SandboxError) throw error;\n return hashParsedAst(parseModule(source, \"<input>\", owner));\n }\n}\n\nexport function hashParsedAst(ast: Module | ParseResult): string {\n let hash = FNV_OFFSET_BASIS;\n\n visit(ast);\n\n return hash.toString(16).padStart(8, \"0\");\n\n function visit(value: unknown, includeTemplateRaw = false): void {\n if (value === null) {\n write(\"null\");\n return;\n }\n\n if (value === undefined) {\n write(\"undefined\");\n return;\n }\n\n if (Array.isArray(value)) {\n write(\"[\");\n for (const entry of value) {\n visit(entry, includeTemplateRaw);\n write(\",\");\n }\n write(\"]\");\n return;\n }\n\n switch (typeof value) {\n case \"boolean\":\n write(value ? \"true\" : \"false\");\n return;\n case \"number\":\n write(Object.is(value, -0) ? \"-0\" : String(value));\n return;\n case \"string\":\n write(JSON.stringify(value));\n return;\n case \"object\": {\n const record = value as Record<string, unknown>;\n const keys = Object.keys(value)\n .filter((key) => shouldHashKey(record, key, includeTemplateRaw))\n .sort();\n\n write(\"{\");\n for (const key of keys) {\n write(JSON.stringify(key));\n write(\":\");\n visit(record[key], shouldIncludeTemplateRaw(record, key, includeTemplateRaw));\n write(\",\");\n }\n write(\"}\");\n return;\n }\n default:\n throw new TypeError(`Unsupported AST value type: ${typeof value}`);\n }\n }\n\n function write(chunk: string): void {\n for (let index = 0; index < chunk.length; index += 1) {\n hash ^= chunk.charCodeAt(index);\n hash = Math.imul(hash, FNV_PRIME) >>> 0;\n }\n }\n}\n\nfunction shouldHashKey(\n record: Record<string, unknown>,\n key: string,\n includeTemplateRaw: boolean\n): boolean {\n if (key !== \"raw\") {\n return !IGNORED_KEYS.has(key);\n }\n\n return includeTemplateRaw || record.type === \"RegexLiteral\";\n}\n\nfunction shouldIncludeTemplateRaw(\n record: Record<string, unknown>,\n key: string,\n includeTemplateRaw: boolean\n): boolean {\n if (record.type === \"TaggedTemplateExpression\" && key === \"quasi\") {\n return true;\n }\n\n if (includeTemplateRaw && record.type === \"TemplateLiteral\" && key === \"quasis\") {\n return true;\n }\n\n if (includeTemplateRaw && record.type === \"TemplateElement\" && key === \"value\") {\n return true;\n }\n\n return false;\n}\n", "import { HostCallJournal, type HostCallRecord, type HostCallReplay } from \"../interp/host-call.js\";\nimport { decodeReplayData, type ReplayData } from \"./replay-data.js\";\nimport { validateSnapshotData } from \"./validation.js\";\nimport type { CompileOwner } from \"../interp/budget.js\";\nimport { CompileScope } from \"../interp/regex/compile-guard.js\";\n\nexport type SnapshotMigrationResolution =\n | { callId: string; disposition: \"not-performed\" }\n | { callId: string; disposition: \"fulfilled\"; value: unknown }\n | { callId: string; disposition: \"rejected\"; reason: unknown };\n\nexport type SnapshotMigrationReconciliation = {\n checkpointDigest: string;\n quiescent: boolean;\n calls: SnapshotMigrationResolution[];\n};\n\nexport type SnapshotMigration = {\n version: 1;\n state: ReplayData;\n history: Array<{\n sourceHash: string;\n targetSourceHash: string;\n executionSemantics: string;\n replay: HostCallReplay;\n reconciliation: SnapshotMigrationReconciliation;\n }>;\n};\n\nexport function validateMigrationSemantics(value: unknown): asserts value is string {\n if (\n ![\"jobs-v1\", \"jobs-v2\", \"jobs-v3\", \"jobs-v4\", \"jobs-v5\", \"jobs-v6\", \"jobs-v7\"].includes(\n value as string\n )\n )\n throw new TypeError(\n \"Migration requires a supported execution-semantics marker (jobs-v1 through jobs-v7).\"\n );\n}\n\nexport function validateMigrationJournal(\n sourceHash: string,\n replay: unknown,\n hostCalls: unknown = [],\n owner?: CompileOwner\n): HostCallReplay {\n if (replay === undefined)\n throw new TypeError(\"Migration requires a complete host replay journal.\");\n if (!Array.isArray(hostCalls)) throw new TypeError(\"Invalid migration hostCalls.\");\n const journal = new HostCallJournal(\n sourceHash,\n hostCalls as HostCallRecord[],\n undefined,\n replay,\n owner?.budget,\n owner\n );\n try {\n const restored = journal.snapshotReplay();\n for (const call of restored.calls) {\n if ([\"created\", \"running\"].includes(call.lifecycle) && call.outcome !== undefined)\n throw new TypeError(\"Unresolved migration calls cannot contain a recorded outcome.\");\n for (const callback of call.callbacks ?? []) {\n if (!call.functions?.includes(callback.id))\n throw new TypeError(\"Migration callback has no registered source function.\");\n }\n }\n return restored;\n } finally {\n journal.dispose();\n }\n}\n\nexport function validateMigrationReconciliation(\n value: unknown,\n checkpointDigest: string,\n calls: HostCallReplay[\"calls\"]\n): asserts value is SnapshotMigrationReconciliation {\n validateSnapshotData(value);\n const receipt = value as SnapshotMigrationReconciliation;\n if (\n receipt === null ||\n typeof receipt !== \"object\" ||\n receipt.checkpointDigest !== checkpointDigest ||\n !isCheckpointDigest(receipt.checkpointDigest)\n )\n throw new TypeError(\"Migration reconciliation must identify this exact checkpoint digest.\");\n if (receipt.quiescent !== true)\n throw new TypeError(\n \"Migration requires explicit host confirmation that execution, operations, and callbacks are quiescent.\"\n );\n if (!Array.isArray(receipt.calls))\n throw new TypeError(\"Migration reconciliation calls must be an array.\");\n const pending = new Map(\n calls\n .filter((call) => ![\"settled\", \"consumed\"].includes(call.lifecycle))\n .map((call) => [call.id, call])\n );\n for (const resolution of receipt.calls) {\n if (resolution === null || typeof resolution !== \"object\" || !pending.has(resolution.callId))\n throw new TypeError(\"Migration contains an unknown or duplicate call resolution.\");\n if (\n ![\"not-performed\", \"fulfilled\", \"rejected\"].includes(resolution.disposition) ||\n (resolution.disposition === \"fulfilled\" && !Object.hasOwn(resolution, \"value\")) ||\n (resolution.disposition === \"rejected\" && !Object.hasOwn(resolution, \"reason\"))\n )\n throw new TypeError(\n \"Migration call resolution requires a reconciled outcome or confirmed non-performance.\"\n );\n pending.delete(resolution.callId);\n }\n if (pending.size > 0)\n throw new TypeError(\n `Migration requires external reconciliation for: ${[...pending.keys()].join(\", \")}`\n );\n}\n\nexport function validateSnapshotMigration(\n value: unknown,\n sourceHash: string,\n owner?: CompileOwner\n): SnapshotMigration | undefined {\n if (value === undefined) return undefined;\n validateSnapshotData(value);\n const migration = value as SnapshotMigration;\n if (\n migration === null ||\n typeof migration !== \"object\" ||\n migration.version !== 1 ||\n !Array.isArray(migration.history) ||\n migration.history.length === 0\n )\n throw new TypeError(\"Invalid snapshot migration history.\");\n const compilation = new CompileScope(owner);\n try {\n decodeReplayData(migration.state, {}, compilation);\n } finally {\n compilation.dispose();\n }\n let previousTarget: string | undefined;\n for (const entry of migration.history) {\n if (\n entry === null ||\n typeof entry !== \"object\" ||\n typeof entry.sourceHash !== \"string\" ||\n entry.sourceHash.length === 0 ||\n typeof entry.targetSourceHash !== \"string\" ||\n entry.targetSourceHash.length === 0 ||\n (previousTarget !== undefined && previousTarget !== entry.sourceHash)\n )\n throw new TypeError(\"Invalid snapshot migration ancestry.\");\n validateMigrationSemantics(entry.executionSemantics);\n const replay = validateMigrationJournal(entry.sourceHash, entry.replay, [], owner);\n validateMigrationReconciliation(\n entry.reconciliation,\n entry.reconciliation?.checkpointDigest,\n replay.calls\n );\n previousTarget = entry.targetSourceHash;\n }\n if (previousTarget !== sourceHash)\n throw new TypeError(\"Migration ancestry does not match the target source.\");\n return migration;\n}\n\nfunction isCheckpointDigest(value: unknown): value is string {\n return (\n typeof value === \"string\" &&\n value.length === 64 &&\n [...value].every((character) => \"0123456789abcdef\".includes(character))\n );\n}\n", "import { hashSource } from \"./parse/hash.js\";\nimport type { CompileOwner } from \"./interp/budget.js\";\nimport { replaceErrorStack } from \"./error/shape.js\";\nimport { SnapshotValidationError, validateDumpEnvelope } from \"./snapshot/validation.js\";\nimport { EXECUTION_SEMANTICS } from \"./snapshot/dump-format.js\";\nimport { assertSnapshotInactive } from \"./interp/running-state.js\";\nimport { validateSnapshotMigration, type SnapshotMigration } from \"./snapshot/migration.js\";\n\nexport type SafeJSSnapshot = {\n version?: number;\n sourceHash: string;\n migration?: SnapshotMigration;\n clock?: {\n next: number;\n };\n random?: {\n seed: number;\n state: number;\n initialState?: number;\n resumeState?: number;\n };\n [key: string]: unknown;\n};\n\nexport type RestoreOptions = {\n source: string;\n};\n\nexport class SnapshotMismatchError extends Error {\n readonly actualHash: string;\n readonly expectedHash: string;\n\n constructor(expectedHash: string, actualHash: string) {\n super(\n `source changed since snapshot was taken (hash ${expectedHash} expected, got ${actualHash}); pass --reset to discard`\n );\n this.name = \"SnapshotMismatchError\";\n this.actualHash = actualHash;\n this.expectedHash = expectedHash;\n replaceErrorStack(this);\n }\n}\n\nexport function restore<TSnapshot extends SafeJSSnapshot>(\n snapshot: TSnapshot,\n options: RestoreOptions,\n owner?: CompileOwner\n): TSnapshot {\n assertSnapshotInactive(snapshot);\n validateDumpEnvelope(snapshot);\n validateSnapshotMigration(snapshot.migration, snapshot.sourceHash, owner);\n\n if (\n snapshot.executionSemantics !== EXECUTION_SEMANTICS &&\n snapshot.executionSemantics !== \"jobs-v6\" &&\n (snapshot.executionSemantics !== undefined ||\n snapshot.promiseReplay !== undefined ||\n snapshot.replay !== undefined ||\n snapshot.initialInputs !== undefined)\n ) {\n throw new SnapshotValidationError(\n \"unsupportedVersion\",\n \"$.executionSemantics\",\n \"incompatible execution semantics; resume with the SafeJS version that created this snapshot. Migration requires explicit reconciliation, not changing its version marker.\"\n );\n }\n\n const currentSourceHash = hashSource(options.source, owner);\n\n if (snapshot.sourceHash !== currentSourceHash) {\n throw new SnapshotMismatchError(snapshot.sourceHash, currentSourceHash);\n }\n\n return snapshot;\n}\n", "import type { SourceSpan } from \"../../parse/parser.js\";\nimport type { Position } from \"../../parse/tokenizer.js\";\n\nexport type Diagnostic = {\n code: \"AS001\";\n severity: \"error\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\nexport function AS001(source: string, options: { filename?: string } = {}): Diagnostic[] {\n return new AS001Scanner(source, options.filename ?? \"<input>\").scan();\n}\n\ntype TokenType =\n | \"eof\"\n | \"identifier\"\n | \"keyword\"\n | \"numeric\"\n | \"punctuator\"\n | \"regex\"\n | \"string\"\n | \"template\";\n\ntype Token = {\n type: TokenType;\n value: string;\n start: Position;\n end: Position;\n};\n\ntype GroupingContext = {\n value: \"(\" | \"[\" | \"{\";\n isControlCondition?: boolean;\n};\n\ntype BraceContext = {\n kind: \"class\" | \"object\" | \"statement\";\n};\n\nconst KEYWORDS = new Set([\n \"async\",\n \"await\",\n \"break\",\n \"catch\",\n \"class\",\n \"const\",\n \"continue\",\n \"do\",\n \"else\",\n \"false\",\n \"finally\",\n \"for\",\n \"from\",\n \"if\",\n \"import\",\n \"in\",\n \"let\",\n \"new\",\n \"null\",\n \"of\",\n \"return\",\n \"switch\",\n \"throw\",\n \"this\",\n \"true\",\n \"try\",\n \"undefined\",\n \"var\",\n \"while\",\n \"with\"\n]);\n\nconst EXPRESSION_ENDING_KEYWORDS = new Set([\"false\", \"null\", \"this\", \"true\", \"undefined\"]);\nconst CONTROL_FLOW_PAREN_KEYWORDS = new Set([\"catch\", \"for\", \"if\", \"switch\", \"while\", \"with\"]);\nconst PUNCTUATORS = [\n \">>>=\",\n \"&&=\",\n \"||=\",\n \"??=\",\n \"===\",\n \"!==\",\n \">>>\",\n \"<<=\",\n \">>=\",\n \"**=\",\n \"?.\",\n \"...\",\n \"??\",\n \"&&\",\n \"||\",\n \"==\",\n \"!=\",\n \"<=\",\n \">=\",\n \"=>\",\n \"++\",\n \"--\",\n \"<<\",\n \">>\",\n \"**\",\n \"+=\",\n \"-=\",\n \"*=\",\n \"/=\",\n \"%=\",\n \"&=\",\n \"|=\",\n \"^=\",\n \"{\",\n \"}\",\n \"(\",\n \")\",\n \"[\",\n \"]\",\n \".\",\n \";\",\n \",\",\n \":\",\n \"?\",\n \"~\",\n \"+\",\n \"-\",\n \"*\",\n \"/\",\n \"%\",\n \"&\",\n \"|\",\n \"^\",\n \"!\",\n \"<\",\n \">\",\n \"=\"\n];\n\nclass AS001Scanner {\n private index = 0;\n private line = 1;\n private column = 1;\n private readonly diagnostics: Diagnostic[] = [];\n\n constructor(\n private readonly source: string,\n private readonly filename: string\n ) {}\n\n scan(): Diagnostic[] {\n this.scanCode();\n return this.diagnostics;\n }\n\n private scanCode(stopAtTemplateExpressionEnd = false): void {\n let previousToken: Token | undefined;\n let previousPreviousToken: Token | undefined;\n const groupingStack: GroupingContext[] = [];\n const braceContextStack: BraceContext[] = [];\n let lastClosedControlParenthesis = false;\n let canStartStatement = true;\n let templateExpressionBraceDepth = 0;\n let pendingClassBody = false;\n\n while (!this.isAtEnd()) {\n this.skipTrivia();\n\n if (this.isAtEnd()) {\n return;\n }\n\n const start = this.position();\n const char = this.currentChar();\n\n if (stopAtTemplateExpressionEnd && char === \"}\" && templateExpressionBraceDepth === 0) {\n this.advance();\n return;\n }\n\n let token: Token;\n\n if (isIdentifierStart(char)) {\n token = this.readIdentifierOrKeyword(start);\n } else if (char === \"'\" || char === '\"') {\n token = this.readString(start, char);\n } else if (char === \"`\") {\n token = this.readTemplate(start);\n } else if (isDecimalDigit(char) || (char === \".\" && isDecimalDigit(this.peekChar(1)))) {\n token = this.readNumber(start);\n } else if (\n char === \"/\" &&\n this.peekChar(1) !== \"=\" &&\n shouldRejectRegexLiteral(previousToken, lastClosedControlParenthesis)\n ) {\n token = this.readRegexLiteral(start);\n } else {\n token = this.readPunctuator(start);\n }\n\n if (token.type === \"identifier\" || token.type === \"keyword\") {\n const nextSignificantChar = this.peekNextSignificantChar();\n const isMemberProperty =\n previousToken?.type === \"punctuator\" &&\n (previousToken.value === \".\" || previousToken.value === \"?.\");\n const isPropertyKey = nextSignificantChar === \":\" && !canStartStatement;\n const isMemberName = isMemberNameToken(\n token,\n previousToken,\n previousPreviousToken,\n braceContextStack,\n nextSignificantChar\n );\n\n if (\n canStartStatement &&\n nextSignificantChar === \":\" &&\n token.value !== \"default\" &&\n !this.isLoopLabelStart()\n ) {\n this.report(\n \"label\",\n token.start,\n this.positionWithinSource(token.start.offset + token.value.length)\n );\n } else if (!isMemberProperty && !isPropertyKey && !isMemberName) {\n this.reportForbiddenIdentifier(token);\n if (token.value === \"class\") {\n pendingClassBody = true;\n }\n }\n }\n\n const isStatementBrace =\n token.type === \"punctuator\" && token.value === \"{\" && canStartStatement;\n\n if (token.type === \"punctuator\" && token.value === \"{\") {\n braceContextStack.push({\n kind:\n pendingClassBody && !canStartStatement\n ? \"class\"\n : isStatementBrace\n ? \"statement\"\n : \"object\"\n });\n pendingClassBody = false;\n if (stopAtTemplateExpressionEnd) {\n templateExpressionBraceDepth += 1;\n }\n } else if (token.type === \"punctuator\" && token.value === \"}\") {\n const closedBraceContext = braceContextStack.pop();\n const closedStatementBrace = closedBraceContext?.kind === \"statement\";\n if (stopAtTemplateExpressionEnd) {\n templateExpressionBraceDepth -= 1;\n }\n lastClosedControlParenthesis =\n token.type === \"punctuator\"\n ? updateGroupingState(groupingStack, previousToken, token.value)\n : false;\n canStartStatement = updateStatementStart(\n token,\n lastClosedControlParenthesis,\n false,\n closedStatementBrace\n );\n previousPreviousToken = previousToken;\n previousToken = token;\n continue;\n }\n\n if (\n token.type === \"punctuator\" &&\n token.value === \"*\" &&\n isGeneratorMemberToken(previousToken, previousPreviousToken, braceContextStack)\n ) {\n this.report(\"generator\", token.start, token.end);\n }\n\n lastClosedControlParenthesis =\n token.type === \"punctuator\"\n ? updateGroupingState(groupingStack, previousToken, token.value)\n : false;\n canStartStatement = updateStatementStart(\n token,\n lastClosedControlParenthesis,\n isStatementBrace,\n false\n );\n previousPreviousToken = previousToken;\n previousToken = token;\n }\n }\n\n private reportForbiddenIdentifier(token: Token): void {\n switch (token.value) {\n case \"class\":\n case \"eval\":\n case \"Function\":\n case \"with\":\n this.report(token.value, token.start, token.end);\n return;\n default:\n return;\n }\n }\n\n private report(construct: string, start: Position, end: Position): void {\n this.diagnostics.push({\n code: \"AS001\",\n severity: \"error\",\n message: `Disallowed syntax: ${construct}.`,\n filename: this.filename,\n line: start.line,\n column: start.column,\n span: createSpan(start, end)\n });\n }\n\n private skipTrivia(): void {\n while (!this.isAtEnd()) {\n const char = this.currentChar();\n\n if (isWhitespace(char) || isLineBreak(char)) {\n this.advance();\n continue;\n }\n\n if (char === \"/\" && this.peekChar(1) === \"/\") {\n this.advance();\n this.advance();\n while (!this.isAtEnd() && !isLineBreak(this.currentChar())) {\n this.advance();\n }\n continue;\n }\n\n if (char === \"/\" && this.peekChar(1) === \"*\") {\n this.advance();\n this.advance();\n while (!this.isAtEnd()) {\n if (this.currentChar() === \"*\" && this.peekChar(1) === \"/\") {\n this.advance();\n this.advance();\n break;\n }\n this.advance();\n }\n continue;\n }\n\n return;\n }\n }\n\n private readIdentifierOrKeyword(start: Position): Token {\n this.advance();\n while (!this.isAtEnd() && isIdentifierPart(this.currentChar())) {\n this.advance();\n }\n\n const value = this.source.slice(start.offset, this.index);\n return {\n type: KEYWORDS.has(value) ? \"keyword\" : \"identifier\",\n value,\n start,\n end: this.position()\n };\n }\n\n private readString(start: Position, quote: string): Token {\n this.advance();\n while (!this.isAtEnd()) {\n const char = this.currentChar();\n if (char === quote) {\n this.advance();\n break;\n }\n if (char === \"\\\\\") {\n this.advance();\n if (!this.isAtEnd()) {\n this.advance();\n }\n continue;\n }\n this.advance();\n }\n\n return {\n type: \"string\",\n value: this.source.slice(start.offset, this.index),\n start,\n end: this.position()\n };\n }\n\n private readTemplate(start: Position): Token {\n this.advance();\n\n while (!this.isAtEnd()) {\n const char = this.currentChar();\n if (char === \"`\") {\n this.advance();\n break;\n }\n if (char === \"\\\\\") {\n this.advance();\n if (!this.isAtEnd()) {\n this.advance();\n }\n continue;\n }\n if (char === \"$\" && this.peekChar(1) === \"{\") {\n this.advance();\n this.advance();\n this.scanCode(true);\n continue;\n }\n this.advance();\n }\n\n return {\n type: \"template\",\n value: \"`\",\n start,\n end: this.position()\n };\n }\n\n private readNumber(start: Position): Token {\n if (this.currentChar() === \".\") {\n this.advance();\n while (!this.isAtEnd() && isDecimalDigit(this.currentChar())) {\n this.advance();\n }\n } else {\n this.advance();\n while (!this.isAtEnd() && isIdentifierPart(this.currentChar())) {\n this.advance();\n }\n while (!this.isAtEnd() && this.currentChar() === \".\") {\n this.advance();\n while (!this.isAtEnd() && isIdentifierPart(this.currentChar())) {\n this.advance();\n }\n }\n }\n\n return {\n type: \"numeric\",\n value: this.source.slice(start.offset, this.index),\n start,\n end: this.position()\n };\n }\n\n private readRegexLiteral(start: Position): Token {\n this.advance();\n let inCharacterClass = false;\n\n while (!this.isAtEnd()) {\n const char = this.currentChar();\n\n if (char === \"\\\\\") {\n this.advance();\n if (!this.isAtEnd()) {\n this.advance();\n }\n continue;\n }\n\n if (char === \"[\" && !inCharacterClass) {\n inCharacterClass = true;\n this.advance();\n continue;\n }\n\n if (char === \"]\" && inCharacterClass) {\n inCharacterClass = false;\n this.advance();\n continue;\n }\n\n if (char === \"/\" && !inCharacterClass) {\n this.advance();\n while (!this.isAtEnd() && isAsciiLetter(this.currentChar())) {\n this.advance();\n }\n break;\n }\n\n this.advance();\n }\n\n return {\n type: \"regex\",\n value: this.source.slice(start.offset, this.index),\n start,\n end: this.position()\n };\n }\n\n private readPunctuator(start: Position): Token {\n const punctuator = matchPunctuator(this.source, this.index);\n if (punctuator === undefined) {\n this.advance();\n return {\n type: \"punctuator\",\n value: this.source.slice(start.offset, this.index),\n start,\n end: this.position()\n };\n }\n\n this.advanceBy(punctuator.length);\n return {\n type: \"punctuator\",\n value: punctuator,\n start,\n end: this.position()\n };\n }\n\n private peekNextSignificantChar(): string | undefined {\n const nextIndex = this.skipTriviaFrom(this.index);\n return nextIndex >= this.source.length ? undefined : this.source[nextIndex];\n }\n\n private isLoopLabelStart(): boolean {\n let index = this.skipTriviaFrom(this.index);\n if (this.source[index] !== \":\") {\n return false;\n }\n\n index = this.skipTriviaFrom(index + 1);\n\n while (index < this.source.length) {\n const identifier = readIdentifierAt(this.source, index);\n if (identifier === undefined) {\n return false;\n }\n\n if (identifier.value === \"for\" || identifier.value === \"while\" || identifier.value === \"do\") {\n return true;\n }\n\n const nextIndex = this.skipTriviaFrom(identifier.end);\n if (this.source[nextIndex] !== \":\") {\n return false;\n }\n\n index = this.skipTriviaFrom(nextIndex + 1);\n }\n\n return false;\n }\n\n private skipTriviaFrom(start: number): number {\n let index = start;\n\n while (index < this.source.length) {\n const char = this.source[index];\n\n if (isWhitespace(char) || isLineBreak(char)) {\n index += 1;\n continue;\n }\n\n if (char === \"/\" && this.source[index + 1] === \"/\") {\n index += 2;\n while (index < this.source.length && !isLineBreak(this.source[index])) {\n index += 1;\n }\n continue;\n }\n\n if (char === \"/\" && this.source[index + 1] === \"*\") {\n index += 2;\n while (index < this.source.length) {\n if (this.source[index] === \"*\" && this.source[index + 1] === \"/\") {\n index += 2;\n break;\n }\n index += 1;\n }\n continue;\n }\n\n break;\n }\n\n return index;\n }\n\n private currentChar(): string {\n return this.source[this.index] ?? \"\";\n }\n\n private peekChar(offset: number): string {\n return this.source[this.index + offset] ?? \"\";\n }\n\n private advance(): void {\n const char = this.source[this.index];\n this.index += 1;\n if (isLineBreak(char)) {\n if (char !== \"\\n\" || this.source[this.index - 2] !== \"\\r\") this.line += 1;\n this.column = 1;\n return;\n }\n this.column += 1;\n }\n\n private advanceBy(length: number): void {\n for (let index = 0; index < length; index += 1) {\n this.advance();\n }\n }\n\n private isAtEnd(): boolean {\n return this.index >= this.source.length;\n }\n\n private position(): Position {\n return {\n line: this.line,\n column: this.column,\n offset: this.index\n };\n }\n\n private positionWithinSource(offset: number): Position {\n let line = 1;\n let column = 1;\n\n for (let index = 0; index < offset; index += 1) {\n if (isLineBreak(this.source[index])) {\n if (this.source[index] !== \"\\n\" || this.source[index - 1] !== \"\\r\") line += 1;\n column = 1;\n continue;\n }\n column += 1;\n }\n\n return {\n line,\n column,\n offset\n };\n }\n}\n\nfunction createSpan(start: Position, end: Position): SourceSpan {\n return {\n start: { ...start },\n end: { ...end }\n };\n}\n\nfunction isMemberNameToken(\n token: Token,\n previousToken: Token | undefined,\n previousPreviousToken: Token | undefined,\n braceContextStack: BraceContext[],\n nextSignificantChar: string | undefined\n): boolean {\n const memberContext = braceContextStack.at(-1);\n if (memberContext === undefined) {\n return false;\n }\n\n if (memberContext.kind !== \"class\" && memberContext.kind !== \"object\") {\n return false;\n }\n\n if (nextSignificantChar !== \"(\") {\n return false;\n }\n\n if (isMemberEntryStart(previousToken, memberContext.kind)) {\n return true;\n }\n\n if (isMemberModifierToken(previousToken)) {\n return isMemberEntryStart(previousPreviousToken, memberContext.kind);\n }\n\n return previousToken?.type === \"punctuator\" && previousToken.value === \"*\";\n}\n\nfunction isGeneratorMemberToken(\n previousToken: Token | undefined,\n previousPreviousToken: Token | undefined,\n braceContextStack: BraceContext[]\n): boolean {\n const memberContext = braceContextStack.at(-1);\n if (memberContext === undefined) {\n return false;\n }\n\n if (memberContext.kind !== \"class\" && memberContext.kind !== \"object\") {\n return false;\n }\n\n if (isMemberEntryStart(previousToken, memberContext.kind)) {\n return true;\n }\n\n return (\n isMemberModifierToken(previousToken) &&\n isMemberEntryStart(previousPreviousToken, memberContext.kind)\n );\n}\n\nfunction isMemberEntryStart(token: Token | undefined, kind: BraceContext[\"kind\"]): boolean {\n if (token?.type !== \"punctuator\") {\n return false;\n }\n\n if (token.value === \"{\") {\n return true;\n }\n\n if (token.value === \",\") {\n return kind === \"object\";\n }\n\n if (token.value === \";\" || token.value === \"}\") {\n return kind === \"class\";\n }\n\n return false;\n}\n\nfunction isMemberModifierToken(token: Token | undefined): boolean {\n if (token === undefined) {\n return false;\n }\n\n if (token.type !== \"identifier\" && token.type !== \"keyword\") {\n return false;\n }\n\n return (\n token.value === \"async\" ||\n token.value === \"get\" ||\n token.value === \"set\" ||\n token.value === \"static\"\n );\n}\n\nfunction updateStatementStart(\n token: Token,\n lastClosedControlParenthesis: boolean,\n isStatementBrace: boolean,\n closedStatementBrace: boolean\n): boolean {\n if (token.type === \"punctuator\") {\n if (token.value === \")\" && lastClosedControlParenthesis) {\n return true;\n }\n\n if (token.value === \"{\") {\n return isStatementBrace;\n }\n\n if (token.value === \"}\") {\n return closedStatementBrace;\n }\n\n return token.value === \";\";\n }\n\n if (token.type === \"keyword\") {\n return token.value === \"do\" || token.value === \"else\";\n }\n\n return false;\n}\n\nfunction matchPunctuator(source: string, index: number): string | undefined {\n return PUNCTUATORS.find((punctuator) => source.startsWith(punctuator, index));\n}\n\nfunction shouldRejectRegexLiteral(\n previousToken: Token | undefined,\n lastClosedControlParenthesis: boolean\n): boolean {\n if (previousToken === undefined) {\n return true;\n }\n\n if (\n previousToken.type === \"identifier\" ||\n previousToken.type === \"numeric\" ||\n previousToken.type === \"regex\" ||\n previousToken.type === \"string\" ||\n previousToken.type === \"template\"\n ) {\n return false;\n }\n\n if (previousToken.type === \"keyword\") {\n return !EXPRESSION_ENDING_KEYWORDS.has(previousToken.value);\n }\n\n if (previousToken.value === \")\") {\n return lastClosedControlParenthesis;\n }\n\n return !isExpressionEndingPunctuator(previousToken.value);\n}\n\nfunction updateGroupingState(\n groupingStack: GroupingContext[],\n previousToken: Token | undefined,\n punctuator: string\n): boolean {\n if (punctuator === \"(\") {\n groupingStack.push({\n value: \"(\",\n isControlCondition:\n previousToken?.type === \"keyword\" && CONTROL_FLOW_PAREN_KEYWORDS.has(previousToken.value)\n });\n return false;\n }\n\n if (punctuator === \"[\") {\n groupingStack.push({ value: \"[\" });\n return false;\n }\n\n if (punctuator === \"{\") {\n groupingStack.push({ value: \"{\" });\n return false;\n }\n\n if (punctuator === \")\" || punctuator === \"]\" || punctuator === \"}\") {\n const context = popGroupingContext(groupingStack, matchingOpeningPunctuator(punctuator));\n return punctuator === \")\" && context?.isControlCondition === true;\n }\n\n return false;\n}\n\nfunction popGroupingContext(\n groupingStack: GroupingContext[],\n expected: \"(\" | \"[\" | \"{\"\n): GroupingContext | undefined {\n const context = groupingStack.pop();\n if (context?.value !== expected) {\n return undefined;\n }\n return context;\n}\n\nfunction matchingOpeningPunctuator(value: \")\" | \"]\" | \"}\"): \"(\" | \"[\" | \"{\" {\n switch (value) {\n case \")\":\n return \"(\";\n case \"]\":\n return \"[\";\n case \"}\":\n return \"{\";\n }\n}\n\nfunction isIdentifierStart(char: string): boolean {\n return char === \"_\" || char === \"$\" || isAsciiLetter(char);\n}\n\nfunction isIdentifierPart(char: string): boolean {\n return isIdentifierStart(char) || isDecimalDigit(char);\n}\n\nfunction readIdentifierAt(\n source: string,\n start: number\n): { value: string; end: number } | undefined {\n if (!isIdentifierStart(source[start] ?? \"\")) {\n return undefined;\n }\n\n let end = start + 1;\n while (end < source.length && isIdentifierPart(source[end] ?? \"\")) {\n end += 1;\n }\n\n return {\n value: source.slice(start, end),\n end\n };\n}\n\nfunction isAsciiLetter(char: string): boolean {\n return (char >= \"a\" && char <= \"z\") || (char >= \"A\" && char <= \"Z\");\n}\n\nfunction isDecimalDigit(char: string): boolean {\n return char >= \"0\" && char <= \"9\";\n}\n\nfunction isWhitespace(char: string): boolean {\n return (\n char === \" \" ||\n char === \"\\t\" ||\n char === \"\\v\" ||\n char === \"\\f\" ||\n char === \"\\u00A0\" ||\n char === \"\\uFEFF\"\n );\n}\n\nfunction isLineBreak(char: string): boolean {\n return char === \"\\n\" || char === \"\\r\";\n}\n\nfunction isExpressionEndingPunctuator(value: string): boolean {\n return value === \")\" || value === \"]\" || value === \"}\" || value === \"++\" || value === \"--\";\n}\n", "export const KNOWN_RUNTIME_GLOBALS = [\n \"AggregateError\",\n \"Array\",\n \"Boolean\",\n \"Error\",\n \"Infinity\",\n \"isFinite\",\n \"isNaN\",\n \"JSON\",\n \"Map\",\n \"Float32Array\",\n \"Math\",\n \"NaN\",\n \"Number\",\n \"Object\",\n \"parseFloat\",\n \"parseInt\",\n \"Promise\",\n \"RangeError\",\n \"ReferenceError\",\n \"RegExp\",\n \"Set\",\n \"String\",\n \"structuredClone\",\n \"SyntaxError\",\n \"TypeError\",\n \"console\"\n] as const;\n", "import {\n parseModule,\n type ArrayExpression,\n type ArrayPattern,\n type FunctionNode,\n type AssignmentExpression,\n type AssignmentPattern,\n type AssignmentProperty,\n type AwaitExpression,\n type BinaryExpression,\n type BlockStatement,\n type CallExpression,\n type CatchClause,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ExpressionStatement,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type Identifier,\n type IfStatement,\n type ImportDeclaration,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type NewExpression,\n type ObjectExpression,\n type ObjectPattern,\n type Property,\n type RestElement,\n type SourceSpan,\n type SpreadElement,\n type Statement,\n type SwitchStatement,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\nimport { KNOWN_RUNTIME_GLOBALS } from \"./known-globals.js\";\nimport { hoistedVarDeclarations } from \"../../parse/bindings.js\";\n\nexport type Diagnostic = {\n code: \"AS003\";\n severity: \"error\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\ntype BindingKind = \"const\" | \"import\" | \"let\" | \"param\" | \"var\";\n\ntype Binding = {\n kind: BindingKind;\n name: string;\n};\n\ntype Scope = Map<string, Binding>;\n\nexport function AS003(\n source: string,\n options: { allowedGlobals?: readonly string[]; filename?: string } = {}\n): Diagnostic[] {\n return new AS003Scanner(\n options.filename ?? \"<input>\",\n new Set([...KNOWN_RUNTIME_GLOBALS, ...(options.allowedGlobals ?? [])])\n ).scan(source);\n}\n\nclass AS003Scanner {\n private readonly diagnostics: Diagnostic[] = [];\n private readonly scopes: Scope[] = [];\n\n constructor(\n private readonly filename: string,\n private readonly allowedGlobals: ReadonlySet<string>\n ) {}\n\n scan(source: string): Diagnostic[] {\n const module = parseModule(source, this.filename);\n this.visitModule(module);\n return this.diagnostics;\n }\n\n private visitModule(node: Module): void {\n this.withScope(this.collectModuleBindings(node.body), () => {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n });\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunction(node);\n return;\n case \"BlockStatement\":\n this.visitBlock(node);\n return;\n case \"ExpressionStatement\":\n this.visitExpressionStatement(node);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"SwitchStatement\":\n this.visitSwitchStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitBlock(node: BlockStatement, functionBody = false): void {\n const bindings = this.collectBlockBindings(node.body);\n if (functionBody) {\n for (const declaration of hoistedVarDeclarations(node.body)) {\n bindings.push(...this.collectDeclarationBindings(declaration));\n }\n }\n this.withScope(bindings, () => {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n });\n }\n\n private visitExpressionStatement(node: ExpressionStatement): void {\n this.visitExpression(node.expression);\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n const bindings =\n node.init?.type === \"VariableDeclaration\" && node.init.kind !== \"var\"\n ? this.collectDeclarationBindings(node.init)\n : [];\n this.withScope(bindings, () => {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n this.visitStatement(node.body);\n });\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n const bindings =\n node.left.type === \"VariableDeclaration\" && node.left.kind !== \"var\"\n ? this.collectDeclarationBindings(node.left)\n : [];\n this.withScope(bindings, () => {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n } else {\n this.visitAssignmentTarget(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n });\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitSwitchStatement(node: SwitchStatement): void {\n this.visitExpression(node.discriminant);\n this.withScope(\n this.collectBlockBindings(node.cases.flatMap((switchCase) => switchCase.consequent)),\n () => {\n for (const switchCase of node.cases) {\n if (switchCase.test !== undefined) this.visitExpression(switchCase.test);\n for (const statement of switchCase.consequent) this.visitStatement(statement);\n }\n }\n );\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitBlock(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitBlock(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n this.withScope(this.collectCatchBindings(node), () => {\n if (node.param !== undefined) {\n this.visitBindingPattern(node.param);\n }\n this.visitBlock(node.body);\n });\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n this.visitBindingPattern(node.id);\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"Identifier\":\n this.visitIdentifier(node);\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"AwaitExpression\":\n this.visitAwaitExpression(node);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n this.visitBinaryExpression(node);\n return;\n case \"LogicalExpression\":\n this.visitLogicalExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n case \"NewExpression\":\n this.visitCallExpression(node);\n return;\n case \"SequenceExpression\":\n for (const expression of node.expressions) this.visitExpression(expression);\n return;\n case \"UpdateExpression\":\n this.visitExpression(node.argument);\n return;\n case \"TaggedTemplateExpression\":\n this.visitExpression(node.tag);\n this.visitTemplateLiteral(node.quasi);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"BooleanLiteral\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: FunctionNode): void {\n this.withScope(this.collectParameterBindings(node), () => {\n for (const parameter of node.params) {\n this.visitBindingElement(parameter);\n }\n\n if (node.body.type === \"BlockStatement\") {\n this.visitBlock(node.body, true);\n } else {\n this.visitExpression(node.body);\n }\n });\n }\n\n private visitAwaitExpression(node: AwaitExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element?.type === \"SpreadElement\") {\n this.visitSpreadElement(element);\n continue;\n }\n if (element !== undefined) {\n this.visitExpression(element);\n }\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitSpreadElement(property);\n continue;\n }\n this.visitProperty(property);\n }\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryExpression(node: BinaryExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitLogicalExpression(node: LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n if (node.computed) {\n this.visitExpression(node.property);\n }\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression | NewExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitSpreadElement(argument);\n continue;\n }\n this.visitExpression(argument);\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitExpression(node.value);\n }\n\n private visitSpreadElement(node: SpreadElement): void {\n this.visitExpression(node.argument);\n }\n\n private visitBindingElement(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.visitBindingPattern(node.left);\n this.visitExpression(node.right);\n return;\n case \"RestElement\":\n this.visitBindingPattern(node.argument);\n return;\n default:\n this.visitBindingPattern(node);\n return;\n }\n }\n\n private visitBindingPattern(\n node: ArrayPattern | Identifier | MemberExpression | ObjectPattern\n ): void {\n switch (node.type) {\n case \"Identifier\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.visitBindingElement(element);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitBindingPattern(property.argument);\n continue;\n }\n this.visitAssignmentProperty(property);\n }\n return;\n }\n }\n\n private visitAssignmentProperty(node: AssignmentProperty): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitBindingElement(node.value);\n }\n\n private visitAssignmentTarget(\n node: AssignmentExpression[\"left\"] | AssignmentPattern | RestElement\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n return;\n case \"RestElement\":\n this.visitAssignmentTarget(node.argument);\n return;\n case \"Identifier\":\n this.visitIdentifier(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element === null) {\n continue;\n }\n this.visitAssignmentTarget(element);\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitAssignmentTarget(property);\n continue;\n }\n if (property.computed) {\n this.visitExpression(property.key);\n }\n this.visitAssignmentTarget(property.value);\n }\n return;\n }\n }\n\n private visitIdentifier(node: Identifier): void {\n if (this.resolveBinding(node.name) !== undefined) {\n return;\n }\n\n if (this.allowedGlobals.has(node.name)) {\n return;\n }\n\n const visibleNames = this.collectVisibleNames();\n const nearMatches = this.collectSuggestionNames(visibleNames)\n .map((name) => ({ distance: getLevenshteinDistance(node.name, name), name }))\n .filter((entry) => entry.distance <= 2)\n .sort((left, right) => left.distance - right.distance || left.name.localeCompare(right.name))\n .map((entry) => entry.name);\n\n const message =\n nearMatches.length > 0\n ? `Unknown identifier '${node.name}'. ${formatNearMatchMessage(nearMatches)}`\n : `Unknown identifier '${node.name}'. ${formatVisibleNamesMessage(visibleNames)}`;\n\n this.diagnostics.push({\n code: \"AS003\",\n severity: \"error\",\n message,\n filename: this.filename,\n line: node.span.start.line,\n column: node.span.start.column,\n span: node.span\n });\n }\n\n private withScope(bindings: Binding[], visit: () => void): void {\n const scope: Scope = new Map();\n for (const binding of bindings) {\n scope.set(binding.name, binding);\n }\n this.scopes.push(scope);\n visit();\n this.scopes.pop();\n }\n\n private resolveBinding(name: string): Binding | undefined {\n for (let index = this.scopes.length - 1; index >= 0; index -= 1) {\n const binding = this.scopes[index]?.get(name);\n if (binding !== undefined) {\n return binding;\n }\n }\n return undefined;\n }\n\n private collectVisibleNames(): string[] {\n const names = new Set<string>();\n\n for (let index = this.scopes.length - 1; index >= 0; index -= 1) {\n for (const name of this.scopes[index]?.keys() ?? []) {\n names.add(name);\n }\n }\n\n return [...names].sort((left, right) => left.localeCompare(right));\n }\n\n private collectSuggestionNames(visibleNames: readonly string[]): string[] {\n const names = new Set([...visibleNames, ...this.allowedGlobals]);\n return [...names].sort((left, right) => left.localeCompare(right));\n }\n\n private collectModuleBindings(body: Statement[]): Binding[] {\n const bindings: Binding[] = [];\n for (const declaration of hoistedVarDeclarations(body)) {\n bindings.push(...this.collectDeclarationBindings(declaration));\n }\n for (const statement of body) {\n if (statement.type === \"ImportDeclaration\") {\n bindings.push(...this.collectImportBindings(statement));\n continue;\n }\n if (statement.type === \"FunctionDeclaration\") {\n bindings.push({ kind: \"let\", name: statement.id.name });\n continue;\n }\n if (statement.type === \"VariableDeclaration\" && statement.kind !== \"var\") {\n bindings.push(...this.collectDeclarationBindings(statement));\n continue;\n }\n if (statement.type === \"ExportNamedDeclaration\") {\n bindings.push(...this.collectDeclarationBindings(statement.declaration));\n }\n }\n return bindings;\n }\n\n private collectBlockBindings(body: Statement[]): Binding[] {\n const bindings: Binding[] = [];\n for (const statement of body) {\n if (statement.type === \"FunctionDeclaration\") {\n bindings.push({ kind: \"let\", name: statement.id.name });\n }\n if (statement.type === \"VariableDeclaration\" && statement.kind !== \"var\") {\n bindings.push(...this.collectDeclarationBindings(statement));\n }\n }\n return bindings;\n }\n\n private collectParameterBindings(node: FunctionNode): Binding[] {\n const bindings: Binding[] = [];\n if (node.type !== \"ArrowFunctionExpression\") {\n bindings.push({ kind: \"let\", name: \"arguments\" });\n if (node.type === \"FunctionExpression\" && node.id !== undefined) {\n bindings.push({ kind: \"const\", name: node.id.name });\n }\n }\n for (const parameter of node.params) {\n this.collectBindingNamesFromElement(parameter, \"param\", bindings);\n }\n return bindings;\n }\n\n private collectDeclarationBindings(node: VariableDeclaration): Binding[] {\n const bindings: Binding[] = [];\n for (const declarator of node.declarations) {\n this.collectBindingNamesFromPattern(declarator.id, node.kind, bindings);\n }\n return bindings;\n }\n\n private collectCatchBindings(node: CatchClause): Binding[] {\n const bindings: Binding[] = [];\n if (node.param !== undefined) {\n this.collectBindingNamesFromPattern(node.param, \"let\", bindings);\n }\n return bindings;\n }\n\n private collectImportBindings(node: ImportDeclaration): Binding[] {\n const bindings: Binding[] = [];\n for (const specifier of node.specifiers) {\n bindings.push({ kind: \"import\", name: specifier.local.name });\n }\n return bindings;\n }\n\n private collectBindingNamesFromElement(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement,\n kind: BindingKind,\n bindings: Binding[]\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.collectBindingNamesFromPattern(node.left, kind, bindings);\n return;\n case \"RestElement\":\n this.collectBindingNamesFromPattern(node.argument, kind, bindings);\n return;\n default:\n this.collectBindingNamesFromPattern(node, kind, bindings);\n return;\n }\n }\n\n private collectBindingNamesFromPattern(\n node: ArrayPattern | Identifier | MemberExpression | ObjectPattern,\n kind: BindingKind,\n bindings: Binding[]\n ): void {\n switch (node.type) {\n case \"Identifier\":\n bindings.push({ kind, name: node.name });\n return;\n case \"MemberExpression\":\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.collectBindingNamesFromElement(element, kind, bindings);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.collectBindingNamesFromPattern(property.argument, kind, bindings);\n continue;\n }\n this.collectBindingNamesFromElement(property.value, kind, bindings);\n }\n return;\n }\n }\n}\n\nfunction formatNearMatchMessage(names: string[]): string {\n if (names.length === 1) {\n return `Did you mean '${names[0]}'?`;\n }\n\n return `Did you mean one of: ${names.map((name) => `'${name}'`).join(\", \")}?`;\n}\n\nfunction formatVisibleNamesMessage(names: string[]): string {\n if (names.length === 0) {\n return \"No names are in scope.\";\n }\n\n return `In-scope names: ${names.join(\", \")}.`;\n}\n\nfunction getLevenshteinDistance(left: string, right: string): number {\n const previous = Array.from({ length: right.length + 1 }, (_, index) => index);\n const current = new Array<number>(right.length + 1);\n\n for (let row = 1; row <= left.length; row += 1) {\n current[0] = row;\n for (let column = 1; column <= right.length; column += 1) {\n const substitutionCost = left[row - 1] === right[column - 1] ? 0 : 1;\n current[column] = Math.min(\n current[column - 1]! + 1,\n previous[column]! + 1,\n previous[column - 1]! + substitutionCost\n );\n }\n\n for (let column = 0; column <= right.length; column += 1) {\n previous[column] = current[column]!;\n }\n }\n\n return previous[right.length]!;\n}\n", "import { parseModule, type ImportDeclaration } from \"../../parse/parser.js\";\n\nexport type ModuleRegistration =\n | readonly string[]\n | {\n exports?: readonly string[] | LintModuleExports;\n filename?: string;\n source?: string;\n };\n\nexport type Modules = ReadonlyMap<string, ModuleRegistration> | Record<string, ModuleRegistration>;\nexport type LintModuleExport =\n | string\n | {\n async?: boolean;\n type?: string;\n };\nexport type LintModuleExports =\n | ReadonlyMap<string, LintModuleExport>\n | Record<string, LintModuleExport>;\nexport type ModuleExportTypes = LintModuleExports;\n\nexport type NormalizedModuleRegistration = {\n asyncExports: ReadonlySet<string>;\n exports: string[];\n exportTypes: ReadonlyMap<string, string>;\n filename?: string;\n source?: string;\n};\n\nexport type SafeJSSourceModule = {\n moduleName: string;\n exports: readonly string[];\n filename: string;\n source: string;\n};\n\nexport function collectImportDeclarations(source: string, filename: string): ImportDeclaration[] {\n const module = parseModule(source, filename);\n return module.body.flatMap((statement) =>\n statement.type === \"ImportDeclaration\" ? [statement] : []\n );\n}\n\nexport function createUnknownModuleMessage(\n moduleName: string,\n moduleNames: readonly string[]\n): string {\n if (moduleNames.length === 0) {\n return `Unknown module '${moduleName}'. No modules are registered.`;\n }\n\n return `Unknown module '${moduleName}'. Available modules: ${moduleNames.join(\", \")}.`;\n}\n\nexport function createUnknownExportMessage(\n moduleName: string,\n exportName: string,\n availableExports: readonly string[]\n): string {\n if (availableExports.length === 0) {\n return `Module '${moduleName}' does not export '${exportName}'. The module exports nothing.`;\n }\n\n return `Module '${moduleName}' does not export '${exportName}'. Available exports: ${availableExports.join(\", \")}.`;\n}\n\nexport function normalizeModules(modules: Modules | undefined): Map<string, string[]> {\n return new Map(\n [...normalizeModuleRegistrations(modules).entries()].map(([moduleName, registration]) => [\n moduleName,\n registration.exports\n ])\n );\n}\n\nexport function normalizeModuleRegistrations(\n modules: Modules | undefined\n): Map<string, NormalizedModuleRegistration> {\n if (modules === undefined) {\n return new Map();\n }\n\n const entries = modules instanceof Map ? [...modules.entries()] : Object.entries(modules);\n const normalized = new Map<string, NormalizedModuleRegistration>();\n\n for (const [moduleName, registration] of entries) {\n normalized.set(moduleName, normalizeModuleRegistration(registration));\n }\n\n return normalized;\n}\n\nexport function collectSafeJSSourceModules(\n modules: Modules | undefined\n): Map<string, SafeJSSourceModule> {\n return new Map(\n [...normalizeModuleRegistrations(modules).entries()].flatMap(([moduleName, registration]) =>\n registration.filename !== undefined && registration.source !== undefined\n ? [\n {\n moduleName,\n exports: registration.exports,\n filename: registration.filename,\n source: registration.source\n } satisfies SafeJSSourceModule\n ].map((sourceModule) => [moduleName, sourceModule] as const)\n : []\n )\n );\n}\n\nexport function hasTypedModuleRegistrations(modules: Modules | undefined): boolean {\n return [...normalizeModuleRegistrations(modules).values()].some(\n (registration) => registration.exportTypes.size > 0\n );\n}\n\nfunction normalizeModuleRegistration(\n registration: ModuleRegistration\n): NormalizedModuleRegistration {\n if (isExportList(registration)) {\n return {\n asyncExports: new Set(),\n exports: dedupeAndSort(registration),\n exportTypes: new Map()\n };\n }\n\n const exports = registration.exports ?? [];\n\n return {\n asyncExports: isExportList(exports) ? new Set() : normalizeAsyncExports(exports),\n exports: dedupeAndSort(isExportList(exports) ? exports : listTypedExports(exports)),\n exportTypes: isExportList(exports) ? new Map() : normalizeExportTypes(exports),\n filename: registration.filename,\n source: registration.source\n };\n}\n\nfunction isExportList(registration: unknown): registration is readonly string[] {\n return Array.isArray(registration);\n}\n\nfunction dedupeAndSort(exportedNames: readonly string[]): string[] {\n return [...new Set(exportedNames)].sort((left, right) => left.localeCompare(right));\n}\n\nfunction listTypedExports(exports: LintModuleExports): string[] {\n return exports instanceof Map ? [...exports.keys()] : Object.keys(exports);\n}\n\nfunction normalizeExportTypes(exports: LintModuleExports): ReadonlyMap<string, string> {\n const entries = exports instanceof Map ? [...exports.entries()] : Object.entries(exports);\n\n return new Map(\n entries\n .flatMap(([exportName, metadata]) => {\n if (exportName.length === 0) {\n return [];\n }\n\n const type = typeof metadata === \"string\" ? metadata : metadata.type;\n return type === undefined ? [] : [[exportName, type] as const];\n })\n .sort(([left], [right]) => left.localeCompare(right))\n );\n}\n\nfunction normalizeAsyncExports(exports: LintModuleExports): ReadonlySet<string> {\n const entries = exports instanceof Map ? [...exports.entries()] : Object.entries(exports);\n\n return new Set(\n entries\n .filter(\n ([exportName, metadata]) =>\n exportName.length > 0 && typeof metadata !== \"string\" && metadata.async === true\n )\n .map(([exportName]) => exportName)\n .sort((left, right) => left.localeCompare(right))\n );\n}\n", "import type { SourceSpan } from \"../../parse/parser.js\";\nimport {\n collectImportDeclarations,\n createUnknownModuleMessage,\n normalizeModules,\n type Modules\n} from \"./module-registry.js\";\n\nexport type Diagnostic = {\n code: \"AS004\";\n severity: \"error\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\nexport function AS004(\n source: string,\n options: { filename?: string; modules?: Modules } = {}\n): Diagnostic[] {\n const filename = options.filename ?? \"<input>\";\n const modules = normalizeModules(options.modules);\n const moduleNames = [...modules.keys()].sort((left, right) => left.localeCompare(right));\n\n return collectImportDeclarations(source, filename).flatMap((declaration) => {\n if (modules.has(declaration.source.value)) {\n return [];\n }\n\n return [\n {\n code: \"AS004\" as const,\n severity: \"error\" as const,\n message: createUnknownModuleMessage(declaration.source.value, moduleNames),\n filename,\n line: declaration.source.span.start.line,\n column: declaration.source.span.start.column,\n span: declaration.source.span\n }\n ];\n });\n}\n", "import type { SourceSpan } from \"../../parse/parser.js\";\nimport {\n collectImportDeclarations,\n createUnknownExportMessage,\n normalizeModules,\n type Modules\n} from \"./module-registry.js\";\n\nexport type Diagnostic = {\n code: \"AS005\";\n severity: \"error\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\nexport function AS005(\n source: string,\n options: { filename?: string; modules?: Modules } = {}\n): Diagnostic[] {\n const filename = options.filename ?? \"<input>\";\n const modules = normalizeModules(options.modules);\n\n return collectImportDeclarations(source, filename).flatMap((declaration) => {\n const availableExports = modules.get(declaration.source.value);\n if (availableExports === undefined) {\n return [];\n }\n\n return declaration.specifiers.flatMap((specifier) => {\n if (specifier.type === \"ImportNamespaceSpecifier\") {\n return [];\n }\n\n const importName =\n specifier.type === \"ImportDefaultSpecifier\" ? \"default\" : specifier.imported.name;\n if (availableExports.includes(importName)) {\n return [];\n }\n\n const span =\n specifier.type === \"ImportDefaultSpecifier\"\n ? specifier.local.span\n : specifier.imported.span;\n\n return [\n {\n code: \"AS005\" as const,\n severity: \"error\" as const,\n message: createUnknownExportMessage(\n declaration.source.value,\n importName,\n availableExports\n ),\n filename,\n line: span.start.line,\n column: span.start.column,\n span\n }\n ];\n });\n });\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type ArrayPattern,\n type FunctionNode,\n type AssignmentExpression,\n type AssignmentPattern,\n type AssignmentProperty,\n type AwaitExpression,\n type BinaryExpression,\n type BlockStatement,\n type CallExpression,\n type CatchClause,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type Identifier,\n type IfStatement,\n type ImportDeclaration,\n type ImportDefaultSpecifier,\n type ImportNamespaceSpecifier,\n type ImportSpecifier,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type NewExpression,\n type ObjectExpression,\n type ObjectPattern,\n type Property,\n type RestElement,\n type SourceSpan,\n type SpreadElement,\n type Statement,\n type SwitchStatement,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\nimport { hoistedVarDeclarations } from \"../../parse/bindings.js\";\n\ntype DiagnosticCode = \"AS006\" | \"AS007\";\n\nexport type Diagnostic = {\n code: DiagnosticCode;\n severity: \"warning\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\ntype BindingKind = \"const\" | \"import\" | \"let\" | \"param\" | \"var\";\n\ntype Binding = {\n code?: DiagnosticCode;\n kind: BindingKind;\n message: string;\n name: string;\n reads: number;\n span: SourceSpan;\n};\n\ntype Scope = Map<string, Binding>;\n\nexport function AS006_007(source: string, options: { filename?: string } = {}): Diagnostic[] {\n return new AS006007Scanner(options.filename ?? \"<input>\").scan(source);\n}\n\nclass AS006007Scanner {\n private readonly diagnostics: Diagnostic[] = [];\n private readonly ignoredReads: Array<Set<Binding>> = [];\n private readonly scopes: Scope[] = [];\n\n constructor(private readonly filename: string) {}\n\n scan(source: string): Diagnostic[] {\n const module = parseModule(source, this.filename);\n this.visitModule(module);\n\n return this.diagnostics.sort(\n (left, right) =>\n left.span.start.offset - right.span.start.offset ||\n left.span.end.offset - right.span.end.offset ||\n left.code.localeCompare(right.code)\n );\n }\n\n private visitModule(node: Module): void {\n this.withScope(this.collectModuleBindings(node.body), () => {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n });\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunction(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"BlockStatement\":\n this.visitBlock(node);\n return;\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"SwitchStatement\":\n this.visitSwitchStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitBlock(node: BlockStatement, functionBody = false): void {\n const bindings = this.collectBlockBindings(node.body);\n if (functionBody) {\n for (const declaration of hoistedVarDeclarations(node.body)) {\n bindings.push(...this.collectDeclarationBindings(declaration));\n }\n }\n this.withScope(bindings, () => {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n });\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n const bindings =\n node.init?.type === \"VariableDeclaration\" && node.init.kind !== \"var\"\n ? this.collectDeclarationBindings(node.init)\n : [];\n\n this.withScope(bindings, () => {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n this.visitStatement(node.body);\n });\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n const bindings =\n node.left.type === \"VariableDeclaration\" && node.left.kind !== \"var\"\n ? this.collectDeclarationBindings(node.left)\n : [];\n\n this.withScope(bindings, () => {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n } else {\n this.visitAssignmentTarget(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n });\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitBlock(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitBlock(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n this.withScope(this.collectCatchBindings(node), () => {\n if (node.param !== undefined) {\n this.visitBindingPattern(node.param);\n }\n this.visitBlock(node.body);\n });\n }\n\n private visitSwitchStatement(node: SwitchStatement): void {\n this.visitExpression(node.discriminant);\n const statements = node.cases.flatMap((switchCase) => switchCase.consequent);\n this.withScope(this.collectBlockBindings(statements), () => {\n for (const switchCase of node.cases) {\n if (switchCase.test !== undefined) this.visitExpression(switchCase.test);\n for (const statement of switchCase.consequent) this.visitStatement(statement);\n }\n });\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n this.visitBindingPattern(node.id);\n const init = node.init;\n if (init !== undefined) {\n this.withIgnoredReads(this.resolveBindings(this.collectPatternBindingNames(node.id)), () => {\n this.visitExpression(init);\n });\n }\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"Identifier\":\n this.markRead(node);\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"AwaitExpression\":\n this.visitAwaitExpression(node);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n this.visitBinaryExpression(node);\n return;\n case \"LogicalExpression\":\n this.visitLogicalExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n case \"NewExpression\":\n this.visitCallExpression(node);\n return;\n case \"SequenceExpression\":\n for (const expression of node.expressions) this.visitExpression(expression);\n return;\n case \"UpdateExpression\":\n this.visitExpression(node.argument);\n return;\n case \"TaggedTemplateExpression\":\n this.visitExpression(node.tag);\n this.visitTemplateLiteral(node.quasi);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"BooleanLiteral\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: FunctionNode): void {\n this.withDeferredReads(() => {\n this.withScope(this.collectParameterBindings(node), () => {\n for (const parameter of node.params) {\n this.visitBindingElement(parameter);\n }\n\n if (node.body.type === \"BlockStatement\") {\n this.visitBlock(node.body, true);\n return;\n }\n\n this.visitExpression(node.body);\n });\n });\n }\n\n private visitAwaitExpression(node: AwaitExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element?.type === \"SpreadElement\") {\n this.visitSpreadElement(element);\n continue;\n }\n if (element !== undefined) {\n this.visitExpression(element);\n }\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitSpreadElement(property);\n continue;\n }\n this.visitProperty(property);\n }\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryExpression(node: BinaryExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitLogicalExpression(node: LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n if (node.computed) {\n this.visitExpression(node.property);\n }\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression | NewExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitSpreadElement(argument);\n continue;\n }\n this.visitExpression(argument);\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitExpression(node.value);\n }\n\n private visitSpreadElement(node: SpreadElement): void {\n this.visitExpression(node.argument);\n }\n\n private visitBindingElement(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.visitBindingPattern(node.left);\n this.withIgnoredReads(\n this.resolveBindings(this.collectPatternBindingNames(node.left)),\n () => {\n this.visitExpression(node.right);\n }\n );\n return;\n case \"RestElement\":\n this.visitBindingPattern(node.argument);\n return;\n default:\n this.visitBindingPattern(node);\n return;\n }\n }\n\n private visitBindingPattern(\n node: ArrayPattern | Identifier | MemberExpression | ObjectPattern\n ): void {\n switch (node.type) {\n case \"Identifier\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.visitBindingElement(element);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitBindingPattern(property.argument);\n continue;\n }\n this.visitAssignmentProperty(property);\n }\n return;\n }\n }\n\n private visitAssignmentProperty(node: AssignmentProperty): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitBindingElement(node.value);\n }\n\n private visitAssignmentTarget(\n node: AssignmentExpression[\"left\"] | AssignmentPattern | RestElement\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n return;\n case \"RestElement\":\n this.visitAssignmentTarget(node.argument);\n return;\n case \"Identifier\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element === null) {\n continue;\n }\n this.visitAssignmentTarget(element);\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitAssignmentTarget(property);\n continue;\n }\n if (property.computed) {\n this.visitExpression(property.key);\n }\n this.visitAssignmentTarget(property.value);\n }\n return;\n }\n }\n\n private withScope(bindings: Binding[], visit: () => void): void {\n const scope: Scope = new Map();\n for (const binding of bindings) {\n scope.set(binding.name, binding);\n }\n\n this.scopes.push(scope);\n visit();\n this.reportUnreadBindings(scope);\n this.scopes.pop();\n }\n\n private reportUnreadBindings(scope: Scope): void {\n for (const binding of scope.values()) {\n if (binding.code === undefined || binding.reads > 0 || binding.name.startsWith(\"_\")) {\n continue;\n }\n\n this.diagnostics.push({\n code: binding.code,\n severity: \"warning\",\n message: binding.message,\n filename: this.filename,\n line: binding.span.start.line,\n column: binding.span.start.column,\n span: binding.span\n });\n }\n }\n\n private markRead(node: Identifier): void {\n const binding = this.resolveBinding(node.name);\n if (binding !== undefined && !this.isIgnoredRead(binding)) {\n binding.reads += 1;\n }\n }\n\n private isIgnoredRead(binding: Binding): boolean {\n for (let index = this.ignoredReads.length - 1; index >= 0; index -= 1) {\n if (this.ignoredReads[index]?.has(binding)) {\n return true;\n }\n }\n return false;\n }\n\n private resolveBinding(name: string): Binding | undefined {\n for (let index = this.scopes.length - 1; index >= 0; index -= 1) {\n const binding = this.scopes[index]?.get(name);\n if (binding !== undefined) {\n return binding;\n }\n }\n return undefined;\n }\n\n private collectModuleBindings(body: Statement[]): Binding[] {\n const bindings: Binding[] = [];\n for (const declaration of hoistedVarDeclarations(body)) {\n bindings.push(...this.collectDeclarationBindings(declaration));\n }\n\n for (const statement of body) {\n if (statement.type === \"ImportDeclaration\") {\n bindings.push(...this.collectImportBindings(statement));\n continue;\n }\n if (statement.type === \"FunctionDeclaration\") {\n bindings.push(this.createBinding(statement.id, \"let\"));\n continue;\n }\n if (statement.type === \"VariableDeclaration\" && statement.kind !== \"var\") {\n bindings.push(...this.collectDeclarationBindings(statement));\n continue;\n }\n if (statement.type === \"ExportNamedDeclaration\") {\n bindings.push(...this.collectExportDeclarationBindings(statement.declaration));\n }\n }\n\n return bindings;\n }\n\n private collectBlockBindings(body: Statement[]): Binding[] {\n const bindings: Binding[] = [];\n\n for (const statement of body) {\n if (statement.type === \"FunctionDeclaration\") {\n bindings.push(this.createBinding(statement.id, \"let\"));\n }\n if (statement.type === \"VariableDeclaration\" && statement.kind !== \"var\") {\n bindings.push(...this.collectDeclarationBindings(statement));\n }\n }\n\n return bindings;\n }\n\n private collectParameterBindings(node: FunctionNode): Binding[] {\n const bindings: Binding[] = [];\n\n if (node.type === \"FunctionExpression\" && node.id !== undefined) {\n bindings.push(this.createBinding(node.id, \"param\"));\n }\n\n for (const parameter of node.params) {\n this.collectBindingNamesFromElement(parameter, \"param\", bindings);\n }\n\n return bindings;\n }\n\n private collectDeclarationBindings(node: VariableDeclaration): Binding[] {\n const bindings: Binding[] = [];\n\n for (const declarator of node.declarations) {\n this.collectBindingNamesFromPattern(declarator.id, node.kind, bindings);\n }\n\n return bindings;\n }\n\n private collectExportDeclarationBindings(node: VariableDeclaration): Binding[] {\n return this.collectDeclarationBindings(node).map((binding) => ({\n ...binding,\n code: undefined\n }));\n }\n\n private collectCatchBindings(node: CatchClause): Binding[] {\n const bindings: Binding[] = [];\n\n if (node.param !== undefined) {\n this.collectBindingNamesFromPattern(node.param, \"param\", bindings);\n }\n\n return bindings;\n }\n\n private collectImportBindings(node: ImportDeclaration): Binding[] {\n return node.specifiers.map((specifier) => this.createImportBinding(specifier));\n }\n\n private createImportBinding(\n specifier: ImportDefaultSpecifier | ImportNamespaceSpecifier | ImportSpecifier\n ): Binding {\n return {\n kind: \"import\",\n message: `Import '${specifier.local.name}' is never referenced.`,\n name: specifier.local.name,\n reads: 0,\n span: specifier.local.span\n };\n }\n\n private collectBindingNamesFromElement(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement,\n kind: BindingKind,\n bindings: Binding[]\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.collectBindingNamesFromPattern(node.left, kind, bindings);\n return;\n case \"RestElement\":\n this.collectBindingNamesFromPattern(node.argument, kind, bindings);\n return;\n default:\n this.collectBindingNamesFromPattern(node, kind, bindings);\n return;\n }\n }\n\n private collectBindingNamesFromPattern(\n node: ArrayPattern | Identifier | MemberExpression | ObjectPattern,\n kind: BindingKind,\n bindings: Binding[]\n ): void {\n switch (node.type) {\n case \"Identifier\":\n bindings.push(this.createBinding(node, kind));\n return;\n case \"MemberExpression\":\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.collectBindingNamesFromElement(element, kind, bindings);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.collectBindingNamesFromPattern(property.argument, kind, bindings);\n continue;\n }\n this.collectBindingNamesFromElement(property.value, kind, bindings);\n }\n return;\n }\n }\n\n private createBinding(node: Identifier, kind: BindingKind): Binding {\n return {\n code: kind === \"const\" || kind === \"let\" ? \"AS007\" : undefined,\n kind,\n message: `Binding '${node.name}' is declared but never read.`,\n name: node.name,\n reads: 0,\n span: node.span\n };\n }\n\n private collectPatternBindingNames(\n node: ArrayPattern | Identifier | MemberExpression | ObjectPattern\n ): string[] {\n const names: string[] = [];\n this.collectBindingNames(node, names);\n return names;\n }\n\n private collectBindingNames(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement,\n names: string[]\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.collectBindingNames(node.left, names);\n return;\n case \"RestElement\":\n this.collectBindingNames(node.argument, names);\n return;\n case \"Identifier\":\n names.push(node.name);\n return;\n case \"MemberExpression\":\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.collectBindingNames(element, names);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n this.collectBindingNames(\n property.type === \"RestElement\" ? property.argument : property.value,\n names\n );\n }\n return;\n }\n }\n\n private resolveBindings(names: string[]): Binding[] {\n return names.flatMap((name) => {\n const binding = this.resolveBinding(name);\n return binding === undefined ? [] : [binding];\n });\n }\n\n private withIgnoredReads(bindings: Binding[], visit: () => void): void {\n if (bindings.length === 0) {\n visit();\n return;\n }\n\n this.ignoredReads.push(new Set(bindings));\n visit();\n this.ignoredReads.pop();\n }\n\n private withDeferredReads(visit: () => void): void {\n const ignoredReads = this.ignoredReads.splice(0);\n visit();\n this.ignoredReads.push(...ignoredReads);\n }\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type ArrayPattern,\n type FunctionNode,\n type AssignmentExpression,\n type AssignmentPattern,\n type CatchClause,\n type CallExpression,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type Identifier,\n type IfStatement,\n type ImportDeclaration,\n type ImportDefaultSpecifier,\n type ImportNamespaceSpecifier,\n type ImportSpecifier,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type ObjectPattern,\n type Property,\n type RestElement,\n type ReturnStatement,\n type SourceSpan,\n type Statement,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\n\nexport type Diagnostic = {\n code: \"AS009\";\n severity: \"error\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\ntype BindingKind = \"import\" | \"namespace\" | \"local\";\ntype Scope = Map<string, BindingKind>;\n\nconst MESSAGE =\n \"Async arrow returns a host call without awaiting it. Add 'await' or document that this function intentionally returns a Promise.\";\n\nexport function AS009(source: string, options: { filename?: string } = {}): Diagnostic[] {\n return new AS009Scanner(options.filename ?? \"<input>\").scan(source);\n}\n\nclass AS009Scanner {\n private readonly diagnostics: Diagnostic[] = [];\n private readonly scopes: Scope[] = [];\n private readonly functionStack: boolean[] = [];\n\n constructor(private readonly filename: string) {}\n\n scan(source: string): Diagnostic[] {\n const module = parseModule(source, this.filename);\n this.pushScope(this.collectModuleBindings(module));\n this.visitModule(module);\n this.popScope();\n return this.diagnostics;\n }\n\n private visitModule(node: Module): void {\n this.visitStatements(node.body);\n }\n\n private visitStatements(body: Statement[]): void {\n for (const statement of body) {\n this.visitStatement(statement);\n }\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunction(node);\n return;\n case \"BlockStatement\":\n this.visitBlockStatement(node.body);\n return;\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n this.visitReturnStatement(node);\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitBlockStatement(body: Statement[]): void {\n this.withScope(this.collectBlockBindings(body), () => {\n this.visitStatements(body);\n });\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n this.visitStatement(node.body);\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n } else {\n this.visitAssignmentTarget(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitStatement(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitStatement(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n const scope = new Map<string, BindingKind>();\n if (node.param !== undefined) {\n this.collectBindingNamesFromPattern(node.param, scope);\n }\n\n this.withScope(scope, () => {\n this.visitBlockStatement(node.body.body);\n });\n }\n\n private visitReturnStatement(node: ReturnStatement): void {\n if (node.argument !== undefined) {\n if (this.isInsideAsyncArrow()) {\n this.reportMissingAwait(node.argument);\n }\n this.visitExpression(node.argument);\n }\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n this.visitBindingElement(node.id);\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"AwaitExpression\":\n this.visitExpression(node.argument);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n return;\n case \"LogicalExpression\":\n this.visitLogicalExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: FunctionNode): void {\n const scope = new Map<string, BindingKind>();\n\n for (const parameter of node.params) {\n this.collectBindingNamesFromElement(parameter, scope);\n }\n\n if (node.body.type === \"BlockStatement\") {\n this.mergeScope(scope, this.collectBlockBindings(node.body.body));\n }\n\n this.functionStack.push(node.async);\n this.pushScope(scope);\n\n if (node.async && node.body.type !== \"BlockStatement\") {\n this.reportMissingAwait(node.body);\n }\n\n if (node.body.type === \"BlockStatement\") {\n this.visitStatements(node.body.body);\n } else {\n this.visitExpression(node.body);\n }\n\n this.popScope();\n this.functionStack.pop();\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element !== null) {\n if (element.type === \"SpreadElement\") {\n this.visitExpression(element.argument);\n } else {\n this.visitExpression(element);\n }\n }\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitExpression(property.argument);\n continue;\n }\n\n this.visitProperty(property);\n }\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n\n this.visitExpression(node.value);\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitLogicalExpression(node: LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n this.visitExpression(node.property);\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression): void {\n this.visitExpression(node.callee);\n for (const arg of node.arguments) {\n if (arg.type === \"SpreadElement\") {\n this.visitExpression(arg.argument);\n } else {\n this.visitExpression(arg);\n }\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitAssignmentTarget(\n node: AssignmentExpression[\"left\"] | AssignmentPattern | RestElement\n ): void {\n switch (node.type) {\n case \"Identifier\":\n case \"MetaProperty\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentPattern\":\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n return;\n case \"RestElement\":\n this.visitAssignmentTarget(node.argument);\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.visitAssignmentTarget(element);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitAssignmentTarget(property.argument);\n continue;\n }\n\n if (property.computed) {\n this.visitExpression(property.key);\n }\n this.visitAssignmentTarget(property.value);\n }\n return;\n }\n }\n\n private visitBindingElement(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.visitBindingElement(node.left);\n this.visitExpression(node.right);\n return;\n case \"RestElement\":\n this.visitBindingElement(node.argument);\n return;\n default:\n this.visitAssignmentTarget(node);\n return;\n }\n }\n\n private reportMissingAwait(node: Expression): void {\n if (node.type !== \"CallExpression\") {\n return;\n }\n\n if (!this.isHostCall(node)) {\n return;\n }\n\n this.diagnostics.push({\n code: \"AS009\",\n severity: \"error\",\n message: MESSAGE,\n filename: this.filename,\n line: node.span.start.line,\n column: node.span.start.column,\n span: node.span\n });\n }\n\n private isHostCall(node: CallExpression): boolean {\n const root = this.findRootIdentifier(node.callee);\n if (root === undefined) {\n return false;\n }\n\n const binding = this.resolveBinding(root.name);\n return binding === \"import\" || binding === \"namespace\";\n }\n\n private findRootIdentifier(node: Expression): Identifier | undefined {\n switch (node.type) {\n case \"Identifier\":\n return node;\n case \"MemberExpression\":\n return this.findRootIdentifier(node.object);\n default:\n return undefined;\n }\n }\n\n private isInsideAsyncArrow(): boolean {\n return this.functionStack[this.functionStack.length - 1] === true;\n }\n\n private resolveBinding(name: string): BindingKind | undefined {\n for (let index = this.scopes.length - 1; index >= 0; index -= 1) {\n const binding = this.scopes[index].get(name);\n if (binding !== undefined) {\n return binding;\n }\n }\n\n return undefined;\n }\n\n private collectModuleBindings(node: Module): Scope {\n const scope = new Map<string, BindingKind>();\n\n for (const statement of node.body) {\n if (statement.type === \"ImportDeclaration\") {\n this.mergeScope(scope, this.collectImportBindings(statement));\n }\n }\n\n return scope;\n }\n\n private collectBlockBindings(body: Statement[]): Scope {\n const scope = new Map<string, BindingKind>();\n\n for (const statement of body) {\n if (statement.type === \"VariableDeclaration\") {\n for (const declarator of statement.declarations) {\n this.collectBindingNamesFromPattern(declarator.id, scope);\n }\n }\n }\n\n return scope;\n }\n\n private collectImportBindings(node: ImportDeclaration): Scope {\n const scope = new Map<string, BindingKind>();\n\n for (const specifier of node.specifiers) {\n scope.set(specifier.local.name, this.getImportBindingKind(specifier));\n }\n\n return scope;\n }\n\n private getImportBindingKind(\n specifier: ImportDefaultSpecifier | ImportNamespaceSpecifier | ImportSpecifier\n ): BindingKind {\n return specifier.type === \"ImportNamespaceSpecifier\" ? \"namespace\" : \"import\";\n }\n\n private collectBindingNamesFromElement(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement,\n scope: Scope\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.collectBindingNamesFromPattern(node.left, scope);\n return;\n case \"RestElement\":\n this.collectBindingNamesFromPattern(node.argument, scope);\n return;\n default:\n this.collectBindingNamesFromPattern(node, scope);\n return;\n }\n }\n\n private collectBindingNamesFromPattern(\n node: ArrayPattern | Identifier | MemberExpression | ObjectPattern,\n scope: Scope\n ): void {\n switch (node.type) {\n case \"Identifier\":\n scope.set(node.name, \"local\");\n return;\n case \"MemberExpression\":\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.collectBindingNamesFromElement(element, scope);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.collectBindingNamesFromPattern(property.argument, scope);\n continue;\n }\n\n this.collectBindingNamesFromElement(property.value, scope);\n }\n return;\n }\n }\n\n private withScope(scope: Scope, callback: () => void): void {\n this.pushScope(scope);\n try {\n callback();\n } finally {\n this.popScope();\n }\n }\n\n private pushScope(scope: Scope): void {\n this.scopes.push(scope);\n }\n\n private popScope(): void {\n this.scopes.pop();\n }\n\n private mergeScope(target: Scope, source: Scope): void {\n for (const [name, binding] of source) {\n target.set(name, binding);\n }\n }\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type ArrayPattern,\n type FunctionNode,\n type AssignmentExpression,\n type AssignmentPattern,\n type AssignmentProperty,\n type AwaitExpression,\n type BinaryExpression,\n type BlockStatement,\n type CallExpression,\n type CatchClause,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type Identifier,\n type IfStatement,\n type ImportDeclaration,\n type ImportDefaultSpecifier,\n type ImportNamespaceSpecifier,\n type ImportSpecifier,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type ObjectPattern,\n type Property,\n type RestElement,\n type SourceSpan,\n type SpreadElement,\n type Statement,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\n\nexport type Diagnostic = {\n code: \"AS010\";\n severity: \"warning\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\ntype Candidate = {\n kind: \"candidate\";\n name: string;\n reads: number;\n reassignments: number;\n span: SourceSpan;\n};\n\ntype ScopeEntry = Candidate | \"import\" | \"local\" | \"namespace\";\ntype Scope = Map<string, ScopeEntry>;\n\nexport function AS010(source: string, options: { filename?: string } = {}): Diagnostic[] {\n return new AS010Scanner(options.filename ?? \"<input>\").scan(source);\n}\n\nclass AS010Scanner {\n private readonly candidates: Candidate[] = [];\n private readonly ignoredReads: Array<Set<Candidate>> = [];\n private readonly scopes: Scope[] = [];\n\n constructor(private readonly filename: string) {}\n\n scan(source: string): Diagnostic[] {\n const module = parseModule(source, this.filename);\n const moduleScope = this.collectModuleBindings(module.body);\n\n this.withScope(moduleScope, () => {\n this.collectCandidates(module.body, moduleScope);\n });\n\n this.withScope(moduleScope, () => {\n this.visitModule(module);\n });\n\n return this.candidates\n .filter((candidate) => candidate.reads === 0 && candidate.reassignments === 0)\n .map((candidate) => ({\n code: \"AS010\" as const,\n severity: \"warning\" as const,\n message: `Top-level let '${candidate.name}' stores a host call result but is never read again.`,\n filename: this.filename,\n line: candidate.span.start.line,\n column: candidate.span.start.column,\n span: candidate.span\n }));\n }\n\n private visitModule(node: Module): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunction(node);\n return;\n case \"BlockStatement\":\n this.visitBlock(node);\n return;\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitBlock(node: BlockStatement): void {\n this.withScope(this.collectBlockBindings(node.body), () => {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n });\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n const scope =\n node.init?.type === \"VariableDeclaration\"\n ? this.collectDeclarationBindings(node.init)\n : new Map();\n\n this.withScope(scope, () => {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n this.visitStatement(node.body);\n });\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n const scope =\n node.left.type === \"VariableDeclaration\"\n ? this.collectDeclarationBindings(node.left)\n : new Map();\n\n this.withScope(scope, () => {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n } else {\n this.visitAssignmentTarget(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n });\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitBlock(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitBlock(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n this.withScope(this.collectCatchBindings(node), () => {\n if (node.param !== undefined) {\n this.visitBindingPattern(node.param);\n }\n this.visitBlock(node.body);\n });\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n this.visitBindingPattern(node.id);\n if (node.init === undefined) {\n return;\n }\n const init = node.init;\n\n this.withIgnoredReads(this.resolveCandidates(this.collectPatternBindingNames(node.id)), () => {\n this.visitExpression(init);\n });\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"Identifier\":\n this.markRead(node);\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"AwaitExpression\":\n this.visitAwaitExpression(node);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n this.visitBinaryExpression(node);\n return;\n case \"LogicalExpression\":\n this.visitLogicalExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"BooleanLiteral\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: FunctionNode): void {\n const scope = this.collectParameterBindings(node);\n\n if (node.body.type === \"BlockStatement\") {\n this.mergeScope(scope, this.collectBlockBindings(node.body.body));\n }\n\n this.withScope(scope, () => {\n for (const parameter of node.params) {\n this.visitBindingElement(parameter);\n }\n\n if (node.body.type === \"BlockStatement\") {\n for (const statement of node.body.body) {\n this.visitStatement(statement);\n }\n return;\n }\n\n this.visitExpression(node.body);\n });\n }\n\n private visitAwaitExpression(node: AwaitExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element?.type === \"SpreadElement\") {\n this.visitSpreadElement(element);\n continue;\n }\n if (element !== undefined) {\n this.visitExpression(element);\n }\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitSpreadElement(property);\n continue;\n }\n this.visitProperty(property);\n }\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryExpression(node: BinaryExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitLogicalExpression(node: LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n if (node.computed) {\n this.visitExpression(node.property);\n }\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitSpreadElement(argument);\n continue;\n }\n this.visitExpression(argument);\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitExpression(node.value);\n }\n\n private visitSpreadElement(node: SpreadElement): void {\n this.visitExpression(node.argument);\n }\n\n private visitBindingElement(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.visitBindingPattern(node.left);\n this.withIgnoredReads(\n this.resolveCandidates(this.collectPatternBindingNames(node.left)),\n () => {\n this.visitExpression(node.right);\n }\n );\n return;\n case \"RestElement\":\n this.visitBindingPattern(node.argument);\n return;\n default:\n this.visitBindingPattern(node);\n return;\n }\n }\n\n private visitBindingPattern(\n node: ArrayPattern | Identifier | MemberExpression | ObjectPattern\n ): void {\n switch (node.type) {\n case \"Identifier\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.visitBindingElement(element);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitBindingPattern(property.argument);\n continue;\n }\n this.visitAssignmentProperty(property);\n }\n return;\n }\n }\n\n private visitAssignmentProperty(node: AssignmentProperty): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitBindingElement(node.value);\n }\n\n private visitAssignmentTarget(\n node: AssignmentExpression[\"left\"] | AssignmentPattern | RestElement\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n return;\n case \"RestElement\":\n this.visitAssignmentTarget(node.argument);\n return;\n case \"Identifier\":\n this.markReassignment(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.visitAssignmentTarget(element);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitAssignmentTarget(property);\n continue;\n }\n if (property.computed) {\n this.visitExpression(property.key);\n }\n this.visitAssignmentTarget(property.value);\n }\n return;\n }\n }\n\n private markRead(node: Identifier): void {\n const candidate = this.resolveCandidate(node.name);\n if (candidate !== undefined && !this.isIgnoredRead(candidate)) {\n candidate.reads += 1;\n }\n }\n\n private markReassignment(node: Identifier): void {\n const candidate = this.resolveCandidate(node.name);\n if (candidate !== undefined) {\n candidate.reassignments += 1;\n }\n }\n\n private isIgnoredRead(candidate: Candidate): boolean {\n for (let index = this.ignoredReads.length - 1; index >= 0; index -= 1) {\n if (this.ignoredReads[index]?.has(candidate)) {\n return true;\n }\n }\n return false;\n }\n\n private resolveCandidate(name: string): Candidate | undefined {\n for (let index = this.scopes.length - 1; index >= 0; index -= 1) {\n const entry = this.scopes[index]?.get(name);\n if (entry === undefined) {\n continue;\n }\n return typeof entry === \"object\" && entry.kind === \"candidate\" ? entry : undefined;\n }\n return undefined;\n }\n\n private collectModuleBindings(body: Statement[]): Scope {\n const scope: Scope = new Map();\n\n for (const statement of body) {\n if (statement.type === \"ImportDeclaration\") {\n this.mergeScope(scope, this.collectImportBindings(statement));\n continue;\n }\n\n if (statement.type === \"VariableDeclaration\") {\n this.mergeScope(scope, this.collectDeclarationBindings(statement));\n continue;\n }\n\n if (statement.type === \"ExportNamedDeclaration\") {\n this.mergeScope(scope, this.collectDeclarationBindings(statement.declaration));\n }\n }\n\n return scope;\n }\n\n private collectCandidates(body: Statement[], scope: Scope): void {\n for (const statement of body) {\n if (statement.type !== \"VariableDeclaration\" || statement.kind !== \"let\") {\n continue;\n }\n\n for (const declarator of statement.declarations) {\n if (declarator.id.type !== \"Identifier\") {\n continue;\n }\n\n const hostCall = this.findHostCall(declarator.init);\n if (hostCall === undefined || !this.isHostCall(hostCall)) {\n continue;\n }\n\n const candidate: Candidate = {\n kind: \"candidate\",\n name: declarator.id.name,\n reads: 0,\n reassignments: 0,\n span: declarator.id.span\n };\n\n this.candidates.push(candidate);\n scope.set(candidate.name, candidate);\n }\n }\n }\n\n private collectBlockBindings(body: Statement[]): Scope {\n const scope: Scope = new Map();\n\n for (const statement of body) {\n if (statement.type === \"VariableDeclaration\") {\n this.mergeScope(scope, this.collectDeclarationBindings(statement));\n }\n }\n\n return scope;\n }\n\n private collectParameterBindings(node: FunctionNode): Scope {\n const scope: Scope = new Map();\n\n for (const parameter of node.params) {\n this.collectBindingNamesFromElement(parameter, scope);\n }\n\n return scope;\n }\n\n private collectDeclarationBindings(node: VariableDeclaration): Scope {\n const scope: Scope = new Map();\n\n for (const declarator of node.declarations) {\n this.collectBindingNamesFromPattern(declarator.id, scope);\n }\n\n return scope;\n }\n\n private collectCatchBindings(node: CatchClause): Scope {\n const scope: Scope = new Map();\n\n if (node.param !== undefined) {\n this.collectBindingNamesFromPattern(node.param, scope);\n }\n\n return scope;\n }\n\n private collectImportBindings(node: ImportDeclaration): Scope {\n const scope: Scope = new Map();\n\n for (const specifier of node.specifiers) {\n scope.set(specifier.local.name, this.getImportBindingKind(specifier));\n }\n\n return scope;\n }\n\n private getImportBindingKind(\n specifier: ImportDefaultSpecifier | ImportNamespaceSpecifier | ImportSpecifier\n ): ScopeEntry {\n return specifier.type === \"ImportNamespaceSpecifier\" ? \"namespace\" : \"import\";\n }\n\n private collectBindingNamesFromElement(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement,\n scope: Scope\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.collectBindingNamesFromPattern(node.left, scope);\n return;\n case \"RestElement\":\n this.collectBindingNamesFromPattern(node.argument, scope);\n return;\n default:\n this.collectBindingNamesFromPattern(node, scope);\n return;\n }\n }\n\n private collectBindingNamesFromPattern(\n node: ArrayPattern | Identifier | MemberExpression | ObjectPattern,\n scope: Scope\n ): void {\n switch (node.type) {\n case \"Identifier\":\n scope.set(node.name, \"local\");\n return;\n case \"MemberExpression\":\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.collectBindingNamesFromElement(element, scope);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.collectBindingNamesFromPattern(property.argument, scope);\n continue;\n }\n this.collectBindingNamesFromElement(property.value, scope);\n }\n return;\n }\n }\n\n private collectPatternBindingNames(\n node: ArrayPattern | Identifier | MemberExpression | ObjectPattern\n ): string[] {\n const names: string[] = [];\n this.collectBindingNames(node, names);\n return names;\n }\n\n private collectBindingNames(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement,\n names: string[]\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.collectBindingNames(node.left, names);\n return;\n case \"RestElement\":\n this.collectBindingNames(node.argument, names);\n return;\n case \"Identifier\":\n names.push(node.name);\n return;\n case \"MemberExpression\":\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.collectBindingNames(element, names);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n this.collectBindingNames(\n property.type === \"RestElement\" ? property.argument : property.value,\n names\n );\n }\n return;\n }\n }\n\n private resolveCandidates(names: string[]): Candidate[] {\n return names.flatMap((name) => {\n const candidate = this.resolveCandidate(name);\n return candidate === undefined ? [] : [candidate];\n });\n }\n\n private withIgnoredReads(candidates: Candidate[], visit: () => void): void {\n if (candidates.length === 0) {\n visit();\n return;\n }\n\n this.ignoredReads.push(new Set(candidates));\n try {\n visit();\n } finally {\n this.ignoredReads.pop();\n }\n }\n\n private withScope(scope: Scope, visit: () => void): void {\n this.scopes.push(scope);\n try {\n visit();\n } finally {\n this.scopes.pop();\n }\n }\n\n private mergeScope(target: Scope, source: Scope): void {\n for (const [name, binding] of source) {\n target.set(name, binding);\n }\n }\n\n private findHostCall(node: Expression | undefined): CallExpression | undefined {\n if (node === undefined) {\n return undefined;\n }\n\n if (node.type === \"CallExpression\") {\n return node;\n }\n\n if (node.type === \"AwaitExpression\" && node.argument.type === \"CallExpression\") {\n return node.argument;\n }\n\n return undefined;\n }\n\n private isHostCall(node: CallExpression): boolean {\n const root = this.findRootIdentifier(node.callee);\n if (root === undefined) {\n return false;\n }\n\n for (let index = this.scopes.length - 1; index >= 0; index -= 1) {\n const binding = this.scopes[index]?.get(root.name);\n if (binding === undefined) {\n continue;\n }\n return binding === \"import\" || binding === \"namespace\";\n }\n\n return false;\n }\n\n private findRootIdentifier(node: Expression): Identifier | undefined {\n switch (node.type) {\n case \"Identifier\":\n return node;\n case \"MemberExpression\":\n return this.findRootIdentifier(node.object);\n default:\n return undefined;\n }\n }\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type FunctionNode,\n type AssignmentExpression,\n type CatchClause,\n type CallExpression,\n type ConditionalExpression,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type IfStatement,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type Property,\n type ReturnStatement,\n type SourceSpan,\n type Statement,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator\n} from \"../../parse/parser.js\";\n\nexport type Diagnostic = {\n code: \"AS011\";\n severity: \"error\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\nconst FORBIDDEN_PROPERTY_NAMES = new Set([\"__proto__\", \"prototype\", \"constructor\"]);\nconst MESSAGE = \"Property access to '__proto__', 'prototype', and 'constructor' is not allowed.\";\n\nexport function AS011(source: string, options: { filename?: string } = {}): Diagnostic[] {\n return new AS011Scanner(options.filename ?? \"<input>\").scan(source);\n}\n\nclass AS011Scanner {\n private readonly diagnostics: Diagnostic[] = [];\n\n constructor(private readonly filename: string) {}\n\n scan(source: string): Diagnostic[] {\n this.visitModule(parseModule(source, this.filename));\n return this.diagnostics;\n }\n\n private visitModule(node: Module): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunction(node);\n return;\n case \"BlockStatement\":\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n return;\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n this.visitReturnStatement(node);\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n this.visitStatement(node.body);\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n } else {\n this.visitAssignmentTarget(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitStatement(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitStatement(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n if (node.param !== undefined) {\n this.visitAssignmentTarget(node.param);\n }\n this.visitStatement(node.body);\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n this.visitBindingTarget(node.id);\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n }\n\n private visitReturnStatement(node: ReturnStatement): void {\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"AwaitExpression\":\n this.visitExpression(node.argument);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n this.visitBinaryLikeExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: FunctionNode): void {\n for (const parameter of node.params) {\n this.visitBindingTarget(parameter);\n }\n\n if (node.body.type === \"BlockStatement\") {\n for (const statement of node.body.body) {\n this.visitStatement(statement);\n }\n return;\n }\n\n this.visitExpression(node.body);\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element === null) {\n continue;\n }\n\n if (element.type === \"SpreadElement\") {\n this.visitExpression(element.argument);\n continue;\n }\n\n this.visitExpression(element);\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitExpression(property.argument);\n continue;\n }\n\n this.visitProperty(property);\n }\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitExpression(node.value);\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryLikeExpression(\n node: LogicalExpression | import(\"../../parse/parser.js\").BinaryExpression\n ): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n if (this.isForbiddenMemberProperty(node)) {\n this.report(node.property.span);\n }\n this.visitExpression(node.property);\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitExpression(argument.argument);\n continue;\n }\n\n this.visitExpression(argument);\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitAssignmentTarget(\n node:\n | AssignmentExpression[\"left\"]\n | import(\"../../parse/parser.js\").AssignmentPattern\n | import(\"../../parse/parser.js\").RestElement\n ): void {\n switch (node.type) {\n case \"Identifier\":\n case \"MetaProperty\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentPattern\":\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n return;\n case \"RestElement\":\n this.visitAssignmentTarget(node.argument);\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.visitAssignmentTarget(element);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitAssignmentTarget(property.argument);\n continue;\n }\n\n if (property.computed) {\n this.visitExpression(property.key);\n }\n this.visitAssignmentTarget(property.value);\n }\n return;\n }\n }\n\n private visitBindingTarget(\n node:\n | import(\"../../parse/parser.js\").ArrayPattern\n | import(\"../../parse/parser.js\").AssignmentPattern\n | import(\"../../parse/parser.js\").Identifier\n | MemberExpression\n | import(\"../../parse/parser.js\").ObjectPattern\n | import(\"../../parse/parser.js\").RestElement\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.visitBindingTarget(node.left);\n this.visitExpression(node.right);\n return;\n case \"RestElement\":\n this.visitBindingTarget(node.argument);\n return;\n default:\n this.visitAssignmentTarget(node);\n return;\n }\n }\n\n private isForbiddenMemberProperty(node: MemberExpression): boolean {\n if (!node.computed) {\n return (\n node.property.type === \"Identifier\" && FORBIDDEN_PROPERTY_NAMES.has(node.property.name)\n );\n }\n\n return (\n node.property.type === \"StringLiteral\" && FORBIDDEN_PROPERTY_NAMES.has(node.property.value)\n );\n }\n\n private report(span: SourceSpan): void {\n this.diagnostics.push({\n code: \"AS011\",\n severity: \"error\",\n message: MESSAGE,\n filename: this.filename,\n line: span.start.line,\n column: span.start.column,\n span\n });\n }\n}\n", "import {\n parseModule,\n type ArrayPattern,\n type AssignmentPattern,\n type Identifier,\n type MemberExpression,\n type ObjectPattern,\n type RestElement,\n type SourceSpan,\n type VariableDeclaration\n} from \"../../parse/parser.js\";\nimport { normalizeModules, type Modules } from \"./module-registry.js\";\n\nexport type Diagnostic = {\n code: \"AS013\";\n severity: \"error\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\nexport function AS013(\n source: string,\n options: { allowedExportNames?: readonly string[]; filename?: string; modules?: Modules } = {}\n): Diagnostic[] {\n const filename = options.filename ?? \"<input>\";\n const reservedNames = new Set(normalizeModules(options.modules).keys());\n const allowedExportNames = new Set(options.allowedExportNames ?? []);\n\n if (reservedNames.size === 0) {\n return [];\n }\n\n const diagnostics: Diagnostic[] = [];\n const module = parseModule(source, filename);\n\n for (const statement of module.body) {\n if (statement.type === \"VariableDeclaration\") {\n collectShadowedBindings(statement, reservedNames, diagnostics, filename);\n continue;\n }\n\n if (statement.type === \"ExportNamedDeclaration\") {\n collectShadowedBindings(\n statement.declaration,\n reservedNames,\n diagnostics,\n filename,\n allowedExportNames\n );\n }\n }\n\n return diagnostics;\n}\n\nfunction collectShadowedBindings(\n declaration: VariableDeclaration,\n reservedNames: ReadonlySet<string>,\n diagnostics: Diagnostic[],\n filename: string,\n allowedNames: ReadonlySet<string> = new Set()\n): void {\n for (const declarator of declaration.declarations) {\n collectPatternDiagnostics(declarator.id, reservedNames, diagnostics, filename, allowedNames);\n }\n}\n\nfunction collectPatternDiagnostics(\n pattern:\n | ArrayPattern\n | AssignmentPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement,\n reservedNames: ReadonlySet<string>,\n diagnostics: Diagnostic[],\n filename: string,\n allowedNames: ReadonlySet<string>\n): void {\n switch (pattern.type) {\n case \"Identifier\":\n if (reservedNames.has(pattern.name) && !allowedNames.has(pattern.name)) {\n diagnostics.push({\n code: \"AS013\",\n severity: \"error\",\n message: `Top-level binding '${pattern.name}' shadows registered module '${pattern.name}'.`,\n filename,\n line: pattern.span.start.line,\n column: pattern.span.start.column,\n span: pattern.span\n });\n }\n return;\n case \"AssignmentPattern\":\n collectPatternDiagnostics(pattern.left, reservedNames, diagnostics, filename, allowedNames);\n return;\n case \"RestElement\":\n collectPatternDiagnostics(\n pattern.argument,\n reservedNames,\n diagnostics,\n filename,\n allowedNames\n );\n return;\n case \"ArrayPattern\":\n for (const element of pattern.elements) {\n if (element !== null) {\n collectPatternDiagnostics(element, reservedNames, diagnostics, filename, allowedNames);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of pattern.properties) {\n collectPatternDiagnostics(\n property.type === \"RestElement\" ? property : property.value,\n reservedNames,\n diagnostics,\n filename,\n allowedNames\n );\n }\n return;\n case \"MemberExpression\":\n return;\n }\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type ArrayPattern,\n type AssignmentPattern,\n type FunctionNode,\n type AssignmentExpression,\n type CatchClause,\n type CallExpression,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type Identifier,\n type IfStatement,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type ObjectPattern,\n type Property,\n type RestElement,\n type ReturnStatement,\n type SourceSpan,\n type Statement,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\n\nexport type Diagnostic = {\n code: \"AS015\";\n severity: \"warning\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\nexport function AS015(source: string, options: { filename?: string } = {}): Diagnostic[] {\n return new AS015Scanner(options.filename ?? \"<input>\").scan(source);\n}\n\nclass AS015Scanner {\n private readonly diagnostics: Diagnostic[] = [];\n\n constructor(private readonly filename: string) {}\n\n scan(source: string): Diagnostic[] {\n this.visitModule(parseModule(source, this.filename));\n return this.diagnostics;\n }\n\n private visitModule(node: Module): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunction(node);\n return;\n case \"BlockStatement\":\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n return;\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n this.visitReturnStatement(node);\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n\n this.visitStatement(node.body);\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitStatement(node.block);\n\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n\n if (node.finalizer !== undefined) {\n this.visitStatement(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n if (node.param !== undefined) {\n this.visitPattern(node.param);\n }\n this.visitStatement(node.body);\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n this.visitPattern(node.id);\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n }\n\n private visitReturnStatement(node: ReturnStatement): void {\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"AwaitExpression\":\n this.visitExpression(node.argument);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n this.visitBinaryLikeExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: FunctionNode): void {\n for (const parameter of node.params) {\n this.visitPattern(parameter);\n }\n\n if (node.body.type === \"BlockStatement\") {\n for (const statement of node.body.body) {\n this.visitStatement(statement);\n }\n return;\n }\n\n this.visitExpression(node.body);\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element.type === \"SpreadElement\") {\n this.visitExpression(element.argument);\n continue;\n }\n\n this.visitExpression(element);\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitExpression(property.argument);\n continue;\n }\n\n this.visitProperty(property);\n }\n }\n\n private visitProperty(node: Property): void {\n this.visitExpression(node.key);\n this.visitExpression(node.value);\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryLikeExpression(\n node:\n | ConditionalExpression\n | LogicalExpression\n | import(\"../../parse/parser.js\").BinaryExpression\n ): void {\n if (\"left\" in node) {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n return;\n }\n\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n this.visitExpression(node.property);\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression): void {\n if (isSingleElementPromiseRace(node)) {\n this.diagnostics.push({\n code: \"AS015\",\n severity: \"warning\",\n message:\n \"Promise.race() with a single-element iterable literal is unnecessary. Use 'await' instead.\",\n filename: this.filename,\n line: node.span.start.line,\n column: node.span.start.column,\n span: node.span\n });\n }\n\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitExpression(argument.argument);\n continue;\n }\n\n this.visitExpression(argument);\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitPattern(\n node:\n | ArrayPattern\n | AssignmentPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.visitPattern(node.left);\n this.visitExpression(node.right);\n return;\n case \"RestElement\":\n this.visitPattern(node.argument);\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.visitPattern(element);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n this.visitPattern(property.type === \"RestElement\" ? property : property.value);\n }\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"Identifier\":\n return;\n }\n }\n}\n\nfunction isSingleElementPromiseRace(node: CallExpression): boolean {\n if (!isPromiseRace(node.callee) || node.arguments.length !== 1) {\n return false;\n }\n\n const iterable = node.arguments[0];\n if (iterable.type !== \"ArrayExpression\" || iterable.elements.length !== 1) {\n return false;\n }\n\n return iterable.elements[0].type !== \"SpreadElement\";\n}\n\nfunction isPromiseRace(node: Expression): boolean {\n return (\n node.type === \"MemberExpression\" &&\n node.object.type === \"Identifier\" &&\n node.object.name === \"Promise\" &&\n ((node.computed && node.property.type === \"StringLiteral\" && node.property.value === \"race\") ||\n (!node.computed && node.property.type === \"Identifier\" && node.property.name === \"race\"))\n );\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type ArrayPattern,\n type ArrowFunctionExpression,\n type FunctionExpression,\n type FunctionDeclaration,\n type AssignmentExpression,\n type AssignmentPattern,\n type AssignmentProperty,\n type BinaryExpression,\n type BlockStatement,\n type CallExpression,\n type CatchClause,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type IfStatement,\n type Identifier,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type ObjectPattern,\n type PatternTarget,\n type Property,\n type RestElement,\n type ReturnStatement,\n type SourceSpan,\n type Statement,\n type TaggedTemplateExpression,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\n\nexport type Diagnostic = {\n code: \"AS-ASYNC-NOT-NEEDED\";\n severity: \"info\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n fix: {\n range: readonly [number, number];\n replacement: string;\n };\n};\n\nexport const AS_ASYNC_NOT_NEEDED_MESSAGE =\n \"Async functions without await should remove the async keyword.\";\n\nexport function AS_ASYNC_NOT_NEEDED(\n source: string,\n options: { filename?: string } = {}\n): Diagnostic[] {\n return new ASAsyncNotNeededScanner(source, options.filename ?? \"<input>\").scan();\n}\n\nexport function fixASAsyncNotNeeded(source: string, options: { filename?: string } = {}): string {\n return AS_ASYNC_NOT_NEEDED(source, options)\n .sort((left, right) => right.span.start.offset - left.span.start.offset)\n .reduce((result, diagnostic) => {\n const start = diagnostic.span.start.offset;\n const end =\n source[start + \"async\".length] === \" \"\n ? diagnostic.span.end.offset + 1\n : diagnostic.span.end.offset;\n return `${result.slice(0, start)}${result.slice(end)}`;\n }, source);\n}\n\nclass ASAsyncNotNeededScanner {\n private readonly diagnostics: Diagnostic[] = [];\n\n constructor(\n private readonly source: string,\n private readonly filename: string\n ) {}\n\n scan(): Diagnostic[] {\n this.visitModule(parseModule(this.source, this.filename));\n return this.diagnostics;\n }\n\n private visitModule(node: Module): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitFunctionExpression(node);\n return;\n case \"BlockStatement\":\n this.visitBlockStatement(node);\n return;\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n this.visitReturnStatement(node);\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n if (node.declaration.type === \"ArrowFunctionExpression\") {\n this.visitArrowFunction(node.declaration, true);\n return;\n }\n if (node.declaration.type === \"FunctionExpression\") {\n this.visitFunctionExpression(node.declaration, true);\n return;\n }\n this.visitExpression(node.declaration);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitBlockStatement(node: BlockStatement): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n\n this.visitStatement(node.body);\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n } else {\n this.visitAssignmentTarget(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitBlockStatement(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitBlockStatement(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n if (node.param !== undefined) {\n this.visitBindingPattern(node.param);\n }\n this.visitBlockStatement(node.body);\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n this.visitBindingPattern(node.id);\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n }\n\n private visitReturnStatement(node: ReturnStatement): void {\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node, false);\n return;\n case \"FunctionExpression\":\n this.visitFunctionExpression(node);\n return;\n case \"AwaitExpression\":\n this.visitExpression(node.argument);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n this.visitBinaryLikeExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"TaggedTemplateExpression\":\n this.visitTaggedTemplateExpression(node);\n return;\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"MetaProperty\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"RegexLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: ArrowFunctionExpression, isDefaultExportedArrow: boolean): void {\n if (node.async && !isDefaultExportedArrow && !bodyContainsAwait(node.body)) {\n this.report(createAsyncKeywordSpan(node.span));\n }\n\n for (const param of node.params) {\n this.visitBindingElement(param);\n }\n\n if (node.body.type === \"BlockStatement\") {\n this.visitBlockStatement(node.body);\n return;\n }\n\n this.visitExpression(node.body);\n }\n\n private visitFunctionExpression(\n node: FunctionExpression | FunctionDeclaration,\n isDefaultExport = false\n ): void {\n if (node.async && !isDefaultExport && !bodyContainsAwait(node.body)) {\n this.report(createAsyncKeywordSpan(node.span));\n }\n\n for (const param of node.params) {\n this.visitBindingElement(param);\n }\n this.visitBlockStatement(node.body);\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element.type === \"SpreadElement\") {\n this.visitExpression(element.argument);\n continue;\n }\n\n this.visitExpression(element);\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitExpression(property.argument);\n continue;\n }\n\n this.visitProperty(property);\n }\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitExpression(node.value);\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryLikeExpression(node: BinaryExpression | LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n if (node.computed) {\n this.visitExpression(node.property);\n }\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitExpression(argument.argument);\n continue;\n }\n\n this.visitExpression(argument);\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitTaggedTemplateExpression(node: TaggedTemplateExpression): void {\n this.visitExpression(node.tag);\n this.visitTemplateLiteral(node.quasi);\n }\n\n private visitAssignmentTarget(node: AssignmentExpression[\"left\"]): void {\n switch (node.type) {\n case \"Identifier\":\n case \"MetaProperty\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n this.visitBindingPattern(node);\n return;\n }\n }\n\n private visitBindingElement(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n ): void {\n if (node.type === \"RestElement\") {\n this.visitAssignmentTarget(node.argument);\n return;\n }\n\n this.visitBindingPattern(node);\n }\n\n private visitBindingPattern(\n node: AssignmentPattern | ArrayPattern | Identifier | MemberExpression | ObjectPattern\n ): void {\n switch (node.type) {\n case \"Identifier\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentPattern\":\n this.visitBindingPattern(node.left);\n this.visitExpression(node.right);\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element === null) {\n continue;\n }\n this.visitBindingElement(element);\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitAssignmentTarget(property.argument);\n continue;\n }\n this.visitAssignmentProperty(property);\n }\n return;\n }\n }\n\n private visitAssignmentProperty(node: AssignmentProperty): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitBindingPattern(node.value);\n }\n\n private report(span: SourceSpan): void {\n const end =\n this.source[span.start.offset + \"async\".length] === \" \"\n ? span.end.offset + 1\n : span.end.offset;\n this.diagnostics.push({\n code: \"AS-ASYNC-NOT-NEEDED\",\n severity: \"info\",\n message: AS_ASYNC_NOT_NEEDED_MESSAGE,\n filename: this.filename,\n line: span.start.line,\n column: span.start.column,\n span,\n fix: {\n range: [span.start.offset, end],\n replacement: \"\"\n }\n });\n }\n}\n\nfunction createAsyncKeywordSpan(span: SourceSpan): SourceSpan {\n return {\n start: { ...span.start },\n end: {\n line: span.start.line,\n column: span.start.column + \"async\".length,\n offset: span.start.offset + \"async\".length\n }\n };\n}\n\nfunction bodyContainsAwait(node: BlockStatement | Expression): boolean {\n return node.type === \"BlockStatement\"\n ? statementListContainsAwait(node.body)\n : expressionContainsAwait(node);\n}\n\nfunction statementListContainsAwait(statements: readonly Statement[]): boolean {\n return statements.some(statementContainsAwait);\n}\n\nfunction statementContainsAwait(node: Statement): boolean {\n switch (node.type) {\n case \"BlockStatement\":\n return statementListContainsAwait(node.body);\n case \"ExpressionStatement\":\n return expressionContainsAwait(node.expression);\n case \"IfStatement\":\n return (\n expressionContainsAwait(node.test) ||\n statementContainsAwait(node.consequent) ||\n (node.alternate !== undefined && statementContainsAwait(node.alternate))\n );\n case \"ForStatement\":\n return (\n (node.init?.type === \"VariableDeclaration\"\n ? variableDeclarationContainsAwait(node.init)\n : node.init !== undefined && expressionContainsAwait(node.init)) ||\n (node.test !== undefined && expressionContainsAwait(node.test)) ||\n (node.update !== undefined && expressionContainsAwait(node.update)) ||\n statementContainsAwait(node.body)\n );\n case \"ForInStatement\":\n case \"ForOfStatement\":\n return (\n (node.left.type === \"VariableDeclaration\" && variableDeclarationContainsAwait(node.left)) ||\n (node.left.type !== \"VariableDeclaration\" && assignmentTargetContainsAwait(node.left)) ||\n expressionContainsAwait(node.right) ||\n statementContainsAwait(node.body)\n );\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n return expressionContainsAwait(node.test) || statementContainsAwait(node.body);\n case \"TryStatement\":\n return (\n statementListContainsAwait(node.block.body) ||\n (node.handler !== undefined && catchClauseContainsAwait(node.handler)) ||\n (node.finalizer !== undefined && statementListContainsAwait(node.finalizer.body))\n );\n case \"SwitchStatement\":\n return (\n expressionContainsAwait(node.discriminant) ||\n node.cases.some(\n (switchCase) =>\n (switchCase.test !== undefined && expressionContainsAwait(switchCase.test)) ||\n statementListContainsAwait(switchCase.consequent)\n )\n );\n case \"VariableDeclaration\":\n return variableDeclarationContainsAwait(node);\n case \"ReturnStatement\":\n return node.argument !== undefined && expressionContainsAwait(node.argument);\n case \"ThrowStatement\":\n return expressionContainsAwait(node.argument);\n case \"ExportNamedDeclaration\":\n return variableDeclarationContainsAwait(node.declaration);\n case \"ExportDefaultDeclaration\":\n return expressionContainsAwait(node.declaration);\n case \"ImportDeclaration\":\n case \"FunctionDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n case \"EmptyStatement\":\n return false;\n }\n}\n\nfunction catchClauseContainsAwait(node: CatchClause): boolean {\n return (\n (node.param !== undefined && bindingPatternContainsAwait(node.param)) ||\n statementListContainsAwait(node.body.body)\n );\n}\n\nfunction variableDeclarationContainsAwait(node: VariableDeclaration): boolean {\n return node.declarations.some((declarator) => {\n return (\n bindingPatternContainsAwait(declarator.id) ||\n (declarator.init !== undefined && expressionContainsAwait(declarator.init))\n );\n });\n}\n\nfunction expressionContainsAwait(node: Expression): boolean {\n switch (node.type) {\n case \"AwaitExpression\":\n return true;\n case \"YieldExpression\":\n return node.argument !== undefined && expressionContainsAwait(node.argument);\n case \"ArrowFunctionExpression\":\n case \"FunctionExpression\":\n return false;\n case \"ArrayExpression\":\n return node.elements.some((element) => {\n return element.type === \"SpreadElement\"\n ? expressionContainsAwait(element.argument)\n : expressionContainsAwait(element);\n });\n case \"ObjectExpression\":\n return objectExpressionContainsAwait(node);\n case \"UnaryExpression\":\n case \"UpdateExpression\":\n return expressionContainsAwait(node.argument);\n case \"SequenceExpression\":\n return node.expressions.some(expressionContainsAwait);\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n return expressionContainsAwait(node.left) || expressionContainsAwait(node.right);\n case \"ConditionalExpression\":\n return (\n expressionContainsAwait(node.test) ||\n expressionContainsAwait(node.consequent) ||\n expressionContainsAwait(node.alternate)\n );\n case \"MemberExpression\":\n return (\n expressionContainsAwait(node.object) ||\n (node.computed && expressionContainsAwait(node.property))\n );\n case \"AssignmentExpression\":\n return assignmentTargetContainsAwait(node.left) || expressionContainsAwait(node.right);\n case \"CallExpression\":\n case \"NewExpression\":\n return (\n expressionContainsAwait(node.callee) ||\n node.arguments.some((argument) => {\n return argument.type === \"SpreadElement\"\n ? expressionContainsAwait(argument.argument)\n : expressionContainsAwait(argument);\n })\n );\n case \"TemplateLiteral\":\n return node.expressions.some(expressionContainsAwait);\n case \"TaggedTemplateExpression\":\n return expressionContainsAwait(node.tag) || expressionContainsAwait(node.quasi);\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"MetaProperty\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"RegexLiteral\":\n case \"StringLiteral\":\n case \"ThisExpression\":\n case \"UndefinedLiteral\":\n return false;\n }\n}\n\nfunction objectExpressionContainsAwait(node: ObjectExpression): boolean {\n return node.properties.some((property) => {\n if (property.type === \"SpreadElement\") {\n return expressionContainsAwait(property.argument);\n }\n\n return (\n (property.computed && expressionContainsAwait(property.key)) ||\n expressionContainsAwait(property.value)\n );\n });\n}\n\nfunction assignmentTargetContainsAwait(node: AssignmentExpression[\"left\"]): boolean {\n switch (node.type) {\n case \"Identifier\":\n case \"MetaProperty\":\n return false;\n case \"MemberExpression\":\n return expressionContainsAwait(node);\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n return bindingPatternContainsAwait(node);\n }\n}\n\nfunction bindingElementContainsAwait(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n): boolean {\n if (node.type === \"RestElement\") {\n return patternTargetContainsAwait(node.argument);\n }\n\n return bindingPatternContainsAwait(node);\n}\n\nfunction bindingPatternContainsAwait(\n node: AssignmentPattern | ArrayPattern | Identifier | MemberExpression | ObjectPattern\n): boolean {\n switch (node.type) {\n case \"Identifier\":\n return false;\n case \"MemberExpression\":\n return expressionContainsAwait(node);\n case \"AssignmentPattern\":\n return bindingPatternContainsAwait(node.left) || expressionContainsAwait(node.right);\n case \"ArrayPattern\":\n return node.elements.some((element) => {\n return element !== null && bindingElementContainsAwait(element);\n });\n case \"ObjectPattern\":\n return node.properties.some(assignmentPropertyContainsAwait);\n }\n}\n\nfunction assignmentPropertyContainsAwait(node: AssignmentProperty | RestElement): boolean {\n if (node.type === \"RestElement\") {\n return patternTargetContainsAwait(node.argument);\n }\n\n return (\n (node.computed && expressionContainsAwait(node.key)) || bindingPatternContainsAwait(node.value)\n );\n}\n\nfunction patternTargetContainsAwait(node: PatternTarget): boolean {\n switch (node.type) {\n case \"Identifier\":\n return false;\n case \"MemberExpression\":\n return expressionContainsAwait(node);\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n return bindingPatternContainsAwait(node);\n }\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type ArrayPattern,\n type FunctionNode,\n type AssignmentExpression,\n type AssignmentPattern,\n type AssignmentProperty,\n type BinaryExpression,\n type BlockStatement,\n type CallExpression,\n type CatchClause,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type IfStatement,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type ObjectPattern,\n type PatternTarget,\n type Property,\n type RestElement,\n type SourceSpan,\n type Statement,\n type TaggedTemplateExpression,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\n\nexport type Diagnostic = {\n code: \"AS-DESTRUCTURE-NULL-DEFAULT\";\n severity: \"warning\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n hint: string;\n};\n\nconst MESSAGE = \"Destructuring default values only apply to undefined, not null.\";\nconst HINT = \"Handle null explicitly before destructuring or use ?? after binding.\";\n\nexport function AS_DESTRUCTURE_NULL_DEFAULT(\n source: string,\n options: { filename?: string } = {}\n): Diagnostic[] {\n return new ASDestructureNullDefaultScanner(options.filename ?? \"<input>\").scan(source);\n}\n\ntype KnownElement = Expression | \"missing\" | undefined;\n\nclass ASDestructureNullDefaultScanner {\n private readonly diagnostics: Diagnostic[] = [];\n\n constructor(private readonly filename: string) {}\n\n scan(source: string): Diagnostic[] {\n this.visitModule(parseModule(source, this.filename));\n return this.diagnostics;\n }\n\n private visitModule(node: Module): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunction(node);\n return;\n case \"BlockStatement\":\n this.visitBlockStatement(node);\n return;\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitBlockStatement(node: BlockStatement): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n this.visitStatement(node.body);\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n } else {\n this.visitBindingPattern(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitBlockStatement(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitBlockStatement(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n if (node.param !== undefined) {\n this.visitBindingPattern(node.param);\n }\n this.visitBlockStatement(node.body);\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n if (node.init !== undefined) {\n this.matchPatternAgainstExpression(node.id, node.init);\n this.visitBindingPattern(node.id);\n this.visitExpression(node.init);\n } else {\n this.visitBindingPattern(node.id);\n }\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"AwaitExpression\":\n this.visitExpression(node.argument);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n this.visitBinaryLikeExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"TaggedTemplateExpression\":\n this.visitTaggedTemplateExpression(node);\n return;\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"MetaProperty\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"RegexLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: FunctionNode): void {\n for (const parameter of node.params) {\n if (parameter.type === \"AssignmentPattern\") {\n this.matchPatternAgainstExpression(parameter.left, parameter.right);\n }\n this.visitBindingElement(parameter);\n }\n if (node.body.type === \"BlockStatement\") {\n this.visitBlockStatement(node.body);\n return;\n }\n this.visitExpression(node.body);\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element.type === \"SpreadElement\") {\n this.visitExpression(element.argument);\n continue;\n }\n this.visitExpression(element);\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitExpression(property.argument);\n continue;\n }\n this.visitProperty(property);\n }\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryLikeExpression(node: BinaryExpression | LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n if (node.computed) {\n this.visitExpression(node.property);\n }\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n this.matchPatternAgainstExpression(node.left, node.right);\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitExpression(argument.argument);\n continue;\n }\n this.visitExpression(argument);\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitTaggedTemplateExpression(node: TaggedTemplateExpression): void {\n this.visitExpression(node.tag);\n this.visitTemplateLiteral(node.quasi);\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitExpression(node.value);\n }\n\n private visitBindingElement(\n node: AssignmentPattern | ArrayPattern | ObjectPattern | RestElement | PatternTarget\n ): void {\n if (node.type === \"RestElement\") {\n this.visitBindingPattern(node.argument);\n return;\n }\n this.visitBindingPattern(node);\n }\n\n private visitBindingPattern(\n node: AssignmentPattern | ArrayPattern | ObjectPattern | PatternTarget\n ): void {\n switch (node.type) {\n case \"Identifier\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentPattern\":\n this.visitAssignmentPattern(node);\n return;\n case \"ArrayPattern\":\n this.visitArrayPattern(node);\n return;\n case \"ObjectPattern\":\n this.visitObjectPattern(node);\n return;\n }\n }\n\n private visitAssignmentPattern(node: AssignmentPattern): void {\n this.visitBindingPattern(node.left);\n this.visitExpression(node.right);\n }\n\n private visitArrayPattern(node: ArrayPattern): void {\n for (const element of node.elements) {\n if (element === null) {\n continue;\n }\n this.visitBindingElement(element);\n }\n }\n\n private visitObjectPattern(node: ObjectPattern): void {\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitBindingPattern(property.argument);\n continue;\n }\n this.visitAssignmentProperty(property);\n }\n }\n\n private visitAssignmentProperty(node: AssignmentProperty): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitBindingPattern(node.value);\n }\n\n private visitAssignmentTarget(node: AssignmentExpression[\"left\"]): void {\n if (node.type === \"MetaProperty\") {\n return;\n }\n this.visitBindingPattern(node);\n }\n\n private matchPatternAgainstExpression(\n pattern: AssignmentExpression[\"left\"] | VariableDeclarator[\"id\"],\n expression: Expression\n ): void {\n if (pattern.type === \"ObjectPattern\" && expression.type === \"ObjectExpression\") {\n this.matchObjectPattern(pattern, expression);\n return;\n }\n if (pattern.type === \"ArrayPattern\" && expression.type === \"ArrayExpression\") {\n this.matchArrayPattern(pattern, expression);\n }\n }\n\n private matchObjectPattern(pattern: ObjectPattern, expression: ObjectExpression): void {\n for (const property of pattern.properties) {\n if (property.type === \"RestElement\") {\n continue;\n }\n if (property.computed) {\n continue;\n }\n\n const key = getStaticPropertyKey(property.key);\n if (key === undefined) {\n continue;\n }\n\n const value = getKnownObjectProperty(expression, key);\n if (value === undefined || value === \"missing\") {\n continue;\n }\n\n this.matchPropertyValue(property.value, value);\n }\n }\n\n private matchArrayPattern(pattern: ArrayPattern, expression: ArrayExpression): void {\n for (const [index, element] of pattern.elements.entries()) {\n if (element === null) {\n continue;\n }\n\n const value = getKnownArrayElement(expression, index);\n if (value === undefined || value === \"missing\") {\n continue;\n }\n\n this.matchPropertyValue(element, value);\n }\n }\n\n private matchPropertyValue(\n pattern: AssignmentPattern | ArrayPattern | ObjectPattern | PatternTarget | RestElement,\n expression: Expression\n ): void {\n if (pattern.type === \"RestElement\") {\n return;\n }\n\n if (pattern.type === \"AssignmentPattern\") {\n if (expression.type === \"NullLiteral\") {\n this.report(pattern.span);\n return;\n }\n this.matchPatternAgainstExpression(pattern.left, expression);\n return;\n }\n\n this.matchPatternAgainstExpression(pattern, expression);\n }\n\n private report(span: SourceSpan): void {\n this.diagnostics.push({\n code: \"AS-DESTRUCTURE-NULL-DEFAULT\",\n severity: \"warning\",\n message: MESSAGE,\n filename: this.filename,\n line: span.start.line,\n column: span.start.column,\n span,\n hint: HINT\n });\n }\n}\n\nfunction getKnownObjectProperty(expression: ObjectExpression, key: string): KnownElement {\n for (let index = expression.properties.length - 1; index >= 0; index -= 1) {\n const property = expression.properties[index];\n if (property.type === \"SpreadElement\" || property.computed) {\n return undefined;\n }\n\n if (getStaticPropertyKey(property.key) === key) {\n return property.value;\n }\n }\n\n return \"missing\";\n}\n\nfunction getKnownArrayElement(expression: ArrayExpression, index: number): KnownElement {\n for (let currentIndex = 0; currentIndex <= index; currentIndex += 1) {\n const element = expression.elements[currentIndex];\n if (element === undefined) {\n return \"missing\";\n }\n if (element.type === \"SpreadElement\") {\n return undefined;\n }\n if (currentIndex === index) {\n return element;\n }\n }\n\n return \"missing\";\n}\n\nfunction getStaticPropertyKey(key: Expression): string | undefined {\n switch (key.type) {\n case \"Identifier\":\n return key.name;\n case \"NumericLiteral\":\n return String(key.value);\n case \"StringLiteral\":\n return key.value;\n default:\n return undefined;\n }\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type AssignmentExpression,\n type AssignmentPattern,\n type BinaryExpression,\n type CallExpression,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type FunctionExpression,\n type IfStatement,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type Property,\n type RestElement,\n type SourceSpan,\n type SpreadElement,\n type Statement,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\n\ntype DiagnosticCode =\n | \"AS-EXPORT-DEFAULT-MISSING\"\n | \"AS-EXPORT-DEFAULT-MULTIPLE\"\n | \"AS-EXPORT-DEFAULT-NOT-ARROW\"\n | \"AS-EXPORT-DEFAULT-SIGNATURE\"\n | \"AS-EXPORT-UNKNOWN\"\n | \"AS-IMPORT-META-ASSIGN\"\n | \"AS-RETURN-AT-TOP\";\n\nexport type Diagnostic = {\n code: DiagnosticCode;\n severity: \"error\" | \"warning\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\nexport type DefaultExportSignature = {\n parameters?: readonly string[];\n required?: boolean;\n};\n\nexport function AS_EXPORT_IMPORT_META(\n source: string,\n options: {\n allowedExportNames?: readonly string[];\n defaultExport?: DefaultExportSignature;\n filename?: string;\n } = {}\n): Diagnostic[] {\n return new Scanner(\n options.filename ?? \"<input>\",\n new Set(options.allowedExportNames ?? []),\n options.defaultExport\n ).scan(source);\n}\n\nclass Scanner {\n private readonly diagnostics: Diagnostic[] = [];\n\n constructor(\n private readonly filename: string,\n private readonly allowedExportNames: ReadonlySet<string>,\n private readonly defaultExport: DefaultExportSignature | undefined\n ) {}\n\n scan(source: string): Diagnostic[] {\n this.visitModule(parseModule(source, this.filename));\n return this.diagnostics;\n }\n\n private visitModule(node: Module): void {\n const defaultExports = node.body.filter(\n (statement) => statement.type === \"ExportDefaultDeclaration\"\n );\n const hasDefaultExport = defaultExports.length > 0;\n\n if (!hasDefaultExport && this.defaultExport?.required === true) {\n this.pushDiagnostic(\n \"AS-EXPORT-DEFAULT-MISSING\",\n \"error\",\n \"Module must export a default entry point.\",\n node.span\n );\n }\n\n for (const [index, statement] of defaultExports.entries()) {\n if (index > 0) {\n this.pushDiagnostic(\n \"AS-EXPORT-DEFAULT-MULTIPLE\",\n \"error\",\n \"Module contains more than one export default declaration.\",\n statement.span\n );\n }\n }\n\n for (const statement of node.body) {\n if (hasDefaultExport && statement.type === \"ReturnStatement\") {\n this.pushDiagnostic(\n \"AS-RETURN-AT-TOP\",\n \"warning\",\n \"Top-level return statement is present alongside an export default declaration.\",\n statement.span\n );\n }\n\n this.visitStatement(statement);\n }\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n for (const param of node.params) {\n this.visitAssignmentTarget(param);\n }\n this.visitStatement(node.body);\n return;\n case \"ExportNamedDeclaration\":\n this.visitExportNamedDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n if (!isDefaultExportCallable(node.declaration)) {\n this.pushDiagnostic(\n \"AS-EXPORT-DEFAULT-NOT-ARROW\",\n \"error\",\n \"Export default initializer must be an arrow or function expression.\",\n node.declaration.span\n );\n } else {\n this.visitDefaultExportSignature(node.declaration);\n }\n this.visitExpression(node.declaration);\n return;\n case \"BlockStatement\":\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n return;\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitExportNamedDeclaration(node: VariableDeclaration): void {\n const declarator = node.declarations[0];\n if (declarator?.id.type === \"Identifier\" && !this.allowedExportNames.has(declarator.id.name)) {\n this.pushDiagnostic(\n \"AS-EXPORT-UNKNOWN\",\n \"error\",\n `Named export '${declarator.id.name}' is not allowed.`,\n declarator.id.span\n );\n }\n\n this.visitVariableDeclaration(node);\n }\n\n private visitDefaultExportSignature(\n node: Extract<Expression, { type: \"ArrowFunctionExpression\" }> | FunctionExpression\n ): void {\n const parameters = this.defaultExport?.parameters;\n if (parameters === undefined) {\n return;\n }\n\n if (!hasParameterNames(node, parameters)) {\n this.pushDiagnostic(\n \"AS-EXPORT-DEFAULT-SIGNATURE\",\n \"error\",\n `Default export must declare signature (${parameters.join(\", \")}).`,\n node.span\n );\n }\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n this.visitStatement(node.body);\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n } else {\n if (isImportMetaAssignmentTarget(node.left)) {\n this.pushDiagnostic(\n \"AS-IMPORT-META-ASSIGN\",\n \"error\",\n \"Assignment target must not involve import.meta.\",\n node.left.span\n );\n }\n this.visitAssignmentTarget(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitStatement(node.block);\n if (node.handler !== undefined) {\n this.visitStatement(node.handler.body);\n }\n if (node.finalizer !== undefined) {\n this.visitStatement(node.finalizer);\n }\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"ArrowFunctionExpression\":\n for (const param of node.params) {\n this.visitAssignmentTarget(param);\n }\n if (node.body.type === \"BlockStatement\") {\n this.visitStatement(node.body);\n } else {\n this.visitExpression(node.body);\n }\n return;\n case \"FunctionExpression\":\n for (const param of node.params) {\n this.visitAssignmentTarget(param);\n }\n this.visitStatement(node.body);\n return;\n case \"AwaitExpression\":\n this.visitExpression(node.argument);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n this.visitBinaryLikeExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"StringLiteral\":\n case \"RegexLiteral\":\n case \"MetaProperty\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n this.visitExpressionOrSpread(element);\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitExpression(property.argument);\n } else {\n this.visitProperty(property);\n }\n }\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitExpression(node.value);\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryLikeExpression(node: BinaryExpression | LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n if (node.computed) {\n this.visitExpression(node.property);\n }\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n if (isImportMetaAssignmentTarget(node.left)) {\n this.pushDiagnostic(\n \"AS-IMPORT-META-ASSIGN\",\n \"error\",\n \"Assignment target must not involve import.meta.\",\n node.left.span\n );\n }\n\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n }\n\n private visitAssignmentTarget(\n node: AssignmentExpression[\"left\"] | AssignmentPattern | RestElement\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n return;\n case \"RestElement\":\n this.visitAssignmentTarget(node.argument);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.visitAssignmentTarget(element);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitAssignmentTarget(property);\n } else {\n this.visitAssignmentTarget(property.value);\n }\n }\n return;\n case \"Identifier\":\n case \"MetaProperty\":\n return;\n }\n }\n\n private visitCallExpression(node: CallExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n this.visitExpressionOrSpread(argument);\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitExpressionOrSpread(node: Expression | SpreadElement): void {\n if (node.type === \"SpreadElement\") {\n this.visitExpression(node.argument);\n return;\n }\n\n this.visitExpression(node);\n }\n\n private pushDiagnostic(\n code: DiagnosticCode,\n severity: Diagnostic[\"severity\"],\n message: string,\n span: SourceSpan\n ): void {\n this.diagnostics.push({\n code,\n severity,\n message,\n filename: this.filename,\n line: span.start.line,\n column: span.start.column,\n span\n });\n }\n}\n\nfunction isDefaultExportCallable(\n node: Expression\n): node is Extract<Expression, { type: \"ArrowFunctionExpression\" }> | FunctionExpression {\n return node.type === \"ArrowFunctionExpression\" || node.type === \"FunctionExpression\";\n}\n\nfunction hasParameterNames(\n node: Extract<Expression, { type: \"ArrowFunctionExpression\" }> | FunctionExpression,\n names: readonly string[]\n): boolean {\n if (node.params.length !== names.length) {\n return false;\n }\n\n return node.params.every(\n (param, index) => param.type === \"Identifier\" && param.name === names[index]\n );\n}\n\nfunction isImportMetaReference(node: AssignmentExpression[\"left\"] | Expression): boolean {\n if (node.type === \"MetaProperty\") {\n return true;\n }\n\n return (\n node.type === \"MemberExpression\" &&\n (isImportMetaReference(node.object) || (node.computed && isImportMetaReference(node.property)))\n );\n}\n\nfunction isImportMetaAssignmentTarget(\n node: AssignmentExpression[\"left\"] | AssignmentPattern | RestElement\n): boolean {\n switch (node.type) {\n case \"MetaProperty\":\n return true;\n case \"MemberExpression\":\n return isImportMetaReference(node);\n case \"AssignmentPattern\":\n return isImportMetaAssignmentTarget(node.left);\n case \"RestElement\":\n return isImportMetaAssignmentTarget(node.argument);\n case \"ArrayPattern\":\n return node.elements.some(\n (element) => element !== null && isImportMetaAssignmentTarget(element)\n );\n case \"ObjectPattern\":\n return node.properties.some((property) =>\n isImportMetaAssignmentTarget(property.type === \"RestElement\" ? property : property.value)\n );\n case \"Identifier\":\n return false;\n }\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type ArrayPattern,\n type FunctionNode,\n type AssignmentExpression,\n type AssignmentPattern,\n type AssignmentProperty,\n type AssignmentTarget,\n type BinaryExpression,\n type BlockStatement,\n type CallExpression,\n type CatchClause,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type IfStatement,\n type Identifier,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type ObjectPattern,\n type PatternTarget,\n type Property,\n type RestElement,\n type ReturnStatement,\n type SourceSpan,\n type Statement,\n type TaggedTemplateExpression,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\nimport { normalizeModuleRegistrations, type Modules } from \"./module-registry.js\";\n\nexport type Diagnostic = {\n code: \"AS-FLOATING-PROMISE\";\n severity: \"warning\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\ntype AsyncImportBinding = {\n async: boolean;\n kind: \"import\";\n name: string;\n};\n\ntype LocalBinding = {\n async: boolean;\n kind: \"local\";\n name: string;\n};\n\ntype NamespaceImportBinding = {\n kind: \"namespace-import\";\n moduleName: string;\n name: string;\n};\n\ntype Binding = AsyncImportBinding | LocalBinding | NamespaceImportBinding;\ntype Scope = Map<string, Binding>;\n\nconst AS_FLOATING_PROMISE_MESSAGE =\n \"Promise-returning call is not awaited, returned, stored, or chained.\";\n\nconst PROMISE_CONSUMERS = new Set([\"all\", \"allSettled\", \"any\", \"race\"]);\nconst PROMISE_FACTORIES = new Set([\"reject\", \"resolve\"]);\nconst PROMISE_CHAIN_METHODS = new Set([\"then\"]);\n\nexport function AS_FLOATING_PROMISE(\n source: string,\n options: { filename?: string; modules?: Modules } = {}\n): Diagnostic[] {\n return new ASFloatingPromiseScanner(options.filename ?? \"<input>\", options.modules).scan(source);\n}\n\nclass ASFloatingPromiseScanner {\n private readonly diagnostics: Diagnostic[] = [];\n private readonly moduleRegistrations;\n private readonly scopes: Scope[] = [];\n\n constructor(\n private readonly filename: string,\n modules: Modules | undefined\n ) {\n this.moduleRegistrations = normalizeModuleRegistrations(modules);\n }\n\n scan(source: string): Diagnostic[] {\n this.visitModule(parseModule(source, this.filename));\n return this.diagnostics;\n }\n\n private visitModule(node: Module): void {\n this.withScope(this.collectModuleBindings(node.body), () => {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n });\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunction(node);\n return;\n case \"BlockStatement\":\n this.visitBlockStatement(node);\n return;\n case \"ExpressionStatement\":\n this.reportUnhandledLikelyPromiseStatementExpression(node.expression);\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n this.visitReturnStatement(node);\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitBlockStatement(node: BlockStatement): void {\n this.withScope(this.collectBlockBindings(node.body), () => {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n });\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n const bindings =\n node.init?.type === \"VariableDeclaration\" ? this.collectDeclarationBindings(node.init) : [];\n\n this.withScope(bindings, () => {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n\n this.visitStatement(node.body);\n });\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n const bindings =\n node.left.type === \"VariableDeclaration\" ? this.collectDeclarationBindings(node.left) : [];\n\n this.withScope(bindings, () => {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n } else {\n this.visitAssignmentTarget(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n });\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitBlockStatement(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitBlockStatement(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n const bindings = node.param === undefined ? [] : this.collectPatternBindings(node.param);\n\n this.withScope(bindings, () => {\n this.visitBlockStatement(node.body);\n });\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n this.visitBindingPattern(node.id);\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n }\n\n private visitReturnStatement(node: ReturnStatement): void {\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"AwaitExpression\":\n this.visitExpression(node.argument);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n this.visitBinaryLikeExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"TaggedTemplateExpression\":\n this.visitTaggedTemplateExpression(node);\n return;\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"MetaProperty\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"RegexLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: FunctionNode): void {\n this.withScope(this.collectArrowFunctionBindings(node), () => {\n if (node.body.type === \"BlockStatement\") {\n this.visitBlockStatement(node.body);\n return;\n }\n\n this.visitExpression(node.body);\n });\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element.type === \"SpreadElement\") {\n this.visitExpression(element.argument);\n continue;\n }\n\n this.visitExpression(element);\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitExpression(property.argument);\n continue;\n }\n\n this.visitProperty(property);\n }\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitExpression(node.value);\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryLikeExpression(node: BinaryExpression | LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n if (node.computed) {\n this.visitExpression(node.property);\n }\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitExpression(argument.argument);\n continue;\n }\n\n this.visitExpression(argument);\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitTaggedTemplateExpression(node: TaggedTemplateExpression): void {\n this.visitExpression(node.tag);\n this.visitTemplateLiteral(node.quasi);\n }\n\n private visitAssignmentTarget(node: AssignmentTarget | PatternTarget): void {\n switch (node.type) {\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n this.visitBindingPattern(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"Identifier\":\n case \"MetaProperty\":\n return;\n }\n }\n\n private visitBindingPattern(node: ArrayPattern | Identifier | ObjectPattern): void {\n switch (node.type) {\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element === null) {\n continue;\n }\n\n this.visitBindingElement(element);\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitBindingElement(property);\n continue;\n }\n\n this.visitAssignmentProperty(property);\n }\n return;\n case \"Identifier\":\n return;\n }\n }\n\n private visitAssignmentProperty(node: AssignmentProperty): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitBindingElement(node.value);\n }\n\n private visitBindingElement(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n return;\n case \"RestElement\":\n this.visitAssignmentTarget(node.argument);\n return;\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n case \"Identifier\":\n this.visitBindingPattern(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n }\n }\n\n private isUnhandledLikelyPromiseExpression(node: Expression): boolean {\n if (node.type !== \"CallExpression\") {\n return false;\n }\n\n if (this.isPromiseConsumerCall(node) || this.isPromiseChainCall(node)) {\n return false;\n }\n\n return this.isLikelyPromiseCall(node);\n }\n\n private reportUnhandledLikelyPromiseStatementExpression(node: Expression): void {\n if (this.isUnhandledLikelyPromiseExpression(node)) {\n this.report(node.span);\n return;\n }\n\n switch (node.type) {\n case \"LogicalExpression\":\n this.reportUnhandledLikelyPromiseStatementExpression(node.left);\n this.reportUnhandledLikelyPromiseStatementExpression(node.right);\n return;\n case \"ConditionalExpression\":\n this.reportUnhandledLikelyPromiseStatementExpression(node.consequent);\n this.reportUnhandledLikelyPromiseStatementExpression(node.alternate);\n return;\n case \"CallExpression\":\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n case \"AwaitExpression\":\n case \"ArrayExpression\":\n case \"ObjectExpression\":\n case \"UnaryExpression\":\n case \"BinaryExpression\":\n case \"MemberExpression\":\n case \"AssignmentExpression\":\n case \"TemplateLiteral\":\n case \"TaggedTemplateExpression\":\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"MetaProperty\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"RegexLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private isLikelyPromiseCall(node: CallExpression): boolean {\n if (node.callee.type === \"ArrowFunctionExpression\") {\n return node.callee.async;\n }\n\n if (node.callee.type === \"Identifier\") {\n return this.resolveAsyncFunctionBinding(node.callee.name);\n }\n\n if (node.callee.type !== \"MemberExpression\") {\n return false;\n }\n\n if (this.isPromiseFactoryCall(node)) {\n return true;\n }\n\n return this.isAsyncNamespaceMemberCall(node.callee);\n }\n\n private isPromiseConsumerCall(node: CallExpression): boolean {\n return this.isPromiseStaticMethodCall(node, PROMISE_CONSUMERS);\n }\n\n private isPromiseFactoryCall(node: CallExpression): boolean {\n return this.isPromiseStaticMethodCall(node, PROMISE_FACTORIES);\n }\n\n private isPromiseStaticMethodCall(\n node: CallExpression,\n methodNames: ReadonlySet<string>\n ): boolean {\n const member = node.callee.type === \"MemberExpression\" ? node.callee : undefined;\n return (\n member !== undefined &&\n !member.computed &&\n member.object.type === \"Identifier\" &&\n member.object.name === \"Promise\" &&\n member.property.type === \"Identifier\" &&\n methodNames.has(member.property.name)\n );\n }\n\n private isPromiseChainCall(node: CallExpression): boolean {\n const member = node.callee.type === \"MemberExpression\" ? node.callee : undefined;\n return (\n member !== undefined &&\n !member.computed &&\n member.property.type === \"Identifier\" &&\n PROMISE_CHAIN_METHODS.has(member.property.name) &&\n this.isLikelyPromiseExpression(member.object)\n );\n }\n\n private isLikelyPromiseExpression(node: Expression): boolean {\n return node.type === \"CallExpression\" && this.isLikelyPromiseCall(node);\n }\n\n private resolveAsyncFunctionBinding(name: string): boolean {\n const binding = this.resolveBinding(name);\n return (binding?.kind === \"import\" || binding?.kind === \"local\") && binding.async === true;\n }\n\n private isAsyncNamespaceMemberCall(member: MemberExpression): boolean {\n if (\n member.computed ||\n member.object.type !== \"Identifier\" ||\n member.property.type !== \"Identifier\"\n ) {\n return false;\n }\n\n const binding = this.resolveBinding(member.object.name);\n if (binding?.kind !== \"namespace-import\") {\n return false;\n }\n\n return (\n this.moduleRegistrations.get(binding.moduleName)?.asyncExports.has(member.property.name) ===\n true\n );\n }\n\n private collectModuleBindings(statements: readonly Statement[]): Binding[] {\n return [\n ...statements.flatMap((statement): Binding[] => {\n if (statement.type !== \"ImportDeclaration\") {\n return [];\n }\n\n return statement.specifiers.flatMap((specifier): Binding[] => {\n if (specifier.type === \"ImportNamespaceSpecifier\") {\n return [\n {\n kind: \"namespace-import\",\n moduleName: statement.source.value,\n name: specifier.local.name\n }\n ];\n }\n\n const exportName =\n specifier.type === \"ImportDefaultSpecifier\" ? \"default\" : specifier.imported.name;\n\n return [\n {\n async:\n this.moduleRegistrations\n .get(statement.source.value)\n ?.asyncExports.has(exportName) === true,\n kind: \"import\",\n name: specifier.local.name\n }\n ];\n });\n }),\n ...this.collectBlockBindings(statements)\n ];\n }\n\n private collectBlockBindings(statements: readonly Statement[]): Binding[] {\n return statements.flatMap((statement) => {\n if (statement.type === \"FunctionDeclaration\") {\n return [\n { async: statement.async && !statement.generator, kind: \"local\", name: statement.id.name }\n ];\n }\n if (statement.type === \"VariableDeclaration\") {\n return this.collectDeclarationBindings(statement);\n }\n\n if (statement.type === \"ExportNamedDeclaration\") {\n return this.collectDeclarationBindings(statement.declaration);\n }\n\n return [];\n });\n }\n\n private collectDeclarationBindings(node: VariableDeclaration): Binding[] {\n return node.declarations.flatMap((declarator) =>\n this.collectDeclaratorBindings(declarator).map((name) => ({\n async:\n (declarator.init?.type === \"ArrowFunctionExpression\" ||\n (declarator.init?.type === \"FunctionExpression\" && !declarator.init.generator)) &&\n declarator.init.async,\n kind: \"local\" as const,\n name\n }))\n );\n }\n\n private collectDeclaratorBindings(node: VariableDeclarator): string[] {\n return this.collectPatternBindingNames(node.id);\n }\n\n private collectArrowFunctionBindings(node: FunctionNode): Binding[] {\n const bindings: Binding[] = node.params.flatMap((param) =>\n this.collectParameterBindingNames(param).map((name) => ({\n async: false,\n kind: \"local\" as const,\n name\n }))\n );\n if (node.type === \"FunctionExpression\" && node.id !== undefined) {\n bindings.unshift({ async: node.async && !node.generator, kind: \"local\", name: node.id.name });\n }\n return bindings;\n }\n\n private collectPatternBindings(node: ArrayPattern | Identifier | ObjectPattern): Binding[] {\n return this.collectPatternBindingNames(node).map((name) => ({\n async: false,\n kind: \"local\" as const,\n name\n }));\n }\n\n private collectParameterBindingNames(\n node: AssignmentPattern | ArrayPattern | Identifier | ObjectPattern | RestElement\n ): string[] {\n switch (node.type) {\n case \"AssignmentPattern\":\n return this.collectPatternBindingNames(node.left);\n case \"RestElement\":\n return this.collectPatternBindingNames(node.argument);\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n case \"Identifier\":\n return this.collectPatternBindingNames(node);\n }\n }\n\n private collectPatternBindingNames(\n node: ArrayPattern | Identifier | ObjectPattern | PatternTarget\n ): string[] {\n switch (node.type) {\n case \"Identifier\":\n return [node.name];\n case \"ArrayPattern\":\n return node.elements.flatMap((element) => {\n if (element === null) {\n return [];\n }\n\n return this.collectBindingElementNames(element);\n });\n case \"ObjectPattern\":\n return node.properties.flatMap((property) => {\n if (property.type === \"RestElement\") {\n return this.collectBindingElementNames(property);\n }\n\n return this.collectBindingElementNames(property.value);\n });\n case \"MemberExpression\":\n return [];\n }\n }\n\n private collectBindingElementNames(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n ): string[] {\n switch (node.type) {\n case \"AssignmentPattern\":\n return this.collectPatternBindingNames(node.left);\n case \"RestElement\":\n return this.collectPatternBindingNames(node.argument);\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n case \"Identifier\":\n return this.collectPatternBindingNames(node);\n case \"MemberExpression\":\n return [];\n }\n }\n\n private resolveBinding(name: string): Binding | undefined {\n for (let index = this.scopes.length - 1; index >= 0; index -= 1) {\n const binding = this.scopes[index]?.get(name);\n if (binding !== undefined) {\n return binding;\n }\n }\n\n return undefined;\n }\n\n private withScope(bindings: readonly Binding[], callback: () => void): void {\n this.scopes.push(new Map(bindings.map((binding) => [binding.name, binding])));\n try {\n callback();\n } finally {\n this.scopes.pop();\n }\n }\n\n private report(span: SourceSpan): void {\n this.diagnostics.push({\n code: \"AS-FLOATING-PROMISE\",\n severity: \"warning\",\n message: AS_FLOATING_PROMISE_MESSAGE,\n filename: this.filename,\n line: span.start.line,\n column: span.start.column,\n span\n });\n }\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type ArrayPattern,\n type FunctionNode,\n type AssignmentExpression,\n type AssignmentPattern,\n type AssignmentProperty,\n type BinaryExpression,\n type BlockStatement,\n type CallExpression,\n type CatchClause,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type Identifier,\n type IfStatement,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type ObjectPattern,\n type PatternTarget,\n type Property,\n type RestElement,\n type SourceSpan,\n type Statement,\n type TaggedTemplateExpression,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\n\nexport type Diagnostic = {\n code: \"AS-FRONTMATTER-FIELD-UNUSED\";\n severity: \"info\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\nexport function AS_FRONTMATTER_FIELD_UNUSED(\n source: string,\n options: { filename?: string; frontmatterFields?: readonly string[] } = {}\n): Diagnostic[] {\n if (options.frontmatterFields === undefined) {\n return [];\n }\n\n return new ASFrontmatterFieldUnusedScanner(\n options.filename ?? \"<input>\",\n new Set(options.frontmatterFields)\n ).scan(source);\n}\n\nclass ASFrontmatterFieldUnusedScanner {\n private readonly reads = new Set<string>();\n private suppressDiagnostics = false;\n\n constructor(\n private readonly filename: string,\n private readonly fields: ReadonlySet<string>\n ) {}\n\n scan(source: string): Diagnostic[] {\n if (this.fields.size === 0) {\n return [];\n }\n\n const module = parseModule(source, this.filename);\n this.visitModule(module);\n\n if (this.suppressDiagnostics) {\n return [];\n }\n\n return [...this.fields]\n .filter((field) => !this.reads.has(field))\n .sort()\n .map((field) => this.createDiagnostic(module.span, field));\n }\n\n private visitModule(node: Module): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunction(node);\n return;\n case \"BlockStatement\":\n this.visitBlockStatement(node);\n return;\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitBlockStatement(node: BlockStatement): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n this.visitStatement(node.body);\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n } else {\n this.visitAssignmentTarget(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitBlockStatement(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitBlockStatement(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n if (node.param !== undefined) {\n this.visitBindingPattern(node.param);\n }\n this.visitBlockStatement(node.body);\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n if (node.init !== undefined && isFrontmatterIdentifier(node.init)) {\n this.collectObjectPatternReads(node.id);\n } else {\n this.visitBindingPattern(node.id);\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n }\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"AwaitExpression\":\n this.visitExpression(node.argument);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n this.visitBinaryLikeExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"TaggedTemplateExpression\":\n this.visitTaggedTemplateExpression(node);\n return;\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"StringLiteral\":\n case \"RegexLiteral\":\n case \"MetaProperty\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: FunctionNode): void {\n for (const parameter of node.params) {\n this.visitBindingElement(parameter);\n }\n if (node.body.type === \"BlockStatement\") {\n this.visitBlockStatement(node.body);\n return;\n }\n\n this.visitExpression(node.body);\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element.type === \"SpreadElement\") {\n this.visitExpression(element.argument);\n } else {\n this.visitExpression(element);\n }\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitExpression(property.argument);\n } else {\n this.visitProperty(property);\n }\n }\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitExpression(node.value);\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryLikeExpression(node: BinaryExpression | LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n if (isFrontmatterIdentifier(node.object)) {\n this.collectMemberRead(node);\n } else {\n this.visitExpression(node.object);\n }\n\n if (node.computed) {\n this.visitExpression(node.property);\n }\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n if (isFrontmatterIdentifier(node.right)) {\n this.collectObjectPatternReads(node.left);\n return;\n }\n\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitExpression(argument.argument);\n } else {\n this.visitExpression(argument);\n }\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitTaggedTemplateExpression(node: TaggedTemplateExpression): void {\n this.visitExpression(node.tag);\n this.visitTemplateLiteral(node.quasi);\n }\n\n private visitBindingElement(\n node: AssignmentPattern | ArrayPattern | ObjectPattern | RestElement | PatternTarget\n ): void {\n if (node.type === \"RestElement\") {\n this.visitBindingPattern(node.argument);\n return;\n }\n this.visitBindingPattern(node);\n }\n\n private visitBindingPattern(\n node: AssignmentPattern | ArrayPattern | ObjectPattern | PatternTarget\n ): void {\n switch (node.type) {\n case \"Identifier\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentPattern\":\n this.visitAssignmentPattern(node);\n return;\n case \"ArrayPattern\":\n this.visitArrayPattern(node);\n return;\n case \"ObjectPattern\":\n this.visitObjectPattern(node);\n return;\n }\n }\n\n private visitAssignmentPattern(node: AssignmentPattern): void {\n this.visitBindingPattern(node.left);\n this.visitExpression(node.right);\n }\n\n private visitArrayPattern(node: ArrayPattern): void {\n for (const element of node.elements) {\n if (element !== null) {\n this.visitBindingElement(element);\n }\n }\n }\n\n private visitObjectPattern(node: ObjectPattern): void {\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitBindingPattern(property.argument);\n } else {\n this.visitAssignmentProperty(property);\n }\n }\n }\n\n private visitAssignmentProperty(node: AssignmentProperty): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitBindingPattern(node.value);\n }\n\n private visitAssignmentTarget(node: AssignmentExpression[\"left\"]): void {\n if (node.type !== \"MetaProperty\") {\n this.visitBindingPattern(node);\n }\n }\n\n private collectMemberRead(node: MemberExpression): void {\n if (!node.computed && node.property.type === \"Identifier\") {\n this.markRead(node.property.name);\n return;\n }\n\n if (node.computed && node.property.type === \"StringLiteral\") {\n this.markRead(node.property.value);\n return;\n }\n\n if (node.computed) {\n this.suppressDiagnostics = true;\n }\n }\n\n private collectObjectPatternReads(\n node: AssignmentExpression[\"left\"] | VariableDeclarator[\"id\"]\n ): void {\n if (node.type !== \"ObjectPattern\") {\n if (node.type !== \"MetaProperty\") {\n this.visitBindingPattern(node);\n }\n return;\n }\n\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.suppressDiagnostics = true;\n continue;\n }\n\n const field = readStaticPropertyKey(property);\n if (field === undefined) {\n this.suppressDiagnostics = true;\n continue;\n }\n\n this.markRead(field);\n this.visitBindingPattern(property.value);\n }\n }\n\n private markRead(field: string): void {\n if (this.fields.has(field)) {\n this.reads.add(field);\n }\n }\n\n private createDiagnostic(span: SourceSpan, field: string): Diagnostic {\n return {\n code: \"AS-FRONTMATTER-FIELD-UNUSED\",\n severity: \"info\",\n message: `Frontmatter field '${field}' is declared by the schema but never read.`,\n filename: this.filename,\n line: span.start.line,\n column: span.start.column,\n span\n };\n }\n}\n\nfunction isFrontmatterIdentifier(node: Expression): node is Identifier {\n return node.type === \"Identifier\" && node.name === \"frontmatter\";\n}\n\nfunction readStaticPropertyKey(property: AssignmentProperty): string | undefined {\n if (property.computed) {\n return property.key.type === \"StringLiteral\" ? property.key.value : undefined;\n }\n\n return readPropertyKey(property.key);\n}\n\nfunction readPropertyKey(node: Expression): string | undefined {\n if (node.type === \"Identifier\") {\n return node.name;\n }\n\n if (node.type === \"StringLiteral\") {\n return node.value;\n }\n\n return undefined;\n}\n", "import { ParseError } from \"../../parse/format-error.js\";\nimport {\n DisallowedSyntaxError,\n type ImportDeclaration,\n type SourceSpan\n} from \"../../parse/parser.js\";\nimport {\n collectSafeJSSourceModules,\n collectImportDeclarations,\n type Modules\n} from \"./module-registry.js\";\n\nexport type Diagnostic = {\n code: \"AS-IMPORT-CYCLE\";\n severity: \"error\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\ntype ImportEdge = {\n declaration: ImportDeclaration;\n filename: string;\n moduleName: string;\n targetModuleName: string;\n};\n\nexport function AS_IMPORT_CYCLE(\n source: string,\n options: { filename?: string; modules?: Modules } = {}\n): Diagnostic[] {\n const filename = options.filename ?? \"<input>\";\n const sourceModules = collectSafeJSSourceModules(options.modules);\n\n if (sourceModules.size === 0) {\n return [];\n }\n\n const dependencyGraph = new Map<string, readonly string[]>();\n const importEdges: ImportEdge[] = [];\n\n for (const sourceModule of sourceModules.values()) {\n const moduleSource = sourceModule.filename === filename ? source : sourceModule.source;\n const declarations = collectImportDeclarationsForCycleRule(moduleSource, sourceModule.filename);\n const targetModuleNames = declarations\n .map((declaration) => declaration.source.value)\n .filter((targetModuleName) => sourceModules.has(targetModuleName));\n\n dependencyGraph.set(sourceModule.moduleName, [...new Set(targetModuleNames)]);\n\n importEdges.push(\n ...declarations.flatMap((declaration) => {\n const targetModuleName = declaration.source.value;\n return sourceModules.has(targetModuleName)\n ? [\n {\n declaration,\n filename: sourceModule.filename,\n moduleName: sourceModule.moduleName,\n targetModuleName\n }\n ]\n : [];\n })\n );\n }\n\n return importEdges.flatMap((edge) => {\n const cyclePath = findPathToModule(\n edge.targetModuleName,\n edge.moduleName,\n dependencyGraph,\n new Set()\n );\n return cyclePath === undefined\n ? []\n : [\n createDiagnostic(\n edge.declaration.source.span,\n edge.targetModuleName,\n [edge.moduleName, ...cyclePath],\n edge.filename\n )\n ];\n });\n}\n\nfunction collectImportDeclarationsForCycleRule(\n source: string,\n filename: string\n): ImportDeclaration[] {\n try {\n return collectImportDeclarations(source, filename);\n } catch (error) {\n if (error instanceof ParseError || error instanceof DisallowedSyntaxError) {\n return [];\n }\n\n throw error;\n }\n}\n\nfunction createDiagnostic(\n span: SourceSpan,\n importedModuleName: string,\n cyclePath: readonly string[],\n filename: string\n): Diagnostic {\n return {\n code: \"AS-IMPORT-CYCLE\",\n severity: \"error\",\n message: `Import from '${importedModuleName}' participates in a cyclic dependency: ${cyclePath.join(\" -> \")}.`,\n filename,\n line: span.start.line,\n column: span.start.column,\n span\n };\n}\n\nfunction findPathToModule(\n currentModuleName: string,\n targetModuleName: string,\n dependencyGraph: ReadonlyMap<string, readonly string[]>,\n visited: Set<string>\n): string[] | undefined {\n if (currentModuleName === targetModuleName) {\n return [targetModuleName];\n }\n\n if (visited.has(currentModuleName)) {\n return undefined;\n }\n\n visited.add(currentModuleName);\n\n for (const dependencyModuleName of dependencyGraph.get(currentModuleName) ?? []) {\n const path = findPathToModule(dependencyModuleName, targetModuleName, dependencyGraph, visited);\n if (path !== undefined) {\n return [currentModuleName, ...path];\n }\n }\n\n visited.delete(currentModuleName);\n return undefined;\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type FunctionNode,\n type AssignmentExpression,\n type BinaryExpression,\n type BlockStatement,\n type CallExpression,\n type CatchClause,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type Property,\n type SourceSpan,\n type Statement,\n type TaggedTemplateExpression,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\nimport { hasTypedModuleRegistrations, type Modules } from \"./module-registry.js\";\n\ntype PrimitiveType = \"boolean\" | \"null\" | \"number\" | \"string\" | \"undefined\";\n\ntype SupportedType =\n | {\n kind: \"array\";\n element: PrimitiveType;\n }\n | {\n kind: \"object\";\n fields: ReadonlyMap<string, PrimitiveType>;\n }\n | {\n kind: \"primitive\";\n name: PrimitiveType;\n };\n\ntype ParsedType =\n | {\n status: \"invalid\";\n }\n | {\n status: \"supported\";\n type: SupportedType;\n }\n | {\n status: \"unsupported\";\n };\n\ntype ParsedObjectFields =\n | {\n fields: ReadonlyMap<string, PrimitiveType>;\n status: \"supported\";\n }\n | {\n status: \"invalid\" | \"unsupported\";\n };\n\ntype JsdocTypeTag = {\n kind: \"type\";\n raw: string;\n span: SourceSpan;\n type?: SupportedType;\n};\n\ntype JsdocParamTag = {\n kind: \"param\";\n name: string;\n raw: string;\n span: SourceSpan;\n type?: SupportedType;\n};\n\ntype ParsedJsdoc = {\n params: JsdocParamTag[];\n type?: JsdocTypeTag;\n};\n\ntype JsdocBlock = {\n endOffset: number;\n startOffset: number;\n};\n\nexport type Diagnostic = {\n code: \"AS-JSDOC-TYPE\";\n severity: \"warning\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\nexport function AS_JSDOC_TYPE(\n source: string,\n options: { filename?: string; modules?: Modules } = {}\n): Diagnostic[] {\n if (!hasTypedModuleRegistrations(options.modules)) {\n return [];\n }\n\n return new ASJsdocTypeScanner(source, options.filename ?? \"<input>\").scan();\n}\n\nclass ASJsdocTypeScanner {\n private readonly diagnostics: Diagnostic[] = [];\n private readonly jsdocBlocks: JsdocBlock[];\n private readonly parsedJsdoc = new Map<number, ParsedJsdoc>();\n\n constructor(\n private readonly source: string,\n private readonly filename: string\n ) {\n this.jsdocBlocks = collectJsdocBlocks(source);\n }\n\n scan(): Diagnostic[] {\n this.visitModule(parseModule(this.source, this.filename));\n return this.diagnostics;\n }\n\n private visitModule(node: Module): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunction(node);\n return;\n case \"BlockStatement\":\n this.visitBlockStatement(node);\n return;\n case \"ExpressionStatement\":\n if (node.expression.type === \"AssignmentExpression\") {\n this.validateAssignmentExpression(\n node.expression,\n this.findLeadingJsdoc(node.span.start.offset)\n );\n }\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node, this.findLeadingJsdoc(node.span.start.offset));\n return;\n case \"ReturnStatement\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(\n node.declaration,\n this.findLeadingJsdoc(node.span.start.offset)\n );\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitBlockStatement(node: BlockStatement): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(\n node.init,\n this.findLeadingJsdoc(node.init.span.start.offset)\n );\n } else {\n this.visitExpression(node.init);\n }\n }\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n this.visitStatement(node.body);\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left, this.findLeadingJsdoc(node.left.span.start.offset));\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitBlockStatement(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitBlockStatement(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n this.visitBlockStatement(node.body);\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitVariableDeclaration(\n node: VariableDeclaration,\n jsdoc: ParsedJsdoc | undefined\n ): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator, jsdoc);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator, jsdoc: ParsedJsdoc | undefined): void {\n if (node.init !== undefined && jsdoc?.type?.type !== undefined) {\n this.validateExpression(jsdoc.type.type, jsdoc.type.raw, node.init);\n }\n\n if (node.init?.type === \"ArrowFunctionExpression\" && jsdoc !== undefined) {\n this.validateArrowParams(node.init, jsdoc);\n }\n\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n }\n\n private validateAssignmentExpression(\n node: AssignmentExpression,\n jsdoc: ParsedJsdoc | undefined\n ): void {\n if (node.operator === \"=\" && jsdoc?.type?.type !== undefined) {\n this.validateExpression(jsdoc.type.type, jsdoc.type.raw, node.right);\n }\n }\n\n private validateArrowParams(node: FunctionNode, jsdoc: ParsedJsdoc): void {\n const typedParams = new Map(\n jsdoc.params.filter((param) => param.type !== undefined).map((param) => [param.name, param])\n );\n\n for (const param of node.params) {\n if (param.type !== \"AssignmentPattern\" || param.left.type !== \"Identifier\") {\n continue;\n }\n\n const tag = typedParams.get(param.left.name);\n if (tag?.type !== undefined) {\n this.validateExpression(tag.type, tag.raw, param.right);\n }\n }\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"AssignmentExpression\":\n this.visitExpression(node.right);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n this.visitBinaryLikeExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"TaggedTemplateExpression\":\n this.visitTaggedTemplateExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"AwaitExpression\":\n this.visitExpression(node.argument);\n return;\n case \"BooleanLiteral\":\n case \"Identifier\":\n case \"MetaProperty\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"RegexLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: FunctionNode): void {\n for (const param of node.params) {\n if (param.type === \"AssignmentPattern\") {\n this.visitExpression(param.right);\n }\n }\n\n if (node.body.type === \"BlockStatement\") {\n this.visitBlockStatement(node.body);\n } else {\n this.visitExpression(node.body);\n }\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n this.visitExpression(element.type === \"SpreadElement\" ? element.argument : element);\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitExpression(property.argument);\n } else {\n this.visitExpression(property.value);\n }\n }\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryLikeExpression(node: BinaryExpression | LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitCallExpression(node: CallExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n this.visitExpression(argument.type === \"SpreadElement\" ? argument.argument : argument);\n }\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n if (node.computed) {\n this.visitExpression(node.property);\n }\n }\n\n private visitTaggedTemplateExpression(node: TaggedTemplateExpression): void {\n this.visitExpression(node.tag);\n this.visitTemplateLiteral(node.quasi);\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private validateExpression(\n expected: SupportedType,\n declaredType: string,\n expression: Expression\n ): void {\n switch (expected.kind) {\n case \"primitive\":\n this.validatePrimitiveExpression(expected.name, declaredType, expression);\n return;\n case \"array\":\n this.validateArrayExpression(expected.element, declaredType, expression);\n return;\n case \"object\":\n this.validateObjectExpression(expected.fields, declaredType, expression);\n return;\n }\n }\n\n private validatePrimitiveExpression(\n expected: PrimitiveType,\n declaredType: string,\n expression: Expression\n ): void {\n const actual = inferExpressionKind(expression);\n if (actual !== undefined && actual !== expected) {\n this.pushMismatch(declaredType, actual, expression.span, \"value\");\n }\n }\n\n private validateArrayExpression(\n expected: PrimitiveType,\n declaredType: string,\n expression: Expression\n ): void {\n if (expression.type !== \"ArrayExpression\") {\n const actual = inferExpressionKind(expression);\n if (actual !== undefined) {\n this.pushMismatch(declaredType, actual, expression.span, \"value\");\n }\n return;\n }\n\n for (const element of expression.elements) {\n if (element.type === \"SpreadElement\") {\n continue;\n }\n\n const actual = inferExpressionKind(element);\n if (actual !== undefined && actual !== expected) {\n this.pushMismatch(declaredType, actual, element.span, \"array element\");\n }\n }\n }\n\n private validateObjectExpression(\n expectedFields: ReadonlyMap<string, PrimitiveType>,\n declaredType: string,\n expression: Expression\n ): void {\n if (expression.type !== \"ObjectExpression\") {\n const actual = inferExpressionKind(expression);\n if (actual !== undefined) {\n this.pushMismatch(declaredType, actual, expression.span, \"value\");\n }\n return;\n }\n\n for (const property of expression.properties) {\n if (property.type === \"SpreadElement\") {\n continue;\n }\n\n const fieldName = getPropertyName(property);\n const expected = fieldName === undefined ? undefined : expectedFields.get(fieldName);\n const actual = inferExpressionKind(property.value);\n if (expected !== undefined && actual !== undefined && actual !== expected) {\n this.pushMismatch(\n declaredType,\n actual,\n property.value.span,\n `value for property '${fieldName}'`\n );\n }\n }\n }\n\n private findLeadingJsdoc(nodeStartOffset: number): ParsedJsdoc | undefined {\n for (let index = this.jsdocBlocks.length - 1; index >= 0; index -= 1) {\n const block = this.jsdocBlocks[index];\n if (block.endOffset > nodeStartOffset) {\n continue;\n }\n\n if (this.source.slice(block.endOffset, nodeStartOffset).trim().length > 0) {\n return undefined;\n }\n\n return this.parseJsdocBlock(block);\n }\n\n return undefined;\n }\n\n private parseJsdocBlock(block: JsdocBlock): ParsedJsdoc {\n const cached = this.parsedJsdoc.get(block.startOffset);\n if (cached !== undefined) {\n return cached;\n }\n\n const parsed = parseJsdocBlock(this.source, block, (tagName, raw, span) => {\n this.diagnostics.push({\n code: \"AS-JSDOC-TYPE\",\n severity: \"warning\",\n message: `Could not parse JSDoc @${tagName} annotation '${raw}'.`,\n filename: this.filename,\n line: span.start.line,\n column: span.start.column,\n span\n });\n });\n\n this.parsedJsdoc.set(block.startOffset, parsed);\n return parsed;\n }\n\n private pushMismatch(\n declaredType: string,\n actualType: string,\n span: SourceSpan,\n target: string\n ): void {\n this.diagnostics.push({\n code: \"AS-JSDOC-TYPE\",\n severity: \"warning\",\n message: `JSDoc type '${declaredType}' does not match ${actualType} ${target}.`,\n filename: this.filename,\n line: span.start.line,\n column: span.start.column,\n span\n });\n }\n}\n\nfunction collectJsdocBlocks(source: string): JsdocBlock[] {\n const blocks: JsdocBlock[] = [];\n let index = 0;\n\n while (index < source.length) {\n if (source[index] !== \"/\" || source[index + 1] !== \"*\" || source[index + 2] !== \"*\") {\n index += 1;\n continue;\n }\n\n const startOffset = index;\n index += 3;\n while (index < source.length && (source[index] !== \"*\" || source[index + 1] !== \"/\")) {\n index += 1;\n }\n\n if (index >= source.length) {\n break;\n }\n\n blocks.push({\n startOffset,\n endOffset: index + 2\n });\n index += 2;\n }\n\n return blocks;\n}\n\nfunction parseJsdocBlock(\n source: string,\n block: JsdocBlock,\n onParseError: (tagName: \"param\" | \"type\", raw: string, span: SourceSpan) => void\n): ParsedJsdoc {\n const parsed: ParsedJsdoc = {\n params: []\n };\n let index = block.startOffset + 3;\n const end = block.endOffset - 2;\n\n while (index < end) {\n if (source[index] !== \"@\") {\n index += 1;\n continue;\n }\n\n const tagStart = index;\n index += 1;\n const tagNameStart = index;\n while (index < end && isIdentifierPart(source[index])) {\n index += 1;\n }\n\n const tagName = source.slice(tagNameStart, index);\n if (tagName !== \"param\" && tagName !== \"type\") {\n index = skipToNextTag(source, index, end);\n continue;\n }\n\n index = skipWhitespace(source, index, end);\n const annotation = readBracedAnnotation(source, index, end);\n if (annotation === undefined) {\n onParseError(tagName, \"\", createSpanFromOffsets(source, tagStart, index));\n index = skipToNextTag(source, index, end);\n continue;\n }\n\n const trimmed = trimAnnotation(source, annotation.contentStart, annotation.contentEnd);\n const type = parseSupportedType(source.slice(trimmed.startOffset, trimmed.endOffset));\n if (type.status === \"invalid\") {\n onParseError(\n tagName,\n source.slice(trimmed.startOffset, trimmed.endOffset),\n createSpanFromOffsets(source, trimmed.startOffset, trimmed.endOffset)\n );\n index = annotation.endOffset;\n continue;\n }\n\n index = annotation.endOffset;\n if (tagName === \"type\") {\n parsed.type = {\n kind: \"type\",\n raw: source.slice(trimmed.startOffset, trimmed.endOffset),\n span: createSpanFromOffsets(source, trimmed.startOffset, trimmed.endOffset),\n type: type.status === \"supported\" ? type.type : undefined\n };\n continue;\n }\n\n index = skipWhitespace(source, index, end);\n const paramNameStart = index;\n while (index < end && isIdentifierPart(source[index])) {\n index += 1;\n }\n const paramName = source.slice(paramNameStart, index);\n if (paramName.length === 0) {\n onParseError(\n \"param\",\n source.slice(trimmed.startOffset, trimmed.endOffset),\n createSpanFromOffsets(source, trimmed.startOffset, trimmed.endOffset)\n );\n continue;\n }\n\n parsed.params.push({\n kind: \"param\",\n name: paramName,\n raw: source.slice(trimmed.startOffset, trimmed.endOffset),\n span: createSpanFromOffsets(source, trimmed.startOffset, trimmed.endOffset),\n type: type.status === \"supported\" ? type.type : undefined\n });\n }\n\n return parsed;\n}\n\nfunction readBracedAnnotation(\n source: string,\n startOffset: number,\n endOffset: number\n): { contentEnd: number; contentStart: number; endOffset: number } | undefined {\n if (source[startOffset] !== \"{\") {\n return undefined;\n }\n\n let depth = 0;\n for (let index = startOffset; index < endOffset; index += 1) {\n if (source[index] === \"{\") {\n depth += 1;\n } else if (source[index] === \"}\") {\n depth -= 1;\n if (depth === 0) {\n return {\n contentStart: startOffset + 1,\n contentEnd: index,\n endOffset: index + 1\n };\n }\n }\n }\n\n return undefined;\n}\n\nfunction parseSupportedType(source: string): ParsedType {\n if (isPrimitiveType(source)) {\n return {\n status: \"supported\",\n type: {\n kind: \"primitive\",\n name: source\n }\n };\n }\n\n if (source.endsWith(\"[]\")) {\n const element = source.slice(0, -2);\n return isPrimitiveType(element)\n ? {\n status: \"supported\",\n type: {\n kind: \"array\",\n element\n }\n }\n : { status: \"unsupported\" };\n }\n\n if (source.startsWith(\"{\") && source.endsWith(\"}\")) {\n const fields = parseObjectFields(source.slice(1, -1));\n return fields.status !== \"supported\"\n ? { status: fields.status }\n : {\n status: \"supported\",\n type: {\n kind: \"object\",\n fields: fields.fields\n }\n };\n }\n\n if (source.includes(\"<\") || source.includes(\">\") || source.includes(\"|\")) {\n return { status: \"unsupported\" };\n }\n\n return source.includes(\" \") ? { status: \"invalid\" } : { status: \"unsupported\" };\n}\n\nfunction parseObjectFields(source: string): ParsedObjectFields {\n const fields = new Map<string, PrimitiveType>();\n let index = 0;\n\n while (index < source.length) {\n index = skipWhitespace(source, index, source.length);\n if (index >= source.length) {\n return {\n fields,\n status: \"supported\"\n };\n }\n\n const nameStart = index;\n if (!isIdentifierStart(source[index])) {\n return { status: \"invalid\" };\n }\n\n index += 1;\n while (index < source.length && isIdentifierPart(source[index])) {\n index += 1;\n }\n\n const fieldName = source.slice(nameStart, index);\n index = skipWhitespace(source, index, source.length);\n if (source[index] === \"?\") {\n index += 1;\n index = skipWhitespace(source, index, source.length);\n }\n if (source[index] !== \":\") {\n return { status: \"invalid\" };\n }\n\n index += 1;\n index = skipWhitespace(source, index, source.length);\n const typeStart = index;\n while (index < source.length && source[index] !== \",\" && source[index] !== \";\") {\n index += 1;\n }\n\n const trimmed = trimAnnotation(source, typeStart, index);\n const fieldType = source.slice(trimmed.startOffset, trimmed.endOffset);\n if (!isPrimitiveType(fieldType)) {\n return classifyObjectFieldType(fieldType);\n }\n\n fields.set(fieldName, fieldType);\n index = skipWhitespace(source, index, source.length);\n if (index >= source.length) {\n return {\n fields,\n status: \"supported\"\n };\n }\n if (source[index] !== \",\" && source[index] !== \";\") {\n return { status: \"invalid\" };\n }\n index += 1;\n }\n\n return {\n fields,\n status: \"supported\"\n };\n}\n\nfunction classifyObjectFieldType(source: string): ParsedObjectFields {\n if (source.length === 0) {\n return { status: \"invalid\" };\n }\n\n for (const char of source) {\n if (\n char === \"<\" ||\n char === \">\" ||\n char === \"[\" ||\n char === \"]\" ||\n char === \"{\" ||\n char === \"}\" ||\n char === \"|\" ||\n char === \"&\" ||\n char === \"(\" ||\n char === \")\" ||\n char === \"?\"\n ) {\n return { status: \"unsupported\" };\n }\n }\n\n return source.includes(\" \") || source.includes(\":\")\n ? { status: \"invalid\" }\n : { status: \"unsupported\" };\n}\n\nfunction inferExpressionKind(\n expression: Expression\n): PrimitiveType | \"array\" | \"object\" | undefined {\n switch (expression.type) {\n case \"ArrayExpression\":\n return \"array\";\n case \"BooleanLiteral\":\n return \"boolean\";\n case \"NullLiteral\":\n return \"null\";\n case \"NumericLiteral\":\n return \"number\";\n case \"ObjectExpression\":\n return \"object\";\n case \"StringLiteral\":\n return \"string\";\n case \"TemplateLiteral\":\n return expression.expressions.length === 0 ? \"string\" : undefined;\n case \"UndefinedLiteral\":\n return \"undefined\";\n case \"UnaryExpression\":\n if (\n (expression.operator === \"-\" || expression.operator === \"+\") &&\n expression.argument.type === \"NumericLiteral\"\n ) {\n return \"number\";\n }\n if (expression.operator === \"!\") {\n return \"boolean\";\n }\n return undefined;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n case \"AssignmentExpression\":\n case \"AwaitExpression\":\n case \"BinaryExpression\":\n case \"CallExpression\":\n case \"ConditionalExpression\":\n case \"Identifier\":\n case \"LogicalExpression\":\n case \"MemberExpression\":\n case \"MetaProperty\":\n case \"RegexLiteral\":\n case \"TaggedTemplateExpression\":\n return undefined;\n }\n}\n\nfunction getPropertyName(property: Property): string | undefined {\n if (property.computed) {\n return undefined;\n }\n\n if (property.key.type === \"Identifier\") {\n return property.key.name;\n }\n\n if (property.key.type === \"StringLiteral\") {\n return property.key.value;\n }\n\n return undefined;\n}\n\nfunction trimAnnotation(\n source: string,\n startOffset: number,\n endOffset: number\n): { endOffset: number; startOffset: number } {\n let start = startOffset;\n let end = endOffset;\n\n while (start < end && isWhitespace(source[start])) {\n start += 1;\n }\n while (end > start && isWhitespace(source[end - 1])) {\n end -= 1;\n }\n\n return {\n startOffset: start,\n endOffset: end\n };\n}\n\nfunction skipWhitespace(source: string, startOffset: number, endOffset: number): number {\n let index = startOffset;\n while (index < endOffset && isWhitespace(source[index])) {\n index += 1;\n }\n return index;\n}\n\nfunction skipToNextTag(source: string, startOffset: number, endOffset: number): number {\n let index = startOffset;\n while (index < endOffset && source[index] !== \"@\") {\n index += 1;\n }\n return index;\n}\n\nfunction isPrimitiveType(value: string): value is PrimitiveType {\n return (\n value === \"boolean\" ||\n value === \"null\" ||\n value === \"number\" ||\n value === \"string\" ||\n value === \"undefined\"\n );\n}\n\nfunction isIdentifierStart(value: string | undefined): boolean {\n return (\n value !== undefined &&\n ((value >= \"A\" && value <= \"Z\") ||\n (value >= \"a\" && value <= \"z\") ||\n value === \"_\" ||\n value === \"$\")\n );\n}\n\nfunction isIdentifierPart(value: string | undefined): boolean {\n return isIdentifierStart(value) || (value !== undefined && value >= \"0\" && value <= \"9\");\n}\n\nfunction isWhitespace(value: string | undefined): boolean {\n return value === \" \" || value === \"\\n\" || value === \"\\r\" || value === \"\\t\";\n}\n\nfunction createSpanFromOffsets(source: string, startOffset: number, endOffset: number): SourceSpan {\n return {\n start: positionAt(source, startOffset),\n end: positionAt(source, endOffset)\n };\n}\n\nfunction positionAt(source: string, offset: number): SourceSpan[\"start\"] {\n let line = 1;\n let column = 1;\n\n for (let index = 0; index < offset; index += 1) {\n if (source[index] === \"\\n\") {\n line += 1;\n column = 1;\n } else {\n column += 1;\n }\n }\n\n return {\n line,\n column,\n offset\n };\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type ArrayPattern,\n type FunctionNode,\n type AssignmentExpression,\n type AssignmentPattern,\n type AssignmentProperty,\n type BinaryExpression,\n type BlockStatement,\n type CallExpression,\n type CatchClause,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type IfStatement,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type ObjectPattern,\n type PatternTarget,\n type Property,\n type RestElement,\n type SourceSpan,\n type Statement,\n type TaggedTemplateExpression,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\n\nexport type Diagnostic = {\n code: \"AS-LARGE-LITERAL\";\n severity: \"warning\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\nconst DEFAULT_LARGE_LITERAL_THRESHOLD = 1000;\n\nexport function AS_LARGE_LITERAL(\n source: string,\n options: { filename?: string; largeLiteralThreshold?: number } = {}\n): Diagnostic[] {\n return new ASLargeLiteralScanner(\n options.filename ?? \"<input>\",\n options.largeLiteralThreshold ?? DEFAULT_LARGE_LITERAL_THRESHOLD\n ).scan(source);\n}\n\nclass ASLargeLiteralScanner {\n private readonly diagnostics: Diagnostic[] = [];\n\n constructor(\n private readonly filename: string,\n private readonly threshold: number\n ) {}\n\n scan(source: string): Diagnostic[] {\n this.visitModule(parseModule(source, this.filename));\n return this.diagnostics;\n }\n\n private visitModule(node: Module): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunction(node);\n return;\n case \"BlockStatement\":\n this.visitBlockStatement(node);\n return;\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitBlockStatement(node: BlockStatement): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n this.visitStatement(node.body);\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n } else {\n this.visitAssignmentTarget(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitBlockStatement(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitBlockStatement(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n if (node.param !== undefined) {\n this.visitBindingPattern(node.param);\n }\n this.visitBlockStatement(node.body);\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n this.visitBindingPattern(node.id);\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"AwaitExpression\":\n this.visitExpression(node.argument);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n this.visitBinaryLikeExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"TaggedTemplateExpression\":\n this.visitTaggedTemplateExpression(node);\n return;\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"StringLiteral\":\n case \"RegexLiteral\":\n case \"MetaProperty\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: FunctionNode): void {\n for (const parameter of node.params) {\n this.visitBindingElement(parameter);\n }\n if (node.body.type === \"BlockStatement\") {\n this.visitBlockStatement(node.body);\n return;\n }\n\n this.visitExpression(node.body);\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n const staticElementCount = node.elements.filter(\n (element) => element.type !== \"SpreadElement\"\n ).length;\n if (staticElementCount > this.threshold) {\n this.report(node, createArrayMessage(staticElementCount, this.threshold));\n }\n\n for (const element of node.elements) {\n if (element.type === \"SpreadElement\") {\n this.visitExpression(element.argument);\n } else {\n this.visitExpression(element);\n }\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n const keyCount = node.properties.filter((property) => property.type !== \"SpreadElement\").length;\n if (keyCount > this.threshold) {\n this.report(node, createObjectMessage(keyCount, this.threshold));\n }\n\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitExpression(property.argument);\n } else {\n this.visitProperty(property);\n }\n }\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitExpression(node.value);\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryLikeExpression(node: BinaryExpression | LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n if (node.computed) {\n this.visitExpression(node.property);\n }\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitExpression(argument.argument);\n } else {\n this.visitExpression(argument);\n }\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitTaggedTemplateExpression(node: TaggedTemplateExpression): void {\n this.visitExpression(node.tag);\n this.visitTemplateLiteral(node.quasi);\n }\n\n private visitBindingElement(\n node: AssignmentPattern | ArrayPattern | ObjectPattern | RestElement | PatternTarget\n ): void {\n if (node.type === \"RestElement\") {\n this.visitBindingPattern(node.argument);\n return;\n }\n this.visitBindingPattern(node);\n }\n\n private visitBindingPattern(\n node: AssignmentPattern | ArrayPattern | ObjectPattern | PatternTarget\n ): void {\n switch (node.type) {\n case \"Identifier\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentPattern\":\n this.visitAssignmentPattern(node);\n return;\n case \"ArrayPattern\":\n this.visitArrayPattern(node);\n return;\n case \"ObjectPattern\":\n this.visitObjectPattern(node);\n return;\n }\n }\n\n private visitAssignmentPattern(node: AssignmentPattern): void {\n this.visitBindingPattern(node.left);\n this.visitExpression(node.right);\n }\n\n private visitArrayPattern(node: ArrayPattern): void {\n for (const element of node.elements) {\n if (element === null) {\n continue;\n }\n this.visitBindingElement(element);\n }\n }\n\n private visitObjectPattern(node: ObjectPattern): void {\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitBindingPattern(property.argument);\n continue;\n }\n this.visitAssignmentProperty(property);\n }\n }\n\n private visitAssignmentProperty(node: AssignmentProperty): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitBindingPattern(node.value);\n }\n\n private visitAssignmentTarget(node: AssignmentExpression[\"left\"]): void {\n if (node.type === \"MetaProperty\") {\n return;\n }\n this.visitBindingPattern(node);\n }\n\n private report(node: ArrayExpression | ObjectExpression, message: string): void {\n this.diagnostics.push({\n code: \"AS-LARGE-LITERAL\",\n severity: \"warning\",\n message,\n filename: this.filename,\n line: node.span.start.line,\n column: node.span.start.column,\n span: node.span\n });\n }\n}\n\nfunction createArrayMessage(count: number, threshold: number): string {\n return `Array literal has ${count} static elements, exceeding the configured limit of ${threshold}.`;\n}\n\nfunction createObjectMessage(count: number, threshold: number): string {\n return `Object literal has ${count} static keys, exceeding the configured limit of ${threshold}.`;\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type ArrayPattern,\n type ArrowFunctionExpression,\n type FunctionExpression,\n type FunctionDeclaration,\n type AssignmentExpression,\n type AssignmentPattern,\n type AssignmentProperty,\n type BinaryExpression,\n type BlockStatement,\n type CallExpression,\n type CatchClause,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type IfStatement,\n type Identifier,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type ObjectPattern,\n type PatternTarget,\n type Property,\n type RestElement,\n type ReturnStatement,\n type SourceSpan,\n type Statement,\n type TaggedTemplateExpression,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\n\nexport type Diagnostic = {\n code: \"AS-MISSING-ASYNC\";\n severity: \"error\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n fix: {\n range: readonly [number, number];\n replacement: string;\n };\n};\n\nexport const AS_MISSING_ASYNC_MESSAGE = \"Functions that contain await must be marked async.\";\n\nexport function AS_MISSING_ASYNC(\n source: string,\n options: { filename?: string } = {}\n): Diagnostic[] {\n return new ASMissingAsyncScanner(options.filename ?? \"<input>\").scan(source);\n}\n\nexport function fixASMissingAsync(source: string, options: { filename?: string } = {}): string {\n return AS_MISSING_ASYNC(source, options)\n .sort((left, right) => right.span.start.offset - left.span.start.offset)\n .reduce((result, diagnostic) => {\n const offset = diagnostic.span.start.offset;\n return `${result.slice(0, offset)}async ${result.slice(offset)}`;\n }, source);\n}\n\nclass ASMissingAsyncScanner {\n private readonly diagnostics: Diagnostic[] = [];\n\n constructor(private readonly filename: string) {}\n\n scan(source: string): Diagnostic[] {\n this.visitModule(parseModule(source, this.filename));\n return this.diagnostics;\n }\n\n private visitModule(node: Module): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitFunctionExpression(node);\n return;\n case \"BlockStatement\":\n this.visitBlockStatement(node);\n return;\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n this.visitReturnStatement(node);\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitBlockStatement(node: BlockStatement): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n\n this.visitStatement(node.body);\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitBlockStatement(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitBlockStatement(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n if (node.param !== undefined) {\n this.visitBindingPattern(node.param);\n }\n this.visitBlockStatement(node.body);\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n this.visitBindingPattern(node.id);\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n }\n\n private visitReturnStatement(node: ReturnStatement): void {\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"FunctionExpression\":\n this.visitFunctionExpression(node);\n return;\n case \"AwaitExpression\":\n this.visitExpression(node.argument);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n this.visitBinaryLikeExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"TaggedTemplateExpression\":\n this.visitTaggedTemplateExpression(node);\n return;\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"MetaProperty\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"RegexLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: ArrowFunctionExpression): void {\n if (!node.async && bodyContainsAwait(node.body)) {\n this.report(node.span);\n }\n\n for (const param of node.params) {\n this.visitBindingElement(param);\n }\n\n if (node.body.type === \"BlockStatement\") {\n this.visitBlockStatement(node.body);\n return;\n }\n\n this.visitExpression(node.body);\n }\n\n private visitFunctionExpression(node: FunctionExpression | FunctionDeclaration): void {\n if (!node.async && bodyContainsAwait(node.body)) {\n this.report(node.span);\n }\n\n for (const param of node.params) {\n this.visitBindingElement(param);\n }\n this.visitBlockStatement(node.body);\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element.type === \"SpreadElement\") {\n this.visitExpression(element.argument);\n continue;\n }\n\n this.visitExpression(element);\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitExpression(property.argument);\n continue;\n }\n\n this.visitProperty(property);\n }\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitExpression(node.value);\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryLikeExpression(node: BinaryExpression | LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n if (node.computed) {\n this.visitExpression(node.property);\n }\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitExpression(argument.argument);\n continue;\n }\n\n this.visitExpression(argument);\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitTaggedTemplateExpression(node: TaggedTemplateExpression): void {\n this.visitExpression(node.tag);\n this.visitTemplateLiteral(node.quasi);\n }\n\n private visitAssignmentTarget(node: AssignmentExpression[\"left\"]): void {\n switch (node.type) {\n case \"Identifier\":\n case \"MetaProperty\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n this.visitBindingPattern(node);\n return;\n }\n }\n\n private visitBindingElement(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n ): void {\n if (node.type === \"RestElement\") {\n this.visitAssignmentTarget(node.argument);\n return;\n }\n\n this.visitBindingPattern(node);\n }\n\n private visitBindingPattern(\n node: AssignmentPattern | ArrayPattern | Identifier | MemberExpression | ObjectPattern\n ): void {\n switch (node.type) {\n case \"Identifier\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentPattern\":\n this.visitBindingPattern(node.left);\n this.visitExpression(node.right);\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element === null) {\n continue;\n }\n this.visitBindingElement(element);\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitAssignmentTarget(property.argument);\n continue;\n }\n this.visitAssignmentProperty(property);\n }\n return;\n }\n }\n\n private visitAssignmentProperty(node: AssignmentProperty): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitBindingPattern(node.value);\n }\n\n private report(span: SourceSpan): void {\n this.diagnostics.push({\n code: \"AS-MISSING-ASYNC\",\n severity: \"error\",\n message: AS_MISSING_ASYNC_MESSAGE,\n filename: this.filename,\n line: span.start.line,\n column: span.start.column,\n span,\n fix: {\n range: [span.start.offset, span.start.offset],\n replacement: \"async \"\n }\n });\n }\n}\n\nfunction bodyContainsAwait(node: BlockStatement | Expression): boolean {\n return node.type === \"BlockStatement\"\n ? statementListContainsAwait(node.body)\n : expressionContainsAwait(node);\n}\n\nfunction statementListContainsAwait(statements: readonly Statement[]): boolean {\n return statements.some(statementContainsAwait);\n}\n\nfunction statementContainsAwait(node: Statement): boolean {\n switch (node.type) {\n case \"BlockStatement\":\n return statementListContainsAwait(node.body);\n case \"ExpressionStatement\":\n return expressionContainsAwait(node.expression);\n case \"IfStatement\":\n return (\n expressionContainsAwait(node.test) ||\n statementContainsAwait(node.consequent) ||\n (node.alternate !== undefined && statementContainsAwait(node.alternate))\n );\n case \"ForStatement\":\n return (\n (node.init?.type === \"VariableDeclaration\"\n ? variableDeclarationContainsAwait(node.init)\n : node.init !== undefined && expressionContainsAwait(node.init)) ||\n (node.test !== undefined && expressionContainsAwait(node.test)) ||\n (node.update !== undefined && expressionContainsAwait(node.update)) ||\n statementContainsAwait(node.body)\n );\n case \"ForInStatement\":\n case \"ForOfStatement\":\n return (\n (node.left.type === \"VariableDeclaration\" && variableDeclarationContainsAwait(node.left)) ||\n (node.left.type !== \"VariableDeclaration\" && assignmentTargetContainsAwait(node.left)) ||\n expressionContainsAwait(node.right) ||\n statementContainsAwait(node.body)\n );\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n return expressionContainsAwait(node.test) || statementContainsAwait(node.body);\n case \"TryStatement\":\n return (\n statementListContainsAwait(node.block.body) ||\n (node.handler !== undefined && catchClauseContainsAwait(node.handler)) ||\n (node.finalizer !== undefined && statementListContainsAwait(node.finalizer.body))\n );\n case \"SwitchStatement\":\n return (\n expressionContainsAwait(node.discriminant) ||\n node.cases.some(\n (switchCase) =>\n (switchCase.test !== undefined && expressionContainsAwait(switchCase.test)) ||\n statementListContainsAwait(switchCase.consequent)\n )\n );\n case \"VariableDeclaration\":\n return variableDeclarationContainsAwait(node);\n case \"ReturnStatement\":\n return node.argument !== undefined && expressionContainsAwait(node.argument);\n case \"ThrowStatement\":\n return expressionContainsAwait(node.argument);\n case \"ExportNamedDeclaration\":\n return variableDeclarationContainsAwait(node.declaration);\n case \"ExportDefaultDeclaration\":\n return expressionContainsAwait(node.declaration);\n case \"ImportDeclaration\":\n case \"FunctionDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n case \"EmptyStatement\":\n return false;\n }\n}\n\nfunction catchClauseContainsAwait(node: CatchClause): boolean {\n return (\n (node.param !== undefined && bindingPatternContainsAwait(node.param)) ||\n statementListContainsAwait(node.body.body)\n );\n}\n\nfunction variableDeclarationContainsAwait(node: VariableDeclaration): boolean {\n return node.declarations.some((declarator) => {\n return (\n bindingPatternContainsAwait(declarator.id) ||\n (declarator.init !== undefined && expressionContainsAwait(declarator.init))\n );\n });\n}\n\nfunction expressionContainsAwait(node: Expression): boolean {\n switch (node.type) {\n case \"AwaitExpression\":\n return true;\n case \"YieldExpression\":\n return node.argument !== undefined && expressionContainsAwait(node.argument);\n case \"ArrowFunctionExpression\":\n case \"FunctionExpression\":\n return false;\n case \"ArrayExpression\":\n return node.elements.some((element) => {\n return element.type === \"SpreadElement\"\n ? expressionContainsAwait(element.argument)\n : expressionContainsAwait(element);\n });\n case \"ObjectExpression\":\n return objectExpressionContainsAwait(node);\n case \"UnaryExpression\":\n case \"UpdateExpression\":\n return expressionContainsAwait(node.argument);\n case \"SequenceExpression\":\n return node.expressions.some(expressionContainsAwait);\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n return expressionContainsAwait(node.left) || expressionContainsAwait(node.right);\n case \"ConditionalExpression\":\n return (\n expressionContainsAwait(node.test) ||\n expressionContainsAwait(node.consequent) ||\n expressionContainsAwait(node.alternate)\n );\n case \"MemberExpression\":\n return (\n expressionContainsAwait(node.object) ||\n (node.computed && expressionContainsAwait(node.property))\n );\n case \"AssignmentExpression\":\n return assignmentTargetContainsAwait(node.left) || expressionContainsAwait(node.right);\n case \"CallExpression\":\n case \"NewExpression\":\n return (\n expressionContainsAwait(node.callee) ||\n node.arguments.some((argument) => {\n return argument.type === \"SpreadElement\"\n ? expressionContainsAwait(argument.argument)\n : expressionContainsAwait(argument);\n })\n );\n case \"TemplateLiteral\":\n return node.expressions.some(expressionContainsAwait);\n case \"TaggedTemplateExpression\":\n return expressionContainsAwait(node.tag) || expressionContainsAwait(node.quasi);\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"MetaProperty\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"RegexLiteral\":\n case \"StringLiteral\":\n case \"ThisExpression\":\n case \"UndefinedLiteral\":\n return false;\n }\n}\n\nfunction objectExpressionContainsAwait(node: ObjectExpression): boolean {\n return node.properties.some((property) => {\n if (property.type === \"SpreadElement\") {\n return expressionContainsAwait(property.argument);\n }\n\n return (\n (property.computed && expressionContainsAwait(property.key)) ||\n expressionContainsAwait(property.value)\n );\n });\n}\n\nfunction assignmentTargetContainsAwait(node: AssignmentExpression[\"left\"]): boolean {\n switch (node.type) {\n case \"Identifier\":\n case \"MetaProperty\":\n return false;\n case \"MemberExpression\":\n return expressionContainsAwait(node);\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n return bindingPatternContainsAwait(node);\n }\n}\n\nfunction bindingElementContainsAwait(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n): boolean {\n if (node.type === \"RestElement\") {\n return patternTargetContainsAwait(node.argument);\n }\n\n return bindingPatternContainsAwait(node);\n}\n\nfunction bindingPatternContainsAwait(\n node: AssignmentPattern | ArrayPattern | Identifier | MemberExpression | ObjectPattern\n): boolean {\n switch (node.type) {\n case \"Identifier\":\n return false;\n case \"MemberExpression\":\n return expressionContainsAwait(node);\n case \"AssignmentPattern\":\n return bindingPatternContainsAwait(node.left) || expressionContainsAwait(node.right);\n case \"ArrayPattern\":\n return node.elements.some((element) => {\n return element !== null && bindingElementContainsAwait(element);\n });\n case \"ObjectPattern\":\n return node.properties.some(assignmentPropertyContainsAwait);\n }\n}\n\nfunction assignmentPropertyContainsAwait(node: AssignmentProperty | RestElement): boolean {\n if (node.type === \"RestElement\") {\n return patternTargetContainsAwait(node.argument);\n }\n\n return (\n (node.computed && expressionContainsAwait(node.key)) || bindingPatternContainsAwait(node.value)\n );\n}\n\nfunction patternTargetContainsAwait(node: PatternTarget): boolean {\n switch (node.type) {\n case \"Identifier\":\n return false;\n case \"MemberExpression\":\n return expressionContainsAwait(node);\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n return bindingPatternContainsAwait(node);\n }\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type ArrayPattern,\n type FunctionNode,\n type AssignmentExpression,\n type AssignmentPattern,\n type AssignmentProperty,\n type BinaryExpression,\n type BlockStatement,\n type CallExpression,\n type CatchClause,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type Identifier,\n type IfStatement,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type ObjectPattern,\n type PatternTarget,\n type Property,\n type RestElement,\n type ReturnStatement,\n type SourceSpan,\n type Statement,\n type TaggedTemplateExpression,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\n\nexport type Diagnostic = {\n code: \"AS-MUTATING-FROZEN\";\n severity: \"warning\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\ntype FrozenState = \"frozen\" | \"unknown\";\ntype Scope = Map<string, FrozenState>;\n\nconst MUTATING_ARRAY_METHODS = new Set([\n \"copyWithin\",\n \"fill\",\n \"pop\",\n \"push\",\n \"reverse\",\n \"shift\",\n \"sort\",\n \"splice\",\n \"unshift\"\n]);\n\nexport function AS_MUTATING_FROZEN(\n source: string,\n options: { filename?: string } = {}\n): Diagnostic[] {\n return new ASMutatingFrozenScanner(options.filename ?? \"<input>\").scan(source);\n}\n\nclass ASMutatingFrozenScanner {\n private readonly diagnostics: Diagnostic[] = [];\n private readonly scopes: Scope[] = [];\n\n constructor(private readonly filename: string) {}\n\n scan(source: string): Diagnostic[] {\n this.visitModule(parseModule(source, this.filename));\n return this.diagnostics;\n }\n\n private visitModule(node: Module): void {\n this.withScope(this.collectStatementBindings(node.body), () => {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n });\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunction(node);\n return;\n case \"BlockStatement\":\n this.visitBlockStatement(node);\n return;\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n this.visitReturnStatement(node);\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitBlockStatement(node: BlockStatement): void {\n this.withScope(this.collectStatementBindings(node.body), () => {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n });\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n const bindings =\n node.init?.type === \"VariableDeclaration\" ? this.collectDeclarationBindings(node.init) : [];\n\n this.withScope(bindings, () => {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n\n this.visitStatement(node.body);\n });\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n const bindings =\n node.left.type === \"VariableDeclaration\" ? this.collectDeclarationBindings(node.left) : [];\n\n this.withScope(bindings, () => {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n } else {\n this.visitAssignmentTarget(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n });\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitBlockStatement(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitBlockStatement(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n const bindings =\n node.param === undefined\n ? []\n : this.createUnknownBindings(this.collectPatternBindings(node.param));\n\n this.withScope(bindings, () => {\n this.visitBlockStatement(node.body);\n });\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n\n if (node.id.type !== \"Identifier\") {\n this.visitBindingPattern(node.id);\n return;\n }\n\n this.setBinding(\n node.id.name,\n isImmutableArrayOrigin(\n node.init,\n (name) => this.lookup(name),\n (name) => this.isBound(name)\n )\n );\n }\n\n private visitReturnStatement(node: ReturnStatement): void {\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"AwaitExpression\":\n this.visitExpression(node.argument);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n this.visitBinaryLikeExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"TaggedTemplateExpression\":\n this.visitTaggedTemplateExpression(node);\n return;\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"MetaProperty\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"RegexLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: FunctionNode): void {\n this.withScope(this.collectArrowFunctionBindings(node), () => {\n if (node.body.type === \"BlockStatement\") {\n this.visitBlockStatement(node.body);\n return;\n }\n\n this.visitExpression(node.body);\n });\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element.type === \"SpreadElement\") {\n this.visitExpression(element.argument);\n continue;\n }\n\n this.visitExpression(element);\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitExpression(property.argument);\n continue;\n }\n\n this.visitProperty(property);\n }\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitExpression(node.value);\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryLikeExpression(node: BinaryExpression | LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n if (node.computed) {\n this.visitExpression(node.property);\n }\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n\n if (node.left.type === \"Identifier\" && node.operator === \"=\") {\n this.setBinding(\n node.left.name,\n isImmutableArrayOrigin(\n node.right,\n (name) => this.lookup(name),\n (name) => this.isBound(name)\n )\n );\n }\n }\n\n private visitCallExpression(node: CallExpression): void {\n if (\n isMutatingFrozenCall(\n node,\n (name) => this.lookup(name),\n (name) => this.isBound(name)\n )\n ) {\n const methodName = getCalledMethodName(node);\n this.report(node.span, methodName ?? \"method\");\n }\n\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitExpression(argument.argument);\n continue;\n }\n\n this.visitExpression(argument);\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitTaggedTemplateExpression(node: TaggedTemplateExpression): void {\n this.visitExpression(node.tag);\n this.visitTemplateLiteral(node.quasi);\n }\n\n private visitAssignmentTarget(node: AssignmentExpression[\"left\"] | PatternTarget): void {\n switch (node.type) {\n case \"Identifier\":\n case \"MetaProperty\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n this.visitBindingPattern(node);\n return;\n }\n }\n\n private visitBindingPattern(node: ArrayPattern | Identifier | ObjectPattern): void {\n switch (node.type) {\n case \"Identifier\":\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element === null) {\n continue;\n }\n\n this.visitBindingElement(element);\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitBindingElement(property);\n continue;\n }\n\n this.visitAssignmentProperty(property);\n }\n return;\n }\n }\n\n private visitAssignmentProperty(node: AssignmentProperty): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitBindingElement(node.value);\n }\n\n private visitBindingElement(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n return;\n case \"RestElement\":\n this.visitAssignmentTarget(node.argument);\n return;\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n case \"Identifier\":\n this.visitBindingPattern(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n }\n }\n\n private collectStatementBindings(statements: readonly Statement[]): Array<[string, FrozenState]> {\n return statements.flatMap((statement) => {\n if (statement.type === \"VariableDeclaration\") {\n return this.collectDeclarationBindings(statement);\n }\n\n if (statement.type === \"ExportNamedDeclaration\") {\n return this.collectDeclarationBindings(statement.declaration);\n }\n\n if (statement.type === \"ImportDeclaration\") {\n return statement.specifiers.map((specifier): [string, FrozenState] => [\n specifier.local.name,\n \"unknown\"\n ]);\n }\n\n return [];\n });\n }\n\n private collectDeclarationBindings(node: VariableDeclaration): Array<[string, FrozenState]> {\n return node.declarations.flatMap((declarator) =>\n this.createUnknownBindings(this.collectPatternBindings(declarator.id))\n );\n }\n\n private collectArrowFunctionBindings(node: FunctionNode): Array<[string, FrozenState]> {\n return node.params.flatMap((param) =>\n this.createUnknownBindings(this.collectBindingElementNames(param))\n );\n }\n\n private createUnknownBindings(names: readonly string[]): Array<[string, FrozenState]> {\n return names.map((name) => [name, \"unknown\"]);\n }\n\n private collectPatternBindings(node: ArrayPattern | Identifier | ObjectPattern): string[] {\n switch (node.type) {\n case \"Identifier\":\n return [node.name];\n case \"ArrayPattern\":\n return node.elements.flatMap((element) =>\n element === null ? [] : this.collectBindingElementNames(element)\n );\n case \"ObjectPattern\":\n return node.properties.flatMap((property) =>\n property.type === \"RestElement\"\n ? this.collectBindingElementNames(property)\n : this.collectBindingElementNames(property.value)\n );\n }\n }\n\n private collectBindingElementNames(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n ): string[] {\n switch (node.type) {\n case \"Identifier\":\n return [node.name];\n case \"AssignmentPattern\":\n return this.collectBindingElementNames(node.left);\n case \"RestElement\":\n return this.collectBindingElementNames(node.argument);\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n return this.collectPatternBindings(node);\n case \"MemberExpression\":\n return [];\n }\n }\n\n private withScope(bindings: Array<[string, FrozenState]>, callback: () => void): void {\n this.scopes.push(new Map(bindings));\n try {\n callback();\n } finally {\n this.scopes.pop();\n }\n }\n\n private lookup(name: string): FrozenState {\n for (let index = this.scopes.length - 1; index >= 0; index -= 1) {\n const binding = this.scopes[index].get(name);\n if (binding !== undefined) {\n return binding;\n }\n }\n\n return \"unknown\";\n }\n\n private isBound(name: string): boolean {\n return this.scopes.some((scope) => scope.has(name));\n }\n\n private setBinding(name: string, state: FrozenState): void {\n for (let index = this.scopes.length - 1; index >= 0; index -= 1) {\n const scope = this.scopes[index];\n if (scope.has(name)) {\n scope.set(name, state);\n return;\n }\n }\n }\n\n private report(span: SourceSpan, methodName: string): void {\n this.diagnostics.push({\n code: \"AS-MUTATING-FROZEN\",\n severity: \"warning\",\n message: `Mutating array method '${methodName}' cannot be called on an immutable array.`,\n filename: this.filename,\n line: span.start.line,\n column: span.start.column,\n span\n });\n }\n}\n\nfunction isMutatingFrozenCall(\n node: CallExpression,\n lookup: (name: string) => FrozenState,\n isBound: (name: string) => boolean\n): boolean {\n const methodName = getCalledMethodName(node);\n\n return (\n methodName !== undefined &&\n MUTATING_ARRAY_METHODS.has(methodName) &&\n node.callee.type === \"MemberExpression\" &&\n isImmutableArrayOrigin(node.callee.object, lookup, isBound) === \"frozen\"\n );\n}\n\nfunction getCalledMethodName(node: CallExpression): string | undefined {\n if (node.callee.type !== \"MemberExpression\") {\n return undefined;\n }\n\n if (!node.callee.computed) {\n return node.callee.property.type === \"Identifier\" ? node.callee.property.name : undefined;\n }\n\n return node.callee.property.type === \"StringLiteral\" ? node.callee.property.value : undefined;\n}\n\nfunction isImmutableArrayOrigin(\n node: Expression | undefined,\n lookup: (name: string) => FrozenState,\n isBound: (name: string) => boolean\n): FrozenState {\n if (node === undefined) {\n return \"unknown\";\n }\n\n if (node.type === \"Identifier\") {\n return lookup(node.name);\n }\n\n return isImmutableArrayFactoryCall(node, isBound) ? \"frozen\" : \"unknown\";\n}\n\nfunction isImmutableArrayFactoryCall(\n node: Expression,\n isBound: (name: string) => boolean\n): boolean {\n if (node.type !== \"CallExpression\" || node.callee.type !== \"MemberExpression\") {\n return false;\n }\n\n if (node.callee.computed) {\n return false;\n }\n\n const objectName = node.callee.object.type === \"Identifier\" ? node.callee.object.name : undefined;\n const propertyName =\n node.callee.property.type === \"Identifier\" ? node.callee.property.name : undefined;\n\n return (\n (objectName === \"Object\" && propertyName === \"freeze\" && !isBound(objectName)) ||\n (objectName === \"Array\" && propertyName === \"of\" && !isBound(objectName))\n );\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type ArrayPattern,\n type FunctionNode,\n type AssignmentExpression,\n type AssignmentPattern,\n type AssignmentProperty,\n type BinaryExpression,\n type BlockStatement,\n type CallExpression,\n type CatchClause,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type IfStatement,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type ObjectPattern,\n type PatternTarget,\n type Property,\n type RestElement,\n type ReturnStatement,\n type SourceSpan,\n type Statement,\n type TaggedTemplateExpression,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\n\nexport type Diagnostic = {\n code: \"AS-NEEDLESS-TEMPLATE\";\n severity: \"info\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n fix: {\n range: readonly [number, number];\n replacement: string;\n };\n hint: string;\n};\n\nexport const AS_NEEDLESS_TEMPLATE_MESSAGE =\n \"Template literals with only one interpolation should use the value or String(value).\";\n\nexport function AS_NEEDLESS_TEMPLATE(\n source: string,\n options: { filename?: string } = {}\n): Diagnostic[] {\n return new ASNeedlessTemplateScanner(source, options.filename ?? \"<input>\").scan();\n}\n\nexport function fixASNeedlessTemplate(source: string, options: { filename?: string } = {}): string {\n const filename = options.filename ?? \"<input>\";\n let result = source;\n\n while (true) {\n const diagnostics = new ASNeedlessTemplateScanner(result, filename).collect();\n if (diagnostics.length === 0) {\n return result;\n }\n\n const next = selectInnermostDiagnostics(diagnostics)\n .sort((left, right) => right.span.start.offset - left.span.start.offset)\n .reduce((current, diagnostic) => {\n return `${current.slice(0, diagnostic.span.start.offset)}${createReplacement(current, diagnostic)}${current.slice(diagnostic.span.end.offset)}`;\n }, result);\n\n if (next === result) {\n return result;\n }\n\n result = next;\n }\n}\n\ntype InternalDiagnostic = Diagnostic & {\n expression: Expression;\n expressionSpan: SourceSpan;\n};\n\nclass ASNeedlessTemplateScanner {\n private readonly diagnostics: InternalDiagnostic[] = [];\n\n constructor(\n private readonly source: string,\n private readonly filename: string\n ) {}\n\n scan(): Diagnostic[] {\n this.visitModule(parseModule(this.source, this.filename));\n return this.diagnostics.map(\n ({ expression: _expression, expressionSpan: _expressionSpan, ...diagnostic }) => diagnostic\n );\n }\n\n collect(): InternalDiagnostic[] {\n this.visitModule(parseModule(this.source, this.filename));\n return this.diagnostics;\n }\n\n private visitModule(node: Module): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunction(node);\n return;\n case \"BlockStatement\":\n this.visitBlockStatement(node);\n return;\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n this.visitReturnStatement(node);\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitBlockStatement(node: BlockStatement): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n\n this.visitStatement(node.body);\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n } else {\n this.visitAssignmentTarget(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitBlockStatement(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitBlockStatement(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n if (node.param !== undefined) {\n this.visitBindingPattern(node.param);\n }\n this.visitBlockStatement(node.body);\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n this.visitBindingPattern(node.id);\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n }\n\n private visitReturnStatement(node: ReturnStatement): void {\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"AwaitExpression\":\n this.visitExpression(node.argument);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n this.visitBinaryLikeExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node, true);\n return;\n case \"TaggedTemplateExpression\":\n this.visitTaggedTemplateExpression(node);\n return;\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"MetaProperty\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"RegexLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: FunctionNode): void {\n for (const param of node.params) {\n this.visitBindingElement(param);\n }\n\n if (node.body.type === \"BlockStatement\") {\n this.visitBlockStatement(node.body);\n return;\n }\n\n this.visitExpression(node.body);\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element.type === \"SpreadElement\") {\n this.visitExpression(element.argument);\n continue;\n }\n\n this.visitExpression(element);\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitExpression(property.argument);\n continue;\n }\n\n this.visitProperty(property);\n }\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitExpression(node.value);\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryLikeExpression(node: BinaryExpression | LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n if (node.computed) {\n this.visitExpression(node.property);\n }\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitExpression(argument.argument);\n continue;\n }\n\n this.visitExpression(argument);\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral, canReport: boolean): void {\n if (canReport && isNeedlessTemplate(node)) {\n this.report(node, node.expressions[0]);\n }\n\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitTaggedTemplateExpression(node: TaggedTemplateExpression): void {\n this.visitExpression(node.tag);\n this.visitTemplateLiteral(node.quasi, false);\n }\n\n private visitAssignmentTarget(node: AssignmentExpression[\"left\"]): void {\n switch (node.type) {\n case \"Identifier\":\n case \"MetaProperty\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n this.visitBindingPattern(node);\n return;\n }\n }\n\n private visitBindingElement(\n node:\n | AssignmentPattern\n | ArrayPattern\n | MemberExpression\n | ObjectPattern\n | PatternTarget\n | RestElement\n ): void {\n if (node.type === \"RestElement\") {\n this.visitAssignmentTarget(node.argument);\n return;\n }\n\n this.visitBindingPattern(node);\n }\n\n private visitBindingPattern(\n node: AssignmentPattern | ArrayPattern | MemberExpression | ObjectPattern | PatternTarget\n ): void {\n switch (node.type) {\n case \"Identifier\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentPattern\":\n this.visitBindingPattern(node.left);\n this.visitExpression(node.right);\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element === null) {\n continue;\n }\n this.visitBindingElement(element);\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitAssignmentTarget(property.argument);\n continue;\n }\n this.visitAssignmentProperty(property);\n }\n return;\n }\n }\n\n private visitAssignmentProperty(node: AssignmentProperty): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitBindingPattern(node.value);\n }\n\n private report(template: TemplateLiteral, expression: Expression): void {\n this.diagnostics.push({\n code: \"AS-NEEDLESS-TEMPLATE\",\n severity: \"info\",\n message: AS_NEEDLESS_TEMPLATE_MESSAGE,\n hint: `Use ${createStringReplacement(\n this.source.slice(expression.span.start.offset, expression.span.end.offset),\n expression\n )}.`,\n filename: this.filename,\n line: template.span.start.line,\n column: template.span.start.column,\n span: template.span,\n fix: {\n range: [template.span.start.offset, template.span.end.offset],\n replacement: createStringReplacement(\n this.source.slice(expression.span.start.offset, expression.span.end.offset),\n expression\n )\n },\n expression,\n expressionSpan: expression.span\n });\n }\n}\n\nfunction selectInnermostDiagnostics(\n diagnostics: readonly InternalDiagnostic[]\n): InternalDiagnostic[] {\n return diagnostics.filter(\n (candidate) =>\n !diagnostics.some((other) => other !== candidate && containsSpan(candidate.span, other.span))\n );\n}\n\nfunction containsSpan(outer: SourceSpan, inner: SourceSpan): boolean {\n return outer.start.offset <= inner.start.offset && inner.end.offset <= outer.end.offset;\n}\n\nfunction createReplacement(source: string, diagnostic: InternalDiagnostic): string {\n return createStringReplacement(\n source.slice(diagnostic.expressionSpan.start.offset, diagnostic.expressionSpan.end.offset),\n diagnostic.expression\n );\n}\n\nfunction createStringReplacement(expressionSource: string, expression: Expression): string {\n if (isStringCallExpression(expression)) {\n return expressionSource;\n }\n\n return `String(${expressionSource})`;\n}\n\nfunction isStringCallExpression(expression: Expression): boolean {\n return (\n expression.type === \"CallExpression\" &&\n expression.callee.type === \"Identifier\" &&\n expression.callee.name === \"String\"\n );\n}\n\nfunction isNeedlessTemplate(node: TemplateLiteral): boolean {\n if (node.expressions.length !== 1 || node.quasis.length !== 2) {\n return false;\n }\n\n return (\n node.expressions[0]?.type !== \"TemplateLiteral\" &&\n node.quasis.every((quasi) => quasi.value.raw === \"\")\n );\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type ArrayPattern,\n type FunctionNode,\n type AssignmentExpression,\n type AssignmentPattern,\n type AssignmentProperty,\n type AwaitExpression,\n type BinaryExpression,\n type BlockStatement,\n type CallExpression,\n type CatchClause,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type Identifier,\n type IfStatement,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type ObjectPattern,\n type Property,\n type RestElement,\n type ReturnStatement,\n type SourceSpan,\n type SpreadElement,\n type Statement,\n type TaggedTemplateExpression,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\nimport { KNOWN_RUNTIME_GLOBALS } from \"./known-globals.js\";\n\nexport type Diagnostic = {\n code: \"AS-SHADOW-GLOBAL\";\n severity: \"warning\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\nexport function AS_SHADOW_GLOBAL(\n source: string,\n options: { allowedGlobals?: readonly string[]; filename?: string } = {}\n): Diagnostic[] {\n return new ASShadowGlobalScanner(\n options.filename ?? \"<input>\",\n new Set([...KNOWN_RUNTIME_GLOBALS, ...(options.allowedGlobals ?? [])])\n ).scan(source);\n}\n\nclass ASShadowGlobalScanner {\n private readonly diagnostics: Diagnostic[] = [];\n\n constructor(\n private readonly filename: string,\n private readonly knownGlobals: ReadonlySet<string>\n ) {}\n\n scan(source: string): Diagnostic[] {\n this.visitModule(parseModule(source, this.filename));\n return this.diagnostics;\n }\n\n private visitModule(node: Module): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunctionExpression(node);\n return;\n case \"BlockStatement\":\n this.visitBlockStatement(node);\n return;\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n this.visitReturnStatement(node);\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitBlockStatement(node: BlockStatement): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n this.visitStatement(node.body);\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n } else {\n this.visitAssignmentTargetPattern(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitBlockStatement(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitBlockStatement(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n if (node.param !== undefined) {\n this.visitPatternTarget(node.param);\n }\n this.visitBlockStatement(node.body);\n }\n\n private visitReturnStatement(node: ReturnStatement): void {\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n this.visitPatternTarget(node.id);\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunctionExpression(node);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"AwaitExpression\":\n this.visitAwaitExpression(node);\n return;\n case \"BinaryExpression\":\n this.visitBinaryExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"LogicalExpression\":\n this.visitLogicalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"TaggedTemplateExpression\":\n this.visitTaggedTemplateExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"BooleanLiteral\":\n case \"Identifier\":\n case \"MetaProperty\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"RegexLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunctionExpression(node: FunctionNode): void {\n if (node.type !== \"ArrowFunctionExpression\" && node.id !== undefined) {\n this.reportIfGlobalShadow(node.id);\n }\n for (const parameter of node.params) {\n this.visitBindingElement(parameter);\n }\n if (node.body.type === \"BlockStatement\") {\n this.visitBlockStatement(node.body);\n } else {\n this.visitExpression(node.body);\n }\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element.type === \"SpreadElement\") {\n this.visitSpreadElement(element);\n } else {\n this.visitExpression(element);\n }\n }\n }\n\n private visitAwaitExpression(node: AwaitExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryExpression(node: BinaryExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitSpreadElement(argument);\n } else {\n this.visitExpression(argument);\n }\n }\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitLogicalExpression(node: LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n if (node.computed) {\n this.visitExpression(node.property);\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitSpreadElement(property);\n } else {\n this.visitProperty(property);\n }\n }\n }\n\n private visitTaggedTemplateExpression(node: TaggedTemplateExpression): void {\n this.visitExpression(node.tag);\n this.visitTemplateLiteral(node.quasi);\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n this.visitAssignmentTargetPattern(node.left);\n this.visitExpression(node.right);\n }\n\n private visitAssignmentTargetPattern(\n node: AssignmentExpression[\"left\"] | AssignmentPattern | RestElement\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.visitAssignmentTargetPattern(node.left);\n this.visitExpression(node.right);\n return;\n case \"RestElement\":\n this.visitAssignmentTargetPattern(node.argument);\n return;\n case \"ArrayPattern\":\n this.visitAssignmentArrayPattern(node);\n return;\n case \"ObjectPattern\":\n this.visitAssignmentObjectPattern(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"Identifier\":\n case \"MetaProperty\":\n return;\n }\n }\n\n private visitAssignmentArrayPattern(node: ArrayPattern): void {\n for (const element of node.elements) {\n if (element !== null) {\n this.visitAssignmentTargetPattern(element);\n }\n }\n }\n\n private visitAssignmentObjectPattern(node: ObjectPattern): void {\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitAssignmentTargetPattern(property.argument);\n continue;\n }\n if (property.computed) {\n this.visitExpression(property.key);\n }\n this.visitAssignmentTargetPattern(property.value);\n }\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitExpression(node.value);\n }\n\n private visitSpreadElement(node: SpreadElement): void {\n this.visitExpression(node.argument);\n }\n\n private visitBindingElement(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.visitPatternTarget(node.left);\n this.visitExpression(node.right);\n return;\n case \"RestElement\":\n this.visitPatternTarget(node.argument);\n return;\n default:\n this.visitPatternTarget(node);\n return;\n }\n }\n\n private visitPatternTarget(\n node: ArrayPattern | Identifier | MemberExpression | ObjectPattern\n ): void {\n switch (node.type) {\n case \"Identifier\":\n this.reportIfGlobalShadow(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"ArrayPattern\":\n this.visitArrayPattern(node);\n return;\n case \"ObjectPattern\":\n this.visitObjectPattern(node);\n return;\n }\n }\n\n private visitArrayPattern(node: ArrayPattern): void {\n for (const element of node.elements) {\n if (element !== null) {\n this.visitBindingElement(element);\n }\n }\n }\n\n private visitObjectPattern(node: ObjectPattern): void {\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitPatternTarget(property.argument);\n continue;\n }\n this.visitAssignmentProperty(property);\n }\n }\n\n private visitAssignmentProperty(node: AssignmentProperty): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitBindingElement(node.value);\n }\n\n private reportIfGlobalShadow(node: Identifier): void {\n if (!this.knownGlobals.has(node.name)) {\n return;\n }\n\n this.diagnostics.push({\n code: \"AS-SHADOW-GLOBAL\",\n severity: \"warning\",\n message: `Local binding '${node.name}' shadows a runtime global.`,\n filename: this.filename,\n line: node.span.start.line,\n column: node.span.start.column,\n span: node.span\n });\n }\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type FunctionNode,\n type AssignmentExpression,\n type BinaryExpression,\n type BlockStatement,\n type CallExpression,\n type CatchClause,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type IfStatement,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type Property,\n type SourceSpan,\n type Statement,\n type TaggedTemplateExpression,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\n\nexport type Diagnostic = {\n code: \"AS-UNBOUNDED-LOOP\";\n severity: \"warning\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\nconst MESSAGE =\n \"Unbounded loop or generator source has no static exit with break, return, or throw.\";\n\ntype LoopStatement =\n | DoWhileStatement\n | ForInStatement\n | ForOfStatement\n | ForStatement\n | WhileStatement;\ntype UnboundedLoopStatement = DoWhileStatement | ForStatement | WhileStatement;\n\nexport function AS_UNBOUNDED_LOOP(\n source: string,\n options: { filename?: string } = {}\n): Diagnostic[] {\n return new ASUnboundedLoopScanner(options.filename ?? \"<input>\").scan(source);\n}\n\nclass ASUnboundedLoopScanner {\n private readonly diagnostics: Diagnostic[] = [];\n private readonly labelStack: string[] = [];\n\n constructor(private readonly filename: string) {}\n\n scan(source: string): Diagnostic[] {\n this.visitModule(parseModule(source, this.filename));\n return this.diagnostics;\n }\n\n private visitModule(node: Module): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunction(node);\n return;\n case \"BlockStatement\":\n this.visitBlockStatement(node);\n return;\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"DoWhileStatement\":\n this.visitDoWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitBlockStatement(node: BlockStatement): void {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n this.visitLoopBody(node, () => {\n this.reportIfUnboundedWithoutExit(node);\n this.visitStatement(node.body);\n });\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n }\n this.visitExpression(node.right);\n this.visitLoopBody(node, () => {\n this.visitStatement(node.body);\n });\n }\n\n private visitWhileStatement(node: WhileStatement): void {\n this.visitExpression(node.test);\n this.visitLoopBody(node, () => {\n this.reportIfUnboundedWithoutExit(node);\n this.visitStatement(node.body);\n });\n }\n\n private visitDoWhileStatement(node: DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitLoopBody(node, () => {\n this.reportIfUnboundedWithoutExit(node);\n this.visitStatement(node.body);\n });\n }\n\n private visitLoopBody(node: LoopStatement, callback: () => void): void {\n const labels = getLoopLabels(node);\n this.labelStack.push(...labels);\n callback();\n this.labelStack.length -= labels.length;\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitBlockStatement(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitBlockStatement(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n this.visitBlockStatement(node.body);\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"AwaitExpression\":\n this.visitExpression(node.argument);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n this.visitBinaryLikeExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"TaggedTemplateExpression\":\n this.visitTaggedTemplateExpression(node);\n return;\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"StringLiteral\":\n case \"RegexLiteral\":\n case \"MetaProperty\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: FunctionNode): void {\n const labels = this.labelStack.splice(0);\n try {\n if (node.body.type === \"BlockStatement\") {\n this.visitBlockStatement(node.body);\n return;\n }\n\n this.visitExpression(node.body);\n } finally {\n this.labelStack.push(...labels);\n }\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element.type === \"SpreadElement\") {\n this.visitExpression(element.argument);\n } else {\n this.visitExpression(element);\n }\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitExpression(property.argument);\n } else {\n this.visitProperty(property);\n }\n }\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitExpression(node.value);\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryLikeExpression(node: BinaryExpression | LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n if (node.computed) {\n this.visitExpression(node.property);\n }\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitExpression(argument.argument);\n } else {\n this.visitExpression(argument);\n }\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitTaggedTemplateExpression(node: TaggedTemplateExpression): void {\n this.visitExpression(node.tag);\n this.visitTemplateLiteral(node.quasi);\n }\n\n private reportIfUnboundedWithoutExit(node: UnboundedLoopStatement): void {\n if (!isUnboundedLoop(node)) {\n return;\n }\n\n const exitingLabels = new Set([...this.labelStack, ...getLoopLabels(node)]);\n if (bodyHasExit(node.body, exitingLabels, true)) {\n return;\n }\n\n this.diagnostics.push({\n code: \"AS-UNBOUNDED-LOOP\",\n severity: \"warning\",\n message: MESSAGE,\n filename: this.filename,\n line: node.span.start.line,\n column: node.span.start.column,\n span: node.span\n });\n }\n}\n\nfunction isUnboundedLoop(node: UnboundedLoopStatement): boolean {\n switch (node.type) {\n case \"ForStatement\":\n return node.test === undefined;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n return isTrueLiteral(node.test);\n }\n}\n\nfunction getLoopLabels(node: LoopStatement): readonly string[] {\n return node.labels ?? (node.label === undefined ? [] : [node.label]);\n}\n\nfunction isTrueLiteral(node: Expression): boolean {\n return node.type === \"BooleanLiteral\" && node.value;\n}\n\nfunction bodyHasExit(\n node: Statement,\n exitingLabels: ReadonlySet<string>,\n allowUnlabeledBreak: boolean\n): boolean {\n switch (node.type) {\n case \"BlockStatement\":\n return node.body.some((statement) =>\n bodyHasExit(statement, exitingLabels, allowUnlabeledBreak)\n );\n case \"IfStatement\":\n return (\n bodyHasExit(node.consequent, exitingLabels, allowUnlabeledBreak) ||\n (node.alternate !== undefined &&\n bodyHasExit(node.alternate, exitingLabels, allowUnlabeledBreak))\n );\n case \"ForStatement\":\n case \"ForInStatement\":\n case \"ForOfStatement\":\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n return bodyHasExit(node.body, exitingLabels, false);\n case \"TryStatement\":\n return (\n bodyHasExit(node.block, exitingLabels, allowUnlabeledBreak) ||\n (node.handler !== undefined &&\n bodyHasExit(node.handler.body, exitingLabels, allowUnlabeledBreak)) ||\n (node.finalizer !== undefined &&\n bodyHasExit(node.finalizer, exitingLabels, allowUnlabeledBreak))\n );\n case \"SwitchStatement\":\n return node.cases.some((switchCase) =>\n switchCase.consequent.some((statement) => bodyHasExit(statement, exitingLabels, false))\n );\n case \"ReturnStatement\":\n case \"ThrowStatement\":\n return true;\n case \"BreakStatement\":\n return node.label === undefined ? allowUnlabeledBreak : exitingLabels.has(node.label);\n case \"ExportNamedDeclaration\":\n return false;\n case \"ExportDefaultDeclaration\":\n case \"ExpressionStatement\":\n case \"ImportDeclaration\":\n case \"FunctionDeclaration\":\n case \"ContinueStatement\":\n case \"EmptyStatement\":\n case \"VariableDeclaration\":\n return false;\n }\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type FunctionNode,\n type AssignmentExpression,\n type BinaryExpression,\n type BlockStatement,\n type CallExpression,\n type CatchClause,\n type ConditionalExpression,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type IfStatement,\n type LogicalExpression,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type Property,\n type SourceSpan,\n type Statement,\n type SwitchStatement,\n type TaggedTemplateExpression,\n type TemplateLiteral,\n type ThrowStatement,\n type TryStatement,\n type UnaryExpression,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\n\nexport type Diagnostic = {\n code: \"AS-UNREACHABLE\";\n severity: \"warning\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n};\n\nexport function AS_UNREACHABLE(source: string, options: { filename?: string } = {}): Diagnostic[] {\n return new ASUnreachableScanner(options.filename ?? \"<input>\").scan(source);\n}\n\nclass ASUnreachableScanner {\n private readonly diagnostics: Diagnostic[] = [];\n\n constructor(private readonly filename: string) {}\n\n scan(source: string): Diagnostic[] {\n this.visitModule(parseModule(source, this.filename));\n return this.diagnostics;\n }\n\n private visitModule(node: Module): void {\n this.visitStatements(node.body);\n }\n\n private visitStatements(statements: readonly Statement[]): boolean {\n let terminated = false;\n\n for (const statement of statements) {\n if (terminated) {\n if (isEmptyBlockStatement(statement)) {\n continue;\n }\n\n this.report(statement.span);\n return true;\n }\n\n terminated = this.visitStatement(statement);\n }\n\n return terminated;\n }\n\n private visitStatement(node: Statement): boolean {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunction(node);\n return false;\n case \"BlockStatement\":\n return this.visitBlock(node);\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return false;\n case \"IfStatement\":\n return this.visitIfStatement(node);\n case \"ForStatement\":\n this.visitForStatement(node);\n return false;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return false;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return false;\n case \"TryStatement\":\n return this.visitTryStatement(node);\n case \"SwitchStatement\":\n this.visitSwitchStatement(node);\n return false;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return false;\n case \"ReturnStatement\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return true;\n case \"ThrowStatement\":\n this.visitThrowStatement(node);\n return true;\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return true;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return false;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return false;\n case \"ImportDeclaration\":\n case \"EmptyStatement\":\n return false;\n }\n }\n\n private visitBlock(node: BlockStatement): boolean {\n return this.visitStatements(node.body);\n }\n\n private visitIfStatement(node: IfStatement): boolean {\n this.visitExpression(node.test);\n const consequentTerminates = this.visitStatement(node.consequent);\n const alternateTerminates =\n node.alternate === undefined ? false : this.visitStatement(node.alternate);\n\n return node.alternate !== undefined && consequentTerminates && alternateTerminates;\n }\n\n private visitForStatement(node: ForStatement): void {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n\n this.visitStatement(node.body);\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): boolean {\n const tryTerminates = this.visitBlock(node.block);\n const catchTerminates =\n node.handler === undefined ? false : this.visitCatchClause(node.handler);\n const finallyTerminates =\n node.finalizer === undefined ? false : this.visitBlock(node.finalizer);\n\n if (finallyTerminates) {\n return true;\n }\n\n if (node.handler === undefined) {\n return tryTerminates;\n }\n\n return tryTerminates && catchTerminates;\n }\n\n private visitSwitchStatement(node: SwitchStatement): void {\n this.visitExpression(node.discriminant);\n for (const switchCase of node.cases) {\n if (switchCase.test !== undefined) {\n this.visitExpression(switchCase.test);\n }\n this.visitStatements(switchCase.consequent);\n }\n }\n\n private visitCatchClause(node: CatchClause): boolean {\n return this.visitBlock(node.body);\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n }\n\n private visitThrowStatement(node: ThrowStatement): void {\n this.visitExpression(node.argument);\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"AwaitExpression\":\n this.visitExpression(node.argument);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitUnaryExpression(node);\n return;\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n this.visitBinaryLikeExpression(node);\n return;\n case \"ConditionalExpression\":\n this.visitConditionalExpression(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"TaggedTemplateExpression\":\n this.visitTaggedTemplateExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"Identifier\":\n case \"BooleanLiteral\":\n case \"MetaProperty\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"RegexLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: FunctionNode): void {\n if (node.body.type === \"BlockStatement\") {\n this.visitBlock(node.body);\n return;\n }\n\n this.visitExpression(node.body);\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element.type === \"SpreadElement\") {\n this.visitExpression(element.argument);\n continue;\n }\n\n this.visitExpression(element);\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitExpression(property.argument);\n continue;\n }\n\n this.visitProperty(property);\n }\n }\n\n private visitProperty(node: Property): void {\n this.visitExpression(node.key);\n this.visitExpression(node.value);\n }\n\n private visitUnaryExpression(node: UnaryExpression): void {\n this.visitExpression(node.argument);\n }\n\n private visitBinaryLikeExpression(node: BinaryExpression | LogicalExpression): void {\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n }\n\n private visitConditionalExpression(node: ConditionalExpression): void {\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n this.visitExpression(node.property);\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n if (node.left.type === \"MemberExpression\") {\n this.visitMemberExpression(node.left);\n }\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitExpression(argument.argument);\n continue;\n }\n\n this.visitExpression(argument);\n }\n }\n\n private visitTaggedTemplateExpression(node: TaggedTemplateExpression): void {\n this.visitExpression(node.tag);\n this.visitTemplateLiteral(node.quasi);\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private report(span: SourceSpan): void {\n this.diagnostics.push({\n code: \"AS-UNREACHABLE\",\n severity: \"warning\",\n message: \"Statement is unreachable because a prior statement in the same block always exits.\",\n filename: this.filename,\n line: span.start.line,\n column: span.start.column,\n span\n });\n }\n}\n\nfunction isEmptyBlockStatement(statement: Statement): boolean {\n return statement.type === \"BlockStatement\" && statement.body.length === 0;\n}\n", "import {\n parseModule,\n type ArrayExpression,\n type ArrayPattern,\n type FunctionNode,\n type AssignmentExpression,\n type AssignmentPattern,\n type AssignmentProperty,\n type BlockStatement,\n type CallExpression,\n type CatchClause,\n type DoWhileStatement,\n type Expression,\n type ForInStatement,\n type ForOfStatement,\n type ForStatement,\n type Identifier,\n type IfStatement,\n type ImportDeclaration,\n type ImportDefaultSpecifier,\n type ImportNamespaceSpecifier,\n type ImportSpecifier,\n type MemberExpression,\n type Module,\n type ObjectExpression,\n type ObjectPattern,\n type Property,\n type RestElement,\n type SourceSpan,\n type SpreadElement,\n type Statement,\n type TemplateLiteral,\n type TryStatement,\n type VariableDeclaration,\n type VariableDeclarator,\n type WhileStatement\n} from \"../../parse/parser.js\";\n\nexport type Diagnostic = {\n code: \"AS-UNUSED-IMPORT\";\n severity: \"warning\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n fix: {\n range: readonly [number, number];\n replacement: string;\n };\n};\n\ntype BindingKind = \"const\" | \"import\" | \"let\" | \"param\" | \"var\";\ntype ImportSpecifierNode = ImportDefaultSpecifier | ImportNamespaceSpecifier | ImportSpecifier;\n\ntype ImportBinding = {\n declaration: ImportDeclaration;\n kind: \"import\";\n name: string;\n reads: number;\n specifier: ImportSpecifierNode;\n span: SourceSpan;\n};\n\ntype LocalBinding = {\n kind: Exclude<BindingKind, \"import\">;\n name: string;\n};\n\ntype Binding = ImportBinding | LocalBinding;\n\ntype Scope = Map<string, Binding>;\n\ntype UnusedImport = {\n declaration: ImportDeclaration;\n specifier: ImportSpecifierNode;\n};\n\ntype Replacement = {\n end: number;\n start: number;\n text: string;\n};\n\nexport function AS_UNUSED_IMPORT(\n source: string,\n options: { filename?: string } = {}\n): Diagnostic[] {\n const filename = options.filename ?? \"<input>\";\n const unusedImports = collectUnusedImports(source, filename);\n const unusedByDeclaration = groupUnusedSpecifiers(unusedImports);\n\n return unusedImports.map((unusedImport) =>\n createDiagnostic(\n filename,\n source,\n unusedImport,\n unusedByDeclaration.get(unusedImport.declaration) ?? new Set([unusedImport.specifier])\n )\n );\n}\n\nexport function fixASUnusedImports(source: string, options: { filename?: string } = {}): string {\n const unusedImports = collectUnusedImports(source, options.filename ?? \"<input>\");\n if (unusedImports.length === 0) {\n return source;\n }\n\n const unusedByDeclaration = groupUnusedSpecifiers(unusedImports);\n\n const replacements: Replacement[] = [];\n for (const [declaration, unusedSpecifiers] of unusedByDeclaration.entries()) {\n replacements.push(createUnusedImportReplacement(source, declaration, unusedSpecifiers));\n }\n\n return applyReplacements(source, replacements);\n}\n\nfunction groupUnusedSpecifiers(\n unusedImports: readonly UnusedImport[]\n): Map<ImportDeclaration, Set<ImportSpecifierNode>> {\n const unusedByDeclaration = new Map<ImportDeclaration, Set<ImportSpecifierNode>>();\n for (const unusedImport of unusedImports) {\n const specifiers = unusedByDeclaration.get(unusedImport.declaration) ?? new Set();\n specifiers.add(unusedImport.specifier);\n unusedByDeclaration.set(unusedImport.declaration, specifiers);\n }\n return unusedByDeclaration;\n}\n\nfunction collectUnusedImports(source: string, filename: string): UnusedImport[] {\n return new ASUnusedImportScanner(filename).scan(source);\n}\n\nclass ASUnusedImportScanner {\n private readonly imports: ImportBinding[] = [];\n private readonly scopes: Scope[] = [];\n\n constructor(private readonly filename: string) {}\n\n scan(source: string): UnusedImport[] {\n const module = parseModule(source, this.filename);\n this.visitModule(module);\n return this.imports\n .filter((binding) => binding.reads === 0)\n .map((binding) => ({\n declaration: binding.declaration,\n specifier: binding.specifier\n }));\n }\n\n private visitModule(node: Module): void {\n this.withScope(this.collectModuleBindings(node.body), () => {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n });\n }\n\n private visitStatement(node: Statement): void {\n switch (node.type) {\n case \"FunctionDeclaration\":\n this.visitArrowFunction(node);\n return;\n case \"ExportNamedDeclaration\":\n this.visitVariableDeclaration(node.declaration);\n return;\n case \"ExportDefaultDeclaration\":\n this.visitExpression(node.declaration);\n return;\n case \"BlockStatement\":\n this.visitBlock(node);\n return;\n case \"ExpressionStatement\":\n this.visitExpression(node.expression);\n return;\n case \"IfStatement\":\n this.visitIfStatement(node);\n return;\n case \"ForStatement\":\n this.visitForStatement(node);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n this.visitForOfStatement(node);\n return;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n this.visitWhileStatement(node);\n return;\n case \"TryStatement\":\n this.visitTryStatement(node);\n return;\n case \"VariableDeclaration\":\n this.visitVariableDeclaration(node);\n return;\n case \"ReturnStatement\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"ThrowStatement\":\n this.visitExpression(node.argument);\n return;\n case \"ImportDeclaration\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return;\n }\n }\n\n private visitBlock(node: BlockStatement): void {\n this.withScope(this.collectBlockBindings(node.body), () => {\n for (const statement of node.body) {\n this.visitStatement(statement);\n }\n });\n }\n\n private visitIfStatement(node: IfStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.consequent);\n if (node.alternate !== undefined) {\n this.visitStatement(node.alternate);\n }\n }\n\n private visitForStatement(node: ForStatement): void {\n const bindings =\n node.init?.type === \"VariableDeclaration\" ? this.collectDeclarationBindings(node.init) : [];\n\n this.withScope(bindings, () => {\n if (node.init !== undefined) {\n if (node.init.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.init);\n } else {\n this.visitExpression(node.init);\n }\n }\n if (node.test !== undefined) {\n this.visitExpression(node.test);\n }\n if (node.update !== undefined) {\n this.visitExpression(node.update);\n }\n this.visitStatement(node.body);\n });\n }\n\n private visitForOfStatement(node: ForInStatement | ForOfStatement): void {\n const bindings =\n node.left.type === \"VariableDeclaration\" ? this.collectDeclarationBindings(node.left) : [];\n\n this.withScope(bindings, () => {\n if (node.left.type === \"VariableDeclaration\") {\n this.visitVariableDeclaration(node.left);\n } else {\n this.visitAssignmentTarget(node.left);\n }\n this.visitExpression(node.right);\n this.visitStatement(node.body);\n });\n }\n\n private visitWhileStatement(node: WhileStatement | DoWhileStatement): void {\n this.visitExpression(node.test);\n this.visitStatement(node.body);\n }\n\n private visitTryStatement(node: TryStatement): void {\n this.visitBlock(node.block);\n if (node.handler !== undefined) {\n this.visitCatchClause(node.handler);\n }\n if (node.finalizer !== undefined) {\n this.visitBlock(node.finalizer);\n }\n }\n\n private visitCatchClause(node: CatchClause): void {\n this.withScope(this.collectCatchBindings(node), () => {\n if (node.param !== undefined) {\n this.visitBindingPattern(node.param);\n }\n this.visitBlock(node.body);\n });\n }\n\n private visitVariableDeclaration(node: VariableDeclaration): void {\n for (const declarator of node.declarations) {\n this.visitVariableDeclarator(declarator);\n }\n }\n\n private visitVariableDeclarator(node: VariableDeclarator): void {\n this.visitBindingPattern(node.id);\n if (node.init !== undefined) {\n this.visitExpression(node.init);\n }\n }\n\n private visitExpression(node: Expression): void {\n switch (node.type) {\n case \"YieldExpression\":\n if (node.argument !== undefined) {\n this.visitExpression(node.argument);\n }\n return;\n case \"Identifier\":\n this.markRead(node);\n return;\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n this.visitArrowFunction(node);\n return;\n case \"AwaitExpression\":\n this.visitExpression(node.argument);\n return;\n case \"ArrayExpression\":\n this.visitArrayExpression(node);\n return;\n case \"ObjectExpression\":\n this.visitObjectExpression(node);\n return;\n case \"UnaryExpression\":\n this.visitExpression(node.argument);\n return;\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n this.visitExpression(node.left);\n this.visitExpression(node.right);\n return;\n case \"ConditionalExpression\":\n this.visitExpression(node.test);\n this.visitExpression(node.consequent);\n this.visitExpression(node.alternate);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"AssignmentExpression\":\n this.visitAssignmentExpression(node);\n return;\n case \"CallExpression\":\n this.visitCallExpression(node);\n return;\n case \"TemplateLiteral\":\n this.visitTemplateLiteral(node);\n return;\n case \"TaggedTemplateExpression\":\n this.visitExpression(node.tag);\n this.visitTemplateLiteral(node.quasi);\n return;\n case \"MetaProperty\":\n return;\n case \"BooleanLiteral\":\n case \"NullLiteral\":\n case \"NumericLiteral\":\n case \"RegexLiteral\":\n case \"StringLiteral\":\n case \"UndefinedLiteral\":\n return;\n }\n }\n\n private visitArrowFunction(node: FunctionNode): void {\n this.withScope(this.collectParameterBindings(node), () => {\n for (const parameter of node.params) {\n this.visitBindingElement(parameter);\n }\n\n if (node.body.type === \"BlockStatement\") {\n this.visitBlock(node.body);\n return;\n }\n\n this.visitExpression(node.body);\n });\n }\n\n private visitArrayExpression(node: ArrayExpression): void {\n for (const element of node.elements) {\n if (element?.type === \"SpreadElement\") {\n this.visitSpreadElement(element);\n continue;\n }\n if (element !== undefined) {\n this.visitExpression(element);\n }\n }\n }\n\n private visitObjectExpression(node: ObjectExpression): void {\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n this.visitSpreadElement(property);\n continue;\n }\n this.visitProperty(property);\n }\n }\n\n private visitMemberExpression(node: MemberExpression): void {\n this.visitExpression(node.object);\n if (node.computed) {\n this.visitExpression(node.property);\n }\n }\n\n private visitAssignmentExpression(node: AssignmentExpression): void {\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n }\n\n private visitCallExpression(node: CallExpression): void {\n this.visitExpression(node.callee);\n for (const argument of node.arguments) {\n if (argument.type === \"SpreadElement\") {\n this.visitSpreadElement(argument);\n continue;\n }\n this.visitExpression(argument);\n }\n }\n\n private visitTemplateLiteral(node: TemplateLiteral): void {\n for (const expression of node.expressions) {\n this.visitExpression(expression);\n }\n }\n\n private visitProperty(node: Property): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitExpression(node.value);\n }\n\n private visitSpreadElement(node: SpreadElement): void {\n this.visitExpression(node.argument);\n }\n\n private visitBindingElement(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.visitBindingPattern(node.left);\n this.visitExpression(node.right);\n return;\n case \"RestElement\":\n this.visitBindingPattern(node.argument);\n return;\n default:\n this.visitBindingPattern(node);\n return;\n }\n }\n\n private visitBindingPattern(\n node: ArrayPattern | Identifier | MemberExpression | ObjectPattern\n ): void {\n switch (node.type) {\n case \"Identifier\":\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.visitBindingElement(element);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitBindingPattern(property.argument);\n continue;\n }\n this.visitAssignmentProperty(property);\n }\n return;\n }\n }\n\n private visitAssignmentProperty(node: AssignmentProperty): void {\n if (node.computed) {\n this.visitExpression(node.key);\n }\n this.visitBindingElement(node.value);\n }\n\n private visitAssignmentTarget(\n node: AssignmentExpression[\"left\"] | AssignmentPattern | RestElement\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.visitAssignmentTarget(node.left);\n this.visitExpression(node.right);\n return;\n case \"RestElement\":\n this.visitAssignmentTarget(node.argument);\n return;\n case \"Identifier\":\n this.markRead(node);\n return;\n case \"MemberExpression\":\n this.visitMemberExpression(node);\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.visitAssignmentTarget(element);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.visitAssignmentTarget(property);\n continue;\n }\n if (property.computed) {\n this.visitExpression(property.key);\n }\n this.visitAssignmentTarget(property.value);\n }\n return;\n case \"MetaProperty\":\n return;\n }\n }\n\n private withScope(bindings: Binding[], visit: () => void): void {\n const scope: Scope = new Map();\n for (const binding of bindings) {\n scope.set(binding.name, binding);\n }\n\n this.scopes.push(scope);\n visit();\n this.scopes.pop();\n }\n\n private markRead(node: Identifier): void {\n const binding = this.resolveBinding(node.name);\n if (binding?.kind === \"import\") {\n binding.reads += 1;\n }\n }\n\n private resolveBinding(name: string): Binding | undefined {\n for (let index = this.scopes.length - 1; index >= 0; index -= 1) {\n const binding = this.scopes[index]?.get(name);\n if (binding !== undefined) {\n return binding;\n }\n }\n return undefined;\n }\n\n private collectModuleBindings(body: Statement[]): Binding[] {\n const bindings: Binding[] = [];\n\n for (const statement of body) {\n if (statement.type === \"ImportDeclaration\") {\n bindings.push(...this.collectImportBindings(statement));\n continue;\n }\n if (statement.type === \"FunctionDeclaration\") {\n bindings.push({ kind: \"let\", name: statement.id.name });\n continue;\n }\n if (statement.type === \"VariableDeclaration\") {\n bindings.push(...this.collectDeclarationBindings(statement));\n continue;\n }\n if (statement.type === \"ExportNamedDeclaration\") {\n bindings.push(...this.collectDeclarationBindings(statement.declaration));\n }\n }\n\n return bindings;\n }\n\n private collectBlockBindings(body: Statement[]): Binding[] {\n const bindings: Binding[] = [];\n\n for (const statement of body) {\n if (statement.type === \"FunctionDeclaration\") {\n bindings.push({ kind: \"let\", name: statement.id.name });\n }\n if (statement.type === \"VariableDeclaration\") {\n bindings.push(...this.collectDeclarationBindings(statement));\n }\n }\n\n return bindings;\n }\n\n private collectParameterBindings(node: FunctionNode): Binding[] {\n const bindings: Binding[] = [];\n\n if (node.type !== \"ArrowFunctionExpression\") {\n bindings.push({ kind: \"param\", name: \"arguments\" });\n if (node.type === \"FunctionExpression\" && node.id !== undefined) {\n bindings.push({ kind: \"param\", name: node.id.name });\n }\n }\n\n for (const parameter of node.params) {\n this.collectBindingNamesFromElement(parameter, \"param\", bindings);\n }\n\n return bindings;\n }\n\n private collectDeclarationBindings(node: VariableDeclaration): Binding[] {\n const bindings: Binding[] = [];\n\n for (const declarator of node.declarations) {\n this.collectBindingNamesFromPattern(declarator.id, node.kind, bindings);\n }\n\n return bindings;\n }\n\n private collectCatchBindings(node: CatchClause): Binding[] {\n const bindings: Binding[] = [];\n\n if (node.param !== undefined) {\n this.collectBindingNamesFromPattern(node.param, \"param\", bindings);\n }\n\n return bindings;\n }\n\n private collectImportBindings(node: ImportDeclaration): ImportBinding[] {\n return node.specifiers.map((specifier) => {\n const binding: ImportBinding = {\n declaration: node,\n kind: \"import\",\n name: specifier.local.name,\n reads: 0,\n specifier,\n span: specifier.span\n };\n this.imports.push(binding);\n return binding;\n });\n }\n\n private collectBindingNamesFromElement(\n node:\n | AssignmentPattern\n | ArrayPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement,\n kind: Exclude<BindingKind, \"import\">,\n bindings: Binding[]\n ): void {\n switch (node.type) {\n case \"AssignmentPattern\":\n this.collectBindingNamesFromPattern(node.left, kind, bindings);\n return;\n case \"RestElement\":\n this.collectBindingNamesFromPattern(node.argument, kind, bindings);\n return;\n default:\n this.collectBindingNamesFromPattern(node, kind, bindings);\n return;\n }\n }\n\n private collectBindingNamesFromPattern(\n node: ArrayPattern | Identifier | MemberExpression | ObjectPattern,\n kind: Exclude<BindingKind, \"import\">,\n bindings: Binding[]\n ): void {\n switch (node.type) {\n case \"Identifier\":\n bindings.push({\n kind,\n name: node.name\n });\n return;\n case \"MemberExpression\":\n return;\n case \"ArrayPattern\":\n for (const element of node.elements) {\n if (element !== null) {\n this.collectBindingNamesFromElement(element, kind, bindings);\n }\n }\n return;\n case \"ObjectPattern\":\n for (const property of node.properties) {\n if (property.type === \"RestElement\") {\n this.collectBindingNamesFromPattern(property.argument, kind, bindings);\n continue;\n }\n this.collectBindingNamesFromElement(property.value, kind, bindings);\n }\n return;\n }\n }\n}\n\nfunction createDiagnostic(\n filename: string,\n source: string,\n unusedImport: UnusedImport,\n unusedSpecifiers: ReadonlySet<ImportSpecifierNode>\n): Diagnostic {\n const { declaration, specifier } = unusedImport;\n const replacement = createUnusedImportReplacement(source, declaration, unusedSpecifiers);\n return {\n code: \"AS-UNUSED-IMPORT\",\n severity: \"warning\",\n message: `Import '${specifier.local.name}' is never referenced.`,\n filename,\n line: specifier.span.start.line,\n column: specifier.span.start.column,\n span: specifier.span,\n fix: {\n range: [replacement.start, replacement.end],\n replacement: replacement.text\n }\n };\n}\n\nfunction createUnusedImportReplacement(\n source: string,\n declaration: ImportDeclaration,\n unusedSpecifiers: ReadonlySet<ImportSpecifierNode>\n): Replacement {\n const keptSpecifiers = declaration.specifiers.filter(\n (specifier) => !unusedSpecifiers.has(specifier)\n );\n if (keptSpecifiers.length === 0) {\n return createImportLineDeletion(source, declaration);\n }\n\n return {\n start: declaration.specifiers[0]?.span.start.offset ?? declaration.span.start.offset,\n end: createSpecifierListReplacementEnd(source, declaration),\n text: keptSpecifiers\n .map((specifier) => source.slice(specifier.span.start.offset, specifier.span.end.offset))\n .join(\", \")\n };\n}\n\nfunction createImportLineDeletion(source: string, declaration: ImportDeclaration): Replacement {\n const lineStart = source.lastIndexOf(\"\\n\", declaration.span.start.offset - 1) + 1;\n let end = declaration.span.end.offset;\n\n while (source[end] === \" \" || source[end] === \"\\t\") {\n end += 1;\n }\n if (source[end] === \";\") {\n end += 1;\n }\n while (source[end] === \" \" || source[end] === \"\\t\") {\n end += 1;\n }\n if (source.slice(end, end + 2) === \"\\r\\n\") {\n end += 2;\n } else if (source[end] === \"\\n\") {\n end += 1;\n }\n\n return {\n start: lineStart,\n end,\n text:\n lineStart === 0 && end >= source.length && hasTrailingLineBreak(source)\n ? readTrailingLineBreak(source)\n : \"\"\n };\n}\n\nfunction hasTrailingLineBreak(source: string): boolean {\n return source.endsWith(\"\\n\") || source.endsWith(\"\\r\");\n}\n\nfunction readTrailingLineBreak(source: string): string {\n return source.endsWith(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n}\n\nfunction createSpecifierListReplacementEnd(source: string, declaration: ImportDeclaration): number {\n const lastSpecifier = declaration.specifiers[declaration.specifiers.length - 1];\n if (lastSpecifier === undefined) {\n return declaration.span.end.offset;\n }\n\n const end = skipInlineWhitespace(source, lastSpecifier.span.end.offset);\n if (source[end] !== \",\") {\n return lastSpecifier.span.end.offset;\n }\n\n return end + 1;\n}\n\nfunction skipInlineWhitespace(source: string, offset: number): number {\n let index = offset;\n while (\n source[index] === \" \" ||\n source[index] === \"\\t\" ||\n source[index] === \"\\r\" ||\n source[index] === \"\\n\"\n ) {\n index += 1;\n }\n return index;\n}\n\nfunction applyReplacements(source: string, replacements: readonly Replacement[]): string {\n return [...replacements]\n .sort((left, right) => right.start - left.start)\n .reduce((result, replacement) => {\n return `${result.slice(0, replacement.start)}${replacement.text}${result.slice(replacement.end)}`;\n }, source);\n}\n", "import { AS001 } from \"./rules/AS001.js\";\nimport { AS003 } from \"./rules/AS003.js\";\nimport { AS004 } from \"./rules/AS004.js\";\nimport { AS005 } from \"./rules/AS005.js\";\nimport { AS006_007 } from \"./rules/AS006-007.js\";\nimport { AS009 } from \"./rules/AS009.js\";\nimport { AS010 } from \"./rules/AS010.js\";\nimport { AS011 } from \"./rules/AS011.js\";\nimport { AS013 } from \"./rules/AS013.js\";\nimport { AS015 } from \"./rules/AS015.js\";\nimport { AS_ASYNC_NOT_NEEDED } from \"./rules/AS-async-not-needed.js\";\nimport { AS_DESTRUCTURE_NULL_DEFAULT } from \"./rules/AS-destructure-null-default.js\";\nimport { AS_EXPORT_IMPORT_META } from \"./rules/AS-export-import-meta.js\";\nimport type { DefaultExportSignature } from \"./rules/AS-export-import-meta.js\";\nimport { AS_FLOATING_PROMISE } from \"./rules/AS-floating-promise.js\";\nimport { AS_FRONTMATTER_FIELD_UNUSED } from \"./rules/AS-frontmatter-field-unused.js\";\nimport { AS_IMPORT_CYCLE } from \"./rules/AS-import-cycle.js\";\nimport { AS_JSDOC_TYPE } from \"./rules/AS-jsdoc-type.js\";\nimport { AS_LARGE_LITERAL } from \"./rules/AS-large-literal.js\";\nimport { AS_MISSING_ASYNC } from \"./rules/AS-missing-async.js\";\nimport { AS_MUTATING_FROZEN } from \"./rules/AS-mutating-frozen.js\";\nimport { AS_NEEDLESS_TEMPLATE } from \"./rules/AS-needless-template.js\";\nimport { AS_SHADOW_GLOBAL } from \"./rules/AS-shadow-global.js\";\nimport { AS_UNBOUNDED_LOOP } from \"./rules/AS-unbounded-loop.js\";\nimport { AS_UNREACHABLE } from \"./rules/AS-unreachable.js\";\nimport { AS_UNUSED_IMPORT } from \"./rules/AS-unused-import.js\";\nimport { collectComments, tokenize, type Comment, type Position } from \"../parse/tokenizer.js\";\nimport { parseModule, type SourceSpan, type Statement } from \"../parse/parser.js\";\nimport type { Modules } from \"./rules/module-registry.js\";\n\nexport type Diagnostic = {\n code: string;\n severity: \"error\" | \"info\" | \"warning\";\n message: string;\n filename: string;\n line: number;\n column: number;\n span: SourceSpan;\n fix?: Fix;\n hint?: string;\n};\n\nexport type Fix = {\n range: readonly [number, number];\n replacement: string;\n};\n\nexport type LintOptions = {\n allowedExportNames?: readonly string[];\n allowedGlobals?: readonly string[];\n defaultExport?: DefaultExportSignature;\n fix?: boolean;\n fixRanges?: readonly Fix[\"range\"][];\n filename?: string;\n largeLiteralThreshold?: number;\n frontmatterFields?: readonly string[];\n modules?: Modules;\n};\n\nexport type LintFixResult = {\n diagnostics: Diagnostic[];\n fixed: string;\n fixes: Fix[];\n};\n\ntype LintRule = (source: string, options: LintOptions) => readonly Diagnostic[];\n\nconst RULES: readonly LintRule[] = [\n AS003,\n AS004,\n AS005,\n AS_SHADOW_GLOBAL,\n AS_UNUSED_IMPORT,\n AS006_007,\n AS_MISSING_ASYNC,\n AS009,\n AS010,\n AS011,\n AS013,\n AS015,\n AS_IMPORT_CYCLE,\n AS_FLOATING_PROMISE,\n AS_ASYNC_NOT_NEEDED,\n AS_JSDOC_TYPE,\n AS_NEEDLESS_TEMPLATE,\n AS_LARGE_LITERAL,\n AS_MUTATING_FROZEN,\n AS_FRONTMATTER_FIELD_UNUSED,\n AS_DESTRUCTURE_NULL_DEFAULT,\n AS_UNBOUNDED_LOOP,\n AS_UNREACHABLE,\n AS_EXPORT_IMPORT_META\n];\n\nconst KNOWN_DIAGNOSTIC_CODES = new Set([\n \"AS001\",\n \"AS002\",\n \"AS003\",\n \"AS004\",\n \"AS005\",\n \"AS006\",\n \"AS007\",\n \"AS008\",\n \"AS009\",\n \"AS010\",\n \"AS011\",\n \"AS012\",\n \"AS013\",\n \"AS014\",\n \"AS015\",\n \"AS-ASYNC-NOT-NEEDED\",\n \"AS-AWAIT-NON-PROMISE\",\n \"AS-EXPORT-DEFAULT-MISSING\",\n \"AS-DESTRUCTURE-NULL-DEFAULT\",\n \"AS-EXPORT-DEFAULT-MULTIPLE\",\n \"AS-EXPORT-DEFAULT-NOT-ARROW\",\n \"AS-EXPORT-DEFAULT-SIGNATURE\",\n \"AS-EXPORT-IMPORT-META\",\n \"AS-EXPORT-UNKNOWN\",\n \"AS-FLOATING-PROMISE\",\n \"AS-FRONTMATTER-FIELD-UNUSED\",\n \"AS-IMPORT-CYCLE\",\n \"AS-IMPORT-META-ASSIGN\",\n \"AS-JSDOC-TYPE\",\n \"AS-LARGE-LITERAL\",\n \"AS-MISSING-ASYNC\",\n \"AS-MUTATING-FROZEN\",\n \"AS-NEEDLESS-TEMPLATE\",\n \"AS-RETURN-AT-TOP\",\n \"AS-SHADOW-GLOBAL\",\n \"AS-UNBOUNDED-LOOP\",\n \"AS-UNKNOWN-DIRECTIVE\",\n \"AS-UNREACHABLE\",\n \"AS-UNUSED-IMPORT\"\n]);\n\ntype SuppressionState = {\n diagnostics: Diagnostic[];\n fileCodes: ReadonlySet<string>;\n lineCodes: ReadonlySet<string>;\n};\n\nexport function lint(source: string, options: LintOptions & { fix: true }): LintFixResult;\nexport function lint(source: string, options?: LintOptions): Diagnostic[];\nexport function lint(source: string, options: LintOptions = {}): Diagnostic[] | LintFixResult {\n const diagnostics = collectDiagnostics(source, options);\n\n if (!options.fix) {\n return diagnostics;\n }\n\n const { fixed, fixes } = applyNonOverlappingFixes(source, diagnostics, options.fixRanges);\n return {\n diagnostics:\n fixed === source ? diagnostics : collectDiagnostics(fixed, { ...options, fix: false }),\n fixed,\n fixes\n };\n}\n\nfunction collectDiagnostics(source: string, options: LintOptions): Diagnostic[] {\n const suppressions = buildSuppressionState(source, options);\n const as001Diagnostics = AS001(source, options);\n if (as001Diagnostics.length > 0 && !hasOnlyRegexLiteralDiagnostics(as001Diagnostics)) {\n return finalizeDiagnostics(as001Diagnostics, suppressions);\n }\n\n const diagnostics: Diagnostic[] = [...as001Diagnostics];\n for (const rule of RULES) {\n diagnostics.push(...rule(source, options));\n }\n\n const as010Keys = new Set(\n diagnostics\n .filter((diagnostic) => diagnostic.code === \"AS010\")\n .map((diagnostic) => createSpanKey(diagnostic.span))\n );\n\n return finalizeDiagnostics(\n diagnostics.filter(\n (diagnostic) => diagnostic.code !== \"AS007\" || !as010Keys.has(createSpanKey(diagnostic.span))\n ),\n suppressions\n );\n}\n\nfunction applyNonOverlappingFixes(\n source: string,\n diagnostics: readonly Diagnostic[],\n ranges?: readonly Fix[\"range\"][]\n): { fixed: string; fixes: Fix[] } {\n const fixes = diagnostics\n .flatMap((diagnostic) => (diagnostic.fix === undefined ? [] : [diagnostic.fix]))\n .filter(\n (fix) =>\n ranges === undefined ||\n ranges.some((range) => fix.range[0] >= range[0] && fix.range[1] <= range[1])\n )\n .sort(compareFixes);\n const selected: Fix[] = [];\n\n for (const fix of fixes) {\n if (selected.some((applied) => fixesOverlap(applied, fix))) {\n continue;\n }\n selected.push(fix);\n }\n\n selected.sort((left, right) => right.range[0] - left.range[0] || right.range[1] - left.range[1]);\n return {\n fixes: selected,\n fixed: selected.reduce(\n (result, fix) =>\n `${result.slice(0, fix.range[0])}${fix.replacement}${result.slice(fix.range[1])}`,\n source\n )\n };\n}\n\nfunction compareFixes(left: Fix, right: Fix): number {\n return left.range[0] - right.range[0] || left.range[1] - right.range[1];\n}\n\nfunction fixesOverlap(left: Fix, right: Fix): boolean {\n return left.range[0] < right.range[1] && right.range[0] < left.range[1];\n}\n\nfunction finalizeDiagnostics(\n diagnostics: readonly Diagnostic[],\n suppressions: SuppressionState\n): Diagnostic[] {\n return [\n ...diagnostics.filter((diagnostic) => !isSuppressed(diagnostic, suppressions)),\n ...suppressions.diagnostics\n ].sort(compareDiagnostics);\n}\n\nfunction isSuppressed(diagnostic: Diagnostic, suppressions: SuppressionState): boolean {\n return (\n suppressions.fileCodes.has(diagnostic.code) ||\n suppressions.lineCodes.has(createSuppressionKey(diagnostic.line, diagnostic.code))\n );\n}\n\nfunction buildSuppressionState(source: string, options: LintOptions): SuppressionState {\n const comments = collectComments(source);\n const lineCodes = new Set<string>();\n const fileCodes = new Set<string>();\n const diagnostics: Diagnostic[] = [];\n const statementSpans = collectStatementSpans(source);\n const lineStarts = createLineStarts(source);\n const filename = options.filename ?? \"<input>\";\n\n for (const comment of comments) {\n const directive = parseDirective(comment);\n if (directive === undefined) {\n continue;\n }\n\n const codes = directive.codes.filter(({ code, startOffset, endOffset }) => {\n if (KNOWN_DIAGNOSTIC_CODES.has(code)) {\n return true;\n }\n\n diagnostics.push(\n createUnknownDirectiveDiagnostic(filename, source, lineStarts, code, startOffset, endOffset)\n );\n return false;\n });\n\n if (directive.kind === \"file\") {\n if (comment.type !== \"block\" || !isTopOfFileComment(source, comment)) {\n continue;\n }\n\n for (const { code } of codes) {\n fileCodes.add(code);\n }\n continue;\n }\n\n if (directive.kind === \"line\") {\n const span = findContainingStatementSpan(comment, statementSpans);\n if (span !== undefined) {\n for (const { code } of codes) {\n for (let line = span.start.line; line <= span.end.line; line += 1) {\n lineCodes.add(createSuppressionKey(line, code));\n }\n }\n continue;\n }\n\n for (const { code } of codes) {\n lineCodes.add(createSuppressionKey(comment.start.line, code));\n }\n continue;\n }\n\n const span =\n findNextStatementSpan(comment, statementSpans) ?? findNextTokenSpan(source, comment);\n if (span === undefined) {\n continue;\n }\n\n for (const { code } of codes) {\n for (let line = span.start.line; line <= span.end.line; line += 1) {\n lineCodes.add(createSuppressionKey(line, code));\n }\n }\n }\n\n return { diagnostics, fileCodes, lineCodes };\n}\n\nfunction compareDiagnostics(left: Diagnostic, right: Diagnostic): number {\n return (\n left.line - right.line || left.column - right.column || left.code.localeCompare(right.code)\n );\n}\n\ntype ParsedDirective = {\n kind: \"file\" | \"line\" | \"next\";\n codes: Array<{\n code: string;\n startOffset: number;\n endOffset: number;\n }>;\n};\n\ntype CommentWord = {\n value: string;\n startOffset: number;\n endOffset: number;\n};\n\nfunction parseDirective(comment: Comment): ParsedDirective | undefined {\n const words = splitCommentWords(comment);\n const markerIndex = words.findIndex((word) => isDirectiveMarker(word.value));\n if (markerIndex < 0) {\n return undefined;\n }\n\n const marker = words[markerIndex]!;\n const codes: ParsedDirective[\"codes\"] = [];\n for (const word of words.slice(markerIndex + 1)) {\n if (!isDirectiveCodeLike(word.value)) {\n break;\n }\n\n codes.push({\n code: word.value,\n startOffset: word.startOffset,\n endOffset: word.endOffset\n });\n }\n\n if (marker.value === \"@as-disable-file\") {\n if (comment.type !== \"block\") {\n return undefined;\n }\n return { kind: \"file\", codes };\n }\n\n if (comment.type !== \"line\") {\n return undefined;\n }\n\n if (marker.value === \"@as-disable-line\") {\n return { kind: \"line\", codes };\n }\n\n return { kind: \"next\", codes };\n}\n\nfunction splitCommentWords(comment: Comment): CommentWord[] {\n const words: CommentWord[] = [];\n const contentOffset = comment.start.offset + 2;\n let index = 0;\n\n while (index < comment.value.length) {\n while (index < comment.value.length && isWhitespace(comment.value[index]!)) {\n index += 1;\n }\n\n const start = index;\n while (index < comment.value.length && !isWhitespace(comment.value[index]!)) {\n index += 1;\n }\n\n if (start < index) {\n words.push({\n value: comment.value.slice(start, index),\n startOffset: contentOffset + start,\n endOffset: contentOffset + index\n });\n }\n }\n\n return words;\n}\n\nfunction isDirectiveMarker(value: string): boolean {\n return value === \"@as-disable\" || value === \"@as-disable-line\" || value === \"@as-disable-file\";\n}\n\nfunction isDirectiveCodeLike(value: string): boolean {\n if (value.length <= 2 || value.slice(0, 2).toUpperCase() !== \"AS\") {\n return false;\n }\n\n for (let index = 2; index < value.length; index += 1) {\n const char = value[index]!;\n if (!isAsciiLetter(char) && !isDecimalDigit(char) && char !== \"-\") {\n return false;\n }\n }\n\n return true;\n}\n\nfunction collectStatementSpans(source: string): SourceSpan[] {\n try {\n const module = parseModule(source);\n const spans: SourceSpan[] = [];\n for (const statement of module.body) {\n collectStatementSpan(statement, spans);\n }\n return spans.sort((left, right) => left.start.offset - right.start.offset);\n } catch {\n return [];\n }\n}\n\nfunction collectStatementSpan(statement: Statement, spans: SourceSpan[]): void {\n spans.push(statement.span);\n\n switch (statement.type) {\n case \"BlockStatement\":\n for (const child of statement.body) {\n collectStatementSpan(child, spans);\n }\n return;\n case \"DoWhileStatement\":\n case \"ForInStatement\":\n case \"ForOfStatement\":\n case \"ForStatement\":\n case \"WhileStatement\":\n collectStatementSpan(statement.body, spans);\n return;\n case \"IfStatement\": {\n collectStatementSpan(statement.consequent, spans);\n if (statement.alternate !== undefined) {\n collectStatementSpan(statement.alternate, spans);\n }\n return;\n }\n case \"TryStatement\": {\n collectStatementSpan(statement.block, spans);\n if (statement.handler !== undefined) {\n collectStatementSpan(statement.handler.body, spans);\n }\n if (statement.finalizer !== undefined) {\n collectStatementSpan(statement.finalizer, spans);\n }\n return;\n }\n }\n}\n\nfunction findNextStatementSpan(\n comment: Comment,\n statementSpans: readonly SourceSpan[]\n): SourceSpan | undefined {\n return statementSpans.find((span) => span.start.offset >= comment.end.offset);\n}\n\nfunction findContainingStatementSpan(\n comment: Comment,\n statementSpans: readonly SourceSpan[]\n): SourceSpan | undefined {\n return statementSpans\n .filter(\n (span) => span.start.offset <= comment.start.offset && comment.start.offset <= span.end.offset\n )\n .sort((left, right) => spanLength(left) - spanLength(right))[0];\n}\n\nfunction spanLength(span: SourceSpan): number {\n return span.end.offset - span.start.offset;\n}\n\nfunction findNextTokenSpan(source: string, comment: Comment): SourceSpan | undefined {\n try {\n const token = tokenize(source, { allowRegexLiterals: true }).find(\n (candidate) => candidate.type !== \"eof\" && candidate.start.offset >= comment.end.offset\n );\n if (token === undefined) {\n return undefined;\n }\n return { start: token.start, end: token.end };\n } catch {\n return undefined;\n }\n}\n\nfunction isTopOfFileComment(source: string, comment: Comment): boolean {\n for (let index = 0; index < comment.start.offset; index += 1) {\n if (!isWhitespace(source[index]!)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction createUnknownDirectiveDiagnostic(\n filename: string,\n source: string,\n lineStarts: readonly number[],\n code: string,\n startOffset: number,\n endOffset: number\n): Diagnostic {\n const start = positionAt(lineStarts, startOffset);\n const end = positionAt(lineStarts, endOffset);\n return {\n code: \"AS-UNKNOWN-DIRECTIVE\",\n severity: \"warning\",\n message: `Unknown lint disable rule code '${code}'.`,\n filename,\n line: start.line,\n column: start.column,\n span: { start, end }\n };\n}\n\nfunction createLineStarts(source: string): number[] {\n const starts = [0];\n for (let index = 0; index < source.length; index += 1) {\n const char = source[index]!;\n if (char === \"\\r\" || char === \"\\n\") {\n if (char === \"\\r\" && source[index + 1] === \"\\n\") index += 1;\n starts.push(index + 1);\n }\n }\n return starts;\n}\n\nfunction positionAt(lineStarts: readonly number[], offset: number): Position {\n let lineIndex = 0;\n for (let index = 0; index < lineStarts.length; index += 1) {\n if (lineStarts[index]! > offset) {\n break;\n }\n lineIndex = index;\n }\n\n const lineStart = lineStarts[lineIndex]!;\n return {\n line: lineIndex + 1,\n column: offset - lineStart + 1,\n offset\n };\n}\n\nfunction createSuppressionKey(line: number, code: string): string {\n return `${line}:${code}`;\n}\n\nfunction isWhitespace(value: string): boolean {\n return value === \" \" || value === \"\\t\" || value === \"\\n\" || value === \"\\r\";\n}\n\nfunction isAsciiLetter(value: string): boolean {\n return (value >= \"A\" && value <= \"Z\") || (value >= \"a\" && value <= \"z\");\n}\n\nfunction isDecimalDigit(value: string): boolean {\n return value >= \"0\" && value <= \"9\";\n}\n\nfunction createSpanKey(span: SourceSpan): string {\n return `${span.start.offset}:${span.end.offset}`;\n}\n\nfunction hasOnlyRegexLiteralDiagnostics(diagnostics: readonly Diagnostic[]): boolean {\n return diagnostics.every(\n (diagnostic) => diagnostic.message === \"Disallowed syntax: regex literal.\"\n );\n}\n", "import { randomInt } from \"node:crypto\";\n\nimport { createSeededRandom } from \"./interp/globals/math.js\";\nimport type { SafeJSSnapshot } from \"./restore.js\";\nimport type { RunRandom } from \"./run.js\";\n\nexport type ReplayableRandom = RunRandom & {\n restore: (state: number) => void;\n};\n\nexport function createReplayableRandom(\n options: {\n seed?: number;\n snapshot?: SafeJSSnapshot;\n } = {}\n): ReplayableRandom {\n const snapshot = options.snapshot;\n const saved = snapshot?.random;\n let initialState = options.seed;\n if (saved !== undefined) {\n const hasLoopState =\n typeof snapshot?.loopIterations === \"object\" &&\n snapshot.loopIterations !== null &&\n Object.keys(snapshot.loopIterations).length > 0;\n const replaysFromStart =\n snapshot?.replay !== undefined ||\n (Array.isArray(snapshot?.pendingAwaits) &&\n snapshot.pendingAwaits.length > 0 &&\n !hasLoopState);\n initialState = replaysFromStart\n ? (saved.initialState ?? saved.seed)\n : (saved.resumeState ?? saved.state);\n }\n const generator = createSeededRandom(initialState ?? randomInt(4_294_967_296));\n return { seed: saved?.seed ?? generator.snapshot(), ...generator };\n}\n", "import { createSandboxClosure, type SandboxObject } from \"../values.js\";\n\nconst mathMethods = {\n abs: Math.abs,\n acos: Math.acos,\n acosh: Math.acosh,\n asin: Math.asin,\n asinh: Math.asinh,\n atan: Math.atan,\n atan2: Math.atan2,\n atanh: Math.atanh,\n ceil: Math.ceil,\n cbrt: Math.cbrt,\n clz32: Math.clz32,\n cos: Math.cos,\n cosh: Math.cosh,\n exp: Math.exp,\n expm1: Math.expm1,\n floor: Math.floor,\n f16round,\n fround: Math.fround,\n hypot: Math.hypot,\n imul: Math.imul,\n log: Math.log,\n log1p: Math.log1p,\n log10: Math.log10,\n log2: Math.log2,\n max: Math.max,\n min: Math.min,\n pow: Math.pow,\n round: Math.round,\n sign: Math.sign,\n sin: Math.sin,\n sinh: Math.sinh,\n sqrt: Math.sqrt,\n tan: Math.tan,\n tanh: Math.tanh,\n trunc: Math.trunc\n} satisfies Record<string, (...args: number[]) => number>;\n\nfunction f16round(value: number): number {\n const number = +value;\n if (!Number.isFinite(number) || number === 0) {\n return number;\n }\n\n const magnitude = Math.abs(number);\n if (magnitude >= 65520) {\n return number < 0 ? -Infinity : Infinity;\n }\n\n let quantum = 2 ** -24;\n let boundary = 2 ** -13;\n for (let exponent = -13; exponent <= 15 && magnitude >= boundary; exponent += 1) {\n quantum *= 2;\n boundary *= 2;\n }\n\n const scaled = magnitude / quantum;\n const lower = Math.floor(scaled);\n const remainder = scaled - lower;\n const rounded =\n (remainder > 0.5 || (remainder === 0.5 && lower % 2 !== 0) ? lower + 1 : lower) * quantum;\n return number < 0 ? -rounded : rounded;\n}\n\nexport type SeededRandom = {\n next: () => number;\n restore: (state: number) => void;\n snapshot: () => number;\n};\n\nexport type MathGlobalsOptions = {\n random?: () => number;\n};\n\nexport type MathGlobals = {\n Infinity: number;\n Math: SandboxObject;\n NaN: number;\n};\n\nexport function createMathGlobals(options: MathGlobalsOptions = {}): MathGlobals {\n const random = options.random ?? Math.random;\n const mathObject: SandboxObject = {\n E: Math.E,\n LN2: Math.LN2,\n LN10: Math.LN10,\n LOG2E: Math.LOG2E,\n LOG10E: Math.LOG10E,\n PI: Math.PI,\n SQRT1_2: Math.SQRT1_2,\n SQRT2: Math.SQRT2,\n random: createSandboxClosure({ sandbox: true, call: () => random(), name: \"random\" })\n };\n\n for (const [name, method] of Object.entries(mathMethods)) {\n mathObject[name] = createSandboxClosure({\n sandbox: true,\n call: (args) => Reflect.apply(method, Math, args as number[]),\n name\n });\n }\n\n return {\n Infinity,\n Math: mathObject,\n NaN: Number.NaN\n };\n}\n\nexport function createSeededRandom(seed: number): SeededRandom {\n let state = normalizeSeed(seed);\n\n return {\n next: () => {\n state = (Math.imul(state, 1_664_525) + 1_013_904_223) >>> 0;\n return state / 4_294_967_296;\n },\n snapshot: () => state,\n restore: (nextState) => {\n state = normalizeSeed(nextState);\n }\n };\n}\n\nfunction normalizeSeed(seed: number): number {\n if (!Number.isFinite(seed)) {\n throw new TypeError(\"Seeded random requires a finite numeric seed.\");\n }\n\n return Math.trunc(seed) >>> 0;\n}\n", "import { enterRunningState } from \"./running-state.js\";\n\nexport type GeneratorCompletion = {\n type: \"normal\" | \"return\" | \"throw\";\n value: unknown;\n};\n\nexport type GeneratorChannel = {\n next(value?: unknown): Promise<IteratorResult<unknown>>;\n return(value?: unknown): Promise<IteratorResult<unknown>>;\n throw(error?: unknown): Promise<IteratorResult<unknown>>;\n snapshot(): GeneratorChannelSnapshot;\n};\n\nexport type GeneratorChannelSnapshot = {\n yieldNodeId?: number;\n sent: GeneratorCompletion[];\n};\n\ntype Deferred<T> = {\n promise: Promise<T>;\n reject(error: unknown): void;\n resolve(value: T): void;\n};\n\ntype ChannelSignal =\n | { type: \"complete\"; value: unknown }\n | { type: \"error\"; error: unknown }\n | { type: \"yield\"; value: unknown };\n\nexport function createGeneratorChannel(\n body: (\n yieldValue: (value?: unknown, yieldNodeId?: number) => Promise<GeneratorCompletion>\n ) => Promise<unknown>\n): GeneratorChannel {\n let state: \"unstarted\" | \"running\" | \"suspended\" | \"done\" = \"unstarted\";\n let signal = deferred<ChannelSignal>();\n let resume: Deferred<GeneratorCompletion> | undefined;\n const start = deferred<void>();\n const sent: GeneratorCompletion[] = [];\n let yieldNodeId: number | undefined;\n const bodyPromise = start.promise.then(() => body(yieldValue));\n\n void bodyPromise.then(\n (value) => {\n if (state === \"done\") {\n return;\n }\n state = \"done\";\n signal.resolve({ type: \"complete\", value });\n },\n (error: unknown) => {\n if (state === \"done\") {\n return;\n }\n state = \"done\";\n signal.resolve({ type: \"error\", error });\n }\n );\n void bodyPromise.catch(() => undefined);\n\n async function yieldValue(value?: unknown, nodeId?: number): Promise<GeneratorCompletion> {\n resume = deferred<GeneratorCompletion>();\n yieldNodeId = nodeId;\n state = \"suspended\";\n signal.resolve({ type: \"yield\", value });\n return resume.promise;\n }\n\n async function deliver(completion: GeneratorCompletion): Promise<IteratorResult<unknown>> {\n const leaveRunning = enterRunningState(channelIdentity);\n try {\n if (state === \"done\") {\n if (completion.type === \"return\") {\n return { value: completion.value, done: true };\n }\n if (completion.type === \"throw\") {\n throw completion.value;\n }\n return { value: undefined, done: true };\n }\n\n if (state === \"unstarted\") {\n if (completion.type === \"return\") {\n state = \"done\";\n return { value: completion.value, done: true };\n }\n if (completion.type === \"throw\") {\n state = \"done\";\n throw completion.value;\n }\n\n state = \"running\";\n sent.push(completion);\n start.resolve();\n } else {\n state = \"running\";\n sent.push(completion);\n signal = deferred<ChannelSignal>();\n const pendingResume = resume;\n resume = undefined;\n pendingResume?.resolve(completion);\n }\n\n const settled = await signal.promise;\n if (settled.type === \"yield\") {\n return { value: settled.value, done: false };\n }\n if (settled.type === \"error\") {\n throw settled.error;\n }\n return { value: settled.value, done: true };\n } finally {\n leaveRunning();\n }\n }\n\n const channelIdentity = {};\n\n return {\n next: (value) => deliver({ type: \"normal\", value }),\n return: (value) => deliver({ type: \"return\", value }),\n throw: (error) => deliver({ type: \"throw\", value: error }),\n snapshot: () => ({\n ...(yieldNodeId === undefined ? {} : { yieldNodeId }),\n sent: sent.map((completion) => ({ ...completion }))\n })\n };\n}\n\nexport function restoreGeneratorChannel(\n body: Parameters<typeof createGeneratorChannel>[0],\n snapshot: GeneratorChannelSnapshot\n): GeneratorChannel {\n const channel = createGeneratorChannel(body);\n const sent = snapshot.sent.map((completion) => ({ ...completion }));\n let restored = false;\n let restoring: Promise<void> | undefined;\n\n const ensureRestored = (): Promise<void> => {\n if (restored) {\n return Promise.resolve();\n }\n restoring ??= replay();\n return restoring;\n };\n\n const deliver = async (\n method: \"next\" | \"return\" | \"throw\",\n value?: unknown\n ): Promise<IteratorResult<unknown>> => {\n await ensureRestored();\n sent.push({\n type: method === \"next\" ? \"normal\" : method,\n value\n });\n return channel[method](value);\n };\n\n return {\n next: (value) => deliver(\"next\", value),\n return: (value) => deliver(\"return\", value),\n throw: (error) => deliver(\"throw\", error),\n snapshot: () => ({\n yieldNodeId: restored ? channel.snapshot().yieldNodeId : snapshot.yieldNodeId,\n sent: sent.map((completion) => ({ ...completion }))\n })\n };\n\n async function replay(): Promise<void> {\n const result = await channel.next();\n if (result.done) {\n throw new TypeError(\"Cannot restore a suspended generator that completed during replay.\");\n }\n\n if (channel.snapshot().yieldNodeId !== snapshot.yieldNodeId) {\n throw new TypeError(\"Cannot restore generator at the recorded yield expression.\");\n }\n restored = true;\n }\n}\n\nfunction deferred<T>(): Deferred<T> {\n let resolve!: (value: T) => void;\n let reject!: (error: unknown) => void;\n const promise = new Promise<T>((innerResolve, innerReject) => {\n resolve = innerResolve;\n reject = innerReject;\n });\n return { promise, reject, resolve };\n}\n", "import type {\n ArrayPattern,\n AssignmentPattern,\n AssignmentProperty,\n Identifier,\n MemberExpression,\n ObjectPattern,\n ParseResult,\n RestElement,\n VariableDeclarationKind,\n VariableDeclarator\n} from \"../parse.js\";\nimport type { AsyncEvaluationResult } from \"./async.js\";\nimport type { Scope } from \"./scope.js\";\nimport {\n isSandboxMap,\n isSandboxSet,\n type SandboxArray,\n type SandboxObject,\n type SandboxValue\n} from \"./values.js\";\n\ntype Pattern = VariableDeclarator[\"id\"] | AssignmentPattern | MemberExpression | RestElement;\n\nexport type PatternTarget = { kind: VariableDeclarationKind; initialize?: true } | { assign: true };\n\nexport type PatternContext = {\n evaluate(node: ParseResult): Promise<AsyncEvaluationResult>;\n};\n\nexport type BindPatternResult =\n | { ok: true }\n | {\n ok: false;\n result: AsyncEvaluationResult;\n };\n\nexport async function bindPattern(\n pattern: Pattern,\n value: SandboxValue,\n target: PatternTarget,\n scope: Scope,\n context: PatternContext\n): Promise<BindPatternResult> {\n switch (pattern.type) {\n case \"Identifier\":\n bindIdentifier(pattern, value, target, scope);\n return { ok: true };\n case \"MemberExpression\":\n if (\"kind\" in target) {\n throw new TypeError(\"Destructuring declarations cannot bind to member expressions.\");\n }\n return bindMemberExpression(pattern, value, scope, context);\n case \"AssignmentPattern\":\n return bindAssignmentPattern(pattern, value, target, scope, context);\n case \"ArrayPattern\":\n return bindArrayPattern(pattern, value, target, scope, context);\n case \"ObjectPattern\":\n return bindObjectPattern(pattern, value, target, scope, context);\n case \"RestElement\":\n return bindPattern(pattern.argument, value, target, scope, context);\n }\n}\n\nfunction bindIdentifier(\n pattern: Identifier,\n value: SandboxValue,\n target: PatternTarget,\n scope: Scope\n): void {\n if (\"assign\" in target || (target.kind === \"var\" && target.initialize !== true)) {\n if (\"assign\" in target) {\n const binding = scope.lookup(pattern.name);\n if (!binding.found) {\n throw new ReferenceError(`Cannot assign to undeclared binding '${pattern.name}'.`);\n }\n if (binding.kind === \"const\") {\n throw new TypeError(`Cannot assign to const '${pattern.name}'`);\n }\n }\n scope.assign(pattern.name, value);\n return;\n }\n\n scope.declare(pattern.name, target.kind, value);\n}\n\nasync function bindAssignmentPattern(\n pattern: AssignmentPattern,\n value: SandboxValue,\n target: PatternTarget,\n scope: Scope,\n context: PatternContext\n): Promise<BindPatternResult> {\n if (value !== undefined) {\n return bindPattern(pattern.left, value, target, scope, context);\n }\n\n const defaultValue = await context.evaluate(pattern.right);\n if (defaultValue.kind !== \"normal\") {\n return { ok: false, result: defaultValue };\n }\n\n return bindPattern(pattern.left, defaultValue.value, target, scope, context);\n}\n\nasync function bindArrayPattern(\n pattern: ArrayPattern,\n value: SandboxValue,\n target: PatternTarget,\n scope: Scope,\n context: PatternContext\n): Promise<BindPatternResult> {\n const values = getArrayPatternValues(value);\n\n for (let index = 0; index < pattern.elements.length; index += 1) {\n const element = pattern.elements[index];\n if (element === null) {\n continue;\n }\n\n const elementValue =\n element.type === \"RestElement\" ? values.slice(index) : (values[index] as SandboxValue);\n const binding = await bindPattern(element, elementValue, target, scope, context);\n if (!binding.ok) {\n return binding;\n }\n }\n\n return { ok: true };\n}\n\nasync function bindObjectPattern(\n pattern: ObjectPattern,\n value: SandboxValue,\n target: PatternTarget,\n scope: Scope,\n context: PatternContext\n): Promise<BindPatternResult> {\n if (typeof value !== \"object\" || value === null) {\n throw new TypeError(\"Object destructuring declarations require a non-null object value.\");\n }\n\n const excludedKeys = new Set<string>();\n for (const property of pattern.properties) {\n if (property.type === \"RestElement\") {\n const binding = await bindPattern(\n property,\n copyObjectRestValue(value, excludedKeys),\n target,\n scope,\n context\n );\n if (!binding.ok) {\n return binding;\n }\n continue;\n }\n\n const key = await evaluatePatternKey(property, context);\n if (!key.ok) {\n return key;\n }\n\n excludedKeys.add(String(key.value));\n const binding = await bindPattern(\n property.value,\n (value as Record<string | number, SandboxValue>)[key.value],\n target,\n scope,\n context\n );\n if (!binding.ok) {\n return binding;\n }\n }\n\n return { ok: true };\n}\n\nasync function bindMemberExpression(\n pattern: MemberExpression,\n value: SandboxValue,\n scope: Scope,\n context: PatternContext\n): Promise<BindPatternResult> {\n const object = await context.evaluate(pattern.object);\n if (object.kind !== \"normal\") {\n return { ok: false, result: object };\n }\n if (object.value === null || object.value === undefined) {\n throw new TypeError(\"Cannot assign properties of null or undefined.\");\n }\n if (!isIndexableValue(object.value)) {\n throw new TypeError(\"Assignment expressions require a sandbox object property.\");\n }\n\n const property = pattern.computed\n ? await evaluateProperty(pattern.property, context)\n : { ok: true as const, value: getStaticPropertyName(pattern.property) };\n if (!property.ok) {\n return property;\n }\n\n setProperty(object.value, property.value, value);\n return { ok: true };\n}\n\nasync function evaluatePatternKey(\n property: AssignmentProperty,\n context: PatternContext\n): Promise<{ ok: true; value: string | number } | { ok: false; result: AsyncEvaluationResult }> {\n return property.computed\n ? evaluateProperty(property.key, context)\n : { ok: true, value: getStaticPropertyName(property.key) };\n}\n\nasync function evaluateProperty(\n property: MemberExpression[\"property\"],\n context: PatternContext\n): Promise<{ ok: true; value: string | number } | { ok: false; result: AsyncEvaluationResult }> {\n const result = await context.evaluate(property);\n if (result.kind !== \"normal\") {\n return { ok: false, result };\n }\n if (typeof result.value !== \"string\" && typeof result.value !== \"number\") {\n throw new TypeError(\"Computed property access requires a string or number key.\");\n }\n return { ok: true, value: result.value };\n}\n\nfunction getStaticPropertyName(property: MemberExpression[\"property\"]): string | number {\n if (property.type === \"Identifier\") {\n return property.name;\n }\n if (property.type === \"StringLiteral\" || property.type === \"NumericLiteral\") {\n return property.value;\n }\n throw new TypeError(`Unsupported static property node '${property.type}'.`);\n}\n\nfunction getArrayPatternValues(value: unknown): SandboxArray {\n if (Array.isArray(value)) {\n return value as SandboxArray;\n }\n if (typeof value === \"string\") {\n return Array.from(value);\n }\n if (isSandboxMap(value)) {\n return Array.from(value.entries, ([key, entry]) => [key, entry] as SandboxArray);\n }\n if (isSandboxSet(value)) {\n return [...value.values];\n }\n if (isIterableValue(value)) {\n throw new TypeError(\n `Array destructuring declarations support only arrays and strings; received ${describeRuntimeValue(value)}.`\n );\n }\n throw new TypeError(\"Array destructuring declarations require an array or string iterable.\");\n}\n\nfunction isIterableValue(value: unknown): value is Iterable<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n Symbol.iterator in value &&\n typeof value[Symbol.iterator] === \"function\"\n );\n}\n\nfunction describeRuntimeValue(value: unknown): string {\n if (value === null) return \"null\";\n if (value === undefined) return \"undefined\";\n if (typeof value === \"object\") return value.constructor?.name ?? \"Object\";\n return typeof value;\n}\n\nfunction copyObjectRestValue(\n value: Exclude<SandboxValue, null | undefined>,\n excludedKeys: ReadonlySet<string>\n): SandboxObject {\n const rest = Object.create(null) as SandboxObject;\n for (const [key, entryValue] of Object.entries(value)) {\n if (!excludedKeys.has(key)) {\n defineProperty(rest, key, entryValue);\n }\n }\n return rest;\n}\n\nfunction isIndexableValue(value: SandboxValue): value is SandboxArray | SandboxObject {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction setProperty(\n target: SandboxArray | SandboxObject,\n property: string | number,\n value: SandboxValue\n): void {\n if (Array.isArray(target)) {\n const key = String(property);\n if (key === \"length\" || isArrayIndexKey(key)) {\n (target as unknown as Record<string, SandboxValue>)[key] = value;\n return;\n }\n defineProperty(target, key, value);\n return;\n }\n defineProperty(target, String(property), value);\n}\n\nfunction isArrayIndexKey(value: string): boolean {\n if (value === \"\") {\n return false;\n }\n\n const index = Number(value);\n return Number.isInteger(index) && index >= 0 && index < 4_294_967_295 && String(index) === value;\n}\n\nfunction defineProperty(\n target: SandboxArray | SandboxObject,\n key: string,\n value: SandboxValue\n): void {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n}\n", "import type { ParseResult } from \"../parse.js\";\nimport { boundIdentifiers, hoistedVarDeclarations } from \"../parse/bindings.js\";\nimport type { Scope } from \"./scope.js\";\n\nexport function hoistVarDeclarations(node: ParseResult, scope: Scope): void {\n for (const declaration of hoistedVarDeclarations([node])) {\n for (const declarator of declaration.declarations) {\n for (const identifier of boundIdentifiers(declarator.id)) {\n scope.declareVar(identifier.name);\n }\n }\n }\n}\n", "import type {\n ArrowFunctionExpression,\n AwaitExpression,\n BlockStatement,\n FunctionDeclaration,\n FunctionExpression,\n ParseResult,\n SourceSpan\n} from \"../parse.js\";\nimport { createGeneratorChannel, type GeneratorCompletion } from \"./generator.js\";\nimport { getBoundOtelSpan, type OtelSpan } from \"../observability/otel.js\";\nimport type { Budget } from \"./budget.js\";\nimport type { EvaluationResult } from \"./exceptions.js\";\nimport type {\n InterpreterError,\n InterpreterSnapshot,\n LoopIterationSnapshot\n} from \"./interpreter.js\";\nimport { bindPattern } from \"./patterns.js\";\nimport { getThenable, resolveSandboxValue } from \"./promise.js\";\nimport { runAsyncPrefix, suspendJob } from \"./jobs.js\";\nimport { CompileScope } from \"./regex/compile-guard.js\";\nimport { awaitSandboxValue } from \"./cancel.js\";\nimport type { Scope } from \"./scope.js\";\nimport { hoistVarDeclarations } from \"./var-hoist.js\";\nimport {\n boundIdentifiers,\n containsParameterExpression,\n getFunctionLength,\n hoistedVarDeclarations\n} from \"../parse/bindings.js\";\nimport {\n createSandboxArguments,\n createSandboxClosure,\n createSandboxGenerator,\n createSandboxPromise,\n allocateProducedSandboxValue,\n reconcileCompiledValues,\n isSandboxPromise,\n type SandboxCallContext,\n type SandboxValue\n} from \"./values.js\";\n\nexport type InterpreterYieldPoint = {\n kind: \"await\" | \"generator-yield\" | \"loop-iteration\";\n nodeId?: number;\n otelSpan?: OtelSpan;\n replayState?: unknown;\n snapshot: () => InterpreterSnapshot;\n span: SourceSpan;\n};\n\ntype ResumeBreakpoint = Omit<InterpreterYieldPoint, \"snapshot\">;\n\nexport type AsyncInterpreterError = InterpreterError;\n\nexport type AsyncEvaluationResult = EvaluationResult<AsyncInterpreterError>;\n\nexport type AsyncEvaluationContext = {\n compilation?: CompileScope;\n activeLoopIterations: Map<number, LoopIterationSnapshot>;\n budget: Budget;\n callStack: string[];\n onYield?: (yieldPoint: InterpreterYieldPoint) => void;\n onSuspend?: () => void;\n captureReplayState?: () => unknown;\n rootNode?: ParseResult;\n functionBody?: BlockStatement;\n restoredLoopIterations: Map<number, LoopIterationSnapshot>;\n resumeTarget?: { nodeId?: number };\n scope: Scope;\n signal?: AbortSignal;\n snapshot?: (scope: Scope) => InterpreterSnapshot;\n stats: {\n currentDataSize: number;\n nodeVisits: number;\n peakDataSize: number;\n };\n generatorYield?: (value?: SandboxValue, yieldNodeId?: number) => Promise<GeneratorCompletion>;\n generatorResume?: {\n sent: GeneratorCompletion[];\n yieldNodeId: number;\n };\n};\n\nexport type EvaluateAsyncNode = (\n node: ParseResult,\n context: AsyncEvaluationContext\n) => Promise<AsyncEvaluationResult>;\n\nexport function emitResumeBreakpoint(\n context: AsyncEvaluationContext,\n breakpoint: ResumeBreakpoint\n): void {\n context.onYield?.({\n ...breakpoint,\n snapshot: () => context.snapshot?.(context.scope) ?? context.scope.snapshot()\n });\n}\n\nexport async function evaluateArrowFunctionExpression(\n node: ArrowFunctionExpression,\n context: AsyncEvaluationContext,\n evaluateNode: EvaluateAsyncNode\n): Promise<AsyncEvaluationResult> {\n return {\n kind: \"normal\",\n hasValue: true,\n value: createInterpretedClosure(node, context, evaluateNode)\n };\n}\n\nexport async function evaluateFunctionExpression(\n node: FunctionExpression,\n context: AsyncEvaluationContext,\n evaluateNode: EvaluateAsyncNode\n): Promise<AsyncEvaluationResult> {\n if (node.id === undefined) {\n return {\n kind: \"normal\",\n hasValue: true,\n value: createInterpretedClosure(node, context, evaluateNode)\n };\n }\n\n const wrapperScope = context.scope.child();\n const closure = createInterpretedClosure(node, { ...context, scope: wrapperScope }, evaluateNode);\n wrapperScope.declare(node.id.name, \"const\", closure);\n\n return {\n kind: \"normal\",\n hasValue: true,\n value: closure\n };\n}\n\nexport function createInterpretedClosure(\n node: ArrowFunctionExpression | FunctionDeclaration | FunctionExpression,\n context: AsyncEvaluationContext,\n evaluateNode: EvaluateAsyncNode\n) {\n if (node.type !== \"ArrowFunctionExpression\" && node.generator) {\n return createGeneratorClosure(node, context, evaluateNode);\n }\n\n const construct =\n node.type !== \"ArrowFunctionExpression\" &&\n !(node.type === \"FunctionExpression\" && node.method === true) &&\n !node.async\n ? async (args: readonly SandboxValue[], callContext?: SandboxCallContext) => {\n const thisValue = {};\n const result = await executeClosure(\n node,\n args,\n thisValue,\n {\n ...context,\n compilation: callContext?.compilation ?? context.compilation,\n callStack: [...(callContext?.stack ?? context.callStack)]\n },\n evaluateNode\n );\n return isConstructResult(result) ? result : thisValue;\n }\n : undefined;\n\n return createSandboxClosure({\n sandbox: true,\n length: getFunctionLength(node.params),\n ...(node.async ? { async: true } : {}),\n ...(node.type === \"FunctionDeclaration\" || node.type === \"FunctionExpression\"\n ? node.id === undefined\n ? {}\n : { name: node.id.name }\n : {}),\n ...(construct === undefined ? {} : { construct }),\n retainedValues: () => context.scope.retainedValues(),\n call: (args, callContext) => {\n const invocationContext = {\n ...context,\n compilation: callContext?.compilation ?? context.compilation,\n callStack: [...(callContext?.stack ?? context.callStack)]\n };\n if (!node.async)\n return executeClosure(node, args, callContext?.thisValue, invocationContext, evaluateNode);\n\n let completePrefix!: () => void;\n const synchronousPrefix = new Promise<void>((resolve) => {\n completePrefix = resolve;\n });\n const promise = new Promise<SandboxValue>((resolve, reject) => {\n runAsyncPrefix(async () => {\n try {\n const value = await executeClosure(\n node,\n args,\n callContext?.thisValue,\n { ...invocationContext, onSuspend: completePrefix },\n evaluateNode\n );\n resolve(\n isSandboxPromise(value) || getThenable(value) !== undefined\n ? awaitSandboxValue(\n createSandboxPromise(resolveSandboxValue(value, { budget: context.budget }), {\n trackReplay: false\n }),\n context.signal,\n context.budget\n )\n : allocateProducedSandboxValue(value, context.budget)\n );\n } catch (error) {\n reject(error);\n } finally {\n completePrefix();\n }\n }).catch((error: unknown) => {\n reject(error);\n completePrefix();\n });\n });\n return createSandboxPromise(promise, { synchronousPrefix });\n }\n });\n}\n\nfunction createGeneratorClosure(\n node: FunctionDeclaration | FunctionExpression,\n context: AsyncEvaluationContext,\n evaluateNode: EvaluateAsyncNode\n) {\n return createSandboxClosure({\n sandbox: true,\n length: getFunctionLength(node.params),\n ...(node.id === undefined ? {} : { name: node.id.name }),\n retainedValues: () => context.scope.retainedValues(),\n call: async (args, callContext) => {\n const closureContext = {\n ...context,\n compilation: callContext?.compilation ?? context.compilation,\n callStack: [...(callContext?.stack ?? context.callStack)]\n };\n const scope = await createClosureScope(\n node,\n args,\n callContext?.thisValue,\n closureContext,\n evaluateNode\n );\n const channel = createGeneratorChannel(async (generatorYield) => {\n const result = await evaluateNode(node.body, {\n ...closureContext,\n functionBody: node.body,\n generatorYield: (value, yieldNodeId) => {\n generator.state = \"suspended\";\n return generatorYield(value, yieldNodeId);\n },\n scope\n });\n if (result.kind === \"error\") {\n throw result.error;\n }\n if (result.kind === \"throw\") {\n throw result.value;\n }\n return result.hasValue ? result.value : undefined;\n });\n const generator = createSandboxGenerator(channel);\n return generator;\n }\n });\n}\n\nfunction isConstructResult(value: SandboxValue): boolean {\n return typeof value === \"object\" && value !== null;\n}\n\nexport async function evaluateAwaitExpression(\n node: AwaitExpression,\n context: AsyncEvaluationContext,\n evaluateNode: EvaluateAsyncNode\n): Promise<AsyncEvaluationResult> {\n const replayState = context.captureReplayState?.();\n const argument = await evaluateNode(node.argument, context);\n if (argument.kind !== \"normal\") {\n return argument;\n }\n\n context.onSuspend?.();\n\n emitResumeBreakpoint(context, {\n kind: \"await\",\n replayState,\n nodeId: node.nodeId,\n ...(getBoundOtelSpan(argument.value) === undefined\n ? {}\n : { otelSpan: getBoundOtelSpan(argument.value) }),\n span: node.span\n });\n\n const leaveAwait = context.budget.enterAwait();\n\n try {\n return {\n kind: \"normal\",\n hasValue: true,\n value: await suspendJob(awaitSandboxValue(argument.value, context.signal, context.budget))\n };\n } finally {\n leaveAwait();\n }\n}\n\nasync function executeClosure(\n node: ArrowFunctionExpression | FunctionDeclaration | FunctionExpression,\n args: readonly SandboxValue[],\n thisValue: SandboxValue,\n context: AsyncEvaluationContext,\n evaluateNode: EvaluateAsyncNode\n): Promise<SandboxValue> {\n const parent = context.compilation;\n const operation = context.budget.acquireCompileOwner(false, parent?.owner);\n const compilation = new CompileScope(operation.owner, parent);\n context = { ...context, compilation };\n try {\n const scope = await createClosureScope(node, args, thisValue, context, evaluateNode);\n\n const result = await evaluateNode(node.body, {\n ...context,\n functionBody: node.body.type === \"BlockStatement\" ? node.body : undefined,\n scope\n });\n\n const value = \"hasValue\" in result && result.hasValue ? result.value : undefined;\n reconcileCompiledValues(\n context.budget,\n [...scope.retainedValues(), ...context.budget.retainedValues(), value],\n compilation,\n parent,\n [value]\n );\n\n if (result.kind === \"error\") {\n throw result.error;\n }\n\n if (result.kind === \"throw\") {\n throw result.value;\n }\n\n if (isBlockBody(node.body)) {\n return result.hasValue ? result.value : undefined;\n }\n\n return result.value;\n } finally {\n compilation.dispose();\n operation.release();\n }\n}\n\nasync function createClosureScope(\n node: ArrowFunctionExpression | FunctionDeclaration | FunctionExpression,\n args: readonly SandboxValue[],\n thisValue: SandboxValue,\n context: AsyncEvaluationContext,\n evaluateNode: EvaluateAsyncNode\n): Promise<Scope> {\n const scope = context.scope.child({}, { functionBoundary: true });\n if (node.type !== \"ArrowFunctionExpression\") {\n scope.declare(\"this\", \"const\", thisValue);\n context.budget.allocateArrayLength(args.length);\n scope.declare(\"arguments\", \"let\", createSandboxArguments(args));\n }\n await bindParameters(node.params, args, scope, context, evaluateNode);\n const bodyScope = node.params.some(containsParameterExpression)\n ? scope.child({}, { functionBoundary: true })\n : scope;\n hoistVarDeclarations(node.body, bodyScope);\n if (bodyScope !== scope) {\n for (const declaration of hoistedVarDeclarations([node.body])) {\n for (const declarator of declaration.declarations) {\n for (const identifier of boundIdentifiers(declarator.id)) {\n if (!scope.hasOwnBinding(identifier.name)) continue;\n const parameter = scope.lookup(identifier.name);\n if (parameter.found) bodyScope.assign(identifier.name, parameter.value);\n }\n }\n }\n }\n return bodyScope;\n}\n\nfunction isBlockBody(\n body: BlockStatement | ArrowFunctionExpression[\"body\"]\n): body is BlockStatement {\n return body.type === \"BlockStatement\";\n}\n\nasync function bindParameters(\n params: ArrowFunctionExpression[\"params\"],\n args: readonly SandboxValue[],\n scope: Scope,\n context: AsyncEvaluationContext,\n evaluateNode: EvaluateAsyncNode\n): Promise<void> {\n for (const param of params) {\n for (const identifier of boundIdentifiers(param)) {\n scope.predeclare(identifier.name, \"var\");\n }\n }\n\n for (let index = 0; index < params.length; index += 1) {\n const param = params[index];\n if (param.type === \"RestElement\") {\n const rest = args.slice(index);\n context.budget.allocateArrayLength(rest.length);\n const binding = await bindPattern(param, rest, { kind: \"var\", initialize: true }, scope, {\n evaluate: (defaultNode) => evaluateNode(defaultNode, { ...context, scope })\n });\n if (!binding.ok) {\n if (binding.result.kind === \"error\") {\n throw binding.result.error;\n }\n if (binding.result.kind === \"throw\") {\n throw binding.result.value;\n }\n }\n return;\n }\n\n const binding = await bindPattern(\n param,\n args[index],\n { kind: \"var\", initialize: true },\n scope,\n {\n evaluate: (defaultNode) => evaluateNode(defaultNode, { ...context, scope })\n }\n );\n if (!binding.ok) {\n if (binding.result.kind === \"error\") {\n throw binding.result.error;\n }\n if (binding.result.kind === \"throw\") {\n throw binding.result.value;\n }\n }\n }\n}\n\nexport function normalizeClosureResult(\n result: SandboxValue | Promise<SandboxValue> | PromiseLike<SandboxValue>,\n budget?: Budget\n): SandboxValue {\n if (\n isSandboxPromise(result) &&\n (result.synchronousPrefix !== undefined || result.hostCall !== undefined)\n ) {\n return result;\n }\n\n return createSandboxPromise(resolveSandboxValue(result, { budget }), {\n ...(isSandboxPromise(result) ? { synchronousPrefix: Promise.resolve() } : {})\n });\n}\n", "import { normalizeClosureResult } from \"./async.js\";\nimport { attachErrorSpan, replaceErrorStack, type ErrorSourceSpan } from \"../error/shape.js\";\nimport { SandboxError, type Budget, type CompileOwner } from \"./budget.js\";\nimport { CompileScope } from \"./regex/compile-guard.js\";\nimport {\n checkFloat32Allocation,\n copyFloat32Storage,\n float32DataProperties,\n float32Storage,\n isFloat32Array\n} from \"./float32.js\";\nimport { createSubsetErrorValue } from \"./exceptions.js\";\nimport { bindOtelSpan, getBoundOtelSpan } from \"../observability/otel.js\";\nimport {\n readRegisteredPendingHostCallPolicy,\n type PendingHostCallPolicyMode\n} from \"../snapshot/policy.js\";\nimport {\n digestHostCallArguments,\n HostCallResumabilityError,\n UnresolvedReplayCapabilityError,\n type HostCallJournal,\n type HostCallOutcome,\n type HostCallRecord\n} from \"./host-call.js\";\nimport {\n createSandboxClosure,\n createSandboxMap,\n createSandboxPromise,\n createSandboxSet,\n deepCopyFromSandbox,\n deepCopyToSandbox,\n defineOwnDataProperty,\n isArrayIndexKey,\n isSandboxClosure,\n isSandboxPromise,\n measureSandboxData,\n type SandboxClosure,\n type SandboxObject,\n type SandboxValue\n} from \"./values.js\";\nimport { enterRunningState } from \"./running-state.js\";\nimport { promiseReplayContext } from \"./promise-replay.js\";\nimport { hostErrorData, sandboxErrorTypes } from \"../error/shape.js\";\nimport { decodeReplayData, encodeReplayData, type ReplayData } from \"../snapshot/replay-data.js\";\nimport type { RunLifecycle } from \"../snapshot/dump.js\";\n\nconst AsyncFunction = (async () => undefined).constructor;\n\nconst hostErrorMetadata = {\n code: \"string\",\n dest: \"string\",\n errno: \"number\",\n path: \"string\",\n syscall: \"string\"\n} as const;\n\ntype CallerInjectedFunction = {\n bivarianceHack(...args: readonly unknown[]): unknown;\n}[\"bivarianceHack\"];\n\nconst hostOperationPolicies = new WeakMap<CallerInjectedFunction, PendingHostCallPolicyMode>();\nconst hostOperationReplayHandlers = new WeakMap<\n CallerInjectedFunction,\n (args: readonly unknown[], outcome: HostCallOutcome) => void\n>();\n\ntype HostBridgeOptions = {\n registerCapabilities?: boolean;\n capabilityPath?: readonly string[];\n budget: Budget;\n compileOwner?: CompileOwner;\n hostCalls?: HostCallJournal;\n moduleId?: string;\n operation?: string;\n signal?: AbortSignal;\n lifecycle?: RunLifecycle;\n proofFunctions?: WeakMap<object, SandboxClosure>;\n};\n\ntype HostCallbacks = {\n record?: HostCallRecord;\n journal?: HostCallJournal;\n entries: Map<number, (args: SandboxValue[], token?: string) => Promise<unknown>>;\n hostFunctions: Map<number, (...args: readonly unknown[]) => Promise<unknown>>;\n sourceFunctions: Map<number, SandboxClosure>;\n proofFunctions: WeakMap<object, SandboxClosure>;\n active: Set<Promise<unknown>>;\n seen: WeakMap<SandboxClosure, (...args: readonly unknown[]) => Promise<unknown>>;\n nextReissuedInvocation?: number;\n restored: Array<{ id: number; arguments: ReplayData; result: Promise<unknown> }>;\n};\n\nexport type CallerInjectedBinding =\n | SandboxValue\n | CallerInjectedFunction\n | readonly CallerInjectedBinding[]\n | {\n readonly [key: string]: CallerInjectedBinding;\n };\n\nexport function declareHostOperation<TFunction extends CallerInjectedFunction>(\n operation: TFunction,\n policy: PendingHostCallPolicyMode,\n options: { onReplay?: (args: readonly unknown[], outcome: HostCallOutcome) => void } = {}\n): TFunction {\n hostOperationPolicies.set(operation, policy);\n if (options.onReplay !== undefined) hostOperationReplayHandlers.set(operation, options.onReplay);\n return operation;\n}\n\nexport function readHostOperationPolicy(\n operation: CallerInjectedFunction\n): PendingHostCallPolicyMode | undefined {\n return hostOperationPolicies.get(operation);\n}\n\nexport function wrapCallerInjectedBindings(\n bindings: Record<string, CallerInjectedBinding>,\n options: HostBridgeOptions\n): Record<string, SandboxValue> {\n const operation = options.budget.acquireCompileOwner(false, options.compileOwner);\n options = { ...options, registerCapabilities: true, compileOwner: operation.owner };\n try {\n const state = { seen: new WeakMap<object, SandboxValue>() };\n const copied = Object.fromEntries(\n Object.entries(bindings).map(([name, value]) => [\n name,\n typeof value === \"function\"\n ? wrapCallerInjectedFunction(name, value, { ...options, capabilityPath: [name] }, state)\n : copyHostValueToSandbox(\n value,\n [],\n { ...options, operation: name, capabilityPath: [name] },\n state,\n \"<root>\"\n )\n ])\n );\n options.budget.chargeDataUsage(measureSandboxData(Object.values(copied)));\n return copied;\n } finally {\n operation.release();\n }\n}\n\nfunction wrapCallerInjectedFunction(\n name: string,\n value: CallerInjectedFunction,\n options: HostBridgeOptions,\n state: { seen: WeakMap<object, SandboxValue> }\n): SandboxValue {\n const existing = state.seen.get(value) ?? options.hostCalls?.nativeClosures.get(value);\n if (existing !== undefined) return existing;\n const bindingName = name === \"default\" && value.name.length > 0 ? value.name : name;\n const callable = value as (...args: readonly unknown[]) => unknown;\n\n return createSandboxClosure({\n ...(isAsyncFunction(callable) ? { async: true as const } : {}),\n cancellationSignal: options.signal,\n call: (args, context) => {\n const operationLease = options.budget.acquireCompileOwner(false, options.compileOwner);\n const compilation = new CompileScope(operationLease.owner);\n try {\n if (options.signal?.aborted) throw readAbortReason(options.signal);\n const stackFrames = context?.stack ?? [];\n const callbacks: HostCallbacks = {\n journal: options.hostCalls,\n entries: new Map(),\n hostFunctions: new Map(),\n sourceFunctions: new Map(),\n proofFunctions: new WeakMap(),\n active: new Set(),\n seen: new WeakMap(),\n restored: []\n };\n const hostArgs = deepCopyFromSandbox([...args], {\n compilation,\n wrapClosure: (closure) =>\n wrapSandboxClosureForHost(\n closure,\n stackFrames,\n options.budget,\n operationLease.owner,\n callbacks\n )\n }) as unknown[];\n\n const hostCalls = options.hostCalls;\n const operation = options.operation ?? bindingName;\n const moduleId = options.moduleId ?? \"<bindings>\";\n const policy =\n readHostOperationPolicy(value) ??\n readRegisteredPendingHostCallPolicy(moduleId, operation) ??\n \"re-issue\";\n if (hostCalls === undefined) {\n return copyHostResultToSandbox(\n invokeHostCallback(() => Reflect.apply(callable, undefined, hostArgs), options),\n stackFrames,\n options\n );\n }\n\n const issued = hostCalls.issue({\n argumentDigest: digestHostCallArguments(hostArgs),\n moduleId,\n operation,\n policy\n });\n callbacks.record = issued.record;\n for (const [id, closure] of callbacks.sourceFunctions) {\n hostCalls.registerCallbackFunction(\n issued.record,\n id,\n closure,\n callbacks.hostFunctions.get(id)!\n );\n }\n if (issued.restored) {\n promiseReplayContext.getStore()?.registerCallbacks(\n (issued.record.callbacks ?? []).map((invocation, index) => {\n let resolve!: (value: unknown) => void;\n let reject!: (reason: unknown) => void;\n const result = new Promise<unknown>((resolveResult, rejectResult) => {\n resolve = resolveResult;\n reject = rejectResult;\n });\n void result.catch(() => undefined);\n callbacks.active.add(result);\n void result.then(\n () => {\n callbacks.active.delete(result);\n },\n () => {\n callbacks.active.delete(result);\n }\n );\n callbacks.restored.push({\n id: invocation.id,\n arguments: invocation.arguments,\n result\n });\n const token = `${issued.record.id}/callback/${index + 1}`;\n return {\n token,\n start: () => {\n const callbackLease = options.budget.acquireCompileOwner(\n false,\n options.compileOwner\n );\n const callbackCompilation = new CompileScope(callbackLease.owner);\n try {\n const callback = callbacks.entries.get(invocation.id);\n if (callback === undefined)\n throw new TypeError(\"Missing restored host callback.\");\n const args = decodeReplayData(\n invocation.arguments,\n {\n resolveCapability: hostCalls.resolveCapability\n },\n callbackCompilation\n ) as SandboxValue[];\n void callback(args, token)\n .then(resolve, reject)\n .finally(() => {\n callbackCompilation.dispose();\n callbackLease.release();\n });\n } catch (error) {\n callbackCompilation.dispose();\n callbackLease.release();\n throw error;\n }\n }\n };\n })\n );\n }\n if (issued.restored)\n hostCalls.trackCallbackCompletion(\n issued.record,\n callbacks.restored.map((invocation) => invocation.result)\n );\n return executeHostCall(\n issued.record,\n issued.restored,\n () => invokeHostCallback(() => Reflect.apply(callable, undefined, hostArgs), options),\n stackFrames,\n options,\n context?.span,\n callbacks,\n hostOperationReplayHandlers.get(value)?.bind(undefined, hostArgs)\n );\n } catch (error) {\n compilation.dispose();\n if (\n isFatalBridgeError(error) ||\n (typeof error === \"object\" && error !== null && sandboxErrorTypes.has(error))\n ) {\n throw error;\n }\n\n throw createHostErrorValue(error, context?.stack ?? [], options.budget, context?.span);\n } finally {\n compilation.dispose();\n operationLease.release();\n }\n },\n name: bindingName,\n properties: (closure) => {\n state.seen.set(value, closure);\n if (options.registerCapabilities) {\n options.hostCalls?.registerHostCapability(\n JSON.stringify([\n options.moduleId ?? \"<bindings>\",\n ...(options.capabilityPath ?? [bindingName])\n ]),\n closure,\n value\n );\n }\n return (\n copyFunctionProperties(callable, [], options, state, options.operation ?? bindingName) ?? {}\n );\n }\n });\n}\n\nfunction invokeHostCallback(invoke: () => unknown, options: HostBridgeOptions): unknown {\n const lifecycle = options.lifecycle;\n if (lifecycle === undefined) {\n return invoke();\n }\n\n lifecycle.hostCallbackDepth += 1;\n try {\n const result = lifecycle.hostCallbackContext.run(true, invoke);\n if (isPromiseLike(result)) {\n return Promise.resolve(result).finally(() => {\n lifecycle.hostCallbackDepth -= 1;\n });\n }\n lifecycle.hostCallbackDepth -= 1;\n return result;\n } catch (error) {\n lifecycle.hostCallbackDepth -= 1;\n throw error;\n }\n}\n\nfunction executeHostCall(\n record: HostCallRecord,\n restored: boolean,\n invoke: () => unknown,\n stackFrames: readonly string[],\n options: HostBridgeOptions,\n span?: ErrorSourceSpan,\n callbacks?: HostCallbacks,\n onReplay?: (outcome: HostCallOutcome) => void\n): SandboxValue {\n const hostCalls = options.hostCalls as HostCallJournal;\n let replayed: HostCallOutcome | undefined;\n try {\n replayed = restored ? hostCalls.replayOutcome(record) : undefined;\n } catch (error) {\n if (!(error instanceof UnresolvedReplayCapabilityError) || !record.asynchronous) throw error;\n const promise = (async () => {\n let missing = error;\n while (true) {\n await hostCalls.waitForCapability(missing.id);\n try {\n const outcome = hostCalls.replayOutcome(record);\n if (outcome === undefined) throw new TypeError(\"Missing restored host outcome.\");\n restoreReplayedHostState(record, outcome, onReplay);\n if (outcome.status === \"rejected\") throw outcome.reason;\n return outcome.value;\n } catch (error) {\n if (!(error instanceof UnresolvedReplayCapabilityError)) throw error;\n missing = error;\n }\n }\n })();\n void promise.catch(() => undefined);\n return createSandboxPromise(promise, { hostCall: record, hostCallJournal: hostCalls });\n }\n if (replayed !== undefined) {\n restoreReplayedHostState(record, replayed, onReplay);\n if (record.asynchronous) return createReplayedHostCallResult(replayed, record, hostCalls);\n if (replayed.status === \"rejected\") throw replayed.reason;\n return replayed.value;\n }\n if (\n restored &&\n record.policy === \"read-side-effect\" &&\n record.lifecycle === \"consumed\" &&\n record.outcome !== undefined\n ) {\n return createReplayedHostCallResult(record.outcome, record, hostCalls);\n }\n if (\n restored &&\n record.policy === \"read-side-effect\" &&\n record.lifecycle === \"settled\" &&\n record.outcome !== undefined\n ) {\n return createHostCallPromise(record, Promise.resolve(record.outcome), hostCalls);\n }\n if (restored && record.lifecycle === \"cancelled\" && record.policy === \"read-side-effect\") {\n throw new HostCallResumabilityError(\n record,\n \"reset\",\n `Host call ${record.id} was cancelled; reset is required.`\n );\n }\n if (restored && record.policy === \"read-side-effect\" && record.lifecycle !== \"created\") {\n let active = true;\n const context =\n callbacks === undefined\n ? undefined\n : {\n callbacks: new Map(callbacks.hostFunctions),\n replayed: callbacks.restored.map((invocation) => ({\n callbackId: invocation.id,\n result: invocation.result\n })),\n async waitForCallbacks() {\n while (callbacks.active.size > 0) await Promise.allSettled([...callbacks.active]);\n },\n toSandboxValue(value: unknown): SandboxValue {\n if (!active) throw new TypeError(\"Host call resume context is no longer active.\");\n if (options.signal?.aborted) throw readAbortReason(options.signal);\n return copyHostValueToSandbox(\n value,\n stackFrames,\n { ...options, proofFunctions: callbacks.proofFunctions },\n { seen: new WeakMap() },\n \"<root>\"\n );\n }\n };\n const outcome = hostCalls.reconcile(record, context).finally(() => {\n active = false;\n });\n return createHostCallPromise(record, outcome, hostCalls);\n }\n\n if (restored && callbacks !== undefined) callbacks.nextReissuedInvocation = 0;\n hostCalls.start(record);\n let result: unknown;\n try {\n result = invoke();\n } catch (error) {\n if (error instanceof HostCallResumabilityError) {\n throw error;\n }\n\n const reason = createHostErrorValue(error, stackFrames, options.budget, span);\n hostCalls.settle(record, { status: \"rejected\", reason });\n throw error;\n }\n\n if (!isPromiseLike(result)) {\n record.asynchronous = false;\n const value = copyHostResultToSandbox(result, stackFrames, options);\n hostCalls.settle(record, { status: \"fulfilled\", value });\n hostCalls.consume(record);\n return value;\n }\n\n record.asynchronous = true;\n const outcome = wrapHostPromiseWithSignal(Promise.resolve(result), options.signal).then(\n (value): HostCallOutcome => {\n try {\n return {\n status: \"fulfilled\",\n value: copyHostResultToSandbox(value, stackFrames, options)\n };\n } catch (error) {\n if (isFatalBridgeError(error)) {\n throw error;\n }\n\n return {\n status: \"rejected\",\n reason: createHostErrorValue(error, stackFrames, options.budget, span)\n };\n }\n },\n (error): HostCallOutcome | Promise<never> => {\n if (isFatalBridgeError(error)) {\n return Promise.reject(error);\n }\n\n return {\n status: \"rejected\",\n reason: createHostErrorValue(error, stackFrames, options.budget, span)\n };\n }\n );\n return createHostCallPromise(record, outcome, hostCalls);\n}\n\nfunction restoreReplayedHostState(\n record: HostCallRecord,\n outcome: HostCallOutcome,\n onReplay: ((outcome: HostCallOutcome) => void) | undefined\n): void {\n try {\n const result = onReplay?.(outcome);\n if (isPromiseLike(result)) {\n void Promise.resolve(result).catch(() => undefined);\n throw new TypeError(\"Host replay state hooks must complete synchronously.\");\n }\n } catch (reason) {\n const error = new HostCallResumabilityError(\n record,\n \"reset\",\n `Cannot restore host-local state for ${record.id}: ${reason instanceof Error ? reason.message : String(reason)}`\n );\n promiseReplayContext.getStore()?.fail(error);\n throw error;\n }\n}\n\nfunction createReplayedHostCallResult(\n outcome: HostCallOutcome,\n record: HostCallRecord,\n hostCalls: HostCallJournal\n): SandboxValue {\n const promise =\n outcome.status === \"fulfilled\"\n ? Promise.resolve(outcome.value)\n : Promise.reject(outcome.reason);\n promise.catch(() => undefined);\n return createSandboxPromise(promise, { hostCall: record, hostCallJournal: hostCalls });\n}\n\nfunction createHostCallPromise(\n record: HostCallRecord,\n outcomePromise: Promise<HostCallOutcome>,\n hostCalls: HostCallJournal\n): SandboxValue {\n const promise = outcomePromise.then((outcome) => {\n if (outcome.status === \"rejected\" && isAbortReason(outcome.reason)) {\n hostCalls.cancel(record, outcome.reason);\n } else {\n hostCalls.settle(record, outcome);\n }\n return outcome.status === \"fulfilled\" ? outcome.value : Promise.reject(outcome.reason);\n });\n promise.catch(() => undefined);\n return createSandboxPromise(promise, { hostCall: record, hostCallJournal: hostCalls });\n}\n\nfunction isAbortReason(reason: SandboxValue): boolean {\n return (\n typeof reason === \"object\" &&\n reason !== null &&\n ((\"name\" in reason && reason.name === \"AbortError\") ||\n (\"code\" in reason && reason.code === \"aborted\"))\n );\n}\n\nfunction copyHostResultToSandbox(\n result: unknown,\n stackFrames: readonly string[],\n options: HostBridgeOptions\n): SandboxValue {\n const value = copyHostValueToSandbox(\n result,\n stackFrames,\n { ...options, registerCapabilities: false },\n {\n seen: new WeakMap()\n },\n \"<root>\"\n );\n options.budget.chargeDataUsage(measureSandboxData([value]));\n return value;\n}\n\nfunction createHostErrorValue(\n reason: unknown,\n stackFrames: readonly string[],\n budget: Budget,\n span?: ErrorSourceSpan,\n state: { seen: WeakMap<object, SandboxValue> } = { seen: new WeakMap() },\n chargeBudget = false\n): SandboxObject {\n if (reason instanceof Error) {\n const existing = state.seen.get(reason);\n if (existing !== undefined) return existing as SandboxObject;\n }\n const error =\n reason instanceof Error\n ? createSubsetErrorValue(reason.name, reason.message, stackFrames, budget, {\n cause: reason,\n chargeBudget\n })\n : createSubsetErrorValue(\"Error\", describeThrownReason(reason), stackFrames, budget, {\n chargeBudget: false\n });\n\n if (reason instanceof Error) {\n state.seen.set(reason, error);\n copyHostErrorMetadata(error, reason, budget, chargeBudget);\n const errors =\n reason instanceof AggregateError\n ? Object.getOwnPropertyDescriptor(reason, \"errors\")\n : undefined;\n const registered = hostErrorData.get(reason);\n const data =\n errors !== undefined && \"value\" in errors\n ? { ...registered, errors: errors.value }\n : registered;\n if (data !== undefined) {\n const copied = copyHostValueToSandbox(\n data,\n stackFrames,\n { budget, errorData: true },\n state,\n \"<error>\"\n ) as SandboxObject;\n Object.defineProperties(error, Object.getOwnPropertyDescriptors(copied));\n budget.chargeDataUsage(measureSandboxData([error]));\n }\n }\n\n attachErrorSpan(error, span);\n return error;\n}\n\nfunction copyHostErrorMetadata(\n error: SandboxObject,\n reason: Error,\n budget: Budget,\n chargeBudget: boolean\n): void {\n const resumeChecks = chargeBudget ? undefined : budget.suspendChecks();\n\n try {\n for (const [key, expectedType] of Object.entries(hostErrorMetadata)) {\n const descriptor = Object.getOwnPropertyDescriptor(reason, key);\n if (descriptor === undefined || \"get\" in descriptor || \"set\" in descriptor) {\n continue;\n }\n\n const value = descriptor.value as unknown;\n if (typeof value !== expectedType) {\n continue;\n }\n\n error[key] = typeof value === \"string\" ? budget.allocateString(value) : (value as number);\n }\n } finally {\n resumeChecks?.();\n }\n}\n\nfunction wrapSandboxClosureForHost(\n closure: SandboxClosure,\n stackFrames: readonly string[],\n budget: Budget,\n compileOwner: CompileOwner,\n callbacks?: HostCallbacks\n): (...args: readonly unknown[]) => Promise<unknown> {\n const existing = callbacks?.seen.get(closure);\n if (existing !== undefined) return existing;\n const id = (callbacks?.entries.size ?? 0) + 1;\n const invoke = async (sandboxArgs: SandboxValue[], token?: string) => {\n const operation = budget.acquireCompileOwner(false, compileOwner);\n const compilation = new CompileScope(operation.owner);\n let leaveRunning: (() => void) | undefined;\n let leaveCall: (() => void) | undefined;\n const wrapClosure = (nestedClosure: SandboxClosure) =>\n wrapSandboxClosureForHost(nestedClosure, stackFrames, budget, compileOwner, callbacks);\n\n try {\n leaveRunning = enterRunningState(closure);\n leaveCall = budget.enterCall();\n let result: ReturnType<SandboxClosure[\"call\"]>;\n try {\n result = closure.call(sandboxArgs, {\n compilation,\n stack: stackFrames,\n thisValue: undefined\n });\n } catch (error) {\n if (isSandboxLikeValue(error)) {\n throw deepCopyFromSandbox(error, {\n compilation,\n wrapClosure\n });\n }\n\n throw error;\n }\n\n return await (deepCopyFromSandbox(normalizeClosureResult(result, budget), {\n compilation,\n wrapClosure\n }) as Promise<unknown>);\n } catch (error) {\n if (isFatalBridgeError(error)) promiseReplayContext.getStore()?.fail(error);\n throw error;\n } finally {\n compilation.dispose();\n operation.release();\n leaveCall?.();\n leaveRunning?.();\n if (token !== undefined) promiseReplayContext.getStore()?.completeCallback(token);\n }\n };\n const wrapped = async (...args: readonly unknown[]) => {\n const operation = budget.acquireCompileOwner(false, compileOwner);\n try {\n const sandboxArgs = copyHostValueToSandbox(\n [...args],\n stackFrames,\n {\n budget,\n compileOwner,\n hostCalls: callbacks?.journal\n },\n { seen: new WeakMap() },\n \"<callback>\"\n ) as SandboxValue[];\n const restored =\n callbacks?.nextReissuedInvocation === undefined\n ? undefined\n : callbacks.restored[callbacks.nextReissuedInvocation++];\n if (restored !== undefined) {\n if (\n restored.id !== id ||\n JSON.stringify(\n encodeReplayData(sandboxArgs, {\n identifyCapability: callbacks?.journal?.identifyCapability\n })\n ) !== JSON.stringify(restored.arguments)\n ) {\n const error = new HostCallResumabilityError(\n callbacks!.record!,\n \"external-reconciliation\",\n \"Host callback arguments changed while re-issuing the operation; external reconciliation is required.\"\n );\n promiseReplayContext.getStore()?.fail(error);\n throw error;\n }\n return await restored.result;\n }\n const replay = promiseReplayContext.getStore();\n const catchUp = replay?.waitForLiveExecution();\n if (catchUp !== undefined) await catchUp;\n const token =\n callbacks?.record === undefined\n ? undefined\n : callbacks.journal?.recordCallback(\n callbacks.record,\n id,\n sandboxArgs,\n replay?.currentStep ?? 0\n );\n if (token !== undefined) replay?.beginCallback(token);\n const pending = invoke(sandboxArgs, token);\n callbacks?.active.add(pending);\n void pending.then(\n () => {\n callbacks?.active.delete(pending);\n },\n () => {\n callbacks?.active.delete(pending);\n }\n );\n return await pending;\n } finally {\n operation.release();\n }\n };\n if (closure.length !== undefined)\n Object.defineProperty(wrapped, \"length\", { value: closure.length });\n callbacks?.seen.set(closure, wrapped);\n callbacks?.entries.set(id, invoke);\n callbacks?.hostFunctions.set(id, wrapped);\n callbacks?.sourceFunctions.set(id, closure);\n callbacks?.proofFunctions.set(wrapped, closure);\n if (callbacks?.record !== undefined)\n callbacks.journal?.registerCallbackFunction(callbacks.record, id, closure, wrapped);\n return wrapped;\n}\n\nfunction isSandboxLikeValue(value: unknown): value is SandboxValue {\n if (\n value === null ||\n value === undefined ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return true;\n }\n\n if (isSandboxClosure(value) || isSandboxPromise(value)) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return Object.getPrototypeOf(value) === Array.prototype;\n }\n\n if (typeof value !== \"object\") {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction isAsyncFunction(value: (...args: readonly unknown[]) => unknown): boolean {\n return value instanceof AsyncFunction;\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\n\nfunction isFatalBridgeError(error: unknown): error is SandboxError | HostCallResumabilityError {\n return (\n error instanceof HostCallResumabilityError ||\n (error instanceof SandboxError && (error.code === \"budgetExceeded\" || error.code === \"reentry\"))\n );\n}\n\nfunction wrapHostPromiseWithSignal<TValue>(\n promise: Promise<TValue>,\n signal: AbortSignal | undefined\n): Promise<TValue> {\n if (signal === undefined) {\n return promise;\n }\n\n if (signal.aborted) {\n return Promise.reject(readAbortReason(signal));\n }\n\n return new Promise((resolve, reject) => {\n let settled = false;\n const cleanup = () => {\n signal.removeEventListener(\"abort\", onAbort);\n };\n const settle = (complete: () => void) => {\n if (settled) {\n return;\n }\n\n settled = true;\n cleanup();\n complete();\n };\n const onAbort = () => {\n settle(() => reject(readAbortReason(signal)));\n };\n\n signal.addEventListener(\"abort\", onAbort, { once: true });\n promise.then(\n (value) => {\n settle(() => resolve(value));\n },\n (reason) => {\n settle(() => reject(reason));\n }\n );\n });\n}\n\nfunction copyHostValueToSandbox(\n value: unknown,\n stackFrames: readonly string[],\n options: HostBridgeOptions & { errorData?: boolean },\n state: {\n seen: WeakMap<object, SandboxValue>;\n },\n path: string\n): SandboxValue {\n const { budget } = options;\n\n if (\n value === null ||\n value === undefined ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n\n if (typeof value === \"string\") {\n return options.budget.allocateString(value);\n }\n\n if (value instanceof Error) {\n return createHostErrorValue(value, stackFrames, budget, undefined, state, true);\n }\n\n if (\n options.errorData &&\n (typeof value === \"function\" ||\n isSandboxClosure(value) ||\n isSandboxPromise(value) ||\n value instanceof Promise)\n ) {\n throw new TypeError(\"Host error data must not contain functions or promises.\");\n }\n\n if (isSandboxClosure(value) || isSandboxPromise(value)) {\n if (options.proofFunctions !== undefined)\n throw new TypeError(`Unsupported proof value at ${path}: sandbox capability`);\n return deepCopyToSandbox(value);\n }\n\n if (typeof value === \"function\") {\n if (options.proofFunctions !== undefined) {\n const sourceClosure = options.proofFunctions.get(value);\n if (sourceClosure === undefined)\n throw new TypeError(`Unsupported proof value at ${path}: function`);\n return sourceClosure;\n }\n const sourceClosure = options.hostCalls?.nativeClosures.get(value);\n if (sourceClosure !== undefined) return sourceClosure;\n const callable = value as (...args: readonly unknown[]) => unknown;\n const existing = state.seen.get(value);\n if (existing !== undefined) {\n return existing;\n }\n\n return wrapCallerInjectedFunction(\n callable.name.length > 0 ? callable.name : readPathName(path),\n callable,\n {\n ...options,\n operation: path.startsWith(\"<root>\")\n ? `${options.operation ?? \"<root>\"}${path.slice(6)}`\n : path\n },\n state\n );\n }\n\n if (isFloat32Array(value)) {\n const existing = state.seen.get(value);\n if (existing !== undefined) return existing;\n checkFloat32Allocation(Math.ceil(float32Storage(value).byteLength / 4), budget);\n const copy = copyFloat32Storage(value, state);\n state.seen.set(value, copy);\n for (const [key, descriptor] of float32DataProperties(value)) {\n Object.defineProperty(copy, key, {\n ...descriptor,\n value: copyHostValueToSandbox(\n descriptor.value,\n stackFrames,\n { ...options, capabilityPath: [...(options.capabilityPath ?? []), key] },\n state,\n joinPath(path, key)\n )\n });\n }\n if (!Object.isExtensible(value)) Object.preventExtensions(copy);\n return copy;\n }\n\n if (!options.errorData && isPromiseLike(value)) {\n if (options.proofFunctions !== undefined)\n throw new TypeError(`Unsupported proof value at ${path}: promise`);\n const existing = state.seen.get(value);\n if (existing !== undefined) return existing;\n const promise = wrapHostPromiseWithSignal(Promise.resolve(value), options.signal).then(\n (resolved) => {\n try {\n return copyHostValueToSandbox(\n resolved,\n stackFrames,\n options,\n {\n seen: new WeakMap()\n },\n \"<root>\"\n );\n } catch (error) {\n if (isFatalBridgeError(error)) {\n return Promise.reject(error);\n }\n\n return Promise.reject(createHostErrorValue(error, stackFrames, budget));\n }\n },\n (reason) => {\n if (isFatalBridgeError(reason)) {\n return Promise.reject(reason);\n }\n\n return Promise.reject(createHostErrorValue(reason, stackFrames, budget));\n }\n );\n const sandboxPromise = createSandboxPromise(promise);\n state.seen.set(value, sandboxPromise);\n const span = getBoundOtelSpan(value);\n if (span !== undefined) {\n bindOtelSpan(promise, span);\n bindOtelSpan(sandboxPromise, span);\n }\n return sandboxPromise;\n }\n\n if (Array.isArray(value) && Object.getPrototypeOf(value) === Array.prototype) {\n const existing = state.seen.get(value);\n if (existing !== undefined) {\n return existing;\n }\n\n const copy = new Array(value.length) as SandboxValue[];\n state.seen.set(value, copy);\n budget.allocateArrayLength(value.length);\n\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(value))) {\n const indexed = isArrayIndexKey(key);\n if (key === \"length\" || (!descriptor.enumerable && !indexed)) continue;\n const entryPath = indexed ? `${path}[${key}]` : joinPath(path, key);\n if (!(\"value\" in descriptor)) {\n throw new TypeError(`Unsupported sandbox value at ${entryPath}: accessor property`);\n }\n defineOwnDataProperty(\n copy,\n indexed ? key : budget.allocateString(key),\n copyHostValueToSandbox(\n descriptor.value,\n stackFrames,\n { ...options, capabilityPath: [...(options.capabilityPath ?? []), key] },\n state,\n entryPath\n )\n );\n }\n\n return copy;\n }\n\n if (value instanceof Map) {\n const existing = state.seen.get(value);\n if (existing !== undefined) {\n return existing;\n }\n\n const copy = createSandboxMap();\n state.seen.set(value, copy);\n budget.allocateCollectionEntries(value.size);\n for (const [key, entry] of value) {\n const ordinal = copy.entries.size;\n copy.entries.set(\n copyHostValueToSandbox(\n key,\n stackFrames,\n { ...options, capabilityPath: [...(options.capabilityPath ?? []), `key:${ordinal}`] },\n state,\n `${path}.<key>`\n ),\n copyHostValueToSandbox(\n entry,\n stackFrames,\n { ...options, capabilityPath: [...(options.capabilityPath ?? []), `value:${ordinal}`] },\n state,\n `${path}.<value>`\n )\n );\n }\n return copy;\n }\n\n if (value instanceof Set) {\n const existing = state.seen.get(value);\n if (existing !== undefined) {\n return existing;\n }\n\n const copy = createSandboxSet();\n state.seen.set(value, copy);\n budget.allocateCollectionEntries(value.size);\n for (const entry of value) {\n copy.values.add(\n copyHostValueToSandbox(\n entry,\n stackFrames,\n {\n ...options,\n capabilityPath: [...(options.capabilityPath ?? []), String(copy.values.size)]\n },\n state,\n `${path}.<value>`\n )\n );\n }\n return copy;\n }\n\n if (isPlainObject(value)) {\n const existing = state.seen.get(value);\n if (existing !== undefined) {\n return existing;\n }\n\n const copy = Object.getPrototypeOf(value) === null ? Object.create(null) : {};\n state.seen.set(value, copy);\n\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(value))) {\n if (!descriptor.enumerable) {\n continue;\n }\n\n if (\"get\" in descriptor || \"set\" in descriptor) {\n throw new TypeError(\n `Unsupported sandbox value at ${joinPath(path, key)}: accessor property`\n );\n }\n\n // Charged like any other string the copy carries in: a key is as readable to the sandbox\n // as the value under it, so the same limit answers for both.\n Object.defineProperty(copy, budget.allocateString(key), {\n enumerable: true,\n configurable: true,\n writable: true,\n value: copyHostValueToSandbox(\n descriptor.value,\n stackFrames,\n { ...options, capabilityPath: [...(options.capabilityPath ?? []), key] },\n state,\n joinPath(path, key)\n )\n });\n }\n\n return copy;\n }\n\n throw new TypeError(`Unsupported sandbox value at ${path}: ${describeValue(value)}`);\n}\n\nfunction readAbortReason(signal: AbortSignal): unknown {\n return signal.reason ?? createAbortError();\n}\n\nfunction createAbortError(): Error {\n if (typeof DOMException === \"function\") {\n const error = new DOMException(\"This operation was aborted\", \"AbortError\");\n replaceErrorStack(error);\n return error;\n }\n\n const error = new Error(\"This operation was aborted\");\n error.name = \"AbortError\";\n replaceErrorStack(error);\n return error;\n}\n\nfunction describeThrownReason(reason: unknown): string {\n if (reason === undefined) {\n return \"\";\n }\n\n if (typeof reason === \"string\") {\n return reason;\n }\n\n if (\n reason === null ||\n typeof reason === \"number\" ||\n typeof reason === \"boolean\" ||\n typeof reason === \"bigint\" ||\n typeof reason === \"symbol\"\n ) {\n return String(reason);\n }\n\n if (typeof reason === \"object\") {\n const message = readStringProperty(reason, \"message\");\n if (message !== undefined && message.length > 0) {\n return message;\n }\n\n const name = readStringProperty(reason, \"name\");\n if (name !== undefined && name.length > 0) {\n return name;\n }\n }\n\n try {\n return String(reason);\n } catch {\n return Object.prototype.toString.call(reason);\n }\n}\n\nfunction readStringProperty(value: object, key: string): string | undefined {\n if (!Object.hasOwn(value, key)) {\n return undefined;\n }\n\n const entry = (value as Record<string, unknown>)[key];\n return typeof entry === \"string\" ? entry : undefined;\n}\n\nfunction copyFunctionProperties(\n callable: (...args: readonly unknown[]) => unknown,\n stackFrames: readonly string[],\n options: HostBridgeOptions,\n state: {\n seen: WeakMap<object, SandboxValue>;\n },\n path: string\n): SandboxObject | undefined {\n const properties: SandboxObject = {};\n\n for (const key of Object.getOwnPropertyNames(callable)) {\n const descriptor = Object.getOwnPropertyDescriptor(callable, key);\n if (descriptor === undefined) {\n continue;\n }\n if (\"get\" in descriptor || \"set\" in descriptor) {\n continue;\n }\n\n if (typeof descriptor.value !== \"function\") {\n continue;\n }\n\n properties[key] = copyHostValueToSandbox(\n descriptor.value,\n stackFrames,\n { ...options, capabilityPath: [...(options.capabilityPath ?? []), key] },\n state,\n joinPath(path, key)\n );\n }\n\n return Object.keys(properties).length > 0 ? properties : undefined;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction joinPath(path: string, key: string): string {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/u.test(key)\n ? `${path}.${key}`\n : `${path}[${JSON.stringify(key)}]`;\n}\n\nfunction readPathName(path: string): string {\n const segment = path.replace(/^.*\\./u, \"\");\n return segment === \"<root>\" ? \"host\" : segment;\n}\n\nfunction describeValue(value: unknown): string {\n if (value === null) {\n return \"null\";\n }\n\n if (value === undefined) {\n return \"undefined\";\n }\n\n if (typeof value === \"function\") {\n return \"function\";\n }\n\n if (typeof value === \"object\") {\n const name = value.constructor?.name;\n return name && name.length > 0 ? name : \"object\";\n }\n\n return typeof value;\n}\n", "import type { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport type { RunResult, RunSnapshot } from \"../run.js\";\nimport { serializeSafeJSSnapshot } from \"./dump-format.js\";\nimport { SandboxError } from \"../interp/budget.js\";\n\nconst RUN_DUMP_CONTROLLER = Symbol(\"SafeJS.run-dump-controller\");\n\nexport type DumpOptions = {\n mode?: \"capture\" | \"replay\";\n onFailure?: \"throw\" | \"checkpoint\";\n};\n\ntype DumpController = {\n fail(error: unknown): void;\n finalize(snapshot: RunSnapshot): void;\n onYield(createSnapshot: () => RunSnapshot): void;\n requestCurrentSnapshot(options?: DumpOptions): Promise<string>;\n requestSnapshot(options?: DumpOptions): Promise<string>;\n};\n\nexport type RunLifecycle = {\n hostCallbackContext: AsyncLocalStorage<boolean>;\n hostCallbackDepth: number;\n};\n\ntype DumpableRunResult = Promise<RunResult> & {\n [RUN_DUMP_CONTROLLER]?: DumpController;\n};\n\nexport function attachDumpController(\n result: Promise<RunResult>,\n controller: DumpController\n): Promise<RunResult> {\n Object.defineProperty(result, RUN_DUMP_CONTROLLER, {\n configurable: false,\n enumerable: false,\n value: controller,\n writable: false\n });\n\n return result;\n}\n\nexport function createDumpController(lifecycle?: RunLifecycle): DumpController {\n let finished = false;\n let failed:\n | {\n error: unknown;\n }\n | undefined;\n let finalSnapshot: RunSnapshot | undefined;\n let latestSnapshot: RunSnapshot | undefined;\n let latestSnapshotFactory: (() => RunSnapshot) | undefined;\n let pendingRequest:\n | {\n promise: Promise<string>;\n reject: (error: unknown) => void;\n resolve: (snapshot: string) => void;\n }\n | undefined;\n\n return {\n fail(error) {\n finished = true;\n failed = {\n error\n };\n\n if (pendingRequest === undefined) {\n return;\n }\n\n pendingRequest.reject(error);\n pendingRequest = undefined;\n },\n finalize(snapshot) {\n finished = true;\n finalSnapshot = snapshot;\n latestSnapshot = snapshot;\n latestSnapshotFactory = undefined;\n\n if (pendingRequest !== undefined) {\n settlePendingSnapshot(snapshot);\n }\n },\n onYield(createSnapshot) {\n latestSnapshot = undefined;\n latestSnapshotFactory = createSnapshot;\n\n if (pendingRequest === undefined) {\n return;\n }\n\n settlePendingSnapshot(createSnapshot());\n },\n requestCurrentSnapshot(options = {}) {\n assertDumpAllowed(options);\n if (failed !== undefined) {\n return Promise.reject(failed.error);\n }\n\n if (latestSnapshot !== undefined || latestSnapshotFactory !== undefined) {\n try {\n return Promise.resolve(serializeRunSnapshot(latestSnapshot ?? latestSnapshotFactory!()));\n } catch (error) {\n return Promise.reject(error);\n }\n }\n\n return this.requestSnapshot(options);\n },\n requestSnapshot(options = {}) {\n assertDumpAllowed(options);\n if (failed !== undefined) {\n if (\n (options.onFailure === \"checkpoint\" ||\n (options.onFailure === undefined && isDataBudgetError(failed.error))) &&\n finalSnapshot !== undefined\n ) {\n try {\n return Promise.resolve(serializeRunSnapshot(finalSnapshot));\n } catch (error) {\n return Promise.reject(error);\n }\n }\n return Promise.reject(failed.error);\n }\n\n if (finished) {\n if (finalSnapshot === undefined) {\n throw new Error(\"Run completed without producing a snapshot.\");\n }\n\n try {\n const serializedSnapshot = serializeRunSnapshot(finalSnapshot);\n return Promise.resolve(serializedSnapshot);\n } catch (error) {\n return Promise.reject(error);\n }\n }\n\n if (\n options.mode === \"replay\" &&\n (latestSnapshot !== undefined || latestSnapshotFactory !== undefined)\n ) {\n return this.requestCurrentSnapshot(options);\n }\n\n if (pendingRequest !== undefined) {\n return pendingRequest.promise;\n }\n\n let resolveSnapshot: (snapshot: string) => void = () => undefined;\n let rejectSnapshot: (error: unknown) => void = () => undefined;\n const promise = new Promise<string>((resolve, reject) => {\n resolveSnapshot = resolve;\n rejectSnapshot = reject;\n });\n\n pendingRequest = {\n promise,\n reject: rejectSnapshot,\n resolve: resolveSnapshot\n };\n\n return promise;\n }\n };\n\n function assertDumpAllowed(options: DumpOptions): void {\n if (\n (lifecycle?.hostCallbackDepth ?? 0) > 0 &&\n (options.mode !== \"replay\" || lifecycle?.hostCallbackContext.getStore() === true)\n ) {\n throw new SandboxError(\"reentry\");\n }\n }\n\n function settlePendingSnapshot(snapshot: RunSnapshot): void {\n try {\n settlePendingRequest(serializeRunSnapshot(snapshot));\n } catch (error) {\n pendingRequest?.reject(error);\n pendingRequest = undefined;\n }\n }\n\n function settlePendingRequest(snapshot: string): void {\n if (pendingRequest === undefined) {\n return;\n }\n\n pendingRequest.resolve(snapshot);\n pendingRequest = undefined;\n }\n}\n\nfunction isDataBudgetError(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === \"budgetExceeded\" &&\n \"budget\" in error &&\n error.budget === \"dataSize\"\n );\n}\n\nexport function dump(\n result: Pick<RunResult, \"snapshot\"> | PromiseLike<RunResult>,\n options: DumpOptions = {}\n): Promise<string> {\n const controller = readDumpController(result);\n\n if (controller !== undefined) {\n return controller.requestSnapshot(options);\n }\n\n if (hasSnapshot(result)) {\n try {\n return Promise.resolve(serializeRunSnapshot(result.snapshot));\n } catch (error) {\n return Promise.reject(error);\n }\n }\n\n return Promise.resolve(result).then((resolved) => {\n if (!hasSnapshot(resolved)) {\n throw new Error(\"Run completed without producing a snapshot.\");\n }\n\n return serializeRunSnapshot(resolved.snapshot);\n });\n}\n\nexport function dumpCurrent(\n result: Pick<RunResult, \"snapshot\"> | PromiseLike<RunResult>\n): Promise<string> {\n const controller = readDumpController(result);\n\n if (controller !== undefined) {\n return controller.requestCurrentSnapshot();\n }\n\n return dump(result);\n}\n\nexport function serializeRunSnapshot(snapshot: RunSnapshot): string {\n return serializeSafeJSSnapshot(snapshot);\n}\n\nfunction hasSnapshot(value: unknown): value is Pick<RunResult, \"snapshot\"> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n Object.prototype.hasOwnProperty.call(value, \"snapshot\")\n );\n}\n\nfunction readDumpController(value: unknown): DumpController | undefined {\n if (typeof value !== \"object\" || value === null) {\n return undefined;\n }\n\n return (value as DumpableRunResult)[RUN_DUMP_CONTROLLER];\n}\n", "export function getOwnErrorCode(error: unknown): string | undefined {\n if (\n typeof error !== \"object\" ||\n error === null ||\n !Object.prototype.hasOwnProperty.call(error, \"code\")\n ) {\n return undefined;\n }\n\n const code = (error as { code?: unknown }).code;\n return typeof code === \"string\" ? code : undefined;\n}\n\nexport function hasOwnErrorCode(error: unknown, code: string): error is NodeJS.ErrnoException {\n return getOwnErrorCode(error) === code;\n}\n", "import { randomUUID } from \"node:crypto\";\nimport { readFile, rename, stat, unlink, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\nimport { getOwnErrorCode, hasOwnErrorCode } from \"../error-codes.js\";\nimport type { SafeJSSnapshot } from \"../restore.js\";\nimport { serializeSafeJSSnapshot } from \"./dump-format.js\";\n\nexport type Snapshot = SafeJSSnapshot;\n\nexport interface SnapshotBackend {\n read(): Promise<Snapshot | undefined>;\n write(snapshot: Snapshot): Promise<void>;\n remove(): Promise<void>;\n}\n\nexport type FileSnapshotBackendOptions = {\n writeMaxAttempts?: number;\n writeRetryDelayMs?: number;\n};\n\nconst DEFAULT_WRITE_MAX_ATTEMPTS = 3;\nconst DEFAULT_WRITE_RETRY_DELAY_MS = 100;\nconst LOCKED_FILE_ERROR_CODES = new Set([\"EACCES\", \"EBUSY\", \"EPERM\"]);\nconst pendingOperations = new Map<string, Promise<void>>();\n\nexport class FileSnapshotBackend implements SnapshotBackend {\n readonly #writeMaxAttempts: number;\n readonly #writeRetryDelayMs: number;\n\n constructor(\n readonly path: string,\n options: FileSnapshotBackendOptions = {}\n ) {\n this.#writeMaxAttempts = options.writeMaxAttempts ?? DEFAULT_WRITE_MAX_ATTEMPTS;\n this.#writeRetryDelayMs = options.writeRetryDelayMs ?? DEFAULT_WRITE_RETRY_DELAY_MS;\n }\n\n async read(): Promise<Snapshot | undefined> {\n try {\n return JSON.parse(await readFile(this.path, \"utf8\")) as Snapshot;\n } catch (error) {\n if (hasErrorCode(error, \"ENOENT\")) {\n return undefined;\n }\n\n if (error instanceof SyntaxError) {\n throw new Error(`Failed to parse snapshot at ${this.path}: ${error.message}`);\n }\n\n throw error;\n }\n }\n\n async write(snapshot: Snapshot): Promise<void> {\n await enqueueOperation(this.path, () =>\n writeSnapshotAtomically(this.path, snapshot, {\n maxAttempts: this.#writeMaxAttempts,\n retryDelayMs: this.#writeRetryDelayMs\n })\n );\n }\n\n async remove(): Promise<void> {\n await enqueueOperation(this.path, async () => {\n try {\n await unlink(this.path);\n } catch (error) {\n if (!hasErrorCode(error, \"ENOENT\")) {\n throw error;\n }\n }\n });\n }\n}\n\nasync function writeSnapshotAtomically(\n snapshotPath: string,\n snapshot: Snapshot,\n options: {\n maxAttempts: number;\n retryDelayMs: number;\n }\n): Promise<void> {\n const parentPath = dirname(snapshotPath);\n const contents = serializeSafeJSSnapshot(snapshot);\n\n await assertParentDirectoryExists(snapshotPath, parentPath);\n\n for (let attempt = 1; attempt <= options.maxAttempts; attempt += 1) {\n try {\n const temporaryPath = `${snapshotPath}.${randomUUID()}.tmp`;\n await writeSnapshotOnce(temporaryPath, snapshotPath, contents);\n return;\n } catch (error) {\n if (hasErrorCode(error, \"EEXIST\")) {\n if (attempt === options.maxAttempts) {\n throw new Error(\n `Failed to write snapshot at ${snapshotPath} after ${options.maxAttempts} attempts: temporary path already exists`,\n {\n cause: error\n }\n );\n }\n\n continue;\n }\n\n if (!isLockedFileError(error)) {\n throw error;\n }\n\n if (attempt === options.maxAttempts) {\n throw new Error(\n `Failed to write snapshot at ${snapshotPath} after ${options.maxAttempts} attempts: file is locked (${getOwnErrorCode(error)})`,\n {\n cause: error\n }\n );\n }\n\n await delay(options.retryDelayMs);\n }\n }\n}\n\nasync function assertParentDirectoryExists(\n snapshotPath: string,\n parentPath: string\n): Promise<void> {\n try {\n const parent = await stat(parentPath);\n if (!parent.isDirectory()) {\n throw new Error(\n `Cannot write snapshot at ${snapshotPath}: parent path ${parentPath} is not a directory`\n );\n }\n } catch (error) {\n if (hasErrorCode(error, \"ENOENT\")) {\n throw new Error(\n `Cannot write snapshot at ${snapshotPath}: parent directory ${parentPath} does not exist`,\n {\n cause: error\n }\n );\n }\n\n throw error;\n }\n}\n\nasync function writeSnapshotOnce(\n temporaryPath: string,\n snapshotPath: string,\n contents: string\n): Promise<void> {\n let temporaryCreated = false;\n let renamed = false;\n try {\n try {\n await writeFile(temporaryPath, contents, { encoding: \"utf8\", flag: \"wx\" });\n temporaryCreated = true;\n } catch (error) {\n if (!hasErrorCode(error, \"EEXIST\")) {\n await removeTemporarySnapshot(temporaryPath).catch(() => undefined);\n }\n throw error;\n }\n await rename(temporaryPath, snapshotPath);\n renamed = true;\n } finally {\n if (temporaryCreated && !renamed) {\n await removeTemporarySnapshot(temporaryPath).catch(() => undefined);\n }\n }\n}\n\nasync function enqueueOperation(path: string, operation: () => Promise<void>): Promise<void> {\n const previous = pendingOperations.get(path) ?? Promise.resolve();\n const pending = previous.catch(() => undefined).then(operation);\n const queued = pending.catch(() => undefined);\n pendingOperations.set(path, queued);\n try {\n await pending;\n } finally {\n if (pendingOperations.get(path) === queued) {\n pendingOperations.delete(path);\n }\n }\n}\n\nasync function removeTemporarySnapshot(temporaryPath: string): Promise<void> {\n try {\n await unlink(temporaryPath);\n } catch (error) {\n if (!hasErrorCode(error, \"ENOENT\")) {\n throw error;\n }\n }\n}\n\nasync function delay(ms: number): Promise<void> {\n if (ms === 0) {\n return;\n }\n\n await new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction hasErrorCode(error: unknown, code: string): boolean {\n return hasOwnErrorCode(error, code);\n}\n\nfunction isLockedFileError(error: unknown): boolean {\n const code = getOwnErrorCode(error);\n return code !== undefined && LOCKED_FILE_ERROR_CODES.has(code);\n}\n", "import { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport { hashParsedAst, hashSource } from \"./parse/hash.js\";\nimport { withRunResources } from \"./interp/resources.js\";\nimport { createReplayableRandom } from \"./random.js\";\nimport {\n attachErrorSpan,\n describeThrownValue,\n materializeWrappedErrorCause,\n replaceErrorStack,\n type ErrorSourceSpan\n} from \"./error/shape.js\";\nimport type { ParseResult } from \"./parse.js\";\nimport {\n findRegexLiteral,\n parseExecutableModule,\n type AwaitExpression,\n type CallExpression,\n type Identifier,\n type Module,\n type SourceSpan,\n type Statement\n} from \"./parse/parser.js\";\nimport { restore, type SafeJSSnapshot } from \"./restore.js\";\nimport { Budget, type CompileTicket } from \"./interp/budget.js\";\nimport { CompileScope } from \"./interp/regex/compile-guard.js\";\nimport {\n PromiseReplay,\n promiseReplayContext,\n type PromiseReplaySnapshot\n} from \"./interp/promise-replay.js\";\nimport { wrapCancelableBindings } from \"./interp/cancel.js\";\nimport { enterSnapshotRun } from \"./interp/running-state.js\";\nimport {\n createSandboxPromiseRejectionTracker,\n observeSandboxPromise,\n withSandboxPromiseRejectionTracker,\n type SandboxPromiseRejectionTracker\n} from \"./interp/promise-tracker.js\";\nimport {\n HostCallJournal,\n type HostCallRecord,\n type HostCallReplay,\n type HostCallResumeProvider\n} from \"./interp/host-call.js\";\nimport { createConsoleJsonGlobals, type ConsoleSink } from \"./interp/globals/console-json.js\";\nimport { createCollectionGlobals } from \"./interp/globals/collections.js\";\nimport { createFloat32ArrayGlobal } from \"./interp/globals/float32array.js\";\nimport { createErrorGlobals } from \"./interp/globals/error.js\";\nimport { createMathGlobals } from \"./interp/globals/math.js\";\nimport { createRegexGlobals } from \"./interp/globals/regex.js\";\nimport { createMiscGlobals } from \"./interp/globals/misc.js\";\nimport { createObjectArrayGlobals } from \"./interp/globals/object-array.js\";\nimport {\n declareHostOperation,\n wrapCallerInjectedBindings,\n type CallerInjectedBinding\n} from \"./interp/host-bridge.js\";\nimport {\n interpret,\n Scope,\n type InterpreterResult,\n type LoopIterationSnapshot\n} from \"./interp/interpreter.js\";\nimport { consumeSettledHostCall, createPromiseGlobals } from \"./interp/promise.js\";\nimport {\n deepCopyToSandbox,\n isSandboxClosure,\n isSandboxPromise,\n measureSandboxData,\n reconcileCompiledValues,\n type SandboxValue,\n type SandboxPromise\n} from \"./interp/values.js\";\nimport { resolveModuleImports, type ModuleRegistry } from \"./modules/registry.js\";\nimport {\n activateOtelSink,\n getActiveOtelSpan,\n safeAddEvent,\n type OtelSink\n} from \"./observability/otel.js\";\nimport type { SnapshotBackend } from \"./snapshot/backend.js\";\nimport { attachDumpController, createDumpController } from \"./snapshot/dump.js\";\nimport { DUMP_FORMAT_VERSION, EXECUTION_SEMANTICS } from \"./snapshot/dump-format.js\";\nimport { createSnapshotScheduler, type SnapshotScheduler } from \"./snapshot/scheduler.js\";\nimport { UnsnapshotableValueError } from \"./snapshot/serialize.js\";\nimport { prepareReplayInputs } from \"./snapshot/replay-inputs.js\";\nimport {\n decodeReplayData,\n MissingReplayCapabilityError,\n type ReplayData\n} from \"./snapshot/replay-data.js\";\n\nexport type RunOptions = {\n bindings?: Record<string, CallerInjectedBinding>;\n budget?: Budget;\n clock?: RunClock;\n entryPointArgs?: readonly unknown[];\n filename?: string;\n importMeta?: Record<string, unknown>;\n hostCallResumeProvider?: HostCallResumeProvider;\n modules?: ModuleRegistry;\n random?: RunRandom;\n randomSeed?: number;\n otelSink?: OtelSink;\n signal?: AbortSignal;\n snapshot?: SafeJSSnapshot;\n snapshotBackend?: SnapshotBackend;\n snapshotIntervalMs?: number;\n snapshotPath?: string;\n sink?: ConsoleSink;\n};\n\nexport class UnhandledRejectionError extends Error {\n readonly reason: unknown;\n\n constructor(reason: unknown, span?: ErrorSourceSpan) {\n super(`Unhandled rejection: ${describeThrownValue(reason)}`);\n this.name = \"UnhandledRejectionError\";\n this.reason = reason;\n attachErrorSpan(this, span);\n replaceErrorStack(this);\n }\n}\n\nexport type RunSnapshot = SafeJSSnapshot & {\n bindings: InterpreterResult[\"snapshot\"][\"bindings\"];\n clock?: RunClockSnapshot;\n hostCalls?: HostCallRecord[];\n replay?: HostCallReplay;\n replayError?: string;\n promiseReplay?: PromiseReplaySnapshot;\n initialInputs?: ReplayData;\n loopIterations?: Record<string, LoopIterationSnapshot>;\n pendingAwaits?: RunPendingAwaitSnapshot[];\n random?: {\n seed: number;\n state: number;\n initialState?: number;\n resumeState?: number;\n };\n};\n\nexport type RunPendingAwaitSnapshot = {\n nodeId?: number;\n span: SourceSpan;\n};\n\nexport type RunClockSnapshot = {\n next: number;\n};\n\nexport type RunClock = {\n snapshot: () => RunClockSnapshot | undefined;\n};\n\nexport type RunRandom = {\n next: () => number;\n seed: number;\n snapshot: () => number;\n};\n\ntype WithRunSnapshot<TResult extends InterpreterResult> = TResult extends unknown\n ? Omit<TResult, \"snapshot\"> & {\n snapshot: RunSnapshot;\n }\n : never;\n\nexport type RunResult = WithRunSnapshot<InterpreterResult>;\n\nconst DEFAULT_MAX_CALL_DEPTH = 1_000;\n\nexport function run(source: string, options: RunOptions = {}): Promise<RunResult> {\n const lifecycle = {\n hostCallbackDepth: 0,\n hostCallbackContext: new AsyncLocalStorage<boolean>()\n };\n const dumpController = createDumpController(lifecycle);\n const promiseTracker = createSandboxPromiseRejectionTracker();\n let completedSnapshot: RunSnapshot | undefined;\n const execute = async () => {\n const budget = options.budget ?? new Budget({ maxCallDepth: DEFAULT_MAX_CALL_DEPTH });\n const operation = budget.acquireCompileOwner(true);\n const compilation = new CompileScope(operation.owner);\n try {\n const promiseReplay = new PromiseReplay(options.snapshot?.promiseReplay);\n return await promiseReplayContext.run(promiseReplay, async () => {\n const deactivateOtelSink = activateOtelSink(options.otelSink);\n let leaveSnapshotRun: (() => void) | undefined;\n let leaveHostReplay: (() => void) | undefined;\n let leaveInputReplay: (() => void) | undefined;\n let createFailureSnapshot: (() => RunSnapshot) | undefined;\n let cancellationSnapshot: RunSnapshot | undefined;\n let cancellationSnapshotError: { reason: unknown } | undefined;\n let snapshotScheduler: SnapshotScheduler<RunSnapshot> | undefined;\n const captureCancellationSnapshot = () => {\n try {\n cancellationSnapshot = createFailureSnapshot?.();\n } catch (reason) {\n cancellationSnapshotError = { reason };\n }\n };\n options.signal?.addEventListener(\"abort\", captureCancellationSnapshot, { once: true });\n try {\n const restoredSnapshot =\n options.snapshot === undefined\n ? undefined\n : restore(options.snapshot, { source }, operation.owner);\n const executionSemantics =\n restoredSnapshot?.executionSemantics === \"jobs-v6\" ? \"jobs-v6\" : EXECUTION_SEMANTICS;\n const convertInitialInput = <TValue>(convert: () => TValue): TValue =>\n executionSemantics === \"jobs-v6\" ? convert() : promiseReplayContext.exit(convert);\n if (restoredSnapshot !== undefined) {\n leaveSnapshotRun = enterSnapshotRun(restoredSnapshot);\n }\n promiseReplay.attachBudget(budget);\n const filename = options.filename ?? \"<input>\";\n const module = parseExecutableModule(source, filename, operation.owner);\n promiseReplay.validateNodes(module);\n const sourceHash =\n findRegexLiteral(module) === undefined\n ? hashSource(source, operation.owner)\n : hashParsedAst(module);\n const hostCalls = new HostCallJournal(\n sourceHash,\n readHostCallSnapshot(restoredSnapshot),\n options.hostCallResumeProvider,\n restoredSnapshot?.replay,\n budget,\n operation.owner\n );\n leaveHostReplay = hostCalls.dispose.bind(hostCalls);\n promiseReplay.validateCallbacks(hostCalls.callbackPositions());\n const generator =\n options.random ??\n createReplayableRandom({ seed: options.randomSeed, snapshot: restoredSnapshot });\n const random = { seed: generator.seed, initialState: generator.snapshot(), generator };\n const interpreterSnapshot =\n restoredSnapshot?.replay === undefined && hasLoopIterationSnapshot(restoredSnapshot)\n ? {\n ...(restoredSnapshot as RunSnapshot),\n resumeNodeId: (restoredSnapshot as RunSnapshot).pendingAwaits?.[0]?.nodeId\n }\n : undefined;\n const callerBindings = convertInitialInput(() =>\n options.bindings === undefined\n ? {}\n : wrapCallerInjectedBindings(options.bindings, {\n budget,\n compileOwner: operation.owner,\n hostCalls,\n moduleId: \"<bindings>\",\n signal: options.signal,\n lifecycle\n })\n );\n const builtinBindings = {\n ...createConsoleJsonGlobals({\n compileOwner: operation.owner,\n budget,\n hostCalls,\n sink: options.sink\n }),\n ...createCollectionGlobals({ budget }),\n Float32Array: createFloat32ArrayGlobal(budget),\n ...createErrorGlobals({\n budget\n }),\n ...createMathGlobals({\n random: random?.generator.next\n }),\n ...createObjectArrayGlobals({\n budget\n }),\n ...createMiscGlobals({\n budget\n }),\n ...createPromiseGlobals({\n budget\n }),\n ...createRegexGlobals(operation.owner)\n };\n const importMeta = convertInitialInput(\n () => deepCopyToSandbox(options.importMeta ?? {}) as Record<string, SandboxValue>\n );\n if (restoredSnapshot?.migration !== undefined) {\n if (Object.hasOwn(importMeta, \"migration\"))\n throw new TypeError(\n \"import.meta.migration is reserved for migrated checkpoint state.\"\n );\n Object.defineProperty(importMeta, \"migration\", {\n value: decodeReplayData(restoredSnapshot.migration.state, {}, compilation),\n enumerable: true,\n configurable: true,\n writable: true\n });\n }\n const initialInputs = prepareReplayInputs(\n {\n bindings: callerBindings,\n imports: convertInitialInput(() =>\n resolveModuleImports(module, options.modules, {\n budget,\n compileOwner: operation.owner,\n hostCalls,\n signal: options.signal,\n allowMissing: restoredSnapshot?.initialInputs !== undefined\n })\n ),\n entryPointArgs: convertInitialInput(() =>\n options.entryPointArgs === undefined\n ? undefined\n : (deepCopyToSandbox([...options.entryPointArgs]) as SandboxValue[])\n ),\n importMeta\n },\n restoredSnapshot?.initialInputs,\n (promise, id) => {\n if (promise !== undefined) observeSandboxPromise(promise);\n const operation = declareHostOperation(() => {\n if (promise === undefined) throw new TypeError(`Missing initial promise '${id}'.`);\n return promise.promise;\n }, \"read-side-effect\");\n const binding = wrapCallerInjectedBindings(\n { [id]: operation },\n {\n budget,\n hostCalls,\n moduleId: \"<inputs>\",\n compileOwner: compilation.owner,\n signal: options.signal,\n lifecycle\n }\n )[id]!;\n if (!isSandboxClosure(binding))\n throw new TypeError(\"Invalid initial promise operation.\");\n return binding.call([]) as SandboxPromise;\n },\n hostCalls.rebindHostCapability.bind(hostCalls),\n compilation\n );\n hostCalls.validateHostCapabilities();\n const inputTickets = new Set<CompileTicket>();\n const inputSize = measureSandboxData(\n [\n ...Object.values(initialInputs.values.bindings),\n ...Object.values(initialInputs.values.imports),\n ...(initialInputs.values.entryPointArgs ?? []),\n initialInputs.values.importMeta\n ],\n { ignoreClosureCaptures: true, compileTickets: inputTickets }\n );\n budget.reconcileCompileData(inputSize, inputTickets, inputTickets, initialInputs);\n leaveInputReplay = () => budget.setRetainedDataUsage(initialInputs, 0);\n const entryPointArgs = initialInputs.values.entryPointArgs;\n const cancelableCallerBindings = wrapCancelableBindings(\n initialInputs.values.bindings,\n options.signal\n );\n\n const scope = new Scope(\n builtinBindings,\n undefined,\n undefined,\n { chargeData: false },\n interpreterSnapshot?.bindings as Record<string, SandboxValue> | undefined\n );\n const callerScope = scope.child(cancelableCallerBindings);\n const executionScope = new Scope(\n initialInputs.values.imports,\n callerScope,\n initialInputs.values.importMeta,\n { functionBoundary: true }\n );\n const activeSnapshotScheduler = createSnapshotScheduler<RunSnapshot>({\n snapshotBackend: options.snapshotBackend,\n snapshotIntervalMs: options.snapshotIntervalMs,\n snapshotPath: options.snapshotPath\n });\n snapshotScheduler = activeSnapshotScheduler;\n createFailureSnapshot = () =>\n createRunSnapshot({\n executionSemantics,\n migration: restoredSnapshot?.migration,\n bindings: executionScope.snapshot().bindings,\n clock: options.clock,\n hostCalls: hostCalls.snapshot(),\n replay: hostCalls.snapshotReplay(),\n initialInputs: initialInputs.snapshot,\n promiseReplay: promiseReplay.snapshot(),\n random,\n sourceHash\n });\n let snapshotIteration = 0;\n\n const topLevelResult = await interpret(createExecutableNode(module), {\n compilation,\n budget,\n captureReplayState: random.generator.snapshot,\n onYield: (yieldPoint) => {\n snapshotIteration += 1;\n safeAddEvent(yieldPoint.otelSpan ?? getActiveOtelSpan(), \"snapshot.saved\", {\n iteration: snapshotIteration\n });\n let snapshot: RunSnapshot | undefined;\n const createSnapshot = () => {\n if (snapshot !== undefined) {\n return snapshot;\n }\n const interpreterSnapshot = yieldPoint.snapshot();\n snapshot = createRunSnapshot({\n executionSemantics,\n migration: restoredSnapshot?.migration,\n bindings: interpreterSnapshot.bindings,\n clock: options.clock,\n hostCalls: hostCalls.snapshot(),\n loopIterations: interpreterSnapshot.loopIterations,\n pendingAwaits: [createPendingAwaitSnapshot(yieldPoint)],\n replay: hostCalls.snapshotReplay(),\n initialInputs: initialInputs.snapshot,\n promiseReplay: promiseReplay.snapshot(),\n random,\n randomResumeState:\n typeof yieldPoint.replayState === \"number\" ? yieldPoint.replayState : undefined,\n sourceHash\n });\n return snapshot;\n };\n\n activeSnapshotScheduler.onYield(createSnapshot);\n dumpController.onYield(createSnapshot);\n },\n scope: executionScope,\n signal: options.signal,\n snapshot: interpreterSnapshot,\n surfaceUnhandledThrows: true,\n useScopeDirectly: true\n });\n const result =\n entryPointArgs === undefined || !topLevelResult.ok\n ? topLevelResult\n : await callEntryPoint({\n args: entryPointArgs,\n budget,\n compilation,\n captureReplayState: random.generator.snapshot,\n filename,\n module,\n onYield: (yieldPoint) => {\n snapshotIteration += 1;\n safeAddEvent(yieldPoint.otelSpan ?? getActiveOtelSpan(), \"snapshot.saved\", {\n iteration: snapshotIteration\n });\n let snapshot: RunSnapshot | undefined;\n const createSnapshot = () => {\n if (snapshot !== undefined) {\n return snapshot;\n }\n const interpreterSnapshot = yieldPoint.snapshot();\n snapshot = createRunSnapshot({\n executionSemantics,\n migration: restoredSnapshot?.migration,\n bindings: interpreterSnapshot.bindings,\n clock: options.clock,\n hostCalls: hostCalls.snapshot(),\n loopIterations: interpreterSnapshot.loopIterations,\n pendingAwaits: [createPendingAwaitSnapshot(yieldPoint)],\n replay: hostCalls.snapshotReplay(),\n initialInputs: initialInputs.snapshot,\n promiseReplay: promiseReplay.snapshot(),\n random,\n randomResumeState:\n typeof yieldPoint.replayState === \"number\"\n ? yieldPoint.replayState\n : undefined,\n sourceHash\n });\n return snapshot;\n };\n\n activeSnapshotScheduler.onYield(createSnapshot);\n dumpController.onYield(createSnapshot);\n },\n scope: executionScope,\n signal: options.signal,\n snapshot: interpreterSnapshot\n });\n await throwIfReturnedPromiseRejected(result);\n await throwIfUnhandledPromiseRejected(promiseTracker);\n await activeSnapshotScheduler.finish();\n\n let replay: HostCallReplay | undefined;\n let replayError: string | undefined;\n try {\n replay = hostCalls.snapshotReplay();\n } catch (error) {\n if (!(error instanceof MissingReplayCapabilityError)) throw error;\n replayError = error.message;\n }\n const snapshot = createRunSnapshot({\n executionSemantics,\n migration: restoredSnapshot?.migration,\n bindings: executionScope.snapshot().bindings,\n clock: options.clock,\n hostCalls: hostCalls.snapshot(),\n replay,\n initialInputs: initialInputs.snapshot,\n promiseReplay: promiseReplay.snapshot(),\n random,\n sourceHash\n });\n if (replayError !== undefined) snapshot.replayError = replayError;\n dumpController.finalize(snapshot);\n completedSnapshot = snapshot;\n\n reconcileCompiledValues(\n budget,\n [\n ...Object.values(result.snapshot.bindings),\n ...(result.ok && \"returnValue\" in result ? [result.returnValue] : []),\n ...budget.retainedValues()\n ],\n compilation\n );\n\n return {\n ...result,\n snapshot\n };\n } catch (error) {\n promiseReplay.fail(error);\n materializeWrappedErrorCause(error);\n if (createFailureSnapshot !== undefined && snapshotScheduler !== undefined) {\n try {\n if (cancellationSnapshotError !== undefined) throw cancellationSnapshotError.reason;\n const snapshot = cancellationSnapshot ?? createFailureSnapshot();\n dumpController.finalize(snapshot);\n await snapshotScheduler.write(snapshot);\n } catch (snapshotError) {\n if (snapshotError instanceof UnsnapshotableValueError) {\n console.warn(`Skipping failure snapshot: ${snapshotError.message}`);\n } else {\n console.warn(\"Failed to write failure snapshot.\", snapshotError);\n }\n }\n }\n dumpController.fail(error);\n throw error;\n } finally {\n lifecycle.hostCallbackContext.disable();\n options.signal?.removeEventListener(\"abort\", captureCancellationSnapshot);\n leaveInputReplay?.();\n leaveHostReplay?.();\n promiseReplay.dispose();\n leaveSnapshotRun?.();\n deactivateOtelSink();\n }\n });\n } finally {\n compilation.dispose();\n operation.release();\n }\n };\n const result = withRunResources(options.signal, () =>\n withSandboxPromiseRejectionTracker(promiseTracker, execute)\n ).catch(async (error: unknown) => {\n if (completedSnapshot !== undefined) {\n try {\n await createSnapshotScheduler<RunSnapshot>(options).write(completedSnapshot);\n } catch (snapshotError) {\n console.warn(\"Failed to write failure snapshot.\", snapshotError);\n }\n }\n dumpController.fail(error);\n throw error;\n });\n\n return attachDumpController(result, dumpController);\n}\n\nasync function throwIfReturnedPromiseRejected(result: InterpreterResult): Promise<void> {\n if (!result.ok || !isSandboxPromise(result.returnValue)) {\n return;\n }\n\n observeSandboxPromise(result.returnValue);\n\n let rejected = false;\n let rejectionReason: unknown;\n result.returnValue.promise.then(\n () => undefined,\n (reason) => {\n rejected = true;\n rejectionReason = reason;\n }\n );\n\n await Promise.resolve();\n await Promise.resolve();\n\n if (rejected) {\n consumeSettledHostCall(result.returnValue);\n throw new UnhandledRejectionError(rejectionReason, result.returnValue.span);\n }\n}\n\nasync function throwIfUnhandledPromiseRejected(\n tracker: SandboxPromiseRejectionTracker\n): Promise<void> {\n const unhandled = await tracker.findUnhandledRejection();\n if (unhandled !== undefined) {\n throw new UnhandledRejectionError(unhandled.reason, unhandled.span);\n }\n}\n\nasync function callEntryPoint(input: {\n compilation: CompileScope;\n args: readonly SandboxValue[];\n budget: Budget;\n captureReplayState: () => number;\n filename: string;\n module: Module;\n onYield: NonNullable<Parameters<typeof interpret>[1]>[\"onYield\"];\n scope: Scope;\n signal?: AbortSignal;\n snapshot?: RunSnapshot;\n}): Promise<InterpreterResult> {\n const defaultExport = input.scope.lookup(\"default\");\n\n if (!defaultExport.found) {\n throw new Error(`Script ${input.filename} does not export a default function.`);\n }\n\n if (!isSandboxClosure(defaultExport.value)) {\n throw new TypeError(`Default export in ${input.filename} must be callable.`);\n }\n\n const argumentBindings = Object.fromEntries(\n input.args.map((value, index) => [createEntryPointArgName(index), value])\n ) as Record<string, SandboxValue>;\n const entryScope = input.scope.child({\n __agentScriptEntryPoint: defaultExport.value,\n ...argumentBindings\n });\n\n return interpret(createEntryPointAwait(input.args.length, input.module.span), {\n compilation: input.compilation,\n signal: input.signal,\n budget: input.budget,\n captureReplayState: input.captureReplayState,\n onYield: input.onYield,\n scope: entryScope,\n snapshot: input.snapshot,\n surfaceUnhandledThrows: true,\n useScopeDirectly: true\n });\n}\n\nfunction createEntryPointAwait(argCount: number, span: SourceSpan): AwaitExpression {\n return {\n type: \"AwaitExpression\",\n argument: createEntryPointCall(argCount, span),\n span\n };\n}\n\nfunction createEntryPointCall(argCount: number, span: SourceSpan): CallExpression {\n return {\n type: \"CallExpression\",\n callee: createIdentifier(\"__agentScriptEntryPoint\", span),\n arguments: Array.from({ length: argCount }, (_value, index) =>\n createIdentifier(createEntryPointArgName(index), span)\n ),\n optional: false,\n span\n };\n}\n\nfunction createIdentifier(name: string, span: SourceSpan): Identifier {\n return {\n type: \"Identifier\",\n name,\n span\n };\n}\n\nfunction createEntryPointArgName(index: number): string {\n return `__agentScriptEntryPointArg${index}`;\n}\n\nfunction createExecutableNode(module: Module): ParseResult {\n const executableStatements = module.body.filter(\n (statement): statement is Exclude<Statement, { type: \"ImportDeclaration\" }> =>\n statement.type !== \"ImportDeclaration\"\n );\n\n if (executableStatements.length === 0) {\n return {\n type: \"BlockStatement\",\n body: [],\n span: module.span\n };\n }\n\n if (executableStatements.length === 1) {\n const [statement] = executableStatements;\n return statement.type === \"ExpressionStatement\" ? statement.expression : statement;\n }\n\n return {\n type: \"BlockStatement\",\n body: executableStatements,\n span: module.span\n };\n}\n\nfunction createRunSnapshot(input: {\n executionSemantics: \"jobs-v6\" | typeof EXECUTION_SEMANTICS;\n migration?: SafeJSSnapshot[\"migration\"];\n bindings: InterpreterResult[\"snapshot\"][\"bindings\"];\n clock: RunClock | undefined;\n hostCalls?: HostCallRecord[];\n replay?: HostCallReplay;\n promiseReplay?: PromiseReplaySnapshot;\n initialInputs?: ReplayData;\n loopIterations?: Record<string, LoopIterationSnapshot>;\n pendingAwaits?: RunPendingAwaitSnapshot[];\n randomResumeState?: number;\n random:\n | {\n seed: number;\n initialState: number;\n generator: RunRandom;\n }\n | undefined;\n sourceHash: string;\n}): RunSnapshot {\n return {\n version: DUMP_FORMAT_VERSION,\n executionSemantics: input.executionSemantics,\n sourceHash: input.sourceHash,\n ...(input.migration === undefined ? {} : { migration: structuredClone(input.migration) }),\n bindings: input.bindings,\n clock: input.clock?.snapshot(),\n ...(input.hostCalls === undefined || input.hostCalls.length === 0\n ? {}\n : { hostCalls: input.hostCalls }),\n ...(input.loopIterations === undefined ? {} : { loopIterations: input.loopIterations }),\n ...(input.replay === undefined ? {} : { replay: input.replay }),\n ...(input.initialInputs === undefined ? {} : { initialInputs: input.initialInputs }),\n ...(input.promiseReplay === undefined ? {} : { promiseReplay: input.promiseReplay }),\n ...(input.pendingAwaits === undefined || input.pendingAwaits.length === 0\n ? {}\n : { pendingAwaits: input.pendingAwaits }),\n random:\n input.random === undefined\n ? undefined\n : {\n seed: input.random.seed,\n initialState: input.random.initialState,\n ...(input.randomResumeState === undefined\n ? {}\n : { resumeState: input.randomResumeState }),\n state: input.random.generator.snapshot()\n }\n };\n}\n\nfunction readHostCallSnapshot(snapshot: SafeJSSnapshot | undefined): HostCallRecord[] {\n if (snapshot === undefined || !Array.isArray(snapshot.hostCalls)) {\n return [];\n }\n\n return snapshot.hostCalls.map((value, index) => {\n if (typeof value !== \"object\" || value === null) {\n throw new TypeError(`Snapshot hostCalls[${index}] must be an object.`);\n }\n\n const record = value as Partial<HostCallRecord>;\n const requiredStrings = [\n \"id\",\n \"runId\",\n \"sourceHash\",\n \"moduleId\",\n \"operation\",\n \"argumentDigest\"\n ] as const;\n for (const key of requiredStrings) {\n if (typeof record[key] !== \"string\" || record[key].length === 0) {\n throw new TypeError(`Snapshot hostCalls[${index}].${key} must be a non-empty string.`);\n }\n }\n if (record.sourceHash !== snapshot.sourceHash) {\n throw new TypeError(`Snapshot hostCalls[${index}].sourceHash must match the snapshot.`);\n }\n if (record.policy !== \"re-issue\" && record.policy !== \"read-side-effect\") {\n throw new TypeError(`Snapshot hostCalls[${index}].policy is invalid.`);\n }\n if (\n record.lifecycle !== \"created\" &&\n record.lifecycle !== \"running\" &&\n record.lifecycle !== \"settled\" &&\n record.lifecycle !== \"consumed\" &&\n record.lifecycle !== \"cancelled\"\n ) {\n throw new TypeError(`Snapshot hostCalls[${index}].lifecycle is invalid.`);\n }\n if (\n (record.lifecycle === \"settled\" || record.lifecycle === \"cancelled\") &&\n record.outcome === undefined\n ) {\n throw new TypeError(`Snapshot hostCalls[${index}].outcome is required.`);\n }\n\n return record as HostCallRecord;\n });\n}\n\nfunction hasLoopIterationSnapshot(snapshot: SafeJSSnapshot | undefined): snapshot is RunSnapshot {\n return (\n snapshot !== undefined &&\n typeof snapshot.loopIterations === \"object\" &&\n snapshot.loopIterations !== null &&\n Object.keys(snapshot.loopIterations).length > 0\n );\n}\n\nfunction createPendingAwaitSnapshot(yieldPoint: ResumeBreakpoint): RunPendingAwaitSnapshot {\n return {\n ...(yieldPoint.nodeId === undefined ? {} : { nodeId: yieldPoint.nodeId }),\n span: yieldPoint.span\n };\n}\n\ntype ResumeBreakpoint = Parameters<\n NonNullable<NonNullable<Parameters<typeof interpret>[1]>[\"onYield\"]>\n>[0];\n", "import { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport type RunResources = {\n signal: AbortSignal;\n add(close: () => Promise<void>): void;\n};\n\nexport const runResources = new AsyncLocalStorage<RunResources>();\n\nexport async function withRunResources<Result>(\n signal: AbortSignal | undefined,\n execute: () => Promise<Result>\n): Promise<Result> {\n const controller = new AbortController();\n const cancel = () => controller.abort(signal?.reason);\n const cleanups = new Set<() => Promise<void>>();\n const resources: RunResources = {\n signal: controller.signal,\n add(close) {\n cleanups.add(close);\n }\n };\n signal?.addEventListener(\"abort\", cancel, { once: true });\n if (signal?.aborted) cancel();\n let result!: Result;\n let failure: { reason: unknown } | undefined;\n let errors: unknown[] = [];\n try {\n result = await runResources.run(resources, execute);\n } catch (error) {\n failure = { reason: error };\n } finally {\n signal?.removeEventListener(\"abort\", cancel);\n controller.abort(new Error(\"SafeJS run finished.\"));\n const outcomes = await Promise.allSettled(\n [...cleanups].map((close) => Promise.resolve().then(close))\n );\n errors = outcomes.flatMap((outcome) => (outcome.status === \"rejected\" ? [outcome.reason] : []));\n }\n if (failure !== undefined) throw failure.reason;\n if (errors.length > 0) throw new AggregateError(errors, \"SafeJS resource cleanup failed.\");\n return result;\n}\n", "import type { Budget, CompileOwner } from \"../budget.js\";\nimport { CompileScope } from \"../regex/compile-guard.js\";\nimport type { HostCallJournal } from \"../host-call.js\";\nimport { wrapCallerInjectedBindings } from \"../host-bridge.js\";\nimport {\n allocateProducedSandboxValue,\n createSandboxClosure,\n deepCopyFromSandbox,\n isSandboxClosure,\n isSandboxPromise,\n type SandboxArray,\n type SandboxClosure,\n type SandboxObject,\n type SandboxValue\n} from \"../values.js\";\n\nexport type ConsoleSink = {\n error: (...args: unknown[]) => void;\n log: (...args: unknown[]) => void;\n};\n\nexport type ConsoleJsonGlobalsOptions = {\n budget: Budget;\n compileOwner?: CompileOwner;\n sink?: ConsoleSink;\n hostCalls?: HostCallJournal;\n};\n\nexport function createConsoleJsonGlobals(\n options: ConsoleJsonGlobalsOptions\n): Record<\"JSON\" | \"console\", SandboxObject> {\n const sink = options.sink ?? console;\n\n return {\n JSON: {\n parse: createSandboxClosure({\n sandbox: true,\n call: async ([text]) => parseJson(text, options.budget),\n name: \"parse\"\n }),\n stringify: createSandboxClosure({\n sandbox: true,\n call: async ([value, replacer, indent]) =>\n stringifyJson(value, replacer, indent, options.budget),\n name: \"stringify\"\n })\n },\n console:\n options.hostCalls === undefined\n ? {\n error: createSandboxClosure({\n sandbox: true,\n call: async (args, context) => {\n const operation = options.budget.acquireCompileOwner(\n false,\n options.compileOwner ?? context?.compilation?.owner\n );\n const compilation = new CompileScope(operation.owner);\n try {\n sink.error(...args.map((value) => deepCopyFromSandbox(value, { compilation })));\n return undefined;\n } finally {\n compilation.dispose();\n operation.release();\n }\n },\n name: \"error\"\n }),\n log: createSandboxClosure({\n sandbox: true,\n call: async (args, context) => {\n const operation = options.budget.acquireCompileOwner(\n false,\n options.compileOwner ?? context?.compilation?.owner\n );\n const compilation = new CompileScope(operation.owner);\n try {\n sink.log(...args.map((value) => deepCopyFromSandbox(value, { compilation })));\n return undefined;\n } finally {\n compilation.dispose();\n operation.release();\n }\n },\n name: \"log\"\n })\n }\n : wrapCallerInjectedBindings(\n {\n error: (...args: unknown[]) => {\n sink.error(...args);\n return undefined;\n },\n log: (...args: unknown[]) => {\n sink.log(...args);\n return undefined;\n }\n },\n {\n budget: options.budget,\n compileOwner: options.compileOwner,\n hostCalls: options.hostCalls,\n moduleId: \"<console>\"\n }\n )\n };\n}\n\nfunction parseJson(input: SandboxValue, budget: Budget): SandboxValue {\n const text = budget.allocateString(toJsonParseText(input));\n\n return copyJsonToSandbox(JSON.parse(text), budget);\n}\n\nasync function stringifyJson(\n value: SandboxValue,\n replacer: SandboxValue,\n indent: SandboxValue,\n budget: Budget\n): Promise<SandboxValue> {\n if (replacer !== undefined && replacer !== null && !isSandboxClosure(replacer)) {\n throw new TypeError(\n \"JSON.stringify(value, replacer, indent) only supports function, null, or undefined replacers.\"\n );\n }\n\n if (indent !== undefined && typeof indent !== \"number\" && typeof indent !== \"string\") {\n throw new TypeError(\n \"JSON.stringify(value, replacer, indent) requires indent to be a string, number, or undefined.\"\n );\n }\n\n const holder: SandboxObject = {};\n defineDataProperty(holder, \"\", value);\n const output = await stringifyProperty(\"\", holder, {\n budget,\n gap: normalizeStringifyGap(indent),\n replacer: isSandboxClosure(replacer) ? replacer : undefined,\n stack: []\n });\n\n if (output === undefined) {\n return undefined;\n }\n\n return budget.allocateString(output);\n}\n\nfunction toJsonParseText(input: SandboxValue): string {\n if (Array.isArray(input)) {\n return input\n .map((entry) => (entry === null || entry === undefined ? \"\" : toJsonParseText(entry)))\n .join(\",\");\n }\n\n if (typeof input === \"object\" && input !== null) {\n return \"[object Object]\";\n }\n\n return String(input);\n}\n\ntype StringifyState = {\n budget: Budget;\n gap: string;\n replacer?: SandboxClosure;\n stack: object[];\n};\n\nasync function stringifyProperty(\n key: string,\n holder: SandboxArray | SandboxObject,\n state: StringifyState,\n indent = \"\"\n): Promise<string | undefined> {\n let value = getOwnDataValue(holder, key);\n\n if (isStringifyContainer(value)) {\n const toJSON = getOwnDataValue(value, \"toJSON\");\n if (isSandboxClosure(toJSON)) {\n value = await callStringifyClosure(toJSON, [key], value, state);\n }\n }\n\n if (state.replacer !== undefined) {\n value = await callStringifyClosure(state.replacer, [key, toSandboxValue(value)], holder, state);\n }\n\n return stringifyValue(value, state, indent);\n}\n\nasync function stringifyValue(\n value: unknown,\n state: StringifyState,\n indent: string\n): Promise<string | undefined> {\n if (value === null) {\n return \"null\";\n }\n\n if (typeof value === \"string\") {\n return quoteJsonString(value);\n }\n\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? String(value) : \"null\";\n }\n\n if (typeof value === \"boolean\") {\n return value ? \"true\" : \"false\";\n }\n\n if (typeof value === \"bigint\") {\n throw new TypeError(\"Do not know how to serialize a BigInt.\");\n }\n\n if (isSandboxPromise(value)) return \"{}\";\n\n if (value === undefined || isSandboxClosure(value)) {\n return undefined;\n }\n\n if (Array.isArray(value)) {\n return stringifyArray(value, state, indent);\n }\n\n if (isStringifyObject(value)) {\n return stringifyObject(value, state, indent);\n }\n\n return undefined;\n}\n\nasync function stringifyArray(\n value: SandboxArray,\n state: StringifyState,\n indent: string\n): Promise<string> {\n enterStringifyObject(value, state);\n\n try {\n const nextIndent = indent + state.gap;\n const entries: string[] = [];\n\n for (let index = 0; index < value.length; index += 1) {\n entries.push((await stringifyProperty(String(index), value, state, nextIndent)) ?? \"null\");\n }\n\n if (entries.length === 0) {\n return \"[]\";\n }\n\n if (state.gap === \"\") {\n return `[${entries.join(\",\")}]`;\n }\n\n return `[\\n${nextIndent}${entries.join(`,\\n${nextIndent}`)}\\n${indent}]`;\n } finally {\n leaveStringifyObject(value, state);\n }\n}\n\nasync function stringifyObject(\n value: SandboxObject,\n state: StringifyState,\n indent: string\n): Promise<string> {\n enterStringifyObject(value, state);\n\n try {\n const nextIndent = indent + state.gap;\n const entries: string[] = [];\n\n for (const key of Object.keys(value)) {\n const serialized = await stringifyProperty(key, value, state, nextIndent);\n if (serialized !== undefined) {\n entries.push(`${quoteJsonString(key)}:${state.gap === \"\" ? \"\" : \" \"}${serialized}`);\n }\n }\n\n if (entries.length === 0) {\n return \"{}\";\n }\n\n if (state.gap === \"\") {\n return `{${entries.join(\",\")}}`;\n }\n\n return `{\\n${nextIndent}${entries.join(`,\\n${nextIndent}`)}\\n${indent}}`;\n } finally {\n leaveStringifyObject(value, state);\n }\n}\n\nasync function callStringifyClosure(\n closure: SandboxClosure,\n args: readonly SandboxValue[],\n thisValue: SandboxValue,\n state: StringifyState\n): Promise<unknown> {\n const result = await closure.call(args, { stack: [], thisValue });\n if (isSandboxPromise(result) && result.synchronousPrefix !== undefined) {\n await result.synchronousPrefix;\n }\n return allocateProducedSandboxValue(result, state.budget);\n}\n\nfunction enterStringifyObject(value: object, state: StringifyState): void {\n if (state.stack.includes(value)) {\n throw new TypeError(\"Converting circular structure to JSON.\");\n }\n\n state.stack.push(value);\n}\n\nfunction leaveStringifyObject(value: object, state: StringifyState): void {\n if (state.stack.at(-1) === value) {\n state.stack.pop();\n return;\n }\n\n const index = state.stack.lastIndexOf(value);\n if (index >= 0) {\n state.stack.splice(index, 1);\n }\n}\n\nfunction normalizeStringifyGap(indent: SandboxValue): string {\n if (typeof indent === \"number\") {\n return \" \".repeat(Math.min(10, Math.max(0, Math.trunc(indent))));\n }\n\n if (typeof indent === \"string\") {\n return indent.slice(0, 10);\n }\n\n return \"\";\n}\n\nfunction quoteJsonString(value: string): string {\n return JSON.stringify(value);\n}\n\nfunction isStringifyContainer(value: unknown): value is SandboxArray | SandboxObject {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !isSandboxClosure(value) &&\n !isSandboxPromise(value)\n );\n}\n\nfunction isStringifyObject(value: unknown): value is SandboxObject {\n return isStringifyContainer(value) && !Array.isArray(value);\n}\n\nfunction toSandboxValue(value: unknown): SandboxValue {\n if (\n value === null ||\n value === undefined ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n isSandboxClosure(value) ||\n isSandboxPromise(value) ||\n Array.isArray(value) ||\n isStringifyContainer(value)\n ) {\n return value as SandboxValue;\n }\n\n if (typeof value === \"bigint\") {\n throw new TypeError(\"Do not know how to serialize a BigInt.\");\n }\n\n throw new TypeError(\n `JSON.stringify(value) produced an unsupported value of type ${typeof value}.`\n );\n}\n\nfunction getOwnDataValue(target: SandboxArray | SandboxObject, key: string): unknown {\n const descriptor = Object.getOwnPropertyDescriptor(target, key);\n if (descriptor === undefined) {\n return undefined;\n }\n\n if (\"get\" in descriptor || \"set\" in descriptor) {\n throw new TypeError(`JSON.stringify(value) cannot serialize accessor property ${key}.`);\n }\n\n return descriptor.value as unknown;\n}\n\nfunction copyJsonToSandbox(value: unknown, budget: Budget): SandboxValue {\n if (\n value === null ||\n value === undefined ||\n typeof value === \"boolean\" ||\n typeof value === \"number\"\n ) {\n return value;\n }\n\n if (typeof value === \"string\") {\n return budget.allocateString(value);\n }\n\n if (Array.isArray(value)) {\n budget.allocateArrayLength(value.length);\n return value.map((entry) => copyJsonToSandbox(entry, budget));\n }\n\n if (isPlainObject(value)) {\n const copy = Object.create(null) as SandboxObject;\n\n for (const [key, entry] of Object.entries(value)) {\n defineDataProperty(copy, key, copyJsonToSandbox(entry, budget));\n }\n\n return copy;\n }\n\n throw new TypeError(\"JSON.parse(text) produced an unsupported value.\");\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction defineDataProperty(target: SandboxObject, key: string, value: SandboxValue): void {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n}\n", "import type { Budget } from \"../budget.js\";\nimport { getSandboxIterator } from \"../iteration.js\";\nimport {\n createSandboxClosure,\n createSandboxMap,\n createSandboxSet,\n isSandboxMap,\n isSandboxSet,\n type SandboxClosure,\n type SandboxValue\n} from \"../values.js\";\n\nexport type CollectionGlobals = {\n Map: SandboxClosure;\n Set: SandboxClosure;\n};\n\nconst mapConstructors = new WeakSet<SandboxClosure>();\nconst setConstructors = new WeakSet<SandboxClosure>();\n\nexport function createCollectionGlobals(options: { budget: Budget }): CollectionGlobals {\n const mapConstructor = createSandboxClosure({\n sandbox: true,\n call: () => {\n throw new TypeError(\"Constructor Map requires 'new'.\");\n },\n construct: ([source]) => {\n const entries = getMapEntries(source);\n if (entries instanceof Promise) {\n return entries.then((resolved) => createBudgetedMap(resolved, options.budget));\n }\n return createBudgetedMap(entries, options.budget);\n },\n name: \"Map\"\n });\n const setConstructor = createSandboxClosure({\n sandbox: true,\n call: () => {\n throw new TypeError(\"Constructor Set requires 'new'.\");\n },\n construct: ([source]) => {\n const values = getSetValues(source);\n if (values instanceof Promise) {\n return values.then((resolved) => createBudgetedSet(resolved, options.budget));\n }\n return createBudgetedSet(values, options.budget);\n },\n name: \"Set\"\n });\n\n mapConstructors.add(mapConstructor);\n setConstructors.add(setConstructor);\n return { Map: mapConstructor, Set: setConstructor };\n}\n\nexport function isSandboxMapConstructor(value: unknown): value is SandboxClosure {\n return (\n typeof value === \"object\" && value !== null && mapConstructors.has(value as SandboxClosure)\n );\n}\n\nexport function isSandboxSetConstructor(value: unknown): value is SandboxClosure {\n return (\n typeof value === \"object\" && value !== null && setConstructors.has(value as SandboxClosure)\n );\n}\n\nfunction getMapEntries(\n source: SandboxValue\n):\n | Array<readonly [SandboxValue, SandboxValue]>\n | Promise<Array<readonly [SandboxValue, SandboxValue]>> {\n if (source === undefined) {\n return [];\n }\n\n if (isSandboxMap(source)) {\n return [...source.entries];\n }\n\n if (Array.isArray(source)) {\n return validateMapEntries(source);\n }\n const iterator = getSandboxIterator(source);\n if (iterator?.generator !== true) {\n throw new TypeError(\"Map constructor argument must be an array of pairs or a Map.\");\n }\n return collectMapEntries(iterator);\n}\n\nasync function collectMapEntries(iterator: NonNullable<ReturnType<typeof getSandboxIterator>>) {\n const sourceEntries: SandboxValue[] = [];\n while (true) {\n const result = await iterator.next();\n if (result.done) break;\n sourceEntries.push(result.value);\n }\n return validateMapEntries(sourceEntries);\n}\n\nfunction validateMapEntries(sourceEntries: SandboxValue[]) {\n return sourceEntries.map((entry) => {\n if (!Array.isArray(entry)) {\n throw new TypeError(\"Map constructor entries must be arrays.\");\n }\n return [entry[0], entry[1]] as const;\n });\n}\n\nfunction getSetValues(source: SandboxValue): SandboxValue[] | Promise<SandboxValue[]> {\n if (source === undefined) {\n return [];\n }\n\n if (isSandboxSet(source)) {\n return [...source.values];\n }\n\n if (typeof source === \"string\") return [...source];\n if (Array.isArray(source)) return [...source];\n\n const iterator = getSandboxIterator(source);\n if (iterator?.generator === true) {\n return collectSetValues(iterator);\n }\n throw new TypeError(\"Set constructor argument must be an array, string, or Set.\");\n}\n\nasync function collectSetValues(iterator: NonNullable<ReturnType<typeof getSandboxIterator>>) {\n const values: SandboxValue[] = [];\n while (true) {\n const result = await iterator.next();\n if (result.done) break;\n values.push(result.value);\n }\n return values;\n}\n\nfunction createBudgetedMap(entries: Array<readonly [SandboxValue, SandboxValue]>, budget: Budget) {\n const map = createSandboxMap(entries);\n budget.allocateCollectionEntries(map.entries.size);\n return map;\n}\n\nfunction createBudgetedSet(values: SandboxValue[], budget: Budget) {\n budget.allocateCollectionEntries(new Set(values).size);\n return createSandboxSet(values);\n}\n", "import type { Budget } from \"../budget.js\";\nimport {\n checkFloat32Allocation,\n float32Number,\n float32Storage,\n isFloat32Array,\n isFloat32Index\n} from \"../float32.js\";\nimport { createSandboxClosure, type SandboxClosure, type SandboxValue } from \"../values.js\";\n\nconst constructors = new WeakSet<SandboxClosure>();\n\nexport function createFloat32ArrayGlobal(budget: Budget): SandboxClosure {\n const constructor = createSandboxClosure({\n sandbox: true,\n name: \"Float32Array\",\n length: 3,\n properties: { BYTES_PER_ELEMENT: 4 },\n call: () => {\n throw new TypeError(\"Constructor Float32Array requires 'new'.\");\n },\n construct: ([source]) => {\n if (Array.isArray(source) || isFloat32Array(source)) {\n const length = isFloat32Array(source) ? float32Storage(source).length : source.length;\n checkFloat32Allocation(length, budget);\n if (isFloat32Array(source)) return new Float32Array(source);\n const result = new Float32Array(length);\n for (let index = 0; index < length; index += 1) {\n budget.visitNode();\n const descriptor = Object.getOwnPropertyDescriptor(source, index);\n if (descriptor !== undefined && !(\"value\" in descriptor))\n throw new TypeError(\"Float32Array input accessors are not supported.\");\n result[index] = float32Number(descriptor?.value);\n }\n return result;\n }\n const number = float32Number(source);\n const length = Number.isNaN(number) ? 0 : Math.trunc(number);\n if (length < 0 || !Number.isSafeInteger(length))\n throw new RangeError(\"Invalid typed array length.\");\n checkFloat32Allocation(length, budget);\n return new Float32Array(length);\n }\n });\n constructors.add(constructor);\n return constructor;\n}\n\nexport function isFloat32ArrayConstructor(value: unknown): boolean {\n return typeof value === \"object\" && value !== null && constructors.has(value as SandboxClosure);\n}\n\nexport function getFloat32Member(\n value: Float32Array,\n property: string | number,\n budget: Budget\n): SandboxValue {\n const key = String(property);\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor !== undefined) {\n if (!(\"value\" in descriptor)) throw new TypeError(\"Float32Array accessors are not supported.\");\n return descriptor.value;\n }\n const storage = float32Storage(value);\n if (key === \"length\") return storage.length;\n if (key === \"byteLength\") return storage.length * 4;\n if (key === \"byteOffset\") return storage.byteOffset;\n if (key === \"BYTES_PER_ELEMENT\") return 4;\n if (![\"set\", \"slice\", \"subarray\"].includes(key)) return undefined;\n return createSandboxClosure({\n sandbox: true,\n name: key,\n length: key === \"set\" ? 1 : 2,\n call: (args, context) => {\n const receiver = context?.thisValue;\n if (!isFloat32Array(receiver))\n throw new TypeError(`Float32Array#${key} requires a Float32Array receiver.`);\n const storage = float32Storage(receiver);\n if (key === \"set\") {\n const [source, offsetValue = 0] = args;\n if (!Array.isArray(source) && !isFloat32Array(source))\n throw new TypeError(\"Float32Array#set requires an array or Float32Array.\");\n const number = float32Number(offsetValue);\n const offset = Number.isNaN(number) ? 0 : Math.trunc(number);\n const length = isFloat32Array(source) ? float32Storage(source).length : source.length;\n if (offset < 0 || !Number.isSafeInteger(offset) || offset + length > storage.length)\n throw new RangeError(\"Float32Array#set source is out of bounds.\");\n if (isFloat32Array(source)) {\n Float32Array.prototype.set.call(receiver, source, offset);\n return undefined;\n }\n checkFloat32Allocation(length, budget);\n const copied = new Float32Array(length);\n for (let index = 0; index < length; index += 1) {\n budget.visitNode();\n const entry = Object.getOwnPropertyDescriptor(source, index);\n if (entry !== undefined && !(\"value\" in entry))\n throw new TypeError(\"Float32Array input accessors are not supported.\");\n copied[index] = float32Number(entry?.value);\n }\n Float32Array.prototype.set.call(receiver, copied, offset);\n return undefined;\n }\n const start = relativeIndex(args[0], storage.length, 0);\n const end = relativeIndex(args[1], storage.length, storage.length);\n const length = Math.max(end - start, 0);\n if (key === \"subarray\")\n return new Float32Array(storage.buffer, storage.byteOffset + start * 4, length);\n checkFloat32Allocation(length, budget);\n const result = new Float32Array(length);\n new Uint8Array(result.buffer).set(\n new Uint8Array(storage.buffer, storage.byteOffset + start * 4, length * 4)\n );\n return result;\n }\n });\n}\n\nexport function setFloat32Member(\n value: Float32Array,\n property: string | number,\n entry: SandboxValue\n): void {\n const key = String(property);\n if (isFloat32Index(key)) {\n Reflect.set(value, key, float32Number(entry));\n return;\n }\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (\n descriptor === undefined &&\n [\"length\", \"byteLength\", \"byteOffset\", \"buffer\", \"BYTES_PER_ELEMENT\"].includes(key)\n )\n throw new TypeError(`Cannot assign to read only property '${key}'.`);\n if (descriptor !== undefined && (!(\"value\" in descriptor) || !descriptor.writable))\n throw new TypeError(`Cannot assign to read only property '${key}'.`);\n Object.defineProperty(\n value,\n key,\n descriptor === undefined\n ? { value: entry, configurable: true, enumerable: true, writable: true }\n : { value: entry }\n );\n}\n\nfunction relativeIndex(value: SandboxValue, length: number, fallback: number): number {\n if (value === undefined) return fallback;\n const numeric = float32Number(value);\n const integer = Number.isNaN(numeric) ? 0 : Math.trunc(numeric);\n return integer < 0 ? Math.max(length + integer, 0) : Math.min(integer, length);\n}\n", "import type { Budget } from \"../budget.js\";\nimport {\n createSubsetErrorValue,\n isSandboxErrorConstructorInstance as isNamedSandboxErrorConstructorInstance\n} from \"../exceptions.js\";\nimport {\n createSandboxClosure,\n isSandboxClosure,\n type SandboxArray,\n type SandboxClosure,\n type SandboxObject,\n type SandboxValue\n} from \"../values.js\";\n\nconst errorConstructorNames = new WeakMap<SandboxClosure, ErrorName>();\n\nconst errorNames = [\n \"Error\",\n \"TypeError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"AggregateError\"\n] as const;\n\nexport type ErrorName = (typeof errorNames)[number];\n\nexport type ErrorGlobals = Record<ErrorName, ReturnType<typeof createSandboxClosure>>;\n\nexport function createErrorGlobals(options: { budget: Budget }): ErrorGlobals {\n return Object.fromEntries(\n errorNames.map((name) => [name, createErrorConstructor(name, options.budget)])\n ) as ErrorGlobals;\n}\n\nexport function isSandboxErrorConstructorInstance(\n value: SandboxValue,\n constructor: SandboxValue\n): boolean {\n if (!isSandboxClosure(constructor)) {\n throw new TypeError(\"Right-hand side of 'instanceof' is not a function.\");\n }\n\n const name = errorConstructorNames.get(constructor);\n if (name === undefined) {\n return false;\n }\n\n return isNamedSandboxErrorConstructorInstance(value, name);\n}\n\nexport function isSandboxErrorConstructor(value: SandboxValue): value is SandboxClosure {\n return isSandboxClosure(value) && errorConstructorNames.has(value);\n}\n\nfunction createErrorConstructor(name: ErrorName, budget: Budget): SandboxClosure {\n const call = (args: readonly SandboxValue[], context?: Parameters<SandboxClosure[\"call\"]>[1]) =>\n createSubsetError(name, args, context?.stack ?? [], budget);\n const closure = createSandboxClosure({ sandbox: true, call, construct: call, name });\n\n errorConstructorNames.set(closure, name);\n return closure;\n}\n\nfunction createSubsetError(\n name: ErrorName,\n args: readonly SandboxValue[],\n stackFrames: readonly string[],\n budget: Budget\n): SandboxObject {\n const message = name === \"AggregateError\" ? args[1] : args[0];\n const options = name === \"AggregateError\" ? args[2] : args[1];\n const error = createSubsetErrorValue(name, message, stackFrames, budget);\n\n if (name === \"AggregateError\") {\n const errors = Array.isArray(args[0]) ? ([...args[0]] as SandboxArray) : [];\n budget.allocateArrayLength(errors.length);\n error.errors = errors;\n }\n\n if (isObjectLike(options) && Object.prototype.hasOwnProperty.call(options, \"cause\")) {\n error.cause = (options as SandboxObject).cause;\n }\n\n return error;\n}\n\nfunction isObjectLike(value: SandboxValue): value is SandboxArray | SandboxObject {\n return typeof value === \"object\" && value !== null;\n}\n", "import {\n createSandboxClosure,\n createSandboxRegex,\n reconcileCompiledValues,\n type SandboxCallContext,\n type SandboxClosure,\n type SandboxValue\n} from \"../values.js\";\nimport { CompileScope } from \"../regex/compile-guard.js\";\nimport { SandboxError, type CompileOwner } from \"../budget.js\";\n\nexport function createRegexGlobals(owner?: CompileOwner): { RegExp: SandboxClosure } {\n const construct = (args: readonly SandboxValue[], context?: SandboxCallContext) => {\n const selected = owner ?? context?.compilation?.owner;\n if (context?.compilation?.owner !== undefined && selected !== context.compilation.owner) {\n throw new SandboxError(\"reentry\");\n }\n const operation = selected?.budget.acquireCompileOwner(false, selected);\n const compilation = context?.compilation ?? new CompileScope(selected);\n try {\n const regex = createSandboxRegex(\n String(args[0] ?? \"\"),\n String(args[1] ?? \"\"),\n 0,\n compilation\n );\n if (context?.compilation === undefined && selected !== undefined) {\n reconcileCompiledValues(selected.budget, [regex], compilation);\n }\n return regex;\n } finally {\n if (context?.compilation === undefined) compilation.dispose();\n operation?.release();\n }\n };\n return {\n RegExp: createSandboxClosure({ sandbox: true, name: \"RegExp\", call: construct, construct })\n };\n}\n", "import type { Budget } from \"../budget.js\";\nimport { assertSandboxGraphDepth } from \"../../graph-depth.js\";\nimport {\n allocateProducedSandboxValue,\n cloneSandboxValue,\n createSandboxClosure,\n isSandboxClosure,\n isSandboxMap,\n isSandboxPromise,\n isSandboxSet,\n type SandboxClosure,\n type SandboxValue\n} from \"../values.js\";\n\nexport type MiscGlobals = {\n structuredClone: SandboxClosure;\n parseInt: SandboxClosure;\n parseFloat: SandboxClosure;\n isNaN: SandboxClosure;\n isFinite: SandboxClosure;\n};\n\nexport function createMiscGlobals(options: { budget: Budget }): MiscGlobals {\n return {\n structuredClone: createSandboxClosure({\n sandbox: true,\n call: ([value]) => structuredCloneSandboxValue(value, options.budget),\n name: \"structuredClone\"\n }),\n parseInt: createSandboxClosure({\n sandbox: true,\n call: (args) => Reflect.apply(globalThis.parseInt, globalThis, [...args]),\n name: \"parseInt\"\n }),\n parseFloat: createSandboxClosure({\n sandbox: true,\n call: (args) => Reflect.apply(globalThis.parseFloat, globalThis, [...args]),\n name: \"parseFloat\"\n }),\n isNaN: createSandboxClosure({\n sandbox: true,\n call: ([value]) => globalThis.isNaN(value as number),\n name: \"isNaN\"\n }),\n isFinite: createSandboxClosure({\n sandbox: true,\n call: ([value]) => globalThis.isFinite(value as number),\n name: \"isFinite\"\n })\n };\n}\n\nfunction structuredCloneSandboxValue(value: SandboxValue, budget: Budget): SandboxValue {\n assertSandboxGraphDepth(value);\n const clone = cloneSandboxValue(value);\n assertStructuredCloneable(clone, new WeakSet());\n return allocateProducedSandboxValue(clone, budget);\n}\n\nfunction assertStructuredCloneable(value: SandboxValue, seen: WeakSet<object>): void {\n if (isSandboxClosure(value) || isSandboxPromise(value)) {\n throw new TypeError(\"structuredClone() cannot clone closures or promises.\");\n }\n\n if (typeof value !== \"object\" || value === null || seen.has(value)) {\n return;\n }\n\n seen.add(value);\n if (isSandboxMap(value)) {\n for (const [key, entry] of value.entries) {\n assertStructuredCloneable(key, seen);\n assertStructuredCloneable(entry, seen);\n }\n return;\n }\n if (isSandboxSet(value)) {\n for (const entry of value.values) {\n assertStructuredCloneable(entry, seen);\n }\n return;\n }\n for (const entry of Object.values(value)) {\n assertStructuredCloneable(entry, seen);\n }\n}\n", "import { sandboxErrorTypes } from \"../error/shape.js\";\nimport type { Budget } from \"./budget.js\";\nimport { float32Storage, isFloat32Array } from \"./float32.js\";\nimport {\n isSandboxClosure,\n isSandboxPromise,\n type SandboxCallContext,\n type SandboxValue\n} from \"./values.js\";\n\nexport function sandboxString(\n value: SandboxValue,\n budget: Budget,\n context?: SandboxCallContext,\n joining = new Set<object>()\n): string | Promise<string> {\n if (value === null || typeof value !== \"object\") {\n if (typeof value === \"function\") throw new TypeError(\"Expected a sandbox value.\");\n return budget.allocateString(String(value));\n }\n return stringifyObject(value, budget, context, joining);\n}\n\nasync function stringifyObject(\n value: SandboxValue & object,\n budget: Budget,\n context: SandboxCallContext | undefined,\n joining: Set<object>\n): Promise<string> {\n const leaveCall = budget.enterCall();\n try {\n budget.visitNode();\n for (const name of [\"toString\", \"valueOf\"]) {\n const descriptor = Object.getOwnPropertyDescriptor(value, name);\n let result: SandboxValue;\n if (descriptor === undefined) {\n if (name === \"valueOf\") continue;\n result = await defaultToString(value, budget, context, joining);\n } else {\n const hook = ownDataValue(value, name);\n if (!isSandboxClosure(hook)) continue;\n if (context?.invokeClosure === undefined) {\n throw new TypeError(\"String hooks require a sandbox call context.\");\n }\n result = await context.invokeClosure(hook, [], value);\n }\n if (result === null || typeof result !== \"object\") {\n return sandboxString(result, budget, context, joining);\n }\n }\n throw new TypeError(\"Cannot convert object to primitive value\");\n } finally {\n leaveCall();\n }\n}\n\nasync function defaultToString(\n value: SandboxValue & object,\n budget: Budget,\n context: SandboxCallContext | undefined,\n joining: Set<object>\n): Promise<SandboxValue> {\n if (Array.isArray(value) || isFloat32Array(value)) {\n if (Object.hasOwn(value, \"join\")) {\n const join = ownDataValue(value, \"join\");\n if (!isSandboxClosure(join))\n return isFloat32Array(value) ? \"[object Float32Array]\" : \"[object Array]\";\n if (context?.invokeClosure === undefined) {\n throw new TypeError(\"String hooks require a sandbox call context.\");\n }\n return context.invokeClosure(join, [], value);\n }\n if (joining.has(value)) return \"\";\n joining.add(value);\n try {\n const length = isFloat32Array(value) ? float32Storage(value).length : value.length;\n let text = \"\";\n for (let index = 0; index < length; index++) {\n budget.visitNode();\n const element = ownDataValue(value, String(index));\n const part =\n element === null || element === undefined\n ? \"\"\n : await sandboxString(element, budget, context, joining);\n text = budget.allocateString(text + (index === 0 ? \"\" : \",\") + part);\n }\n return text;\n } finally {\n joining.delete(value);\n }\n }\n if (sandboxErrorTypes.has(value)) {\n const nameValue = ownDataValue(value, \"name\");\n const name =\n nameValue === undefined ? \"Error\" : await sandboxString(nameValue, budget, context, joining);\n const messageValue = ownDataValue(value, \"message\");\n const message =\n messageValue === undefined ? \"\" : await sandboxString(messageValue, budget, context, joining);\n return name === \"\" ? message : message === \"\" ? name : `${name}: ${message}`;\n }\n return isSandboxPromise(value) ? \"[object Promise]\" : \"[object Object]\";\n}\n\nfunction ownDataValue(value: object, name: string): SandboxValue {\n const descriptor = Object.getOwnPropertyDescriptor(value, name);\n if (descriptor !== undefined && !Object.hasOwn(descriptor, \"value\")) {\n throw new TypeError(\"String conversion requires sandbox data properties.\");\n }\n return descriptor?.value as SandboxValue;\n}\n", "import type { Budget } from \"../budget.js\";\nimport { isFloat32Array } from \"../float32.js\";\nimport { setFloat32Member } from \"./float32array.js\";\nimport { getSandboxIterator } from \"../iteration.js\";\nimport { sandboxString } from \"../string-coercion.js\";\nimport {\n allocateProducedSandboxValue,\n createSandboxClosure,\n deepCopyToSandbox,\n isSandboxClosure,\n isSandboxMap,\n isSandboxPromise,\n isSandboxRegex,\n isSandboxSet,\n type SandboxArray,\n type SandboxClosure,\n type SandboxObject,\n type SandboxValue\n} from \"../values.js\";\n\nexport type ObjectArrayGlobals = {\n Object: SandboxObject;\n Array: SandboxClosure;\n String: SandboxClosure;\n Number: SandboxClosure;\n Boolean: SandboxClosure;\n};\n\nexport function createObjectArrayGlobals(options: { budget: Budget }): ObjectArrayGlobals {\n return {\n Object: {\n keys: createSandboxClosure({\n sandbox: true,\n call: ([value]) => budgetSandboxValue(getOwnEnumerableKeys(value), options.budget),\n name: \"keys\"\n }),\n values: createSandboxClosure({\n sandbox: true,\n call: ([value]) =>\n allocateProducedSandboxValue(getOwnEnumerableValues(value), options.budget),\n name: \"values\"\n }),\n entries: createSandboxClosure({\n sandbox: true,\n call: ([value]) =>\n allocateProducedSandboxValue(getOwnEnumerableEntries(value), options.budget),\n name: \"entries\"\n }),\n hasOwn: createSandboxClosure({\n sandbox: true,\n call: ([value, key]) => Reflect.apply(Object.hasOwn, Object, [value, key]),\n name: \"hasOwn\"\n }),\n is: createSandboxClosure({\n sandbox: true,\n call: ([left, right]) => Reflect.apply(Object.is, Object, [left, right]),\n name: \"is\"\n }),\n fromEntries: createSandboxClosure({\n sandbox: true,\n call: ([value]) => {\n const iterator = getSandboxIterator(value);\n if (iterator === undefined) {\n throw new TypeError(\"Object.fromEntries requires an iterable.\");\n }\n if (!iterator.generator) {\n return allocateProducedSandboxValue(\n Object.setPrototypeOf(\n Reflect.apply(Object.fromEntries, Object, [{ [Symbol.iterator]: () => iterator }]),\n null\n ),\n options.budget\n );\n }\n return objectFromSandboxEntries(iterator, options.budget);\n },\n name: \"fromEntries\"\n }),\n freeze: createSandboxClosure({\n sandbox: true,\n call: ([value]) => {\n if (typeof value === \"object\" && value !== null) {\n Object.freeze(value);\n }\n\n return value;\n },\n name: \"freeze\"\n }),\n isFrozen: createSandboxClosure({\n sandbox: true,\n call: ([value]) => Object.isFrozen(value),\n name: \"isFrozen\"\n }),\n assign: createSandboxClosure({\n sandbox: true,\n call: ([target, ...sources]) => assignSandboxValues(target, sources),\n name: \"assign\"\n })\n },\n Array: createSandboxClosure({\n sandbox: true,\n call: (args) => createArrayFromConstructorArgs(args, options.budget),\n construct: (args) => createArrayFromConstructorArgs(args, options.budget),\n name: \"Array\",\n properties: {\n isArray: createSandboxClosure({\n sandbox: true,\n call: ([value]) => Array.isArray(value),\n name: \"isArray\"\n }),\n from: createSandboxClosure({\n sandbox: true,\n call: (args) => arrayFromSandboxValues(args, options.budget),\n name: \"from\"\n }),\n of: createSandboxClosure({\n sandbox: true,\n call: (args) =>\n budgetSandboxValue(Reflect.apply(Array.of, Array, [...args]), options.budget),\n name: \"of\"\n })\n }\n }),\n String: createSandboxClosure({\n sandbox: true,\n call: (args, context) =>\n sandboxString(args.length === 0 ? \"\" : args[0], options.budget, context),\n name: \"String\",\n properties: {\n raw: createSandboxClosure({\n sandbox: true,\n call: (args) => stringRaw(args, options.budget),\n name: \"raw\"\n }),\n fromCharCode: createSandboxClosure({\n sandbox: true,\n call: (args) =>\n options.budget.allocateString(Reflect.apply(String.fromCharCode, String, [...args])),\n name: \"fromCharCode\"\n }),\n fromCodePoint: createSandboxClosure({\n sandbox: true,\n call: (args) =>\n options.budget.allocateString(Reflect.apply(String.fromCodePoint, String, [...args])),\n name: \"fromCodePoint\"\n })\n }\n }),\n Number: createSandboxClosure({\n sandbox: true,\n call: ([value]) => Number(value),\n name: \"Number\",\n properties: {\n isFinite: createSandboxClosure({\n sandbox: true,\n call: ([value]) => typeof value === \"number\" && Number.isFinite(value),\n name: \"isFinite\"\n }),\n isNaN: createSandboxClosure({\n sandbox: true,\n call: ([value]) => typeof value === \"number\" && Number.isNaN(value),\n name: \"isNaN\"\n }),\n isInteger: createSandboxClosure({\n sandbox: true,\n call: ([value]) => typeof value === \"number\" && Number.isInteger(value),\n name: \"isInteger\"\n }),\n parseInt: createSandboxClosure({\n sandbox: true,\n call: (args) => Reflect.apply(Number.parseInt, Number, [...args]),\n name: \"parseInt\"\n }),\n parseFloat: createSandboxClosure({\n sandbox: true,\n call: (args) => Reflect.apply(Number.parseFloat, Number, [...args]),\n name: \"parseFloat\"\n }),\n isSafeInteger: createSandboxClosure({\n sandbox: true,\n call: ([value]) => typeof value === \"number\" && Number.isSafeInteger(value),\n name: \"isSafeInteger\"\n }),\n MAX_SAFE_INTEGER: Number.MAX_SAFE_INTEGER,\n MIN_SAFE_INTEGER: Number.MIN_SAFE_INTEGER,\n EPSILON: Number.EPSILON,\n MAX_VALUE: Number.MAX_VALUE,\n MIN_VALUE: Number.MIN_VALUE,\n NaN: Number.NaN,\n NEGATIVE_INFINITY: Number.NEGATIVE_INFINITY,\n POSITIVE_INFINITY: Number.POSITIVE_INFINITY\n }\n }),\n Boolean: createSandboxClosure({\n sandbox: true,\n call: ([value]) => Boolean(value),\n name: \"Boolean\"\n })\n };\n}\n\nasync function objectFromSandboxEntries(\n iterator: NonNullable<ReturnType<typeof getSandboxIterator>>,\n budget: Budget\n): Promise<SandboxValue> {\n const object = Object.create(null) as SandboxObject;\n try {\n while (true) {\n const result = await iterator.next();\n if ((typeof result !== \"object\" && typeof result !== \"function\") || result === null) {\n throw new TypeError(\"Iterator result must be an object.\");\n }\n if (result.done) break;\n const entry = result.value;\n if ((typeof entry !== \"object\" && typeof entry !== \"function\") || entry === null) {\n throw new TypeError(\"Object.fromEntries requires entry objects.\");\n }\n const key = (entry as SandboxObject)[0];\n const value = (entry as SandboxObject)[1];\n Object.defineProperty(object, key as PropertyKey, {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n }\n } catch (error) {\n try {\n await iterator.return?.();\n } catch {\n throw error;\n }\n throw error;\n }\n return allocateProducedSandboxValue(object, budget);\n}\n\nfunction assignSandboxValues(target: SandboxValue, sources: readonly SandboxValue[]): SandboxValue {\n if (target === null || target === undefined) {\n throw new TypeError(\"Object.assign(target, ...sources) requires a non-null target.\");\n }\n\n if (!isAssignableSandboxTarget(target)) {\n throw new TypeError(\"Object.assign(target, ...sources) requires an object or array target.\");\n }\n\n for (const source of sources) {\n if (source === null || source === undefined) {\n continue;\n }\n\n for (const [key, value] of getOwnEnumerableEntries(source)) {\n if (isFloat32Array(target)) {\n setFloat32Member(target, key, value);\n continue;\n }\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n }\n }\n\n return target;\n}\n\nfunction isAssignableSandboxTarget(\n value: SandboxValue\n): value is\n | (SandboxObject & Record<string, SandboxValue>)\n | (SandboxValue[] & Record<string, SandboxValue>) {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !isSandboxClosure(value) &&\n !isSandboxMap(value) &&\n !isSandboxSet(value) &&\n !isSandboxPromise(value) &&\n !isSandboxRegex(value)\n );\n}\n\nasync function arrayFromSandboxValues(\n args: readonly SandboxValue[],\n budget: Budget\n): Promise<SandboxValue> {\n const [items, mapFn, thisValue] = args;\n\n const iterator = getSandboxIterator(items);\n const values =\n iterator === undefined\n ? (Reflect.apply(Array.from, Array, [items]) as SandboxValue[])\n : await collectIteratorValues(iterator);\n if (mapFn === undefined || !isSandboxClosure(mapFn)) {\n if (mapFn !== undefined) {\n throw new TypeError(\"Array.from mapping callback must be a function.\");\n }\n\n return budgetSandboxValue(values, budget);\n }\n const mappedValues: SandboxValue[] = [];\n\n for (const [index, value] of values.entries()) {\n const result = await mapFn.call([value, index], { stack: [], thisValue });\n if (isSandboxPromise(result) && result.synchronousPrefix !== undefined) {\n await result.synchronousPrefix;\n }\n mappedValues.push(result);\n }\n\n return budgetSandboxValue(mappedValues, budget);\n}\n\nfunction createArrayFromConstructorArgs(\n args: readonly SandboxValue[],\n budget: Budget\n): SandboxArray {\n if (args.length !== 1) {\n return budgetSandboxValue(Reflect.apply(Array, Array, [...args]), budget) as SandboxArray;\n }\n\n const [lengthOrValue] = args;\n if (typeof lengthOrValue !== \"number\") {\n return budgetSandboxValue([lengthOrValue], budget) as SandboxArray;\n }\n\n if (!Number.isInteger(lengthOrValue) || lengthOrValue < 0 || lengthOrValue > 0xffffffff) {\n throw new RangeError(\"Invalid array length.\");\n }\n\n budget.allocateArrayLength(lengthOrValue);\n return new Array(lengthOrValue) as SandboxArray;\n}\n\nasync function collectIteratorValues(\n iterator: NonNullable<ReturnType<typeof getSandboxIterator>>\n): Promise<SandboxValue[]> {\n const values: SandboxValue[] = [];\n while (true) {\n const result = await iterator.next();\n if (result.done) return values;\n values.push(result.value);\n }\n}\n\nfunction getOwnEnumerableKeys(value: SandboxValue): string[] {\n return getOwnEnumerableEntries(value).map(([key]) => key);\n}\n\nfunction getOwnEnumerableValues(value: SandboxValue): SandboxValue[] {\n return getOwnEnumerableEntries(value).map(([, entryValue]) => entryValue);\n}\n\nfunction getOwnEnumerableEntries(value: SandboxValue): Array<[string, SandboxValue]> {\n if (value === null || value === undefined) {\n throw new TypeError(\"Cannot convert undefined or null to object.\");\n }\n\n if (\n isSandboxClosure(value) ||\n isSandboxMap(value) ||\n isSandboxSet(value) ||\n isSandboxPromise(value) ||\n isSandboxRegex(value)\n ) {\n return [];\n }\n\n return Object.entries(Object(value)) as Array<[string, SandboxValue]>;\n}\n\nfunction budgetSandboxValue(value: unknown, budget: Budget): SandboxValue {\n const sandboxValue = deepCopyToSandbox(value);\n\n return allocateProducedSandboxValue(sandboxValue, budget);\n}\n\nfunction stringRaw(args: readonly SandboxValue[], budget: Budget): string {\n const [template, ...substitutions] = args;\n const raw = getTemplateRawParts(template);\n\n let result = \"\";\n for (let index = 0; index < raw.length; index += 1) {\n result += String(raw[index]);\n if (index < raw.length - 1 && index < substitutions.length) {\n result += String(substitutions[index]);\n }\n }\n\n return budget.allocateString(result);\n}\n\nfunction getTemplateRawParts(template: SandboxValue): SandboxArray {\n const raw =\n typeof template === \"object\" && template !== null\n ? (template as Record<string, SandboxValue>).raw\n : undefined;\n\n if (\n typeof template !== \"object\" ||\n template === null ||\n isSandboxClosure(template) ||\n isSandboxPromise(template) ||\n !Array.isArray(raw)\n ) {\n throw new TypeError(\"String.raw requires a raw strings array.\");\n }\n\n return raw;\n}\n", "import { Budget } from \"../budget.js\";\nimport {\n createSandboxClosure,\n isSandboxClosure,\n isSandboxMap,\n isSandboxPromise,\n isSandboxSet,\n type SandboxArray,\n type SandboxClosure,\n type SandboxValue\n} from \"../values.js\";\nimport { assertCollectionMutable, enterRunningState } from \"../running-state.js\";\n\nconst activeArrayCallbacks = new WeakMap<SandboxArray, { depth: number; leave: () => void }>();\n\nexport type ArrayMethodName =\n | \"map\"\n | \"filter\"\n | \"find\"\n | \"findIndex\"\n | \"findLast\"\n | \"findLastIndex\"\n | \"some\"\n | \"every\"\n | \"reduce\"\n | \"reduceRight\"\n | \"forEach\"\n | \"flatMap\"\n | \"flat\"\n | \"includes\"\n | \"indexOf\"\n | \"lastIndexOf\"\n | \"join\"\n | \"slice\"\n | \"concat\"\n | \"splice\"\n | \"fill\"\n | \"copyWithin\"\n | \"at\"\n | \"sort\"\n | \"reverse\"\n | \"toSorted\"\n | \"toReversed\"\n | \"toSpliced\"\n | \"with\"\n | \"push\"\n | \"pop\"\n | \"shift\"\n | \"unshift\";\n\nexport type ArrayMethodOptions = {\n budget: Budget;\n callClosure: (\n closure: SandboxClosure,\n args: readonly SandboxValue[],\n stack: readonly string[],\n thisValue?: SandboxValue\n ) => Promise<SandboxValue>;\n};\n\nconst arrayMethodNames = new Set<ArrayMethodName>([\n \"map\",\n \"filter\",\n \"find\",\n \"findIndex\",\n \"findLast\",\n \"findLastIndex\",\n \"some\",\n \"every\",\n \"reduce\",\n \"reduceRight\",\n \"forEach\",\n \"flatMap\",\n \"flat\",\n \"includes\",\n \"indexOf\",\n \"lastIndexOf\",\n \"join\",\n \"slice\",\n \"concat\",\n \"splice\",\n \"fill\",\n \"copyWithin\",\n \"at\",\n \"sort\",\n \"reverse\",\n \"toSorted\",\n \"toReversed\",\n \"toSpliced\",\n \"with\",\n \"push\",\n \"pop\",\n \"shift\",\n \"unshift\"\n]);\n\nexport function getArrayMember(\n value: SandboxArray,\n property: string | number,\n options: ArrayMethodOptions\n): SandboxValue | undefined {\n const index = getArrayIndex(property);\n if (index !== undefined) {\n return Object.hasOwn(value, index) ? value[index] : undefined;\n }\n\n if (property === \"length\") {\n return value.length;\n }\n\n if (Object.hasOwn(value, property)) {\n return (value as unknown as Record<string, SandboxValue>)[String(property)];\n }\n\n if (isArrayMethodName(property)) {\n return createSandboxClosure({\n sandbox: true,\n name: `Array#${property}`,\n call: (args, context) => callArrayMethod(value, property, args, options, context?.stack ?? [])\n });\n }\n\n return undefined;\n}\n\nfunction getArrayIndex(property: string | number): number | undefined {\n const index = typeof property === \"number\" ? property : Number(property);\n if (\n !Number.isSafeInteger(index) ||\n index < 0 ||\n index >= 2 ** 32 - 1 ||\n String(index) !== String(property)\n ) {\n return undefined;\n }\n\n return index;\n}\n\nexport function isArrayMethodName(property: string | number): property is ArrayMethodName {\n return typeof property === \"string\" && arrayMethodNames.has(property as ArrayMethodName);\n}\n\nexport async function callArrayMethod(\n value: SandboxArray,\n methodName: ArrayMethodName,\n args: readonly SandboxValue[],\n options: ArrayMethodOptions,\n stack: readonly string[] = []\n): Promise<SandboxValue> {\n if (isMutatingArrayMethod(methodName)) {\n assertCollectionMutable(value);\n }\n\n if (isCallbackArrayMethod(methodName)) {\n let callbackState = activeArrayCallbacks.get(value);\n if (callbackState === undefined) {\n callbackState = { depth: 0, leave: enterRunningState(value) };\n activeArrayCallbacks.set(value, callbackState);\n }\n callbackState.depth += 1;\n try {\n return await callArrayMethodUnlocked(value, methodName, args, options, stack);\n } finally {\n callbackState.depth -= 1;\n if (callbackState.depth === 0) {\n activeArrayCallbacks.delete(value);\n callbackState.leave();\n }\n }\n }\n\n return callArrayMethodUnlocked(value, methodName, args, options, stack);\n}\n\nasync function callArrayMethodUnlocked(\n value: SandboxArray,\n methodName: ArrayMethodName,\n args: readonly SandboxValue[],\n options: ArrayMethodOptions,\n stack: readonly string[]\n): Promise<SandboxValue> {\n switch (methodName) {\n case \"map\":\n return budgetProducedValue(\n await mapArray(value, getRequiredCallback(methodName, args[0]), options, stack, args[1]),\n options.budget\n );\n case \"filter\":\n return budgetProducedValue(\n await filterArray(value, getRequiredCallback(methodName, args[0]), options, stack, args[1]),\n options.budget\n );\n case \"find\":\n return budgetProducedValue(\n await findInArray(value, getRequiredCallback(methodName, args[0]), options, stack, args[1]),\n options.budget\n );\n case \"findIndex\":\n return await findIndexInArray(\n value,\n getRequiredCallback(methodName, args[0]),\n options,\n stack,\n args[1]\n );\n case \"findLast\":\n return budgetProducedValue(\n await findLastInArray(\n value,\n getRequiredCallback(methodName, args[0]),\n options,\n stack,\n args[1]\n ),\n options.budget\n );\n case \"findLastIndex\":\n return await findLastIndexInArray(\n value,\n getRequiredCallback(methodName, args[0]),\n options,\n stack,\n args[1]\n );\n case \"some\":\n return await someInArray(\n value,\n getRequiredCallback(methodName, args[0]),\n options,\n stack,\n args[1]\n );\n case \"every\":\n return await everyInArray(\n value,\n getRequiredCallback(methodName, args[0]),\n options,\n stack,\n args[1]\n );\n case \"reduce\":\n return budgetProducedValue(\n await reduceArray(\n value,\n getRequiredCallback(methodName, args[0]),\n args.length > 1,\n args[1],\n options,\n stack\n ),\n options.budget\n );\n case \"reduceRight\":\n return budgetProducedValue(\n await reduceRightArray(\n value,\n getRequiredCallback(methodName, args[0]),\n args.length > 1,\n args[1],\n options,\n stack\n ),\n options.budget\n );\n case \"forEach\":\n await forEachArray(value, getRequiredCallback(methodName, args[0]), options, stack, args[1]);\n return undefined;\n case \"flatMap\":\n return budgetProducedValue(\n await flatMapArray(\n value,\n getRequiredCallback(methodName, args[0]),\n options,\n stack,\n args[1]\n ),\n options.budget\n );\n case \"flat\":\n return budgetProducedValue(\n flattenArray(value, toIntegerOrInfinity(args[0] ?? 1), options.budget),\n options.budget\n );\n case \"includes\":\n return Reflect.apply(Array.prototype.includes, value, [...args]);\n case \"indexOf\":\n return Reflect.apply(Array.prototype.indexOf, value, [...args]);\n case \"lastIndexOf\":\n return Reflect.apply(Array.prototype.lastIndexOf, value, [...args]);\n case \"join\":\n return options.budget.allocateString(Reflect.apply(Array.prototype.join, value, [...args]));\n case \"slice\":\n return budgetProducedValue(\n Reflect.apply(Array.prototype.slice, value, [...args]),\n options.budget\n );\n case \"concat\":\n return budgetProducedValue(\n Reflect.apply(Array.prototype.concat, value, [...args]),\n options.budget\n );\n case \"splice\": {\n const removed = Reflect.apply(Array.prototype.splice, value, [...args]);\n budgetProducedValue(removed, options.budget);\n budgetProducedValue(value, options.budget);\n return removed;\n }\n case \"fill\":\n Reflect.apply(Array.prototype.fill, value, [...args]);\n budgetProducedValue(value, options.budget);\n return value;\n case \"copyWithin\":\n Reflect.apply(Array.prototype.copyWithin, value, [...args]);\n budgetProducedValue(value, options.budget);\n return value;\n case \"at\":\n return budgetProducedValue(\n Reflect.apply(Array.prototype.at, value, [...args]),\n options.budget\n );\n case \"sort\":\n if (args[0] === undefined) {\n value.sort();\n budgetProducedValue(value, options.budget);\n return value;\n }\n\n await sortArray(value, getRequiredCallback(methodName, args[0]), options, stack);\n budgetProducedValue(value, options.budget);\n return value;\n case \"reverse\":\n value.reverse();\n budgetProducedValue(value, options.budget);\n return value;\n case \"toSorted\": {\n const result = Array.from(value) as SandboxArray;\n if (args[0] === undefined) {\n result.sort();\n } else {\n await sortArray(result, getRequiredCallback(methodName, args[0]), options, stack);\n }\n\n return budgetProducedValue(result, options.budget);\n }\n case \"toReversed\": {\n const result = Array.from(value) as SandboxArray;\n result.reverse();\n return budgetProducedValue(result, options.budget);\n }\n case \"toSpliced\": {\n const result = Array.from(value) as SandboxArray;\n Reflect.apply(Array.prototype.splice, result, [...args]);\n return budgetProducedValue(result, options.budget);\n }\n case \"with\": {\n const length = value.length;\n const index = toIntegerOrInfinity(args[0]);\n const actualIndex = index < 0 ? length + index : index;\n\n if (actualIndex < 0 || actualIndex >= length) {\n throw new RangeError(\"Invalid index\");\n }\n\n options.budget.allocateArrayLength(length);\n const result: SandboxArray = [];\n for (let position = 0; position < length; position += 1) {\n options.budget.visitNode();\n result[position] =\n position === actualIndex\n ? args[1]\n : Object.hasOwn(value, position)\n ? value[position]\n : undefined;\n }\n\n return budgetProducedValue(result, options.budget);\n }\n case \"push\": {\n appendArrayValues(value, args);\n const nextLength = value.length;\n budgetProducedValue(value, options.budget);\n return nextLength;\n }\n case \"pop\":\n return budgetProducedValue(value.pop(), options.budget);\n case \"shift\":\n return budgetProducedValue(value.shift(), options.budget);\n case \"unshift\": {\n prependArrayValues(value, args);\n const nextLength = value.length;\n budgetProducedValue(value, options.budget);\n return nextLength;\n }\n }\n}\n\nfunction appendArrayValues(target: SandboxArray, values: readonly SandboxValue[]): void {\n for (const value of values) {\n target.push(value);\n }\n}\n\nfunction prependArrayValues(target: SandboxArray, values: readonly SandboxValue[]): void {\n const originalLength = target.length;\n target.length = originalLength + values.length;\n\n for (let index = originalLength - 1; index >= 0; index -= 1) {\n const targetIndex = index + values.length;\n if (Object.hasOwn(target, index)) {\n target[targetIndex] = target[index];\n } else {\n delete target[targetIndex];\n }\n }\n\n for (let index = 0; index < values.length; index += 1) {\n target[index] = values[index];\n }\n}\n\nfunction isCallbackArrayMethod(methodName: ArrayMethodName): boolean {\n return (\n methodName === \"map\" ||\n methodName === \"filter\" ||\n methodName === \"find\" ||\n methodName === \"findIndex\" ||\n methodName === \"findLast\" ||\n methodName === \"findLastIndex\" ||\n methodName === \"some\" ||\n methodName === \"every\" ||\n methodName === \"reduce\" ||\n methodName === \"reduceRight\" ||\n methodName === \"forEach\" ||\n methodName === \"flatMap\" ||\n methodName === \"sort\"\n );\n}\n\nfunction isMutatingArrayMethod(methodName: ArrayMethodName): boolean {\n return (\n methodName === \"splice\" ||\n methodName === \"fill\" ||\n methodName === \"copyWithin\" ||\n methodName === \"sort\" ||\n methodName === \"reverse\" ||\n methodName === \"push\" ||\n methodName === \"pop\" ||\n methodName === \"shift\" ||\n methodName === \"unshift\"\n );\n}\n\nfunction getRequiredCallback(\n methodName: ArrayMethodName,\n value: SandboxValue | undefined\n): SandboxClosure {\n if (!isSandboxClosure(value)) {\n throw new TypeError(`Array#${methodName} requires a sandbox closure callback.`);\n }\n\n return value;\n}\n\nasync function mapArray(\n value: SandboxArray,\n callback: SandboxClosure,\n options: ArrayMethodOptions,\n stack: readonly string[],\n thisValue: SandboxValue\n): Promise<SandboxArray> {\n const length = value.length;\n const result = new Array(length) as SandboxArray;\n options.budget.setRetainedValues(result, () => [result]);\n\n try {\n for (let index = 0; index < length; index += 1) {\n options.budget.visitNode();\n if (!(index in value)) {\n continue;\n }\n\n result[index] = await callArrayCallback(\n callback,\n value[index],\n index,\n value,\n options,\n stack,\n thisValue\n );\n }\n\n return result;\n } finally {\n options.budget.setRetainedValues(result, undefined);\n }\n}\n\nasync function filterArray(\n value: SandboxArray,\n callback: SandboxClosure,\n options: ArrayMethodOptions,\n stack: readonly string[],\n thisValue: SandboxValue\n): Promise<SandboxArray> {\n const length = value.length;\n const result: SandboxArray = [];\n options.budget.setRetainedValues(result, () => [result]);\n\n try {\n for (let index = 0; index < length; index += 1) {\n options.budget.visitNode();\n if (!(index in value)) {\n continue;\n }\n\n const entry = value[index];\n if (await callArrayCallback(callback, entry, index, value, options, stack, thisValue)) {\n result.push(entry);\n }\n }\n\n return result;\n } finally {\n options.budget.setRetainedValues(result, undefined);\n }\n}\n\nasync function findInArray(\n value: SandboxArray,\n callback: SandboxClosure,\n options: ArrayMethodOptions,\n stack: readonly string[],\n thisValue: SandboxValue\n): Promise<SandboxValue> {\n const length = value.length;\n\n for (let index = 0; index < length; index += 1) {\n options.budget.visitNode();\n const entry = index in value ? value[index] : undefined;\n if (await callArrayCallback(callback, entry, index, value, options, stack, thisValue)) {\n return entry;\n }\n }\n\n return undefined;\n}\n\nasync function findIndexInArray(\n value: SandboxArray,\n callback: SandboxClosure,\n options: ArrayMethodOptions,\n stack: readonly string[],\n thisValue: SandboxValue\n): Promise<number> {\n const length = value.length;\n\n for (let index = 0; index < length; index += 1) {\n options.budget.visitNode();\n const entry = index in value ? value[index] : undefined;\n if (await callArrayCallback(callback, entry, index, value, options, stack, thisValue)) {\n return index;\n }\n }\n\n return -1;\n}\n\nasync function findLastInArray(\n value: SandboxArray,\n callback: SandboxClosure,\n options: ArrayMethodOptions,\n stack: readonly string[],\n thisValue: SandboxValue\n): Promise<SandboxValue> {\n const length = value.length;\n\n for (let index = length - 1; index >= 0; index -= 1) {\n options.budget.visitNode();\n const entry = index in value ? value[index] : undefined;\n if (await callArrayCallback(callback, entry, index, value, options, stack, thisValue)) {\n return entry;\n }\n }\n\n return undefined;\n}\n\nasync function findLastIndexInArray(\n value: SandboxArray,\n callback: SandboxClosure,\n options: ArrayMethodOptions,\n stack: readonly string[],\n thisValue: SandboxValue\n): Promise<number> {\n const length = value.length;\n\n for (let index = length - 1; index >= 0; index -= 1) {\n options.budget.visitNode();\n const entry = index in value ? value[index] : undefined;\n if (await callArrayCallback(callback, entry, index, value, options, stack, thisValue)) {\n return index;\n }\n }\n\n return -1;\n}\n\nasync function someInArray(\n value: SandboxArray,\n callback: SandboxClosure,\n options: ArrayMethodOptions,\n stack: readonly string[],\n thisValue: SandboxValue\n): Promise<boolean> {\n const length = value.length;\n\n for (let index = 0; index < length; index += 1) {\n options.budget.visitNode();\n if (!(index in value)) {\n continue;\n }\n\n if (await callArrayCallback(callback, value[index], index, value, options, stack, thisValue)) {\n return true;\n }\n }\n\n return false;\n}\n\nasync function everyInArray(\n value: SandboxArray,\n callback: SandboxClosure,\n options: ArrayMethodOptions,\n stack: readonly string[],\n thisValue: SandboxValue\n): Promise<boolean> {\n const length = value.length;\n\n for (let index = 0; index < length; index += 1) {\n options.budget.visitNode();\n if (!(index in value)) {\n continue;\n }\n\n if (\n !(await callArrayCallback(callback, value[index], index, value, options, stack, thisValue))\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nasync function reduceArray(\n value: SandboxArray,\n callback: SandboxClosure,\n hasInitialValue: boolean,\n initialValue: SandboxValue | undefined,\n options: ArrayMethodOptions,\n stack: readonly string[]\n): Promise<SandboxValue> {\n const length = value.length;\n\n if (hasInitialValue) {\n return reduceFromLeft(value, callback, initialValue, 0, length, options, stack);\n }\n\n const start = findNextDefinedIndex(value, 0, 1, length, options.budget);\n if (start < 0) {\n throw new TypeError(\"Reduce of empty array with no initial value.\");\n }\n\n return reduceFromLeft(value, callback, value[start], start + 1, length, options, stack);\n}\n\nasync function reduceRightArray(\n value: SandboxArray,\n callback: SandboxClosure,\n hasInitialValue: boolean,\n initialValue: SandboxValue | undefined,\n options: ArrayMethodOptions,\n stack: readonly string[]\n): Promise<SandboxValue> {\n const length = value.length;\n\n if (hasInitialValue) {\n return reduceFromRight(value, callback, initialValue, length - 1, length, options, stack);\n }\n\n const start = findNextDefinedIndex(value, length - 1, -1, length, options.budget);\n if (start < 0) {\n throw new TypeError(\"Reduce of empty array with no initial value.\");\n }\n\n return reduceFromRight(value, callback, value[start], start - 1, length, options, stack);\n}\n\nasync function reduceFromLeft(\n value: SandboxArray,\n callback: SandboxClosure,\n accumulator: SandboxValue,\n startIndex: number,\n length: number,\n options: ArrayMethodOptions,\n stack: readonly string[]\n): Promise<SandboxValue> {\n let current = accumulator;\n const retainedAccumulator = {};\n options.budget.setRetainedValues(retainedAccumulator, () => [current]);\n\n try {\n for (let index = startIndex; index < length; index += 1) {\n options.budget.visitNode();\n if (!(index in value)) {\n continue;\n }\n\n current = await options.callClosure(callback, [current, value[index], index, value], stack);\n }\n\n return current;\n } finally {\n options.budget.setRetainedValues(retainedAccumulator, undefined);\n }\n}\n\nasync function reduceFromRight(\n value: SandboxArray,\n callback: SandboxClosure,\n accumulator: SandboxValue,\n startIndex: number,\n length: number,\n options: ArrayMethodOptions,\n stack: readonly string[]\n): Promise<SandboxValue> {\n let current = accumulator;\n const retainedAccumulator = {};\n options.budget.setRetainedValues(retainedAccumulator, () => [current]);\n\n try {\n for (let index = Math.min(startIndex, length - 1); index >= 0; index -= 1) {\n options.budget.visitNode();\n if (!(index in value)) {\n continue;\n }\n\n current = await options.callClosure(callback, [current, value[index], index, value], stack);\n }\n\n return current;\n } finally {\n options.budget.setRetainedValues(retainedAccumulator, undefined);\n }\n}\n\nasync function forEachArray(\n value: SandboxArray,\n callback: SandboxClosure,\n options: ArrayMethodOptions,\n stack: readonly string[],\n thisValue: SandboxValue\n): Promise<void> {\n const length = value.length;\n\n for (let index = 0; index < length; index += 1) {\n options.budget.visitNode();\n if (!(index in value)) {\n continue;\n }\n\n await callArrayCallback(callback, value[index], index, value, options, stack, thisValue);\n }\n}\n\nasync function flatMapArray(\n value: SandboxArray,\n callback: SandboxClosure,\n options: ArrayMethodOptions,\n stack: readonly string[],\n thisValue: SandboxValue\n): Promise<SandboxArray> {\n const length = value.length;\n const result: SandboxArray = [];\n options.budget.setRetainedValues(result, () => [result]);\n\n try {\n for (let index = 0; index < length; index += 1) {\n options.budget.visitNode();\n if (!(index in value)) {\n continue;\n }\n\n const mapped = await callArrayCallback(\n callback,\n value[index],\n index,\n value,\n options,\n stack,\n thisValue\n );\n if (Array.isArray(mapped)) {\n for (let mappedIndex = 0; mappedIndex < mapped.length; mappedIndex += 1) {\n options.budget.visitNode();\n if (!(mappedIndex in mapped)) {\n continue;\n }\n\n result.push(mapped[mappedIndex]);\n options.budget.allocateArrayLength(result.length);\n }\n\n continue;\n }\n\n result.push(mapped);\n options.budget.allocateArrayLength(result.length);\n }\n\n return result;\n } finally {\n options.budget.setRetainedValues(result, undefined);\n }\n}\n\nfunction flattenArray(value: SandboxArray, depth: number, budget: Budget): SandboxArray {\n const result: SandboxArray = [];\n appendFlattenedEntries(value, depth, result, budget);\n return result;\n}\n\nfunction appendFlattenedEntries(\n value: SandboxArray,\n depth: number,\n result: SandboxArray,\n budget: Budget\n): void {\n for (let index = 0; index < value.length; index += 1) {\n if (!(index in value)) {\n continue;\n }\n\n const entry = value[index];\n if (depth > 0 && Array.isArray(entry)) {\n appendFlattenedEntries(entry, depth - 1, result, budget);\n continue;\n }\n\n result.push(entry);\n budget.allocateArrayLength(result.length);\n }\n}\n\nasync function sortArray(\n value: SandboxArray,\n comparator: SandboxClosure,\n options: ArrayMethodOptions,\n stack: readonly string[]\n): Promise<void> {\n const length = value.length;\n const definedValues: SandboxValue[] = [];\n let undefinedCount = 0;\n let currentEntry: SandboxValue;\n options.budget.setRetainedValues(definedValues, () => [definedValues, currentEntry]);\n\n try {\n for (let index = 0; index < length; index += 1) {\n options.budget.visitNode();\n if (!(index in value)) {\n continue;\n }\n\n const entry = value[index];\n if (entry === undefined) {\n undefinedCount += 1;\n continue;\n }\n\n definedValues.push(entry);\n }\n\n for (let index = 1; index < definedValues.length; index += 1) {\n currentEntry = definedValues[index];\n let cursor = index - 1;\n\n while (\n cursor >= 0 &&\n (await compareEntries(definedValues[cursor], currentEntry, comparator, options, stack)) > 0\n ) {\n definedValues[cursor + 1] = definedValues[cursor];\n cursor -= 1;\n }\n\n definedValues[cursor + 1] = currentEntry;\n }\n currentEntry = undefined;\n\n for (let index = 0; index < definedValues.length; index += 1) {\n value[index] = definedValues[index];\n }\n\n for (let index = 0; index < undefinedCount; index += 1) {\n value[definedValues.length + index] = undefined;\n }\n\n for (let index = definedValues.length + undefinedCount; index < length; index += 1) {\n options.budget.visitNode();\n delete value[index];\n }\n } finally {\n options.budget.setRetainedValues(definedValues, undefined);\n }\n}\n\nasync function compareEntries(\n left: SandboxValue,\n right: SandboxValue,\n comparator: SandboxClosure,\n options: ArrayMethodOptions,\n stack: readonly string[]\n): Promise<number> {\n options.budget.visitNode();\n const result = Number(await options.callClosure(comparator, [left, right], stack));\n return Number.isNaN(result) ? 0 : result;\n}\n\nasync function callArrayCallback(\n callback: SandboxClosure,\n value: SandboxValue,\n index: number,\n array: SandboxArray,\n options: ArrayMethodOptions,\n stack: readonly string[],\n thisValue: SandboxValue\n): Promise<SandboxValue> {\n return options.callClosure(callback, [value, index, array], stack, thisValue);\n}\n\nfunction findNextDefinedIndex(\n value: SandboxArray,\n startIndex: number,\n direction: 1 | -1,\n length: number,\n budget: Budget\n): number {\n for (let index = startIndex; direction > 0 ? index < length : index >= 0; index += direction) {\n budget.visitNode();\n if (index in value) {\n return index;\n }\n }\n\n return -1;\n}\n\nfunction budgetProducedValue(value: SandboxValue, budget: Budget): SandboxValue {\n allocateProducedValue(value, budget, new WeakSet());\n return value;\n}\n\nfunction allocateProducedValue(value: SandboxValue, budget: Budget, seen: WeakSet<object>): void {\n if (typeof value === \"string\") {\n budget.allocateString(value);\n return;\n }\n\n if (Array.isArray(value)) {\n budget.allocateArrayLength(value.length);\n\n if (seen.has(value)) {\n return;\n }\n\n seen.add(value);\n for (const entry of value) {\n allocateProducedValue(entry, budget, seen);\n }\n\n return;\n }\n\n if (isSandboxMap(value)) {\n budget.allocateCollectionEntries(value.entries.size);\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n for (const [key, entry] of value.entries) {\n allocateProducedValue(key, budget, seen);\n allocateProducedValue(entry, budget, seen);\n }\n return;\n }\n\n if (isSandboxSet(value)) {\n budget.allocateCollectionEntries(value.values.size);\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n for (const entry of value.values) {\n allocateProducedValue(entry, budget, seen);\n }\n return;\n }\n\n if (\n typeof value !== \"object\" ||\n value === null ||\n isSandboxClosure(value) ||\n isSandboxMap(value) ||\n isSandboxSet(value) ||\n isSandboxPromise(value)\n ) {\n return;\n }\n\n if (seen.has(value)) {\n return;\n }\n\n seen.add(value);\n for (const entry of Object.values(value)) {\n allocateProducedValue(entry, budget, seen);\n }\n}\n\nfunction toIntegerOrInfinity(value: SandboxValue): number {\n const number = Number(value);\n\n if (Number.isNaN(number) || Object.is(number, 0) || Object.is(number, -0)) {\n return 0;\n }\n\n if (!Number.isFinite(number)) {\n return number;\n }\n\n return Math.trunc(number);\n}\n", "import { createSandboxClosure, type SandboxClosure, type SandboxValue } from \"../values.js\";\n\nexport type FunctionMethodOptions = {\n callClosure: (\n closure: SandboxClosure,\n args: readonly SandboxValue[],\n stack: readonly string[],\n thisValue: SandboxValue,\n construct?: boolean\n ) => Promise<SandboxValue> | SandboxValue;\n};\n\ntype FunctionMethodName = \"apply\" | \"bind\" | \"call\";\n\nconst functionMethodNames = new Set<FunctionMethodName>([\"apply\", \"bind\", \"call\"]);\n\nexport function getFunctionMember(\n target: SandboxClosure,\n property: string | number,\n options: FunctionMethodOptions\n): SandboxValue | undefined {\n const propertyValue = target.properties?.[String(property)];\n if (propertyValue !== undefined || Object.hasOwn(target.properties ?? {}, String(property))) {\n return propertyValue;\n }\n\n if (property === \"length\") {\n return target.length;\n }\n\n if (!isFunctionMethodName(property)) {\n return undefined;\n }\n\n return createSandboxClosure({\n sandbox: true,\n name: `Function#${property}`,\n call: (args, context) =>\n callFunctionMethod(target, property, args, options, context?.stack ?? [])\n });\n}\n\nfunction isFunctionMethodName(property: string | number): property is FunctionMethodName {\n return typeof property === \"string\" && functionMethodNames.has(property as FunctionMethodName);\n}\n\nfunction callFunctionMethod(\n target: SandboxClosure,\n methodName: FunctionMethodName,\n args: readonly SandboxValue[],\n options: FunctionMethodOptions,\n stack: readonly string[]\n): Promise<SandboxValue> | SandboxValue {\n const thisValue = args[0];\n\n if (methodName === \"bind\") {\n const boundArgs = args.slice(1);\n return createSandboxClosure({\n sandbox: true,\n name: `bound ${target.name ?? \"\"}`,\n length:\n target.length === undefined ? undefined : Math.max(0, target.length - boundArgs.length),\n boundTarget: target,\n retainedValues: () => [target, thisValue, ...boundArgs],\n call: (callArgs, context) =>\n options.callClosure(target, [...boundArgs, ...callArgs], context?.stack ?? [], thisValue),\n ...(target.construct === undefined\n ? {}\n : {\n construct: (callArgs, context) =>\n options.callClosure(\n target,\n [...boundArgs, ...callArgs],\n context?.stack ?? [],\n undefined,\n true\n )\n })\n });\n }\n\n if (methodName === \"call\") {\n return options.callClosure(target, args.slice(1), stack, thisValue);\n }\n\n const applyArgs = args[1];\n if (applyArgs === null || applyArgs === undefined) {\n return options.callClosure(target, [], stack, thisValue);\n }\n if (!Array.isArray(applyArgs)) {\n throw new TypeError(\"Function#apply requires an array or nullish arguments value.\");\n }\n\n return options.callClosure(target, applyArgs, stack, thisValue);\n}\n", "import type { Budget } from \"../budget.js\";\nimport { enterRunningState } from \"../running-state.js\";\nimport type { SandboxValue } from \"../values.js\";\n\ntype CallbackCursor = {\n budget: Budget;\n pending: Set<SandboxValue>;\n};\n\nconst activeCallbacks = new WeakMap<\n object,\n { cursors: Set<CallbackCursor>; leaveRunning: () => void }\n>();\n\nexport function enterKeyedCollectionCallback(\n target: object,\n keys: Iterable<SandboxValue>,\n budget: Budget\n): { next(): IteratorResult<SandboxValue>; leave(): void } {\n let state = activeCallbacks.get(target);\n if (state === undefined) {\n state = { cursors: new Set(), leaveRunning: enterRunningState(target) };\n activeCallbacks.set(target, state);\n }\n const cursor: CallbackCursor = { budget, pending: new Set() };\n state.cursors.add(cursor);\n const leave = () => {\n if (!state.cursors.delete(cursor)) return;\n cursor.pending.clear();\n budget.setRetainedDataUsage(cursor, 0);\n budget.setRetainedValues(cursor, undefined);\n if (state.cursors.size === 0) {\n activeCallbacks.delete(target);\n state.leaveRunning();\n }\n };\n try {\n budget.setRetainedDataUsage(cursor, 1);\n budget.setRetainedValues(cursor, () => cursor.pending);\n for (const key of keys) updatePendingKeys(cursor, \"add\", key);\n } catch (error) {\n leave();\n throw error;\n }\n return {\n next: () => {\n budget.visitNode();\n for (const key of cursor.pending) {\n cursor.pending.delete(key);\n budget.setRetainedDataUsage(cursor, 1 + cursor.pending.size);\n return { done: false, value: key };\n }\n return { done: true, value: undefined };\n },\n leave\n };\n}\n\nexport function updateKeyedCollectionCallbacks(\n target: object,\n mutation: \"add\" | \"delete\" | \"clear\",\n key?: SandboxValue\n): void {\n const state = activeCallbacks.get(target);\n if (state === undefined) return;\n for (const cursor of state.cursors) updatePendingKeys(cursor, mutation, key);\n}\n\nfunction updatePendingKeys(\n cursor: CallbackCursor,\n mutation: \"add\" | \"delete\" | \"clear\",\n key: SandboxValue\n): void {\n const { budget, pending } = cursor;\n budget.visitNode();\n if (mutation === \"add\") {\n const nextSize = pending.has(key) ? pending.size : pending.size + 1;\n budget.allocateCollectionEntries(nextSize);\n budget.setRetainedDataUsage(cursor, 1 + nextSize);\n pending.add(key);\n } else {\n if (mutation === \"delete\") pending.delete(key);\n else pending.clear();\n budget.setRetainedDataUsage(cursor, 1 + pending.size);\n }\n}\n", "import type { Budget } from \"../budget.js\";\nimport {\n allocateProducedSandboxValue,\n createSandboxClosure,\n isSandboxClosure,\n type SandboxClosure,\n type SandboxMap,\n type SandboxValue\n} from \"../values.js\";\nimport { assertCollectionMutable } from \"../running-state.js\";\nimport {\n enterKeyedCollectionCallback,\n updateKeyedCollectionCallbacks\n} from \"./collection-callback.js\";\n\nexport type MapMethodName =\n | \"get\"\n | \"set\"\n | \"has\"\n | \"delete\"\n | \"clear\"\n | \"forEach\"\n | \"keys\"\n | \"values\"\n | \"entries\";\n\nexport type MapMethodOptions = {\n budget: Budget;\n callClosure: (\n closure: SandboxClosure,\n args: readonly SandboxValue[],\n stack: readonly string[],\n thisValue?: SandboxValue\n ) => Promise<SandboxValue>;\n};\n\nconst mapMethodNames = new Set<MapMethodName>([\n \"get\",\n \"set\",\n \"has\",\n \"delete\",\n \"clear\",\n \"forEach\",\n \"keys\",\n \"values\",\n \"entries\"\n]);\n\nexport function isMapMethodName(value: string | number): value is MapMethodName {\n return typeof value === \"string\" && mapMethodNames.has(value as MapMethodName);\n}\n\nexport function getMapMember(\n target: SandboxMap,\n property: string | number,\n options: MapMethodOptions\n): SandboxValue | undefined {\n if (property === \"size\") {\n return target.entries.size;\n }\n\n if (!isMapMethodName(property)) {\n return undefined;\n }\n\n return createSandboxClosure({\n sandbox: true,\n call: (args, context) => callMapMethod(target, property, args, options, context?.stack ?? []),\n name: property\n });\n}\n\nexport async function callMapMethod(\n target: SandboxMap,\n methodName: MapMethodName,\n args: readonly SandboxValue[],\n options: MapMethodOptions,\n stack: readonly string[] = []\n): Promise<SandboxValue> {\n switch (methodName) {\n case \"get\":\n return target.entries.get(args[0]);\n case \"set\": {\n assertCollectionMutable(target);\n const exists = target.entries.has(args[0]);\n const nextSize = exists ? target.entries.size : target.entries.size + 1;\n options.budget.allocateCollectionEntries(nextSize);\n if (!exists) updateKeyedCollectionCallbacks(target, \"add\", args[0]);\n target.entries.set(args[0], args[1]);\n return target;\n }\n case \"has\":\n return target.entries.has(args[0]);\n case \"delete\": {\n assertCollectionMutable(target);\n const deleted = target.entries.delete(args[0]);\n if (deleted) updateKeyedCollectionCallbacks(target, \"delete\", args[0]);\n return deleted;\n }\n case \"clear\":\n assertCollectionMutable(target);\n target.entries.clear();\n updateKeyedCollectionCallbacks(target, \"clear\");\n return undefined;\n case \"forEach\": {\n const callback = args[0];\n if (!isSandboxClosure(callback)) {\n throw new TypeError(\"Map.prototype.forEach requires a callback function.\");\n }\n const cursor = enterKeyedCollectionCallback(target, target.entries.keys(), options.budget);\n try {\n for (let entry = cursor.next(); !entry.done; entry = cursor.next()) {\n const key = entry.value;\n const value = target.entries.get(key);\n await options.callClosure(callback, [value, key, target], stack, args[1]);\n }\n } finally {\n cursor.leave();\n }\n return undefined;\n }\n case \"keys\":\n return allocateProducedSandboxValue([...target.entries.keys()], options.budget);\n case \"values\":\n return allocateProducedSandboxValue([...target.entries.values()], options.budget);\n case \"entries\":\n return allocateProducedSandboxValue(\n [...target.entries].map(([key, value]) => [key, value]),\n options.budget\n );\n }\n}\n", "import { Budget } from \"../budget.js\";\nimport { createSandboxClosure, type SandboxValue } from \"../values.js\";\n\nexport type NumberMethodName = \"toExponential\" | \"toFixed\" | \"toPrecision\" | \"toString\";\n\nconst numberMethodNames = new Set<NumberMethodName>([\n \"toExponential\",\n \"toFixed\",\n \"toPrecision\",\n \"toString\"\n]);\n\nexport function getNumberMember(\n value: number,\n property: string | number,\n budget: Budget\n): SandboxValue | undefined {\n if (!isNumberMethodName(property)) {\n return undefined;\n }\n\n return createSandboxClosure({\n sandbox: true,\n name: `Number#${property}`,\n call: (args) => callNumberMethod(value, property, args, budget)\n });\n}\n\nexport function isNumberMethodName(property: string | number): property is NumberMethodName {\n return typeof property === \"string\" && numberMethodNames.has(property as NumberMethodName);\n}\n\nexport function callNumberMethod(\n value: number,\n methodName: NumberMethodName,\n args: readonly SandboxValue[],\n budget: Budget\n): string {\n return budget.allocateString(callNativeNumberMethod(value, methodName, args));\n}\n\nfunction callNativeNumberMethod(\n value: number,\n methodName: NumberMethodName,\n args: readonly SandboxValue[]\n): string {\n switch (methodName) {\n case \"toString\":\n return value.toString(asValidatedRadix(args[0]));\n case \"toExponential\":\n return args[0] === undefined\n ? value.toExponential()\n : value.toExponential(asValidatedFractionDigits(args[0], methodName));\n case \"toFixed\":\n return value.toFixed(asValidatedFractionDigits(args[0], methodName));\n case \"toPrecision\":\n return args[0] === undefined\n ? value.toPrecision()\n : value.toPrecision(asValidatedPrecision(args[0]));\n }\n}\n\nfunction asValidatedRadix(value: SandboxValue | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n const radix = toIntegerOrInfinity(value);\n if (radix < 2 || radix > 36) {\n throw new RangeError(\"Number#toString radix must be between 2 and 36.\");\n }\n\n return radix;\n}\n\nfunction asValidatedFractionDigits(\n value: SandboxValue | undefined,\n methodName: \"toExponential\" | \"toFixed\"\n): number {\n const digits = toIntegerOrInfinity(value);\n if (digits < 0 || digits > 100) {\n throw new RangeError(`Number#${methodName} digits must be between 0 and 100.`);\n }\n\n return digits;\n}\n\nfunction asValidatedPrecision(value: SandboxValue | undefined): number {\n const precision = toIntegerOrInfinity(value);\n if (precision < 1 || precision > 100) {\n throw new RangeError(\"Number#toPrecision precision must be between 1 and 100.\");\n }\n\n return precision;\n}\n\nfunction toIntegerOrInfinity(value: SandboxValue): number {\n const number = Number(value);\n\n if (Number.isNaN(number) || Object.is(number, 0) || Object.is(number, -0)) {\n return 0;\n }\n\n if (!Number.isFinite(number)) {\n return number;\n }\n\n return Math.trunc(number);\n}\n", "import { getSandboxIterator } from \"../iteration.js\";\nimport {\n allocateProducedSandboxValue,\n createSandboxClosure,\n type SandboxGenerator,\n type SandboxValue\n} from \"../values.js\";\nimport type { Budget } from \"../budget.js\";\n\nconst generatorMethodNames = new Set([\"next\", \"return\", \"throw\"] as const);\ntype GeneratorMethodName = \"next\" | \"return\" | \"throw\";\n\nexport function getGeneratorMember(\n target: SandboxGenerator,\n property: string | number,\n budget: Budget\n): SandboxValue | undefined {\n if (typeof property !== \"string\" || !generatorMethodNames.has(property as GeneratorMethodName)) {\n return undefined;\n }\n\n return createSandboxClosure({\n sandbox: true,\n name: property,\n call: async ([value]) => {\n const iterator = getSandboxIterator(target)!;\n const result = await iterator[property as GeneratorMethodName]!(value);\n return allocateProducedSandboxValue(\n { value: result.value, done: result.done === true },\n budget\n );\n }\n });\n}\n", "import { allocateRegexSteps } from \"../budget.js\";\nimport type { CharacterClassItem, RegexFlags, RegexNode, RegexPattern } from \"./parse.js\";\n\nexport type RegexMatch = {\n index: number;\n text: string;\n captures: (string | undefined)[];\n};\n\ntype Capture = { start: number; end: number } | undefined;\ntype MatchState = { position: number; captures: Capture[] };\ntype MatchContext = { input: string; flags: RegexFlags; steps: number };\n\nexport function matchRegex(pattern: RegexPattern, input: string, lastIndex = 0): RegexMatch | null {\n const startIndex = pattern.flags.global ? normalizeLastIndex(lastIndex) : 0;\n return matchRegexFrom(pattern, input, startIndex);\n}\n\nexport function matchRegexFrom(\n pattern: RegexPattern,\n input: string,\n startIndex: number\n): RegexMatch | null {\n if (startIndex > input.length) {\n return null;\n }\n\n for (let attempt = startIndex; attempt <= input.length; attempt += 1) {\n const context: MatchContext = { input, flags: pattern.flags, steps: 0 };\n charge(context);\n const initialState: MatchState = {\n position: attempt,\n captures: new Array<Capture>(pattern.captureCount)\n };\n const result = matchNode(pattern.body, initialState, context).next();\n if (!result.done) {\n return toRegexMatch(input, attempt, result.value);\n }\n }\n\n return null;\n}\n\nfunction* matchNode(\n node: RegexNode,\n state: MatchState,\n context: MatchContext\n): Generator<MatchState> {\n charge(context);\n\n switch (node.type) {\n case \"empty\":\n yield state;\n return;\n case \"literal\":\n if (charactersEqual(context.input[state.position], node.value, context.flags.ignoreCase)) {\n yield { ...state, position: state.position + 1 };\n }\n return;\n case \"dot\":\n if (\n state.position < context.input.length &&\n (context.flags.dotAll || !isLineTerminator(context.input[state.position]))\n ) {\n yield { ...state, position: state.position + 1 };\n }\n return;\n case \"anchor\":\n if (matchesAnchor(node.kind, state.position, context)) {\n yield state;\n }\n return;\n case \"wordBoundary\": {\n const previousWord = state.position > 0 && isWordCharacter(context.input[state.position - 1]);\n const nextWord =\n state.position < context.input.length && isWordCharacter(context.input[state.position]);\n if ((previousWord !== nextWord) !== node.negated) {\n yield state;\n }\n return;\n }\n case \"characterClass\": {\n const character = context.input[state.position];\n if (\n character !== undefined &&\n matchesCharacterClass(character, node.items, node.negated, context.flags.ignoreCase)\n ) {\n yield { ...state, position: state.position + 1 };\n }\n return;\n }\n case \"sequence\":\n yield* matchSequence(node.elements, 0, state, context);\n return;\n case \"alternation\":\n for (const alternative of node.alternatives) {\n yield* matchNode(alternative, cloneState(state), context);\n }\n return;\n case \"group\":\n for (const result of matchNode(node.body, cloneState(state), context)) {\n if (!node.capturing || node.index === undefined) {\n yield result;\n continue;\n }\n const captures = result.captures.slice();\n captures[node.index - 1] = { start: state.position, end: result.position };\n yield { position: result.position, captures };\n }\n return;\n case \"quantifier\":\n yield* matchQuantifier(node, state, context, 0);\n }\n}\n\nfunction* matchSequence(\n elements: RegexNode[],\n index: number,\n state: MatchState,\n context: MatchContext\n): Generator<MatchState> {\n charge(context);\n if (index === elements.length) {\n yield state;\n return;\n }\n\n for (const result of matchNode(elements[index], state, context)) {\n yield* matchSequence(elements, index + 1, result, context);\n }\n}\n\nfunction* matchQuantifier(\n node: Extract<RegexNode, { type: \"quantifier\" }>,\n state: MatchState,\n context: MatchContext,\n count: number\n): Generator<MatchState> {\n charge(context);\n const canRepeat = node.max === undefined || count < node.max;\n\n if (!node.greedy && count >= node.min) {\n yield state;\n }\n\n if (canRepeat) {\n for (const result of matchNode(node.body, clearCaptures(node.body, state), context)) {\n if (result.position === state.position) {\n if (count >= node.min) {\n continue;\n }\n if (count + 1 >= node.min) {\n yield result;\n } else {\n yield* matchQuantifier(node, result, context, count + 1);\n }\n continue;\n }\n yield* matchQuantifier(node, result, context, count + 1);\n }\n }\n\n if (node.greedy && count >= node.min) {\n yield state;\n }\n}\n\nfunction matchesAnchor(kind: \"start\" | \"end\", position: number, context: MatchContext): boolean {\n if (kind === \"start\") {\n return (\n position === 0 ||\n (context.flags.multiline && position > 0 && isLineTerminator(context.input[position - 1]))\n );\n }\n\n return (\n position === context.input.length ||\n (context.flags.multiline &&\n position < context.input.length &&\n isLineTerminator(context.input[position]))\n );\n}\n\nfunction matchesCharacterClass(\n character: string,\n items: CharacterClassItem[],\n negated: boolean,\n ignoreCase: boolean\n): boolean {\n const matched = items.some((item) => matchesCharacterClassItem(character, item, ignoreCase));\n return negated ? !matched : matched;\n}\n\nfunction matchesCharacterClassItem(\n character: string,\n item: CharacterClassItem,\n ignoreCase: boolean\n): boolean {\n if (item.type === \"character\") {\n return charactersEqual(character, item.value, ignoreCase);\n }\n if (item.type === \"range\") {\n const candidate = character.charCodeAt(0);\n const from = item.from.charCodeAt(0);\n const to = item.to.charCodeAt(0);\n if (candidate >= from && candidate <= to) {\n return true;\n }\n if (!ignoreCase) {\n return false;\n }\n\n const foldedCandidate = foldCharacter(character, true).charCodeAt(0);\n const foldedFrom = foldCharacter(item.from, true).charCodeAt(0);\n const foldedTo = foldCharacter(item.to, true).charCodeAt(0);\n return foldedCandidate >= foldedFrom && foldedCandidate <= foldedTo;\n }\n\n const matched =\n item.kind === \"digit\"\n ? isDigit(character)\n : item.kind === \"word\"\n ? isWordCharacter(character)\n : isSpaceCharacter(character);\n return item.negated ? !matched : matched;\n}\n\nfunction toRegexMatch(input: string, start: number, state: MatchState): RegexMatch {\n return {\n index: start,\n text: input.slice(start, state.position),\n captures: state.captures.map((capture) =>\n capture === undefined ? undefined : input.slice(capture.start, capture.end)\n )\n };\n}\n\nfunction cloneState(state: MatchState): MatchState {\n return { position: state.position, captures: state.captures.slice() };\n}\n\nfunction clearCaptures(node: RegexNode, state: MatchState): MatchState {\n const captures = state.captures.slice();\n clearNodeCaptures(node, captures);\n return { position: state.position, captures };\n}\n\nfunction clearNodeCaptures(node: RegexNode, captures: Capture[]): void {\n if (node.type === \"group\") {\n if (node.capturing && node.index !== undefined) {\n captures[node.index - 1] = undefined;\n }\n clearNodeCaptures(node.body, captures);\n return;\n }\n if (node.type === \"sequence\") {\n for (const element of node.elements) {\n clearNodeCaptures(element, captures);\n }\n return;\n }\n if (node.type === \"alternation\") {\n for (const alternative of node.alternatives) {\n clearNodeCaptures(alternative, captures);\n }\n return;\n }\n if (node.type === \"quantifier\") {\n clearNodeCaptures(node.body, captures);\n }\n}\n\nfunction charge(context: MatchContext): void {\n context.steps += 1;\n allocateRegexSteps(context.steps);\n}\n\nfunction normalizeLastIndex(lastIndex: number): number {\n if (!Number.isFinite(lastIndex) || lastIndex <= 0) {\n return 0;\n }\n return Math.floor(lastIndex);\n}\n\nfunction charactersEqual(left: string | undefined, right: string, ignoreCase: boolean): boolean {\n return left !== undefined && foldCharacter(left, ignoreCase) === foldCharacter(right, ignoreCase);\n}\n\nfunction foldCharacter(character: string, ignoreCase: boolean): string {\n if (!ignoreCase) {\n return character;\n }\n\n const folded = character.toUpperCase();\n if (folded.length !== 1) {\n return character;\n }\n if (character.charCodeAt(0) >= 0x80 && folded.charCodeAt(0) < 0x80) {\n return character;\n }\n return folded;\n}\n\nfunction isDigit(character: string): boolean {\n return character >= \"0\" && character <= \"9\";\n}\n\nfunction isWordCharacter(character: string): boolean {\n return (\n isDigit(character) ||\n (character >= \"A\" && character <= \"Z\") ||\n (character >= \"a\" && character <= \"z\") ||\n character === \"_\"\n );\n}\n\nfunction isSpaceCharacter(character: string): boolean {\n return (\n character === \" \" ||\n character === \"\\f\" ||\n character === \"\\n\" ||\n character === \"\\r\" ||\n character === \"\\t\" ||\n character === \"\\v\" ||\n character === \"\\u00a0\" ||\n character === \"\\u1680\" ||\n (character >= \"\\u2000\" && character <= \"\\u200a\") ||\n character === \"\\u2028\" ||\n character === \"\\u2029\" ||\n character === \"\\u202f\" ||\n character === \"\\u205f\" ||\n character === \"\\u3000\" ||\n character === \"\\ufeff\"\n );\n}\n\nfunction isLineTerminator(character: string): boolean {\n return (\n character === \"\\n\" || character === \"\\r\" || character === \"\\u2028\" || character === \"\\u2029\"\n );\n}\n", "import {\n createSandboxClosure,\n getSandboxRegexPattern,\n type SandboxRegex,\n type SandboxValue\n} from \"../values.js\";\nimport { matchRegex, type RegexMatch } from \"../regex/engine.js\";\n\nexport type RegexMethodName = \"exec\" | \"test\";\n\nconst regexMethodNames = new Set<RegexMethodName>([\"exec\", \"test\"]);\n\nexport function isRegexMethodName(property: string | number): property is RegexMethodName {\n return typeof property === \"string\" && regexMethodNames.has(property as RegexMethodName);\n}\n\nexport function getRegexMember(\n target: SandboxRegex,\n property: string | number\n): SandboxValue | undefined {\n if (property === \"source\" || property === \"flags\" || property === \"lastIndex\") {\n return target[property];\n }\n if (!isRegexMethodName(property)) {\n return undefined;\n }\n return createSandboxClosure({\n sandbox: true,\n name: `RegExp#${property}`,\n call: (args) => callRegexMethod(target, property, args)\n });\n}\n\nexport function setRegexMember(\n target: SandboxRegex,\n property: string | number,\n value: SandboxValue\n): void {\n if (property !== \"lastIndex\") {\n throw new TypeError(`RegExp#${String(property)} is not writable.`);\n }\n target.lastIndex = Number(value);\n}\n\nexport function callRegexMethod(\n target: SandboxRegex,\n methodName: RegexMethodName,\n args: readonly SandboxValue[]\n): SandboxValue {\n const match = executeRegex(target, String(args[0]));\n return methodName === \"test\" ? match !== null : toMatchArray(match, String(args[0]));\n}\n\nexport function executeRegex(target: SandboxRegex, input: string): RegexMatch | null {\n const pattern = getSandboxRegexPattern(target);\n const match = matchRegex(pattern, input, target.lastIndex);\n if (pattern.flags.global) {\n target.lastIndex = match === null ? 0 : match.index + match.text.length;\n }\n return match;\n}\n\nexport function toMatchArray(match: RegexMatch | null, input: string): SandboxValue {\n if (match === null) {\n return null;\n }\n const result = [match.text, ...match.captures] as SandboxValue[];\n Object.assign(result, { index: match.index, input, groups: undefined });\n return result;\n}\n", "import type { Expression } from \"../../parse.js\";\nimport { Budget } from \"../budget.js\";\nimport { CompileScope } from \"../regex/compile-guard.js\";\nimport {\n createSandboxClosure,\n createSandboxRegex,\n deepCopyFromSandbox,\n isSandboxClosure,\n isSandboxRegex,\n type SandboxClosure,\n type SandboxRegex,\n type SandboxValue\n} from \"../values.js\";\nimport { executeRegex, toMatchArray } from \"./regex.js\";\n\nconst SPLIT_STRING_MESSAGE = \"String#split only supports string separator values.\";\n\ntype StringMethodName =\n | \"at\"\n | \"charAt\"\n | \"charCodeAt\"\n | \"codePointAt\"\n | \"concat\"\n | \"endsWith\"\n | \"includes\"\n | \"indexOf\"\n | \"isWellFormed\"\n | \"lastIndexOf\"\n | \"localeCompare\"\n | \"match\"\n | \"matchAll\"\n | \"normalize\"\n | \"padEnd\"\n | \"padStart\"\n | \"repeat\"\n | \"replace\"\n | \"replaceAll\"\n | \"slice\"\n | \"search\"\n | \"split\"\n | \"startsWith\"\n | \"substr\"\n | \"substring\"\n | \"toLowerCase\"\n | \"toUpperCase\"\n | \"toWellFormed\"\n | \"trim\"\n | \"trimEnd\"\n | \"trimStart\";\n\nconst stringMethodNames = new Set<StringMethodName>([\n \"at\",\n \"charAt\",\n \"charCodeAt\",\n \"codePointAt\",\n \"concat\",\n \"endsWith\",\n \"includes\",\n \"indexOf\",\n \"isWellFormed\",\n \"lastIndexOf\",\n \"localeCompare\",\n \"match\",\n \"matchAll\",\n \"normalize\",\n \"padEnd\",\n \"padStart\",\n \"repeat\",\n \"replace\",\n \"replaceAll\",\n \"slice\",\n \"search\",\n \"split\",\n \"startsWith\",\n \"substr\",\n \"substring\",\n \"toLowerCase\",\n \"toUpperCase\",\n \"toWellFormed\",\n \"trim\",\n \"trimEnd\",\n \"trimStart\"\n]);\n\nexport function getStringMember(\n value: string,\n property: string | number,\n budget: Budget\n): SandboxValue | undefined {\n const index = getStringIndex(property);\n if (index !== undefined) {\n return value[index];\n }\n\n if (property === \"length\") {\n return value.length;\n }\n\n if (!isStringMethodName(property)) {\n return undefined;\n }\n\n return createSandboxClosure({\n sandbox: true,\n name: `String#${property}`,\n ...(property === \"localeCompare\" ? { length: 1 } : {}),\n ...(property === \"isWellFormed\" || property === \"toWellFormed\" ? { length: 0 } : {}),\n call: (args, context) =>\n callStringMethod(\n value,\n property,\n args,\n budget,\n context === undefined\n ? undefined\n : async (closure, closureArgs) =>\n await closure.call(closureArgs, { ...context, thisValue: undefined }),\n context?.compilation\n )\n });\n}\n\nfunction getStringIndex(property: string | number): number | undefined {\n const index = typeof property === \"number\" ? property : Number(property);\n if (!Number.isInteger(index) || index < 0 || String(index) !== String(property)) {\n return undefined;\n }\n\n return index;\n}\n\nexport function isStringMethodName(property: string | number): property is StringMethodName {\n return typeof property === \"string\" && stringMethodNames.has(property as StringMethodName);\n}\n\nexport function validateStringMethodArguments(\n _methodName: StringMethodName,\n _args: readonly Expression[]\n): void {}\n\nexport function callStringMethod(\n value: string,\n methodName: StringMethodName,\n args: readonly SandboxValue[],\n budget: Budget,\n callClosure: (\n closure: SandboxClosure,\n args: readonly SandboxValue[]\n ) => Promise<SandboxValue> = async (closure, closureArgs) => await closure.call(closureArgs),\n parent?: CompileScope\n): SandboxValue | Promise<SandboxValue> {\n if (methodName === \"isWellFormed\") {\n for (let index = 0; index < value.length; index++) {\n const codeUnit = value.charCodeAt(index);\n if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {\n const nextCodeUnit = value.charCodeAt(index + 1);\n if (!(nextCodeUnit >= 0xdc00 && nextCodeUnit <= 0xdfff)) {\n return false;\n }\n index++;\n } else if (codeUnit >= 0xdc00 && codeUnit <= 0xdfff) {\n return false;\n }\n }\n return true;\n }\n\n if (methodName === \"toWellFormed\") {\n budget.allocateString(value);\n let result = \"\";\n let spanStart = 0;\n for (let index = 0; index < value.length; index++) {\n const codeUnit = value.charCodeAt(index);\n if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {\n const nextCodeUnit = value.charCodeAt(index + 1);\n if (nextCodeUnit >= 0xdc00 && nextCodeUnit <= 0xdfff) {\n index++;\n continue;\n }\n } else if (codeUnit < 0xdc00 || codeUnit > 0xdfff) {\n continue;\n }\n result += value.slice(spanStart, index) + \"\\ufffd\";\n spanStart = index + 1;\n }\n return budget.allocateString(result + value.slice(spanStart));\n }\n\n if (methodName === \"replace\" || methodName === \"replaceAll\") {\n return callReplaceLikeMethod(value, methodName, args, budget, callClosure);\n }\n\n const operation = budget.acquireCompileOwner(false, parent?.owner);\n const compilation = new CompileScope(operation.owner);\n try {\n if (methodName === \"split\") {\n return callSplit(value, args, budget, compilation);\n }\n\n if (methodName === \"match\" || methodName === \"matchAll\" || methodName === \"search\") {\n return callMatchLikeMethod(value, methodName, args, compilation);\n }\n\n if (methodName === \"localeCompare\") {\n if (isSandboxClosure(args[0])) {\n throw new TypeError(\"String#localeCompare does not support function comparison values.\");\n }\n const comparison = budget.allocateString(\n String(deepCopyFromSandbox(args[0], { compilation }))\n );\n const locales: string[] = Reflect.apply(Intl.getCanonicalLocales, Intl, [\n deepCopyFromSandbox(args[1], { compilation })\n ]);\n const options = args[2];\n const nativeOptions =\n options === undefined || options === null\n ? options\n : Object.fromEntries(\n [\n \"usage\",\n \"localeMatcher\",\n \"collation\",\n \"numeric\",\n \"caseFirst\",\n \"sensitivity\",\n \"ignorePunctuation\"\n ].map((property) => {\n const descriptor = Object.getOwnPropertyDescriptor(options, property);\n if (descriptor !== undefined && !(\"value\" in descriptor)) {\n throw new TypeError(\"String#localeCompare only supports data option properties.\");\n }\n const option: SandboxValue = descriptor?.value;\n return [\n property,\n option === undefined\n ? undefined\n : property === \"numeric\" || property === \"ignorePunctuation\"\n ? Boolean(option)\n : deepCopyFromSandbox(option, { compilation })\n ];\n })\n );\n return Reflect.apply(String.prototype.localeCompare, value, [\n comparison,\n locales,\n nativeOptions\n ]);\n }\n\n if (args.some(isSandboxClosure)) {\n throw new TypeError(`String#${methodName} does not support function arguments.`);\n }\n\n switch (methodName) {\n case \"at\": {\n const result = value.at(asNumber(args[0]));\n return result === undefined ? undefined : budget.allocateString(result);\n }\n case \"charAt\":\n return budget.allocateString(value.charAt(asNumber(args[0])));\n case \"charCodeAt\":\n return value.charCodeAt(asNumber(args[0]));\n case \"codePointAt\":\n return value.codePointAt(asNumber(args[0]));\n case \"concat\":\n return budget.allocateString(value.concat(...args.map(String)));\n case \"endsWith\":\n return value.endsWith(String(args[0]), asNumberOrUndefined(args[1]));\n case \"includes\":\n return value.includes(String(args[0]), asNumberOrUndefined(args[1]));\n case \"indexOf\":\n return value.indexOf(String(args[0]), asNumberOrUndefined(args[1]));\n case \"lastIndexOf\":\n return value.lastIndexOf(String(args[0]), asNumberOrUndefined(args[1]));\n case \"normalize\":\n return budget.allocateString(value.normalize(asStringOrUndefined(args[0])));\n case \"padEnd\":\n return budget.allocateString(value.padEnd(asNumber(args[0]), asStringOrUndefined(args[1])));\n case \"padStart\":\n return budget.allocateString(\n value.padStart(asNumber(args[0]), asStringOrUndefined(args[1]))\n );\n case \"repeat\":\n return budget.allocateString(value.repeat(asNumber(args[0])));\n case \"slice\":\n return budget.allocateString(\n value.slice(asNumberOrUndefined(args[0]), asNumberOrUndefined(args[1]))\n );\n case \"startsWith\":\n return value.startsWith(String(args[0]), asNumberOrUndefined(args[1]));\n case \"substr\":\n return budget.allocateString(value.substr(asNumber(args[0]), asNumberOrUndefined(args[1])));\n case \"substring\":\n return budget.allocateString(\n value.substring(asNumber(args[0]), asNumberOrUndefined(args[1]))\n );\n case \"toLowerCase\":\n return budget.allocateString(value.toLowerCase());\n case \"toUpperCase\":\n return budget.allocateString(value.toUpperCase());\n case \"trim\":\n return budget.allocateString(value.trim());\n case \"trimEnd\":\n return budget.allocateString(value.trimEnd());\n case \"trimStart\":\n return budget.allocateString(value.trimStart());\n }\n } finally {\n compilation.dispose();\n operation.release();\n }\n}\n\nfunction callReplaceLikeMethod(\n value: string,\n methodName: \"replace\" | \"replaceAll\",\n args: readonly SandboxValue[],\n budget: Budget,\n callClosure: (closure: SandboxClosure, args: readonly SandboxValue[]) => Promise<SandboxValue>\n): string | Promise<string> {\n const search = args[0];\n const replacement = args[1];\n if (\n (!isSandboxRegex(search) && typeof search !== \"string\") ||\n (typeof replacement !== \"string\" && !isSandboxClosure(replacement))\n ) {\n throw new TypeError(\n `String#${methodName} only supports string or regex search values and string or function replacements.`\n );\n }\n if (isSandboxRegex(search)) {\n if (methodName === \"replaceAll\" && !search.flags.includes(\"g\")) {\n throw new TypeError(\"String#replaceAll requires a global regex.\");\n }\n return replaceRegex(\n value,\n search,\n replacement,\n methodName === \"replaceAll\",\n budget,\n callClosure\n );\n }\n if (typeof replacement === \"string\") {\n return budget.allocateString(\n methodName === \"replace\"\n ? value.replace(search, replacement)\n : value.replaceAll(search, replacement)\n );\n }\n return replaceWithClosure(\n value,\n search,\n replacement,\n methodName === \"replaceAll\",\n budget,\n callClosure\n );\n}\n\nasync function replaceRegex(\n value: string,\n regex: SandboxRegex,\n replacement: string | SandboxClosure,\n replaceAll: boolean,\n budget: Budget,\n callClosure: (closure: SandboxClosure, args: readonly SandboxValue[]) => Promise<SandboxValue>\n): Promise<string> {\n if (regex.flags.includes(\"g\")) regex.lastIndex = 0;\n const matches = collectRegexMatches(regex, value, replaceAll || regex.flags.includes(\"g\"));\n let result = \"\";\n let copiedThrough = 0;\n for (const match of matches) {\n result += value.slice(copiedThrough, match.index);\n result +=\n typeof replacement === \"string\"\n ? expandReplacement(replacement, match.text, match.captures, value, match.index)\n : String(\n await callClosure(replacement, [match.text, ...match.captures, match.index, value])\n );\n copiedThrough = match.index + match.text.length;\n }\n result += value.slice(copiedThrough);\n return budget.allocateString(result);\n}\n\nfunction expandReplacement(\n replacement: string,\n match: string,\n captures: (string | undefined)[],\n input: string,\n matchIndex: number\n): string {\n let result = \"\";\n for (let index = 0; index < replacement.length; index += 1) {\n const character = replacement.charAt(index);\n if (character !== \"$\") {\n result += character;\n continue;\n }\n\n const token = replacement.charAt(index + 1);\n if (token === \"$\") {\n result += \"$\";\n } else if (token === \"&\") {\n result += match;\n } else if (token === \"`\") {\n result += input.slice(0, matchIndex);\n } else if (token === \"'\") {\n result += input.slice(matchIndex + match.length);\n } else if (token >= \"0\" && token <= \"9\") {\n let captureIndex = Number(token);\n const nextDigit = replacement.charAt(index + 2);\n if (nextDigit >= \"0\" && nextDigit <= \"9\") {\n const twoDigitIndex = Number(token + nextDigit);\n if (twoDigitIndex > 0 && twoDigitIndex <= captures.length) {\n captureIndex = twoDigitIndex;\n index += 1;\n }\n }\n if (captureIndex === 0 || captureIndex > captures.length) {\n result += \"$\";\n continue;\n }\n result += captures[captureIndex - 1] ?? \"\";\n } else {\n result += \"$\";\n continue;\n }\n index += 1;\n }\n return result;\n}\n\nasync function replaceWithClosure(\n value: string,\n searchValue: string,\n replacer: SandboxClosure,\n replaceAll: boolean,\n budget: Budget,\n callClosure: (closure: SandboxClosure, args: readonly SandboxValue[]) => Promise<SandboxValue>\n): Promise<string> {\n const offsets = findReplacementOffsets(value, searchValue, replaceAll);\n let result = \"\";\n let copiedThrough = 0;\n\n for (const offset of offsets) {\n result += value.slice(copiedThrough, offset);\n result += String(await callClosure(replacer, [searchValue, offset, value]));\n copiedThrough = offset + searchValue.length;\n }\n\n result += value.slice(copiedThrough);\n return budget.allocateString(result);\n}\n\nfunction findReplacementOffsets(value: string, searchValue: string, replaceAll: boolean): number[] {\n const firstOffset = value.indexOf(searchValue);\n if (firstOffset === -1) {\n return [];\n }\n\n if (!replaceAll) {\n return [firstOffset];\n }\n\n if (searchValue.length === 0) {\n return Array.from({ length: value.length + 1 }, (_, offset) => offset);\n }\n\n const offsets: number[] = [];\n let offset = firstOffset;\n\n while (offset !== -1) {\n offsets.push(offset);\n offset = value.indexOf(searchValue, offset + searchValue.length);\n }\n\n return offsets;\n}\n\nfunction callSplit(\n value: string,\n args: readonly SandboxValue[],\n budget: Budget,\n compilation: CompileScope\n): SandboxValue[] {\n if (args.some(isSandboxClosure))\n throw new TypeError(\"String#split does not support function arguments.\");\n if (isSandboxRegex(args[0])) {\n const regex = args[0];\n const splitter = createSandboxRegex(\n regex.source,\n regex.flags.includes(\"g\") ? regex.flags : `${regex.flags}g`,\n 0,\n compilation\n );\n const limit = asNumberOrUndefined(args[1]) ?? 2 ** 32 - 1;\n const result: SandboxValue[] = [];\n let copiedThrough = 0;\n let endedWithZeroWidthMatch = false;\n for (const match of collectRegexMatches(splitter, value, true)) {\n endedWithZeroWidthMatch = match.text.length === 0 && match.index === value.length;\n if (\n match.text.length === 0 &&\n (match.index === copiedThrough || match.index === value.length)\n )\n continue;\n if (result.length >= limit) break;\n result.push(budget.allocateString(value.slice(copiedThrough, match.index)));\n for (const capture of match.captures) {\n if (result.length >= limit) break;\n result.push(capture === undefined ? undefined : budget.allocateString(capture));\n }\n copiedThrough = match.index + match.text.length;\n }\n if (result.length < limit && (value.length > 0 || !endedWithZeroWidthMatch))\n result.push(budget.allocateString(value.slice(copiedThrough)));\n budget.allocateArrayLength(result.length);\n return result;\n }\n if (args[0] !== undefined && typeof args[0] !== \"string\")\n throw new TypeError(SPLIT_STRING_MESSAGE);\n const limit = asNumberOrUndefined(args[1]);\n const result = splitString(value, args[0], limit).map((part) => budget.allocateString(part));\n budget.allocateArrayLength(result.length);\n return result;\n}\n\nfunction callMatchLikeMethod(\n value: string,\n methodName: \"match\" | \"matchAll\" | \"search\",\n args: readonly SandboxValue[],\n compilation: CompileScope\n): SandboxValue {\n const regex = args[0];\n if (!isSandboxRegex(regex))\n throw new TypeError(`String#${methodName} requires a regex argument.`);\n if (methodName === \"search\") {\n const lastIndex = regex.lastIndex;\n if (!Object.is(lastIndex, 0)) regex.lastIndex = 0;\n const match = executeRegex(regex, value);\n if (!Object.is(regex.lastIndex, lastIndex)) regex.lastIndex = lastIndex;\n return match?.index ?? -1;\n }\n if (methodName === \"matchAll\" && !regex.flags.includes(\"g\"))\n throw new TypeError(\"String#matchAll requires a global regex.\");\n if (methodName === \"match\" && !regex.flags.includes(\"g\"))\n return toMatchArray(executeRegex(regex, value), value);\n if (methodName === \"match\") regex.lastIndex = 0;\n const matcher =\n methodName === \"matchAll\"\n ? createSandboxRegex(regex.source, regex.flags, regex.lastIndex, compilation)\n : regex;\n const matches = collectRegexMatches(matcher, value, true);\n if (methodName === \"match\" && matches.length === 0) return null;\n return methodName === \"match\"\n ? matches.map((match) => match.text)\n : matches.map((match) => toMatchArray(match, value));\n}\n\nfunction collectRegexMatches(regex: SandboxRegex, value: string, all: boolean) {\n const matches = [];\n do {\n const match = executeRegex(regex, value);\n if (match === null) break;\n matches.push(match);\n if (all && match.text.length === 0) regex.lastIndex += 1;\n } while (all);\n return matches;\n}\n\nfunction splitString(\n value: string,\n separator: string | undefined,\n limit: number | undefined\n): string[] {\n const split = String.prototype.split as (\n this: string,\n separator: string | undefined,\n limit?: number\n ) => string[];\n\n return split.call(value, separator, limit);\n}\n\nfunction asNumber(value: SandboxValue | undefined): number {\n return Number(value);\n}\n\nfunction asNumberOrUndefined(value: SandboxValue | undefined): number | undefined {\n return value === undefined ? undefined : Number(value);\n}\n\nfunction asStringOrUndefined(value: SandboxValue | undefined): string | undefined {\n return value === undefined ? undefined : String(value);\n}\n", "import type { Budget } from \"../budget.js\";\nimport {\n allocateProducedSandboxValue,\n createSandboxClosure,\n isSandboxClosure,\n type SandboxClosure,\n type SandboxSet,\n type SandboxValue\n} from \"../values.js\";\nimport { assertCollectionMutable } from \"../running-state.js\";\nimport {\n enterKeyedCollectionCallback,\n updateKeyedCollectionCallbacks\n} from \"./collection-callback.js\";\n\nexport type SetMethodName =\n | \"add\"\n | \"has\"\n | \"delete\"\n | \"clear\"\n | \"forEach\"\n | \"keys\"\n | \"values\"\n | \"entries\";\n\nexport type SetMethodOptions = {\n budget: Budget;\n callClosure: (\n closure: SandboxClosure,\n args: readonly SandboxValue[],\n stack: readonly string[],\n thisValue?: SandboxValue\n ) => Promise<SandboxValue>;\n};\n\nconst setMethodNames = new Set<SetMethodName>([\n \"add\",\n \"has\",\n \"delete\",\n \"clear\",\n \"forEach\",\n \"keys\",\n \"values\",\n \"entries\"\n]);\n\nexport function isSetMethodName(value: string | number): value is SetMethodName {\n return typeof value === \"string\" && setMethodNames.has(value as SetMethodName);\n}\n\nexport function getSetMember(\n target: SandboxSet,\n property: string | number,\n options: SetMethodOptions\n): SandboxValue | undefined {\n if (property === \"size\") {\n return target.values.size;\n }\n\n if (!isSetMethodName(property)) {\n return undefined;\n }\n\n return createSandboxClosure({\n sandbox: true,\n call: (args, context) => callSetMethod(target, property, args, options, context?.stack ?? []),\n name: property\n });\n}\n\nexport async function callSetMethod(\n target: SandboxSet,\n methodName: SetMethodName,\n args: readonly SandboxValue[],\n options: SetMethodOptions,\n stack: readonly string[] = []\n): Promise<SandboxValue> {\n switch (methodName) {\n case \"add\": {\n assertCollectionMutable(target);\n const exists = target.values.has(args[0]);\n const nextSize = exists ? target.values.size : target.values.size + 1;\n options.budget.allocateCollectionEntries(nextSize);\n if (!exists) updateKeyedCollectionCallbacks(target, \"add\", args[0]);\n target.values.add(args[0]);\n return target;\n }\n case \"has\":\n return target.values.has(args[0]);\n case \"delete\": {\n assertCollectionMutable(target);\n const deleted = target.values.delete(args[0]);\n if (deleted) updateKeyedCollectionCallbacks(target, \"delete\", args[0]);\n return deleted;\n }\n case \"clear\":\n assertCollectionMutable(target);\n target.values.clear();\n updateKeyedCollectionCallbacks(target, \"clear\");\n return undefined;\n case \"forEach\": {\n const callback = args[0];\n if (!isSandboxClosure(callback)) {\n throw new TypeError(\"Set.prototype.forEach requires a callback function.\");\n }\n const cursor = enterKeyedCollectionCallback(target, target.values, options.budget);\n try {\n for (let entry = cursor.next(); !entry.done; entry = cursor.next()) {\n const value = entry.value;\n await options.callClosure(callback, [value, value, target], stack, args[1]);\n }\n } finally {\n cursor.leave();\n }\n return undefined;\n }\n case \"keys\":\n case \"values\":\n return allocateProducedSandboxValue([...target.values], options.budget);\n case \"entries\":\n return allocateProducedSandboxValue(\n [...target.values].map((value) => [value, value]),\n options.budget\n );\n }\n}\n", "import type { VariableDeclarationKind } from \"../parse.js\";\nimport type { InterpreterSnapshot, InterpreterValue } from \"./interpreter.js\";\n\ntype ScopeBinding = {\n kind: VariableDeclarationKind;\n value: InterpreterValue | typeof uninitialized;\n};\n\ntype ScopeLookupResult =\n | {\n found: true;\n kind: VariableDeclarationKind;\n value: InterpreterValue;\n }\n | {\n found: false;\n };\n\nconst uninitialized = Symbol(\"uninitialized\");\n\ntype ScopeOptions = {\n functionBoundary?: boolean;\n chargeData?: boolean;\n};\n\nexport class Scope {\n readonly #bindings = new Map<string, ScopeBinding>();\n readonly #restoredBindings: Map<string, InterpreterValue>;\n\n constructor(\n bindings: Record<string, InterpreterValue> = {},\n private readonly parent?: Scope,\n private readonly importMeta?: InterpreterValue,\n private readonly options: ScopeOptions = {\n functionBoundary: parent === undefined\n },\n restoredBindings?: Record<string, InterpreterValue>\n ) {\n this.#restoredBindings =\n parent === undefined\n ? new Map(Object.entries(restoredBindings ?? {}))\n : parent.#restoredBindings;\n for (const [name, value] of Object.entries(bindings)) {\n this.#bindings.set(name, {\n kind: \"const\",\n value\n });\n }\n }\n\n child(bindings: Record<string, InterpreterValue> = {}, options: ScopeOptions = {}): Scope {\n return new Scope(bindings, this, undefined, {\n chargeData: true,\n ...options\n });\n }\n\n consumeRestoredBinding(\n name: string\n ): { found: true; value: InterpreterValue } | { found: false } {\n if (!this.#restoredBindings.has(name)) {\n return { found: false };\n }\n\n const value = this.#restoredBindings.get(name);\n this.#restoredBindings.delete(name);\n return { found: true, value };\n }\n\n hasOwnBinding(name: string): boolean {\n return this.#bindings.has(name);\n }\n\n getOwnBindingKind(name: string): VariableDeclarationKind | undefined {\n return this.#bindings.get(name)?.kind;\n }\n\n isFunctionBoundary(): boolean {\n return this.options.functionBoundary === true;\n }\n\n iterationChild(names: readonly string[]): Scope {\n const scope = new Scope({}, this.parent);\n\n for (const name of names) {\n const binding = this.requireInitializedBinding(name);\n if (binding.kind === \"var\") {\n continue;\n }\n scope.declare(name, binding.kind, binding.value);\n }\n\n return scope;\n }\n\n lookupImportMeta(): InterpreterValue {\n if (this.importMeta !== undefined) {\n return this.importMeta;\n }\n\n if (this.parent !== undefined) {\n return this.parent.lookupImportMeta();\n }\n\n return {};\n }\n\n retainedValues(): InterpreterValue[] {\n const values = this.parent?.retainedValues() ?? [];\n if (this.options.chargeData !== false) {\n if (this.importMeta !== undefined) values.push(this.importMeta);\n for (const binding of this.#bindings.values()) {\n if (binding.value !== uninitialized) values.push(binding.value);\n }\n }\n return values;\n }\n\n declare(name: string, kind: VariableDeclarationKind, value: InterpreterValue): void {\n const existing = this.#bindings.get(name);\n if (existing !== undefined && existing.value !== uninitialized) {\n throw new Error(`Cannot redeclare binding '${name}' in the same scope.`);\n }\n if (existing !== undefined && existing.kind !== kind) {\n throw new Error(`Cannot redeclare binding '${name}' in the same scope.`);\n }\n\n this.#bindings.set(name, {\n kind,\n value\n });\n }\n\n declareVar(name: string): void {\n const boundary = this.options.functionBoundary === true ? this : this.parent;\n if (boundary === undefined) {\n throw new Error(\"Cannot declare var without a function boundary.\");\n }\n if (boundary !== this) {\n boundary.declareVar(name);\n return;\n }\n\n const existing = this.#bindings.get(name);\n if (existing?.kind === \"var\") {\n return;\n }\n if (existing !== undefined) {\n throw new Error(`Cannot redeclare binding '${name}' in the same scope.`);\n }\n\n this.#bindings.set(name, {\n kind: \"var\",\n value: undefined\n });\n }\n\n predeclare(name: string, kind: VariableDeclarationKind): void {\n if (this.#bindings.has(name)) {\n throw new Error(`Cannot redeclare binding '${name}' in the same scope.`);\n }\n\n this.#bindings.set(name, {\n kind,\n value: uninitialized\n });\n }\n\n assign(name: string, value: InterpreterValue): void {\n const scope = this.resolveScope(name);\n if (scope === undefined) {\n throw new ReferenceError(`Cannot assign to undeclared binding '${name}'.`);\n }\n\n const binding = scope.#bindings.get(name);\n if (binding === undefined) {\n throw new ReferenceError(`Cannot assign to undeclared binding '${name}'.`);\n }\n\n if (binding.value === uninitialized) {\n throw new ReferenceError(`Cannot access '${name}' before initialization.`);\n }\n\n if (binding.kind === \"const\") {\n throw new TypeError(`Cannot assign to const binding '${name}'.`);\n }\n\n scope.#bindings.set(name, {\n kind: binding.kind,\n value\n });\n }\n\n lookup(name: string): ScopeLookupResult {\n const binding = this.#bindings.get(name);\n if (binding !== undefined) {\n if (binding.value === uninitialized) {\n throw new ReferenceError(`Cannot access '${name}' before initialization.`);\n }\n\n return {\n found: true,\n kind: binding.kind,\n value: binding.value\n };\n }\n\n if (this.parent !== undefined) {\n return this.parent.lookup(name);\n }\n\n return { found: false };\n }\n\n snapshot(): InterpreterSnapshot {\n const scopes: Scope[] = [this];\n let parent = this.parent;\n\n while (parent !== undefined) {\n scopes.push(parent);\n parent = parent.parent;\n }\n\n const bindings: Record<string, InterpreterValue> = {};\n\n for (let index = scopes.length - 1; index >= 0; index -= 1) {\n for (const [name, binding] of scopes[index].#bindings.entries()) {\n if (binding.value === uninitialized) {\n continue;\n }\n\n defineSnapshotBinding(bindings, name, binding.value);\n }\n }\n\n return {\n bindings\n };\n }\n\n copyInitializedBindingsFrom(source: Scope, names: readonly string[]): void {\n for (const name of names) {\n const sourceBinding = source.requireInitializedBinding(name);\n const targetScope = this.resolveScope(name);\n if (targetScope === undefined) {\n this.declare(name, sourceBinding.kind, sourceBinding.value);\n continue;\n }\n\n targetScope.#bindings.set(name, {\n kind: sourceBinding.kind,\n value: sourceBinding.value\n });\n }\n }\n\n private resolveScope(name: string): Scope | undefined {\n if (this.#bindings.has(name)) {\n return this;\n }\n\n return this.parent?.resolveScope(name);\n }\n\n private requireInitializedBinding(name: string): {\n kind: VariableDeclarationKind;\n value: InterpreterValue;\n } {\n const scope = this.resolveScope(name);\n const binding = scope === undefined ? undefined : scope.#bindings.get(name);\n\n if (binding === undefined) {\n throw new ReferenceError(`Identifier '${name}' is not defined.`);\n }\n\n if (binding.value === uninitialized) {\n throw new ReferenceError(`Cannot access '${name}' before initialization.`);\n }\n\n return {\n kind: binding.kind,\n value: binding.value\n };\n }\n}\n\nfunction defineSnapshotBinding(\n target: Record<string, InterpreterValue>,\n name: string,\n value: InterpreterValue\n): void {\n Object.defineProperty(target, name, {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n}\n", "import { promiseReplayContext } from \"./promise-replay.js\";\nimport { assertPromiseExecutionAllowed } from \"./promise-tracker.js\";\nimport { SandboxJobQueue, suspendJob } from \"./jobs.js\";\nimport { withCancellationSignal } from \"./cancel.js\";\nimport type {\n ArrayExpression,\n ArrayPattern,\n AssignmentPattern,\n AssignmentExpression,\n ArrowFunctionExpression,\n AwaitExpression,\n BinaryExpression,\n BlockStatement,\n BooleanLiteral,\n CallExpression,\n ConditionalExpression,\n ContinueStatement,\n DoWhileStatement,\n EmptyStatement,\n Expression,\n Identifier,\n ExportDefaultDeclaration,\n ExportNamedDeclaration,\n ForInStatement,\n ForOfStatement,\n ForStatement,\n FunctionDeclaration,\n FunctionExpression,\n IfStatement,\n LogicalExpression,\n MemberExpression,\n MetaProperty,\n NewExpression,\n NullLiteral,\n NumericLiteral,\n ObjectExpression,\n ObjectPattern,\n ParseResult,\n Property,\n RegexLiteral,\n BreakStatement,\n ReturnStatement,\n SequenceExpression,\n SourceSpan,\n SpreadElement,\n StringLiteral,\n SwitchStatement,\n TaggedTemplateExpression,\n TemplateLiteral,\n ThrowStatement,\n ThisExpression,\n TryStatement,\n UnaryExpression,\n UndefinedLiteral,\n UpdateExpression,\n ExpressionStatement,\n VariableDeclaration,\n RestElement,\n WhileStatement\n} from \"../parse.js\";\nimport type { YieldExpression } from \"../parse/parser.js\";\nimport {\n attachErrorSpan,\n formatErrorStack,\n readErrorSpan,\n replaceErrorStack\n} from \"../error/shape.js\";\nimport {\n evaluateArrowFunctionExpression,\n evaluateFunctionExpression,\n evaluateAwaitExpression,\n emitResumeBreakpoint,\n createInterpretedClosure,\n normalizeClosureResult,\n type AsyncEvaluationContext,\n type AsyncEvaluationResult,\n type InterpreterYieldPoint\n} from \"./async.js\";\nimport type { GeneratorCompletion } from \"./generator.js\";\nimport { HostCallResumabilityError } from \"./host-call.js\";\nimport { Budget, SandboxError, type CompileOwner } from \"./budget.js\";\nimport { CompileScope, RegexCompileGuard } from \"./regex/compile-guard.js\";\nimport {\n coerceThrownValue,\n createCapturedException,\n evaluateThrowStatement as evaluateThrowStatementResult,\n evaluateTryStatement as evaluateTryStatementResult,\n isCapturedException,\n surfaceThrownValue\n} from \"./exceptions.js\";\nimport {\n callArrayMethod,\n getArrayMember,\n isArrayMethodName,\n type ArrayMethodName,\n type ArrayMethodOptions\n} from \"./methods/array.js\";\nimport { getFunctionMember, type FunctionMethodOptions } from \"./methods/function.js\";\nimport {\n callMapMethod,\n getMapMember,\n isMapMethodName,\n type MapMethodName,\n type MapMethodOptions\n} from \"./methods/map.js\";\nimport { callNumberMethod, getNumberMember, isNumberMethodName } from \"./methods/number.js\";\nimport { getPromiseMember, isSandboxPromiseConstructor } from \"./promise.js\";\nimport { getSandboxIterator, type SandboxIterator } from \"./iteration.js\";\nimport { assertCollectionMutable } from \"./running-state.js\";\nimport { getGeneratorMember } from \"./methods/generator.js\";\nimport { getRegexMember, isRegexMethodName, setRegexMember } from \"./methods/regex.js\";\nimport { bindPattern, type BindPatternResult } from \"./patterns.js\";\nimport {\n callStringMethod,\n getStringMember,\n isStringMethodName,\n validateStringMethodArguments\n} from \"./methods/string.js\";\nimport {\n callSetMethod,\n getSetMember,\n isSetMethodName,\n type SetMethodName,\n type SetMethodOptions\n} from \"./methods/set.js\";\nimport { isSandboxErrorConstructor, isSandboxErrorConstructorInstance } from \"./globals/error.js\";\nimport { isSandboxMapConstructor, isSandboxSetConstructor } from \"./globals/collections.js\";\nimport {\n getFloat32Member,\n isFloat32ArrayConstructor,\n setFloat32Member\n} from \"./globals/float32array.js\";\nimport { isFloat32Array } from \"./float32.js\";\nimport {\n createSandboxRegex,\n allocateProducedSandboxValue,\n isSandboxClosure,\n isSandboxGenerator,\n isSandboxMap,\n isSandboxPromise,\n isSandboxRegex,\n isSandboxSet,\n reconcileCompiledValues,\n type SandboxArray,\n type SandboxClosure,\n type SandboxMap,\n type SandboxObject,\n type SandboxPrimitive,\n type SandboxSet,\n type SandboxValue\n} from \"./values.js\";\nimport { Scope } from \"./scope.js\";\nimport { hoistVarDeclarations } from \"./var-hoist.js\";\n\nexport type InterpreterValue = SandboxValue;\n\nexport type InterpreterStats = {\n nodeVisits: number;\n currentDataSize: number;\n peakDataSize: number;\n};\n\nexport type InterpreterSnapshot = {\n bindings: Record<string, InterpreterValue>;\n loopIterations?: Record<string, LoopIterationSnapshot>;\n resumeNodeId?: number;\n};\n\nexport type LoopIterationSnapshot =\n | number\n | {\n index: number;\n values: InterpreterValue[];\n };\n\nexport type InterpreterErrorCode = \"LABEL_NOT_FOUND\" | \"UNBOUND_IDENTIFIER\" | \"UNSUPPORTED_NODE\";\n\nexport type InterpreterError = {\n code: InterpreterErrorCode;\n message: string;\n name: string;\n nodeId?: number;\n nodeType: ParseResult[\"type\"];\n span: SourceSpan;\n stack: string;\n};\n\nexport type InterpreterResult =\n | {\n ok: true;\n returnValue?: InterpreterValue;\n snapshot: InterpreterSnapshot;\n stats: InterpreterStats;\n }\n | {\n ok: false;\n error: InterpreterError;\n snapshot: InterpreterSnapshot;\n stats: InterpreterStats;\n };\n\nexport type InterpretOptions = {\n compilation?: CompileScope;\n compileOwner?: CompileOwner;\n captureReplayState?: () => unknown;\n bindings?: Record<string, InterpreterValue>;\n budget?: Budget;\n onYield?: (yieldPoint: InterpreterYieldPoint) => void;\n scope?: Scope;\n signal?: AbortSignal;\n surfaceUnhandledThrows?: boolean;\n useScopeDirectly?: boolean;\n generatorYield?: (value?: SandboxValue, yieldNodeId?: number) => Promise<GeneratorCompletion>;\n generatorResume?: {\n sent: GeneratorCompletion[];\n yieldNodeId: number;\n };\n snapshot?: InterpreterSnapshot;\n};\n\ntype EvaluationContext = AsyncEvaluationContext;\n\ntype EvaluationResult = AsyncEvaluationResult;\n\nconst taggedTemplateRawArrays = new WeakMap<SandboxArray, SandboxArray>();\n\ntype HelperResult<TValue> =\n | {\n ok: true;\n value: TValue;\n }\n | {\n ok: false;\n result: EvaluationResult;\n };\n\ntype NodeHandler<TNode extends ParseResult> = (\n node: TNode,\n context: EvaluationContext\n) => Promise<EvaluationResult>;\n\ntype DispatchTable = Partial<{\n [K in ParseResult[\"type\"]]: NodeHandler<Extract<ParseResult, { type: K }>>;\n}>;\n\nconst dispatchTable: DispatchTable = {\n ArrayExpression: evaluateArrayExpression,\n AssignmentExpression: evaluateAssignmentExpression,\n ArrowFunctionExpression: evaluateArrowFunction,\n AwaitExpression: evaluateAwait,\n BinaryExpression: evaluateBinaryExpression,\n BlockStatement: evaluateBlockStatement,\n BooleanLiteral: evaluatePrimitiveLiteral,\n CallExpression: evaluateCallExpression,\n ConditionalExpression: evaluateConditionalExpression,\n ContinueStatement: evaluateContinueStatement,\n DoWhileStatement: evaluateDoWhileStatement,\n EmptyStatement: evaluateEmptyStatement,\n ExportDefaultDeclaration: evaluateExportDefaultDeclaration,\n ExportNamedDeclaration: evaluateExportNamedDeclaration,\n ExpressionStatement: evaluateExpressionStatement,\n ForInStatement: evaluateForInStatement,\n ForOfStatement: evaluateForOfStatement,\n ForStatement: evaluateForStatement,\n FunctionDeclaration: evaluateFunctionDeclaration,\n FunctionExpression: evaluateFunction,\n IfStatement: evaluateIfStatement,\n Identifier: evaluateIdentifier,\n LogicalExpression: evaluateLogicalExpression,\n MemberExpression: evaluateMemberExpression,\n MetaProperty: evaluateMetaProperty,\n NewExpression: evaluateNewExpression,\n NullLiteral: evaluatePrimitiveLiteral,\n NumericLiteral: evaluatePrimitiveLiteral,\n RegexLiteral: evaluateRegexLiteral,\n ObjectExpression: evaluateObjectExpression,\n BreakStatement: evaluateBreakStatement,\n ReturnStatement: evaluateReturnStatement,\n SequenceExpression: evaluateSequenceExpression,\n StringLiteral: evaluatePrimitiveLiteral,\n SwitchStatement: evaluateSwitchStatement,\n TaggedTemplateExpression: evaluateTaggedTemplateExpression,\n TemplateLiteral: evaluateTemplateLiteral,\n ThrowStatement: evaluateThrowStatement,\n ThisExpression: evaluateThisExpression,\n TryStatement: evaluateTryStatement,\n UnaryExpression: evaluateUnaryExpression,\n UpdateExpression: evaluateUpdateExpression,\n VariableDeclaration: evaluateVariableDeclaration,\n WhileStatement: evaluateWhileStatement,\n YieldExpression: evaluateYieldExpression,\n UndefinedLiteral: evaluatePrimitiveLiteral\n};\n\nexport async function interpret(\n node: ParseResult,\n options: InterpretOptions = {}\n): Promise<InterpreterResult> {\n const budget = options.budget ?? new Budget();\n const operation = budget.acquireCompileOwner(\n false,\n options.compileOwner ?? options.compilation?.owner\n );\n const compilation = new CompileScope(operation.owner, options.compilation);\n try {\n const scope =\n options.scope === undefined\n ? new Scope(\n options.bindings,\n undefined,\n undefined,\n {\n chargeData: false\n },\n options.snapshot?.bindings\n ).child({}, { functionBoundary: true })\n : options.useScopeDirectly === true && options.bindings === undefined\n ? options.scope\n : options.scope.child(options.bindings ?? {}, {\n functionBoundary: true\n });\n const stats = { nodeVisits: 0 } as InterpreterStats;\n Object.defineProperties(stats, {\n currentDataSize: { enumerable: false, value: 0, writable: true },\n peakDataSize: { enumerable: false, value: 0, writable: true }\n });\n const activeLoopIterations = new Map<number, LoopIterationSnapshot>();\n const jobs = new SandboxJobQueue();\n hoistVarDeclarations(node, scope);\n const context = {\n compilation,\n budget,\n callStack: [],\n onYield: options.onYield,\n captureReplayState: options.captureReplayState,\n rootNode: node,\n scope,\n signal: options.signal,\n stats,\n activeLoopIterations,\n restoredLoopIterations: new Map(\n Object.entries(options.snapshot?.loopIterations ?? {}).map(([nodeId, iteration]) => [\n Number(nodeId),\n iteration\n ])\n ),\n generatorResume: options.generatorResume,\n generatorYield: options.generatorYield,\n resumeTarget: { nodeId: options.snapshot?.resumeNodeId }\n };\n const evaluation = await withCancellationSignal(options.signal, () =>\n jobs.run(() => evaluateNode(node, context))\n );\n await jobs.drain();\n const snapshot = scope.snapshot();\n reconcileDataBudget(\n budget,\n stats,\n scope,\n \"hasValue\" in evaluation && evaluation.hasValue ? evaluation.value : undefined,\n compilation,\n options.compilation\n );\n\n if (evaluation.kind === \"error\") {\n return {\n ok: false,\n error: evaluation.error,\n snapshot,\n stats\n };\n }\n\n if (evaluation.kind === \"throw\") {\n if (options.surfaceUnhandledThrows === true) {\n throw surfaceThrownValue(evaluation.value, budget, evaluation.stackFrames, evaluation.span);\n }\n\n throw evaluation.value;\n }\n\n if (\n (evaluation.kind === \"break\" || evaluation.kind === \"continue\") &&\n evaluation.label !== undefined\n ) {\n return {\n ok: false,\n error: createError(\n \"LABEL_NOT_FOUND\",\n evaluation.node ?? node,\n `Label '${evaluation.label}' not found`\n ),\n snapshot,\n stats\n };\n }\n\n if (evaluation.hasValue) {\n return {\n ok: true,\n returnValue: evaluation.value,\n snapshot,\n stats\n };\n }\n\n return {\n ok: true,\n snapshot,\n stats\n };\n } finally {\n compilation.dispose();\n operation.release();\n }\n}\n\nexport { Scope } from \"./scope.js\";\n\nasync function evaluateNode(\n node: ParseResult,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const replayWait = promiseReplayContext.getStore()?.beforeNode(node.nodeId);\n if (replayWait !== undefined) await suspendJob(replayWait);\n assertPromiseExecutionAllowed();\n context.budget.visitNode();\n context.stats.nodeVisits += 1;\n\n if (node.nodeId !== undefined && context.resumeTarget?.nodeId === node.nodeId) {\n context.resumeTarget.nodeId = undefined;\n }\n\n const handler = dispatchTable[node.type];\n if (handler === undefined) {\n return {\n kind: \"error\",\n error: createError(\"UNSUPPORTED_NODE\", node, `Unsupported AST node type '${node.type}'.`)\n };\n }\n\n const compilation = new CompileScope(context.compilation?.owner, context.compilation);\n const evaluationContext = {\n ...context,\n compilation,\n get generatorResume() {\n return context.generatorResume;\n },\n set generatorResume(value) {\n context.generatorResume = value;\n }\n };\n try {\n const result = await handler(node as never, evaluationContext);\n reconcileDataBudget(\n context.budget,\n context.stats,\n context.scope,\n \"hasValue\" in result && result.hasValue ? result.value : undefined,\n compilation,\n context.compilation\n );\n return result;\n } catch (error) {\n if (error instanceof HostCallResumabilityError) {\n throw error;\n }\n\n if (isFatalSandboxError(error)) {\n attachFatalSandboxErrorContext(error, node, context.callStack);\n throw error;\n }\n\n if (isInterpreterError(error)) {\n return {\n kind: \"error\",\n error\n };\n }\n\n const exception = isCapturedException(error)\n ? coerceThrownValue(error.reason, context.budget, error.stackFrames, node.span, error.sandbox)\n : coerceThrownValue(error, context.budget, context.callStack, node.span, true);\n\n reconcileDataBudget(\n context.budget,\n context.stats,\n context.scope,\n exception,\n compilation,\n context.compilation\n );\n\n return {\n kind: \"throw\",\n hasValue: true,\n span: readErrorSpan(exception) ?? node.span,\n stackFrames: isCapturedException(error) ? error.stackFrames : context.callStack,\n value: exception\n };\n } finally {\n compilation.dispose();\n }\n}\n\nfunction reconcileDataBudget(\n budget: Budget,\n stats: InterpreterStats,\n scope: Scope,\n transient: SandboxValue | undefined,\n compilation?: CompileScope,\n parent?: CompileScope\n): void {\n reconcileCompiledValues(\n budget,\n [...scope.retainedValues(), ...budget.retainedValues(), transient],\n compilation,\n parent,\n [transient]\n );\n stats.currentDataSize = budget.currentDataSize;\n stats.peakDataSize = budget.peakDataSize;\n}\n\nasync function evaluatePrimitiveLiteral(\n node: BooleanLiteral | NullLiteral | NumericLiteral | StringLiteral | UndefinedLiteral,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const value =\n typeof node.value === \"string\" ? context.budget.allocateString(node.value) : node.value;\n\n return {\n kind: \"normal\",\n hasValue: true,\n value\n };\n}\n\nasync function evaluateRegexLiteral(\n node: RegexLiteral,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const lastSlash = node.raw.lastIndexOf(\"/\");\n const guard = new RegexCompileGuard(context.compilation);\n try {\n guard.checkLength(Math.max(0, lastSlash - 1));\n guard.checkLength(node.raw.length - lastSlash - 1, true);\n guard.allocate(Math.max(0, node.raw.length - 2));\n guard.work(Math.max(0, node.raw.length - 2));\n return {\n kind: \"normal\",\n hasValue: true,\n value: createSandboxRegex(\n node.raw.slice(1, lastSlash),\n node.raw.slice(lastSlash + 1),\n 0,\n context.compilation\n )\n };\n } finally {\n guard.close();\n }\n}\n\nasync function evaluateEmptyStatement(\n _node: EmptyStatement,\n _context: EvaluationContext\n): Promise<EvaluationResult> {\n return {\n kind: \"normal\",\n hasValue: false,\n value: undefined\n };\n}\n\nasync function evaluateArrayExpression(\n node: ArrayExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const values: SandboxArray = [];\n\n for (const element of node.elements) {\n if (element.type === \"UndefinedLiteral\" && element.elision === true) {\n values.length += 1;\n context.budget.allocateArrayLength(values.length);\n continue;\n }\n\n if (element.type === \"SpreadElement\") {\n const spreadValues = await evaluateSpreadElement(element, context);\n if (!spreadValues.ok) {\n return spreadValues.result;\n }\n\n appendArrayValues(values, spreadValues.value);\n context.budget.allocateArrayLength(values.length);\n continue;\n }\n\n const result = await evaluateNode(element, context);\n if (result.kind !== \"normal\") {\n return result;\n }\n\n values.push(result.value);\n context.budget.allocateArrayLength(values.length);\n }\n\n return {\n kind: \"normal\",\n hasValue: true,\n value: values\n };\n}\n\nasync function evaluateObjectExpression(\n node: ObjectExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const object = Object.create(null) as SandboxObject;\n\n for (const property of node.properties) {\n if (property.type === \"SpreadElement\") {\n const spreadEntries = await evaluateObjectSpread(property, context);\n if (!spreadEntries.ok) {\n return spreadEntries.result;\n }\n\n for (const [key, value] of spreadEntries.value) {\n defineSandboxProperty(object, key, value);\n }\n continue;\n }\n\n const key = await evaluateObjectPropertyKey(property, context);\n if (!key.ok) {\n return key.result;\n }\n\n const value = await evaluateNode(property.value, context);\n if (value.kind !== \"normal\") {\n return value;\n }\n\n if (isObjectPrototypeSetterProperty(property, key.value)) {\n continue;\n }\n\n defineSandboxProperty(object, String(key.value), value.value);\n }\n\n return {\n kind: \"normal\",\n hasValue: true,\n value: object\n };\n}\n\nfunction isObjectPrototypeSetterProperty(property: Property, key: string | number): boolean {\n return !property.computed && !property.shorthand && key === \"__proto__\";\n}\n\nasync function evaluateTemplateLiteral(\n node: TemplateLiteral,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n let value = context.budget.allocateString(node.quasis[0]?.value.cooked ?? \"\");\n\n for (let index = 0; index < node.expressions.length; index += 1) {\n const expression = await evaluateNode(node.expressions[index], context);\n if (expression.kind !== \"normal\") {\n return expression;\n }\n\n const expressionText = context.budget.allocateString(String(expression.value));\n value = context.budget.allocateString(value + expressionText);\n\n const quasiText = context.budget.allocateString(node.quasis[index + 1]?.value.cooked ?? \"\");\n value = context.budget.allocateString(value + quasiText);\n }\n\n return {\n kind: \"normal\",\n hasValue: true,\n value\n };\n}\n\nasync function evaluateTaggedTemplateExpression(\n node: TaggedTemplateExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const tag = await evaluateNode(node.tag, context);\n if (tag.kind !== \"normal\") {\n return tag;\n }\n\n if (!isSandboxClosure(tag.value)) {\n throw new TypeError(\"Tagged template tag must be a function.\");\n }\n\n const values = await evaluateTemplateExpressionValues(node.quasi, context);\n if (!values.ok) {\n return values.result;\n }\n\n return {\n kind: \"normal\",\n hasValue: true,\n value: await invokeSandboxClosure(\n tag.value,\n [createTaggedTemplateStrings(node.quasi, context), ...values.value],\n context,\n [...context.callStack, formatStackFrame(node, tag.value.name)]\n )\n };\n}\n\nasync function evaluateTemplateExpressionValues(\n node: TemplateLiteral,\n context: EvaluationContext\n): Promise<HelperResult<SandboxValue[]>> {\n const values: SandboxValue[] = [];\n\n for (const expressionNode of node.expressions) {\n const expression = await evaluateNode(expressionNode, context);\n if (expression.kind !== \"normal\") {\n return {\n ok: false,\n result: expression\n };\n }\n\n values.push(expression.value);\n }\n\n return {\n ok: true,\n value: values\n };\n}\n\nfunction createTaggedTemplateStrings(\n node: TemplateLiteral,\n context: EvaluationContext\n): SandboxArray {\n context.budget.allocateArrayLength(node.quasis.length);\n const strings = node.quasis.map((quasi) =>\n quasi.value.cooked === undefined ? undefined : context.budget.allocateString(quasi.value.cooked)\n ) as SandboxArray;\n\n context.budget.allocateArrayLength(node.quasis.length);\n const raw = node.quasis.map((quasi) =>\n context.budget.allocateString(quasi.value.raw)\n ) as SandboxArray;\n Object.defineProperty(strings, \"raw\", {\n configurable: false,\n enumerable: false,\n value: raw,\n writable: false\n });\n taggedTemplateRawArrays.set(strings, raw);\n\n return strings;\n}\n\nasync function evaluateArrowFunction(\n node: ArrowFunctionExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n return evaluateArrowFunctionExpression(node, context, evaluateNode);\n}\n\nasync function evaluateFunctionDeclaration(\n node: FunctionDeclaration,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n if (!context.scope.hasOwnBinding(node.id.name)) {\n context.scope.declare(\n node.id.name,\n \"const\",\n createInterpretedClosure(node, context, evaluateNode)\n );\n }\n\n return {\n kind: \"normal\",\n hasValue: false,\n value: undefined\n };\n}\n\nasync function evaluateFunction(\n node: FunctionExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n return evaluateFunctionExpression(node, context, evaluateNode);\n}\n\nasync function evaluateAwait(\n node: AwaitExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n return evaluateAwaitExpression(node, context, evaluateNode);\n}\n\nasync function evaluateBinaryExpression(\n node: BinaryExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const left = await evaluateNode(node.left, context);\n if (left.kind !== \"normal\") {\n return left;\n }\n\n const right = await evaluateNode(node.right, context);\n if (right.kind !== \"normal\") {\n return right;\n }\n\n const value = applyBinaryOperator(node, left.value, right.value, context);\n\n return {\n kind: \"normal\",\n hasValue: true,\n value\n };\n}\n\nasync function evaluateAssignmentExpression(\n node: AssignmentExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n if (node.left.type === \"ArrayPattern\" || node.left.type === \"ObjectPattern\") {\n const right = await evaluateNode(node.right, context);\n if (right.kind !== \"normal\") {\n return right;\n }\n\n const binding = await bindPattern(node.left, right.value, { assign: true }, context.scope, {\n evaluate: (patternNode) => evaluateNode(patternNode, context)\n });\n if (!binding.ok) {\n return binding.result;\n }\n\n return {\n kind: \"normal\",\n hasValue: true,\n value: right.value\n };\n }\n\n if (node.left.type === \"MemberExpression\") {\n return evaluateMemberAssignmentExpression(node, context);\n }\n\n if (node.left.type !== \"Identifier\") {\n return {\n kind: \"error\",\n error: createError(\n \"UNSUPPORTED_NODE\",\n node,\n `Unsupported assignment target '${node.left.type}'.`\n )\n };\n }\n\n const binding = node.operator === \"=\" ? undefined : context.scope.lookup(node.left.name);\n if (binding?.found === false) {\n throw new ReferenceError(`Cannot assign to undeclared binding '${node.left.name}'.`);\n }\n const current = binding?.value;\n\n if (node.operator === \"&&=\" && !isTruthy(current)) {\n return {\n kind: \"normal\",\n hasValue: true,\n value: current\n };\n }\n\n if (node.operator === \"||=\" && isTruthy(current)) {\n return {\n kind: \"normal\",\n hasValue: true,\n value: current\n };\n }\n\n if (node.operator === \"??=\" && current !== null && current !== undefined) {\n return {\n kind: \"normal\",\n hasValue: true,\n value: current\n };\n }\n\n const right = await evaluateNode(node.right, context);\n if (right.kind !== \"normal\") {\n return right;\n }\n\n const value =\n node.operator === \"=\" ||\n node.operator === \"&&=\" ||\n node.operator === \"||=\" ||\n node.operator === \"??=\"\n ? right.value\n : await applyCompoundAssignmentOperator(node.operator, current, right.value, context);\n\n context.scope.assign(node.left.name, value);\n\n return {\n kind: \"normal\",\n hasValue: true,\n value\n };\n}\n\nasync function evaluateMemberAssignmentExpression(\n node: AssignmentExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n if (node.left.type !== \"MemberExpression\") {\n throw new TypeError(\"Expected member assignment target.\");\n }\n\n const member = await evaluateMemberAccess(node.left, context);\n if (member.kind === \"error\") {\n return member;\n }\n if (member.kind === \"completion\") {\n return member.result;\n }\n if (member.kind === \"nullish\") {\n throw new TypeError(\"Cannot assign properties of null or undefined.\");\n }\n const current =\n node.operator === \"=\" ? undefined : getPropertyValue(member.object, member.property, context);\n\n if (node.operator === \"&&=\" && !isTruthy(current)) {\n return {\n kind: \"normal\",\n hasValue: true,\n value: current\n };\n }\n\n if (node.operator === \"||=\" && isTruthy(current)) {\n return {\n kind: \"normal\",\n hasValue: true,\n value: current\n };\n }\n\n if (node.operator === \"??=\" && current !== null && current !== undefined) {\n return {\n kind: \"normal\",\n hasValue: true,\n value: current\n };\n }\n\n const right = await evaluateNode(node.right, context);\n if (right.kind !== \"normal\") {\n return right;\n }\n\n const value =\n node.operator === \"=\" ||\n node.operator === \"&&=\" ||\n node.operator === \"||=\" ||\n node.operator === \"??=\"\n ? right.value\n : await applyCompoundAssignmentOperator(node.operator, current, right.value, context);\n\n setSandboxProperty(member.object, member.property, value);\n\n return {\n kind: \"normal\",\n hasValue: true,\n value\n };\n}\n\nasync function evaluateLogicalExpression(\n node: LogicalExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const left = await evaluateNode(node.left, context);\n if (left.kind !== \"normal\") {\n return left;\n }\n\n switch (node.operator) {\n case \"&&\":\n if (!isTruthy(left.value)) {\n return left;\n }\n break;\n case \"||\":\n if (isTruthy(left.value)) {\n return left;\n }\n break;\n case \"??\":\n if (left.value !== null && left.value !== undefined) {\n return left;\n }\n break;\n }\n\n return evaluateNode(node.right, context);\n}\n\nasync function evaluateSequenceExpression(\n node: SequenceExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n let result: EvaluationResult = {\n kind: \"normal\",\n hasValue: true,\n value: undefined\n };\n\n for (const expression of node.expressions) {\n result = await evaluateNode(expression, context);\n if (result.kind !== \"normal\") {\n return result;\n }\n }\n\n return result;\n}\n\nasync function evaluateConditionalExpression(\n node: ConditionalExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const test = await evaluateNode(node.test, context);\n if (test.kind !== \"normal\") {\n return test;\n }\n\n return evaluateNode(isTruthy(test.value) ? node.consequent : node.alternate, context);\n}\n\nasync function evaluateIdentifier(\n node: Identifier,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const binding = context.scope.lookup(node.name);\n\n if (!binding.found) {\n return {\n kind: \"error\",\n error: createError(\n \"UNBOUND_IDENTIFIER\",\n node,\n `Identifier '${node.name}' is not defined.`,\n context.callStack\n )\n };\n }\n\n return {\n kind: \"normal\",\n hasValue: true,\n value: binding.value\n };\n}\n\nasync function evaluateThisExpression(\n _node: ThisExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const binding = context.scope.lookup(\"this\");\n return {\n kind: \"normal\",\n hasValue: true,\n value: binding.found ? binding.value : undefined\n };\n}\n\nasync function evaluateMetaProperty(\n _node: MetaProperty,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n return {\n kind: \"normal\",\n hasValue: true,\n value: context.scope.lookupImportMeta()\n };\n}\n\nasync function evaluateExportDefaultDeclaration(\n node: ExportDefaultDeclaration,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const declaration = await evaluateNode(node.declaration, context);\n if (declaration.kind !== \"normal\") {\n return declaration;\n }\n\n context.scope.declare(\"default\", \"const\", declaration.value);\n\n return {\n kind: \"normal\",\n hasValue: false,\n value: undefined\n };\n}\n\nasync function evaluateExportNamedDeclaration(\n node: ExportNamedDeclaration,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n return evaluateVariableDeclaration(node.declaration, context);\n}\n\nasync function evaluateVariableDeclaration(\n node: VariableDeclaration,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n if (node.kind !== \"var\") {\n predeclareDeclarationBindings(node, context.scope);\n }\n\n for (const declarator of node.declarations) {\n if (\n node.kind === \"var\" &&\n declarator.init === undefined &&\n declarator.id.type === \"Identifier\" &&\n context.scope.lookup(declarator.id.name).found\n ) {\n continue;\n }\n\n if (declarator.id.type === \"ArrayPattern\" || declarator.id.type === \"ObjectPattern\") {\n const names = getPatternBindingNames(declarator.id);\n const restoredBindings: Array<[string, InterpreterValue]> = [];\n for (const name of names) {\n const restored = context.scope.consumeRestoredBinding(name);\n if (restored.found && isRestorableBindingValue(restored.value)) {\n restoredBindings.push([name, restored.value]);\n }\n }\n if (names.length > 0 && restoredBindings.length === names.length) {\n for (const [name, value] of restoredBindings) {\n if (node.kind === \"var\") context.scope.assign(name, value);\n else context.scope.declare(name, node.kind, value);\n }\n continue;\n }\n }\n\n const restoredValue =\n declarator.id.type === \"Identifier\"\n ? context.scope.consumeRestoredBinding(declarator.id.name)\n : { found: false as const };\n const value =\n restoredValue.found && isRestorableBindingValue(restoredValue.value)\n ? {\n kind: \"normal\" as const,\n hasValue: true as const,\n value: restoredValue.value\n }\n : declarator.init === undefined\n ? {\n kind: \"normal\" as const,\n hasValue: true as const,\n value: undefined\n }\n : await evaluateNode(declarator.init, context);\n\n if (value.kind !== \"normal\") {\n return value;\n }\n\n const binding = await bindPattern(\n declarator.id,\n value.value,\n { kind: node.kind },\n context.scope,\n { evaluate: (patternNode) => evaluateNode(patternNode, context) }\n );\n if (!binding.ok) {\n return binding.result;\n }\n }\n\n return {\n kind: \"normal\",\n hasValue: false,\n value: undefined\n };\n}\n\nfunction isRestorableBindingValue(value: InterpreterValue, seen = new WeakSet<object>()): boolean {\n if (typeof value !== \"object\" || value === null) {\n return true;\n }\n if (seen.has(value)) return true;\n seen.add(value);\n if (isSandboxMap(value)) {\n for (const [key, entry] of value.entries) {\n if (!isRestorableBindingValue(key, seen) || !isRestorableBindingValue(entry, seen)) {\n return false;\n }\n }\n return true;\n }\n if (isSandboxSet(value)) {\n for (const entry of value.values) {\n if (!isRestorableBindingValue(entry, seen)) return false;\n }\n return true;\n }\n if (Array.isArray(value)) {\n return value.every((entry) => isRestorableBindingValue(entry, seen));\n }\n if (Object.hasOwn(value, \"kind\")) {\n return ![\"fn\", \"generator\", \"map\", \"promise\", \"regex\", \"set\"].includes(\n String((value as { kind?: unknown }).kind)\n );\n }\n return Object.values(value).every((entry) => isRestorableBindingValue(entry, seen));\n}\n\nfunction predeclareDeclarationBindings(node: VariableDeclaration, scope: Scope): void {\n for (const name of getDeclarationBindingNames(node)) {\n if (!scope.hasOwnBinding(name)) {\n scope.predeclare(name, node.kind);\n }\n }\n}\n\nfunction getForStatementBindingNames(node: ForStatement): string[] {\n return node.init?.type === \"VariableDeclaration\" && node.init.kind !== \"var\"\n ? getDeclarationBindingNames(node.init)\n : [];\n}\n\nfunction getDeclarationBindingNames(node: VariableDeclaration): string[] {\n return node.declarations.flatMap((declarator) => getPatternBindingNames(declarator.id));\n}\n\nfunction getPatternBindingNames(\n pattern:\n | ArrayPattern\n | AssignmentPattern\n | Identifier\n | MemberExpression\n | ObjectPattern\n | RestElement\n): string[] {\n switch (pattern.type) {\n case \"Identifier\":\n return [pattern.name];\n case \"MemberExpression\":\n return [];\n case \"AssignmentPattern\":\n return getPatternBindingNames(pattern.left);\n case \"ArrayPattern\":\n return pattern.elements.flatMap((element) =>\n element === null ? [] : getPatternBindingNames(element)\n );\n case \"ObjectPattern\":\n return pattern.properties.flatMap((property) =>\n property.type === \"RestElement\"\n ? getPatternBindingNames(property)\n : getPatternBindingNames(property.value)\n );\n case \"RestElement\":\n return getPatternBindingNames(pattern.argument);\n }\n}\n\nasync function evaluateBlockStatement(\n node: BlockStatement,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const blockContext = createBlockContext(node, context);\n const resumeIndex = findResumeStatementIndex(node, blockContext);\n const generatorResumeIndex = findGeneratorResumeStatementIndex(node, blockContext);\n\n for (let index = 0; index < node.body.length; index += 1) {\n const statement = node.body[index]!;\n if (generatorResumeIndex !== undefined && index < generatorResumeIndex) {\n continue;\n }\n if (\n resumeIndex !== undefined &&\n index < resumeIndex &&\n statement.type !== \"VariableDeclaration\"\n ) {\n continue;\n }\n const result = await evaluateNode(statement, blockContext);\n if (result.kind !== \"normal\") {\n return result;\n }\n }\n\n return {\n kind: \"normal\",\n hasValue: false,\n value: undefined\n };\n}\n\nfunction findGeneratorResumeStatementIndex(\n node: BlockStatement,\n context: EvaluationContext\n): number | undefined {\n if (context.generatorResume === undefined) {\n return undefined;\n }\n const index = node.body.findIndex((statement) =>\n containsResumeTarget(statement, new Set([context.generatorResume!.yieldNodeId]))\n );\n return index === -1 ? undefined : index;\n}\n\nfunction findResumeStatementIndex(\n node: BlockStatement,\n context: EvaluationContext\n): number | undefined {\n if (context.restoredLoopIterations.size === 0 && context.resumeTarget?.nodeId === undefined) {\n return undefined;\n }\n\n const targetNodeIds = new Set(context.restoredLoopIterations.keys());\n if (context.resumeTarget?.nodeId !== undefined) {\n targetNodeIds.add(context.resumeTarget.nodeId);\n }\n const index = node.body.findIndex((statement) => containsResumeTarget(statement, targetNodeIds));\n return index === -1 ? undefined : index;\n}\n\nfunction containsResumeTarget(node: ParseResult, targetNodeIds: ReadonlySet<number>): boolean {\n if (node.nodeId !== undefined && targetNodeIds.has(node.nodeId)) {\n return true;\n }\n if (\n node.type === \"ArrowFunctionExpression\" ||\n node.type === \"FunctionDeclaration\" ||\n node.type === \"FunctionExpression\"\n ) {\n return false;\n }\n\n for (const value of Object.values(node)) {\n if (Array.isArray(value)) {\n if (\n value.some((entry) => isParseResult(entry) && containsResumeTarget(entry, targetNodeIds))\n ) {\n return true;\n }\n continue;\n }\n if (isParseResult(value) && containsResumeTarget(value, targetNodeIds)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isParseResult(value: unknown): value is ParseResult {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { type?: unknown }).type === \"string\" &&\n Object.hasOwn(value, \"span\")\n );\n}\n\nfunction createBlockContext(node: BlockStatement, context: EvaluationContext): EvaluationContext {\n const scope =\n node === context.rootNode ||\n node === context.functionBody ||\n context.generatorResume !== undefined\n ? context.scope\n : context.scope.child();\n const blockContext = {\n ...context,\n scope\n };\n if (context.generatorResume === undefined) {\n predeclareBlockBindings(node, blockContext);\n }\n return blockContext;\n}\n\nfunction predeclareBlockBindings(node: BlockStatement, context: EvaluationContext): void {\n predeclareStatementListBindings(\n node.body,\n context,\n node === context.functionBody || node === context.rootNode\n );\n}\n\nfunction predeclareStatementListBindings(\n statements: readonly import(\"../parse.js\").Statement[],\n context: EvaluationContext,\n functionBody = false\n): void {\n const { scope } = context;\n const names = new Set<string>();\n\n for (const statement of statements) {\n if (statement.type === \"FunctionDeclaration\") {\n const name = statement.id.name;\n if (names.has(name) && !(functionBody && scope.getOwnBindingKind(name) === \"var\")) {\n throw new Error(`Cannot redeclare binding '${name}' in the same scope.`);\n }\n\n const closure = createInterpretedClosure(statement, context, evaluateNode);\n const ownBindingKind = scope.getOwnBindingKind(name);\n if (ownBindingKind === \"var\") {\n names.add(name);\n scope.assign(name, closure);\n continue;\n }\n if (ownBindingKind !== undefined) {\n throw new Error(`Cannot redeclare binding '${name}' in the same scope.`);\n }\n\n names.add(name);\n scope.declare(name, functionBody ? \"var\" : \"let\", closure);\n continue;\n }\n\n if (statement.type !== \"VariableDeclaration\" || statement.kind === \"var\") {\n continue;\n }\n\n for (const name of getDeclarationBindingNames(statement)) {\n if (names.has(name) || scope.hasOwnBinding(name)) {\n throw new Error(`Cannot redeclare binding '${name}' in the same scope.`);\n }\n\n names.add(name);\n scope.predeclare(name, statement.kind);\n }\n }\n}\n\nasync function evaluateSwitchStatement(\n node: SwitchStatement,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const discriminant = await evaluateNode(node.discriminant, context);\n if (discriminant.kind !== \"normal\") {\n return discriminant;\n }\n\n const switchContext = { ...context, scope: context.scope.child() };\n predeclareStatementListBindings(\n node.cases.flatMap((switchCase) => switchCase.consequent),\n switchContext\n );\n\n let defaultIndex: number | undefined;\n let startIndex: number | undefined;\n for (let index = 0; index < node.cases.length; index += 1) {\n const switchCase = node.cases[index]!;\n if (switchCase.test === undefined) {\n defaultIndex = index;\n continue;\n }\n\n const test = await evaluateNode(switchCase.test, switchContext);\n if (test.kind !== \"normal\") {\n return test;\n }\n if (discriminant.value === test.value) {\n startIndex = index;\n break;\n }\n }\n\n startIndex ??= defaultIndex;\n if (startIndex === undefined) {\n return normalEmptyResult();\n }\n\n for (let caseIndex = startIndex; caseIndex < node.cases.length; caseIndex += 1) {\n for (const statement of node.cases[caseIndex]!.consequent) {\n const result = await evaluateNode(statement, switchContext);\n if (result.kind === \"break\" && result.label === undefined) {\n return normalEmptyResult();\n }\n if (result.kind !== \"normal\") {\n return result;\n }\n }\n }\n\n return normalEmptyResult();\n}\n\nasync function evaluateIfStatement(\n node: IfStatement,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const test = await evaluateNode(node.test, context);\n if (test.kind !== \"normal\") {\n return test;\n }\n\n const branch = isTruthy(test.value) ? node.consequent : node.alternate;\n if (branch === undefined) {\n return {\n kind: \"normal\",\n hasValue: false,\n value: undefined\n };\n }\n\n return evaluateNode(branch, context);\n}\n\nasync function evaluateForOfStatement(\n node: ForOfStatement,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const restoredIteration = context.restoredLoopIterations.get(node.nodeId ?? -1);\n let restoredEntry: IteratorResult<SandboxValue> | undefined;\n if (typeof restoredIteration === \"object\" && typeof restoredIteration.values[0] === \"string\") {\n const restored = context.scope.consumeRestoredBinding(restoredIteration.values[0]);\n if (restored.found && Array.isArray(restored.value)) {\n restoredEntry = { done: false, value: restored.value[1] };\n if (isSandboxMap(restored.value[0]) || isSandboxSet(restored.value[0])) {\n return evaluateForOfIterator(node, restored.value[0], context, restoredEntry);\n }\n }\n }\n const iterable = await evaluateNode(node.right, context);\n if (iterable.kind !== \"normal\") {\n return iterable;\n }\n\n const values = snapshotableIterationValues(iterable.value);\n if (values === undefined) {\n return evaluateForOfIterator(node, iterable.value, context, restoredEntry);\n }\n\n const restoredIndex = consumeRestoredLoopIterationIndex(node, context);\n for (let index = restoredIndex; index < values.length; index += 1) {\n context.activeLoopIterations.set(node.nodeId ?? -1, index);\n\n const scope = context.scope.child();\n const binding = await bindForOfLoopVariable(node.left, values[index]!, scope, context);\n if (!binding.ok) {\n return binding.result;\n }\n\n const iterationContext = createLoopIterationContext(context, scope);\n emitLoopIterationBreakpoint(node, iterationContext);\n const result = await evaluateNode(node.body, iterationContext);\n\n if (isMatchingBreak(result, loopLabels(node))) {\n context.activeLoopIterations.delete(node.nodeId ?? -1);\n return {\n kind: \"normal\",\n hasValue: false,\n value: undefined\n };\n }\n\n if (isMatchingContinue(result, loopLabels(node))) {\n continue;\n }\n\n if (result.kind !== \"normal\") {\n context.activeLoopIterations.delete(node.nodeId ?? -1);\n return result;\n }\n }\n\n context.activeLoopIterations.delete(node.nodeId ?? -1);\n\n return {\n kind: \"normal\",\n hasValue: false,\n value: undefined\n };\n}\n\nasync function evaluateForOfIterator(\n node: ForOfStatement,\n value: SandboxValue,\n context: EvaluationContext,\n restoredEntry?: IteratorResult<SandboxValue>\n): Promise<EvaluationResult> {\n const iterator = getSandboxIterator(value);\n if (iterator === undefined) {\n throw new TypeError(`${String(value)} is not a supported iterable`);\n }\n\n const nodeId = node.nodeId ?? -1;\n let index = consumeRestoredLoopIterationIndex(node, context);\n for (let skipped = 0; skipped < index; skipped += 1) {\n const skippedIteration = await iterator.next();\n if (typeof skippedIteration !== \"object\" || skippedIteration === null) {\n throw new TypeError(\"Iterator result must be an object.\");\n }\n if (skippedIteration.done) {\n return normalEmptyResult();\n }\n }\n\n while (true) {\n const iteration = restoredEntry ?? (await iterator.next());\n restoredEntry = undefined;\n if (typeof iteration !== \"object\" || iteration === null) {\n throw new TypeError(\"Iterator result must be an object.\");\n }\n if (iteration.done) {\n context.activeLoopIterations.delete(nodeId);\n return normalEmptyResult();\n }\n\n context.activeLoopIterations.set(\n nodeId,\n iterator.snapshotIndex === undefined\n ? index\n : {\n get index() {\n return iterator.snapshotIndex!();\n },\n values: [value, iteration.value]\n }\n );\n const scope = context.scope.child();\n const binding = await bindForOfLoopVariable(node.left, iteration.value, scope, context);\n if (!binding.ok) {\n return binding.result;\n }\n\n const iterationContext = createLoopIterationContext(context, scope);\n emitLoopIterationBreakpoint(node, iterationContext);\n const result = await evaluateNode(node.body, iterationContext);\n if (isMatchingBreak(result, loopLabels(node))) {\n context.activeLoopIterations.delete(nodeId);\n await closeIterator(iterator);\n return normalEmptyResult();\n }\n if (isMatchingContinue(result, loopLabels(node))) {\n index += 1;\n continue;\n }\n if (result.kind !== \"normal\") {\n context.activeLoopIterations.delete(nodeId);\n await closeIterator(iterator);\n return result;\n }\n index += 1;\n }\n}\n\nasync function evaluateForInStatement(\n node: ForInStatement,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const right = await evaluateNode(node.right, context);\n if (right.kind !== \"normal\") {\n return right;\n }\n\n const object = forInObject(right.value);\n if (object === undefined) {\n return normalEmptyResult();\n }\n\n const restoredIteration = consumeRestoredLoopIteration(node, context);\n const keys =\n restoredIteration === undefined || typeof restoredIteration === \"number\"\n ? forInKeys(object)\n : restoredIteration.values.map(String);\n const restoredIndex =\n typeof restoredIteration === \"number\" ? restoredIteration : (restoredIteration?.index ?? 0);\n for (let index = restoredIndex; index < keys.length; index += 1) {\n context.activeLoopIterations.set(node.nodeId ?? -1, { index, values: keys });\n const key = keys[index]!;\n if (!(key in object)) {\n continue;\n }\n\n const scope = context.scope.child();\n const binding = await bindForInLoopVariable(node.left, key, scope, context);\n if (!binding.ok) {\n context.activeLoopIterations.delete(node.nodeId ?? -1);\n return binding.result;\n }\n\n const iterationContext = createLoopIterationContext(context, scope);\n emitLoopIterationBreakpoint(node, iterationContext);\n const result = await evaluateNode(node.body, iterationContext);\n if (isMatchingBreak(result, loopLabels(node))) {\n context.activeLoopIterations.delete(node.nodeId ?? -1);\n return normalEmptyResult();\n }\n if (isMatchingContinue(result, loopLabels(node))) {\n continue;\n }\n if (result.kind !== \"normal\") {\n context.activeLoopIterations.delete(node.nodeId ?? -1);\n return result;\n }\n }\n\n context.activeLoopIterations.delete(node.nodeId ?? -1);\n return normalEmptyResult();\n}\n\nfunction forInObject(value: SandboxValue): object | undefined {\n if (value === null || value === undefined || isSandboxClosure(value) || isSandboxPromise(value)) {\n return undefined;\n }\n if (\n typeof value === \"string\" ||\n Array.isArray(value) ||\n isFloat32Array(value) ||\n isPlainForInObject(value)\n ) {\n return Object(value);\n }\n return undefined;\n}\n\nfunction forInKeys(object: object): string[] {\n const keys = Object.keys(object);\n return Array.isArray(object) ? keys.filter(isArrayIndexKey) : keys;\n}\n\nfunction isArrayIndexKey(key: string): boolean {\n const index = Number(key);\n return Number.isInteger(index) && index >= 0 && index < 4_294_967_295 && String(index) === key;\n}\n\nfunction isPlainForInObject(value: unknown): value is Record<string, SandboxValue> {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nasync function bindForInLoopVariable(\n left: ForInStatement[\"left\"],\n key: string,\n scope: Scope,\n context: EvaluationContext\n): Promise<BindPatternResult> {\n if (left.type === \"Identifier\") {\n return bindPattern(left, key, { assign: true }, scope, {\n evaluate: (patternNode) => evaluateNode(patternNode, { ...context, scope })\n });\n }\n\n const [declarator] = left.declarations;\n if (left.declarations.length !== 1 || declarator?.id.type !== \"Identifier\") {\n throw new TypeError(\"for...in keys are strings; destructure inside the body\");\n }\n return bindPattern(declarator.id, key, { kind: left.kind }, scope, {\n evaluate: (patternNode) => evaluateNode(patternNode, { ...context, scope })\n });\n}\n\nfunction normalEmptyResult(): EvaluationResult {\n return { kind: \"normal\", hasValue: false, value: undefined };\n}\n\nasync function evaluateForStatement(\n node: ForStatement,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const loopScope = context.scope.child();\n const loopBindingNames = getForStatementBindingNames(node);\n const loopContext = {\n ...context,\n scope: loopScope\n };\n\n if (node.init !== undefined) {\n const init = await evaluateNode(node.init, loopContext);\n if (init.kind !== \"normal\") {\n return init;\n }\n }\n\n while (true) {\n context.budget.visitNode();\n context.stats.nodeVisits += 1;\n\n if (node.test !== undefined) {\n const test = await evaluateNode(node.test, loopContext);\n if (test.kind !== \"normal\") {\n return test;\n }\n\n if (!isTruthy(test.value)) {\n return {\n kind: \"normal\",\n hasValue: false,\n value: undefined\n };\n }\n }\n\n const iterationScope =\n loopBindingNames.length === 0 ? loopScope : loopScope.iterationChild(loopBindingNames);\n const iterationContext = {\n ...loopContext,\n ...createLoopIterationContext(loopContext, iterationScope)\n };\n emitLoopIterationBreakpoint(node, iterationContext);\n const result = await evaluateNode(node.body, iterationContext);\n\n if (isMatchingBreak(result, loopLabels(node))) {\n return {\n kind: \"normal\",\n hasValue: false,\n value: undefined\n };\n }\n\n if (result.kind !== \"normal\" && !isMatchingContinue(result, loopLabels(node))) {\n return result;\n }\n\n const updateScope =\n loopBindingNames.length === 0\n ? iterationScope\n : iterationScope.iterationChild(loopBindingNames);\n const updateContext = {\n ...loopContext,\n scope: updateScope\n };\n\n if (node.update !== undefined) {\n const update = await evaluateNode(node.update, updateContext);\n if (update.kind !== \"normal\") {\n return update;\n }\n }\n\n loopScope.copyInitializedBindingsFrom(updateScope, loopBindingNames);\n }\n}\n\nasync function evaluateWhileStatement(\n node: WhileStatement,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n while (true) {\n const test = await evaluateNode(node.test, context);\n if (test.kind !== \"normal\") {\n return test;\n }\n\n if (!isTruthy(test.value)) {\n return {\n kind: \"normal\",\n hasValue: false,\n value: undefined\n };\n }\n\n const iterationContext = createLoopIterationContext(context, context.scope);\n emitLoopIterationBreakpoint(node, iterationContext);\n const result = await evaluateNode(node.body, iterationContext);\n\n if (isMatchingBreak(result, loopLabels(node))) {\n return {\n kind: \"normal\",\n hasValue: false,\n value: undefined\n };\n }\n\n if (isMatchingContinue(result, loopLabels(node))) {\n continue;\n }\n\n if (result.kind !== \"normal\") {\n return result;\n }\n }\n}\n\nasync function evaluateDoWhileStatement(\n node: DoWhileStatement,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n while (true) {\n const iterationContext = createLoopIterationContext(context, context.scope);\n emitLoopIterationBreakpoint(node, iterationContext);\n const result = await evaluateNode(node.body, iterationContext);\n\n if (isMatchingBreak(result, loopLabels(node))) {\n return {\n kind: \"normal\",\n hasValue: false,\n value: undefined\n };\n }\n\n if (result.kind !== \"normal\" && !isMatchingContinue(result, loopLabels(node))) {\n return result;\n }\n\n const test = await evaluateNode(node.test, context);\n if (test.kind !== \"normal\") {\n return test;\n }\n\n if (!isTruthy(test.value)) {\n return {\n kind: \"normal\",\n hasValue: false,\n value: undefined\n };\n }\n }\n}\n\nfunction emitLoopIterationBreakpoint(\n node: ForInStatement | ForOfStatement | ForStatement | WhileStatement | DoWhileStatement,\n context: EvaluationContext\n): void {\n emitResumeBreakpoint(context, {\n kind: \"loop-iteration\",\n nodeId: node.nodeId,\n span: node.span\n });\n}\n\nfunction createLoopIterationContext(context: EvaluationContext, scope: Scope): EvaluationContext {\n return {\n ...context,\n scope,\n snapshot: (currentScope: Scope) => {\n const snapshot = currentScope.snapshot();\n if (context.activeLoopIterations.size === 0) return snapshot;\n snapshot.loopIterations = {};\n for (const [nodeId, iteration] of context.activeLoopIterations) {\n if (\n typeof iteration !== \"number\" &&\n (isSandboxMap(iteration.values[0]) || isSandboxSet(iteration.values[0]))\n ) {\n const bindingName = `#for-of:${nodeId}`;\n snapshot.bindings[bindingName] = iteration.values;\n snapshot.loopIterations[nodeId] = { index: iteration.index, values: [bindingName] };\n } else {\n snapshot.loopIterations[nodeId] = iteration;\n }\n }\n return snapshot;\n }\n };\n}\n\nfunction consumeRestoredLoopIteration(\n node: ForInStatement | ForOfStatement,\n context: EvaluationContext\n): LoopIterationSnapshot | undefined {\n const nodeId = node.nodeId ?? -1;\n const iteration = context.restoredLoopIterations.get(nodeId);\n context.restoredLoopIterations.delete(nodeId);\n return iteration;\n}\n\nfunction consumeRestoredLoopIterationIndex(\n node: ForInStatement | ForOfStatement,\n context: EvaluationContext\n): number {\n const iteration = consumeRestoredLoopIteration(node, context);\n return typeof iteration === \"number\" ? iteration : (iteration?.index ?? 0);\n}\n\nfunction snapshotableIterationValues(value: SandboxValue): SandboxValue[] | undefined {\n if (typeof value === \"string\") {\n return Array.from(value);\n }\n if (Array.isArray(value)) {\n return value;\n }\n return undefined;\n}\n\nfunction isMatchingBreak(result: EvaluationResult, labels: string[] | string | undefined): boolean {\n return (\n result.kind === \"break\" && (result.label === undefined || hasLoopLabel(labels, result.label))\n );\n}\n\nfunction isMatchingContinue(\n result: EvaluationResult,\n labels: string[] | string | undefined\n): boolean {\n return (\n result.kind === \"continue\" && (result.label === undefined || hasLoopLabel(labels, result.label))\n );\n}\n\nfunction loopLabels(\n node: ForInStatement | ForOfStatement | ForStatement | WhileStatement | DoWhileStatement\n): string[] | string | undefined {\n return node.labels ?? node.label;\n}\n\nfunction hasLoopLabel(labels: string[] | string | undefined, target: string): boolean {\n return Array.isArray(labels) ? labels.includes(target) : labels === target;\n}\n\nasync function bindForOfLoopVariable(\n left: ForOfStatement[\"left\"],\n value: SandboxValue,\n scope: Scope,\n context: EvaluationContext\n): Promise<BindPatternResult> {\n if (left.type === \"Identifier\") {\n return bindPattern(left, value, { assign: true }, scope, {\n evaluate: (patternNode) => evaluateNode(patternNode, { ...context, scope })\n });\n }\n\n if (left.type !== \"VariableDeclaration\") {\n throw new TypeError(`Unsupported for...of left-hand side '${left.type}'.`);\n }\n\n const [declarator] = left.declarations;\n if (left.declarations.length !== 1 || declarator === undefined) {\n throw new TypeError(\"for...of declarations must include exactly one declarator.\");\n }\n\n return bindPattern(declarator.id, value, { kind: left.kind }, scope, {\n evaluate: (patternNode) => evaluateNode(patternNode, { ...context, scope })\n });\n}\n\nasync function evaluateExpressionStatement(\n node: ExpressionStatement,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n return evaluateNode(node.expression, context);\n}\n\nasync function evaluateBreakStatement(\n node: BreakStatement,\n _context: EvaluationContext\n): Promise<EvaluationResult> {\n return {\n kind: \"break\",\n hasValue: false,\n ...(node.label === undefined ? {} : { label: node.label }),\n node,\n value: undefined\n };\n}\n\nasync function evaluateContinueStatement(\n node: ContinueStatement,\n _context: EvaluationContext\n): Promise<EvaluationResult> {\n return {\n kind: \"continue\",\n hasValue: false,\n ...(node.label === undefined ? {} : { label: node.label }),\n node,\n value: undefined\n };\n}\n\nasync function evaluateReturnStatement(\n node: ReturnStatement,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n if (node.argument === undefined) {\n return {\n kind: \"return\",\n hasValue: false,\n value: undefined\n };\n }\n\n const argument = await evaluateNode(node.argument, context);\n if (argument.kind !== \"normal\") {\n return argument;\n }\n\n return {\n kind: \"return\",\n hasValue: argument.hasValue,\n value: argument.value\n };\n}\n\nasync function evaluateYieldExpression(\n node: YieldExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n if (context.generatorYield === undefined) {\n throw new TypeError(\"yield is only valid inside a generator.\");\n }\n\n if (\n context.generatorResume !== undefined &&\n node.nodeId !== context.generatorResume.yieldNodeId\n ) {\n return { kind: \"normal\", hasValue: true, value: undefined };\n }\n\n if (node.delegate) {\n return evaluateYieldDelegate(node, context);\n }\n\n const argument =\n context.generatorResume !== undefined || node.argument === undefined\n ? { kind: \"normal\" as const, hasValue: true, value: undefined }\n : await evaluateNode(node.argument, context);\n if (argument.kind !== \"normal\") {\n return argument;\n }\n\n const completionPromise = context.generatorYield(\n allocateProducedSandboxValue(argument.value, context.budget),\n node.nodeId\n );\n emitResumeBreakpoint(context, {\n kind: \"generator-yield\",\n nodeId: node.nodeId,\n span: node.span\n });\n const completion = await completionPromise;\n context.generatorResume = undefined;\n return generatorCompletionResult(completion);\n}\n\nasync function evaluateYieldDelegate(\n node: YieldExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const argument = await evaluateNode(node.argument!, context);\n if (argument.kind !== \"normal\") {\n return argument;\n }\n const iterator = getSandboxIterator(argument.value);\n if (iterator === undefined) {\n throw new TypeError(`${String(argument.value)} is not a supported iterable`);\n }\n\n let completion: { type: \"normal\" | \"return\" | \"throw\"; value: SandboxValue } = {\n type: \"normal\",\n value: undefined\n };\n const replay = context.generatorResume?.sent ?? [];\n let replayIndex = 0;\n while (true) {\n const method = completion.type === \"normal\" ? \"next\" : completion.type;\n const iteratorMethod = iterator[method];\n if (iteratorMethod === undefined) {\n if (completion.type === \"throw\") {\n throw completion.value;\n }\n return generatorCompletionResult(completion);\n }\n const result = await iteratorMethod(completion.value);\n if (result.done) {\n if (completion.type === \"return\") {\n return generatorCompletionResult({ type: \"return\", value: result.value });\n }\n return {\n kind: \"normal\",\n hasValue: true,\n value: result.value\n };\n }\n if (replayIndex < replay.length - 1) {\n completion = replay[replayIndex + 1] as typeof completion;\n replayIndex += 1;\n continue;\n }\n const completionPromise = context.generatorYield!(\n allocateProducedSandboxValue(result.value, context.budget),\n node.nodeId\n );\n emitResumeBreakpoint(context, {\n kind: \"generator-yield\",\n nodeId: node.nodeId,\n span: node.span\n });\n completion = (await completionPromise) as typeof completion;\n context.generatorResume = undefined;\n }\n}\n\nfunction generatorCompletionResult(completion: {\n type: \"normal\" | \"return\" | \"throw\";\n value: unknown;\n}): EvaluationResult {\n if (completion.type === \"throw\") {\n return { kind: \"throw\", hasValue: true, value: completion.value as SandboxValue };\n }\n if (completion.type === \"return\") {\n return { kind: \"return\", hasValue: true, value: completion.value as SandboxValue };\n }\n return { kind: \"normal\", hasValue: true, value: completion.value as SandboxValue };\n}\n\nasync function evaluateThrowStatement(\n node: ThrowStatement,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n return evaluateThrowStatementResult(node, context, evaluateNode);\n}\n\nasync function evaluateTryStatement(\n node: TryStatement,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n return evaluateTryStatementResult(node, context, evaluateNode);\n}\n\nasync function evaluateUnaryExpression(\n node: UnaryExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n if (node.operator === \"delete\") {\n return evaluateDeleteExpression(node, context);\n }\n\n if (\n node.operator === \"typeof\" &&\n node.argument.type === \"Identifier\" &&\n !context.scope.lookup(node.argument.name).found\n ) {\n return {\n kind: \"normal\",\n hasValue: true,\n value: \"undefined\"\n };\n }\n\n const argument = await evaluateNode(node.argument, context);\n if (argument.kind !== \"normal\") {\n return argument;\n }\n\n if (node.operator === \"void\") {\n return {\n kind: \"normal\",\n hasValue: true,\n value: undefined\n };\n }\n\n return {\n kind: \"normal\",\n hasValue: true,\n value: await applyUnaryOperator(node.operator, argument.value, context)\n };\n}\n\nasync function evaluateDeleteExpression(\n node: UnaryExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n if (node.argument.type !== \"MemberExpression\") {\n throw createError(\n \"UNSUPPORTED_NODE\",\n node,\n \"Unary operator 'delete' requires a member target.\"\n );\n }\n\n const member = await evaluateMemberAccess(node.argument, context);\n if (member.kind === \"error\") {\n return member;\n }\n if (member.kind === \"completion\") {\n return member.result;\n }\n\n if (member.kind === \"nullish\") {\n if (node.argument.optional) {\n return {\n kind: \"normal\",\n hasValue: true,\n value: true\n };\n }\n\n throw new TypeError(\"Cannot delete properties of null or undefined.\");\n }\n\n if (!isIndexableSandboxValue(member.object)) {\n throw new TypeError(\"Unary operator 'delete' requires a sandbox object property.\");\n }\n\n deleteSandboxProperty(member.object, member.property);\n\n return {\n kind: \"normal\",\n hasValue: true,\n value: true\n };\n}\n\nasync function evaluateUpdateExpression(\n node: UpdateExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n if (node.argument.type === \"Identifier\") {\n return evaluateIdentifierUpdateExpression(node, context);\n }\n\n return evaluateMemberUpdateExpression(node, context);\n}\n\nasync function evaluateIdentifierUpdateExpression(\n node: UpdateExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n if (node.argument.type !== \"Identifier\") {\n throw new TypeError(\"Expected identifier update target.\");\n }\n\n const binding = context.scope.lookup(node.argument.name);\n if (!binding.found) {\n return {\n kind: \"error\",\n error: createError(\n \"UNBOUND_IDENTIFIER\",\n node.argument,\n `Identifier '${node.argument.name}' is not defined.`\n )\n };\n }\n\n const current = toNumber(await toNumericPrimitive(binding.value, context));\n const next = node.operator === \"++\" ? current + 1 : current - 1;\n context.scope.assign(node.argument.name, next);\n\n return {\n kind: \"normal\",\n hasValue: true,\n value: node.prefix ? next : current\n };\n}\n\nasync function evaluateMemberUpdateExpression(\n node: UpdateExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n if (node.argument.type !== \"MemberExpression\") {\n throw new TypeError(\"Expected member update target.\");\n }\n\n const member = await evaluateMemberAccess(node.argument, context);\n if (member.kind === \"error\") {\n return member;\n }\n if (member.kind === \"completion\") {\n return member.result;\n }\n if (member.kind === \"nullish\") {\n throw new TypeError(\"Cannot update properties of null or undefined.\");\n }\n const current = toNumber(\n await toNumericPrimitive(getPropertyValue(member.object, member.property, context), context)\n );\n const next = node.operator === \"++\" ? current + 1 : current - 1;\n setSandboxProperty(member.object, member.property, next);\n\n return {\n kind: \"normal\",\n hasValue: true,\n value: node.prefix ? next : current\n };\n}\n\nasync function evaluateMemberExpression(\n node: MemberExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const member = await evaluateMemberAccess(node, context);\n if (member.kind === \"error\") return member;\n if (member.kind === \"completion\") return member.result;\n if (member.kind === \"nullish\") {\n if (node.optional) return { kind: \"normal\", hasValue: true, value: undefined };\n throw new TypeError(\"Cannot read properties of null or undefined.\");\n }\n return {\n kind: \"normal\",\n hasValue: true,\n value: getPropertyValue(member.object, member.property, context)\n };\n}\n\nfunction getPropertyValue(\n target: InterpreterValue,\n property: string | number,\n context: EvaluationContext\n): SandboxValue {\n if (typeof target === \"string\") return getStringMember(target, property, context.budget);\n if (typeof target === \"number\") return getNumberMember(target, property, context.budget);\n if (typeof target === \"boolean\") return undefined;\n if (isFloat32Array(target)) return getFloat32Member(target, property, context.budget);\n if (isSandboxMap(target)) return getMapMember(target, property, createMapMethodOptions(context));\n if (isSandboxSet(target)) return getSetMember(target, property, createSetMethodOptions(context));\n if (isSandboxGenerator(target)) return getGeneratorMember(target, property, context.budget);\n if (isSandboxClosure(target)) return getClosureMemberValue(target, property, context);\n if (isSandboxPromise(target)) return getPromiseMember(property, context.budget);\n if (isSandboxRegex(target)) return getRegexMember(target, property);\n if (!isIndexableSandboxValue(target)) {\n throw new TypeError(\"Attempted to read a property from a non-object value.\");\n }\n return getMemberValue(target, property, context);\n}\n\nasync function evaluateCallExpression(\n node: CallExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n if (node.callee.type === \"MemberExpression\") {\n context.budget.visitNode();\n context.stats.nodeVisits += 1;\n return evaluateMemberCallExpression(node, context);\n }\n\n const callee = await evaluateNode(node.callee, context);\n if (callee.kind !== \"normal\") {\n return callee;\n }\n\n return evaluateResolvedCallExpression(node, callee.value, context);\n}\n\nasync function evaluateNewExpression(\n node: NewExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const callee = await evaluateNode(node.callee, context);\n if (callee.kind !== \"normal\") {\n return callee;\n }\n\n const name = getConstructorName(node.callee);\n const args = await evaluateCallArguments(node.arguments, context);\n if (!args.ok) {\n return args.result;\n }\n if (!isSandboxClosure(callee.value) || callee.value.construct === undefined) {\n throw new TypeError(`${name} is not a constructor.`);\n }\n\n const stack = [...context.callStack, formatStackFrame(node, callee.value.name ?? name)];\n return {\n kind: \"normal\",\n hasValue: true,\n value: await invokeSandboxClosure(\n callee.value,\n args.value,\n context,\n stack,\n node.span,\n undefined,\n true\n )\n };\n}\n\nfunction getConstructorName(callee: Expression): string {\n if (callee.type === \"Identifier\") {\n return callee.name;\n }\n if (callee.type === \"MemberExpression\") {\n if (!callee.computed && callee.property.type === \"Identifier\") {\n return callee.property.name;\n }\n if (callee.computed && callee.property.type === \"StringLiteral\") {\n return callee.property.value;\n }\n if (callee.computed && callee.property.type === \"NumericLiteral\") {\n return String(callee.property.value);\n }\n }\n return \"<anonymous>\";\n}\n\nfunction formatStackFrame(node: { span: SourceSpan }, name: string | undefined): string {\n return ` at ${name ?? \"<anonymous>\"} (line ${node.span.start.line}, column ${node.span.start.column})`;\n}\n\nfunction createError(\n code: InterpreterErrorCode,\n node: ParseResult,\n message: string,\n stackFrames: readonly string[] = []\n): InterpreterError {\n const name = code === \"UNBOUND_IDENTIFIER\" ? \"ReferenceError\" : \"Error\";\n const stack = [...stackFrames, formatStackFrame(node, undefined)];\n return {\n code,\n message,\n name,\n nodeId: node.nodeId,\n nodeType: node.type,\n span: node.span,\n stack: formatErrorStack(name, message, stack)\n };\n}\n\nfunction attachFatalSandboxErrorContext(\n error: SandboxError,\n node: ParseResult,\n stackFrames: readonly string[]\n): void {\n attachErrorSpan(error, node.span);\n replaceErrorStack(error, stackFrames);\n}\n\nasync function evaluateMemberAccess(\n node: MemberExpression,\n context: EvaluationContext\n): Promise<\n | {\n kind: \"error\";\n error: InterpreterError;\n }\n | {\n kind: \"completion\";\n result: EvaluationResult;\n }\n | {\n kind: \"nullish\";\n }\n | {\n kind: \"resolved\";\n object: InterpreterValue;\n property: string | number;\n }\n> {\n const object = await evaluateNode(node.object, context);\n if (object.kind !== \"normal\") {\n return {\n kind: \"completion\",\n result: object\n };\n }\n\n if ((object.value === null || object.value === undefined) && node.optional) {\n return {\n kind: \"nullish\"\n };\n }\n\n const property: HelperResult<string | number> = node.computed\n ? await evaluateMemberProperty(node.property, context)\n : { ok: true, value: getStaticPropertyName(node.property) };\n if (!property.ok) {\n return property.result.kind === \"error\"\n ? {\n kind: \"error\",\n error: property.result.error\n }\n : {\n kind: \"completion\",\n result: property.result\n };\n }\n\n if (object.value === null || object.value === undefined) {\n return {\n kind: \"nullish\"\n };\n }\n\n return {\n kind: \"resolved\",\n object: object.value,\n property: property.value\n };\n}\n\nasync function evaluateMemberProperty(\n node: MemberExpression[\"property\"],\n context: EvaluationContext\n): Promise<HelperResult<string | number>> {\n const property = await evaluateNode(node, context);\n if (property.kind !== \"normal\") {\n return {\n ok: false,\n result: property\n };\n }\n\n if (typeof property.value === \"string\" || typeof property.value === \"number\") {\n return {\n ok: true,\n value: property.value\n };\n }\n\n throw new TypeError(\"Computed property access requires a string or number key.\");\n}\n\nasync function evaluateObjectPropertyKey(\n node: Property,\n context: EvaluationContext\n): Promise<HelperResult<string | number>> {\n if (!node.computed) {\n return {\n ok: true,\n value: getStaticPropertyName(node.key)\n };\n }\n\n return evaluateMemberProperty(node.key, context);\n}\n\nfunction getStaticPropertyName(node: MemberExpression[\"property\"]): string | number {\n if (node.type === \"Identifier\") {\n return node.name;\n }\n\n if (node.type === \"StringLiteral\" || node.type === \"NumericLiteral\") {\n return node.value;\n }\n\n throw new TypeError(`Unsupported static property node '${node.type}'.`);\n}\n\nasync function evaluateMemberCallExpression(\n node: CallExpression,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n if (node.callee.type !== \"MemberExpression\") {\n throw new TypeError(\"Expected member call expression.\");\n }\n\n const member = await evaluateMemberAccess(node.callee, context);\n if (member.kind === \"error\") {\n return member;\n }\n if (member.kind === \"completion\") {\n return member.result;\n }\n\n if (member.kind === \"nullish\") {\n if (node.optional || node.callee.optional) {\n return {\n kind: \"normal\",\n hasValue: true,\n value: undefined\n };\n }\n\n throw new TypeError(\"Cannot read properties of null or undefined.\");\n }\n\n if (typeof member.object === \"string\" && isStringMethodName(member.property)) {\n return evaluateStringMethodCall(node, member.object, member.property, context);\n }\n\n if (typeof member.object === \"number\" && isNumberMethodName(member.property)) {\n return evaluateNumberMethodCall(node, member.object, member.property, context);\n }\n\n if (\n Array.isArray(member.object) &&\n isArrayMethodName(member.property) &&\n !Object.hasOwn(member.object, member.property)\n ) {\n return evaluateArrayMethodCall(node, member.object, member.property, context);\n }\n\n if (isSandboxMap(member.object) && isMapMethodName(member.property)) {\n return evaluateMapMethodCall(node, member.object, member.property, context);\n }\n\n if (isSandboxSet(member.object) && isSetMethodName(member.property)) {\n return evaluateSetMethodCall(node, member.object, member.property, context);\n }\n\n if (typeof member.object === \"string\") {\n return evaluatePrimitiveMemberCall(\n node,\n \"String\",\n member.property,\n getStringMember(member.object, member.property, context.budget),\n context\n );\n }\n\n if (typeof member.object === \"number\") {\n return evaluatePrimitiveMemberCall(\n node,\n \"Number\",\n member.property,\n getNumberMember(member.object, member.property, context.budget),\n context\n );\n }\n\n if (Array.isArray(member.object) && !Object.hasOwn(member.object, member.property)) {\n return evaluatePrimitiveMemberCall(\n node,\n \"Array\",\n member.property,\n getArrayMemberValue(member.object, member.property, context),\n context\n );\n }\n\n if (isSandboxMap(member.object)) {\n return evaluatePrimitiveMemberCall(\n node,\n \"Map\",\n member.property,\n getMapMember(member.object, member.property, createMapMethodOptions(context)),\n context\n );\n }\n\n if (isFloat32Array(member.object)) {\n return evaluateResolvedCallExpression(\n node,\n getFloat32Member(member.object, member.property, context.budget),\n context,\n member.object\n );\n }\n\n if (isSandboxSet(member.object)) {\n return evaluatePrimitiveMemberCall(\n node,\n \"Set\",\n member.property,\n getSetMember(member.object, member.property, createSetMethodOptions(context)),\n context\n );\n }\n\n if (isSandboxGenerator(member.object)) {\n const memberValue = getGeneratorMember(member.object, member.property, context.budget);\n if (memberValue === undefined) {\n throw new TypeError(`Generator#${String(member.property)} is not a supported method.`);\n }\n return evaluateResolvedCallExpression(node, memberValue, context, member.object);\n }\n\n if (isSandboxClosure(member.object)) {\n const memberValue = getClosureMemberValue(member.object, member.property, context);\n if (memberValue === undefined) {\n throw new TypeError(`Function#${String(member.property)} is not a supported method.`);\n }\n\n return evaluateResolvedCallExpression(node, memberValue, context, member.object);\n }\n\n if (isSandboxPromise(member.object)) {\n return evaluateResolvedCallExpression(\n node,\n getPromiseMember(member.property, context.budget),\n context,\n member.object\n );\n }\n\n if (isSandboxRegex(member.object) && isRegexMethodName(member.property)) {\n return evaluateResolvedCallExpression(\n node,\n getRegexMember(member.object, member.property),\n context,\n member.object\n );\n }\n\n if (!isIndexableSandboxValue(member.object)) {\n throw new TypeError(\"Attempted to read a property from a non-object value.\");\n }\n\n return evaluateResolvedCallExpression(\n node,\n getMemberValue(member.object, member.property, context),\n context,\n member.object\n );\n}\n\nfunction evaluatePrimitiveMemberCall(\n node: CallExpression,\n receiverType: \"Array\" | \"Map\" | \"Number\" | \"Set\" | \"String\",\n property: string | number,\n value: SandboxValue | undefined,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n if (value === undefined) {\n throw new TypeError(`${receiverType}#${String(property)} is not a supported method.`);\n }\n\n return evaluateResolvedCallExpression(node, value, context);\n}\n\nasync function evaluateStringMethodCall(\n node: CallExpression,\n target: string,\n methodName: Parameters<typeof validateStringMethodArguments>[0],\n context: EvaluationContext\n): Promise<EvaluationResult> {\n validateStringMethodArguments(methodName, node.arguments as Expression[]);\n\n const args = await evaluateCallArguments(node.arguments, context);\n if (!args.ok) {\n return args.result;\n }\n\n const leaveCall = context.budget.enterCall();\n\n try {\n return {\n kind: \"normal\",\n hasValue: true,\n value: await callStringMethod(\n target,\n methodName,\n args.value,\n context.budget,\n (closure, closureArgs) =>\n invokeSandboxClosure(closure, closureArgs, context, context.callStack),\n context.compilation\n )\n };\n } catch (error) {\n if (isFatalSandboxError(error)) {\n throw error;\n }\n\n throw captureException(error, [...context.callStack, formatStackFrame(node, methodName)], true);\n } finally {\n leaveCall();\n }\n}\n\nasync function evaluateArrayMethodCall(\n node: CallExpression,\n target: SandboxArray,\n methodName: ArrayMethodName,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const args = await evaluateCallArguments(node.arguments, context);\n if (!args.ok) {\n return args.result;\n }\n\n const leaveCall = context.budget.enterCall();\n\n try {\n return {\n kind: \"normal\",\n hasValue: true,\n value: await callArrayMethod(\n target,\n methodName,\n args.value,\n createArrayMethodOptions(context),\n context.callStack\n )\n };\n } catch (error) {\n if (isFatalSandboxError(error)) {\n throw error;\n }\n\n throw captureException(error, [...context.callStack, formatStackFrame(node, methodName)], true);\n } finally {\n leaveCall();\n }\n}\n\nasync function evaluateMapMethodCall(\n node: CallExpression,\n target: SandboxMap,\n methodName: MapMethodName,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const args = await evaluateCallArguments(node.arguments, context);\n if (!args.ok) {\n return args.result;\n }\n\n const leaveCall = context.budget.enterCall();\n try {\n return {\n kind: \"normal\",\n hasValue: true,\n value: await callMapMethod(\n target,\n methodName,\n args.value,\n createMapMethodOptions(context),\n context.callStack\n )\n };\n } catch (error) {\n if (isFatalSandboxError(error)) {\n throw error;\n }\n throw captureException(error, [...context.callStack, formatStackFrame(node, methodName)], true);\n } finally {\n leaveCall();\n }\n}\n\nasync function evaluateSetMethodCall(\n node: CallExpression,\n target: SandboxSet,\n methodName: SetMethodName,\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const args = await evaluateCallArguments(node.arguments, context);\n if (!args.ok) {\n return args.result;\n }\n\n const leaveCall = context.budget.enterCall();\n try {\n return {\n kind: \"normal\",\n hasValue: true,\n value: await callSetMethod(\n target,\n methodName,\n args.value,\n createSetMethodOptions(context),\n context.callStack\n )\n };\n } catch (error) {\n if (isFatalSandboxError(error)) {\n throw error;\n }\n throw captureException(error, [...context.callStack, formatStackFrame(node, methodName)], true);\n } finally {\n leaveCall();\n }\n}\n\nasync function applyUnaryOperator(\n operator: UnaryExpression[\"operator\"],\n value: InterpreterValue,\n context: EvaluationContext\n): Promise<InterpreterValue> {\n switch (operator) {\n case \"!\":\n return !value;\n case \"delete\":\n return true;\n case \"typeof\":\n return describeTypeofValue(value);\n case \"void\":\n return undefined;\n case \"+\":\n return toNumber(await toNumericPrimitive(value, context));\n case \"-\":\n return -toNumber(await toNumericPrimitive(value, context));\n case \"~\":\n return ~toNumber(await toNumericPrimitive(value, context));\n }\n}\n\nfunction describeTypeofValue(value: InterpreterValue): string {\n if (isSandboxClosure(value)) {\n return \"function\";\n }\n\n if (value === null || typeof value === \"object\") {\n return \"object\";\n }\n\n return typeof value;\n}\n\nfunction isTruthy(value: InterpreterValue): boolean {\n return Boolean(value);\n}\n\nfunction applyBinaryOperator(\n node: BinaryExpression,\n left: InterpreterValue,\n right: InterpreterValue,\n context: EvaluationContext\n): InterpreterValue {\n switch (node.operator) {\n case \"+\":\n return applyAdditionOperator(left, right, context);\n case \"-\":\n return toNumber(left) - toNumber(right);\n case \"*\":\n return toNumber(left) * toNumber(right);\n case \"/\":\n return toNumber(left) / toNumber(right);\n case \"%\":\n return toNumber(left) % toNumber(right);\n case \"**\":\n return toNumber(left) ** toNumber(right);\n case \"<\":\n return compareRelational(left, right, \"<\");\n case \"<=\":\n return compareRelational(left, right, \"<=\");\n case \">\":\n return compareRelational(left, right, \">\");\n case \">=\":\n return compareRelational(left, right, \">=\");\n case \"===\":\n return left === right;\n case \"!==\":\n return left !== right;\n case \"==\":\n return isLooselyEqual(left, right);\n case \"!=\":\n return !isLooselyEqual(left, right);\n case \"&\":\n return toNumber(left) & toNumber(right);\n case \"|\":\n return toNumber(left) | toNumber(right);\n case \"^\":\n return toNumber(left) ^ toNumber(right);\n case \"<<\":\n return toNumber(left) << toNumber(right);\n case \">>\":\n return toNumber(left) >> toNumber(right);\n case \">>>\":\n return toNumber(left) >>> toNumber(right);\n case \"instanceof\":\n while (isSandboxClosure(right) && right.boundTarget !== undefined) right = right.boundTarget;\n if (isSandboxPromiseConstructor(right)) return isSandboxPromise(left);\n if (isSandboxMapConstructor(right) && isSandboxMap(left)) {\n return true;\n }\n if (isFloat32ArrayConstructor(right)) return isFloat32Array(left);\n if (isSandboxSetConstructor(right) && isSandboxSet(left)) {\n return true;\n }\n if (isSandboxErrorConstructorInstance(left, right)) {\n return true;\n }\n if (\n isSandboxClosure(right) &&\n right.construct !== undefined &&\n !isSandboxErrorConstructor(right)\n ) {\n throw new TypeError(\n \"Constructor prototypes are not supported; check a brand property instead.\"\n );\n }\n return false;\n case \"in\":\n throw createError(\"UNSUPPORTED_NODE\", node, \"Binary operator 'in' is not supported.\");\n }\n}\n\nasync function applyCompoundAssignmentOperator(\n operator: Exclude<AssignmentExpression[\"operator\"], \"=\" | \"&&=\" | \"||=\" | \"??=\">,\n left: InterpreterValue,\n right: InterpreterValue,\n context: EvaluationContext\n): Promise<InterpreterValue> {\n left = await toNumericPrimitive(left, context);\n right = await toNumericPrimitive(right, context);\n switch (operator) {\n case \"+=\":\n return applyAdditionOperator(left, right, context);\n case \"-=\":\n return toNumber(left) - toNumber(right);\n case \"*=\":\n return toNumber(left) * toNumber(right);\n case \"/=\":\n return toNumber(left) / toNumber(right);\n case \"%=\":\n return toNumber(left) % toNumber(right);\n case \"**=\":\n return toNumber(left) ** toNumber(right);\n case \"&=\":\n return toNumber(left) & toNumber(right);\n case \"|=\":\n return toNumber(left) | toNumber(right);\n case \"^=\":\n return toNumber(left) ^ toNumber(right);\n case \"<<=\":\n return toNumber(left) << toNumber(right);\n case \">>=\":\n return toNumber(left) >> toNumber(right);\n case \">>>=\":\n return toNumber(left) >>> toNumber(right);\n }\n}\n\nfunction applyAdditionOperator(\n left: InterpreterValue,\n right: InterpreterValue,\n context: EvaluationContext\n): InterpreterValue {\n const leftPrimitive = toPrimitive(left);\n const rightPrimitive = toPrimitive(right);\n\n if (typeof leftPrimitive === \"string\" || typeof rightPrimitive === \"string\") {\n return context.budget.allocateString(toString(leftPrimitive) + toString(rightPrimitive));\n }\n\n return toNumber(leftPrimitive) + toNumber(rightPrimitive);\n}\n\nfunction compareRelational(\n left: InterpreterValue,\n right: InterpreterValue,\n operator: \"<\" | \"<=\" | \">\" | \">=\"\n): boolean {\n const leftPrimitive = toPrimitive(left);\n const rightPrimitive = toPrimitive(right);\n\n if (typeof leftPrimitive === \"string\" && typeof rightPrimitive === \"string\") {\n switch (operator) {\n case \"<\":\n return leftPrimitive < rightPrimitive;\n case \"<=\":\n return leftPrimitive <= rightPrimitive;\n case \">\":\n return leftPrimitive > rightPrimitive;\n case \">=\":\n return leftPrimitive >= rightPrimitive;\n }\n }\n\n const leftNumber = toNumber(leftPrimitive);\n const rightNumber = toNumber(rightPrimitive);\n\n switch (operator) {\n case \"<\":\n return leftNumber < rightNumber;\n case \"<=\":\n return leftNumber <= rightNumber;\n case \">\":\n return leftNumber > rightNumber;\n case \">=\":\n return leftNumber >= rightNumber;\n }\n}\n\nfunction isLooselyEqual(left: InterpreterValue, right: InterpreterValue): boolean {\n const leftType = getCoercionType(left);\n const rightType = getCoercionType(right);\n\n if (leftType === rightType) {\n return left === right;\n }\n\n if ((left === null && right === undefined) || (left === undefined && right === null)) {\n return true;\n }\n\n if (leftType === \"number\" && rightType === \"string\") {\n return isLooselyEqual(left, toNumber(right));\n }\n\n if (leftType === \"string\" && rightType === \"number\") {\n return isLooselyEqual(toNumber(left), right);\n }\n\n if (leftType === \"boolean\") {\n return isLooselyEqual(toNumber(left), right);\n }\n\n if (rightType === \"boolean\") {\n return isLooselyEqual(left, toNumber(right));\n }\n\n if (isPrimitiveCoercionType(leftType) && rightType === \"object\") {\n return isLooselyEqual(left, toPrimitive(right));\n }\n\n if (leftType === \"object\" && isPrimitiveCoercionType(rightType)) {\n return isLooselyEqual(toPrimitive(left), right);\n }\n\n return false;\n}\n\nfunction isPrimitiveCoercionType(type: CoercionType): boolean {\n return type !== \"object\";\n}\n\ntype CoercionType = \"boolean\" | \"null\" | \"number\" | \"object\" | \"string\" | \"undefined\";\n\nfunction getCoercionType(value: InterpreterValue): CoercionType {\n if (value === null) {\n return \"null\";\n }\n\n if (value === undefined) {\n return \"undefined\";\n }\n\n if (typeof value === \"string\") {\n return \"string\";\n }\n\n if (typeof value === \"number\") {\n return \"number\";\n }\n\n if (typeof value === \"boolean\") {\n return \"boolean\";\n }\n\n return \"object\";\n}\n\nfunction toPrimitive(value: InterpreterValue): SandboxPrimitive {\n if (isPrimitiveCoercionType(getCoercionType(value))) {\n return value as SandboxPrimitive;\n }\n\n return toString(value);\n}\n\nasync function toNumericPrimitive(\n value: InterpreterValue,\n context: EvaluationContext\n): Promise<SandboxPrimitive> {\n if (isPrimitiveCoercionType(getCoercionType(value))) {\n return value as SandboxPrimitive;\n }\n\n if (isIndexableSandboxValue(value)) {\n for (const methodName of [\"valueOf\", \"toString\"] as const) {\n const method = getMemberValue(value, methodName, context);\n if (methodName === \"toString\" && method === undefined && !Object.hasOwn(value, methodName)) {\n return toString(value);\n }\n if (!isSandboxClosure(method)) {\n continue;\n }\n\n const result = await invokeSandboxClosure(\n method,\n [],\n context,\n context.callStack,\n undefined,\n value\n );\n if (isPrimitiveCoercionType(getCoercionType(result))) {\n return result as SandboxPrimitive;\n }\n }\n throw new TypeError(\"Cannot convert object to primitive value.\");\n }\n\n return toString(value);\n}\n\nfunction toNumber(value: InterpreterValue): number {\n if (typeof value === \"number\") {\n return value;\n }\n\n if (typeof value === \"string\") {\n return Number(value);\n }\n\n if (typeof value === \"boolean\") {\n return value ? 1 : 0;\n }\n\n if (value === null) {\n return 0;\n }\n\n if (value === undefined) {\n return NaN;\n }\n\n return toNumber(toPrimitive(value));\n}\n\nfunction toString(value: InterpreterValue): string {\n if (Array.isArray(value)) {\n return value\n .map((entry) => (entry === null || entry === undefined ? \"\" : toString(entry)))\n .join(\",\");\n }\n\n if (typeof value === \"object\" && value !== null) {\n return \"[object Object]\";\n }\n\n return String(value);\n}\n\nfunction isIndexableSandboxValue(value: SandboxValue): value is SandboxArray | SandboxObject {\n return Array.isArray(value) || isPlainSandboxObject(value);\n}\n\nfunction appendArrayValues(target: SandboxValue[], values: readonly SandboxValue[]): void {\n for (const value of values) {\n target.push(value);\n }\n}\n\nfunction isPlainSandboxObject(value: SandboxValue): value is SandboxObject {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !isSandboxClosure(value) &&\n !isSandboxMap(value) &&\n !isSandboxSet(value) &&\n !isSandboxPromise(value) &&\n !isSandboxRegex(value)\n );\n}\n\nfunction getMemberValue(\n target: SandboxArray | SandboxObject,\n property: string | number,\n context: EvaluationContext\n): SandboxValue {\n if (Array.isArray(target)) {\n return getArrayMemberValue(target, property, context);\n }\n\n return Object.hasOwn(target, String(property)) ? target[String(property)] : undefined;\n}\n\nfunction getArrayMemberValue(\n target: SandboxArray,\n property: string | number,\n context: EvaluationContext\n): SandboxValue | undefined {\n if (property === \"raw\" && taggedTemplateRawArrays.has(target)) {\n return taggedTemplateRawArrays.get(target);\n }\n\n return getArrayMember(target, property, createArrayMethodOptions(context));\n}\n\nfunction setSandboxProperty(\n target: SandboxValue,\n property: string | number,\n value: SandboxValue\n): void {\n if (isFloat32Array(target)) {\n setFloat32Member(target, property, value);\n return;\n }\n if (isSandboxRegex(target)) {\n setRegexMember(target, property, value);\n return;\n }\n if (!isIndexableSandboxValue(target)) {\n throw new TypeError(\"Assignment expressions require a sandbox object property.\");\n }\n const key = String(property);\n if (Array.isArray(target)) {\n assertCollectionMutable(target);\n if (key === \"length\" || isArrayIndexKey(key)) {\n (target as unknown as Record<string, SandboxValue>)[key] = value;\n return;\n }\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(target, key);\n if (descriptor !== undefined) {\n if (descriptor.writable !== true) {\n throw new TypeError(`Cannot assign to read only property '${key}'.`);\n }\n Object.defineProperty(target, key, { value });\n } else {\n defineSandboxProperty(target, key, value);\n }\n}\n\nfunction deleteSandboxProperty(\n target: SandboxArray | SandboxObject,\n property: string | number\n): void {\n if (Array.isArray(target)) {\n assertCollectionMutable(target);\n }\n delete (target as unknown as Record<string, SandboxValue>)[String(property)];\n}\n\nfunction getClosureMemberValue(\n target: SandboxClosure,\n property: string | number,\n context: EvaluationContext\n): SandboxValue | undefined {\n return getFunctionMember(target, property, createFunctionMethodOptions(context));\n}\n\nasync function evaluateResolvedCallExpression(\n node: CallExpression,\n callee: InterpreterValue,\n context: EvaluationContext,\n thisValue: SandboxValue = undefined\n): Promise<EvaluationResult> {\n if ((callee === null || callee === undefined) && node.optional) {\n return {\n kind: \"normal\",\n hasValue: true,\n value: undefined\n };\n }\n\n const args = await evaluateCallArguments(node.arguments, context);\n if (!args.ok) {\n return args.result;\n }\n\n if (!isSandboxClosure(callee)) {\n throw new TypeError(\"Attempted to call a non-function value.\");\n }\n\n return {\n kind: \"normal\",\n hasValue: true,\n value: await invokeSandboxClosure(\n callee,\n args.value,\n context,\n [...context.callStack, formatStackFrame(node, callee.name)],\n node.span,\n thisValue\n )\n };\n}\n\nasync function evaluateNumberMethodCall(\n node: CallExpression,\n target: number,\n methodName: Parameters<typeof callNumberMethod>[1],\n context: EvaluationContext\n): Promise<EvaluationResult> {\n const args = await evaluateCallArguments(node.arguments, context);\n if (!args.ok) {\n return args.result;\n }\n\n try {\n return {\n kind: \"normal\",\n hasValue: true,\n value: callNumberMethod(target, methodName, args.value, context.budget)\n };\n } catch (error) {\n if (isFatalSandboxError(error)) {\n throw error;\n }\n\n throw captureException(error, [...context.callStack, formatStackFrame(node, methodName)], true);\n }\n}\n\nfunction createArrayMethodOptions(context: EvaluationContext): ArrayMethodOptions {\n return {\n budget: context.budget,\n callClosure: (\n closure: Extract<InterpreterValue, { kind: \"fn\" }>,\n args: readonly SandboxValue[],\n stack: readonly string[],\n thisValue?: SandboxValue\n ) => invokeSandboxClosure(closure, args, context, stack, undefined, thisValue)\n };\n}\n\nfunction createMapMethodOptions(context: EvaluationContext): MapMethodOptions {\n return {\n budget: context.budget,\n callClosure: (closure, args, stack, thisValue) =>\n invokeSandboxClosure(closure, args, context, stack, undefined, thisValue)\n };\n}\n\nfunction createSetMethodOptions(context: EvaluationContext): SetMethodOptions {\n return {\n budget: context.budget,\n callClosure: (closure, args, stack, thisValue) =>\n invokeSandboxClosure(closure, args, context, stack, undefined, thisValue)\n };\n}\n\nfunction createFunctionMethodOptions(context: EvaluationContext): FunctionMethodOptions {\n return {\n callClosure: (closure, args, stack, thisValue, construct) =>\n invokeSandboxClosure(closure, args, context, stack, undefined, thisValue, construct)\n };\n}\n\nasync function invokeSandboxClosure(\n callee: Extract<InterpreterValue, { kind: \"fn\" }>,\n args: readonly SandboxValue[],\n context: EvaluationContext,\n stack: readonly string[],\n span?: SourceSpan,\n thisValue: SandboxValue = undefined,\n construct = false\n): Promise<SandboxValue> {\n const leaveCall = context.budget.enterCall();\n\n try {\n const invoke = construct ? callee.construct : callee.call;\n if (invoke === undefined) throw new TypeError(\"Value is not a constructor.\");\n const result = Reflect.apply(invoke, undefined, [\n args,\n {\n stack,\n thisValue,\n compilation: context.compilation,\n invokeClosure: (\n closure: SandboxClosure,\n argumentsList: readonly SandboxValue[],\n receiver: SandboxValue\n ) => invokeSandboxClosure(closure, argumentsList, context, stack, span, receiver),\n ...(span === undefined ? {} : { span })\n }\n ]);\n\n if (isSandboxPromise(result) && result.synchronousPrefix !== undefined) {\n await result.synchronousPrefix;\n }\n\n return !construct && callee.async === true\n ? normalizeClosureResult(\n wrapHostResult(result, stack, callee.sandbox === true),\n context.budget\n )\n : await wrapHostResult(result, stack, callee.sandbox === true);\n } catch (error) {\n if (isFatalSandboxError(error)) {\n throw error;\n }\n\n throw captureException(error, stack, callee.sandbox === true);\n } finally {\n leaveCall();\n }\n}\n\nasync function evaluateCallArguments(\n args: CallExpression[\"arguments\"],\n context: EvaluationContext\n): Promise<HelperResult<SandboxValue[]>> {\n const values: SandboxValue[] = [];\n\n for (const arg of args) {\n if (arg.type === \"SpreadElement\") {\n const spreadValues = await evaluateSpreadElement(arg, context);\n if (!spreadValues.ok) {\n return spreadValues;\n }\n\n appendArrayValues(values, spreadValues.value);\n context.budget.allocateArrayLength(values.length);\n continue;\n }\n\n const result = await evaluateNode(arg, context);\n if (result.kind !== \"normal\") {\n return {\n ok: false,\n result\n };\n }\n\n values.push(result.value);\n context.budget.allocateArrayLength(values.length);\n }\n\n return {\n ok: true,\n value: values\n };\n}\n\nasync function evaluateSpreadElement(\n node: SpreadElement,\n context: EvaluationContext\n): Promise<HelperResult<SandboxValue[]>> {\n const value = await evaluateNode(node.argument, context);\n if (value.kind !== \"normal\") {\n return {\n ok: false,\n result: value\n };\n }\n\n const iterator = getSpreadIterator(value.value);\n if (iterator === undefined) {\n throw new TypeError(\"Spread arguments must evaluate to an iterable.\");\n }\n\n const spreadValues: SandboxValue[] = [];\n while (true) {\n const next = await iterator.next();\n if (typeof next !== \"object\" || next === null) {\n throw new TypeError(\"Iterator result must be an object.\");\n }\n\n if (next.done === true) {\n break;\n }\n\n spreadValues.push(next.value as SandboxValue);\n context.budget.allocateArrayLength(spreadValues.length);\n }\n\n return {\n ok: true,\n value: spreadValues\n };\n}\n\nasync function evaluateObjectSpread(\n node: SpreadElement,\n context: EvaluationContext\n): Promise<HelperResult<Array<readonly [string, SandboxValue]>>> {\n const value = await evaluateNode(node.argument, context);\n if (value.kind !== \"normal\") {\n return {\n ok: false,\n result: value\n };\n }\n\n if (value.value === null || value.value === undefined) {\n return {\n ok: true,\n value: []\n };\n }\n\n if (isSandboxClosure(value.value) || isSandboxPromise(value.value)) {\n throw new TypeError(\n `Cannot spread ${describeObjectSpreadValue(value.value)} into object literal.`\n );\n }\n\n const spreadValue = Object(value.value) as Record<string, SandboxValue>;\n const keys = Object.keys(spreadValue);\n context.budget.allocateArrayLength(keys.length);\n\n return {\n ok: true,\n value: keys.map((key) => [key, spreadValue[key]] as const)\n };\n}\n\nfunction describeObjectSpreadValue(value: SandboxValue): string {\n if (value === null) {\n return \"null\";\n }\n\n if (value === undefined) {\n return \"undefined\";\n }\n\n if (isSandboxClosure(value)) {\n return \"function\";\n }\n\n if (isSandboxPromise(value)) {\n return \"promise\";\n }\n\n return typeof value;\n}\n\nfunction getSpreadIterator(value: SandboxValue): SandboxIterator | undefined {\n return getSandboxIterator(value);\n}\n\nasync function closeIterator(iterator: SandboxIterator): Promise<void> {\n if (iterator.generator && iterator.return !== undefined) {\n await iterator.return();\n }\n}\n\nfunction defineSandboxProperty(\n target: SandboxArray | SandboxObject,\n key: string,\n value: SandboxValue\n): void {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n}\n\nfunction isInterpreterError(value: unknown): value is InterpreterError {\n return (\n typeof value === \"object\" &&\n value !== null &&\n hasOwnProperty(value, \"code\") &&\n hasOwnProperty(value, \"message\") &&\n hasOwnProperty(value, \"nodeType\") &&\n hasOwnProperty(value, \"span\") &&\n (value.code === \"UNBOUND_IDENTIFIER\" || value.code === \"UNSUPPORTED_NODE\")\n );\n}\n\nfunction hasOwnProperty<Name extends PropertyKey>(\n value: object,\n name: Name\n): value is Record<Name, unknown> {\n return Object.prototype.hasOwnProperty.call(value, name);\n}\n\nfunction wrapHostResult(\n result: InterpreterValue | Promise<InterpreterValue> | PromiseLike<InterpreterValue>,\n stack: readonly string[],\n sandbox: boolean\n): InterpreterValue | Promise<InterpreterValue> {\n if (!isPromiseLikeResult(result)) {\n return result;\n }\n\n return Promise.resolve(result).then(\n (value) => value,\n (reason) =>\n Promise.reject(\n isInterpreterError(reason) || reason instanceof SandboxError || isCapturedException(reason)\n ? reason\n : createCapturedException(reason, stack, sandbox)\n )\n );\n}\n\nfunction captureException(error: unknown, stack: readonly string[], sandbox: boolean) {\n return isCapturedException(error) ? error : createCapturedException(error, stack, sandbox);\n}\n\nfunction isFatalSandboxError(error: unknown): error is SandboxError {\n return (\n error instanceof SandboxError && (error.code === \"budgetExceeded\" || error.code === \"reentry\")\n );\n}\n\nfunction isPromiseLikeResult(\n value: InterpreterValue | Promise<InterpreterValue> | PromiseLike<InterpreterValue>\n): value is PromiseLike<InterpreterValue> {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\n", "import { attachErrorSpan } from \"../error/shape.js\";\nimport type { Budget, CompileOwner } from \"../interp/budget.js\";\nimport type { HostCallJournal } from \"../interp/host-call.js\";\nimport { wrapCancelableBindings } from \"../interp/cancel.js\";\nimport {\n readHostOperationPolicy,\n wrapCallerInjectedBindings,\n type CallerInjectedBinding\n} from \"../interp/host-bridge.js\";\nimport type { SandboxValue } from \"../interp/values.js\";\nimport type {\n ImportDeclaration,\n ImportDefaultSpecifier,\n ImportNamespaceSpecifier,\n ImportSpecifier,\n Module,\n SourceSpan\n} from \"../parse/parser.js\";\nimport { registerPendingHostCallPolicy } from \"../snapshot/policy.js\";\n\nexport type ModuleExports =\n | ReadonlyMap<string, CallerInjectedBinding>\n | Record<string, CallerInjectedBinding>;\n\nexport type ModuleRegistry = ReadonlyMap<string, ModuleExports> | Record<string, ModuleExports>;\n\ntype NormalizedModuleRegistry = Map<string, Map<string, CallerInjectedBinding>>;\n\nexport function createUnknownModuleMessage(\n moduleName: string,\n moduleNames: readonly string[]\n): string {\n if (moduleNames.length === 0) {\n return `Unknown module '${moduleName}'. No modules are registered.`;\n }\n\n return `Unknown module '${moduleName}'. Available modules: ${moduleNames.join(\", \")}.`;\n}\n\nexport function createUnknownExportMessage(\n moduleName: string,\n exportName: string,\n availableExports: readonly string[]\n): string {\n if (availableExports.length === 0) {\n return `Module '${moduleName}' does not export '${exportName}'. The module exports nothing.`;\n }\n\n return `Module '${moduleName}' does not export '${exportName}'. Available exports: ${availableExports.join(\", \")}.`;\n}\n\nexport function resolveModuleImports(\n module: Module,\n modules: ModuleRegistry | undefined,\n options: {\n budget: Budget;\n compileOwner?: CompileOwner;\n hostCalls?: HostCallJournal;\n signal?: AbortSignal;\n allowMissing?: boolean;\n }\n): Record<string, SandboxValue> {\n const registry = normalizeModuleRegistry(modules);\n const bindings = createBindingRecord();\n const wrappedModules = new Map<string, Record<string, SandboxValue>>();\n\n for (const statement of module.body) {\n if (statement.type !== \"ImportDeclaration\") {\n continue;\n }\n\n bindImportDeclaration(statement, registry, wrappedModules, bindings, options);\n }\n\n return bindings;\n}\n\nfunction bindImportDeclaration(\n declaration: ImportDeclaration,\n registry: NormalizedModuleRegistry,\n wrappedModules: Map<string, Record<string, SandboxValue>>,\n bindings: Record<string, SandboxValue>,\n options: {\n budget: Budget;\n compileOwner?: CompileOwner;\n hostCalls?: HostCallJournal;\n signal?: AbortSignal;\n allowMissing?: boolean;\n }\n): void {\n const moduleName = declaration.source.value;\n const moduleExports = registry.get(moduleName);\n\n if (moduleExports === undefined) {\n if (options.allowMissing) return;\n throw createModuleImportError(\n createUnknownModuleMessage(moduleName, [...registry.keys()]),\n declaration.source.span\n );\n }\n\n const wrappedExports =\n wrappedModules.get(moduleName) ??\n createBindingRecord(\n wrapCancelableBindings(\n wrapCallerInjectedBindings(Object.fromEntries(moduleExports), {\n budget: options.budget,\n compileOwner: options.compileOwner,\n hostCalls: options.hostCalls,\n moduleId: moduleName,\n signal: options.signal\n }),\n options.signal\n )\n );\n\n wrappedModules.set(moduleName, wrappedExports);\n\n for (const specifier of declaration.specifiers) {\n const localName = specifier.local.name;\n\n if (Object.hasOwn(bindings, localName)) {\n throw createModuleImportError(\n `Cannot redeclare imported binding '${localName}'.`,\n specifier.local.span\n );\n }\n\n if (options.allowMissing && specifier.type !== \"ImportNamespaceSpecifier\") {\n const exportName =\n specifier.type === \"ImportDefaultSpecifier\" ? \"default\" : specifier.imported.name;\n if (!Object.hasOwn(wrappedExports, exportName)) continue;\n }\n bindings[localName] = resolveImportSpecifier(moduleName, specifier, wrappedExports);\n }\n}\n\nfunction resolveImportSpecifier(\n moduleName: string,\n specifier: ImportDefaultSpecifier | ImportNamespaceSpecifier | ImportSpecifier,\n wrappedExports: Record<string, SandboxValue>\n): SandboxValue {\n if (specifier.type === \"ImportNamespaceSpecifier\") {\n return wrappedExports;\n }\n\n const exportName =\n specifier.type === \"ImportDefaultSpecifier\" ? \"default\" : specifier.imported.name;\n const exportedValue = wrappedExports[exportName];\n\n if (exportedValue !== undefined || Object.hasOwn(wrappedExports, exportName)) {\n return exportedValue;\n }\n\n throw createModuleImportError(\n createUnknownExportMessage(moduleName, exportName, Object.keys(wrappedExports).sort()),\n specifier.span\n );\n}\n\nfunction createModuleImportError(message: string, span: SourceSpan): Error {\n const error = new Error(message);\n attachErrorSpan(error, span);\n return error;\n}\n\nfunction normalizeModuleRegistry(modules: ModuleRegistry | undefined): NormalizedModuleRegistry {\n if (modules === undefined) {\n return new Map();\n }\n\n const entries = modules instanceof Map ? [...modules.entries()] : Object.entries(modules);\n const registry = new Map(\n entries\n .map(\n ([moduleName, moduleExports]) =>\n [moduleName, normalizeModuleExports(moduleExports)] as const\n )\n .sort(([left], [right]) => left.localeCompare(right))\n );\n\n registerModuleHostOperationPolicies(registry);\n return registry;\n}\n\nfunction registerModuleHostOperationPolicies(registry: NormalizedModuleRegistry): void {\n for (const [moduleId, moduleExports] of registry) {\n for (const [operation, value] of moduleExports) {\n if (typeof value !== \"function\") {\n continue;\n }\n\n const policy = readHostOperationPolicy(value);\n if (policy !== undefined) {\n registerPendingHostCallPolicy({ moduleId, operation, policy });\n }\n }\n }\n}\n\nfunction normalizeModuleExports(moduleExports: ModuleExports): Map<string, CallerInjectedBinding> {\n const entries =\n moduleExports instanceof Map ? [...moduleExports.entries()] : Object.entries(moduleExports);\n\n return new Map(\n entries\n .filter(([exportName]) => exportName.length > 0)\n .sort(([left], [right]) => left.localeCompare(right))\n );\n}\n\nfunction createBindingRecord<TValue extends SandboxValue>(\n entries?: Record<string, TValue>\n): Record<string, TValue> {\n return Object.assign(Object.create(null) as Record<string, TValue>, entries);\n}\n", "import {\n FileSnapshotBackend,\n type FileSnapshotBackendOptions,\n type Snapshot,\n type SnapshotBackend\n} from \"./backend.js\";\n\nconst DEFAULT_SNAPSHOT_INTERVAL_MS = 30_000;\n\nexport type SnapshotSchedulerOptions = {\n snapshotBackend?: SnapshotBackend;\n snapshotIntervalMs?: number;\n snapshotPath?: string;\n snapshotWriteMaxAttempts?: number;\n snapshotWriteRetryDelayMs?: number;\n};\n\nexport type SnapshotScheduler<TSnapshot> = {\n finish(): Promise<void>;\n onYield(createSnapshot: () => TSnapshot): void;\n pause(): void;\n resume(): void;\n write(snapshot: TSnapshot): Promise<void>;\n};\n\nexport function createSnapshotScheduler<TSnapshot>(\n options: SnapshotSchedulerOptions\n): SnapshotScheduler<TSnapshot> {\n const snapshotBackend =\n options.snapshotBackend ??\n (options.snapshotPath === undefined\n ? undefined\n : new FileSnapshotBackend(options.snapshotPath, createFileSnapshotBackendOptions(options)));\n\n if (snapshotBackend === undefined) {\n return {\n async finish() {},\n onYield() {},\n pause() {},\n resume() {},\n async write() {}\n };\n }\n\n const intervalMs = options.snapshotIntervalMs ?? DEFAULT_SNAPSHOT_INTERVAL_MS;\n if (intervalMs === 0) {\n return {\n async finish() {},\n onYield() {},\n pause() {},\n resume() {},\n async write(snapshot) {\n await snapshotBackend.write(snapshot as Snapshot);\n }\n };\n }\n\n let nextCheckpointAt = Date.now() + intervalMs;\n let pendingWrite = Promise.resolve();\n let isPaused = false;\n const writeErrors: unknown[] = [];\n\n return {\n async finish() {\n await pendingWrite;\n if (writeErrors.length > 0) {\n throw writeErrors[0];\n }\n },\n onYield(createSnapshot) {\n if (isPaused) {\n return;\n }\n\n if (Date.now() < nextCheckpointAt) {\n return;\n }\n\n nextCheckpointAt = Date.now() + intervalMs;\n const snapshot = createSnapshot();\n pendingWrite = pendingWrite\n .catch(() => undefined)\n .then(async () => {\n try {\n await snapshotBackend.write(snapshot as Snapshot);\n } catch (error) {\n writeErrors.push(error);\n }\n });\n },\n pause() {\n isPaused = true;\n },\n resume() {\n if (!isPaused) {\n return;\n }\n\n isPaused = false;\n nextCheckpointAt = Date.now() + intervalMs;\n },\n async write(snapshot) {\n await pendingWrite.catch(() => undefined);\n await snapshotBackend.write(snapshot as Snapshot);\n }\n };\n}\n\nfunction createFileSnapshotBackendOptions(\n options: SnapshotSchedulerOptions\n): FileSnapshotBackendOptions {\n return {\n writeMaxAttempts: options.snapshotWriteMaxAttempts,\n writeRetryDelayMs: options.snapshotWriteRetryDelayMs\n };\n}\n", "import { hashSource } from \"../parse/hash.js\";\nimport { sandboxErrorTypes, type SandboxErrorName } from \"../error/shape.js\";\nimport { assertSnapshotGraphDepth } from \"../graph-depth.js\";\nimport { serializeArguments, type SerializedArguments } from \"./arguments.js\";\nimport { requiresArrayEntries, serializeArray, type SerializedArray } from \"./arrays.js\";\nimport { float32DataProperties, isFloat32Array } from \"../interp/float32.js\";\nimport { encodeFloat32Storage, type Float32Data } from \"./float32array.js\";\nimport {\n isSandboxArguments,\n isSandboxGenerator,\n isSandboxMap,\n isSandboxRegex,\n isSandboxSet,\n type SandboxMap,\n type SandboxGenerator,\n type SandboxRegex,\n type SandboxSet\n} from \"../interp/values.js\";\n\ntype SnapshotId = number | string;\n\ntype SerializedUndefinedValue = {\n kind: \"undefined\";\n};\n\ntype SerializedNonFiniteNumber = {\n kind: \"number\";\n value: \"-Infinity\" | \"Infinity\" | \"NaN\";\n};\n\nexport type SerializedClosureValue = {\n kind: \"fn\";\n astNodeId: number;\n capturedScopeId: SnapshotId;\n};\n\nexport type SerializedGeneratorValue =\n | {\n kind: \"generator\";\n state: \"start\";\n astNodeId: number;\n capturedScopeId: SnapshotId;\n }\n | {\n kind: \"generator\";\n state: \"suspended\";\n astNodeId: number;\n capturedScopeId: SnapshotId;\n yieldNodeId: number;\n sent: SerializedSnapshotValue;\n }\n | {\n kind: \"generator\";\n state: \"done\";\n };\n\nexport type SerializedPromiseValue = {\n kind: \"promise\";\n id: SnapshotId;\n};\n\nexport type SerializedReferenceValue = {\n kind: \"ref\";\n id: number;\n};\n\nexport type SerializedHeapValue =\n | (Float32Data<SerializedReferenceValue> & { entries: Record<string, SerializedSnapshotValue> })\n | SerializedArguments<SerializedSnapshotValue>\n | SerializedArray<SerializedSnapshotValue>\n | {\n kind: \"object\";\n entries: Record<string, SerializedSnapshotValue>;\n errorType?: SandboxErrorName;\n }\n | {\n kind: \"map\";\n entries: Array<[SerializedSnapshotValue, SerializedSnapshotValue]>;\n }\n | {\n kind: \"set\";\n values: SerializedSnapshotValue[];\n };\n\nexport type SerializedSnapshotValue =\n | boolean\n | null\n | number\n | string\n | SerializedClosureValue\n | SerializedGeneratorValue\n | SerializedNonFiniteNumber\n | SerializedPromiseValue\n | SerializedReferenceValue\n | SerializedUndefinedValue\n | { kind: \"regex\"; source: string; flags: string; lastIndex: number }\n | SerializedSnapshotValue[]\n | {\n [key: string]: SerializedSnapshotValue;\n };\n\nexport type RuntimeClosureValue = {\n kind: \"fn\";\n astNodeId: number;\n capturedScopeId: SnapshotId;\n call?: unknown;\n};\n\nexport type RuntimePromiseValue = {\n kind: \"promise\";\n id: SnapshotId;\n promise?: Promise<unknown>;\n};\n\nexport type RuntimeSnapshotValue =\n | Float32Array\n | boolean\n | null\n | number\n | string\n | undefined\n | RuntimeClosureValue\n | SandboxGenerator\n | RuntimePromiseValue\n | SandboxMap\n | SandboxRegex\n | SandboxSet\n | RuntimeSnapshotValue[]\n | {\n [key: string]: RuntimeSnapshotValue;\n };\n\nexport type RuntimeScopeFrame = {\n id: SnapshotId;\n parentId?: SnapshotId;\n bindings: Record<string, RuntimeSnapshotValue>;\n};\n\nexport type SerializedScopeFrame = {\n id: SnapshotId;\n parentId?: SnapshotId;\n bindings: Record<string, SerializedSnapshotValue>;\n};\n\nexport type RuntimeCallFrame = {\n astNodeId: number;\n scopeId: SnapshotId;\n awaitingPromiseId?: SnapshotId;\n};\n\nexport type SerializedCallFrame = RuntimeCallFrame;\n\nexport type RuntimePendingPromise = {\n id: SnapshotId;\n promise?: Promise<unknown>;\n [key: string]: RuntimeSnapshotValue | Promise<unknown> | SnapshotId | undefined;\n};\n\nexport type SerializedPendingPromise = {\n id: SnapshotId;\n [key: string]: SerializedSnapshotValue | SnapshotId;\n};\n\nexport type SerializeInput = {\n source: string;\n currentAstNodeId: number;\n scopeChain: RuntimeScopeFrame[];\n callStack: RuntimeCallFrame[];\n pendingPromises: RuntimePendingPromise[];\n moduleBindings: Record<string, string>;\n};\n\nexport type SerializedSnapshot = {\n sourceHash: string;\n currentAstNodeId: number;\n scopeChain: SerializedScopeFrame[];\n callStack: SerializedCallFrame[];\n pendingPromises: SerializedPendingPromise[];\n moduleBindings: Record<string, string>;\n heap?: Record<string, SerializedHeapValue>;\n};\n\ntype SerializationState = {\n float32Buffers: WeakMap<ArrayBuffer, number>;\n ancestors: WeakMap<object, string>;\n heap: Record<string, SerializedHeapValue>;\n heapIds: WeakMap<object, number>;\n serializedHeapIds: Set<number>;\n};\n\nexport class UnsnapshotableValueError extends Error {\n readonly path: string;\n\n constructor(path: string) {\n super(\n \"Cannot snapshot a generator suspended mid-iteration; drain or discard it before the await boundary.\"\n );\n this.name = \"UnsnapshotableValueError\";\n this.path = path;\n }\n}\n\nexport function serialize(input: SerializeInput): SerializedSnapshot {\n for (const [scopeIndex, scope] of input.scopeChain.entries()) {\n for (const [name, value] of Object.entries(scope.bindings)) {\n assertSnapshotGraphDepth(value, `scopeChain[${scopeIndex}].bindings.${name}`);\n }\n }\n for (const [promiseIndex, promise] of input.pendingPromises.entries()) {\n for (const [key, value] of Object.entries(promise)) {\n if (key !== \"id\" && key !== \"promise\") {\n assertSnapshotGraphDepth(value, `pendingPromises[${promiseIndex}].${key}`);\n }\n }\n }\n const state: SerializationState = {\n float32Buffers: new WeakMap(),\n ancestors: new WeakMap(),\n heap: Object.create(null) as Record<string, SerializedHeapValue>,\n heapIds: indexHeapContainers(input),\n serializedHeapIds: new Set()\n };\n\n const snapshot: SerializedSnapshot = {\n sourceHash: hashSource(input.source),\n currentAstNodeId: input.currentAstNodeId,\n scopeChain: input.scopeChain.map((scope, index) =>\n serializeScopeFrame(scope, `scopeChain[${index}]`, state)\n ),\n callStack: input.callStack.map((frame) => ({ ...frame })),\n pendingPromises: input.pendingPromises.map((promise, index) =>\n serializePendingPromise(promise, `pendingPromises[${index}]`, state)\n ),\n moduleBindings: { ...input.moduleBindings }\n };\n\n if (Object.keys(state.heap).length === 0) {\n return snapshot;\n }\n\n return {\n ...snapshot,\n heap: state.heap\n };\n}\n\nfunction serializeScopeFrame(\n scope: RuntimeScopeFrame,\n path: string,\n state: SerializationState\n): SerializedScopeFrame {\n const bindings = Object.create(null) as Record<string, SerializedSnapshotValue>;\n\n for (const [name, value] of Object.entries(scope.bindings)) {\n bindings[name] = serializeValue(value, `${path}.bindings.${name}`, state);\n }\n\n return scope.parentId === undefined\n ? {\n id: scope.id,\n bindings\n }\n : {\n id: scope.id,\n parentId: scope.parentId,\n bindings\n };\n}\n\nfunction serializePendingPromise(\n pendingPromise: RuntimePendingPromise,\n path: string,\n state: SerializationState\n): SerializedPendingPromise {\n const serialized: SerializedPendingPromise = {\n id: pendingPromise.id\n };\n\n for (const [key, value] of Object.entries(pendingPromise)) {\n if (key === \"id\" || key === \"promise\") {\n continue;\n }\n\n serialized[key] = serializeValue(value as RuntimeSnapshotValue, `${path}.${key}`, state);\n }\n\n return serialized;\n}\n\nfunction serializeValue(\n value: RuntimeSnapshotValue,\n path: string,\n state: SerializationState\n): SerializedSnapshotValue {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") {\n return value;\n }\n\n if (value === undefined) {\n return {\n kind: \"undefined\"\n };\n }\n\n if (typeof value === \"number\") {\n if (Number.isFinite(value)) {\n return value;\n }\n\n return {\n kind: \"number\",\n value: Number.isNaN(value)\n ? \"NaN\"\n : value === Number.POSITIVE_INFINITY\n ? \"Infinity\"\n : \"-Infinity\"\n };\n }\n\n if (Array.isArray(value)) {\n const reference = serializeHeapReference(value, path, state);\n if (reference !== undefined) {\n return reference;\n }\n\n return withSerializableContainer(value, path, state, () =>\n value.map((entry, index) => serializeValue(entry, `${path}[${index}]`, state))\n );\n }\n\n if (isRuntimeClosureValue(value)) {\n return {\n kind: \"fn\",\n astNodeId: value.astNodeId,\n capturedScopeId: value.capturedScopeId\n };\n }\n\n if (isSandboxGenerator(value)) {\n if (value.state === \"done\") {\n return {\n kind: \"generator\",\n state: \"done\"\n };\n }\n\n if (value.state === \"suspended\" || value.state === \"running\") {\n const continuation = value.channel.snapshot();\n if (continuation.yieldNodeId === undefined) {\n throw new UnsnapshotableValueError(path);\n }\n if (value.astNodeId === undefined || value.capturedScopeId === undefined) {\n throw new TypeError(`Cannot serialize generator without origin metadata at ${path}.`);\n }\n return {\n kind: \"generator\",\n state: \"suspended\",\n astNodeId: value.astNodeId,\n capturedScopeId: value.capturedScopeId,\n yieldNodeId: continuation.yieldNodeId,\n sent: serializeValue(continuation.sent as RuntimeSnapshotValue, `${path}.sent`, state)\n };\n }\n\n if (value.astNodeId === undefined || value.capturedScopeId === undefined) {\n throw new TypeError(`Cannot serialize generator without origin metadata at ${path}.`);\n }\n\n return {\n kind: \"generator\",\n state: \"start\",\n astNodeId: value.astNodeId,\n capturedScopeId: value.capturedScopeId\n };\n }\n\n if (isRuntimePromiseValue(value)) {\n return {\n kind: \"promise\",\n id: value.id\n };\n }\n\n if (isSandboxRegex(value)) {\n return { kind: \"regex\", source: value.source, flags: value.flags, lastIndex: value.lastIndex };\n }\n\n if (isSandboxMap(value) || isSandboxSet(value) || isFloat32Array(value)) {\n const reference = serializeHeapReference(value, path, state);\n if (reference === undefined) {\n throw new TypeError(`Cannot serialize collection without a heap reference at ${path}.`);\n }\n return reference;\n }\n\n if (!isPlainObject(value)) {\n throw new TypeError(`Cannot serialize host reference at ${path}.`);\n }\n\n const reference = serializeHeapReference(value, path, state);\n if (reference !== undefined) {\n return reference;\n }\n\n const serialized = Object.create(null) as Record<string, SerializedSnapshotValue>;\n\n return withSerializableContainer(value, path, state, () => {\n for (const [key, entry] of Object.entries(value)) {\n serialized[key] = serializeValue(entry, `${path}.${key}`, state);\n }\n\n return serialized;\n });\n}\n\nfunction serializeHeapReference(\n value:\n | RuntimeSnapshotValue[]\n | Record<string, RuntimeSnapshotValue>\n | SandboxMap\n | SandboxSet\n | Float32Array,\n path: string,\n state: SerializationState\n): SerializedReferenceValue | undefined {\n const id = state.heapIds.get(value);\n if (id === undefined) {\n return undefined;\n }\n\n if (!state.serializedHeapIds.has(id)) {\n state.serializedHeapIds.add(id);\n\n if (isFloat32Array(value)) {\n const storage = encodeFloat32Storage(value, id, state.float32Buffers, (id) => ({\n kind: \"ref\" as const,\n id\n }));\n const entries: Record<string, SerializedSnapshotValue> = Object.create(null);\n state.heap[String(id)] = { ...storage, entries };\n for (const [key, descriptor] of float32DataProperties(value))\n entries[key] = serializeValue(descriptor.value, `${path}.${key}`, state);\n } else if (isSandboxArguments(value)) {\n state.heap[String(id)] = serializeArguments(value, (entry, key) =>\n serializeValue(entry as RuntimeSnapshotValue, `${path}.${key}`, state)\n );\n } else if (isSandboxMap(value)) {\n state.heap[String(id)] = {\n kind: \"map\",\n entries: [...value.entries].map(([key, entry], index) => [\n serializeValue(key as RuntimeSnapshotValue, `${path}.entries[${index}][0]`, state),\n serializeValue(entry as RuntimeSnapshotValue, `${path}.entries[${index}][1]`, state)\n ])\n };\n } else if (isSandboxSet(value)) {\n state.heap[String(id)] = {\n kind: \"set\",\n values: [...value.values].map((entry, index) =>\n serializeValue(entry as RuntimeSnapshotValue, `${path}.values[${index}]`, state)\n )\n };\n } else if (Array.isArray(value)) {\n state.heap[String(id)] = serializeArray(value, (entry, key) =>\n serializeValue(entry as RuntimeSnapshotValue, `${path}[${key}]`, state)\n );\n } else {\n const entries = Object.create(null) as Record<string, SerializedSnapshotValue>;\n const errorType = sandboxErrorTypes.get(value);\n state.heap[String(id)] = {\n kind: \"object\",\n entries,\n ...(errorType === undefined ? {} : { errorType })\n };\n\n for (const [key, entry] of Object.entries(value)) {\n entries[key] = serializeValue(entry, `${path}.${key}`, state);\n }\n }\n }\n\n return {\n kind: \"ref\",\n id\n };\n}\n\nfunction isRuntimeClosureValue(value: unknown): value is RuntimeClosureValue {\n return (\n typeof value === \"object\" &&\n value !== null &&\n hasOwnProperty(value, \"kind\") &&\n value.kind === \"fn\" &&\n hasOwnProperty(value, \"astNodeId\") &&\n typeof value.astNodeId === \"number\" &&\n hasOwnProperty(value, \"capturedScopeId\") &&\n (typeof value.capturedScopeId === \"number\" || typeof value.capturedScopeId === \"string\")\n );\n}\n\nfunction isRuntimePromiseValue(value: unknown): value is RuntimePromiseValue {\n return (\n typeof value === \"object\" &&\n value !== null &&\n hasOwnProperty(value, \"kind\") &&\n value.kind === \"promise\" &&\n hasOwnProperty(value, \"id\")\n );\n}\n\nfunction isPlainObject(value: object): value is Record<string, RuntimeSnapshotValue> {\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction hasOwnProperty<Name extends PropertyKey>(\n value: object,\n name: Name\n): value is Record<Name, unknown> {\n return Object.prototype.hasOwnProperty.call(value, name);\n}\n\nfunction withSerializableContainer<TValue>(\n value: object,\n path: string,\n state: SerializationState,\n serializeContainer: () => TValue\n): TValue {\n const ancestorPath = state.ancestors.get(value);\n if (ancestorPath !== undefined) {\n throw new TypeError(`Cannot serialize cyclic value at ${path}.`);\n }\n\n state.ancestors.set(value, path);\n\n try {\n return serializeContainer();\n } finally {\n state.ancestors.delete(value);\n }\n}\n\nfunction indexHeapContainers(input: SerializeInput): WeakMap<object, number> {\n const stats = new Map<\n object,\n {\n count: number;\n cyclic: boolean;\n expanded: boolean;\n }\n >();\n const ancestors = new WeakSet<object>();\n\n for (const scope of input.scopeChain) {\n for (const value of Object.values(scope.bindings)) {\n collectContainerStats(value, stats, ancestors);\n }\n }\n\n for (const promise of input.pendingPromises) {\n for (const [key, value] of Object.entries(promise)) {\n if (key === \"id\" || key === \"promise\") {\n continue;\n }\n\n collectContainerStats(value as RuntimeSnapshotValue, stats, ancestors);\n }\n }\n\n const heapIds = new WeakMap<object, number>();\n let nextId = 1;\n for (const [value, stat] of stats.entries()) {\n if (\n stat.count > 1 ||\n stat.cyclic ||\n isFloat32Array(value) ||\n (Array.isArray(value) && requiresArrayEntries(value)) ||\n sandboxErrorTypes.has(value) ||\n isSandboxArguments(value) ||\n isSandboxMap(value) ||\n isSandboxSet(value)\n ) {\n heapIds.set(value, nextId);\n nextId += 1;\n }\n }\n\n return heapIds;\n}\n\nfunction collectContainerStats(\n value: RuntimeSnapshotValue,\n stats: Map<object, { count: number; cyclic: boolean; expanded: boolean }>,\n ancestors: WeakSet<object>\n): void {\n if (\n value === null ||\n typeof value !== \"object\" ||\n isRuntimeClosureValue(value) ||\n isRuntimePromiseValue(value) ||\n isSandboxGenerator(value)\n ) {\n return;\n }\n\n if (\n !Array.isArray(value) &&\n !isPlainObject(value) &&\n !isFloat32Array(value) &&\n !isSandboxMap(value) &&\n !isSandboxSet(value)\n ) {\n return;\n }\n\n let stat = stats.get(value);\n if (stat === undefined) {\n stat = {\n count: 0,\n cyclic: false,\n expanded: false\n };\n stats.set(value, stat);\n }\n\n stat.count += 1;\n\n if (ancestors.has(value)) {\n stat.cyclic = true;\n return;\n }\n\n if (stat.expanded) {\n return;\n }\n\n stat.expanded = true;\n ancestors.add(value);\n\n const entries = isSandboxArguments(value)\n ? Object.values(Object.getOwnPropertyDescriptors(value)).flatMap((descriptor) =>\n \"value\" in descriptor ? [descriptor.value] : []\n )\n : isSandboxMap(value)\n ? [...value.entries].flatMap(([key, entry]) => [key, entry])\n : isSandboxSet(value)\n ? [...value.values]\n : Object.values(value);\n for (const entry of entries) {\n collectContainerStats(entry as RuntimeSnapshotValue, stats, ancestors);\n }\n\n ancestors.delete(value);\n}\n", "import {\n createSandboxPromise,\n isSandboxClosure,\n isSandboxMap,\n isSandboxSet,\n isSandboxPromise,\n type SandboxClosure,\n type SandboxPromise,\n type SandboxValue\n} from \"../interp/values.js\";\nimport { decodeReplayData, encodeReplayData, type ReplayData } from \"./replay-data.js\";\nimport { CompileScope } from \"../interp/regex/compile-guard.js\";\n\nconst validationPromise = createSandboxPromise(Promise.resolve(undefined));\n\nexport type ReplayInputs = {\n bindings: Record<string, SandboxValue>;\n imports: Record<string, SandboxValue>;\n entryPointArgs: SandboxValue[] | undefined;\n importMeta: SandboxValue;\n};\n\nexport function prepareReplayInputs(\n current: ReplayInputs,\n saved?: unknown,\n preparePromise?: (promise: SandboxPromise | undefined, id: string) => SandboxPromise,\n onCapabilityRestored?: (original: SandboxClosure, restored: SandboxClosure) => void,\n compilation?: CompileScope\n): {\n values: ReplayInputs;\n snapshot: ReplayData;\n} {\n const identities = new WeakMap<object, string>();\n const capabilities = new Map<string, SandboxClosure>();\n const promises = new Map<string, SandboxPromise>();\n if (saved === undefined) {\n const snapshot = encodeReplayData(current, {\n captureCapabilityProperties: true,\n identifyCapability: (closure, path) => {\n const id = identities.get(closure) ?? JSON.stringify(path);\n identities.set(closure, id);\n capabilities.set(id, closure);\n return id;\n },\n identifyPromise: (promise, path) => {\n if (preparePromise === undefined) return undefined;\n const id = identities.get(promise) ?? JSON.stringify(path);\n identities.set(promise, id);\n if (!promises.has(id)) promises.set(id, preparePromise(promise, id));\n return id;\n }\n });\n return {\n values:\n promises.size === 0\n ? current\n : (decodeReplayData(\n snapshot,\n {\n resolveCapability: (id) => capabilities.get(id),\n resolvePromise: (id) => promises.get(id)\n },\n compilation\n ) as ReplayInputs),\n snapshot\n };\n }\n const readCapability = (id: string): SandboxValue => {\n const path: unknown = JSON.parse(id);\n if (!Array.isArray(path) || path.length === 0 || path.some((key) => typeof key !== \"string\"))\n throw new TypeError(\"Invalid replay input capability path.\");\n let value: SandboxValue = current;\n for (const key of path) {\n if (isSandboxMap(value)) {\n const [kind, ordinal] = key.split(\":\");\n const index = Number(ordinal);\n if (\n ![\"key\", \"value\"].includes(kind) ||\n String(index) !== ordinal ||\n !Number.isSafeInteger(index) ||\n index < 0\n )\n throw new TypeError(\"Invalid replay input map capability path.\");\n value = [...value.entries][index]?.[kind === \"key\" ? 0 : 1];\n continue;\n }\n if (isSandboxSet(value)) {\n const index = Number(key);\n if (String(index) !== key || !Number.isSafeInteger(index) || index < 0)\n throw new TypeError(\"Invalid replay input set capability path.\");\n value = [...value.values][index];\n continue;\n }\n if (value === null || typeof value !== \"object\") return undefined;\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor === undefined || !(\"value\" in descriptor)) return undefined;\n value = descriptor.value;\n }\n return value;\n };\n const resolveCapability = (id: string) => {\n const value = readCapability(id);\n return isSandboxClosure(value) ? value : undefined;\n };\n const validationScope = new CompileScope(compilation?.owner);\n try {\n const validated = decodeReplayData(\n saved,\n {\n resolveCapability,\n resolvePromise: (id) => {\n readCapability(id);\n return validationPromise;\n }\n },\n validationScope\n );\n assertReplayInputShape(validated);\n } finally {\n validationScope.dispose();\n }\n const restored = decodeReplayData(\n saved,\n {\n resolveCapability,\n onCapabilityRestored,\n resolvePromise: (id) => {\n const value = readCapability(id);\n if (!promises.has(id) && preparePromise !== undefined)\n promises.set(id, preparePromise(isSandboxPromise(value) ? value : undefined, id));\n return promises.get(id);\n }\n },\n compilation\n );\n return { values: restored as ReplayInputs, snapshot: structuredClone(saved) as ReplayData };\n}\n\nfunction assertReplayInputShape(restored: SandboxValue): asserts restored is ReplayInputs {\n if (\n restored === null ||\n typeof restored !== \"object\" ||\n Array.isArray(restored) ||\n isSandboxClosure(restored) ||\n isSandboxPromise(restored) ||\n isSandboxMap(restored) ||\n isSandboxSet(restored)\n )\n throw new TypeError(\"Invalid replay inputs.\");\n const values = restored as ReplayInputs;\n for (const key of [\"bindings\", \"imports\"] as const) {\n if (\n values[key] === null ||\n typeof values[key] !== \"object\" ||\n Array.isArray(values[key]) ||\n isSandboxClosure(values[key]) ||\n isSandboxPromise(values[key]) ||\n isSandboxMap(values[key]) ||\n isSandboxSet(values[key])\n )\n throw new TypeError(`Invalid replay input ${key}.`);\n }\n if (values.entryPointArgs !== undefined && !Array.isArray(values.entryPointArgs))\n throw new TypeError(\"Invalid replay entry point arguments.\");\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["charge", "isValidIdentifierCharacter", "start", "isDecimalDigit", "MAX_UNICODE_CODE_POINT", "createSpan", "body", "createIdentifier", "token", "value", "property", "end", "isAsciiLetter", "isDecimalDigit", "isHexDigit", "isOctalDigit", "reference", "id", "stat", "record", "record", "record", "record", "record", "AsyncLocalStorage", "AsyncLocalStorage", "AsyncLocalStorage", "id", "value", "result", "record", "outcome", "index", "normalized", "evaluateNode", "binding", "AsyncLocalStorage", "AsyncLocalStorage", "createRejectedSandboxPromise", "isPromiseLike", "error", "allocateSandboxValue", "isPlainObject", "record", "KEYWORDS", "EXPRESSION_ENDING_KEYWORDS", "CONTROL_FLOW_PAREN_KEYWORDS", "PUNCTUATORS", "isIdentifierStart", "isDecimalDigit", "shouldRejectRegexLiteral", "updateGroupingState", "createSpan", "isWhitespace", "isLineBreak", "isIdentifierPart", "isAsciiLetter", "matchPunctuator", "isExpressionEndingPunctuator", "popGroupingContext", "matchingOpeningPunctuator", "MESSAGE", "MESSAGE", "getStaticPropertyKey", "isImportMetaAssignmentTarget", "isImportMetaReference", "isIdentifierPart", "isIdentifierStart", "isWhitespace", "bodyContainsAwait", "statementListContainsAwait", "expressionContainsAwait", "statementContainsAwait", "variableDeclarationContainsAwait", "assignmentTargetContainsAwait", "catchClauseContainsAwait", "bindingPatternContainsAwait", "objectExpressionContainsAwait", "bindingElementContainsAwait", "patternTargetContainsAwait", "assignmentPropertyContainsAwait", "MESSAGE", "createDiagnostic", "createDiagnostic", "span", "isWhitespace", "isAsciiLetter", "isDecimalDigit", "positionAt", "bindPattern", "bindAssignmentPattern", "bindArrayPattern", "bindObjectPattern", "binding", "isArrayIndexKey", "evaluateNode", "binding", "bindPattern", "readAbortReason", "args", "isPromiseLike", "record", "outcome", "error", "sourceClosure", "joinPath", "isPlainObject", "describeValue", "createAbortError", "randomUUID", "randomUUID", "AsyncLocalStorage", "AsyncLocalStorage", "isPlainObject", "length", "storage", "isSandboxErrorConstructorInstance", "stringifyObject", "budgetSandboxValue", "toIntegerOrInfinity", "offset", "limit", "result", "evaluateThrowStatement", "evaluateTryStatement", "appendArrayValues", "key", "value", "right", "binding", "bindPattern", "getPatternBindingNames", "getDeclarationBindingNames", "predeclareBlockBindings", "isArrayIndexKey", "getStaticPropertyName", "isSandboxErrorConstructorInstance", "hasOwnProperty", "createUnknownModuleMessage", "createUnknownExportMessage", "AsyncLocalStorage", "operation", "snapshot", "interpreterSnapshot", "result", "createIdentifier", "record"]
7
+ }