@poe-platform/safe-js 0.1.725 → 0.1.726

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 (57) hide show
  1. package/README.md +12 -0
  2. package/dist/safe-js/chunks/{chunk-QU2F65UQ.js → chunk-4VWGTW5F.js} +2 -2
  3. package/dist/safe-js/chunks/{chunk-V2ESZF34.js → chunk-EYIWCEOM.js} +4 -4
  4. package/dist/safe-js/chunks/{chunk-YRALPIEZ.js → chunk-JVWED75K.js} +2 -2
  5. package/dist/safe-js/chunks/{chunk-PKRGP34X.js → chunk-LAULA6ZA.js} +6 -6
  6. package/dist/safe-js/chunks/{chunk-O2CPPE6M.js → chunk-MFPMOTC3.js} +2 -2
  7. package/dist/safe-js/chunks/{chunk-FYSWUSHN.js → chunk-MLXEO7D4.js} +3 -3
  8. package/dist/safe-js/chunks/{chunk-Y7LSEUWV.js → chunk-QPG4Q7NQ.js} +3 -3
  9. package/dist/safe-js/chunks/{chunk-KOO6YGQG.js → chunk-T2HKPVB3.js} +77 -29
  10. package/dist/safe-js/chunks/chunk-T2HKPVB3.js.map +7 -0
  11. package/dist/safe-js/chunks/{chunk-6OE64YMG.js → chunk-TVAZK5TQ.js} +2 -2
  12. package/dist/safe-js/chunks/{chunk-K6F5QLZQ.js → chunk-UBLJ5GBD.js} +3 -3
  13. package/dist/safe-js/chunks/{chunk-ECTNNLWN.js → chunk-ZB7G7QNP.js} +4 -4
  14. package/dist/safe-js/chunks/{chunk-6YSHQ5ET.js → chunk-ZI6RZ6ZM.js} +2 -2
  15. package/dist/safe-js/chunks/{chunk-HG5QP5UC.js → chunk-ZUWFLRFV.js} +2 -2
  16. package/dist/safe-js/chunks/{cli-runtime-5HVEFMDB.js → cli-runtime-BUNU5UJA.js} +13 -13
  17. package/dist/safe-js/chunks/{dump-VKSKINUI.js → dump-NJBLBIHN.js} +4 -4
  18. package/dist/safe-js/chunks/{fs-CZ2TAPHK.js → fs-KSDQMVL3.js} +4 -4
  19. package/dist/safe-js/chunks/harness-4TVG72ZC.js +10 -0
  20. package/dist/safe-js/chunks/mcp-ABD5LZLV.js +11 -0
  21. package/dist/safe-js/chunks/migration-file-S6N7VAXE.js +12 -0
  22. package/dist/safe-js/chunks/restore-R2BQQ743.js +13 -0
  23. package/dist/safe-js/chunks/run-4W5TVAD4.js +17 -0
  24. package/dist/safe-js/chunks/runtime-modules-XRIAOBSC.js +10 -0
  25. package/dist/safe-js/cli.js +2 -2
  26. package/dist/safe-js/core.js +7 -7
  27. package/dist/safe-js/index.js +13 -13
  28. package/dist/safe-js/parse/tokenizer.d.ts +1 -1
  29. package/package.json +2 -2
  30. package/dist/safe-js/chunks/chunk-KOO6YGQG.js.map +0 -7
  31. package/dist/safe-js/chunks/harness-WNABEKDH.js +0 -10
  32. package/dist/safe-js/chunks/mcp-ZZDGN5CA.js +0 -11
  33. package/dist/safe-js/chunks/migration-file-QVT4W464.js +0 -12
  34. package/dist/safe-js/chunks/restore-PTIQHGKI.js +0 -13
  35. package/dist/safe-js/chunks/run-WNR7QYUJ.js +0 -17
  36. package/dist/safe-js/chunks/runtime-modules-YEOG62RU.js +0 -10
  37. /package/dist/safe-js/chunks/{chunk-QU2F65UQ.js.map → chunk-4VWGTW5F.js.map} +0 -0
  38. /package/dist/safe-js/chunks/{chunk-V2ESZF34.js.map → chunk-EYIWCEOM.js.map} +0 -0
  39. /package/dist/safe-js/chunks/{chunk-YRALPIEZ.js.map → chunk-JVWED75K.js.map} +0 -0
  40. /package/dist/safe-js/chunks/{chunk-PKRGP34X.js.map → chunk-LAULA6ZA.js.map} +0 -0
  41. /package/dist/safe-js/chunks/{chunk-O2CPPE6M.js.map → chunk-MFPMOTC3.js.map} +0 -0
  42. /package/dist/safe-js/chunks/{chunk-FYSWUSHN.js.map → chunk-MLXEO7D4.js.map} +0 -0
  43. /package/dist/safe-js/chunks/{chunk-Y7LSEUWV.js.map → chunk-QPG4Q7NQ.js.map} +0 -0
  44. /package/dist/safe-js/chunks/{chunk-6OE64YMG.js.map → chunk-TVAZK5TQ.js.map} +0 -0
  45. /package/dist/safe-js/chunks/{chunk-K6F5QLZQ.js.map → chunk-UBLJ5GBD.js.map} +0 -0
  46. /package/dist/safe-js/chunks/{chunk-ECTNNLWN.js.map → chunk-ZB7G7QNP.js.map} +0 -0
  47. /package/dist/safe-js/chunks/{chunk-6YSHQ5ET.js.map → chunk-ZI6RZ6ZM.js.map} +0 -0
  48. /package/dist/safe-js/chunks/{chunk-HG5QP5UC.js.map → chunk-ZUWFLRFV.js.map} +0 -0
  49. /package/dist/safe-js/chunks/{cli-runtime-5HVEFMDB.js.map → cli-runtime-BUNU5UJA.js.map} +0 -0
  50. /package/dist/safe-js/chunks/{dump-VKSKINUI.js.map → dump-NJBLBIHN.js.map} +0 -0
  51. /package/dist/safe-js/chunks/{fs-CZ2TAPHK.js.map → fs-KSDQMVL3.js.map} +0 -0
  52. /package/dist/safe-js/chunks/{harness-WNABEKDH.js.map → harness-4TVG72ZC.js.map} +0 -0
  53. /package/dist/safe-js/chunks/{mcp-ZZDGN5CA.js.map → mcp-ABD5LZLV.js.map} +0 -0
  54. /package/dist/safe-js/chunks/{migration-file-QVT4W464.js.map → migration-file-S6N7VAXE.js.map} +0 -0
  55. /package/dist/safe-js/chunks/{restore-PTIQHGKI.js.map → restore-R2BQQ743.js.map} +0 -0
  56. /package/dist/safe-js/chunks/{run-WNR7QYUJ.js.map → run-4W5TVAD4.js.map} +0 -0
  57. /package/dist/safe-js/chunks/{runtime-modules-YEOG62RU.js.map → runtime-modules-XRIAOBSC.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/interp/internal-symbols.ts", "../../src/error/shape.ts", "../../src/interp/template-cache.ts", "../../src/interp/budget.ts", "../../src/interp/regex/compile-guard.ts", "../../src/error/source-lines.ts", "../../src/parse/format-error.ts", "../../src/parse/compact-spans.ts", "../../src/parse/function-source.ts", "../../src/parse/compact-module-ast.ts", "../../src/parse/bindings.ts", "../../src/parse/private-names.ts", "../../src/parse/compact-tokens.ts", "../../src/parse/tokenizer.ts", "../../src/parse/assign-ids.ts", "../../src/parse/syntax-diagnostic.ts", "../../src/parse/parse-export.ts", "../../src/parse/parse-import-meta.ts", "../../src/interp/regex/parse.ts", "../../src/parse/parser.ts", "../../src/observability/otel.ts", "../../src/interp/float16-array.ts", "../../src/interp/typed-array-constructors.ts"],
4
+ "sourcesContent": ["export const internalSymbols = new Set<symbol>();\n", "import { internalSymbols } from \"../interp/internal-symbols.js\";\n\nexport 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\");\ninternalSymbols.add(wrappedErrorCause);\n\nexport const sandboxErrorNames = [\n \"Error\",\n \"TypeError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"URIError\",\n \"EvalError\",\n \"AbortError\",\n \"AggregateError\",\n \"SuppressedError\",\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 const character = source[index];\n if (character === \"\\r\" || character === \"\\n\" || character === \"\\u2028\" || character === \"\\u2029\") {\n if (character === \"\\r\" && source[index + 1] === \"\\n\" && index + 1 < offset) index += 1;\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 === \"\\r\" || character === \"\\n\" || character === \"\\u2028\" || character === \"\\u2029\") {\n if (character === \"\\r\" && source[offset + 1] === \"\\n\") offset += 1;\n currentLine += 1;\n currentColumn = 1;\n } else {\n currentColumn += 1;\n }\n }\n\n return source.length;\n}\n", "import type { TemplateLiteral } from \"../parse.js\";\nimport type { Budget } from \"./budget.js\";\nimport type { SandboxArray } from \"./values.js\";\n\nexport const templateRealms = new WeakMap<Budget, Map<TemplateLiteral, SandboxArray>>();\n\nexport function releaseTemplateObjects(budget: Budget): void {\n const realm = templateRealms.get(budget);\n if (realm !== undefined) budget.setRetainedValues(realm, undefined);\n templateRealms.delete(budget);\n}\n", "import { replaceErrorStack } from \"../error/shape.js\";\nimport { releaseTemplateObjects } from \"./template-cache.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 regexSourceLength?: number;\n regexCompileAllocations?: number;\n arrayLength?: number;\n dataSize?: number;\n};\n\nexport const REGEX_COMPILE_LIMITS = Object.freeze({\n sourceLength: Infinity,\n flagsLength: Infinity,\n depth: Infinity,\n allocations: Infinity\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 regexSourceLength?: number;\n regexCompileAllocations?: number;\n arrayLength?: number;\n dataSize?: number;\n};\n\nexport function isFatalSandboxError(error: unknown): error is SandboxError {\n return (\n error instanceof SandboxError && (error.code === \"budgetExceeded\" || error.code === \"reentry\")\n );\n}\n\nexport type CompileOwner = {\n readonly budget: Budget;\n readonly generation: number;\n};\n\nexport type CompileTicket = {\n readonly owner: CompileOwner;\n};\n\ntype PendingDeadline = {\n readonly deadline: number;\n onExceeded?: (reason: SandboxError) => void;\n previous?: PendingDeadline;\n next?: PendingDeadline;\n active: boolean;\n};\n\nclass BudgetAccounting {\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 allChecksSuspended = 0;\n deadlineChecksSuspended = 0;\n visitsUntilDeadlineCheck = DEADLINE_CHECK_INTERVAL;\n pendingDeadlines?: PendingDeadline;\n earliestPendingDeadline?: PendingDeadline;\n retainedDataSize = 0;\n readonly retainedData = new Map<object, number>();\n readonly retainedValueSources = new Map<object, () => Iterable<unknown> | undefined>();\n compileGeneration = 0;\n activeCompileOwner?: CompileOwner;\n defaultCompileOwner?: CompileOwner;\n compileUses = 0;\n provisionalScopes = 0;\n readonly compileTickets = new Map<CompileTicket, number>();\n readonly completedCompileTickets = new Set<CompileTicket>();\n reconciliationHolds = 0;\n readonly deferredCompileDiscards = new Set<CompileTicket>();\n\n realmViews?: Set<WeakRef<Budget>>;\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 ...(options.regexSourceLength === undefined ? {} : {\n regexSourceLength: normalizeRegexLimit(\"regexSourceLength\", options.regexSourceLength)\n }),\n ...(options.regexCompileAllocations === undefined ? {} : {\n regexCompileAllocations: normalizeRegexLimit(\"regexCompileAllocations\", options.regexCompileAllocations)\n }),\n arrayLength: normalizeLimit(\"arrayLength\", options.arrayLength),\n dataSize: normalizeLimit(\"dataSize\", options.dataSize)\n });\n }\n}\n\nexport class Budget {\n private accounting: BudgetAccounting;\n private realmView = false;\n private realmLease = false;\n\n constructor(options: BudgetOptions = {}) {\n this.accounting = new BudgetAccounting(options);\n }\n\n get deadline(): number | undefined { return this.accounting.deadline; }\n get limits(): Readonly<BudgetLimits> { return this.accounting.limits; }\n get stepsUsed(): number { return this.accounting.stepsUsed; }\n set stepsUsed(value: number) { this.accounting.stepsUsed = value; }\n get peakCallDepth(): number { return this.accounting.peakCallDepth; }\n set peakCallDepth(value: number) { this.accounting.peakCallDepth = value; }\n get currentDataSize(): number { return this.accounting.currentDataSize; }\n set currentDataSize(value: number) { this.accounting.currentDataSize = value; }\n get peakDataSize(): number { return this.accounting.peakDataSize; }\n set peakDataSize(value: number) { this.accounting.peakDataSize = value; }\n get currentCallDepth(): number { return this.accounting.currentCallDepth; }\n set currentCallDepth(value: number) { this.accounting.currentCallDepth = value; }\n\n // Pending host operations keep their elapsed deadline active during sampled\n // synchronous work. Linked private records need no observable native hooks.\n acquireDeadline(deadline: number, onExceeded?: (reason: SandboxError) => void): () => void {\n if (!Number.isFinite(deadline)) throw new TypeError(\"Deadline must be a finite timestamp.\");\n const accounting = this.accounting;\n const pending: PendingDeadline = {\n deadline, onExceeded,\n next: accounting.pendingDeadlines, active: true\n };\n if (pending.next !== undefined) pending.next.previous = pending;\n accounting.pendingDeadlines = pending;\n if (accounting.earliestPendingDeadline === undefined ||\n pending.deadline < accounting.earliestPendingDeadline.deadline)\n accounting.earliestPendingDeadline = pending;\n return () => {\n if (!pending.active) return;\n pending.active = false;\n if (pending.previous === undefined) accounting.pendingDeadlines = pending.next;\n else pending.previous.next = pending.next;\n if (pending.next !== undefined) pending.next.previous = pending.previous;\n pending.previous = pending.next = undefined;\n pending.onExceeded = undefined;\n if (accounting.earliestPendingDeadline !== pending) return;\n accounting.earliestPendingDeadline = undefined;\n for (let next = accounting.pendingDeadlines; next !== undefined; next = next.next)\n if (accounting.earliestPendingDeadline === undefined ||\n next.deadline < accounting.earliestPendingDeadline.deadline)\n accounting.earliestPendingDeadline = next;\n };\n }\n\n forkRealm(): Budget {\n // Realm-indexed caches use the view identity; all limits and usage stay shared.\n const view = new Budget();\n view.accounting = this.accounting;\n view.realmView = true;\n const views = this.accounting.realmViews ??= new Set([new WeakRef(this)]);\n views.add(new WeakRef(view));\n return view;\n }\n\n acquireRealmOwner(): ReturnType<Budget[\"acquireCompileOwner\"]> {\n // Only explicit realm views share a live compile owner; each view still\n // owns distinct realm-indexed caches and at most one live realm.\n if (this.realmLease) throw new SandboxError(\"reentry\");\n const lease = this.acquireCompileOwner(\n !this.realmView,\n this.realmView ? this.accounting.activeCompileOwner : undefined,\n );\n this.realmLease = true;\n let released = false;\n return {\n owner: lease.owner,\n release: () => {\n if (released) return;\n released = true;\n this.realmLease = false;\n lease.release();\n },\n };\n }\n\n visitNode(units = 1): void {\n if (!Number.isSafeInteger(units) || units < 0) {\n throw new Error(\"units must be a non-negative safe integer.\");\n }\n if (units === 0) return;\n\n this.accounting.stepsUsed += units;\n this.checkSampledDeadline(units);\n\n if (\n this.accounting.allChecksSuspended === 0 &&\n this.accounting.limits.maxSteps !== undefined &&\n this.accounting.stepsUsed > this.accounting.limits.maxSteps\n ) {\n throw new SandboxError({\n budget: \"steps\",\n current: this.accounting.stepsUsed,\n limit: this.accounting.limits.maxSteps\n });\n }\n }\n\n allocateString(value: string): string {\n this.allocateStringLength(value.length);\n return value;\n }\n\n allocateStringLength(length: number): void {\n if (\n this.accounting.allChecksSuspended === 0 &&\n this.accounting.limits.stringLength !== undefined &&\n length > this.accounting.limits.stringLength\n ) {\n throw new SandboxError({\n budget: \"stringLength\",\n current: length,\n limit: this.accounting.limits.stringLength\n });\n }\n }\n\n allocateArrayLength(length: number): void {\n if (\n this.accounting.allChecksSuspended === 0 &&\n this.accounting.limits.arrayLength !== undefined &&\n length > this.accounting.limits.arrayLength\n ) {\n throw new SandboxError({\n budget: \"arrayLength\",\n current: length,\n limit: this.accounting.limits.arrayLength\n });\n }\n }\n\n allocateCollectionEntries(count: number): void {\n this.allocateArrayLength(count);\n }\n\n reconcileDataUsage(usage: number): void {\n const measured = usage + this.accounting.retainedDataSize;\n const total = this.reconciliationDeferred ? Math.max(measured, this.accounting.currentDataSize) : measured;\n this.checkDataUsage(total);\n this.accounting.currentDataSize = total;\n this.accounting.peakDataSize = Math.max(this.accounting.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.accounting.retainedData.get(owner) ?? 0);\n const total = this.accounting.currentDataSize + delta;\n this.checkDataUsage(total);\n if (usage === 0) this.accounting.retainedData.delete(owner);\n else this.accounting.retainedData.set(owner, usage);\n this.accounting.retainedDataSize += delta;\n this.accounting.currentDataSize = total;\n this.accounting.peakDataSize = Math.max(this.accounting.peakDataSize, total);\n }\n\n setRetainedValues(owner: object, values: (() => Iterable<unknown> | undefined) | undefined): void {\n if (values === undefined) this.accounting.retainedValueSources.delete(owner);\n else this.accounting.retainedValueSources.set(owner, values);\n }\n\n get reconciliationDeferred(): boolean {\n return this.accounting.reconciliationHolds > 0;\n }\n\n deferReconciliation(): () => void {\n this.accounting.reconciliationHolds++;\n const generation = this.accounting.compileGeneration;\n let released = false;\n return () => {\n if (released) return;\n released = true;\n if (generation !== this.accounting.compileGeneration) return;\n if (--this.accounting.reconciliationHolds !== 0) return;\n for (const ticket of this.accounting.deferredCompileDiscards)\n this.accounting.completedCompileTickets.add(ticket);\n this.accounting.deferredCompileDiscards.clear();\n };\n }\n\n *retainedValues(): Iterable<unknown> {\n for (const values of this.accounting.retainedValueSources.values()) {\n const retained = values();\n if (retained !== undefined) yield* retained;\n }\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.accounting !== this.accounting || owner.generation !== this.accounting.compileGeneration)) ||\n (this.accounting.activeCompileOwner !== undefined && this.accounting.activeCompileOwner !== owner) ||\n (reset && (this.accounting.compileUses !== 0 || owner !== undefined))\n ) {\n throw new SandboxError(\"reentry\");\n }\n if (reset) this.reset();\n const selected = owner ?? (this.accounting.defaultCompileOwner ??= Object.freeze({ budget: this, generation: this.accounting.compileGeneration }));\n this.accounting.activeCompileOwner = selected;\n this.accounting.compileUses += 1;\n let released = false;\n return {\n owner: selected,\n release: () => {\n if (released) return;\n released = true;\n this.accounting.compileUses -= 1;\n if (this.accounting.compileUses === 0) this.accounting.activeCompileOwner = undefined;\n }\n };\n }\n\n createCompileTicket(owner: CompileOwner): CompileTicket {\n if (\n owner.budget.accounting !== this.accounting ||\n owner.generation !== this.accounting.compileGeneration ||\n this.accounting.activeCompileOwner !== owner\n ) {\n throw new SandboxError(\"reentry\");\n }\n const ticket = Object.freeze({ owner });\n this.accounting.compileTickets.set(ticket, 0);\n return ticket;\n }\n\n compileTicketUsage(ticket: CompileTicket): number {\n return ticket.owner.generation === this.accounting.compileGeneration\n ? (this.accounting.compileTickets.get(ticket) ?? 0)\n : 0;\n }\n\n resizeCompileTicket(ticket: CompileTicket, usage: number): void {\n if (ticket.owner.generation !== this.accounting.compileGeneration || !this.accounting.compileTickets.has(ticket)) {\n throw new SandboxError(\"reentry\");\n }\n if (this.reconciliationDeferred) usage = Math.max(usage, this.compileTicketUsage(ticket));\n this.setRetainedDataUsage(ticket, usage);\n this.accounting.compileTickets.set(ticket, usage);\n }\n\n discardCompileTicket(ticket: CompileTicket): void {\n if (ticket.owner.generation !== this.accounting.compileGeneration) return;\n const usage = this.accounting.compileTickets.get(ticket);\n if (usage === undefined) return;\n if (this.reconciliationDeferred) {\n this.accounting.deferredCompileDiscards.add(ticket);\n return;\n }\n this.accounting.compileTickets.delete(ticket);\n this.accounting.completedCompileTickets.delete(ticket);\n this.accounting.retainedData.delete(ticket);\n this.accounting.retainedDataSize -= usage;\n this.accounting.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 if (this.reconciliationDeferred) {\n if (retainedOwner !== undefined) this.setRetainedDataUsage(retainedOwner, usage);\n else {\n // Keep tickets owned while another job can still use them. Their bytes\n // already appear in the measured graph, so do not charge them twice.\n let includedUsage = 0;\n for (const ticket of included) includedUsage += this.compileTicketUsage(ticket);\n const measured = usage + this.accounting.retainedDataSize - includedUsage;\n const total = Math.max(measured, this.accounting.currentDataSize);\n this.checkDataUsage(total);\n this.accounting.currentDataSize = total;\n this.accounting.peakDataSize = Math.max(this.accounting.peakDataSize, total);\n }\n return new Set();\n }\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.accounting.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.accounting.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.accounting.retainedData.get(retainedOwner) ?? 0);\n const nextRetained =\n this.accounting.retainedDataSize -\n transferredUsage -\n discardedUsage +\n (retainedOwner === undefined ? 0 : usage - oldOwnerUsage);\n const measured =\n retainedOwner === undefined\n ? usage - includedUsage + transferredUsage\n : this.accounting.currentDataSize - this.accounting.retainedDataSize;\n const total = measured + nextRetained;\n this.checkDataUsage(total);\n for (const ticket of releasing) {\n this.accounting.compileTickets.delete(ticket);\n this.accounting.completedCompileTickets.delete(ticket);\n this.accounting.retainedData.delete(ticket);\n }\n if (retainedOwner !== undefined) {\n if (usage === 0) this.accounting.retainedData.delete(retainedOwner);\n else this.accounting.retainedData.set(retainedOwner, usage);\n }\n this.accounting.retainedDataSize = nextRetained;\n this.accounting.currentDataSize = total;\n this.accounting.peakDataSize = Math.max(this.accounting.peakDataSize, total);\n for (const ticket of retained) this.accounting.completedCompileTickets.add(ticket);\n return retained;\n }\n\n chargeDataUsage(usage: number): void {\n const total = this.accounting.currentDataSize + usage;\n this.checkDataUsage(total);\n this.accounting.currentDataSize = total;\n this.accounting.peakDataSize = Math.max(this.accounting.peakDataSize, total);\n }\n\n provisionDataUsage(usage: number): (commit?: boolean) => void {\n const previous = this.accounting.currentDataSize;\n const previousRetained = this.accounting.retainedDataSize;\n const next = previous + usage;\n this.checkDataUsage(next);\n this.accounting.currentDataSize = next;\n this.accounting.peakDataSize = Math.max(this.accounting.peakDataSize, next);\n const generation = this.accounting.compileGeneration;\n this.accounting.provisionalScopes += 1;\n\n let released = false;\n return (commit = false) => {\n if (released) return;\n released = true;\n if (generation !== this.accounting.compileGeneration) return;\n this.accounting.provisionalScopes -= 1;\n if (!commit) {\n const restored = previous + this.accounting.retainedDataSize - previousRetained;\n this.accounting.currentDataSize = this.reconciliationDeferred\n ? Math.max(restored, this.accounting.currentDataSize) : restored;\n }\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.accounting.compileUses !== 0) throw new SandboxError(\"reentry\");\n releaseTemplateObjects(this);\n for (const reference of this.accounting.realmViews ?? []) {\n const view = reference.deref();\n if (view === undefined) this.accounting.realmViews!.delete(reference);\n else if (view !== this) releaseTemplateObjects(view);\n }\n this.accounting.compileGeneration += 1;\n this.accounting.defaultCompileOwner = undefined;\n this.accounting.provisionalScopes = 0;\n this.accounting.compileTickets.clear();\n this.accounting.completedCompileTickets.clear();\n this.accounting.reconciliationHolds = 0;\n this.accounting.deferredCompileDiscards.clear();\n this.accounting.stepsUsed = 0;\n this.accounting.peakCallDepth = 0;\n this.accounting.currentCallDepth = 0;\n this.accounting.currentDataSize = 0;\n this.accounting.peakDataSize = 0;\n this.accounting.retainedDataSize = 0;\n this.accounting.retainedData.clear();\n this.accounting.retainedValueSources.clear();\n this.accounting.allChecksSuspended = 0;\n this.accounting.deadlineChecksSuspended = 0;\n this.accounting.visitsUntilDeadlineCheck = DEADLINE_CHECK_INTERVAL;\n }\n\n suspendChecks(): () => void {\n this.accounting.allChecksSuspended += 1;\n\n let resumed = false;\n return () => {\n if (resumed) {\n return;\n }\n\n resumed = true;\n this.accounting.allChecksSuspended -= 1;\n };\n }\n\n suspendDeadlineChecks(): () => void {\n this.accounting.deadlineChecksSuspended += 1;\n\n let resumed = false;\n return () => {\n if (resumed) {\n return;\n }\n\n resumed = true;\n this.accounting.deadlineChecksSuspended -= 1;\n };\n }\n\n private checkDeadline(): void {\n const pending = this.accounting.earliestPendingDeadline;\n const deadline = this.accounting.deadline === undefined ? pending?.deadline\n : Math.min(this.accounting.deadline, pending?.deadline ?? Infinity);\n if (\n this.accounting.allChecksSuspended > 0 ||\n this.accounting.deadlineChecksSuspended > 0 ||\n deadline === undefined\n ) {\n return;\n }\n\n const now = Date.now();\n if (now <= deadline) {\n return;\n }\n\n const reason = new SandboxError({\n budget: \"deadline\",\n current: now,\n limit: deadline\n });\n if (pending?.deadline === deadline) {\n const notify = pending.onExceeded;\n pending.onExceeded = undefined;\n notify?.(reason);\n }\n throw reason;\n }\n\n private checkDataUsage(usage: number): void {\n if (\n this.accounting.allChecksSuspended === 0 &&\n this.accounting.limits.dataSize !== undefined &&\n usage > this.accounting.limits.dataSize\n ) {\n throw new SandboxError({\n budget: \"dataSize\",\n current: usage,\n limit: this.accounting.limits.dataSize\n });\n }\n }\n\n private checkSampledDeadline(units: number): void {\n if (\n this.accounting.allChecksSuspended > 0 ||\n this.accounting.deadlineChecksSuspended > 0 ||\n (this.accounting.deadline === undefined && this.accounting.earliestPendingDeadline === undefined)\n ) {\n return;\n }\n\n this.accounting.visitsUntilDeadlineCheck -= units;\n if (this.accounting.visitsUntilDeadlineCheck > 0) {\n return;\n }\n\n this.accounting.visitsUntilDeadlineCheck =\n DEADLINE_CHECK_INTERVAL - (-this.accounting.visitsUntilDeadlineCheck % DEADLINE_CHECK_INTERVAL);\n this.checkDeadline();\n }\n\n private enterDepth(): () => void {\n const nextDepth = this.accounting.currentCallDepth + 1;\n\n if (\n this.accounting.allChecksSuspended === 0 &&\n this.accounting.limits.maxCallDepth !== undefined &&\n nextDepth > this.accounting.limits.maxCallDepth\n ) {\n throw new SandboxError({\n budget: \"callDepth\",\n current: nextDepth,\n limit: this.accounting.limits.maxCallDepth\n });\n }\n\n this.accounting.currentCallDepth = nextDepth;\n if (nextDepth > this.accounting.peakCallDepth) {\n this.accounting.peakCallDepth = nextDepth;\n }\n\n let left = false;\n return () => {\n if (left) {\n return;\n }\n\n left = true;\n this.accounting.currentCallDepth -= 1;\n };\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\nfunction normalizeRegexLimit(name: string, value: number | undefined): number | undefined {\n if (value === undefined) return undefined;\n if (!Number.isSafeInteger(value) || value < 1)\n throw new RangeError(`${name} must be a positive safe integer.`);\n return value;\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\n : this.scope?.owner?.budget.limits.regexSourceLength ?? 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 const limit = this.scope?.owner?.budget.limits.regexCompileAllocations ?? REGEX_COMPILE_LIMITS.allocations;\n if (next > limit) {\n throw new SandboxError({\n budget: \"dataSize\",\n current: next,\n limit\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 = measurePattern(pattern);\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: measurePattern(pattern) }\n );\n}\n\nfunction measurePattern(pattern: RegexPattern): number {\n let units = 10 + pattern.source.length + measureNode(pattern.body);\n if (pattern.groups !== undefined) {\n units += 1;\n for (const [name, indices] of Object.entries(pattern.groups)) units += name.length + 2 + indices.length;\n }\n return units;\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 \"namedBackreference\":\n return 3 + node.name.length;\n case \"anchor\":\n case \"wordBoundary\":\n case \"backreference\":\n return 3;\n case \"characterClass\": {\n let usage = 5 + node.items.length;\n if (node.operation !== undefined) usage += 1 + node.operation.length;\n if (node.strings !== undefined) usage += 1;\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 : item.type === \"property\" ? 4 + item.value.length + (item.strings === undefined ? 0 : 1)\n : item.type === \"set\" ? 3 + measureNode({ type: \"characterClass\", ...item.value })\n : item.type === \"strings\" ? 4 + item.values.reduce((total, value) => total + 1 + value.length, 0) : 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) + (node.name === undefined ? 0 : 1 + node.name.length) +\n (node.modifiers === undefined ? 0 : 2 + Object.keys(node.modifiers).length);\n case \"lookahead\":\n case \"lookbehind\":\n return 4 + measureNode(node.body);\n case \"quantifier\":\n return (Object.hasOwn(node, \"max\") ? 6 : 5) + measureNode(node.body);\n }\n}\n", "export function splitSourceLines(source: string): string[] {\n const lines: string[] = [];\n let start = 0;\n for (let index = 0; index < source.length; index += 1) {\n const character = source[index];\n if (character !== \"\\r\" && character !== \"\\n\" && character !== \"\\u2028\" && character !== \"\\u2029\") continue;\n lines.push(source.slice(start, index));\n if (character === \"\\r\" && source[index + 1] === \"\\n\") index += 1;\n start = index + 1;\n }\n lines.push(source.slice(start));\n return lines;\n}\n", "import { splitSourceLines as splitLines } from \"../error/source-lines.js\";\nimport { 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(\n source: string,\n filename: string,\n error: Error,\n location = parseErrorLocation(error.message)\n): ParseError {\n if (location === undefined) {\n // Capacity/internal parser failures have no trustworthy token location.\n // Preserve their type without publishing the host implementation stack.\n replaceErrorStack(error);\n Object.defineProperty(error, \"filename\", { configurable: true, value: filename });\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 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 = Array.from(line.slice(0, Math.max(startColumn - 1, 0))).length;\n const highlightEndIndex =\n endColumn === Number.MAX_SAFE_INTEGER\n ? highlightStartIndex\n : Math.max(Array.from(line.slice(0, Math.max(endColumn - 1, 0))).length, 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: characters.slice(0, sourceStartIndex).join(\"\").length + 1 - prefix.length\n };\n}\n\nfunction createCaret(\n line: RenderedLine,\n lineNumberWidth: number,\n location: ParseErrorLocation\n): string {\n const contentColumns = 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(Array.from(line.content.slice(renderedStartColumn - 1, renderedEndColumn - 1)).length, 1);\n return `${\" \".repeat(lineNumberWidth)} | ${caretPadding}${\"^\".repeat(caretLength)}`;\n}\n\nfunction createCaretPadding(line: string, column: number): string {\n let padding = \"\";\n const maxColumn = Math.max(column - 1, 0);\n\n // Parser columns count UTF-16 units; render one column per code point.\n // Terminals may render full-width glyphs wider.\n for (const character of line.slice(0, maxColumn)) {\n padding += character === \"\\t\" ? \"\\t\" : \" \";\n }\n\n if (maxColumn > line.length) {\n padding += \" \".repeat(maxColumn - line.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 { SourceSpan } from \"./parser.js\";\nimport type { Position } from \"./tokenizer.js\";\n\nconst positionOwners = new WeakMap<Position, CompactSourcePositions>();\nconst getOwner = WeakMap.prototype.get.bind(positionOwners);\nconst setOwner = WeakMap.prototype.set.bind(positionOwners);\nconst cacheSize = 514;\nconst writableSpan = Symbol(\"compiler span writability\");\n\n/** Immutable source coordinates shared by compiler-owned offset spans. */\nexport class CompactSourcePositions {\n private readonly sourceLength: number;\n private readonly lines = [0];\n private readonly positions = new Map<number, Position>();\n private readonly evictionOffsets = new Float64Array(cacheSize);\n private evictionIndex = 0;\n private readonly makeSpan: (start: number, end: number) => SourceSpan;\n\n constructor(source: string) {\n this.sourceLength = source.length;\n for (let offset = 0; offset < source.length; offset++) {\n const code = source.charCodeAt(offset);\n if (code === 13 && source.charCodeAt(offset + 1) === 10) offset++;\n if (code === 10 || code === 13 || code === 0x2028 || code === 0x2029)\n this.lines.push(offset + 1);\n }\n // Span getters use a different receiver, so capture their source index.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const owner = this;\n type Endpoint = number | { assigned: Position };\n class Span implements SourceSpan {\n #start: Endpoint;\n #end: Endpoint;\n\n constructor(start: number, end: number) {\n this.#start = start;\n this.#end = end;\n Object.defineProperties(this, descriptors);\n }\n\n get start(): Position {\n return typeof this.#start === \"number\" ? owner.position(this.#start) : this.#start.assigned;\n }\n set start(value: Position) {\n if (Object.isFrozen(this)) throw new TypeError(\"Cannot assign to a frozen source span.\");\n this.#start = getOwner(value) === owner ? value.offset : { assigned: value };\n }\n get end(): Position {\n return typeof this.#end === \"number\" ? owner.position(this.#end) : this.#end.assigned;\n }\n set end(value: Position) {\n if (Object.isFrozen(this)) throw new TypeError(\"Cannot assign to a frozen source span.\");\n this.#end = getOwner(value) === owner ? value.offset : { assigned: value };\n }\n }\n // Shared own accessors preserve enumerable start/end fields without a pair\n // of getter closures or permanently retained Position objects per span.\n const descriptors = {\n start: {\n ...Object.getOwnPropertyDescriptor(Span.prototype, \"start\")!,\n enumerable: true\n },\n end: {\n ...Object.getOwnPropertyDescriptor(Span.prototype, \"end\")!,\n enumerable: true\n },\n // Sealed accessor-only objects otherwise report as frozen. This private\n // data field preserves the distinction for the mutable endpoint setters.\n [writableSpan]: { value: true, writable: true, configurable: true }\n };\n // The fields belong to each span. Deleting one must not expose an inherited\n // getter that silently recreates the deleted endpoint.\n delete (Span.prototype as Partial<SourceSpan>).start;\n delete (Span.prototype as Partial<SourceSpan>).end;\n this.makeSpan = (start, end) => new Span(start, end);\n }\n\n position(offset: number): Position {\n this.assertOffset(offset);\n const cached = this.positions.get(offset);\n if (cached !== undefined) return cached;\n let low = 0,\n high = this.lines.length;\n while (low + 1 < high) {\n const middle = low + Math.floor((high - low) / 2);\n if (this.lines[middle]! <= offset) low = middle;\n else high = middle;\n }\n const position = Object.freeze({\n line: low + 1,\n column: offset - this.lines[low]! + 1,\n offset\n });\n setOwner(position, this);\n // Keep FIFO order without restarting a Map iterator through deleted slots.\n if (this.positions.size === cacheSize)\n this.positions.delete(this.evictionOffsets[this.evictionIndex]!);\n this.positions.set(offset, position);\n this.evictionOffsets[this.evictionIndex] = offset;\n this.evictionIndex = (this.evictionIndex + 1) % cacheSize;\n return position;\n }\n\n span(start: number, end: number): SourceSpan {\n this.assertOffset(start);\n this.assertOffset(end);\n return this.makeSpan(start, end);\n }\n\n compatiblePosition(position: Position): Position | undefined {\n if (\n !Number.isSafeInteger(position.offset) ||\n position.offset < 0 ||\n position.offset > this.sourceLength\n )\n return undefined;\n const point = this.position(position.offset);\n return point.line === position.line && point.column === position.column ? point : undefined;\n }\n\n /** Packing validates coordinates without materializing or interning a point. */\n matchesPosition(position: Position): boolean {\n if (\n !Number.isSafeInteger(position.offset) ||\n position.offset < 0 ||\n position.offset > this.sourceLength\n )\n return false;\n // Preserve the final offset read and validation for accessor-backed inputs.\n const offset = position.offset;\n this.assertOffset(offset);\n const line = position.line;\n if (!Number.isSafeInteger(line) || line < 1 || line > this.lines.length) return false;\n const start = this.lines[line - 1]!;\n if (offset < start || (line < this.lines.length && offset >= this.lines[line]!)) return false;\n return offset - start + 1 === position.column;\n }\n\n private assertOffset(offset: number): void {\n if (!Number.isSafeInteger(offset) || offset < 0 || offset > this.sourceLength)\n throw new RangeError(\"Source coordinate offset is outside its source.\");\n }\n}\n\n/** Rebased template coordinates compact only when their existing data agrees. */\nexport function compactDerivedPosition(base: Position, position: Position): Position | undefined {\n return getOwner(base)?.compatiblePosition(position);\n}\n\n/** Only privately owned points from the same source can become offset spans. */\nexport function compactSourceSpan(start: Position, end: Position): SourceSpan | undefined {\n const owner = getOwner(start);\n return owner !== undefined && getOwner(end) === owner\n ? owner.span(start.offset, end.offset)\n : undefined;\n}\n", "import type { ClassNode, DynamicFunctionKind, FunctionDeclaration, FunctionNode, ParseResult, TemplateLiteral } from \"./parser.js\";\n\nexport type FunctionSource = {\n readonly text: string;\n readonly start: number;\n readonly end: number;\n};\n\nexport const functionSources = new WeakMap<FunctionNode | ClassNode, FunctionSource>();\nexport const templateSources = new WeakMap<TemplateLiteral, string>();\nexport const functionStrictness = new WeakMap<FunctionNode, boolean>();\n/** Eval-root declarations are instantiated before statement execution. */\nexport const evalFunctionDeclarations = new WeakSet<FunctionDeclaration>();\n\nexport type EvalSourceContext = {\n strict: boolean;\n newTarget: boolean;\n superProperty: boolean;\n superCall: boolean;\n arguments: boolean;\n privateNames: string[];\n};\n\nexport type DynamicSource = {\n body: string;\n nodes: Map<number, ParseResult>;\n} & ({kind: DynamicFunctionKind; parameters: string} | {kind: \"eval\"; context: EvalSourceContext} | {kind: \"module\"; parameters: \"\"});\n\nexport const dynamicSourceRecords = new WeakSet<object>();\nexport const dynamicNodeSources = new WeakMap<object, DynamicSource>();\nexport const dynamicValueSources = new WeakMap<object, DynamicSource>();\n", "import { SandboxError } from \"../interp/budget.js\";\nimport { CompactSourcePositions } from \"./compact-spans.js\";\nimport {\n dynamicNodeSources,\n type DynamicSource,\n functionSources,\n functionStrictness,\n templateSources\n} from \"./function-source.js\";\nimport type { ParseResult, SourceSpan } from \"./parser.js\";\n\nconst chunkLength = 65536;\nconst scalarMask = 0x0fffffff;\nconst handles = new WeakMap<object, CodeRecord>();\nconst mutableRecord = Symbol(\"compiler record writability\");\ntype Shape = {\n keys: string[];\n descriptors: PropertyDescriptorMap;\n create: () => object;\n};\n\nconst recordToken = Symbol(\"compiler traversal authority\");\nconst defineCompilerProperty = Reflect.defineProperty;\nconst NativeRowMap = Map;\nconst nativeIndexMap = {\n get: Function.prototype.call.bind(Map.prototype.get) as <K, V>(\n map: Map<K, V>,\n key: K\n ) => V | undefined,\n has: Function.prototype.call.bind(Map.prototype.has) as <K, V>(map: Map<K, V>, key: K) => boolean,\n set: Function.prototype.call.bind(Map.prototype.set) as <K, V>(\n map: Map<K, V>,\n key: K,\n value: V\n ) => Map<K, V>,\n delete: Function.prototype.call.bind(Map.prototype.delete) as <K, V>(\n map: Map<K, V>,\n key: K\n ) => boolean,\n clear: Function.prototype.call.bind(Map.prototype.clear) as <K, V>(map: Map<K, V>) => void,\n keys: Function.prototype.call.bind(Map.prototype.keys) as <K, V>(\n map: Map<K, V>\n ) => MapIterator<K>,\n size: Function.prototype.call.bind(\n Object.getOwnPropertyDescriptor(Map.prototype, \"size\")!.get!\n ) as <K, V>(map: Map<K, V>) => number\n};\n\n/** Private compiler traversal handle; never a guest-visible AST value. */\nclass CodeRecord {\n #brand = true;\n static authentic(value: object): value is CodeRecord {\n return #brand in value && value.#brand;\n }\n constructor(\n token: symbol,\n readonly owner: CompactModuleAst,\n readonly row: number\n ) {\n if (token !== recordToken) throw new TypeError(\"Foreign compiler traversal authority.\");\n Object.freeze(this);\n }\n}\n\nfunction record(value: unknown): CodeRecord | undefined {\n if (value === null || typeof value !== \"object\") return undefined;\n return CodeRecord.authentic(value) ? value : handles.get(value);\n}\n\n/** Source-local numeric storage. Decoded identities and mutations stay retained. */\nexport class CompactModuleAst {\n private readonly chunks: Uint32Array[] = [];\n private readonly shapes: Shape[] = [];\n private readonly shapeIDs = new Map<string, number>();\n private readonly strings: string[] = [];\n private readonly stringIDs = new Map<string, number>();\n private readonly numbers: number[] = [];\n private readonly cache = new Map<number, object>();\n private readonly boundaries = new Set<number>();\n private readonly persistentBoundaries = new Set<number>();\n private readonly overrides = new WeakMap<object, Map<string, unknown>>();\n private finished = false;\n private readonly positions: CompactSourcePositions;\n private readonly maxWords: number;\n private used = 0;\n private bodies = 0;\n private dynamicSource?: DynamicSource;\n\n constructor(private readonly source: string) {\n this.positions = new CompactSourcePositions(source);\n this.maxWords = Math.min(scalarMask - 1, Math.max(1024, source.length * 24 + 1024));\n }\n\n statistics() {\n return {\n words: this.used,\n bufferBytes: this.chunks.reduce((sum, c) => sum + c.byteLength, 0),\n bodies: this.bodies,\n materializedRecords: this.cache.size,\n strings: this.strings.length\n };\n }\n\n finish(): void {\n this.finished = true;\n if (this.chunks.length) {\n const last = this.chunks.length - 1;\n this.chunks[last] = this.chunks[last]!.slice(0, ((this.used - 1) % chunkLength) + 1);\n }\n this.stringIDs.clear();\n this.shapeIDs.clear();\n // Parser transfers consult this set; finished storage can no longer pack.\n this.persistentBoundaries.clear();\n }\n\n /** Retirement consumes unobserved parser arrays after syntax validation. */\n pack<T extends object>(root: T, body = true, retire = false, persistent = true): T {\n if (this.finished) throw new TypeError(\"Compiler body storage is finished.\");\n const seen = new WeakMap<object, number>();\n const pending: Array<{\n row: number;\n kind: number;\n values: unknown[];\n index: number;\n bodyIndex?: number;\n }> = [];\n const encode = (value: unknown): number => {\n if (value === null || typeof value !== \"object\") return this.scalar(value);\n const existing = record(value);\n if (existing?.owner === this) {\n // Parser-only transfer: no caller has observed these temporary roots.\n if (retire && !this.overrides.has(value)) {\n this.cache.delete(existing.row);\n if (!this.persistentBoundaries.has(existing.row)) this.boundaries.delete(existing.row);\n }\n return existing.row + 1;\n }\n const previous = seen.get(value);\n if (previous !== undefined) return previous + 1;\n let kind: number,\n row: number,\n values: unknown[] = [];\n const array = Array.isArray(value);\n const keys = array ? [] : Object.keys(value).filter((key) => key !== \"nodeId\");\n if (array) {\n kind = 0;\n row = this.reserve(2 + value.length);\n values = value;\n this.write(row, kind);\n this.write(row + 1, value.length);\n } else if (keys.length === 2 && keys[0] === \"start\" && keys[1] === \"end\") {\n const span = value as SourceSpan,\n start = span.start,\n end = span.end;\n const startMatches = this.positions.matchesPosition(start);\n const endMatches = this.positions.matchesPosition(end);\n if (startMatches && endMatches) {\n kind = 1;\n row = this.reserve(3);\n this.write(row, kind);\n this.write(row + 1, start.offset);\n this.write(row + 2, end.offset);\n } else {\n kind = 2;\n row = this.reserve(7);\n this.write(row, kind);\n [start.line, start.column, start.offset, end.line, end.column, end.offset].forEach(\n (n, i) => this.write(row + 1 + i, n)\n );\n }\n } else {\n values = keys.map((key) => (value as Record<string, unknown>)[key]);\n if (\n \"nodeId\" in value ||\n (typeof (value as { type?: unknown }).type === \"string\" && \"span\" in value)\n ) {\n keys.push(\"@id\");\n values.push((value as { nodeId?: number }).nodeId);\n const metadata = functionSources.get(value as Parameters<typeof functionSources.get>[0]);\n if (metadata) {\n if (metadata.text !== this.source)\n throw new TypeError(\"Foreign compiler function source.\");\n keys.push(\"@start\", \"@end\", \"@strict\");\n values.push(\n metadata.start,\n metadata.end,\n functionStrictness.get(value as Parameters<typeof functionStrictness.get>[0])\n );\n }\n const template = templateSources.get(value as Parameters<typeof templateSources.get>[0]);\n if (template !== undefined) {\n if (template !== this.source) throw new TypeError(\"Foreign compiler template source.\");\n keys.push(\"@template\");\n values.push(true);\n }\n }\n const key = JSON.stringify(keys);\n let shape = this.shapeIDs.get(key);\n if (shape === undefined) {\n shape = this.shapes.length;\n this.shapes.push(this.shape(keys));\n this.shapeIDs.set(key, shape);\n }\n kind = shape + 3;\n row = this.reserve(1 + values.length);\n this.write(row, kind);\n }\n seen.set(value, row);\n // Linking reads declarator binding names, but must leave initializers packed.\n if ((value as { type?: unknown }).type === \"VariableDeclarator\") {\n this.boundaries.add(row);\n this.persistentBoundaries.add(row);\n }\n if (kind === 0 || kind >= 3) {\n const type = (value as { type?: unknown }).type;\n const bodyIndex = [\n \"FunctionDeclaration\",\n \"FunctionExpression\",\n \"ArrowFunctionExpression\"\n ].includes(String(type))\n ? keys.indexOf(\"body\")\n : -1;\n pending.push({\n row,\n kind,\n values,\n index: 0,\n bodyIndex: bodyIndex >= 0 ? bodyIndex : undefined\n });\n }\n return row + 1;\n };\n const reference = encode(root);\n while (pending.length) {\n const frame = pending[pending.length - 1]!;\n if (frame.index === frame.values.length) {\n pending.pop();\n continue;\n }\n // Complete each descendant before retaining another sibling's fields.\n const index = frame.index++;\n const child = encode(frame.values[index]);\n if (retire && frame.kind === 0)\n defineCompilerProperty(frame.values, index, { value: undefined });\n this.write(frame.row + (frame.kind === 0 ? 2 : 1) + index, child);\n if (index === frame.bodyIndex && child >>> 28 === 0) {\n this.boundaries.add(child - 1);\n this.persistentBoundaries.add(child - 1);\n }\n }\n this.boundaries.add(reference - 1);\n if (persistent) this.persistentBoundaries.add(reference - 1);\n if (body) this.bodies++;\n return this.decode(reference) as T;\n }\n\n /** Install source metadata and index numeric rows without publishing every node. */\n dynamicNodes(root: number, source: DynamicSource): Map<number, ParseResult> {\n if (!this.finished) throw new TypeError(\"Unfinished compiler storage.\");\n if (source.body !== this.source) throw new TypeError(\"Foreign compiler dynamic source text.\");\n if (this.dynamicSource && this.dynamicSource !== source)\n throw new TypeError(\"Foreign compiler dynamic source owner.\");\n this.dynamicSource = source;\n const rows = new NativeRowMap<number, number>(),\n seen = new Set<number>(),\n pending = [root];\n while (pending.length) {\n const row = pending.pop()!;\n if (seen.has(row)) continue;\n seen.add(row);\n const kind = this.read(row);\n if (kind === 0) {\n for (let i = 0, n = this.read(row + 1); i < n; i++) {\n const ref = this.read(row + 2 + i);\n if (ref >>> 28 === 0) pending.push((ref & scalarMask) - 1);\n }\n } else if (kind >= 3) {\n const keys = this.shapes[kind - 3]!.keys;\n const idIndex = keys.indexOf(\"@id\"),\n typeIndex = keys.indexOf(\"type\");\n if (idIndex >= 0 && typeIndex >= 0) {\n const id = this.decode(this.read(row + 1 + idIndex));\n const type = this.decode(this.read(row + 1 + typeIndex));\n if (typeof id === \"number\" && type !== \"Module\") nativeIndexMap.set(rows, id, row);\n }\n for (let i = 0; i < keys.length; i++) {\n if (keys[i]!.startsWith(\"@\")) continue;\n const ref = this.read(row + 1 + i);\n if (ref >>> 28 === 0) pending.push((ref & scalarMask) - 1);\n }\n }\n }\n for (const node of this.cache.values()) {\n const id = (node as { nodeId?: unknown }).nodeId;\n if (typeof id === \"number\" && nativeIndexMap.has(rows, id))\n dynamicNodeSources.set(node, source);\n }\n return new CompactNodeIndex(recordToken, rows, (row) => this.object(row) as ParseResult);\n }\n\n private scalar(value: unknown): number {\n if (value === undefined) return 0x10000000;\n if (value === null) return 0x20000000;\n if (typeof value === \"boolean\") return 0x30000000 + (value ? 1 : 0);\n if (typeof value === \"string\") {\n let id = this.stringIDs.get(value);\n if (id === undefined) {\n id = this.strings.length;\n this.strings.push(value);\n this.stringIDs.set(value, id);\n }\n return 0x40000000 + id;\n }\n if (typeof value === \"number\") {\n if (Number.isInteger(value) && !Object.is(value, -0) && Math.abs(value) <= scalarMask)\n return (value < 0 ? 0x60000000 : 0x50000000) + Math.abs(value);\n const id = this.numbers.length;\n this.numbers.push(value);\n return 0x70000000 + id;\n }\n throw new TypeError(\"Unsupported compiler scalar.\");\n }\n\n private reserve(length: number): number {\n const row = this.used,\n next = row + length;\n if (next > this.maxWords)\n throw new SandboxError({\n budget: \"dataSize\",\n current: next,\n limit: this.maxWords\n });\n this.used = next;\n this.write(next - 1, 0);\n return row;\n }\n private read(index: number): number {\n return this.chunks[Math.floor(index / chunkLength)]![index % chunkLength]!;\n }\n private write(index: number, value: number): void {\n const chunk = Math.floor(index / chunkLength);\n this.chunks[chunk] ??= new Uint32Array(chunkLength);\n this.chunks[chunk]![index % chunkLength] = value;\n }\n\n private decode(reference: number, raw = false): unknown {\n const tag = reference >>> 28,\n payload = reference & scalarMask;\n switch (tag) {\n case 0:\n return raw ? new CodeRecord(recordToken, this, payload - 1) : this.object(payload - 1);\n case 1:\n return undefined;\n case 2:\n return null;\n case 3:\n return payload !== 0;\n case 4:\n return this.strings[payload];\n case 5:\n return payload;\n case 6:\n return -payload;\n case 7:\n return this.numbers[payload];\n default:\n throw new TypeError(\"Invalid compiler reference.\");\n }\n }\n\n private shape(keys: string[]): Shape {\n const descriptors: PropertyDescriptorMap = {};\n // Accessors have a different receiver, so capture their source-local owner.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const owner = this;\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]!;\n if (key === \"@id\") {\n // ID assignment updates a data field instead of replacing an accessor.\n descriptors.nodeId = {\n value: undefined,\n writable: true,\n enumerable: false,\n configurable: true\n };\n continue;\n }\n if (key.startsWith(\"@\")) continue;\n const name = key;\n descriptors[name] = {\n enumerable: key !== \"@id\",\n configurable: true,\n get(this: object) {\n const handle = handles.get(this);\n if (\n handle?.owner !== owner ||\n owner.shapes[owner.read(handle.row) - 3]?.descriptors !== descriptors\n )\n throw new TypeError(\"Foreign compiler record receiver.\");\n const assigned = owner.overrides.get(this);\n return assigned?.has(name)\n ? assigned.get(name)\n : owner.decode(owner.read(handle.row + 1 + i));\n },\n set(this: object, value: unknown) {\n const handle = handles.get(this);\n if (\n handle?.owner !== owner ||\n owner.shapes[owner.read(handle.row) - 3]?.descriptors !== descriptors\n )\n throw new TypeError(\"Foreign compiler record receiver.\");\n if (Object.isFrozen(this))\n throw new TypeError(\"Cannot assign to a frozen compiler record.\");\n let assigned = owner.overrides.get(this);\n if (!assigned) {\n assigned = new Map();\n owner.overrides.set(this, assigned);\n }\n assigned.set(name, value);\n }\n };\n }\n descriptors[mutableRecord] = {\n value: true,\n writable: true,\n configurable: true\n };\n // Each accessor layout has its own allocation map, while AST prototypes stay plain.\n function CompilerRecord(this: object) {\n Object.defineProperties(this, descriptors);\n }\n CompilerRecord.prototype = Object.prototype;\n return {\n keys,\n descriptors,\n create: () => Reflect.construct(CompilerRecord, []) as object\n };\n }\n\n private attachMetadata(output: object, row: number, shape: Shape): void {\n const metadata = (name: string) => {\n const index = shape.keys.indexOf(name);\n return index < 0 ? undefined : this.decode(this.read(row + 1 + index));\n };\n const id = metadata(\"@id\");\n if (id !== undefined && this.dynamicSource && shape.keys.includes(\"type\")) {\n const type = metadata(\"type\");\n if (type !== \"Module\") dynamicNodeSources.set(output, this.dynamicSource);\n }\n if (id !== undefined)\n Object.defineProperty(output, \"nodeId\", {\n value: id,\n writable: true,\n enumerable: false,\n configurable: true\n });\n const start = metadata(\"@start\");\n if (start !== undefined) {\n functionSources.set(output as Parameters<typeof functionSources.set>[0], {\n text: this.source,\n start: start as number,\n end: metadata(\"@end\") as number\n });\n const strict = metadata(\"@strict\");\n if (strict !== undefined)\n functionStrictness.set(\n output as Parameters<typeof functionStrictness.set>[0],\n strict as boolean\n );\n }\n if (metadata(\"@template\") === true)\n templateSources.set(output as Parameters<typeof templateSources.set>[0], this.source);\n }\n\n private object(row: number): object {\n const cached = this.cache.get(row);\n if (cached !== undefined) return cached;\n const tasks: Array<{ row: number; kind: number; output: object }> = [];\n const make = (index: number): object => {\n const cached = this.cache.get(index);\n if (cached) return cached;\n const kind = this.read(index);\n let output: object;\n if (kind === 0) {\n const array: unknown[] = [];\n array.length = this.read(index + 1);\n output = array;\n tasks.push({ row: index, kind, output });\n } else if (kind === 1)\n output = this.positions.span(this.read(index + 1), this.read(index + 2));\n else if (kind === 2)\n output = {\n start: {\n line: this.read(index + 1),\n column: this.read(index + 2),\n offset: this.read(index + 3)\n },\n end: {\n line: this.read(index + 4),\n column: this.read(index + 5),\n offset: this.read(index + 6)\n }\n };\n else {\n const shape = this.shapes[kind - 3]!;\n if (this.boundaries.has(index)) {\n output = shape.create();\n handles.set(output, new CodeRecord(recordToken, this, index));\n this.attachMetadata(output, index, shape);\n } else {\n output = {};\n tasks.push({ row: index, kind, output });\n }\n }\n this.cache.set(index, output);\n if (!this.finished) handles.set(output, new CodeRecord(recordToken, this, index));\n return output;\n };\n const value = (ref: number): unknown =>\n ref >>> 28 === 0 ? make((ref & scalarMask) - 1) : this.decode(ref);\n const output = make(row);\n while (tasks.length) {\n const { row: index, kind, output: target } = tasks.pop()!;\n if (kind === 0) {\n const array = target as unknown[];\n for (let i = 0; i < array.length; i++) array[i] = value(this.read(index + 2 + i));\n } else {\n const shape = this.shapes[kind - 3]!;\n for (let i = 0; i < shape.keys.length; i++) {\n const key = shape.keys[i]!;\n if (!key.startsWith(\"@\"))\n Object.defineProperty(target, key, {\n value: value(this.read(index + 1 + i)),\n writable: true,\n enumerable: true,\n configurable: true\n });\n }\n this.attachMetadata(target, index, shape);\n }\n }\n return output;\n }\n\n // Compiler passes use these private-owner records, not the decoded AST cache.\n isArray(row: number): boolean {\n return this.read(row) === 0;\n }\n *entries(row: number): Iterable<[string, unknown]> {\n const kind = this.read(row),\n cached = this.cache.get(row);\n if (cached) {\n for (const key of Object.keys(cached)) yield [key, this.field(row, key)];\n return;\n }\n if (kind === 0) {\n for (let i = 0, n = this.read(row + 1); i < n; i++)\n yield [String(i), this.decode(this.read(row + 2 + i), true)];\n } else if (kind === 1) {\n yield [\"start\", this.positions.position(this.read(row + 1))];\n yield [\"end\", this.positions.position(this.read(row + 2))];\n } else if (kind === 2) {\n yield [\n \"start\",\n {\n line: this.read(row + 1),\n column: this.read(row + 2),\n offset: this.read(row + 3)\n }\n ];\n yield [\n \"end\",\n {\n line: this.read(row + 4),\n column: this.read(row + 5),\n offset: this.read(row + 6)\n }\n ];\n } else if (kind >= 3) {\n const keys = this.shapes[kind - 3]!.keys;\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]!;\n if (!key.startsWith(\"@\")) yield [key, this.decode(this.read(row + 1 + i), true)];\n }\n }\n }\n field(row: number, key: string): unknown {\n const kind = this.read(row),\n cached = this.cache.get(row);\n if (cached) {\n const descriptor = Object.getOwnPropertyDescriptor(cached, key);\n if (!descriptor) return undefined;\n if (\"value\" in descriptor) return descriptor.value;\n const assigned = this.overrides.get(cached);\n if (assigned?.has(key)) return assigned.get(key);\n if (kind < 3) return Reflect.get(cached, key);\n if (descriptor.get !== this.shapes[kind - 3]!.descriptors[key]?.get)\n return Reflect.get(cached, key);\n }\n if (kind < 3) return undefined;\n const keys = this.shapes[kind - 3]!.keys,\n index = keys.indexOf(key === \"nodeId\" ? \"@id\" : key);\n return index < 0 ? undefined : this.decode(this.read(row + 1 + index), true);\n }\n assignId(row: number, id: number): void {\n const keys = this.shapes[this.read(row) - 3]!.keys,\n index = keys.indexOf(\"@id\");\n if (index < 0) throw new TypeError(\"Compiler record is not an AST node.\");\n this.write(row + 1 + index, this.scalar(id));\n const cached = this.cache.get(row);\n if (cached)\n Object.defineProperty(cached, \"nodeId\", {\n value: id,\n writable: true,\n enumerable: false,\n configurable: true\n });\n }\n offsets(row: number): [number, number] | undefined {\n const span = this.field(row, \"span\");\n if (!(span instanceof CodeRecord)) return undefined;\n const kind = this.read(span.row);\n return kind === 1\n ? [this.read(span.row + 1), this.read(span.row + 2)]\n : kind === 2\n ? [this.read(span.row + 3), this.read(span.row + 6)]\n : undefined;\n }\n}\n\nexport function compilerField(value: unknown, key: string): unknown {\n const handle = record(value);\n return handle\n ? handle.owner.field(handle.row, key)\n : value !== null && typeof value === \"object\"\n ? (value as Record<string, unknown>)[key]\n : undefined;\n}\nexport function compilerIsArray(value: unknown): boolean {\n const handle = record(value);\n return handle ? handle.owner.isArray(handle.row) : Array.isArray(value);\n}\nexport function* compilerEntries(value: object): Iterable<[string, unknown]> {\n const handle = record(value);\n if (handle) yield* handle.owner.entries(handle.row);\n else yield* Object.entries(value);\n}\nexport function* compilerElements(value: unknown): Iterable<unknown> {\n if (value === null || typeof value !== \"object\") return;\n if (Array.isArray(value)) {\n yield* value;\n return;\n }\n for (const [, child] of compilerEntries(value)) yield child;\n}\nexport function compilerAssignId(value: object, id: number): void {\n const handle = record(value);\n if (handle) handle.owner.assignId(handle.row, id);\n else\n Object.defineProperty(value, \"nodeId\", {\n value: id,\n writable: true,\n enumerable: false,\n configurable: true\n });\n}\nexport function compilerOffsets(value: unknown): [number, number] | undefined {\n const handle = record(value);\n if (handle) return handle.owner.offsets(handle.row);\n const span = compilerField(value, \"span\") as SourceSpan | undefined;\n return span ? [span.start.offset, span.end.offset] : undefined;\n}\nexport function compactAstStatistics(value: object) {\n return record(value)?.owner.statistics();\n}\n\n/** Internal source index; row authority remains hidden from native Map hooks. */\nclass CompactNodeIndex extends Map<number, ParseResult> {\n #rows: Map<number, number>;\n #decode: (row: number) => ParseResult;\n constructor(token: symbol, rows: Map<number, number>, decode: (row: number) => ParseResult) {\n super();\n if (token !== recordToken) throw new TypeError(\"Foreign compiler index authority.\");\n this.#rows = rows;\n this.#decode = decode;\n }\n override get size(): number {\n return nativeIndexMap.size(this.#rows);\n }\n override has(key: number): boolean {\n return nativeIndexMap.has(this.#rows, key);\n }\n override get(key: number): ParseResult | undefined {\n if (nativeIndexMap.has(this, key)) return nativeIndexMap.get(this, key);\n const row = nativeIndexMap.get(this.#rows, key);\n return row === undefined ? undefined : this.#decode(row);\n }\n override set(key: number, value: ParseResult): this {\n if (!nativeIndexMap.has(this.#rows, key)) nativeIndexMap.set(this.#rows, key, -1);\n nativeIndexMap.set(this, key, value);\n return this;\n }\n override delete(key: number): boolean {\n nativeIndexMap.delete(this, key);\n return nativeIndexMap.delete(this.#rows, key);\n }\n override clear(): void {\n nativeIndexMap.clear(this);\n nativeIndexMap.clear(this.#rows);\n }\n override keys(): MapIterator<number> {\n return nativeIndexMap.keys(this.#rows);\n }\n override *values(): MapIterator<ParseResult> {\n for (const key of this.keys()) yield this.get(key)!;\n }\n override *entries(): MapIterator<[number, ParseResult]> {\n for (const key of this.keys()) yield [key, this.get(key)!];\n }\n override [Symbol.iterator](): MapIterator<[number, ParseResult]> {\n return this.entries();\n }\n override forEach(\n callback: (value: ParseResult, key: number, map: Map<number, ParseResult>) => void,\n thisArg?: unknown\n ): void {\n for (const [key, value] of this) callback.call(thisArg, value, key, this);\n }\n}\n\nexport function compactDynamicNodes(\n root: object,\n source: DynamicSource\n): Map<number, ParseResult> | undefined {\n const handle = record(root);\n return handle?.owner.dynamicNodes(handle.row, source);\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 \"WithStatement\":\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 compilerElements,\n compilerEntries,\n compilerField,\n compilerIsArray\n} from \"./compact-module-ast.js\";\n\ntype PrivateScope = { names: Set<string>; parent?: PrivateScope };\n\n/** Check complete class bodies so private references may precede declarations. */\nexport function validatePrivateNames(root: unknown, inheritedNames?: ReadonlySet<string>): void {\n const pending: Array<{\n value: unknown;\n scope?: PrivateScope;\n declaration?: boolean;\n }> = [\n {\n value: root,\n scope: inheritedNames === undefined ? undefined : { names: new Set(inheritedNames) }\n }\n ];\n while (pending.length > 0) {\n const { value, scope, declaration } = pending.pop()!;\n if (value === null || typeof value !== \"object\") continue;\n if (compilerIsArray(value)) {\n for (const entry of compilerElements(value)) pending.push({ value: entry, scope });\n continue;\n }\n const type = compilerField(value, \"type\");\n if (type === \"ClassDeclaration\" || type === \"ClassExpression\") {\n pending.push({ value: compilerField(value, \"superClass\"), scope });\n const inner: PrivateScope = { names: new Set(), parent: scope };\n const declarations = new Map<string, { kind: string; static: boolean }>();\n const body = compilerField(value, \"body\");\n for (const element of compilerElements(compilerField(body, \"body\"))) {\n const key = compilerField(element, \"key\");\n if (\n compilerField(element, \"type\") === \"StaticBlock\" ||\n compilerField(key, \"type\") !== \"PrivateIdentifier\"\n )\n continue;\n const name = compilerField(key, \"name\") as string;\n if (name === \"constructor\") throw new Error(\"Private name #constructor is forbidden.\");\n const kind =\n compilerField(element, \"type\") === \"MethodDefinition\"\n ? (compilerField(element, \"kind\") as string)\n : \"field\";\n const isStatic = compilerField(element, \"static\") as boolean;\n const previous = declarations.get(name);\n if (\n previous !== undefined &&\n !(\n previous.static === isStatic &&\n ((previous.kind === \"get\" && kind === \"set\") ||\n (previous.kind === \"set\" && kind === \"get\"))\n )\n )\n throw new Error(`Duplicate private name #${name}.`);\n declarations.set(name, {\n kind: previous === undefined ? kind : \"pair\",\n static: isStatic\n });\n inner.names.add(name);\n }\n pending.push({ value: body, scope: inner });\n continue;\n }\n if (type === \"PrivateIdentifier\") {\n if (declaration) continue;\n const name = String(compilerField(value, \"name\"));\n let owner = scope;\n while (owner !== undefined && !owner.names.has(name)) owner = owner.parent;\n if (owner === undefined) throw new Error(`Undeclared private name #${name}.`);\n continue;\n }\n if (type === \"MemberExpression\") {\n const property = compilerField(value, \"property\");\n if (\n compilerField(property, \"type\") === \"PrivateIdentifier\" &&\n compilerField(compilerField(value, \"object\"), \"type\") === \"Super\"\n )\n throw new Error(\"super cannot access a private name.\");\n }\n if (type === \"UnaryExpression\" && compilerField(value, \"operator\") === \"delete\") {\n const argument = compilerField(value, \"argument\");\n if (\n compilerField(argument, \"type\") === \"MemberExpression\" &&\n compilerField(compilerField(argument, \"property\"), \"type\") === \"PrivateIdentifier\"\n )\n throw new Error(\"Private elements cannot be deleted.\");\n }\n for (const [key, child] of compilerEntries(value)) {\n if (key === \"span\") continue;\n pending.push({\n value: child,\n scope,\n declaration: key === \"key\" && (type === \"MethodDefinition\" || type === \"PropertyDefinition\")\n });\n }\n }\n}\n", "import type { Position, Token, TokenType } from \"./tokenizer.js\";\nimport type { CompactSourcePositions } from \"./compact-spans.js\";\n\nconst types: readonly TokenType[] = [\n \"identifier\",\n \"private-identifier\",\n \"keyword\",\n \"escaped-keyword\",\n \"numeric\",\n \"regex\",\n \"string\",\n \"template\",\n \"punctuator\",\n \"eof\"\n];\nconst stride = 3;\nconst legacyEscape = 256;\nconst tokenCacheSize = 256;\n\n/** Private indexed compiler storage; the public tokenizer stays eager. */\nexport class CompactTokens {\n private rows = new Uint32Array(1024 * stride);\n private readonly values: string[] = [];\n private readonly templates = new Map<number, Token[\"templateExpressions\"]>();\n private readonly tokens = new Map<number, Token>();\n private last?: Token;\n private readonly parserToken?: (type: TokenType, value: string, start: number, end: number) => Token;\n\n constructor(private readonly sourcePositions: CompactSourcePositions, lazyPositions = false) {\n if (!lazyPositions) return;\n // Compiler lookahead usually reads only type/value. These private tokens\n // need no own enumerable coordinates; ordinary tokenizer output stays eager.\n // Once observed, each coordinate keeps its identity even after cache eviction.\n class ParserToken implements Token {\n #start: number | Position;\n #end: number | Position;\n constructor(public type: TokenType, public value: string, start: number, end: number) {\n this.#start = start;\n this.#end = end;\n }\n get start(): Position {\n if (typeof this.#start === \"number\") this.#start = sourcePositions.position(this.#start);\n return this.#start;\n }\n get end(): Position {\n if (typeof this.#end === \"number\") this.#end = sourcePositions.position(this.#end);\n return this.#end;\n }\n }\n this.parserToken = (type, value, start, end) => new ParserToken(type, value, start, end);\n }\n\n // Only indexing, iteration, length, push and at are used by the lexer/parser.\n // Historical tokens are materialized on demand in a bounded cache.\n readonly indexed: Token[] = new Proxy([] as Token[], {\n get: (target, key, receiver) => {\n if (key === \"length\") return this.values.length;\n if (key === \"push\") return this.push;\n const index = arrayIndex(key);\n return index === undefined ? Reflect.get(target, key, receiver) : this.get(index);\n },\n set: () => {\n throw new TypeError(\"Compiler token rows cannot be reassigned.\");\n }\n });\n\n finish(): Token[] {\n // Parsing needs every token's row initially, but not spare growth capacity.\n this.rows = this.rows.slice(0, this.values.length * stride);\n if (this.last) {\n this.last.start = this.sourcePositions.position(this.last.start.offset);\n this.last.end = this.sourcePositions.position(this.last.end.offset);\n }\n return this.indexed;\n }\n\n private push = (token: Token): number => {\n // String/template scanners annotate the last token after publishing it.\n // Commit those annotations before that token becomes a historical row.\n if (this.last !== undefined) {\n const previous = this.values.length - 1;\n if (this.last.legacyEscape) this.rows[previous * stride + 2] |= legacyEscape;\n if (this.last.templateExpressions !== undefined)\n this.templates.set(previous, this.last.templateExpressions);\n }\n const index = this.values.length;\n const base = index * stride;\n if (base + stride > this.rows.length) {\n const rows = new Uint32Array(this.rows.length * 2);\n rows.set(this.rows);\n this.rows = rows;\n }\n this.rows.set([token.start.offset, token.end.offset, types.indexOf(token.type)], base);\n this.values.push(token.value);\n this.last = token;\n return index + 1;\n };\n\n private get(index: number): Token | undefined {\n if (index >= this.values.length) return undefined;\n if (index === this.values.length - 1) return this.last;\n const cached = this.tokens.get(index);\n if (cached !== undefined) return cached;\n const base = index * stride;\n const bits = this.rows[base + 2]!;\n const token: Token = this.parserToken?.(\n types[bits & 255]!, this.values[index]!, this.rows[base]!, this.rows[base + 1]!\n ) ?? {\n type: types[bits & 255]!,\n value: this.values[index]!,\n start: this.sourcePositions.position(this.rows[base]!),\n end: this.sourcePositions.position(this.rows[base + 1]!)\n };\n if (bits & legacyEscape) token.legacyEscape = true;\n const expressions = this.templates.get(index);\n if (expressions !== undefined) token.templateExpressions = expressions;\n if (this.tokens.size === tokenCacheSize) this.tokens.delete(this.tokens.keys().next().value!);\n this.tokens.set(index, token);\n return token;\n }\n}\n\nfunction arrayIndex(key: string | symbol): number | undefined {\n if (typeof key !== \"string\") return undefined;\n const index = Number(key);\n return Number.isSafeInteger(index) && index >= 0 && String(index) === key ? index : undefined;\n}\n", "import { CompactTokens } from \"./compact-tokens.js\";\nimport type { CompactSourcePositions } from \"./compact-spans.js\";\nimport { 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 | \"private-identifier\"\n | \"keyword\"\n | \"escaped-keyword\"\n | \"numeric\"\n | \"regex\"\n | \"string\"\n | \"template\"\n | \"punctuator\"\n | \"eof\";\n\nexport type Token = {\n type: TokenType;\n value: string;\n legacyEscape?: boolean;\n templateExpressions?: ReadonlyArray<{ start: number; end: number }>;\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 statementList?: boolean;\n allowLegacyNumbers?: boolean;\n allowLegacyEscapes?: boolean;\n allowHtmlComments?: boolean;\n comments?: Comment[];\n compilation?: CompileScope;\n // Internal source graphs can reuse immutable token boundary positions.\n sharedPositions?: boolean;\n};\n\nconst freezePosition = Object.freeze;\n\nconst KEYWORDS = new Set([\n \"class\",\n \"extends\",\n \"super\",\n \"const\",\n \"let\",\n \"if\",\n \"else\",\n \"for\",\n \"do\",\n \"while\",\n \"with\",\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 \"typeof\",\n \"void\",\n \"delete\",\n \"this\",\n \"instanceof\",\n \"in\",\n \"of\"\n]);\n\nconst EXPRESSION_ENDING_KEYWORDS = new Set([\"true\", \"false\", \"null\"]);\nexport const RESERVED_IDENTIFIER_SPELLINGS = new Set([\"case\", \"default\", \"debugger\", \"enum\", \"export\", \"new\", \"switch\", \"var\"]);\nconst CONTROL_FLOW_PAREN_KEYWORDS = new Set([\"if\", \"while\", \"with\", \"for\", \"catch\", \"switch\"]);\nconst MAX_UNICODE_CODE_POINT = 0x10ffff;\nconst IDENTIFIER_START_PATTERN = /^\\p{ID_Start}$/u;\nconst IDENTIFIER_PART_PATTERN = /^\\p{ID_Continue}$/u;\nconst SPACE_SEPARATOR_PATTERN = /^\\p{Zs}$/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\n/** Internal classic compilation with bounded materialized token/position caches. */\nexport function tokenizeCompact(\n source: string,\n options: TokenizeOptions,\n positions: CompactSourcePositions,\n lazyPositions = false\n): Token[] {\n const tokens = new CompactTokens(positions, lazyPositions);\n new Lexer(source, {...options, sharedPositions: true}, tokens.indexed).tokenize();\n return tokens.finish();\n}\n\nexport function collectComments(source: string): Comment[] {\n const comments: Comment[] = [];\n tokenize(source, { allowRegexLiterals: true, statementList: true, comments });\n return comments;\n}\n\ntype GroupingContext = {\n value: \"(\" | \"[\" | \"{\";\n isControlCondition?: boolean;\n statementList?: boolean;\n closesStatement?: boolean;\n classBody?: boolean;\n functionParameters?: boolean;\n};\n\ntype GroupingState = {\n stack: GroupingContext[];\n classHeads: Array<{depth: number; declaration: boolean}>;\n tokenCount: number;\n functionBody?: boolean;\n};\n\nclass Lexer {\n private index = 0;\n private line = 1;\n private column = 1;\n private readonly groupingState: GroupingState = {stack: [], classHeads: [], tokenCount: 0};\n private lastClosedStatementBoundary = false;\n private legacyStringEscape = false;\n private lineHasToken = false;\n private lastPosition?: Position;\n\n constructor(\n private readonly source: string,\n private readonly options: TokenizeOptions,\n private readonly tokens: Token[] = []\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.options.allowHtmlComments && 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 (char === \"#\") {\n this.advance();\n this.readIdentifierOrKeyword(start, true);\n continue;\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.options.allowHtmlComments) {\n const open = this.source.startsWith(\"<!--\", this.index);\n const close = !this.lineHasToken && this.source.startsWith(\"-->\", this.index);\n if (open || close) {\n this.skipLineComment(open ? 4 : 3);\n continue;\n }\n }\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, privateName = false): void {\n let value = \"\";\n let isStart = true;\n let escapedKeyword = false;\n\n while (!this.isAtEnd()) {\n if (this.startsUnicodeEscape()) {\n escapedKeyword = true;\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 if (privateName && isStart) this.syntaxError(\"Expected private identifier\", start);\n const type = privateName ? \"private-identifier\"\n : escapedKeyword && (KEYWORDS.has(value) || RESERVED_IDENTIFIER_SPELLINGS.has(value)) ? \"escaped-keyword\"\n : KEYWORDS.has(value) ? \"keyword\" : \"identifier\";\n this.pushToken(type, start, value);\n }\n\n private readString(start: Position, quote: string): void {\n this.legacyStringEscape = false;\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 if (this.legacyStringEscape) this.tokens[this.tokens.length - 1]!.legacyEscape = true;\n return;\n }\n\n if (char === \"\\\\\") {\n this.readEscapedLiteralCharacter();\n continue;\n }\n\n if (char === \"\\n\" || char === \"\\r\") {\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 const expressions: Array<{ start: number; end: number }> = [];\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 this.tokens[this.tokens.length - 1]!.templateExpressions = expressions;\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 expressions.push({\n start: expressionStart.offset + 2 - start.offset,\n end: this.index - 1 - start.offset\n });\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 groupingState: GroupingState = {stack: [], classHeads: [], tokenCount: 0};\n let lastClosedStatementBoundary = false;\n\n while (!this.isAtEnd() && depth > 0) {\n this.skipTrivia();\n if (this.isAtEnd()) break;\n const char = this.currentChar();\n\n if (!this.options.allowHtmlComments && 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 lastClosedStatementBoundary = false;\n continue;\n }\n\n if (char === \"`\") {\n this.skipNestedTemplate();\n tokens.push({ type: \"template\", value: \"`\" });\n lastClosedStatementBoundary = 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 lastClosedStatementBoundary = 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 lastClosedStatementBoundary = false;\n continue;\n }\n\n if (char === \"{\") {\n depth += 1;\n this.advance();\n const previousToken = tokens[tokens.length - 1];\n tokens.push({ type: \"punctuator\", value: \"{\" });\n updateGroupingState(groupingState, previousToken, \"{\", lastClosedStatementBoundary, false, tokens);\n lastClosedStatementBoundary = false;\n continue;\n }\n\n if (char === \"}\") {\n depth -= 1;\n this.advance();\n\n if (depth === 0) {\n return;\n }\n\n const previousToken = tokens[tokens.length - 1];\n tokens.push({ type: \"punctuator\", value: \"}\" });\n lastClosedStatementBoundary = updateGroupingState(groupingState, previousToken, \"}\", lastClosedStatementBoundary, false, tokens);\n continue;\n }\n\n if (\n char === \"/\" &&\n shouldRejectRegexLiteral(tokens[tokens.length - 1], lastClosedStatementBoundary, tokens)\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 lastClosedStatementBoundary = 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 lastClosedStatementBoundary = updateGroupingState(\n groupingState,\n previousToken,\n punctuator,\n lastClosedStatementBoundary,\n false,\n tokens\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 (char === \"\\n\" || char === \"\\r\") {\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(delimiterLength = 2): void {\n const start = this.position();\n this.advanceBy(delimiterLength);\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 const lineHadToken = this.lineHasToken;\n let containsLineBreak = false;\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.lineHasToken = containsLineBreak ? false : lineHadToken;\n this.recordComment(\"block\", start, valueStart, valueEnd);\n return;\n }\n if (isLineBreak(this.currentChar())) containsLineBreak = true;\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 if (this.currentChar() === \"n\") this.advance();\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 if (this.currentChar() === \"n\") this.advance();\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 if (this.currentChar() === \"n\") this.advance();\n this.rejectInvalidNumericLiteralContinuation();\n return this.source.slice(start.offset, this.index);\n }\n\n if (isDecimalDigit(prefix)) {\n if (this.options.allowLegacyNumbers) {\n let octal = true;\n while (isDecimalDigit(this.currentChar())) {\n if (!isOctalDigit(this.currentChar())) octal = false;\n this.advance();\n }\n if (!octal) {\n if (this.currentChar() === \".\") {\n this.advance();\n this.consumeOptionalDecimalDigits();\n }\n this.consumeExponent();\n }\n this.rejectBigIntSuffix();\n this.rejectInvalidNumericLiteralContinuation();\n return this.source.slice(start.offset, this.index);\n }\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() === \"n\") {\n this.advance();\n this.rejectInvalidNumericLiteralContinuation();\n return this.source.slice(start.offset, this.index);\n }\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 literals cannot contain a fraction or exponent\", 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 shouldRejectRegexLiteral(this.lastSignificantToken(), this.lastClosedStatementBoundary, this.tokens)\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 if (isLineBreak(this.currentChar())) this.syntaxError(\"Unterminated regular expression literal\", this.position());\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.lastClosedStatementBoundary = updateGroupingState(\n this.groupingState,\n previousToken,\n value,\n this.lastClosedStatementBoundary,\n this.options.statementList === true,\n this.tokens\n );\n return;\n }\n\n this.lastClosedStatementBoundary = 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 if (!this.options.allowLegacyEscapes)\n this.syntaxError(\"Legacy octal escape sequences are not supported\", escapeStart);\n this.legacyStringEscape = true;\n }\n return;\n }\n\n if (isOctalDigit(escaped)) {\n if (!this.options.allowLegacyEscapes)\n this.syntaxError(\"Legacy octal escape sequences are not supported\", escapeStart);\n this.legacyStringEscape = true;\n }\n if (escaped === \"8\" || escaped === \"9\") {\n if (!this.options.allowLegacyEscapes)\n this.syntaxError(\"Legacy decimal escape sequences are not supported\", escapeStart);\n this.legacyStringEscape = true;\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 if (this.options.sharedPositions && this.lastPosition?.offset === this.index)\n return this.lastPosition;\n const position = {\n line: this.line,\n column: this.column,\n offset: this.index\n };\n if (!this.options.sharedPositions) return position;\n return (this.lastPosition = freezePosition(position));\n }\n\n private advance(): void {\n if (this.isAtEnd()) {\n return;\n }\n\n const char = this.currentChar();\n if (isLineBreak(char)) this.lineHasToken = false;\n else if (!isWhitespace(char)) this.lineHasToken = true;\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 (isLineBreak(char)) {\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 (char.charCodeAt(0) > 0x7f && SPACE_SEPARATOR_PATTERN.test(char));\n}\n\nfunction isLineBreak(char: string): boolean {\n return char === \"\\n\" || char === \"\\r\" || char === \"\\u2028\" || char === \"\\u2029\";\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 lastClosedStatementBoundary: boolean,\n tokens: ReadonlyArray<Pick<Token, \"type\" | \"value\">>\n): boolean {\n if (previousToken === undefined) {\n return true;\n }\n\n // `new` is tokenized as an identifier but starts a constructor expression.\n // An IdentifierName in a member access still ends an expression.\n if (previousToken.type === \"identifier\" && previousToken.value === \"new\" &&\n tokens.at(-2)?.value !== \".\" && tokens.at(-2)?.value !== \"?.\") return true;\n\n if (\n previousToken.type === \"identifier\" ||\n previousToken.type === \"private-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 if (previousToken.value === \"of\") return endsWithForOfSeparator(tokens);\n return !EXPRESSION_ENDING_KEYWORDS.has(previousToken.value);\n }\n\n if (previousToken.value === \")\" || previousToken.value === \"}\") {\n return lastClosedStatementBoundary;\n }\n\n return !isExpressionEndingPunctuator(previousToken.value);\n}\n\nfunction endsWithForOfSeparator(tokens: ReadonlyArray<Pick<Token, \"type\" | \"value\">>): boolean {\n let depth = 0;\n let start = -1;\n for (let index = tokens.length - 2; index >= 0; index--) {\n const token = tokens[index];\n if (token.type !== \"punctuator\") continue;\n if ([\")\", \"]\", \"}\"].includes(token.value)) depth++;\n else if ([\"(\", \"[\", \"{\"].includes(token.value)) {\n if (depth > 0) { depth--; continue; }\n if (token.value === \"(\" && (tokens[index - 1]?.value === \"for\" ||\n (tokens[index - 1]?.value === \"await\" && tokens[index - 2]?.value === \"for\"))) start = index + 1;\n break;\n } else if (depth === 0 && token.value === \";\") break;\n }\n if (start < 0) return false;\n depth = 0;\n for (let index = start; index < tokens.length; index++) {\n const token = tokens[index];\n if (token.type === \"punctuator\") {\n if ([\"(\", \"[\", \"{\"].includes(token.value)) depth++;\n else if ([\")\", \"]\", \"}\"].includes(token.value)) depth--;\n }\n if (depth === 0 && token.type === \"keyword\" && token.value === \"of\" &&\n index !== start && tokens[index - 1]?.value !== \".\" && tokens[index - 1]?.value !== \"?.\" &&\n !(index === start + 1 && [\"const\", \"let\", \"var\"].includes(tokens[start].value)))\n return index === tokens.length - 1;\n }\n return false;\n}\n\nfunction updateGroupingState(\n state: GroupingState,\n previousToken: Pick<Token, \"type\" | \"value\"> | undefined,\n punctuator: string,\n previousStatementBoundary: boolean,\n initialStatementList: boolean,\n tokens: ReadonlyArray<Pick<Token, \"type\" | \"value\">>\n): boolean {\n const groupingStack = state.stack;\n const functionBody = state.functionBody;\n state.functionBody = false;\n for (let index = state.tokenCount; index < tokens.length; index++) {\n const token = tokens[index];\n if (token.type !== \"keyword\" || token.value !== \"class\") continue;\n const before = tokens[index - 1];\n if (before?.value === \".\" || before?.value === \"?.\") continue;\n const next = tokens[index + 1]?.value;\n const afterName = tokens[index + 2]?.value;\n if (next !== \"{\" && next !== \"extends\" && afterName !== \"{\" && afterName !== \"extends\") continue;\n const parent = groupingStack[groupingStack.length - 1];\n if (parent?.classBody && (before === undefined || [\"{\", \"}\", \";\", \"static\"].includes(before.value) ||\n [\"identifier\", \"numeric\", \"string\", \"template\", \"regex\"].includes(before.type))) continue;\n state.classHeads.push({depth: groupingStack.length,\n declaration: isDeclarationPosition(tokens, index, groupingStack, initialStatementList)});\n }\n state.tokenCount = tokens.length;\n const beforePreviousToken = tokens[tokens.length - 3];\n if (punctuator === \"(\") {\n let functionIndex = tokens.length - 2;\n if (tokens[functionIndex]?.value !== \"function\") {\n if (tokens[functionIndex]?.value !== \"*\") functionIndex--;\n if (tokens[functionIndex]?.value === \"*\") functionIndex--;\n }\n const functionParameters = tokens[functionIndex]?.type === \"keyword\" && tokens[functionIndex].value === \"function\";\n const functionDeclaration = functionParameters && isDeclarationPosition(tokens, functionIndex, groupingStack, initialStatementList);\n groupingStack.push({\n value: \"(\", functionParameters,\n isControlCondition: functionDeclaration || (\n (previousToken?.type === \"keyword\" || previousToken?.type === \"identifier\") &&\n (CONTROL_FLOW_PAREN_KEYWORDS.has(previousToken.value) ||\n (previousToken.value === \"await\" && beforePreviousToken?.type === \"keyword\" && beforePreviousToken.value === \"for\")) &&\n beforePreviousToken?.value !== \".\" && beforePreviousToken?.value !== \"?.\")\n });\n return false;\n }\n\n if (punctuator === \"[\") {\n groupingStack.push({ value: \"[\" });\n return false;\n }\n\n if (punctuator === \"{\") {\n const classHead = state.classHeads[state.classHeads.length - 1];\n if (!functionBody && previousToken?.value !== \"=>\" && classHead?.depth === groupingStack.length) {\n state.classHeads.pop();\n groupingStack.push({value: \"{\", classBody: true, closesStatement: classHead.declaration});\n return false;\n }\n const parent = groupingStack[groupingStack.length - 1];\n const closesStatement = previousToken === undefined ? initialStatementList\n : previousStatementBoundary ||\n ([\"{\", \";\"].includes(previousToken.value) && (parent === undefined || parent.statementList === true)) ||\n (previousToken.type === \"keyword\" && [\"else\", \"do\", \"try\", \"finally\"].includes(previousToken.value));\n groupingStack.push({ value: \"{\", closesStatement,\n statementList: closesStatement || previousToken?.value === \")\" || previousToken?.value === \"=>\" || previousToken?.value === \"static\" });\n return false;\n }\n\n if (punctuator === \")\") {\n const group = popGroupingContext(groupingStack, \"(\");\n state.functionBody = group?.functionParameters === true;\n return group?.isControlCondition === true;\n }\n\n if (punctuator === \"]\") {\n popGroupingContext(groupingStack, \"[\");\n return false;\n }\n\n if (punctuator === \"}\") {\n return popGroupingContext(groupingStack, \"{\")?.closesStatement === true;\n }\n\n return false;\n}\n\nfunction isDeclarationPosition(\n tokens: ReadonlyArray<Pick<Token, \"type\" | \"value\">>,\n index: number,\n groupingStack: GroupingContext[],\n initialStatementList: boolean\n): boolean {\n const parent = groupingStack[groupingStack.length - 1];\n if (parent === undefined ? !initialStatementList : parent.statementList !== true) return false;\n if (tokens[index - 1]?.value === \"async\") index--;\n const previous = tokens[index - 1];\n return previous === undefined || [\"{\", \"}\", \";\", \")\", \"]\", \"export\", \"default\"].includes(previous.value) ||\n [\"identifier\", \"numeric\", \"string\", \"template\", \"regex\"].includes(previous.type) ||\n (previous.type === \"keyword\" && EXPRESSION_ENDING_KEYWORDS.has(previous.value));\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 {\n compilerAssignId,\n compilerElements,\n compilerEntries,\n compilerField,\n compilerIsArray,\n compilerOffsets\n} from \"./compact-module-ast.js\";\nimport 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\n/** First assignment traverses private numeric rows without creating AST facades. */\nexport function assignCompactIds<T extends Module | ParseResult>(root: T): T {\n const stack: unknown[] = [root];\n let nextId = 0;\n const isNode = (value: unknown): value is object =>\n value !== null &&\n typeof value === \"object\" &&\n typeof compilerField(value, \"type\") === \"string\" &&\n compilerOffsets(value) !== undefined;\n while (stack.length) {\n const node = stack.pop();\n if (!isNode(node) || compilerField(node, \"nodeId\") !== undefined) continue;\n compilerAssignId(node, nextId++);\n const type = compilerField(node, \"type\");\n const children: object[] = [];\n const add = (value: unknown) => {\n if (isNode(value)) children.push(value);\n else if (compilerIsArray(value))\n for (const child of compilerElements(value))\n if (isNode(child)) children.push(child);\n };\n if (type === \"UnaryExpression\") add(compilerField(node, \"argument\"));\n else if (type === \"ExpressionStatement\")\n add(compilerField(node, \"expression\"));\n else if (type === \"Module\") add(compilerField(node, \"body\"));\n else {\n for (const [key, child] of compilerEntries(node))\n if (key !== \"nodeId\" && key !== \"span\" && key !== \"type\") add(child);\n children.sort((left, right) => {\n const a = compilerOffsets(left)!,\n b = compilerOffsets(right)!;\n return a[0] - b[0] || a[1] - b[1];\n });\n }\n for (let i = children.length - 1; i >= 0; i--) stack.push(children[i]);\n }\n return root;\n}\n", "import { attachErrorSpan, replaceErrorStack } from \"../error/shape.js\";\nimport { formatParseError, type ParseDiagnostic } from \"./format-error.js\";\n\n// Only parser-created diagnostics cross the native-error conversion boundary.\n// Arbitrary host error properties and stacks are not source authority.\nexport const syntaxDiagnostics = new WeakMap<Error, ParseDiagnostic>();\n\nexport function createSyntaxDiagnostic(source: string, filename: string, failure: unknown): SyntaxError {\n const error = new SyntaxError(failure instanceof Error ? failure.message : String(failure));\n replaceErrorStack(error);\n const formatted = formatParseError(source, filename, error);\n const diagnostic: ParseDiagnostic = {\n kind: formatted.kind, filename, message: error.message,\n line: formatted.line, column: formatted.column,\n excerpt: formatted.excerpt, caret: formatted.caret\n };\n syntaxDiagnostics.set(error, diagnostic);\n Object.assign(error, diagnostic);\n attachErrorSpan(error, formatted.span);\n return error;\n}\n", "import type { Token } from \"./tokenizer.js\";\nimport type {\n ClassDeclaration,\n Expression,\n FunctionDeclaration,\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 | ClassDeclaration | FunctionDeclaration;\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 | ClassDeclaration | FunctionDeclaration;\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 | ClassDeclaration | FunctionDeclaration\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 allowTrivia = false\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 metaToken.end.offset - metaToken.start.offset === metaToken.value.length &&\n (allowTrivia || (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\nconst groupNameStart = /^[$_\\p{ID_Start}]$/u;\nconst groupNamePart = /^[$\\u200c\\u200d\\p{ID_Continue}]$/u;\n\nexport type RegexFlags = {\n hasIndices: boolean;\n global: boolean;\n sticky: boolean;\n unicode: boolean;\n unicodeSets: boolean;\n ignoreCase: boolean;\n multiline: boolean;\n dotAll: boolean;\n};\n\nexport type CharacterKind = \"digit\" | \"word\" | \"space\";\ntype RegexModifiers = Partial<Pick<RegexFlags, \"ignoreCase\" | \"multiline\" | \"dotAll\">>;\n\nexport type CharacterClassItem =\n | { type: \"character\"; value: string }\n | { type: \"range\"; from: string; to: string }\n | { type: \"kind\"; kind: CharacterKind; negated: boolean }\n | { type: \"property\"; value: string; negated: boolean; strings?: boolean }\n | { type: \"strings\"; values: string[] }\n | { type: \"set\"; value: CharacterSet };\n\nexport type CharacterSet = {\n negated: boolean;\n items: CharacterClassItem[];\n operation?: \"intersection\" | \"subtraction\";\n strings?: boolean;\n};\n\nexport type RegexNode =\n | { type: \"empty\" }\n | { type: \"literal\"; value: string }\n | { type: \"backreference\"; index: number }\n | { type: \"namedBackreference\"; name: string }\n | { type: \"dot\" }\n | { type: \"anchor\"; kind: \"start\" | \"end\" }\n | { type: \"wordBoundary\"; negated: boolean }\n | ({ type: \"characterClass\" } & CharacterSet)\n | { type: \"sequence\"; elements: RegexNode[] }\n | { type: \"alternation\"; alternatives: RegexNode[] }\n | { type: \"group\"; capturing: boolean; index?: number; name?: string; modifiers?: RegexModifiers; body: RegexNode }\n | { type: \"lookahead\"; negated: boolean; body: RegexNode }\n | { type: \"lookbehind\"; negated: boolean; 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 groups?: Record<string, number[]>;\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, parsedFlags.unicode || parsedFlags.unicodeSets, parsedFlags.unicodeSets);\n const body = parser.parse();\n guard.allocate(5 + source.length);\n const pattern: RegexPattern = { source, flags: parsedFlags, captureCount: parser.captureCount, body };\n if (Object.keys(parser.namedGroups).length > 0) pattern.groups = parser.namedGroups;\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 private totalCaptureCount?: number;\n private hasNamedCaptures = false;\n readonly namedGroups: Record<string, number[]> = Object.create(null);\n\n constructor(\n private readonly source: string,\n private readonly guard: RegexCompileGuard,\n private readonly unicode: boolean,\n private readonly unicodeSets: boolean\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 if (this.unicode || Object.keys(this.namedGroups).length > 0) this.validateNamedGroups(body);\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 === \"{\" && this.unicode)) {\n this.fail(\"Nothing to repeat\", quantifierStart);\n }\n if (current === \"{\") {\n const quantifier = this.parseQuantifier();\n this.position = quantifierStart;\n if (quantifier !== undefined) 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\" || body.type === \"lookbehind\" ||\n (this.unicode && body.type === \"lookahead\")) {\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.takeCharacter();\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 if (this.unicode && (character === \"]\" || character === \"}\")) this.fail(\"Invalid Unicode pattern character\");\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 let name: string | undefined;\n let modifiers: RegexModifiers | undefined;\n let assertionNegated: boolean | undefined;\n let lookbehind = false;\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 capturing = false;\n assertionNegated = extension.startsWith(\"?!\");\n this.position += 2;\n } else if (extension.startsWith(\"?<=\") || extension.startsWith(\"?<!\")) {\n capturing = false;\n assertionNegated = extension.startsWith(\"?<!\");\n lookbehind = true;\n this.position += 3;\n } else if (extension.startsWith(\"?<\")) {\n this.position += 2;\n name = this.parseGroupName(start);\n } else if (\"ims-\".includes(extension[1] ?? \"\") && extension.length > 1) {\n capturing = false;\n this.position++;\n modifiers = this.parseModifiers(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 if (name !== undefined) {\n this.guard.allocate(name.length + 2);\n const indices = this.namedGroups[name] ??= [];\n this.guard.array(indices.length + 1);\n indices.push(index!);\n }\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 if (assertionNegated !== undefined) {\n this.guard.allocate(4);\n return { type: lookbehind ? \"lookbehind\" : \"lookahead\", negated: assertionNegated, body };\n }\n this.guard.allocate(5);\n return { type: \"group\", capturing, index, body, ...(name === undefined ? {} : { name }),\n ...(modifiers === undefined ? {} : { modifiers }) };\n }\n\n private parseModifiers(start: number): RegexModifiers {\n this.guard.allocate(2);\n const modifiers: RegexModifiers = {};\n let enabled = true;\n while (!this.atEnd() && this.peek() !== \":\") {\n const flag = this.take();\n if (flag === \"-\" && enabled) { enabled = false; continue; }\n const name = flag === \"i\" ? \"ignoreCase\" : flag === \"m\" ? \"multiline\" : flag === \"s\" ? \"dotAll\" : undefined;\n if (name === undefined || Object.hasOwn(modifiers, name)) this.fail(\"Invalid regex modifiers\", start);\n this.guard.allocate(1);\n modifiers[name] = enabled;\n }\n if (this.take() !== \":\" || Object.keys(modifiers).length === 0) this.fail(\"Invalid regex modifiers\", start);\n return modifiers;\n }\n\n private parseCharacterClass(start: number): RegexNode {\n if (this.unicodeSets) return { type: \"characterClass\", ...this.parseUnicodeSet(start) };\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 if (this.unicode) this.fail(\"Character class ranges require literal endpoints\", rangePosition);\n this.guard.array(items.length + 3);\n this.guard.allocate(4);\n items.push(left, { type: \"character\", value: \"-\" }, right);\n continue;\n }\n if (left.value.codePointAt(0)! > right.value.codePointAt(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.takeCharacter() };\n }\n\n private parseUnicodeSet(start: number): CharacterSet {\n this.guard.enterGroup();\n try {\n const negated = this.peek() === \"^\";\n if (negated) this.position++;\n this.guard.allocate(5);\n const items: CharacterClassItem[] = [];\n let operation: CharacterSet[\"operation\"];\n while (!this.atEnd() && this.peek() !== \"]\") {\n this.guard.array(items.length + 1);\n let item = this.parseUnicodeSetItem(start);\n if (this.peek() === \"-\" && this.source[this.position + 1] !== \"-\") {\n this.position++;\n const right = this.parseUnicodeSetItem(start);\n if (item.type !== \"character\" || right.type !== \"character\") this.fail(\"Invalid set range\", start);\n if (item.value.codePointAt(0)! > right.value.codePointAt(0)!) this.fail(\"Set range is out of order\", start);\n this.guard.allocate(4 + item.value.length + right.value.length);\n item = { type: \"range\", from: item.value, to: right.value };\n }\n if (operation !== undefined && item.type === \"range\") this.fail(\"Set operations require nested ranges\", start);\n items.push(item);\n const operator = this.source.slice(this.position, this.position + 2);\n if (operator === \"&&\" || operator === \"--\") {\n const next = operator === \"&&\" ? \"intersection\" : \"subtraction\";\n if ((operation === undefined && (items.length !== 1 || item.type === \"range\")) ||\n (operation !== undefined && operation !== next)) this.fail(\"Mixed set operations\", start);\n if (operation === undefined) this.guard.allocate(1 + next.length);\n operation = next;\n this.position += 2;\n if (this.peek() === \"]\" || this.atEnd()) this.fail(\"Missing set operand\", start);\n } else if (operation !== undefined && this.peek() !== \"]\") this.fail(\"Missing set operator\", start);\n }\n if (this.take() !== \"]\") this.fail(\"Unterminated character set\", start);\n const mayContainStrings = (item: CharacterClassItem): boolean => {\n if (item.type === \"set\") return item.value.strings === true;\n if (item.type === \"property\") return item.strings === true;\n if (item.type === \"strings\") return item.values.some(value => value.length !== ((value.codePointAt(0) ?? 0) > 0xffff ? 2 : 1));\n return false;\n };\n const strings = operation === \"intersection\" ? items.every(mayContainStrings)\n : operation === \"subtraction\" ? mayContainStrings(items[0]) : items.some(mayContainStrings);\n if (negated && strings) this.fail(\"Cannot complement a set containing strings\", start);\n if (strings) this.guard.allocate(1);\n return { negated, items, ...(operation === undefined ? {} : { operation }), ...(strings ? { strings: true } : {}) };\n } finally { this.guard.leaveGroup(); }\n }\n\n private parseUnicodeSetItem(start: number): CharacterClassItem {\n if (this.peek() === \"[\") {\n this.position++;\n this.guard.allocate(3);\n return { type: \"set\", value: this.parseUnicodeSet(start) };\n }\n if (this.source.startsWith(\"\\\\q{\", this.position)) {\n this.position += 3;\n this.guard.allocate(4);\n const values: string[] = [];\n let value = \"\";\n while (!this.atEnd()) {\n if (this.peek() === \"|\" || this.peek() === \"}\") {\n this.guard.array(values.length + 1);\n this.guard.allocate(1);\n values.push(value);\n value = \"\";\n if (this.take() === \"}\") return { type: \"strings\", values };\n } else {\n const item = this.parseSetCharacter(start);\n this.guard.allocate(item.length);\n value += item;\n }\n }\n this.fail(\"Unterminated class string\", start);\n }\n if (this.peek() === \"\\\\\") return this.parseClassItem(start);\n const value = this.parseSetCharacter(start);\n this.guard.allocate(3 + value.length);\n return { type: \"character\", value };\n }\n\n private parseSetCharacter(start: number): string {\n if (this.peek() === \"\\\\\") {\n this.position++;\n const node = this.parseEscape(true, start);\n if (node.type !== \"literal\") this.fail(\"Class strings require literal characters\", start);\n return node.value;\n }\n const character = this.takeCharacter();\n if (!character || \"()[]{}/-|\".includes(character) ||\n (\"!#$%&*+,.:;<=>?@^`~\".includes(character) && this.peek() === character))\n this.fail(\"Invalid character in Unicode set\", start);\n return character;\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 === \"k\") {\n this.totalCaptureCount ??= this.countAllCaptures();\n if (this.unicode || this.hasNamedCaptures) {\n if (inCharacterClass || this.take() !== \"<\") this.fail(\"Invalid named backreference\", start);\n const name = this.parseGroupName(start);\n this.guard.allocate(3 + name.length);\n return { type: \"namedBackreference\", name };\n }\n }\n if (isDecimalDigit(escaped)) {\n if (!inCharacterClass && escaped !== \"0\") {\n let end = this.position;\n let index = Number(escaped);\n while (isDecimalDigit(this.source[end] ?? \"\")) {\n this.guard.work(1);\n index = index * 10 + Number(this.source[end++]);\n }\n this.totalCaptureCount ??= this.countAllCaptures();\n if (index <= this.totalCaptureCount) {\n this.position = end;\n this.guard.allocate(3);\n return { type: \"backreference\", index };\n }\n }\n if (this.unicode && (escaped !== \"0\" || isDecimalDigit(this.peek())))\n this.fail(\"Invalid decimal escape\", start);\n this.guard.allocate(4);\n if (escaped === \"8\" || escaped === \"9\") return { type: \"literal\", value: escaped };\n let code = Number(escaped);\n const maximum = escaped <= \"3\" ? 3 : 2;\n for (let digits = 1; digits < maximum && this.peek() >= \"0\" && this.peek() <= \"7\"; digits++) {\n code = code * 8 + Number(this.take());\n }\n return { type: \"literal\", value: String.fromCharCode(code) };\n }\n if (this.unicode && (escaped === \"p\" || escaped === \"P\")) {\n if (this.take() !== \"{\") this.fail(\"Invalid Unicode property escape\", start);\n const begin = this.position;\n while (!this.atEnd() && this.peek() !== \"}\") {\n const character = this.take();\n if (!isDecimalDigit(character) && !(character >= \"a\" && character <= \"z\") &&\n !(character >= \"A\" && character <= \"Z\") && character !== \"_\" && character !== \"=\")\n this.fail(\"Invalid Unicode property escape\", start);\n }\n this.guard.allocate(this.position - begin + 9);\n const value = this.source.slice(begin, this.position);\n if (this.take() !== \"}\") this.fail(\"Unterminated Unicode property escape\", start);\n // Only a validated property token reaches the host's single-character classifier.\n try { new RegExp(`\\\\${escaped}{${value}}`, this.unicodeSets ? \"v\" : \"u\"); }\n catch { this.fail(\"Unknown Unicode property\", start); }\n let strings = false;\n if (this.unicodeSets) {\n try { new RegExp(`\\\\p{${value}}`, \"u\"); }\n catch { strings = true; }\n }\n this.guard.array(1);\n return { type: \"characterClass\", negated: false, items: [{ type: \"property\", value, negated: escaped === \"P\", ...(strings ? { strings: true } : {}) }] };\n }\n if (escaped === \"x\") {\n this.guard.allocate(4);\n return { type: \"literal\", value: this.parseHexEscape(2, \"hexadecimal\", start, this.unicode ? undefined : \"x\") };\n }\n if (escaped === \"u\") {\n this.guard.allocate(4);\n if (this.unicode && this.peek() === \"{\") {\n this.position++;\n const begin = this.position;\n while (!this.atEnd() && this.peek() !== \"}\") this.position++;\n this.guard.allocate(this.position - begin);\n const digits = this.source.slice(begin, this.position);\n const point = Number.parseInt(digits, 16);\n if (this.take() !== \"}\" || digits.length === 0 || !allHexDigits(digits) || point > 0x10ffff)\n this.fail(\"Invalid Unicode escape\", start);\n return { type: \"literal\", value: String.fromCodePoint(point) };\n }\n let value = this.parseHexEscape(4, \"Unicode\", start, this.unicode ? undefined : \"u\");\n if (this.unicode && value.charCodeAt(0) >= 0xd800 && value.charCodeAt(0) <= 0xdbff &&\n this.source.startsWith(\"\\\\u\", this.position)) {\n const digits = this.source.slice(this.position + 2, this.position + 6);\n const point = Number.parseInt(digits, 16);\n this.guard.work(digits.length);\n this.guard.allocate(digits.length);\n if (digits.length === 4 && allHexDigits(digits) && point >= 0xdc00 && point <= 0xdfff) {\n value += String.fromCharCode(point);\n this.position += 6;\n }\n }\n return { type: \"literal\", value };\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 if (escaped === \"c\") {\n const letter = this.peek();\n this.guard.allocate(4);\n if ((letter >= \"a\" && letter <= \"z\") || (letter >= \"A\" && letter <= \"Z\") ||\n (!this.unicode && inCharacterClass && (isDecimalDigit(letter) || letter === \"_\"))) {\n this.position++;\n return { type: \"literal\", value: String.fromCharCode(letter.charCodeAt(0) % 32) };\n }\n if (this.unicode) this.fail(\"Invalid control escape\", start);\n // The unmatched backslash is literal; leave c as the next atom so a\n // following quantifier binds to c rather than to the pair.\n this.position--;\n return { type: \"literal\", value: \"\\\\\" };\n }\n if (this.unicode && controls[escaped] === undefined &&\n !\"^$\\\\.*+?()[]{}|/\".includes(escaped) && !(inCharacterClass && (escaped === \"-\" ||\n (this.unicodeSets && \"!#$%&+,.:;<=>?@`~\".includes(escaped)))))\n this.fail(\"Invalid identity escape\", start);\n this.guard.allocate(4);\n return { type: \"literal\", value: controls[escaped] ?? escaped };\n }\n\n private parseHexEscape(length: number, name: string, start: number, identity?: string): 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 if (identity !== undefined) return identity;\n this.fail(`Invalid ${name} escape`, start);\n }\n this.position = end;\n return String.fromCharCode(Number.parseInt(digits, 16));\n }\n\n private countAllCaptures(): number {\n let count = 0;\n let escaped = false;\n let characterClass = false;\n for (let index = 0; index < this.source.length; index++) {\n this.guard.work(1);\n const character = this.source[index];\n if (escaped) escaped = false;\n else if (character === \"\\\\\") escaped = true;\n else if (character === \"[\") characterClass = true;\n else if (character === \"]\") characterClass = false;\n else if (!characterClass && character === \"(\") {\n const named = this.source[index + 1] === \"?\" && this.source[index + 2] === \"<\" &&\n this.source[index + 3] !== \"=\" && this.source[index + 3] !== \"!\";\n if (named) this.hasNamedCaptures = true;\n if (named || this.source[index + 1] !== \"?\") count++;\n }\n }\n return count;\n }\n\n private parseGroupName(start: number): string {\n let name = \"\";\n while (!this.atEnd() && this.peek() !== \">\") {\n let character = this.take();\n if (character === \"\\\\\") {\n if (this.take() !== \"u\") this.fail(\"Invalid group name escape\", start);\n if (this.peek() === \"{\") {\n this.position++;\n const begin = this.position;\n while (!this.atEnd() && this.peek() !== \"}\") this.position++;\n this.guard.allocate(this.position - begin);\n const digits = this.source.slice(begin, this.position);\n const point = Number.parseInt(digits, 16);\n if (this.take() !== \"}\" || digits.length === 0 || !allHexDigits(digits) || point > 0x10ffff)\n this.fail(\"Invalid group name escape\", start);\n character = String.fromCodePoint(point);\n } else character = this.parseHexEscape(4, \"Unicode\", start);\n }\n this.guard.allocate(character.length);\n name += character;\n }\n if (this.take() !== \">\" || name.length === 0) this.fail(\"Invalid group name\", start);\n let first = true;\n for (const character of name) {\n this.guard.work(1);\n if (!(first ? groupNameStart : groupNamePart).test(character)) this.fail(\"Invalid group name\", start);\n first = false;\n }\n return name;\n }\n\n private validateNamedGroups(node: RegexNode): Set<string> {\n this.guard.work(1);\n this.guard.allocate(1);\n const names = new Set<string>();\n if (node.type === \"namedBackreference\" && !Object.hasOwn(this.namedGroups, node.name))\n this.fail(\"Unknown named backreference\");\n if (node.type === \"group\" && node.name !== undefined) names.add(node.name);\n const children = node.type === \"sequence\" ? node.elements : node.type === \"alternation\" ? node.alternatives\n : node.type === \"group\" || node.type === \"quantifier\" || node.type === \"lookahead\" || node.type === \"lookbehind\" ? [node.body] : [];\n for (const child of children) {\n for (const name of this.validateNamedGroups(child)) {\n this.guard.work(1);\n if (names.has(name) && node.type !== \"alternation\") this.fail(\"Duplicate capture group name\");\n this.guard.allocate(1);\n names.add(name);\n }\n }\n return names;\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 if (!Number.isSafeInteger(min)) this.fail(\"Quantifier is too large\", start);\n this.guard.allocate(3);\n return { min, max: min };\n }\n if (this.peek() !== \",\") {\n if (!this.unicode) { this.position = start; return undefined; }\n this.fail(\"Invalid quantifier\", start);\n }\n this.position += 1;\n const max = this.parseDecimal();\n if (this.peek() !== \"}\") {\n if (!this.unicode) { this.position = start; return undefined; }\n this.fail(\"Unterminated quantifier\", start);\n }\n this.position += 1;\n if (!Number.isSafeInteger(min) || (max !== undefined && !Number.isSafeInteger(max)))\n this.fail(\"Quantifier is too large\", start);\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 return Number(this.source.slice(start, this.position));\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 takeCharacter(): string {\n if (!this.unicode || this.atEnd()) return this.take();\n const character = String.fromCodePoint(this.source.codePointAt(this.position)!);\n this.position += character.length;\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 hasIndices: false,\n global: false,\n sticky: false,\n unicode: false,\n unicodeSets: false,\n ignoreCase: false,\n multiline: false,\n dotAll: false\n };\n const names: Record<string, keyof RegexFlags> = {\n d: \"hasIndices\",\n g: \"global\",\n i: \"ignoreCase\",\n m: \"multiline\",\n s: \"dotAll\",\n y: \"sticky\",\n u: \"unicode\",\n v: \"unicodeSets\"\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 if (parsed.unicode && parsed.unicodeSets) throw new SyntaxError(\"Unicode flags u and v cannot be combined\");\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 { CompactSourcePositions, compactSourceSpan, compactDerivedPosition } from \"./compact-spans.js\";\nimport { CompactModuleAst, compilerElements, compilerField } from \"./compact-module-ast.js\";\nimport { boundIdentifiers } from \"./bindings.js\";\nimport { validatePrivateNames } from \"./private-names.js\";\nimport { RESERVED_IDENTIFIER_SPELLINGS, tokenize, tokenizeCompact, type Position, type Token } from \"./tokenizer.js\";\nimport { assignCompactIds, assignIds } from \"./assign-ids.js\";\nimport { evalFunctionDeclarations, functionSources, functionStrictness, templateSources } from \"./function-source.js\";\nimport { formatParseError } from \"./format-error.js\";\nimport { createSyntaxDiagnostic } from \"./syntax-diagnostic.js\";\nimport type { ParsedSourceModule, SourceExport, SourceModuleSyntax } from \"./module-syntax.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\";\nexport type { ParsedSourceModule, SourceImport, SourceExport } from \"./module-syntax.js\";\n\nconst isFrozenPosition = Object.isFrozen;\n\nconst MAX_CONDITIONAL_EXPRESSION_DEPTH = 256;\nconst MAX_IF_STATEMENT_DEPTH = 2_048;\nconst STRICT_BINDING_NAMES = new Set([\"eval\", \"arguments\", \"implements\", \"interface\", \"let\", \"package\", \"private\", \"protected\", \"public\", \"static\", \"yield\"]);\nconst functionBodyStrictness = new WeakMap<object, boolean>();\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 labels?: string[];\n type: string;\n span: SourceSpan;\n};\n\nexport type Identifier = BaseNode & {\n type: \"Identifier\";\n name: string;\n};\n\nexport type PrivateIdentifier = BaseNode & { type: \"PrivateIdentifier\"; name: string };\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 BigIntLiteral = BaseNode & {\n type: \"BigIntLiteral\";\n raw: string;\n value: string;\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 kind?: \"get\" | \"set\";\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 continuesOptionalChain?: true;\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 ImportExpression = BaseNode & {\n type: \"ImportExpression\";\n source: Expression;\n options?: Expression;\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 parenthesizedLeft?: true;\n right: Expression;\n};\n\nexport type CallExpression = BaseNode & {\n type: \"CallExpression\";\n arguments: Array<Expression | SpreadElement>;\n callee: Expression;\n optional: boolean;\n continuesOptionalChain?: true;\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 disposal?: \"sync\" | \"async\";\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 labels?: string[];\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 ClassElement =\n | (BaseNode & {\n type: \"MethodDefinition\";\n computed: boolean;\n key: Expression;\n kind: \"constructor\" | \"method\" | \"get\" | \"set\";\n static: boolean;\n value: FunctionExpression;\n })\n | (BaseNode & {\n type: \"PropertyDefinition\";\n computed: boolean;\n key: Expression;\n static: boolean;\n value?: Expression;\n })\n | (BaseNode & { type: \"StaticBlock\"; body: BlockStatement });\n\nexport type ClassBody = BaseNode & { type: \"ClassBody\"; body: ClassElement[] };\nexport type ClassDeclaration = BaseNode & {\n type: \"ClassDeclaration\";\n id: Identifier;\n superClass?: Expression;\n body: ClassBody;\n};\nexport type ClassExpression = BaseNode & {\n type: \"ClassExpression\";\n id?: Identifier;\n superClass?: Expression;\n body: ClassBody;\n};\nexport type ClassNode = ClassDeclaration | ClassExpression;\nexport type SuperExpression = BaseNode & { type: \"Super\" };\nexport type NewTargetExpression = BaseNode & { type: \"NewTargetExpression\" };\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 await?: boolean;\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: PatternTarget | 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 WithStatement = BaseNode & {\n type: \"WithStatement\";\n object: Expression;\n body: Statement;\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 | ClassDeclaration\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 | WithStatement;\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 | ClassExpression\n | FunctionExpression\n | Identifier\n | ImportExpression\n | PrivateIdentifier\n | LogicalExpression\n | MemberExpression\n | MetaProperty\n | NewExpression\n | NewTargetExpression\n | NullLiteral\n | NumericLiteral\n | BigIntLiteral\n | ObjectExpression\n | RegexLiteral\n | SequenceExpression\n | StringLiteral\n | SuperExpression\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 allowIn?: boolean;\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 \"class\",\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 new Parser(\n tokenize(source, { allowRegexLiterals: true, compilation }),\n source,\n compilation\n ).parseTopLevel()\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 if (source.includes(\"#\")) validatePrivateNames(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 const result = assignIds(\n new Parser(\n tokenize(source, { allowRegexLiterals: true, statementList: true, compilation }),\n source,\n compilation\n ).parseModule()\n );\n if (source.includes(\"#\")) validatePrivateNames(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 parseSourceModule(\n source: string,\n filename = \"<input>\",\n owner?: CompileOwner,\n options: { sharedPositions?: boolean; compactAst?: boolean } = {}\n): ParsedSourceModule {\n const compilation = new CompileScope(owner);\n const syntax: SourceModuleSyntax = {imports: [], exports: [], moduleRequests: []};\n let parser: Parser | undefined;\n try {\n const limit = owner?.budget.limits.stringLength;\n if (limit !== undefined && source.length > limit)\n throw new SandboxError({budget: \"stringLength\", current: source.length, limit});\n owner?.budget.visitNode(source.length);\n const tokenOptions = {allowRegexLiterals: true, statementList: true, compilation, sharedPositions: options.sharedPositions};\n const tokens = options.compactAst\n ? tokenizeCompact(source, tokenOptions, new CompactSourcePositions(source), true)\n : tokenize(source, tokenOptions);\n parser = new Parser(\n tokens,\n source, compilation, \"top-level\",\n {...ordinaryFunctionContext, newTarget: false, return: false, requireAsyncAwait: true,\n grammar: {await: true, yield: false, strict: true}}, true, syntax\n );\n if (options.compactAst) parser.enableCompactAst();\n const parsed = parser.parseModule();\n parser.finishAstStorage();\n const module = (options.compactAst ? assignCompactIds : assignIds)(parsed);\n if (source.includes(\"#\")) validatePrivateNames(module);\n let hasTLA = false;\n const pending: unknown[] = [module];\n while (pending.length > 0) {\n const node = pending.pop();\n if (node === null || typeof node !== \"object\") continue;\n owner?.budget.visitNode();\n const type = compilerField(node, \"type\");\n if ([\"FunctionDeclaration\", \"FunctionExpression\", \"ArrowFunctionExpression\"].includes(String(type))) continue;\n if (type !== undefined && (type === \"AwaitExpression\" || compilerField(node, \"await\") === true ||\n (type === \"VariableDeclaration\" && compilerField(node, \"disposal\") === \"async\"))) hasTLA = true;\n for (const child of compilerElements(node)) pending.push(child);\n }\n return {...syntax, module, hasTLA, requests: [...new Set(syntax.moduleRequests.map(request => request.specifier))]};\n } catch (error) {\n if (error instanceof SandboxError) throw error;\n const message = error instanceof Error ? error.message : String(error);\n const position = parser?.position;\n throw createSyntaxDiagnostic(source, filename, new SyntaxError(\n message.includes(\" at line \") || position === undefined ? message\n : `${message} at line ${position.line}, column ${position.column}.`\n ));\n } finally { compilation.dispose(); }\n}\n\nexport function parseExecutableModule(\n source: string,\n filename = \"<input>\",\n owner?: CompileOwner,\n importSpecifiers?: readonly string[]\n): Module {\n const compilation = new CompileScope(owner);\n try {\n const result = assignIds(\n new Parser(\n tokenize(source, { allowRegexLiterals: true, statementList: true, compilation }),\n source,\n compilation,\n \"top-level\",\n { ...ordinaryFunctionContext, newTarget: false, requireAsyncAwait: true },\n true,\n undefined,\n new Set(importSpecifiers)\n ).parseModule()\n );\n throwIfImportMetaAssignment(result);\n if (source.includes(\"#\")) validatePrivateNames(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 type EvalParseContext = {\n strict?: boolean;\n newTarget?: boolean;\n superProperty?: boolean;\n superCall?: boolean;\n arguments?: boolean;\n privateNames?: ReadonlySet<string>;\n};\n\nexport function parseEvalScript(\n source: string,\n context: EvalParseContext = {},\n owner?: CompileOwner,\n filename = \"<eval>\",\n options: {compactAst?: boolean} = {}\n): {node: Module; strict: boolean} {\n const compilation = new CompileScope(owner);\n try {\n const limit = owner?.budget.limits.stringLength;\n if (limit !== undefined && source.length > limit)\n throw new SandboxError({budget: \"stringLength\", current: source.length, limit});\n if (owner !== undefined) for (let index = 0; index < source.length; index++) owner.budget.visitNode();\n const grammar = {await: false, yield: false, strict: context.strict === true};\n const tokenOptions = {\n allowRegexLiterals: true, statementList: true, allowLegacyNumbers: true, allowLegacyEscapes: true,\n allowHtmlComments: true, compilation\n };\n const tokens = options.compactAst\n ? tokenizeCompact(source, tokenOptions, new CompactSourcePositions(source), true)\n : tokenize(source, tokenOptions);\n const parser = new Parser(tokens, source, compilation, \"normal\", {\n grammar, newTarget: context.newTarget === true,\n superProperty: context.superProperty === true, superCall: context.superCall === true,\n arguments: context.arguments !== false, return: false, await: false, strictAwait: true\n }, false);\n if (options.compactAst) parser.enableCompactAst();\n const parsed = parser.parseScript();\n parser.finishAstStorage();\n const node = (options.compactAst ? assignCompactIds : assignIds)(parsed);\n if (source.includes(\"#\")) validatePrivateNames(node, context.privateNames);\n for (const statement of node.body) {\n if (statement.type === \"FunctionDeclaration\") evalFunctionDeclarations.add(statement);\n }\n return {node, strict: grammar.strict};\n } catch (error) {\n if (error instanceof SandboxError) throw error;\n throw createSyntaxDiagnostic(source, filename, error);\n } finally { compilation.dispose(); }\n}\n\nexport type DynamicFunctionKind = \"normal\" | \"generator\" | \"async\" | \"async-generator\";\n\nexport function parseDynamicFunction(\n kind: DynamicFunctionKind,\n parameters: string,\n body: string,\n owner?: CompileOwner\n): FunctionExpression {\n const compilation = new CompileScope(owner);\n const prefix = `${kind === \"async\" || kind === \"async-generator\" ? \"async \" : \"\"}function${kind === \"generator\" || kind === \"async-generator\" ? \"*\" : \"\"}`;\n try {\n const length = prefix.length + \" anonymous(\\n) {\\n\\n}\".length + parameters.length + body.length;\n const limit = owner?.budget.limits.stringLength;\n if (limit !== undefined && length > limit)\n throw new SandboxError({budget: \"stringLength\", current: length, limit});\n if (owner !== undefined) for (let index = 0; index < length; index++) owner.budget.visitNode();\n const parameterSource = `(${parameters}\\n)`;\n const bodySource = `{\\n${body}\\n}`;\n const source = `${prefix} anonymous(${parameters}\\n) ${bodySource}`;\n const createParser = (text: string, statementList = false) => new Parser(\n tokenize(text, {allowRegexLiterals: true, statementList, allowLegacyNumbers: true, allowLegacyEscapes: true, allowHtmlComments: true, compilation}), text, compilation,\n kind, {...ordinaryFunctionContext, grammar: {\n await: kind === \"async\" || kind === \"async-generator\",\n yield: kind === \"generator\" || kind === \"async-generator\", strict: false\n }}, false\n );\n createParser(parameterSource).parseDynamicParameters();\n createParser(bodySource, true).parseDynamicBody();\n const node = assignIds(createParser(source).parseDynamicExpression());\n if (source.includes(\"#\")) validatePrivateNames(node);\n return node;\n } catch (error) {\n if (error instanceof SandboxError) throw error;\n throw new SyntaxError(error instanceof Error ? error.message : String(error));\n } finally { compilation.dispose(); }\n}\n\ntype ParserBindingKind = \"lexical\" | \"function\" | \"legacy-function\" | \"parameter\" | \"catch\";\ntype ParserScope = Map<string, ParserBindingKind>;\ntype FunctionParseContext = \"top-level\" | \"normal\" | \"async\" | \"generator\" | \"async-generator\" | \"parameters\";\ntype LexicalParseContext = {\n grammar?: {await: boolean; yield: boolean; strict: boolean};\n newTarget: boolean;\n superProperty: boolean;\n superCall: boolean;\n arguments: boolean;\n return: boolean;\n await: boolean;\n strictAwait?: boolean;\n requireAsyncAwait?: boolean;\n};\nconst ordinaryFunctionContext: LexicalParseContext = {\n newTarget: true, superProperty: false, superCall: false,\n arguments: true, return: true, await: true\n};\n\nclass Parser {\n private index = 0;\n private allowIn = true;\n private breakableDepth = 0;\n private conditionalExpressionDepth = 0;\n private ifStatementDepth = 0;\n private loopDepth = 0;\n private activeLabels = new Map<string, boolean>();\n private forInInitializerEnd?: Token;\n private readonly scopes: ParserScope[] = [new Map()];\n private readonly functionScopes = new WeakSet<ParserScope>();\n private readonly parenthesizedNodes = new WeakSet<Expression>();\n private readonly varNames = new WeakMap<ParserScope, Set<string>>();\n private readonly sourceExportNames = new Set<string>();\n private readonly sourceLocalExports = new Map<string, Identifier>();\n private astStorage?: CompactModuleAst;\n\n constructor(\n private readonly tokens: Token[],\n private readonly source: string,\n private readonly compilation?: CompileScope,\n private functionContext: FunctionParseContext = \"top-level\",\n private lexicalContext: LexicalParseContext = { ...ordinaryFunctionContext, newTarget: false },\n private readonly allowImportMeta = true,\n private readonly moduleSyntax?: SourceModuleSyntax,\n private readonly importSpecifiers?: ReadonlySet<string>\n ) {\n this.functionScopes.add(this.scopes[0]!);\n }\n\n enableCompactAst(): void {\n if (this.astStorage) throw new TypeError(\"Compiler body storage is already enabled.\");\n this.astStorage = new CompactModuleAst(this.source);\n }\n\n finishAstStorage(): void {\n this.astStorage?.finish();\n }\n\n get position(): Position { return (this.tokens[this.index] ?? this.tokens[this.tokens.length - 1]!).start; }\n\n private withFunctionSource<T extends FunctionNode | ClassNode>(node: T): T {\n if ((node.type === \"FunctionDeclaration\" || node.type === \"FunctionExpression\") &&\n node.id !== undefined && functionBodyStrictness.get(node.body) && STRICT_BINDING_NAMES.has(node.id.name))\n throw new Error(`Invalid strict function name '${node.id.name}'.`);\n if (this.lexicalContext.grammar !== undefined && node.type !== \"ClassDeclaration\" && node.type !== \"ClassExpression\")\n functionStrictness.set(node, functionBodyStrictness.get(node.body) ?? this.lexicalContext.grammar.strict);\n functionSources.set(node, {\n text: this.source,\n start: node.span.start.offset,\n end: node.span.end.offset\n });\n if (this.astStorage && node.type !== \"ClassDeclaration\" && node.type !== \"ClassExpression\" &&\n node.body.span.end.offset - node.body.span.start.offset >= 512)\n node.body = this.astStorage.pack(node.body, true, true);\n return node;\n }\n\n parseDynamicParameters(): void {\n this.parseArrowParameters();\n this.expectEof();\n }\n\n parseDynamicBody(): void {\n this.parseBlockStatement([]);\n this.expectEof();\n }\n\n parseDynamicExpression(): FunctionExpression {\n const node = this.parseFunctionExpression();\n this.expectEof();\n return node;\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 if (this.moduleSyntax !== undefined) {\n const token = this.currentToken();\n if (token.value === \"import\" && token.type === \"keyword\" &&\n this.peekToken(1).value !== \"(\" && !this.isImportMetaStart()) {\n this.parseSourceImport();\n continue;\n }\n if (this.isExportToken(token)) {\n const statement = this.parseSourceExport();\n if (statement !== undefined)\n body.push(this.astStorage?.pack(statement, false, true) ?? statement);\n continue;\n }\n }\n const statement = this.parseTopLevelItem();\n body.push(statement);\n while (statement.type !== \"EmptyStatement\" && this.consumePunctuator(\";\") !== undefined) {\n continue;\n }\n if (this.astStorage) body[body.length - 1] = this.astStorage.pack(statement, false, true);\n }\n\n for (const [name, identifier] of this.sourceLocalExports) {\n if (!this.scopes[0]!.has(name) && !this.varNames.get(this.scopes[0]!)?.has(name))\n throw new Error(`Export '${name}' is not defined at line ${identifier.span.start.line}, column ${identifier.span.start.column}.`);\n }\n\n const end = this.currentToken().end;\n const module: Module = {\n type: \"Module\",\n body,\n span: createSpan(body[0]?.span.start ?? end, body[body.length - 1]?.span.end ?? end)\n };\n return this.astStorage?.pack(module, false, true) ?? module;\n }\n\n parseScript(): Module {\n const body = this.parseStatementList(undefined, true);\n const end = this.currentToken().end;\n const module: Module = {\n type: \"Module\", body,\n span: createSpan(body[0]?.span.start ?? end, body[body.length - 1]?.span.end ?? end)\n };\n return this.astStorage?.pack(module, false, true) ?? module;\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 (this.moduleSyntax !== undefined && !this.shouldParseTopLevelStatement() && token.value !== \"{\") {\n return this.parseStatement();\n }\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 previousAllowIn = this.allowIn;\n this.allowIn = options.allowIn ?? true;\n try {\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 } finally {\n this.allowIn = previousAllowIn;\n }\n }\n\n private parseAssignmentExpression(): ParsedExpression {\n const token = this.currentToken();\n if (token.type === \"keyword\" && token.value === \"yield\" && !this.isContextualIdentifier(token)) {\n if (this.functionContext !== \"generator\" && this.functionContext !== \"async-generator\") {\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 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 ...(left.parenthesized ? { parenthesizedLeft: true as const } : {}),\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.withLexicalContext({\n ...this.lexicalContext,\n ...(this.lexicalContext.grammar === undefined ? {} : {grammar: {...this.lexicalContext.grammar, await: true}})\n }, () => 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.withLexicalContext({\n ...this.lexicalContext,\n ...(this.lexicalContext.grammar === undefined ? {} : {grammar: {...this.lexicalContext.grammar, await: true}})\n }, () => 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.withLexicalContext({\n ...this.lexicalContext, return: true, await: isAsync || this.lexicalContext.strictAwait !== true,\n ...(this.lexicalContext.grammar === undefined ? {} : {grammar: {...this.lexicalContext.grammar, await: isAsync, yield: false}})\n }, () => this.parseArrowFunctionBody(params, isAsync));\n return this.withFunctionSource({\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 async: boolean\n ): BlockStatement | Expression {\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"{\") {\n return this.withFunctionContext(async ? \"async\" : \"normal\", () => this.parseBlockStatement(params));\n }\n\n return this.withFunctionContext(async ? \"async\" : \"normal\", () => this.parseExpression({ allowIn: this.allowIn }).node);\n }\n\n private parseBlockStatement(\n params?: ArrowFunctionExpression[\"params\"],\n catchParam?: CatchClause[\"param\"],\n allowDuplicateParameters = false\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 if (allowDuplicateParameters && this.scopes[this.scopes.length - 1]?.has(identifier.name)) continue;\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 let directiveTokenIndex = this.index;\n const body = this.parseBlockStatementBody(start, params !== undefined);\n if (params !== undefined && this.lexicalContext.grammar?.strict) {\n const names = new Set<string>();\n for (const param of params) for (const identifier of boundIdentifiers(param)) {\n if (names.has(identifier.name) || STRICT_BINDING_NAMES.has(identifier.name))\n throw new Error(`Invalid strict function parameter '${identifier.name}'.`);\n names.add(identifier.name);\n }\n }\n if (params?.some(param => param.type !== \"Identifier\")) {\n for (const statement of body.body) {\n const token = this.tokens[directiveTokenIndex];\n if (\n statement.type !== \"ExpressionStatement\" ||\n statement.expression.type !== \"StringLiteral\" ||\n token?.type !== \"string\" ||\n statement.span.start.offset !== token.start.offset ||\n statement.span.end.offset !== token.end.offset\n ) break;\n if (statement.expression.raw === '\"use strict\"' || statement.expression.raw === \"'use strict'\")\n throw new Error(\n \"A function with non-simple parameters cannot contain a use strict directive.\"\n );\n directiveTokenIndex += this.tokens[directiveTokenIndex + 1]?.value === \";\" ? 2 : 1;\n }\n }\n if (params !== undefined && this.lexicalContext.grammar !== undefined)\n functionBodyStrictness.set(body, this.lexicalContext.grammar.strict);\n return body;\n }, params !== undefined);\n }\n\n private parseBlockStatementBody(start: Token, functionBody = false): BlockStatement {\n const body = this.parseStatementList(start, functionBody);\n return {\n type: \"BlockStatement\", body,\n span: createSpan(start.start, this.previousToken().end)\n };\n }\n\n private parseStatementList(start?: Token, directivePrologue = false): Statement[] {\n const body: Statement[] = [];\n let legacyDirective = false;\n\n while (start === undefined || this.consumePunctuator(\"}\") === undefined) {\n if (this.currentToken().type === \"eof\") {\n if (start === undefined) break;\n throw new Error(\n `Unterminated block at line ${start.start.line}, column ${start.start.column}.`\n );\n }\n\n const firstToken = this.currentToken();\n const statement = this.parseStatement();\n body.push(statement);\n if (directivePrologue && this.lexicalContext.grammar !== undefined) {\n directivePrologue = statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"StringLiteral\" && firstToken.type === \"string\" &&\n statement.span.start.offset === firstToken.start.offset && statement.span.end.offset === firstToken.end.offset;\n if (directivePrologue && statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"StringLiteral\" &&\n (statement.expression.raw === '\"use strict\"' || statement.expression.raw === \"'use strict'\")) {\n if (legacyDirective) throw new Error(\"Legacy escape sequences are not supported in strict directives.\");\n this.lexicalContext.grammar.strict = true;\n }\n if (directivePrologue && firstToken.legacyEscape) legacyDirective = true;\n }\n let semicolons = 0;\n while (statement.type !== \"EmptyStatement\" && this.consumePunctuator(\";\") !== undefined) {\n if (++semicolons > 1) directivePrologue = false;\n }\n if (start === undefined && this.astStorage)\n body[body.length - 1] = this.astStorage.pack(statement, false, true);\n }\n\n return body;\n }\n\n private parseStatement(allowDeclarations = true): Statement {\n const statement = this.parseStatementBody(allowDeclarations);\n if (!allowDeclarations && (statement.type === \"FunctionDeclaration\" || statement.type === \"ClassDeclaration\" ||\n (statement.type === \"VariableDeclaration\" && statement.kind !== \"var\")))\n throw new DisallowedSyntaxError(\"declaration in a statement body\", statement.span.start);\n if (this.lexicalContext.grammar !== undefined && this.previousToken().value !== \";\" &&\n [\"ExpressionStatement\", \"ReturnStatement\", \"ThrowStatement\", \"VariableDeclaration\", \"BreakStatement\", \"ContinueStatement\"].includes(statement.type)) {\n const next = this.currentToken();\n if (next.type !== \"eof\" && next.value !== \";\" && next.value !== \"}\" &&\n next.start.line === statement.span.end.line)\n throw unexpectedTokenError(next);\n }\n if (!allowDeclarations && this.previousToken().value !== \";\" &&\n [\"ExpressionStatement\", \"ReturnStatement\", \"ThrowStatement\", \"VariableDeclaration\", \"BreakStatement\", \"ContinueStatement\", \"DoWhileStatement\"].includes(statement.type))\n this.consumePunctuator(\";\");\n return statement;\n }\n\n private parseStatementBody(allowDeclarations: boolean): Statement {\n const emptyStatement = this.parseEmptyStatement();\n if (emptyStatement !== undefined) {\n return emptyStatement;\n }\n\n const token = this.currentToken();\n\n if (this.resourceDeclarationHint() !== undefined) {\n if (!allowDeclarations) throw unexpectedTokenError(token);\n return this.parseResourceDeclaration();\n }\n\n if (\n this.isLabelIdentifier(token) &&\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 === \"identifier\" && token.value === \"debugger\") {\n this.index++;\n const semicolon = this.consumePunctuator(\";\");\n const next = this.currentToken();\n if (semicolon === undefined && next.type !== \"eof\" && next.value !== \"}\" &&\n !hasLineBreakBetween(token, next)) throw unexpectedTokenError(next);\n // No debugging facility is exposed: DebuggerStatement has empty completion.\n return { type: \"EmptyStatement\", span: createSpan(token.start, semicolon?.end ?? token.end) };\n }\n\n if (token.value === \"class\") return this.parseClass(true) as ClassDeclaration;\n if (token.value === \"return\" && !this.lexicalContext.return)\n throw new DisallowedSyntaxError(\"return in a static block\", token.start);\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 === \"with\") {\n if (this.lexicalContext.grammar?.strict !== false) throw new DisallowedSyntaxError(\"with\", token.start);\n this.index++;\n this.expectPunctuator(\"(\");\n const object = this.parseExpression({allowSequence: true}).node;\n this.expectPunctuator(\")\");\n const body = this.parseStatement(false);\n return {type: \"WithStatement\", object, body, span: createSpan(token.start, body.span.end)};\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() && this.peekToken(1).value !== \"(\") {\n if (this.lexicalContext.grammar !== undefined)\n throw new SyntaxError(\"Static import declarations are not allowed in dynamic functions.\");\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 (this.isVariableDeclarationStart(allowDeclarations)) {\n return this.parseVariableDeclaration();\n }\n\n if (token.type === \"keyword\" && token.value === \"break\") {\n this.index += 1;\n const label = this.consumeControlLabel(token);\n if (label !== undefined && !this.activeLabels.has(label.value)) throw new Error(`Unknown break label '${label.value}'.`);\n if (label === undefined && 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 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 if (label !== undefined && this.activeLabels.get(label.value) !== true) throw new Error(`Invalid continue label '${label.value}'.`);\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 this.isLabelIdentifier(token) &&\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 const iteration = token.type === \"keyword\" && [\"for\", \"while\", \"do\"].includes(token.value);\n const seen = new Set<string>();\n for (const label of labels) {\n if (seen.has(label) || this.activeLabels.has(label)) throw new Error(`Duplicate label '${label}'.`);\n seen.add(label);\n }\n for (const label of labels) this.activeLabels.set(label, iteration);\n try {\n if (token.type === \"keyword\" && token.value === \"for\") return this.parseForStatement(labels);\n if (token.type === \"keyword\" && token.value === \"while\") return this.parseWhileStatement(labels);\n if (token.type === \"keyword\" && token.value === \"do\") return this.parseDoWhileStatement(labels);\n if (token.type === \"punctuator\" && token.value === \"{\") return { ...this.parseBlockStatement(), labels };\n if (token.type === \"keyword\" && token.value === \"function\" &&\n this.lexicalContext.grammar?.strict === false && this.peekToken(1).value !== \"*\") {\n const declaration = this.parseFunctionDeclaration();\n declaration.labels = labels;\n return declaration;\n }\n if ([\"const\", \"class\", \"function\", \"export\"].includes(token.value) ||\n (token.value === \"let\" && this.isVariableDeclarationStart(false)) ||\n (token.value === \"import\" && this.peekToken(1).value !== \"(\" && !this.isImportMetaStart()) ||\n this.isAsyncFunctionDeclarationStart() || this.resourceDeclarationHint() !== undefined)\n throw new DisallowedSyntaxError(\"labeled declaration\", firstLabelToken.start);\n const statement = this.parseStatement(false);\n if (statement.type === \"ImportDeclaration\" || statement.type === \"ExportDefaultDeclaration\" || statement.type === \"ExportNamedDeclaration\")\n throw new DisallowedSyntaxError(\"labeled declaration\", firstLabelToken.start);\n return { ...statement, labels, span: createSpan(firstLabelToken.start, statement.span.end) };\n } finally {\n for (const label of labels) this.activeLabels.delete(label);\n }\n }\n\n private parseIfClause(): Statement {\n const start = this.currentToken().start;\n const functionClause = this.currentToken().value === \"function\" || this.isAsyncFunctionDeclarationStart();\n const statement = functionClause ? this.withScope(() => this.parseFunctionDeclaration()) : this.parseStatement(false);\n if (statement.type !== \"FunctionDeclaration\") return statement;\n if (this.lexicalContext.grammar?.strict !== false || statement.async || statement.generator)\n throw new DisallowedSyntaxError(\"function declaration in an if clause\", start);\n return {type: \"BlockStatement\", body: [statement], span: statement.span};\n }\n\n private parseIfStatement(): IfStatement {\n const pending: Array<{ token: Token; test: Expression; consequent: Statement }> = [];\n let entered = 0;\n try {\n for (;;) {\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 this.ifStatementDepth++;\n entered++;\n const token = this.expectKeyword(\"if\");\n this.expectPunctuator(\"(\");\n const test = this.parseExpression({ allowSequence: true }).node;\n this.expectPunctuator(\")\");\n const consequent = this.parseIfClause();\n const hasElse = this.consumeKeyword(\"else\") !== undefined;\n // Keep ladder continuations off the native stack. Nested consequents\n // still parse their own clauses, including the nearest dangling else.\n if (hasElse && this.currentToken().type === \"keyword\" && this.currentToken().value === \"if\") {\n pending.push({ token, test, consequent });\n continue;\n }\n const alternate = hasElse ? this.parseIfClause() : undefined;\n let result: IfStatement = {\n type: \"IfStatement\", test, consequent, alternate,\n span: createSpan(token.start, alternate?.span.end ?? consequent.span.end)\n };\n while (pending.length > 0) {\n const parent = pending.pop()!;\n result = {\n type: \"IfStatement\", test: parent.test, consequent: parent.consequent,\n alternate: result, span: createSpan(parent.token.start, result.span.end)\n };\n }\n return result;\n }\n } finally {\n this.ifStatementDepth -= entered;\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 if (this.lexicalContext.grammar !== undefined && statement.type === \"VariableDeclaration\" && statement.disposal !== undefined)\n throw new Error(`Resource declarations require a block in switch clauses at line ${statement.span.start.line}, column ${statement.span.start.column}.`);\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 | BlockStatement {\n const forToken = this.expectKeyword(\"for\");\n const awaitToken = this.consumeKeyword(\"await\");\n if (awaitToken !== undefined && this.functionContext !== \"top-level\" &&\n this.functionContext !== \"async\" && this.functionContext !== \"async-generator\") {\n throw new Error(\"for await is only valid at top level or inside an async function.\");\n }\n return this.withScope(() => {\n this.expectPunctuator(\"(\");\n const iterationOperator = this.findTopLevelForIterationOperator(this.index);\n if (awaitToken !== undefined && iterationOperator?.value !== \"of\") {\n throw new Error(\"for await requires an of loop.\");\n }\n\n if (iterationOperator?.value === \"in\") {\n if (this.resourceDeclarationHint() !== undefined) throw unexpectedTokenError(this.currentToken());\n const left = this.parseForOfLeft(this.lexicalContext.grammar?.strict === false ? iterationOperator : undefined);\n this.expectKeyword(\"in\");\n const right = this.parseExpression({allowSequence: true}).node;\n this.expectPunctuator(\")\");\n const body = this.withLoopContext(() => this.parseStatement(false));\n const loop: ForInStatement = {\n type: \"ForInStatement\",\n left,\n right,\n body,\n ...createLoopLabelFields(labels),\n span: createSpan(forToken.start, body.span.end)\n };\n const declaration = left.type === \"VariableDeclaration\" ? left.declarations[0] : undefined;\n if (left.type === \"VariableDeclaration\" && declaration?.init !== undefined && declaration.id.type === \"Identifier\") {\n const { init: ignoredInit, ...binding } = declaration;\n loop.left = {...left, declarations: [{...binding, id: {...declaration.id}, span: declaration.id.span}]};\n return {type: \"BlockStatement\", body: [left, loop], span: loop.span};\n }\n return loop;\n }\n\n if (iterationOperator?.value === \"of\") {\n if (this.currentToken().type === \"keyword\" && this.currentToken().value === \"let\" &&\n !this.isVariableDeclarationStart()) throw unexpectedTokenError(this.currentToken());\n if (awaitToken === undefined && this.currentToken().type === \"keyword\" &&\n this.currentToken().value === \"async\" && this.peekToken(1).value === \"of\")\n throw unexpectedTokenError(this.currentToken());\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(false));\n return {\n type: \"ForOfStatement\",\n ...(awaitToken === undefined ? {} : { await: true }),\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 = this.resourceDeclarationHint() !== undefined ? this.parseResourceDeclaration(false, false) :\n this.isVariableDeclarationStart()\n ? this.parseVariableDeclaration(false)\n : this.parseExpression({ allowSequence: true, allowIn: false }).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(false));\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 parseForOfLeft(legacyInitializerEnd?: Token): PatternTarget | VariableDeclaration {\n if (this.resourceDeclarationHint() !== undefined && this.peekToken(1).value !== \"of\") {\n return this.parseResourceDeclaration(true);\n }\n if (this.isVariableDeclarationStart()) {\n return this.parseForOfDeclaration(legacyInitializerEnd);\n }\n\n return this.toPatternTarget(this.parseAssignmentTarget());\n }\n\n private parseForOfDeclaration(legacyInitializerEnd?: Token): 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 (kindToken.value !== \"var\") {\n for (const identifier of boundIdentifiers(id))\n if (identifier.name === \"let\") throw unexpectedTokenError(kindToken);\n }\n let init: Expression | undefined;\n if (this.consumePunctuator(\"=\") !== undefined) {\n if (legacyInitializerEnd === undefined || kindToken.value !== \"var\" || id.type !== \"Identifier\") throw new Error(\n `for...of declarations cannot include an initializer at line ${kindToken.start.line}, column ${kindToken.start.column}.`\n );\n const previousEnd = this.forInInitializerEnd;\n this.forInInitializerEnd = legacyInitializerEnd;\n try { init = this.parseExpression().node; }\n finally { this.forInInitializerEnd = previousEnd; }\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 ...(init === undefined ? {} : {init}),\n span: createSpan(id.span.start, init?.span.end ?? id.span.end)\n };\n if (kindToken.value === \"var\") {\n for (const identifier of boundIdentifiers(id)) this.declareVarBinding(identifier);\n } else this.declarePatternBindings(id);\n\n return {\n type: \"VariableDeclaration\",\n declarations: [declarator],\n kind: kindToken.value,\n span: createSpan(kindToken.start, init?.span.end ?? 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(false));\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(false));\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 parseModuleName(): Identifier | StringLiteral {\n const token = this.currentToken();\n if (token.type !== \"string\") return this.parseIdentifierName();\n this.index++;\n const name = createStringLiteral(token);\n for (const character of name.value) {\n const code = character.codePointAt(0)!;\n if (code >= 0xd800 && code <= 0xdfff) throw unexpectedTokenError(token);\n }\n return name;\n }\n\n private finishModuleDeclaration(): void {\n if (this.consumePunctuator(\";\") !== undefined) return;\n const next = this.currentToken();\n if (next.type !== \"eof\" && !hasLineBreakBetween(this.previousToken(), next))\n throw unexpectedTokenError(next);\n }\n\n private parseSourceRequest(): string {\n const token = this.currentToken();\n if (token.type !== \"string\") throw unexpectedTokenError(token);\n this.index++;\n const specifier = createStringLiteral(token).value;\n const attributes: Array<[string, string]> = [];\n if (this.consumeKeyword(\"with\") !== undefined) {\n this.expectPunctuator(\"{\");\n const names = new Set<string>();\n while (this.currentToken().value !== \"}\") {\n const key = this.currentToken();\n const name = key.type === \"string\" ? (this.index++, createStringLiteral(key).value)\n : this.parseIdentifierName().name;\n if (names.has(name)) throw unexpectedTokenError(key);\n names.add(name);\n this.expectPunctuator(\":\");\n const value = this.currentToken();\n if (value.type !== \"string\") throw unexpectedTokenError(value);\n this.index++;\n attributes.push([name, createStringLiteral(value).value]);\n if (this.consumePunctuator(\",\") === undefined) break;\n }\n this.expectPunctuator(\"}\");\n }\n this.moduleSyntax!.moduleRequests.push({specifier, attributes});\n this.finishModuleDeclaration();\n return specifier;\n }\n\n private parseSourceImport(): void {\n this.expectKeyword(\"import\");\n if (this.currentToken().type === \"string\") {\n this.parseSourceRequest();\n return;\n }\n const bindings: Array<{imported: string; local: Identifier; namespace?: true}> = [];\n if (this.currentToken().value !== \"{\" && this.currentToken().value !== \"*\") {\n const local = this.parseBindingIdentifier();\n bindings.push({imported: \"default\", local});\n if (this.consumePunctuator(\",\") === undefined) {\n this.expectModuleFrom();\n const request = this.parseSourceRequest();\n this.declareBinding(local);\n this.moduleSyntax!.imports.push({request, imported: \"default\", local: local.name});\n return;\n }\n }\n if (this.consumePunctuator(\"*\") !== undefined) {\n this.expectKeyword(\"as\");\n bindings.push({imported: \"*\", local: this.parseBindingIdentifier(), namespace: true});\n } else {\n this.expectPunctuator(\"{\");\n while (this.currentToken().value !== \"}\") {\n const imported = this.parseModuleName();\n let local: Identifier;\n if (this.consumeKeyword(\"as\") !== undefined) local = this.parseBindingIdentifier();\n else {\n this.index--;\n local = this.parseBindingIdentifier();\n }\n bindings.push({imported: imported.type === \"Identifier\" ? imported.name : imported.value, local});\n if (this.consumePunctuator(\",\") === undefined) break;\n }\n this.expectPunctuator(\"}\");\n }\n this.expectModuleFrom();\n const request = this.parseSourceRequest();\n for (const binding of bindings) {\n this.declareBinding(binding.local);\n this.moduleSyntax!.imports.push({request, imported: binding.imported, local: binding.local.name,\n ...(binding.namespace === true ? {namespace: true} : {})});\n }\n }\n\n private expectModuleFrom(): void {\n const token = this.currentToken();\n if (token.type !== \"identifier\" || token.value !== \"from\" ||\n token.end.offset - token.start.offset !== token.value.length) throw unexpectedTokenError(token);\n this.index++;\n }\n\n private recordSourceExport(entry: SourceExport, span: SourceSpan): void {\n if (entry.exported !== undefined) {\n if (this.sourceExportNames.has(entry.exported))\n throw new Error(`Duplicate export '${entry.exported}' at line ${span.start.line}, column ${span.start.column}.`);\n this.sourceExportNames.add(entry.exported);\n }\n this.moduleSyntax!.exports.push(entry);\n }\n\n private parseSourceExport(): Statement | undefined {\n const start = this.currentToken();\n if (start.end.offset - start.start.offset !== start.value.length) throw unexpectedTokenError(start);\n this.index++;\n if (this.currentToken().value === \"default\") {\n const token = this.currentToken();\n if (token.end.offset - token.start.offset !== token.value.length) throw unexpectedTokenError(token);\n const statement = this.parseExportDefaultDeclaration(start);\n this.recordSourceExport({exported: \"default\", local: \"default\"}, createTokenSpan(start));\n if (statement.declaration.type === \"FunctionDeclaration\" || statement.declaration.type === \"ClassDeclaration\" ||\n statement.declaration.type === \"ClassExpression\") this.consumePunctuator(\";\");\n else this.finishModuleDeclaration();\n return statement;\n }\n if (this.consumePunctuator(\"*\") !== undefined) {\n const name = this.consumeKeyword(\"as\") === undefined ? undefined : this.parseModuleName();\n this.expectModuleFrom();\n const request = this.parseSourceRequest();\n this.recordSourceExport({request, ...(name === undefined ? {} : {\n exported: name.type === \"Identifier\" ? name.name : name.value, imported: \"*\", namespace: true\n })}, name?.span ?? createTokenSpan(start));\n return;\n }\n if (this.consumePunctuator(\"{\") !== undefined) {\n const entries: Array<{local: Identifier | StringLiteral; exported: Identifier | StringLiteral}> = [];\n while (this.currentToken().value !== \"}\") {\n const local = this.parseModuleName();\n const exported = this.consumeKeyword(\"as\") === undefined ? local : this.parseModuleName();\n entries.push({local, exported});\n if (this.consumePunctuator(\",\") === undefined) break;\n }\n this.expectPunctuator(\"}\");\n let request: string | undefined;\n if (this.currentToken().value === \"from\") {\n this.expectModuleFrom();\n request = this.parseSourceRequest();\n } else this.finishModuleDeclaration();\n for (const entry of entries) {\n const local = entry.local.type === \"Identifier\" ? entry.local.name : entry.local.value;\n const exported = entry.exported.type === \"Identifier\" ? entry.exported.name : entry.exported.value;\n if (request === undefined) {\n if (entry.local.type !== \"Identifier\")\n throw new Error(`Local export must be an identifier at line ${entry.local.span.start.line}, column ${entry.local.span.start.column}.`);\n this.sourceLocalExports.set(local, entry.local);\n }\n this.recordSourceExport({exported, ...(request === undefined ? {local} : {request, imported: local})}, entry.exported.span);\n }\n return;\n }\n let declaration: VariableDeclaration | FunctionDeclaration | ClassDeclaration;\n if (this.isVariableDeclarationStart()) {\n declaration = this.parseVariableDeclaration();\n this.finishModuleDeclaration();\n } else if (this.currentToken().value === \"function\" || this.isAsyncFunctionDeclarationStart()) {\n declaration = this.parseFunctionDeclaration();\n } else if (this.currentToken().value === \"class\") declaration = this.parseClass(true) as ClassDeclaration;\n else throw unexpectedTokenError(this.currentToken());\n const names = declaration.type === \"VariableDeclaration\"\n ? declaration.declarations.flatMap(item => [...boundIdentifiers(item.id)]) : [declaration.id!];\n for (const identifier of names)\n this.recordSourceExport({exported: identifier.name, local: identifier.name}, identifier.span);\n return declaration;\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 if (!this.importSpecifiers?.has(source.value)) 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 === \"function\" ||\n (this.currentToken().value === \"async\" && this.peekToken(1).value === \"function\" &&\n !hasLineBreakBetween(this.currentToken(), this.peekToken(1)))) {\n return createExportDefaultDeclaration(exportToken, this.parseFunctionDeclaration(true));\n }\n\n if (this.currentToken().value === \"class\") {\n const named = isIdentifierLikeToken(this.peekToken(1)) && this.peekToken(1).value !== \"extends\";\n return createExportDefaultDeclaration(exportToken, this.parseClass(named));\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 isVariableDeclarationStart(allowDeclarations = true): boolean {\n const token = this.currentToken();\n if ((token.type === \"identifier\" && token.value === \"var\") ||\n (token.type === \"keyword\" && token.value === \"const\")) return true;\n if (token.type !== \"keyword\" || token.value !== \"let\") return false;\n if (this.lexicalContext.grammar?.strict !== false) return true;\n const next = this.peekToken(1);\n // Statement-only positions allow sloppy `let` as an expression, but never `let [`.\n return next.value === \"[\" || (allowDeclarations &&\n (next.value === \"{\" || isIdentifierLikeToken(next) || this.isContextualIdentifier(next) ||\n ((next.type === \"keyword\" || next.type === \"escaped-keyword\") &&\n (next.value === \"await\" || next.value === \"yield\"))));\n }\n\n private parseVariableDeclaration(allowIn = true): 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, allowIn);\n if (kindToken.value !== \"var\") {\n for (const identifier of boundIdentifiers(declarator.id))\n if (identifier.name === \"let\") throw unexpectedTokenError(kindToken);\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 resourceDeclarationHint(): \"sync\" | \"async\" | undefined {\n const token = this.currentToken();\n const offset = token.value === \"await\" && this.peekToken(1).value === \"using\" ? 1 : 0;\n const using = offset === 0 ? token : this.peekToken(1);\n const binding = this.peekToken(offset + 1);\n if (using.value !== \"using\" || hasLineBreakBetween(using, binding) ||\n (!isIdentifierLikeToken(binding) && !this.isContextualIdentifier(binding))) return undefined;\n if (offset === 1 && hasLineBreakBetween(token, using)) throw unexpectedTokenError(using);\n return offset === 1 ? \"async\" : \"sync\";\n }\n\n private parseResourceDeclaration(iteration = false, allowIn = true): VariableDeclaration {\n const start = this.currentToken();\n const disposal = this.resourceDeclarationHint()!;\n if (disposal === \"async\") {\n if (!this.lexicalContext.await || ![\"top-level\", \"async\", \"async-generator\"].includes(this.functionContext)) {\n throw unexpectedTokenError(start);\n }\n this.index++;\n }\n this.index++;\n const declarations: VariableDeclarator[] = [];\n do {\n const id = this.parseBindingIdentifier();\n if (id.name === \"let\" || (disposal === \"async\" && id.name === \"await\") ||\n (iteration && disposal === \"sync\" && id.name === \"of\")) throw new Error(`Invalid resource binding '${id.name}'.`);\n this.declarePatternBindings(id);\n const init = iteration ? undefined : (this.expectPunctuator(\"=\"), this.parseExpression({ allowIn }).node);\n declarations.push({type: \"VariableDeclarator\", id, ...(init === undefined ? {} : {init}), span: createSpan(id.span.start, init?.span.end ?? id.span.end)});\n } while (!iteration && this.consumePunctuator(\",\") !== undefined);\n return {type: \"VariableDeclaration\", kind: \"const\", disposal, declarations, span: createSpan(start.start, declarations.at(-1)!.span.end)};\n }\n\n private parseFunctionDeclaration(defaultExport = false): FunctionDeclaration {\n const asyncToken = this.consumeKeyword(\"async\");\n const functionToken = this.expectKeyword(\"function\");\n const generatorToken = this.consumePunctuator(\"*\");\n const id = defaultExport && this.currentToken().value === \"(\"\n ? undefined : this.parseBindingIdentifier();\n const legacyBlockFunction = !defaultExport && asyncToken === undefined && generatorToken === undefined &&\n this.lexicalContext.grammar?.strict === false && !this.functionScopes.has(this.scopes[this.scopes.length - 1]!);\n if (id !== undefined) this.declareBinding(id, defaultExport ? \"lexical\" : legacyBlockFunction ? \"legacy-function\" : \"function\");\n const generator = generatorToken !== undefined;\n const { params, body } = this.parseFunctionParts(generator, ordinaryFunctionContext, undefined, asyncToken !== undefined);\n\n return this.withFunctionSource({\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 parseClass(declaration: boolean): ClassNode {\n return this.withLexicalContext({\n ...this.lexicalContext,\n ...(this.lexicalContext.grammar === undefined ? {} : {grammar: {...this.lexicalContext.grammar, strict: true}})\n }, () => this.parseClassBody(declaration));\n }\n\n private parseClassBody(declaration: boolean): ClassNode {\n const start = this.expectKeyword(\"class\");\n const id = (isIdentifierLikeToken(this.currentToken()) || this.isContextualIdentifier(this.currentToken())) && this.currentToken().value !== \"extends\"\n ? this.parseBindingIdentifier()\n : undefined;\n if (declaration && id === undefined) throw unexpectedTokenError(this.currentToken());\n if (declaration) this.declareBinding(id!);\n return this.withScope(() => {\n if (id !== undefined) this.declareBinding(id);\n const superClass = this.consumeKeyword(\"extends\") === undefined\n ? undefined\n : this.parseLeftHandSideExpression().node;\n const open = this.expectPunctuator(\"{\");\n const elements: ClassElement[] = [];\n let constructorSeen = false;\n while (this.consumePunctuator(\"}\") === undefined) {\n if (this.currentToken().type === \"eof\") throw unexpectedTokenError(this.currentToken());\n if (this.consumePunctuator(\";\") !== undefined) continue;\n const element = this.parseClassElement(superClass !== undefined);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (constructorSeen) throw new Error(\"A class may only have one constructor.\");\n constructorSeen = true;\n }\n elements.push(element);\n }\n const body: ClassBody = {\n type: \"ClassBody\", body: elements,\n span: createSpan(open.start, this.previousToken().end)\n };\n return this.withFunctionSource({\n type: declaration ? \"ClassDeclaration\" : \"ClassExpression\",\n id, superClass, body, span: createSpan(start.start, body.span.end)\n } as ClassNode);\n });\n }\n\n private parseFunctionParts(\n generator: boolean,\n lexicalContext: LexicalParseContext,\n accessor?: \"get\" | \"set\",\n async = false\n ): {\n params: ArrowFunctionExpression[\"params\"];\n body: BlockStatement;\n } {\n const inheritedGrammar = this.lexicalContext.grammar;\n if (inheritedGrammar !== undefined) lexicalContext = {\n ...lexicalContext, grammar: {await: async, yield: generator, strict: inheritedGrammar.strict}\n };\n return this.withLexicalContext(lexicalContext, () => {\n let allowDuplicateParameters = false;\n const params = this.withScope(() => {\n const parsed = this.parseArrowParameters();\n allowDuplicateParameters = lexicalContext.grammar !== undefined && !lexicalContext.grammar.strict &&\n !lexicalContext.superProperty && parsed.every(param => param.type === \"Identifier\");\n const names = new Set<string>();\n for (const param of parsed)\n for (const identifier of boundIdentifiers(param)) {\n if (allowDuplicateParameters && names.has(identifier.name)) continue;\n this.declareBinding(identifier);\n names.add(identifier.name);\n }\n return parsed;\n });\n if (accessor === \"get\" && params.length !== 0)\n throw new Error(\"A getter cannot have parameters.\");\n if (accessor === \"set\" && (params.length !== 1 || params[0]?.type === \"RestElement\"))\n throw new Error(\"A setter must have exactly one non-rest parameter.\");\n const body = this.withFunctionContext(generator ? async ? \"async-generator\" : \"generator\" : async ? \"async\" : \"normal\", () => this.parseBlockStatement(params, undefined, allowDuplicateParameters));\n return { params, body };\n });\n }\n\n private parseClassElement(derived: boolean): ClassElement {\n const start = this.currentToken();\n let isStatic = false;\n if (start.type !== \"private-identifier\" && start.value === \"static\" &&\n start.end.offset - start.start.offset === start.value.length &&\n ![\"(\", \"=\", \";\", \"}\"].includes(this.peekToken(1).value)) {\n this.index++;\n isStatic = true;\n if (this.currentToken().value === \"{\") {\n const body = this.withLexicalContext({\n newTarget: true, superProperty: true, superCall: false,\n arguments: false, return: false, await: false, strictAwait: true,\n ...(this.lexicalContext.grammar === undefined ? {} : {\n grammar: {...this.lexicalContext.grammar, await: true}\n })\n }, () => this.withFunctionContext(\"normal\", () => this.parseBlockStatement([])));\n return { type: \"StaticBlock\", body, span: createSpan(start.start, body.span.end) };\n }\n }\n const methodStart = this.currentToken();\n let async = false;\n if (methodStart.type !== \"private-identifier\" && methodStart.value === \"async\" &&\n methodStart.end.offset - methodStart.start.offset === methodStart.value.length &&\n !hasLineBreakBetween(methodStart, this.peekToken(1)) &&\n (this.peekToken(1).value === \"*\" || this.isObjectMethodStart())) {\n this.index++;\n async = true;\n }\n const generator = this.consumePunctuator(\"*\") !== undefined;\n let accessor: \"get\" | \"set\" | undefined;\n const modifier = this.currentToken();\n if (modifier.type !== \"private-identifier\" && (modifier.value === \"get\" || modifier.value === \"set\") && this.isObjectMethodStart()) {\n if (async || generator || modifier.end.offset - modifier.start.offset !== modifier.value.length)\n throw unexpectedTokenError(modifier);\n accessor = modifier.value;\n this.index++;\n }\n const computed = this.consumePunctuator(\"[\") !== undefined;\n const key = computed\n ? this.parseExpression({ allowSequence: true }).node\n : this.currentToken().type === \"string\"\n ? createStringLiteral(this.tokens[this.index++]!)\n : this.currentToken().type === \"numeric\"\n ? createNumericLiteral(this.tokens[this.index++]!)\n : this.currentToken().type === \"private-identifier\" ? this.parsePrivateIdentifier() : this.parseIdentifierName();\n if (computed) this.expectPunctuator(\"]\");\n const name = computed ? undefined : key.type === \"Identifier\" ? key.name\n : key.type === \"StringLiteral\" || key.type === \"NumericLiteral\" ? String(key.value) : undefined;\n if (isStatic && name === \"prototype\") throw new Error(\"A static class element cannot be named prototype.\");\n if (this.currentToken().value === \"(\") {\n const constructor = !isStatic && name === \"constructor\";\n if (constructor && (async || generator || accessor !== undefined)) throw new Error(\"A class constructor must be an ordinary method.\");\n const { params, body } = this.parseFunctionParts(generator, {\n newTarget: true, superProperty: true, superCall: constructor && derived,\n arguments: true, return: true, await: async, strictAwait: true\n }, accessor, async);\n const value = this.withFunctionSource({\n type: \"FunctionExpression\", async, generator, method: true, params, body,\n span: createSpan(methodStart.start, body.span.end)\n } as FunctionExpression);\n return {\n type: \"MethodDefinition\", key, computed, static: isStatic,\n kind: accessor ?? (constructor ? \"constructor\" : \"method\"), value,\n span: createSpan(start.start, value.span.end)\n };\n }\n if (async || generator) throw unexpectedTokenError(this.currentToken());\n if (name === \"constructor\") throw new Error(\"A class field cannot be named constructor.\");\n const value = this.consumePunctuator(\"=\") === undefined ? undefined : this.withLexicalContext({\n newTarget: true, superProperty: true, superCall: false,\n arguments: false, return: false, await: false, strictAwait: true\n }, () => this.withFunctionContext(\"normal\", () => this.parseExpression().node));\n const end = value?.span.end ?? key.span.end;\n if (this.consumePunctuator(\";\") === undefined && this.currentToken().value !== \"}\" &&\n !hasLineBreakBetween(this.previousToken(), this.currentToken()))\n throw unexpectedTokenError(this.currentToken());\n return { type: \"PropertyDefinition\", key, computed, static: isStatic, value, span: createSpan(start.start, end) };\n }\n\n private parseVariableDeclarator(kind: VariableDeclarationKind, allowIn = true): VariableDeclarator {\n const id = this.parseBindingTarget();\n let init: Expression | undefined;\n\n if (this.consumePunctuator(\"=\") !== undefined) {\n init = this.parseExpression({ allowIn }).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 return this.withFunctionContext(\"parameters\", () => {\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\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) || this.isContextualIdentifier(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 (this.lexicalContext.grammar?.strict && STRICT_BINDING_NAMES.has(token.value))\n throw unexpectedTokenError(token);\n if (!isIdentifierLikeToken(token) && !this.isContextualIdentifier(token)) {\n throw unexpectedTokenError(token);\n }\n\n this.index += 1;\n return createIdentifier(token);\n }\n\n private isContextualIdentifier(token: Token): boolean {\n const grammar = this.lexicalContext.grammar;\n return grammar !== undefined && (token.type === \"keyword\" || token.type === \"escaped-keyword\") &&\n ((token.value === \"await\" && !grammar.await && this.moduleSyntax === undefined) ||\n (token.value === \"yield\" && !grammar.yield && !grammar.strict) ||\n (token.value === \"let\" && !grammar.strict));\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\" || token.type === \"keyword\" || token.type === \"escaped-keyword\") {\n this.index += 1;\n const key = createIdentifierName(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 if (!isIdentifierLikeToken(token) && !this.isContextualIdentifier(token)) throw unexpectedTokenError(token);\n assertAllowedIdentifierReference(token, this.lexicalContext.grammar?.strict !== false);\n let value: AssignmentPattern | ArrayPattern | Identifier | ObjectPattern = key;\n this.assertUnrestrictedTarget(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 const following = this.tokenAfterBalancedGroup(this.index);\n if (\n token.type !== \"punctuator\" ||\n (token.value !== \"[\" && token.value !== \"{\") ||\n following?.type !== \"punctuator\" ||\n following.value !== \"=\"\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.parseExpression().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 if (token.type === \"punctuator\" && (token.value === \"[\" || token.value === \"{\")) {\n const following = this.tokenAfterBalancedGroup(this.index);\n const literalContinuation =\n following?.type === \"template\" ||\n (following?.type === \"punctuator\" && [\".\", \"[\", \"(\", \"?.\"].includes(following.value));\n if (!literalContinuation) {\n return token.value === \"[\"\n ? this.parseAssignmentArrayPattern()\n : this.parseAssignmentObjectPattern();\n }\n }\n\n const expression = this.parseLeftHandSideExpression().node;\n if (expression.type === \"Identifier\") {\n this.assertUnrestrictedTarget(expression);\n return expression;\n }\n\n if (\n expression.type === \"MetaProperty\" ||\n (expression.type === \"MemberExpression\" && !this.hasOptionalAssignmentChain(expression))\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 argument = this.parseAssignmentTarget();\n if (argument.type !== \"Identifier\" &&\n (argument.type !== \"MemberExpression\" || this.hasOptionalAssignmentChain(argument))) {\n throw new Error(\n `Object rest assignment requires an identifier or member target at line ${argument.span.start.line}, column ${argument.span.start.column}.`\n );\n }\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\" || token.type === \"keyword\" || token.type === \"escaped-keyword\") {\n this.index += 1;\n const key = createIdentifierName(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 if (!isIdentifierLikeToken(token) && !this.isContextualIdentifier(token)) throw unexpectedTokenError(token);\n assertAllowedIdentifierReference(token, this.lexicalContext.grammar?.strict !== false);\n let value: AssignmentPattern | ArrayPattern | Identifier | MemberExpression | ObjectPattern =\n key;\n this.assertUnrestrictedTarget(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.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 if (this.currentToken().type === \"private-identifier\") {\n const left = this.parsePrivateIdentifier();\n if (!this.allowIn) throw unexpectedTokenError(this.currentToken());\n this.expectKeyword(\"in\");\n const right = this.parseShiftExpression();\n return this.parseBinaryExpression(() => this.parseShiftExpression(), RELATIONAL_OPERATORS,\n { node: { type: \"BinaryExpression\", operator: \"in\", left, right: right.node,\n span: createSpan(left.span.start, right.node.span.end) }, parenthesized: false });\n }\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\" || left.node.type === \"AwaitExpression\")) {\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 === \"await\" && !this.isContextualIdentifier(token)) {\n if (!this.lexicalContext.await) throw new DisallowedSyntaxError(\"await in a class element\", token.start);\n if (this.functionContext === \"generator\") {\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 if (this.functionContext === \"parameters\") {\n throw new Error(\n `await is not valid in function parameters at line ${token.start.line}, column ${token.start.column}.`\n );\n }\n if (this.functionContext === \"normal\" && this.lexicalContext.requireAsyncAwait) {\n throw new SyntaxError(\n `await is only valid at top level or inside an 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 if (token.value === \"delete\" && argument.node.type === \"Identifier\" && this.lexicalContext.grammar?.strict === true)\n throw new SyntaxError(\"Cannot delete an unqualified identifier in strict mode.\");\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 // Parentheses end short-circuit propagation without discarding a method receiver.\n const continuesOptionalChain = !expression.parenthesized &&\n (expression.node.type === \"MemberExpression\" || expression.node.type === \"CallExpression\") &&\n (expression.node.optional || expression.node.continuesOptionalChain === true);\n const optionalChain = this.consumePunctuator(\"?.\");\n if (optionalChain !== undefined) {\n if (this.consumePunctuator(\"(\") !== undefined) {\n expression = {\n node: this.createCallExpression(expression.node, true, continuesOptionalChain),\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 ...(continuesOptionalChain ? { continuesOptionalChain: true as const } : {}),\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.currentToken().type === \"private-identifier\" ? this.parsePrivateIdentifier() : this.parseIdentifierName();\n expression = {\n node: {\n type: \"MemberExpression\",\n computed: false,\n object: expression.node,\n optional: true,\n ...(continuesOptionalChain ? { continuesOptionalChain: true as const } : {}),\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.currentToken().type === \"private-identifier\" ? this.parsePrivateIdentifier() : this.parseIdentifierName();\n expression = {\n node: {\n type: \"MemberExpression\",\n computed: false,\n object: expression.node,\n optional: false,\n ...(continuesOptionalChain ? { continuesOptionalChain: true as const } : {}),\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 ...(continuesOptionalChain ? { continuesOptionalChain: true as const } : {}),\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, continuesOptionalChain),\n parenthesized: false\n };\n continue;\n }\n\n if (this.currentToken().type === \"template\") {\n if (continuesOptionalChain) {\n const { line, column } = this.currentToken().start;\n throw new SyntaxError(`Tagged templates are not allowed in optional chains at line ${line}, column ${column}.`);\n }\n expression = {\n node: this.parseTaggedTemplate(expression.node),\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.value === \"class\") return { node: this.parseClass(false) as ClassExpression, parenthesized: false };\n if (token.type === \"keyword\" && token.value === \"super\") {\n const next = this.peekToken(1).value;\n if (!(next === \"(\" ? this.lexicalContext.superCall :\n (next === \".\" || next === \"[\") && this.lexicalContext.superProperty))\n throw new DisallowedSyntaxError(\"super\", token.start);\n this.index++;\n return { node: { type: \"Super\", span: createTokenSpan(token) }, parenthesized: false };\n }\n if (token.value === \"arguments\" && !this.lexicalContext.arguments)\n throw new DisallowedSyntaxError(\"arguments in a class element\", token.start);\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) || this.isContextualIdentifier(token)) {\n assertAllowedIdentifierReference(token, this.lexicalContext.grammar?.strict !== false);\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(\n token,\n {\n allowMalformedEscapes: false,\n functionContext: this.functionContext,\n lexicalContext: this.lexicalContext,\n source: this.source\n },\n this.compilation\n ),\n parenthesized: false\n };\n }\n\n if (token.type === \"keyword\") {\n if (token.value === \"import\" && this.peekToken(1).value === \"(\") {\n this.index += 2;\n const source = this.parseExpression().node;\n let options: Expression | undefined;\n if (this.consumePunctuator(\",\") !== undefined && this.currentToken().value !== \")\") {\n options = this.parseExpression().node;\n this.consumePunctuator(\",\");\n }\n const end = this.expectPunctuator(\")\");\n return {node:{type:\"ImportExpression\",source,...(options === undefined ? {} : {options}),span:createSpan(token.start,end.end)},parenthesized:false};\n }\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 this.parenthesizedNodes.add(expression.node);\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 if (this.currentToken().value === \"import\" && this.peekToken(1).value === \"(\")\n throw unexpectedTokenError(this.currentToken());\n\n if (this.consumePunctuator(\".\") !== undefined) {\n const target = this.currentToken();\n if (target.type !== \"identifier\" || target.value !== \"target\" ||\n target.end.offset - target.start.offset !== target.value.length ||\n !this.lexicalContext.newTarget)\n throw new DisallowedSyntaxError(newToken.value, newToken.start);\n this.index++;\n return { node: { type: \"NewTargetExpression\", span: createSpan(newToken.start, target.end) }, parenthesized: false };\n }\n\n let callee = this.parsePrimaryExpression();\n while (true) {\n if (this.consumePunctuator(\".\") !== undefined) {\n const property = this.currentToken().type === \"private-identifier\" ? this.parsePrivateIdentifier() : 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 if (this.currentToken().type === \"template\") {\n callee = { node: this.parseTaggedTemplate(callee.node), parenthesized: false };\n continue;\n }\n\n break;\n }\n\n const optional = this.consumePunctuator(\"?.\");\n if (optional !== undefined)\n throw new DisallowedSyntaxError(\"new optional chain\", optional.start);\n if (callee.node.type === \"Super\")\n throw new DisallowedSyntaxError(\"new super\", newToken.start);\n const args = this.consumePunctuator(\"(\") === undefined ? [] : 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 parseTaggedTemplate(tag: Expression): TaggedTemplateExpression {\n const quasi = createTemplateLiteral(\n this.currentToken(),\n {\n allowMalformedEscapes: true,\n functionContext: this.functionContext,\n lexicalContext: this.lexicalContext,\n source: this.source\n },\n this.compilation\n );\n this.index += 1;\n return {\n type: \"TaggedTemplateExpression\",\n tag,\n quasi,\n span: createSpan(tag.span.start, quasi.span.end)\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 const generator = generatorToken !== undefined;\n const grammar = this.lexicalContext.grammar;\n const id = this.withLexicalContext({\n ...this.lexicalContext,\n ...(grammar === undefined ? {} : {grammar: {...grammar, await: asyncToken !== undefined, yield: generator}})\n }, () => isIdentifierLikeToken(this.currentToken()) || this.isContextualIdentifier(this.currentToken())\n ? this.parseBindingIdentifier()\n : undefined);\n const { params, body } = this.parseFunctionParts(generator, ordinaryFunctionContext, undefined, asyncToken !== undefined);\n\n return this.withFunctionSource({\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 let hasPrototypeSetter = false;\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 const property = this.parseObjectProperty();\n if (!property.computed && !property.shorthand && property.kind === undefined &&\n !(property.value.type === \"FunctionExpression\" && property.value.method === true) &&\n (property.key.type === \"Identifier\" ? property.key.name === \"__proto__\" :\n property.key.type === \"StringLiteral\" && property.key.value === \"__proto__\")) {\n if (hasPrototypeSetter) {\n throw new Error(`Duplicate __proto__ prototype setter at line ${property.key.span.start.line}, column ${property.key.span.start.column}.`);\n }\n hasPrototypeSetter = true;\n }\n properties.push(property);\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 const asyncGeneratorToken = generatorToken !== undefined && this.currentToken().value === \"async\"\n ? this.currentToken() : undefined;\n if (asyncGeneratorToken !== undefined) {\n if (hasLineBreakBetween(asyncGeneratorToken, generatorToken!)) throw unexpectedTokenError(generatorToken!);\n this.index++;\n }\n if (generatorToken !== undefined) this.index++;\n\n let accessor: \"get\" | \"set\" | undefined;\n let accessorStart: Position | undefined;\n if (\n generatorToken === undefined &&\n this.currentToken().type === \"identifier\" &&\n (this.currentToken().value === \"get\" || this.currentToken().value === \"set\") &&\n this.isObjectMethodStart()\n ) {\n const token = this.currentToken();\n if (token.end.offset - token.start.offset !== token.value.length)\n throw unexpectedTokenError(token);\n accessor = token.value === \"get\" ? \"get\" : \"set\";\n accessorStart = token.start;\n this.index++;\n }\n\n const modifierToken = this.currentToken();\n const asyncToken = asyncGeneratorToken ?? (\n generatorToken === undefined &&\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 && asyncGeneratorToken === 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, accessorStart ?? propertyStart.start, accessor, generatorToken);\n return {\n type: \"Property\",\n ...(accessor === undefined ? {} : { kind: accessor }),\n computed: true,\n shorthand: false,\n key: key.node,\n value,\n span: createSpan(value.span.start, value.span.end)\n };\n }\n if (generatorToken !== undefined) throw unexpectedTokenError(this.currentToken());\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 (token.type === \"identifier\" || token.type === \"keyword\" || token.type === \"escaped-keyword\") {\n this.index += 1;\n const key = createIdentifierName(token);\n if (this.currentToken().type === \"punctuator\" && this.currentToken().value === \"(\") {\n const value = this.parseObjectMethod(asyncToken, accessorStart ?? key.span.start, accessor, generatorToken);\n return {\n type: \"Property\",\n ...(accessor === undefined ? {} : { kind: accessor }),\n computed: false,\n shorthand: false,\n key,\n value,\n span: createSpan(value.span.start, value.span.end)\n };\n }\n if (generatorToken !== undefined) throw unexpectedTokenError(this.currentToken());\n if (this.consumePunctuator(\":\") === undefined) {\n if (!isIdentifierLikeToken(token) && !this.isContextualIdentifier(token)) throw unexpectedTokenError(token);\n assertAllowedIdentifierReference(token, this.lexicalContext.grammar?.strict !== false);\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, accessorStart ?? key.span.start, accessor, generatorToken);\n return {\n type: \"Property\",\n ...(accessor === undefined ? {} : { kind: accessor }),\n computed: false,\n shorthand: false,\n key,\n value,\n span: createSpan(value.span.start, value.span.end)\n };\n }\n if (generatorToken !== undefined) throw unexpectedTokenError(this.currentToken());\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 === \"private-identifier\" ||\n propertyToken.type === \"keyword\" ||\n propertyToken.type === \"escaped-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 accessor?: \"get\" | \"set\",\n generatorToken?: Token\n ): FunctionExpression {\n const { params, body } = this.parseFunctionParts(generatorToken !== undefined, {\n ...ordinaryFunctionContext,\n superProperty: true,\n ...(accessor === undefined ? {} : { await: false, strictAwait: true })\n }, accessor, asyncToken !== undefined);\n\n return this.withFunctionSource({\n type: \"FunctionExpression\",\n async: asyncToken !== undefined,\n body,\n generator: generatorToken !== undefined,\n id: undefined,\n method: true,\n params,\n span: createSpan(asyncToken?.start ?? generatorToken?.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\" && token.type !== \"escaped-keyword\") {\n throw unexpectedTokenError(token);\n }\n this.index += 1;\n return createIdentifierName(token);\n }\n\n private parsePrivateIdentifier(): PrivateIdentifier {\n const token = this.currentToken();\n if (token.type !== \"private-identifier\") throw unexpectedTokenError(token);\n this.index++;\n return { type: \"PrivateIdentifier\", name: token.value, span: createSpan(token.start, token.end) };\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, continuesOptionalChain = false): CallExpression {\n const args = this.parseArguments();\n const end = this.previousToken();\n return {\n type: \"CallExpression\",\n arguments: args,\n callee,\n optional,\n ...(continuesOptionalChain ? { continuesOptionalChain: true as const } : {}),\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 initial?: ParsedExpression\n ): ParsedExpression {\n let left = initial ?? parseOperand();\n\n while (true) {\n const token = this.currentToken();\n if (token === this.forInInitializerEnd || (!this.allowIn && token.value === \"in\") || token.type === \"escaped-keyword\" || !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 assertUnrestrictedTarget(identifier: Identifier): void {\n if (this.lexicalContext.grammar?.strict !== false &&\n (identifier.name === \"eval\" || identifier.name === \"arguments\"))\n throw new Error(`Invalid strict binding target '${identifier.name}'.`);\n }\n\n private toAssignmentTarget(node: Expression): AssignmentTarget {\n if (node.type === \"MetaProperty\" && this.moduleSyntax !== undefined)\n throw invalidAssignmentTargetError(node.span.start);\n if (node.type === \"Identifier\") {\n this.assertUnrestrictedTarget(node);\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 if (this.parenthesizedNodes.has(node)) throw invalidAssignmentTargetError(node.span.start);\n return this.arrayExpressionToPattern(node);\n }\n\n if (node.type === \"ObjectExpression\") {\n if (this.parenthesizedNodes.has(node)) throw invalidAssignmentTargetError(node.span.start);\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 this.assertUnrestrictedTarget(node);\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 (property.argument.type !== \"MemberExpression\" || this.hasOptionalAssignmentChain(property.argument))) {\n throw new Error(\n `Object rest assignment requires an identifier or member target at line ${property.argument.span.start.line}, column ${property.argument.span.start.column}.`\n );\n }\n\n return {\n type: \"RestElement\",\n argument: this.toPatternTarget(this.toAssignmentTarget(property.argument)),\n span: property.span\n };\n }\n\n const value = 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 hasOptionalAssignmentChain(node: Expression): boolean {\n while (node.type === \"MemberExpression\" || node.type === \"CallExpression\") {\n if (node.optional) return true;\n const base = node.type === \"MemberExpression\" ? node.object : node.callee;\n if (this.parenthesizedNodes.has(base)) return false;\n node = base;\n }\n return false;\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 tokenAfterBalancedGroup(startIndex: number): Token | undefined {\n const startToken = this.tokens[startIndex];\n if (\n startToken?.type !== \"punctuator\" ||\n (startToken.value !== \"[\" && startToken.value !== \"{\")\n ) {\n return undefined;\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 this.tokens[index + 1];\n }\n }\n }\n\n return undefined;\n }\n\n private isSingleParamArrowFunction(): boolean {\n const token = this.currentToken();\n if ((!isIdentifierLikeToken(token) && !this.isContextualIdentifier(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 (!isIdentifierLikeToken(this.peekToken(1)) && !this.isContextualIdentifier(this.peekToken(1))) ||\n this.peekToken(2).value !== \"=>\"\n ) {\n return false;\n }\n\n const paramToken = this.peekToken(1);\n if (hasLineBreakBetween(token, paramToken)) {\n return false;\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 operator: Token | undefined;\n let depth = 0;\n let conditionalDepth = 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 operator;\n }\n depth -= 1;\n } else if (depth === 0 && token.value === \";\") {\n return undefined;\n } else if (depth === 0 && token.value === \"?\") {\n conditionalDepth++;\n } else if (depth === 0 && token.value === \":\" && conditionalDepth > 0) {\n conditionalDepth--;\n }\n }\n\n if (\n depth === 0 && conditionalDepth === 0 &&\n token.type === \"keyword\" &&\n (token.value === \"of\" || token.value === \"in\") &&\n index !== startIndex &&\n !(token.value === \"of\" && index === startIndex + 1 &&\n previousToken?.type !== \"escaped-keyword\" &&\n [\"const\", \"let\", \"var\"].includes(previousToken?.value ?? \"\")) &&\n previousToken?.value !== \".\" &&\n previousToken?.value !== \"?.\"\n ) {\n operator ??= 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.resourceDeclarationHint() !== undefined) return true;\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() || this.peekToken(1).value === \"(\")) {\n return false;\n }\n return true;\n }\n\n return (\n token.type === \"identifier\" &&\n (token.value === \"switch\" ||\n token.value === \"var\" ||\n token.value === \"debugger\" ||\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 isLabelIdentifier(token: Token): boolean {\n if (this.lexicalContext.grammar?.strict !== false && STRICT_BINDING_NAMES.has(token.value) &&\n token.value !== \"eval\" && token.value !== \"arguments\") return false;\n return isIdentifierLikeToken(token) || this.isContextualIdentifier(token);\n }\n\n private consumeControlLabel(token: Token): Token | undefined {\n if (\n this.isLabelIdentifier(this.currentToken()) &&\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>(functionContext: FunctionParseContext, callback: () => T): T {\n const previousBreakableDepth = this.breakableDepth;\n const previousLoopDepth = this.loopDepth;\n const previousLabels = this.activeLabels;\n const previousFunctionContext = this.functionContext;\n this.breakableDepth = 0;\n this.loopDepth = 0;\n this.activeLabels = new Map();\n this.functionContext = functionContext;\n try {\n return callback();\n } finally {\n this.breakableDepth = previousBreakableDepth;\n this.loopDepth = previousLoopDepth;\n this.activeLabels = previousLabels;\n this.functionContext = previousFunctionContext;\n }\n }\n\n private withLexicalContext<T>(context: LexicalParseContext, callback: () => T): T {\n const previous = this.lexicalContext;\n if (previous.requireAsyncAwait && context.requireAsyncAwait === undefined)\n context = { ...context, requireAsyncAwait: true };\n if (context.grammar === undefined && previous.grammar !== undefined)\n context = {...context, grammar: {...previous.grammar}};\n this.lexicalContext = context;\n try { return callback(); } finally { this.lexicalContext = previous; }\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 !(this.moduleSyntax !== undefined && scope === this.scopes[0]);\n if (\n (existing !== undefined &&\n !(variableFunction && (existing === \"function\" || existing === \"parameter\")) &&\n !(kind === \"legacy-function\" && existing === \"legacy-function\")) ||\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 === \"legacy-function\" ||\n (existing === \"function\" && (!this.functionScopes.has(scope) ||\n (this.moduleSyntax !== undefined && scope === this.scopes[0])))) {\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 const token = this.tokens[this.index] ?? this.tokens[this.tokens.length - 1];\n if (this.lexicalContext.grammar?.strict !== false && token.legacyEscape)\n throw new Error(\"Legacy escape sequences are not supported in strict mode.\");\n if (this.lexicalContext.grammar?.strict !== false && token.type === \"numeric\" &&\n token.value[0] === \"0\" && isDecimalDigit(token.value[1] ?? \"\"))\n throw new Error(\"Legacy numeric literals are not supported in strict mode.\");\n return token;\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), this.moduleSyntax !== undefined);\n }\n\n private parseImportMeta(): MetaProperty {\n const importToken = this.currentToken();\n if (!this.allowImportMeta) throw new Error(\"import.meta is only valid in module source.\");\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 \"ImportExpression\":\n return findImportMetaAssignmentInNode(node.source) ?? findImportMetaAssignmentInOptionalExpression(node.options);\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 \"BigIntLiteral\":\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 === \",\" || value === \":\";\n}\n\nfunction createNumericLiteral(token: Token): NumericLiteral | BigIntLiteral {\n if (token.value.endsWith(\"n\")) return {\n type: \"BigIntLiteral\",\n raw: token.value,\n value: token.value.slice(0, -1).replaceAll(\"_\", \"\"),\n span: createTokenSpan(token)\n };\n return {\n type: \"NumericLiteral\",\n raw: token.value,\n value: token.value.length > 1 && token.value[0] === \"0\" && [...token.value].every(isOctalDigit)\n ? Number.parseInt(token.value, 8) : 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), token.legacyEscape),\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 | BigIntLiteral | 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: {\n allowMalformedEscapes: boolean;\n functionContext: FunctionParseContext;\n lexicalContext: LexicalParseContext;\n source: string;\n },\n compilation?: CompileScope\n): TemplateLiteral {\n const raw = token.value;\n const expressions: Expression[] = [];\n const quasis: TemplateElement[] = [];\n let quasiStart = 1;\n\n for (const { start: expressionStart, end: expressionEnd } of token.templateExpressions ?? []) {\n quasis.push(createTemplateElement(token.start, raw, quasiStart, expressionStart - 2, false, options));\n expressions.push(\n parseEmbeddedExpression(\n raw.slice(expressionStart, expressionEnd),\n positionWithinRaw(token.start, raw, expressionStart),\n options.functionContext,\n options.lexicalContext,\n options.source,\n compilation\n )\n );\n quasiStart = expressionEnd + 1;\n }\n\n quasis.push(createTemplateElement(token.start, raw, quasiStart, raw.length - 1, true, options));\n\n const node: TemplateLiteral = {\n type: \"TemplateLiteral\",\n expressions,\n quasis,\n span: createTokenSpan(token)\n };\n templateSources.set(node, options.source);\n return node;\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: normalizeTemplateLineTerminators(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 invalid = findMalformedTemplateEscape(value);\n if (invalid !== undefined) {\n return allowMalformedEscapes ? { invalid } : { invalid };\n }\n\n return {\n value: decodeEscapedText(normalizeTemplateLineTerminators(value))\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 (next === \"8\" || next === \"9\") {\n return { index, message: \"Invalid decimal escape sequence in template\" };\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 decodeEscapedText(value: string, allowLegacy = false): 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\" || next === \"\\u2028\" || next === \"\\u2029\") {\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 if (allowLegacy && isOctalDigit(next)) {\n const start = index + 1;\n const limit = next <= \"3\" ? 3 : 2;\n index = start + 1;\n while (index < start + limit && isOctalDigit(value[index] ?? \"\")) index++;\n decoded += String.fromCharCode(Number.parseInt(value.slice(start, index), 8));\n continue;\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 functionContext: FunctionParseContext,\n lexicalContext: LexicalParseContext,\n fullSource: string,\n compilation?: CompileScope\n): Expression {\n const tokens = tokenize(source, {\n allowRegexLiterals: true, allowLegacyNumbers: lexicalContext.grammar?.strict === false,\n allowLegacyEscapes: lexicalContext.grammar?.strict === false,\n allowHtmlComments: lexicalContext.grammar !== undefined, compilation\n }).map((token) => ({\n ...token,\n start: rebasePosition(token.start, base),\n end: rebasePosition(token.end, base)\n }));\n return new Parser(tokens, fullSource, compilation, functionContext, lexicalContext).parseExpressionOnly();\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 const position = { line, column, offset };\n return compactDerivedPosition(base, position) ?? position;\n}\n\nfunction rebasePosition(position: Position, base: Position): Position {\n const rebased = {\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 return compactDerivedPosition(base, rebased) ?? rebased;\n}\n\nfunction isLiteralPropertyKey(token: Token): boolean {\n return token.type === \"numeric\" || token.type === \"string\";\n}\n\nfunction isIdentifierLikeToken(token: Token): boolean {\n return (token.type === \"identifier\" && !RESERVED_IDENTIFIER_SPELLINGS.has(token.value)) ||\n ((token.type === \"keyword\" || token.type === \"escaped-keyword\") && (token.value === \"async\" || token.value === \"of\" || token.value === \"as\"));\n}\n\nfunction isNewToken(token: Token): boolean {\n return token.type !== \"escaped-keyword\" && token.value === \"new\";\n}\n\nfunction createTokenSpan(token: Token): SourceSpan {\n return createSpan(token.start, token.end);\n}\n\nfunction assertAllowedIdentifierReference(token: Token, strict: boolean): void {\n if (token.value === \"new\" || (strict && STRICT_BINDING_NAMES.has(token.value) &&\n token.value !== \"eval\" && token.value !== \"arguments\")) {\n throw new DisallowedSyntaxError(token.value, token.start);\n }\n}\n\nfunction createSpan(start: Position, end: Position): SourceSpan {\n return compactSourceSpan(start, end) ?? {\n start: isFrozenPosition(start) ? start : { ...start },\n end: isFrozenPosition(end) ? 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", "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 { Float16Array as PonyfillFloat16Array } from \"@petamoriken/float16\";\n\nexport const float16BackingViews = new WeakMap<object, Uint16Array<ArrayBufferLike>>();\n\nconst FallbackFloat16Array = class Float16Array extends PonyfillFloat16Array {\n constructor(input?: number | ArrayLike<number> | Iterable<number> | ArrayBufferLike, byteOffset?: number, length?: number) {\n // The ponyfill accepts the full native constructor input union; select one\n // overload for TypeScript without changing the runtime arguments.\n super(input as ArrayBuffer, byteOffset, length);\n if (Object.getPrototypeOf(this) !== Float16Array.prototype) return;\n const buffer = this.buffer;\n float16BackingViews.set(this, new Uint16Array(buffer, this.byteOffset,\n input === buffer && length === undefined ? undefined : this.length));\n }\n};\nObject.defineProperty(FallbackFloat16Array, \"name\", { value: \"Float16Array\", configurable: true });\n\nexport const Float16Array: Omit<typeof PonyfillFloat16Array, never> & {\n new(input?: number | ArrayLike<number> | Iterable<number> | ArrayBufferLike, byteOffset?: number, length?: number): PonyfillFloat16Array;\n} =\n Object.getOwnPropertyDescriptor(globalThis, \"Float16Array\")?.value ?? FallbackFloat16Array;\n", "import { Float16Array } from \"./float16-array.js\";\n\nexport const numericTypedArrayConstructors = {\n Float32Array, Uint8Array, Int8Array, Uint8ClampedArray,\n Int16Array, Uint16Array, Int32Array, Uint32Array, Float64Array,\n BigInt64Array, BigUint64Array, Float16Array\n};\nexport type NumericTypedArrayConstructor = typeof numericTypedArrayConstructors[keyof typeof numericTypedArrayConstructors];\nexport type NumericTypedArray = InstanceType<NumericTypedArrayConstructor>;\n"],
5
+ "mappings": "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",
6
+ "names": ["includedUsage", "measured", "total", "key", "cached", "output", "isValidIdentifierCharacter", "start", "quantifier", "value", "isDecimalDigit", "MAX_UNICODE_CODE_POINT", "statement", "createSpan", "token", "body", "request", "value", "createIdentifier", "property", "end", "isDecimalDigit", "isOctalDigit", "isAsciiLetter", "isHexDigit", "Float16Array", "Float16Array"]
7
+ }