@poe-platform/safe-bash 0.1.719 → 0.1.720

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 (50) hide show
  1. package/README.md +1 -1
  2. package/dist/safe-bash/chunks/{chunk-FEJYNOYN.js → chunk-6G7AGS2B.js} +38 -3
  3. package/dist/safe-bash/chunks/{chunk-FEJYNOYN.js.map → chunk-6G7AGS2B.js.map} +2 -2
  4. package/dist/safe-bash/chunks/{chunk-4CEZRUSZ.js → chunk-AOT4SUBQ.js} +2 -2
  5. package/dist/safe-bash/chunks/{chunk-MX6K5URO.js → chunk-FOMU56TU.js} +18 -2
  6. package/dist/safe-bash/chunks/chunk-FOMU56TU.js.map +7 -0
  7. package/dist/safe-bash/chunks/{chunk-2XJFAB3E.js → chunk-IW6BX3VX.js} +18 -2
  8. package/dist/safe-bash/chunks/chunk-IW6BX3VX.js.map +7 -0
  9. package/dist/safe-bash/chunks/{chunk-UMCWCITQ.js → chunk-KLEL3WAN.js} +38 -3
  10. package/dist/safe-bash/chunks/{chunk-UMCWCITQ.js.map → chunk-KLEL3WAN.js.map} +2 -2
  11. package/dist/safe-bash/chunks/{chunk-UKO4AP3K.js → chunk-L4HKTYVE.js} +2 -2
  12. package/dist/safe-bash/chunks/{chunk-LEZHTGWK.js → chunk-M7GLXFPU.js} +2 -2
  13. package/dist/safe-bash/chunks/{chunk-VZJ3RTVV.js → chunk-NF3OGIG4.js} +2 -2
  14. package/dist/safe-bash/chunks/{chunk-KR2R6MLR.js → chunk-RNWDFNH4.js} +2 -2
  15. package/dist/safe-bash/chunks/{chunk-RGSI3B5P.js → chunk-RYXT5BJJ.js} +2 -2
  16. package/dist/safe-bash/chunks/{chunk-T7T3UICV.js → chunk-UZUKVBCC.js} +2 -2
  17. package/dist/safe-bash/chunks/{chunk-TZ53QA73.js → chunk-WSX5CLK2.js} +2 -2
  18. package/dist/safe-bash/commands/basic.d.ts.map +1 -1
  19. package/dist/safe-bash/commands/basic.js +9 -2
  20. package/dist/safe-bash/commands/basic.js.map +1 -1
  21. package/dist/safe-bash/commands/internal.d.ts +4 -1
  22. package/dist/safe-bash/commands/internal.d.ts.map +1 -1
  23. package/dist/safe-bash/commands/internal.js +45 -2
  24. package/dist/safe-bash/commands/internal.js.map +1 -1
  25. package/dist/safe-bash/commands/llm/index.browser.js +2 -2
  26. package/dist/safe-bash/commands/network/index.browser.js +2 -2
  27. package/dist/safe-bash/commands/node/index.browser.js +2 -2
  28. package/dist/safe-bash/commands/pandoc/index.js.map +1 -1
  29. package/dist/safe-bash/commands/structured/jq.d.ts.map +1 -1
  30. package/dist/safe-bash/commands/structured/jq.js +8 -4
  31. package/dist/safe-bash/commands/structured/jq.js.map +1 -1
  32. package/dist/safe-bash/commands/structured/values.d.ts +1 -0
  33. package/dist/safe-bash/commands/structured/values.d.ts.map +1 -1
  34. package/dist/safe-bash/commands/structured/values.js +18 -1
  35. package/dist/safe-bash/commands/structured/values.js.map +1 -1
  36. package/dist/safe-bash/commands/xml/index.browser.js +2 -2
  37. package/dist/safe-bash/commands/yq/index.browser.js +2 -2
  38. package/dist/safe-bash/core.browser.js +24 -12
  39. package/dist/safe-bash/core.browser.js.map +3 -3
  40. package/package.json +2 -2
  41. package/dist/safe-bash/chunks/chunk-2XJFAB3E.js.map +0 -7
  42. package/dist/safe-bash/chunks/chunk-MX6K5URO.js.map +0 -7
  43. /package/dist/safe-bash/chunks/{chunk-4CEZRUSZ.js.map → chunk-AOT4SUBQ.js.map} +0 -0
  44. /package/dist/safe-bash/chunks/{chunk-UKO4AP3K.js.map → chunk-L4HKTYVE.js.map} +0 -0
  45. /package/dist/safe-bash/chunks/{chunk-LEZHTGWK.js.map → chunk-M7GLXFPU.js.map} +0 -0
  46. /package/dist/safe-bash/chunks/{chunk-VZJ3RTVV.js.map → chunk-NF3OGIG4.js.map} +0 -0
  47. /package/dist/safe-bash/chunks/{chunk-KR2R6MLR.js.map → chunk-RNWDFNH4.js.map} +0 -0
  48. /package/dist/safe-bash/chunks/{chunk-RGSI3B5P.js.map → chunk-RYXT5BJJ.js.map} +0 -0
  49. /package/dist/safe-bash/chunks/{chunk-T7T3UICV.js.map → chunk-UZUKVBCC.js.map} +0 -0
  50. /package/dist/safe-bash/chunks/{chunk-TZ53QA73.js.map → chunk-WSX5CLK2.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/commands/yq/index.ts", "../../src/commands/structured/query-core.ts", "../../src/commands/structured/interpreter.ts", "../../src/commands/structured/input.ts", "../../src/commands/structured/split.ts", "../../src/commands/structured/values.ts", "../../src/commands/structured/parser.ts", "../../src/commands/yq/accounting.ts", "../../src/commands/yq/errors.ts", "../../src/commands/yq/encoder.ts", "../../src/commands/yq/parser.ts", "../../src/commands/yq/toml.ts"],
4
- "sourcesContent": ["import { escapeText } from \"../../escaping.js\";\nimport { pathOf } from \"../internal.js\";\nimport {\n commandRuntimeIdentity,\n createOutputOperation,\n FsError,\n getCommandArguments,\n readBytes,\n type ByteSource,\n type CommandContext,\n type CommandDefinition,\n type FileSystemCapabilities,\n type InvocationCleanup,\n type OutputOperation,\n type VirtualShellPlugin,\n} from \"../../contracts/index.js\";\nimport { shellValueByteLength } from \"../../contracts/value.js\";\nimport { createYqQuerySession, YqValueFailure, type YqQuerySession } from \"../structured/query-core.js\";\nimport { interruptible, JqError, JqLimitError, wellFormed, type Json } from \"../structured/limits.js\";\nimport { YqLedger, yqCaps } from \"./accounting.js\";\nimport { encodeJson, encodeRaw, encodeYaml } from \"./encoder.js\";\nimport { fromJqLimit, YqError, type YqCode } from \"./errors.js\";\nimport { parseYamlDocuments } from \"./parser.js\";\nimport { parseTomlDocument } from \"./toml.js\";\n\nconst help = \"virtual-bash restricted YAML/TOML profile\\nusage: yq [eval|e] [OPTION ...] [--] [FILTER [FILE ...]]\\n yq [eval|e] --help\\n yq [eval|e] --version\\noptions:\\n -p, --input-format FORMAT FORMAT is yaml (default) or toml\\n --input-format=FORMAT same as above\\n -o, --output-format FORMAT FORMAT is yaml or json\\n --output-format=FORMAT same as above\\n -c, --compact-output compact JSON; requires -o json\\n -r, --unwrapScalar raw strings; requires -o json\\n -h, --help show this help (sole argument)\\n --version show profile identity (sole argument)\\n\";\nconst version = \"virtual-bash restricted YAML/TOML profile\\n\";\nconst diagnosticFallback = \"yq: limit: DIAGNOSTIC_TRUNCATED\\n\";\n\ninterface ParsedArguments {\n readonly inputFormat: \"yaml\" | \"toml\";\n readonly format: \"yaml\" | \"json\";\n readonly explicitJson: boolean;\n readonly compact: boolean;\n readonly raw: boolean;\n readonly filter: string;\n readonly files: readonly string[];\n}\n\ninterface InputFrame {\n readonly bytes: Uint8Array;\n readonly rawBytes: number;\n readonly lineOffset: number;\n}\n\ninterface FrameRange {\n readonly start: number;\n readonly end: number;\n readonly lineOffset: number;\n}\n\nclass RawDocumentFramer {\n readonly #ranges: FrameRange[] = [];\n #offset = 0;\n #frameStart = 0;\n #frameLine = 0;\n #lineStart = 0;\n #lineNumber = 0;\n #line = \"\";\n #pendingCr = false;\n #frameBytes = 0;\n #lineBytes = 0;\n #lineCouldBeMarker = true;\n #markerComment = false;\n #hasContent = false;\n\n admit(chunk: Uint8Array): void {\n for (const byte of chunk) {\n this.#offset++;\n this.#lineBytes++;\n if (this.#lineBytes > yqCaps.maxDocumentBytes) throw new YqError(\"limit\", \"LIMIT_MAX_DOCUMENT_BYTES\", 5);\n if (this.#pendingCr) {\n this.#pendingCr = false;\n if (byte === 0x0a) {\n this.#line += \"\\n\";\n this.#finishLine(this.#offset);\n continue;\n }\n this.#finishLine(this.#offset - 1);\n }\n if (!this.#markerComment && (this.#line.length <= 8 || /^(?:---|\\.\\.\\.)[ \\t]+#/u.test(this.#line))) {\n this.#line += String.fromCharCode(byte);\n }\n if (/^(?:---|\\.\\.\\.)[ \\t]+#/u.test(this.#line)) this.#markerComment = true;\n const candidate = this.#line.replace(/[\\r\\n]+$/u, \"\");\n this.#lineCouldBeMarker = /^(?:-{0,3}|\\.{0,3})$/u.test(candidate)\n || /^(?:---|\\.\\.\\.)(?:[ \\t]*|[ \\t]+#.*)$/u.test(candidate);\n if (!this.#lineCouldBeMarker && this.#lineBytes > yqCaps.maxDocumentBytes - this.#frameBytes) {\n throw new YqError(\"limit\", \"LIMIT_MAX_DOCUMENT_BYTES\", 5);\n }\n if (byte === 0x0d) this.#pendingCr = true;\n else if (byte === 0x0a) this.#finishLine(this.#offset);\n }\n }\n\n finish(bytes: Uint8Array): InputFrame[] {\n if (this.#line !== \"\") {\n this.#pendingCr = false;\n this.#finishLine(this.#offset);\n }\n if (this.#frameStart < this.#offset) this.#ranges.push({ start: this.#frameStart, end: this.#offset, lineOffset: this.#frameLine });\n return this.#ranges.map(range => ({\n bytes: bytes.subarray(range.start, range.end),\n rawBytes: range.end - range.start,\n lineOffset: range.lineOffset,\n }));\n }\n\n #finishLine(end: number): void {\n const line = this.#line.replace(/[\\r\\n]+$/u, \"\");\n const marker = /^---(?:[ \\t]+#.*)?$/u.test(line);\n const endMarker = /^\\.\\.\\.(?:[ \\t]+#.*)?$/u.test(line);\n if (marker && this.#hasContent && this.#lineStart > this.#frameStart) {\n this.#ranges.push({ start: this.#frameStart, end: this.#lineStart, lineOffset: this.#frameLine });\n this.#frameStart = this.#lineStart;\n this.#frameLine = this.#lineNumber;\n this.#frameBytes = this.#lineBytes;\n this.#hasContent = false;\n } else {\n if (this.#lineBytes > yqCaps.maxDocumentBytes - this.#frameBytes) throw new YqError(\"limit\", \"LIMIT_MAX_DOCUMENT_BYTES\", 5);\n this.#frameBytes += this.#lineBytes;\n }\n const visible = line.replace(/^\\ufeff/u, \"\").trimStart();\n if (visible !== \"\" && !visible.startsWith(\"#\") && !visible.startsWith(\"%\") && !marker && !endMarker) this.#hasContent = true;\n if (endMarker && this.#frameStart < end) {\n this.#ranges.push({ start: this.#frameStart, end, lineOffset: this.#frameLine });\n this.#frameStart = end;\n this.#frameLine = this.#lineNumber + 1;\n this.#frameBytes = 0;\n this.#hasContent = false;\n }\n this.#line = \"\";\n this.#lineBytes = 0;\n this.#lineCouldBeMarker = true;\n this.#markerComment = false;\n this.#lineStart = end;\n this.#lineNumber++;\n }\n}\n\nclass SinkFailure {\n constructor(readonly reason: unknown) {}\n}\n\nclass InvocationOwner {\n #accepting = true;\n #callbacks: InvocationCleanup[] = [];\n #closePromise: Promise<void> | undefined;\n\n assertOpen(signal: AbortSignal): void {\n if (signal.aborted) throw signal.reason;\n if (!this.#accepting) throw new Error(\"yq invocation is closed\");\n }\n\n register(cleanup: InvocationCleanup): void {\n if (!this.#accepting) throw new Error(\"yq invocation is closed\");\n if (typeof cleanup !== \"function\") throw new TypeError(\"cleanup must be callable\");\n this.#callbacks.push(cleanup);\n }\n\n close(): Promise<void> {\n if (this.#closePromise) return this.#closePromise;\n this.#accepting = false;\n this.#closePromise = (async (): Promise<void> => {\n const results = await Promise.allSettled(this.#callbacks.map(async cleanup => cleanup()));\n const failures = results.filter((result): result is PromiseRejectedResult => result.status === \"rejected\").map(result => result.reason);\n if (failures.length === 1) throw failures[0];\n if (failures.length > 1) throw new AggregateError(failures, \"yq invocation cleanup failed\");\n })();\n void this.#closePromise.catch(() => {});\n return this.#closePromise;\n }\n}\n\nfunction cli(code: YqCode): YqError {\n return new YqError(\"cli\", code, 2);\n}\n\nfunction preflightArguments(context: CommandContext): void {\n const args = context.args;\n if (args.length > yqCaps.maxArgvEntries) throw cli(\"CLI_ARGV_ENTRIES_LIMIT\");\n let bytes = 0;\n for (const argument of args) {\n if (!wellFormed(argument)) throw cli(\"CLI_INVALID_UNICODE\");\n const incoming = Buffer.byteLength(argument);\n if (incoming > yqCaps.maxArgvUtf8Bytes - bytes) throw cli(\"CLI_ARGV_BYTES_LIMIT\");\n bytes += incoming;\n }\n const carrier = getCommandArguments(context);\n bytes = 0;\n const decoder = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true });\n for (let index = 0; index < args.length; index++) {\n const incoming = shellValueByteLength(carrier.values[index]!);\n if (incoming > yqCaps.maxArgvUtf8Bytes - bytes) throw cli(\"CLI_ARGV_BYTES_LIMIT\");\n bytes += incoming;\n let decoded: string;\n try { decoded = decoder.decode(carrier.bytes(index)); }\n catch { throw cli(\"CLI_INVALID_UNICODE\"); }\n if (decoded !== args[index]) throw cli(\"CLI_INVALID_UNICODE\");\n }\n}\n\nfunction isInformationForm(args: readonly string[]): \"help\" | \"version\" | undefined {\n const offset = args[0] === \"eval\" || args[0] === \"e\" ? 1 : 0;\n if (args.length !== offset + 1) return undefined;\n const token = args[offset];\n if (token === \"-h\" || token === \"--help\") return \"help\";\n if (token === \"--version\") return \"version\";\n return undefined;\n}\n\nfunction parseArguments(args: readonly string[], inputFormat: \"yaml\" | \"toml\"): ParsedArguments {\n let index = args[0] === \"eval\" || args[0] === \"e\" ? 1 : 0;\n if (args[0] === \"eval-all\" || args[0] === \"ea\") throw cli(\"CLI_UNSUPPORTED_COMMAND\");\n let ended = false;\n let inputFormatSeen = false;\n let format: \"yaml\" | \"json\" = \"yaml\";\n let explicitJson = false;\n let formatSeen = false;\n let compact = false;\n let compactSeen = false;\n let raw = false;\n let rawSeen = false;\n const operands: string[] = [];\n const refused = /^(?:-s|-n|-p|-i|--slurp|--null-input|--input-format|--yaml-schema|--schema|--json-schema|--failsafe-schema|--inplace|--in-place|--allow-lossy-write|--write|--split-exp|--front-matter|--xml|--properties|--color-output)(?:=.*)?$/u;\n for (; index < args.length; index++) {\n const argument = args[index]!;\n if (!ended && argument === \"--\") {\n ended = true;\n continue;\n }\n if (!ended && (argument === \"-p\" || argument === \"--input-format\" || argument.startsWith(\"--input-format=\"))) {\n if (inputFormatSeen) throw cli(\"CLI_DUPLICATE_OPTION\");\n const value = argument.startsWith(\"--input-format=\") ? argument.slice(\"--input-format=\".length) : args[++index];\n if (value === undefined || value === \"\") throw cli(\"CLI_MISSING_OPTION_VALUE\");\n if (value !== \"yaml\" && value !== \"toml\") throw cli(\"CLI_INVALID_OPTION_VALUE\");\n inputFormatSeen = true;\n inputFormat = value;\n continue;\n }\n if (!ended && (argument === \"-o\" || argument === \"--output-format\")) {\n if (formatSeen) throw cli(\"CLI_DUPLICATE_OPTION\");\n const value = args[++index];\n if (value === undefined) throw cli(\"CLI_MISSING_OPTION_VALUE\");\n if (value !== \"yaml\" && value !== \"json\") throw cli(\"CLI_INVALID_OPTION_VALUE\");\n formatSeen = true;\n format = value;\n explicitJson = value === \"json\";\n continue;\n }\n if (!ended && argument.startsWith(\"--output-format=\")) {\n if (formatSeen) throw cli(\"CLI_DUPLICATE_OPTION\");\n const value = argument.slice(\"--output-format=\".length);\n if (value === \"\") throw cli(\"CLI_MISSING_OPTION_VALUE\");\n if (value !== \"yaml\" && value !== \"json\") throw cli(\"CLI_INVALID_OPTION_VALUE\");\n formatSeen = true;\n format = value;\n explicitJson = value === \"json\";\n continue;\n }\n if (!ended && (argument === \"-c\" || argument === \"--compact-output\")) {\n if (compactSeen) throw cli(\"CLI_DUPLICATE_OPTION\");\n compactSeen = true;\n compact = true;\n continue;\n }\n if (!ended && (argument === \"-r\" || argument === \"--unwrapScalar\")) {\n if (rawSeen) throw cli(\"CLI_DUPLICATE_OPTION\");\n rawSeen = true;\n raw = true;\n continue;\n }\n if (!ended && refused.test(argument)) throw cli(\"CLI_UNSUPPORTED_OPTION\");\n if (!ended && argument.startsWith(\"-\") && argument !== \"-\") throw cli(\"CLI_UNKNOWN_OPTION\");\n operands.push(argument);\n }\n if ((compact || raw) && !explicitJson) throw cli(\"CLI_INCOMPATIBLE_OPTIONS\");\n const filter = operands[0] ?? \".\";\n const files = operands.slice(1);\n let stdinSeen = false;\n for (const file of files) {\n if (file === \"-\") {\n if (stdinSeen) throw cli(\"CLI_DUPLICATE_STDIN\");\n stdinSeen = true;\n } else if (Buffer.byteLength(file) > yqCaps.maxVfsOperandPathBytes) throw cli(\"CLI_VFS_OPERAND_LIMIT\");\n }\n return { inputFormat, format, explicitJson, compact, raw, filter, files };\n}\n\nfunction displayedSource(source: string): string {\n if (source === \"<stdin>\") return source;\n const parts: string[] = ['\"'];\n let bytes = 2;\n let truncated = false;\n for (const character of source) {\n const encoded = escapeText(JSON.stringify(character).slice(1, -1), \"diagnostic\");\n const incoming = Buffer.byteLength(encoded);\n if (incoming > yqCaps.maxDisplayedFilenameBytes - bytes) {\n truncated = true;\n break;\n }\n parts.push(encoded);\n bytes += incoming;\n }\n if (truncated) {\n while (parts.length > 1 && Buffer.byteLength(parts.join(\"\")) + 4 > yqCaps.maxDisplayedFilenameBytes) parts.pop();\n parts.push(\"...\");\n }\n parts.push('\"');\n return parts.join(\"\");\n}\n\nfunction diagnostic(error: YqError): string {\n let location = \"\";\n if (error.source !== undefined) {\n location = ` at ${displayedSource(error.source)}`;\n if (error.line !== undefined && error.column !== undefined) location += `:${error.line}:${error.column}`;\n }\n return `yq: ${error.category}: ${error.code}${location}\\n`;\n}\n\nfunction classifyValueFailure(error: YqValueFailure): YqError {\n const category = error.code.startsWith(\"ENCODE_\") ? \"encode\" : \"schema\";\n return new YqError(category, error.code, 5);\n}\n\nfunction withSource(error: YqError, source: string): YqError {\n if (error.source !== undefined) return error;\n return new YqError(error.category, error.code, error.status, source, error.line, error.column);\n}\n\nasync function collectSource(\n context: CommandContext,\n owner: InvocationOwner,\n session: YqQuerySession,\n sourceName: string,\n source: ByteSource,\n vfs: boolean,\n inputFormat: \"yaml\" | \"toml\",\n): Promise<InputFrame[]> {\n let producer: AsyncIterator<Uint8Array> | undefined;\n let finished = false;\n let producerReturn: Promise<IteratorResult<Uint8Array>> | undefined;\n const closeProducer = (): Promise<IteratorResult<Uint8Array>> => {\n if (producerReturn) return producerReturn;\n if (!producer || finished || !producer.return) return Promise.resolve({ done: true, value: undefined });\n producerReturn = Promise.resolve().then(() => producer!.return!());\n return producerReturn;\n };\n owner.register(async () => { await closeProducer(); });\n let iterator: AsyncIterator<Uint8Array> | undefined;\n let returned: Promise<unknown> | undefined;\n owner.register(async () => {\n if (iterator?.return) {\n returned ??= Promise.resolve().then(() => iterator!.return!());\n await returned;\n }\n });\n iterator = readBytes({ [Symbol.asyncIterator]() {\n owner.assertOpen(context.signal);\n producer = source[Symbol.asyncIterator]();\n return {\n async next() {\n owner.assertOpen(context.signal);\n const next = await producer!.next();\n if (next.done) finished = true;\n return next;\n },\n return: closeProducer,\n };\n } }, context.signal)[Symbol.asyncIterator]();\n const chunks: Uint8Array[] = [];\n const framer = inputFormat === \"yaml\" ? new RawDocumentFramer() : undefined;\n let size = 0;\n while (true) {\n let next: IteratorResult<Uint8Array>;\n try {\n next = await iterator.next();\n } catch (failure) {\n if (context.signal.aborted) throw context.signal.reason;\n if (vfs && failure instanceof FsError) throw new YqError(\"vfs\", \"VFS_INPUT_READ\", 2, sourceName);\n throw failure;\n }\n owner.assertOpen(context.signal);\n if (next.done) break;\n const chunk = next.value;\n await session.ownedWork.charge(1);\n owner.assertOpen(context.signal);\n if (chunk.byteLength === 0) continue;\n session.ownedWork.admitInputBytes(chunk.byteLength);\n if (chunk.byteLength > yqCaps.maxInputBytes - size) throw fromJqLimit(new JqLimitError(\"maxInputBytes\"));\n if (inputFormat === \"toml\" && chunk.byteLength > yqCaps.maxDocumentBytes - size) throw new YqError(\"limit\", \"LIMIT_MAX_DOCUMENT_BYTES\", 5);\n framer?.admit(chunk);\n const owned = new Uint8Array(chunk);\n owner.assertOpen(context.signal);\n chunks.push(owned);\n size += owned.byteLength;\n }\n owner.assertOpen(context.signal);\n const bytes = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n owner.assertOpen(context.signal);\n return framer ? framer.finish(bytes) : [{ bytes, rawBytes: size, lineOffset: 0 }];\n}\n\nasync function sourceFrames(\n context: CommandContext,\n owner: InvocationOwner,\n session: YqQuerySession,\n sourceName: string,\n inputFormat: \"yaml\" | \"toml\",\n): Promise<InputFrame[]> {\n if (sourceName === \"-\") return collectSource(context, owner, session, \"<stdin>\", context.stdin, false, inputFormat);\n const path = pathOf(context, sourceName);\n await session.ownedWork.charge();\n owner.assertOpen(context.signal);\n let capabilities: FileSystemCapabilities;\n try {\n capabilities = context.fs.capabilitiesFor\n ? await interruptible(() => context.fs.capabilitiesFor!(path, { signal: context.signal }), context.signal)\n : context.fs.capabilities;\n } catch (failure) {\n if (context.signal.aborted) throw context.signal.reason;\n if (failure instanceof FsError) throw new YqError(\"vfs\", \"VFS_INPUT_OPEN\", 2, sourceName);\n throw failure;\n }\n owner.assertOpen(context.signal);\n if (context.fs.readStream && capabilities.streamingRead !== false) {\n let source: ByteSource;\n try { source = context.fs.readStream(path, { signal: context.signal }); }\n catch (failure) {\n if (context.signal.aborted) throw context.signal.reason;\n if (failure instanceof FsError) throw new YqError(\"vfs\", \"VFS_INPUT_OPEN\", 2, sourceName);\n throw failure;\n }\n return collectSource(context, owner, session, sourceName, source, true, inputFormat);\n }\n let bytes: Uint8Array;\n try {\n bytes = await context.fs.readFile(path, { signal: context.signal, maxBytes: inputFormat === \"toml\" ? yqCaps.maxDocumentBytes : yqCaps.maxInputBytes });\n } catch (failure) {\n if (context.signal.aborted) throw context.signal.reason;\n if (inputFormat === \"toml\" && failure instanceof FsError && failure.code === \"EFBIG\") throw new YqError(\"limit\", \"LIMIT_MAX_DOCUMENT_BYTES\", 5);\n if (failure instanceof FsError) throw new YqError(\"vfs\", \"VFS_INPUT_READ\", 2, sourceName);\n throw failure;\n }\n owner.assertOpen(context.signal);\n session.ownedWork.admitInputBytes(bytes.byteLength);\n if (inputFormat === \"toml\") {\n if (bytes.byteLength > yqCaps.maxDocumentBytes) throw new YqError(\"limit\", \"LIMIT_MAX_DOCUMENT_BYTES\", 5);\n return [{ bytes: new Uint8Array(bytes), rawBytes: bytes.byteLength, lineOffset: 0 }];\n }\n const framer = new RawDocumentFramer();\n framer.admit(bytes);\n const owned = new Uint8Array(bytes);\n owner.assertOpen(context.signal);\n return framer.finish(owned);\n}\n\nfunction decodeDocument(bytes: Uint8Array, inputFormat: \"yaml\" | \"toml\"): string {\n try { return new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: inputFormat === \"toml\" }).decode(bytes); }\n catch { throw new YqError(\"input\", \"INPUT_INVALID_UTF8\", 5); }\n}\n\nasync function writeOperation(\n operation: OutputOperation,\n bytes: Uint8Array,\n owner: InvocationOwner,\n callerSignal: AbortSignal,\n): Promise<void> {\n owner.assertOpen(callerSignal);\n try { await operation.output.write(bytes); }\n catch (failure) { throw new SinkFailure(failure); }\n owner.assertOpen(callerSignal);\n}\n\nasync function runCommand(context: CommandContext, owner: InvocationOwner, inputFormat: \"yaml\" | \"toml\"): Promise<{ exitCode: number }> {\n const ledger = new YqLedger();\n let session: YqQuerySession | undefined;\n let stdout: OutputOperation | undefined;\n let stderr: OutputOperation | undefined;\n const stdoutOperation = (): OutputOperation => {\n stdout ??= createOutputOperation({ signal: context.signal, registerCleanup: cleanup => owner.register(cleanup) }, context.stdout);\n return stdout;\n };\n const stderrOperation = (): OutputOperation => {\n stderr ??= createOutputOperation({ signal: context.signal, registerCleanup: cleanup => owner.register(cleanup) }, context.stderr);\n return stderr;\n };\n const emitDiagnostic = async (error: YqError): Promise<void> => {\n const preferred = Buffer.from(diagnostic(error));\n const fallback = Buffer.from(diagnosticFallback);\n const selected = ledger.canAdmitDiagnostic(preferred.byteLength) ? preferred : ledger.canAdmitDiagnostic(fallback.byteLength) ? fallback : undefined;\n if (!selected) return;\n ledger.admitDiagnostic(selected.byteLength);\n session?.ownedWork.admitOutputBytes(selected.byteLength);\n await writeOperation(stderrOperation(), selected, owner, context.signal);\n };\n try {\n preflightArguments(context);\n const info = isInformationForm(context.args);\n if (context.args.some(argument => argument === \"-h\" || argument === \"--help\" || argument === \"--version\") && info === undefined) {\n throw cli(\"CLI_INFO_COMBINATION\");\n }\n if (info) {\n const bytes = Buffer.from(info === \"help\" ? help : version);\n ledger.admitStdout(bytes.byteLength);\n await writeOperation(stdoutOperation(), bytes, owner, context.signal);\n return { exitCode: 0 };\n }\n const options = parseArguments(context.args, inputFormat);\n if (Buffer.byteLength(options.filter) > yqCaps.maxQuerySourceBytes) throw new YqError(\"limit\", \"LIMIT_MAX_QUERY_SOURCE_BYTES\", 5);\n owner.register(async () => session?.close());\n session = createYqQuerySession({ signal: context.signal });\n try { session.compileOnce(options.filter); }\n catch (failure) {\n if (failure instanceof JqLimitError) throw fromJqLimit(failure);\n if (failure instanceof JqError) throw new YqError(\"query\", \"QUERY_COMPILE_FAILED\", 3);\n throw failure;\n }\n const files = options.files.length > 0 ? options.files : [\"-\"];\n let emitted = 0;\n for (const file of files) {\n const sourceName = file === \"-\" ? \"<stdin>\" : file;\n let frames: InputFrame[];\n try { frames = await sourceFrames(context, owner, session, file, options.inputFormat); }\n catch (failure) { throw failure instanceof YqError ? withSource(failure, sourceName) : failure; }\n owner.assertOpen(context.signal);\n for (const frame of frames) {\n ledger.admitDocumentBytes(frame.rawBytes);\n let input: string;\n try { input = decodeDocument(frame.bytes, options.inputFormat); }\n catch (failure) { throw failure instanceof YqError ? withSource(failure, sourceName) : failure; }\n owner.assertOpen(context.signal);\n try {\n const documents = options.inputFormat === \"toml\"\n ? [await parseTomlDocument(input, session.ownedWork, ledger, frame.rawBytes)]\n : parseYamlDocuments(input, session.ownedWork, ledger, frame.rawBytes, frame.lineOffset);\n for await (const document of documents) {\n owner.assertOpen(context.signal);\n try { await session.ownedWork.measure(document); }\n catch (failure) {\n if (failure instanceof JqLimitError) throw fromJqLimit(failure);\n if (failure instanceof YqValueFailure) throw classifyValueFailure(failure);\n throw failure;\n }\n owner.assertOpen(context.signal);\n const iterator = session.run(document);\n try {\n while (true) {\n let next: IteratorResult<Json>;\n try { next = await iterator.next(); }\n catch (failure) {\n if (context.signal.aborted) throw context.signal.reason;\n if (failure instanceof JqLimitError) throw fromJqLimit(failure);\n if (failure instanceof JqError) throw new YqError(\"query\", \"QUERY_RUNTIME_FAILED\", 5, sourceName);\n throw failure;\n }\n owner.assertOpen(context.signal);\n if (next.done) break;\n try { await session.ownedWork.measure(next.value); }\n catch (failure) {\n if (failure instanceof JqLimitError) throw fromJqLimit(failure);\n if (failure instanceof YqValueFailure) throw classifyValueFailure(failure);\n throw failure;\n }\n owner.assertOpen(context.signal);\n session.ownedWork.admitResult();\n const separator = emitted === 0 || options.format === \"json\" ? \"\" : \"---\\n\";\n const suffixBytes = Buffer.byteLength(separator) + 1;\n const remaining = yqCaps.stdoutCapBytes - ledger.stdoutBytes;\n if (suffixBytes > remaining) throw new YqError(\"limit\", \"LIMIT_MAX_OUTPUT_BYTES\", 5, sourceName);\n let encoded: string;\n try {\n encoded = options.format === \"yaml\"\n ? await encodeYaml(next.value, session.ownedWork, remaining - suffixBytes)\n : options.raw && typeof next.value === \"string\"\n ? await encodeRaw(next.value, session.ownedWork, remaining - 1)\n : await encodeJson(next.value, session.ownedWork, !options.compact, remaining - 1);\n } catch (failure) {\n if (failure instanceof JqLimitError) throw fromJqLimit(failure);\n if (failure instanceof YqValueFailure) throw classifyValueFailure(failure);\n throw failure;\n }\n owner.assertOpen(context.signal);\n const encodedBytes = Buffer.byteLength(encoded);\n const outputBytes = encodedBytes + suffixBytes;\n ledger.admitStdout(outputBytes);\n session.ownedWork.admitOutputBytes(outputBytes);\n owner.assertOpen(context.signal);\n const output = Buffer.allocUnsafe(outputBytes);\n let offset = 0;\n if (separator !== \"\") offset += output.write(separator, offset, \"utf8\");\n offset += output.write(encoded, offset, \"utf8\");\n output[offset] = 0x0a;\n owner.assertOpen(context.signal);\n await writeOperation(stdoutOperation(), output, owner, context.signal);\n emitted++;\n }\n } finally {\n await iterator.return(undefined);\n owner.assertOpen(context.signal);\n }\n }\n } catch (failure) {\n throw failure instanceof YqError ? withSource(failure, sourceName) : failure;\n }\n }\n }\n return { exitCode: 0 };\n } catch (failure) {\n if (context.signal.aborted) throw context.signal.reason;\n if (failure instanceof SinkFailure) throw failure.reason;\n let normal: YqError | undefined;\n if (failure instanceof YqError) normal = failure;\n else if (failure instanceof JqLimitError) normal = fromJqLimit(failure);\n else if (failure instanceof YqValueFailure) normal = classifyValueFailure(failure);\n if (!normal) throw failure;\n await emitDiagnostic(normal);\n return { exitCode: normal.status };\n }\n}\n\nasync function execute(context: CommandContext, inputFormat: \"yaml\" | \"toml\"): Promise<{ exitCode: number }> {\n const owner = new InvocationOwner();\n context.registerCleanup?.(() => owner.close());\n let result: { exitCode: number } | undefined;\n let primary: unknown;\n let hasPrimary = false;\n try {\n result = await runCommand(context, owner, inputFormat);\n } catch (failure) {\n primary = failure;\n hasPrimary = true;\n }\n let cleanup: unknown;\n let hasCleanup = false;\n try { await owner.close(); }\n catch (failure) {\n cleanup = failure;\n hasCleanup = true;\n }\n if (context.signal.aborted) throw context.signal.reason;\n if (hasPrimary) throw primary;\n if (hasCleanup) throw cleanup;\n return result!;\n}\n\nexport interface YqCommandsOptions {\n readonly replace?: boolean;\n readonly inputFormat?: \"yaml\" | \"toml\";\n}\n\nfunction admittedOptions(options: YqCommandsOptions): { replace: boolean; inputFormat: \"yaml\" | \"toml\" } {\n if (typeof options !== \"object\" || options === null) throw new TypeError(\"options must be an object\");\n if (Object.keys(options).some(key => key !== \"replace\" && key !== \"inputFormat\")) throw new TypeError(\"unsupported yq option\");\n const { replace = false, inputFormat = \"yaml\" } = options;\n if (typeof replace !== \"boolean\") throw new TypeError(\"replace must be a boolean\");\n if (inputFormat !== \"yaml\" && inputFormat !== \"toml\") throw new TypeError(\"inputFormat must be yaml or toml\");\n return { replace, inputFormat };\n}\n\nexport function createYqCommand(options: YqCommandsOptions = {}): CommandDefinition {\n const { inputFormat } = admittedOptions(options);\n return Object.freeze({\n name: \"yq\",\n runtimeIdentity: commandRuntimeIdentity,\n description: \"Bounded restricted YAML/TOML query and formatter\",\n execute: (context: CommandContext) => execute(context, inputFormat),\n });\n}\n\nexport function createYqCommands(options: YqCommandsOptions = {}): readonly CommandDefinition[] {\n return Object.freeze([createYqCommand(options)]);\n}\n\nexport function yqCommands(options: YqCommandsOptions = {}): VirtualShellPlugin {\n const captured = admittedOptions(options);\n const { replace } = captured;\n const definitions = createYqCommands(captured);\n const plugin: VirtualShellPlugin = {\n name: \"yq-commands\",\n setup(host) {\n if (!replace) for (const definition of definitions) {\n if (host.commands.has(definition.name)) throw new Error(`Command already registered: ${definition.name}`);\n }\n for (const definition of definitions) host.commands.register(definition, { replace: replace ?? false });\n },\n };\n return Object.freeze(plugin);\n}\n", "import { yieldTurn } from \"../../contracts/yield.js\";\nimport { Interpreter } from \"./interpreter.js\";\nimport {\n Budget,\n JqLimitError,\n objectKeys,\n wellFormed,\n type JqLimits,\n type Json,\n} from \"./limits.js\";\nimport { Decimal, isNumber, numberText } from \"./numbers.js\";\nimport { parse, type Ast } from \"./parser.js\";\n\nconst checkpointWidth = 1023;\n\nconst yqQueryLimits: Readonly<JqLimits> = Object.freeze({\n maxInputBytes: 16_000_000,\n maxValueBytes: 8_388_608,\n maxOutputBytes: 16_777_216,\n maxSourceBytes: 8_192,\n maxDepth: 128,\n maxAstDepth: 64,\n maxSteps: 1_000_000,\n maxResults: 100_000,\n maxCollectionSize: 100_000,\n});\n\nexport type YqValueFailureCode =\n | \"ENCODE_UNSUPPORTED_VALUE\"\n | \"ENCODE_INVALID_UNICODE\"\n | \"ENCODE_CYCLIC_GRAPH\"\n | \"SCHEMA_NONFINITE_NUMBER\"\n | \"SCHEMA_UNSAFE_INTEGER\";\n\nexport class YqValueFailure extends Error {\n constructor(readonly code: YqValueFailureCode) {\n super(code);\n }\n}\n\nexport interface YqPrepaidWork {\n beforeUnit(): Promise<void>;\n finish(): void;\n abandon(): void;\n}\n\nexport interface YqOwnedWork {\n charge(units?: number): Promise<void>;\n admitInputBytes(bytes: number): void;\n admitOutputBytes(bytes: number): void;\n admitResult(): void;\n measure(value: Json): Promise<number>;\n stringifyJson(value: Json, options: {\n readonly pretty: boolean;\n readonly maxBytes: number;\n readonly limitName: \"maxValueBytes\" | \"maxOutputBytes\";\n }): Promise<string>;\n reserve(ordinaryUnits: number): YqPrepaidWork;\n assertOpen(): void;\n}\n\nexport interface YqQuerySession {\n readonly ownedWork: YqOwnedWork;\n compileOnce(source: string): void;\n run(input: Json): AsyncGenerator<Json, void, undefined>;\n close(): Promise<void>;\n}\n\nfunction assertNonnegativeSafe(value: number, name: string): void {\n if (!Number.isSafeInteger(value) || value < 0) throw new RangeError(`${name} must be a nonnegative safe integer`);\n}\n\nfunction checkedAdd(current: number, incoming: number, limitName: keyof JqLimits, limit: number): number {\n assertNonnegativeSafe(incoming, \"count\");\n if (incoming > limit - current) throw new JqLimitError(limitName);\n return current + incoming;\n}\n\nfunction throwSignal(signal: AbortSignal): void {\n if (signal.aborted) throw signal.reason;\n}\n\nfunction scalarBytes(value: null | boolean | number | Decimal): number {\n return Buffer.byteLength(isNumber(value) ? numberText(value) : JSON.stringify(value));\n}\n\nfunction validateNumber(value: number | Decimal): void {\n const numeric = value instanceof Decimal ? value.double : value;\n if (!Number.isFinite(numeric)) throw new YqValueFailure(\"SCHEMA_NONFINITE_NUMBER\");\n if (Number.isInteger(numeric) && !Number.isSafeInteger(numeric)) {\n throw new YqValueFailure(\"SCHEMA_UNSAFE_INTEGER\");\n }\n}\n\nfunction jsonEscape(codePoint: number): string {\n if (codePoint === 0x22) return \"\\\\\\\"\";\n if (codePoint === 0x5c) return \"\\\\\\\\\";\n if (codePoint === 0x08) return \"\\\\b\";\n if (codePoint === 0x0c) return \"\\\\f\";\n if (codePoint === 0x0a) return \"\\\\n\";\n if (codePoint === 0x0d) return \"\\\\r\";\n if (codePoint === 0x09) return \"\\\\t\";\n if (codePoint < 0x20) return `\\\\u${codePoint.toString(16).padStart(4, \"0\")}`;\n return String.fromCodePoint(codePoint);\n}\n\nfunction jsonEscapedBytes(codePoint: number): number {\n if (codePoint < 0x20 && ![0x08, 0x09, 0x0a, 0x0c, 0x0d].includes(codePoint)) return 6;\n if (codePoint === 0x22 || codePoint === 0x5c || codePoint === 0x08 || codePoint === 0x09\n || codePoint === 0x0a || codePoint === 0x0c || codePoint === 0x0d) return 2;\n return codePoint <= 0x7f ? 1 : codePoint <= 0x7ff ? 2 : codePoint <= 0xffff ? 3 : 4;\n}\n\ninterface OwnedState {\n pending: number;\n activeReservation: boolean;\n accepting: boolean;\n terminal: boolean;\n}\n\nclass OwnedWork implements YqOwnedWork {\n readonly #budget: Budget;\n readonly #signal: AbortSignal;\n readonly #state: OwnedState = { pending: 0, activeReservation: false, accepting: true, terminal: false };\n readonly #active = new Set<Promise<unknown>>();\n #activeAbandon: (() => void) | undefined;\n\n constructor(budget: Budget, signal: AbortSignal) {\n this.#budget = budget;\n this.#signal = signal;\n }\n\n assertOpen(): void {\n throwSignal(this.#signal);\n if (!this.#state.accepting || this.#state.terminal) throw new Error(\"yq query session is closed\");\n }\n\n async charge(units = 1): Promise<void> {\n return this.#track(this.#charge(units));\n }\n\n async #charge(units = 1): Promise<void> {\n if (!Number.isSafeInteger(units) || units <= 0) throw new RangeError(\"units must be a positive safe integer\");\n this.assertOpen();\n if (this.#state.activeReservation) throw new Error(\"owned work cannot interleave with a prepaid reservation\");\n let remaining = units;\n while (remaining > 0) {\n this.assertOpen();\n if (this.#state.pending === checkpointWidth) {\n try {\n await this.#budget.tick();\n } catch (failure) {\n throwSignal(this.#signal);\n throw failure;\n }\n this.assertOpen();\n this.#state.pending = 0;\n }\n const admitted = Math.min(remaining, checkpointWidth - this.#state.pending);\n this.#budget.step(admitted);\n this.#state.pending += admitted;\n remaining -= admitted;\n }\n }\n\n admitInputBytes(bytes: number): void {\n this.assertOpen();\n this.#budget.inputBytes = checkedAdd(this.#budget.inputBytes, bytes, \"maxInputBytes\", this.#budget.limits.maxInputBytes);\n }\n\n admitOutputBytes(bytes: number): void {\n this.assertOpen();\n this.#budget.outputBytes = checkedAdd(this.#budget.outputBytes, bytes, \"maxOutputBytes\", this.#budget.limits.maxOutputBytes);\n }\n\n admitResult(): void {\n this.assertOpen();\n this.#budget.results = checkedAdd(this.#budget.results, 1, \"maxResults\", this.#budget.limits.maxResults);\n }\n\n measure(value: Json): Promise<number> {\n return this.#track(this.#measure(value));\n }\n\n async #measure(value: Json): Promise<number> {\n this.assertOpen();\n let bytes = 0;\n const ancestors = new Set<object>();\n type Visit = { readonly kind: \"value\"; readonly value: unknown; readonly depth: number } | { readonly kind: \"leave\"; readonly value: object };\n const stack: Visit[] = [{ kind: \"value\", value, depth: 0 }];\n while (stack.length > 0) {\n const item = stack.pop()!;\n if (item.kind === \"leave\") {\n ancestors.delete(item.value);\n continue;\n }\n await this.charge(1);\n this.assertOpen();\n if (item.depth > this.#budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n const current = item.value;\n if (current === null || typeof current === \"boolean\") {\n bytes = this.#addMeasured(bytes, scalarBytes(current));\n } else if (typeof current === \"number\" || current instanceof Decimal) {\n validateNumber(current);\n const text = numberText(current);\n await this.#visitText(text, false);\n this.assertOpen();\n bytes = this.#addMeasured(bytes, Buffer.byteLength(text));\n } else if (typeof current === \"string\") {\n if (!wellFormed(current)) throw new YqValueFailure(\"ENCODE_INVALID_UNICODE\");\n const escaped = await this.#visitText(current, true);\n this.assertOpen();\n bytes = this.#addMeasured(bytes, escaped + 2);\n } else if (typeof current === \"object\") {\n const objectValue = current as object;\n if (ancestors.has(objectValue)) throw new YqValueFailure(\"ENCODE_CYCLIC_GRAPH\");\n const prototype = Object.getPrototypeOf(objectValue);\n const array = Array.isArray(current);\n if (!array && prototype !== null && prototype !== Object.prototype) {\n throw new YqValueFailure(\"ENCODE_UNSUPPORTED_VALUE\");\n }\n if (item.depth + 1 > this.#budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n const keys = array ? Object.keys(current) : objectKeys(current as Record<string, Json>);\n this.#budget.collection(keys.length);\n bytes = this.#addMeasured(bytes, 2 + Math.max(0, keys.length - 1));\n ancestors.add(objectValue);\n stack.push({ kind: \"leave\", value: objectValue });\n for (let index = keys.length - 1; index >= 0; index--) {\n const key = keys[index]!;\n if (!array) {\n if (!wellFormed(key)) throw new YqValueFailure(\"ENCODE_INVALID_UNICODE\");\n const escaped = await this.#visitText(key, true);\n this.assertOpen();\n bytes = this.#addMeasured(bytes, escaped + 3);\n }\n stack.push({ kind: \"value\", value: (current as Record<string, unknown>)[key], depth: item.depth + 1 });\n }\n } else {\n throw new YqValueFailure(\"ENCODE_UNSUPPORTED_VALUE\");\n }\n }\n this.assertOpen();\n return bytes;\n }\n\n stringifyJson(value: Json, options: { readonly pretty: boolean; readonly maxBytes: number; readonly limitName: \"maxValueBytes\" | \"maxOutputBytes\" }): Promise<string> {\n return this.#track(this.#stringifyJson(value, options));\n }\n\n async #stringifyJson(value: Json, options: { readonly pretty: boolean; readonly maxBytes: number; readonly limitName: \"maxValueBytes\" | \"maxOutputBytes\" }): Promise<string> {\n assertNonnegativeSafe(options.maxBytes, \"maxBytes\");\n const fragments: string[] = [];\n let bytes = 0;\n const append = async (fragment: string): Promise<void> => {\n const fragmentBytes = Buffer.byteLength(fragment);\n if (fragmentBytes > options.maxBytes - bytes) throw new JqLimitError(options.limitName);\n if (fragmentBytes > 0) await this.charge(Math.ceil(fragmentBytes / 1024));\n this.assertOpen();\n fragments.push(fragment);\n bytes += fragmentBytes;\n };\n const reserveFragment = (projectedBytes: number): void => {\n if (!Number.isSafeInteger(projectedBytes) || projectedBytes < 0 || projectedBytes > options.maxBytes - bytes) {\n throw new JqLimitError(options.limitName);\n }\n bytes += projectedBytes;\n };\n const appendReserved = async (fragment: string, projectedBytes: number): Promise<void> => {\n if (Buffer.byteLength(fragment) !== projectedBytes) throw new Error(\"escaped fragment projection mismatch\");\n if (projectedBytes > 0) await this.charge(Math.ceil(projectedBytes / 1024));\n this.assertOpen();\n fragments.push(fragment);\n };\n const appendIndent = async (depth: number): Promise<void> => {\n const indentBytes = depth * 2;\n if (!Number.isSafeInteger(indentBytes) || indentBytes > options.maxBytes - bytes) throw new JqLimitError(options.limitName);\n await append(\" \".repeat(depth));\n };\n const appendString = async (text: string): Promise<void> => {\n if (!wellFormed(text)) throw new YqValueFailure(\"ENCODE_INVALID_UNICODE\");\n await append('\"');\n for (let start = 0; start < text.length;) {\n let end = start;\n let codePoints = 0;\n let projectedBytes = 0;\n while (end < text.length && codePoints < 256) {\n const codePoint = text.codePointAt(end)!;\n projectedBytes += jsonEscapedBytes(codePoint);\n end += codePoint > 0xffff ? 2 : 1;\n codePoints++;\n }\n reserveFragment(projectedBytes);\n let fragment = \"\";\n for (let index = start; index < end;) {\n const codePoint = text.codePointAt(index)!;\n fragment += jsonEscape(codePoint);\n index += codePoint > 0xffff ? 2 : 1;\n }\n await this.charge(codePoints);\n this.assertOpen();\n await appendReserved(fragment, projectedBytes);\n this.assertOpen();\n start = end;\n }\n this.assertOpen();\n await append('\"');\n };\n const ancestors = new Set<object>();\n const encode = async (current: unknown, depth: number): Promise<void> => {\n await this.charge(1);\n this.assertOpen();\n if (depth > this.#budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n if (current === null || typeof current === \"boolean\") {\n await append(JSON.stringify(current));\n } else if (typeof current === \"number\" || current instanceof Decimal) {\n validateNumber(current);\n await append(numberText(current));\n } else if (typeof current === \"string\") {\n await appendString(current);\n } else if (typeof current === \"object\") {\n const objectValue = current as object;\n if (ancestors.has(objectValue)) throw new YqValueFailure(\"ENCODE_CYCLIC_GRAPH\");\n const array = Array.isArray(current);\n const prototype = Object.getPrototypeOf(objectValue);\n if (!array && prototype !== null && prototype !== Object.prototype) throw new YqValueFailure(\"ENCODE_UNSUPPORTED_VALUE\");\n if (depth + 1 > this.#budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n const keys = array ? Object.keys(current) : objectKeys(current as Record<string, Json>);\n this.#budget.collection(keys.length);\n ancestors.add(objectValue);\n try {\n await append(array ? \"[\" : \"{\");\n if (options.pretty && keys.length > 0) await append(\"\\n\");\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index]!;\n if (index > 0) await append(options.pretty ? \",\\n\" : \",\");\n if (options.pretty) await appendIndent(depth + 1);\n if (!array) {\n if (!wellFormed(key)) throw new YqValueFailure(\"ENCODE_INVALID_UNICODE\");\n await appendString(key);\n await append(options.pretty ? \": \" : \":\");\n }\n await encode((current as Record<string, unknown>)[key], depth + 1);\n }\n if (options.pretty && keys.length > 0) {\n await append(\"\\n\");\n await appendIndent(depth);\n }\n await append(array ? \"]\" : \"}\");\n } finally {\n ancestors.delete(objectValue);\n }\n } else {\n throw new YqValueFailure(\"ENCODE_UNSUPPORTED_VALUE\");\n }\n };\n await encode(value, 0);\n this.assertOpen();\n if (bytes > options.maxBytes) throw new JqLimitError(options.limitName);\n return fragments.join(\"\");\n }\n\n reserve(ordinaryUnits: number): YqPrepaidWork {\n assertNonnegativeSafe(ordinaryUnits, \"ordinaryUnits\");\n this.assertOpen();\n if (this.#state.activeReservation) throw new Error(\"nested owned reservation\");\n const startPending = this.#state.pending;\n let checkpoints = 0;\n let targetPending = startPending;\n if (ordinaryUnits > 0) {\n if (ordinaryUnits > Number.MAX_SAFE_INTEGER - startPending) throw new RangeError(\"owned reservation overflow\");\n const sum = startPending + ordinaryUnits;\n checkpoints = Math.floor((sum - 1) / checkpointWidth);\n targetPending = sum - checkpoints * checkpointWidth;\n }\n if (checkpoints > Number.MAX_SAFE_INTEGER - ordinaryUnits) throw new RangeError(\"owned reservation overflow\");\n const total = ordinaryUnits + checkpoints;\n this.#budget.step(total);\n this.assertOpen();\n this.#state.activeReservation = true;\n let ordinaryRemaining = ordinaryUnits;\n let checkpointRemaining = checkpoints;\n let executionPending = startPending;\n let active = true;\n let releaseReservation!: () => void;\n const reservationLifetime = new Promise<void>(resolve => { releaseReservation = resolve; });\n this.#active.add(reservationLifetime);\n void reservationLifetime.finally(() => this.#active.delete(reservationLifetime));\n const fail = (): never => {\n active = false;\n this.#state.activeReservation = false;\n this.#state.terminal = true;\n this.#activeAbandon = undefined;\n releaseReservation();\n throw new Error(\"invalid prepaid owned-work schedule\");\n };\n const abandon = (): void => {\n if (!active) return;\n active = false;\n this.#state.activeReservation = false;\n this.#state.terminal = true;\n this.#activeAbandon = undefined;\n releaseReservation();\n };\n this.#activeAbandon = abandon;\n const beforeUnit = async (): Promise<void> => {\n if (!active || ordinaryRemaining === 0) fail();\n this.assertOpen();\n if (executionPending === checkpointWidth) {\n if (checkpointRemaining === 0) fail();\n checkpointRemaining--;\n throwSignal(this.#signal);\n try {\n await yieldTurn(this.#signal);\n } catch (failure) {\n if (this.#signal.aborted) throw this.#signal.reason;\n throw failure;\n }\n this.assertOpen();\n executionPending = 0;\n } else {\n await Promise.resolve();\n this.assertOpen();\n }\n ordinaryRemaining--;\n executionPending++;\n };\n return Object.freeze({\n beforeUnit: (): Promise<void> => this.#track(beforeUnit()),\n finish: (): void => {\n if (!active || ordinaryRemaining !== 0 || checkpointRemaining !== 0 || executionPending !== targetPending) fail();\n this.assertOpen();\n active = false;\n this.#state.pending = targetPending;\n this.#state.activeReservation = false;\n this.#activeAbandon = undefined;\n releaseReservation();\n },\n abandon,\n });\n }\n\n async close(): Promise<void> {\n this.#state.accepting = false;\n this.#activeAbandon?.();\n await Promise.allSettled([...this.#active]);\n }\n\n #addMeasured(current: number, incoming: number): number {\n if (incoming > this.#budget.limits.maxValueBytes - current) throw new JqLimitError(\"maxValueBytes\");\n return current + incoming;\n }\n\n async #visitText(text: string, escaped: boolean): Promise<number> {\n if (!wellFormed(text)) throw new YqValueFailure(\"ENCODE_INVALID_UNICODE\");\n let encodedBytes = 0;\n let payloadBytes = 0;\n let codePoints = 0;\n for (const character of text) {\n const fragment = escaped ? jsonEscape(character.codePointAt(0)!) : character;\n const bytes = Buffer.byteLength(fragment);\n if (bytes > this.#budget.limits.maxValueBytes - encodedBytes) throw new JqLimitError(\"maxValueBytes\");\n encodedBytes += bytes;\n payloadBytes += Buffer.byteLength(character);\n codePoints++;\n if (codePoints === 256) {\n await this.charge(codePoints);\n this.assertOpen();\n codePoints = 0;\n }\n }\n if (codePoints > 0) {\n await this.charge(codePoints);\n this.assertOpen();\n }\n if (payloadBytes > 0) {\n await this.charge(Math.ceil(payloadBytes / 1024));\n this.assertOpen();\n }\n return encodedBytes;\n }\n\n #track<Result>(promise: Promise<Result>): Promise<Result> {\n this.#active.add(promise);\n void promise.finally(() => this.#active.delete(promise)).catch(() => {});\n return promise;\n }\n}\n\nclass QuerySession implements YqQuerySession {\n readonly ownedWork: OwnedWork;\n readonly #signal: AbortSignal;\n readonly #variables: ReadonlyMap<string, Json> = new Map();\n readonly #budget: Budget;\n readonly #interpreter: Interpreter;\n #ast: Ast | undefined;\n #compileAttempted = false;\n #accepting = true;\n #active: AsyncGenerator<Json> | undefined;\n #activeReturn: Promise<unknown> | undefined;\n #closePromise: Promise<void> | undefined;\n\n constructor(signal: AbortSignal) {\n if (!(signal instanceof AbortSignal)) throw new TypeError(\"signal must be an AbortSignal\");\n this.#signal = signal;\n this.#budget = new Budget(yqQueryLimits, signal);\n this.#interpreter = new Interpreter(this.#budget, this.#variables);\n this.ownedWork = new OwnedWork(this.#budget, signal);\n }\n\n compileOnce(source: string): void {\n this.#assertAdmission();\n if (this.#compileAttempted) throw new Error(\"yq query compilation was already attempted\");\n this.#compileAttempted = true;\n this.#ast = parse(source, this.#variables, this.#budget);\n }\n\n run(input: Json): AsyncGenerator<Json, void, undefined> {\n const session = this;\n return (async function* (): AsyncGenerator<Json, void, undefined> {\n session.#assertAdmission();\n if (!session.#ast) throw new Error(\"yq query was not compiled successfully\");\n if (session.#active) throw new Error(\"overlapping yq query runs are not allowed\");\n const iterator = session.#interpreter.run(session.#ast, input);\n session.#active = iterator;\n session.#activeReturn = undefined;\n try {\n while (true) {\n let next: IteratorResult<Json>;\n try {\n next = await iterator.next();\n } catch (failure) {\n throwSignal(session.#signal);\n throw failure;\n }\n session.#assertAdmission();\n if (next.done) return;\n yield next.value;\n session.#assertAdmission();\n }\n } finally {\n try {\n await session.#returnActive(iterator);\n } finally {\n if (session.#active === iterator) session.#active = undefined;\n }\n }\n })();\n }\n\n close(): Promise<void> {\n if (this.#closePromise) return this.#closePromise;\n this.#accepting = false;\n this.#closePromise = (async (): Promise<void> => {\n const failures: unknown[] = [];\n const active = this.#active;\n if (active) {\n try { await this.#returnActive(active); }\n catch (failure) { failures.push(failure); }\n }\n try { await this.ownedWork.close(); }\n catch (failure) { failures.push(failure); }\n if (failures.length === 1) throw failures[0];\n if (failures.length > 1) throw new AggregateError(failures, \"yq query session cleanup failed\");\n })();\n void this.#closePromise.catch(() => {});\n return this.#closePromise;\n }\n\n #assertAdmission(): void {\n throwSignal(this.#signal);\n if (!this.#accepting) throw new Error(\"yq query session is closed\");\n }\n\n #returnActive(iterator: AsyncGenerator<Json>): Promise<unknown> {\n if (this.#active === iterator && this.#activeReturn) return this.#activeReturn;\n const returned = Promise.resolve().then(() => iterator.return(undefined));\n if (this.#active === iterator) this.#activeReturn = returned;\n void returned.catch(() => {});\n return returned;\n }\n}\n\nexport function createYqQuerySession(options: { readonly signal: AbortSignal }): YqQuerySession {\n if (typeof options !== \"object\" || options === null) throw new TypeError(\"options must be an object\");\n return new QuerySession(options.signal);\n}\n", "import { Budget, copyObject, isObject, JqError, JqLimitError, object, objectKeyIterator, objectKeys, put, remove as removeKey, truth, type Json } from \"./limits.js\";\nimport { isNumber, numberValue, type Numeric } from \"./numbers.js\";\nimport { JqParseError, measureValue, parseJson, stringify } from \"./input.js\";\nimport type { Ast } from \"./parser.js\";\nimport { splitString } from \"./split.js\";\nimport { binary, compare, contains, describe, entries, equal, indexValue, sliceValue, sortedKeys, stableSort, type } from \"./values.js\";\n\ntype Path = (string | number)[];\ninterface Frame { readonly name: string; readonly value: Json; readonly parent: Frame | undefined; readonly depth: number }\nconst deleted = Symbol(\"deleted\");\nexport class Interpreter {\n constructor(readonly budget: Budget, readonly variables: ReadonlyMap<string, Json>, private readonly frame?: Frame) {}\n async collect(ast: Ast, input: Json): Promise<Json[]> {\n const result: Json[] = [];\n let bytes = 2;\n for await (const value of this.run(ast, input)) {\n this.budget.collection(result.length + 1);\n bytes += this.budget.value(value) + (result.length ? 1 : 0);\n if (bytes > this.budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n result.push(value);\n }\n this.budget.value(result);\n return result;\n }\n async *run(ast: Ast, input: Json): AsyncGenerator<Json> {\n await this.budget.tick();\n switch (ast.kind) {\n case \"identity\": yield input; return;\n case \"literal\": yield ast.value; return;\n case \"variable\": {\n for (let frame = this.frame; frame; frame = frame.parent) {\n await this.budget.tick();\n if (frame.name === ast.name) { yield frame.value; return; }\n }\n yield this.variables.get(ast.name)!; return;\n }\n case \"descend\": yield* this.descend(input); return;\n case \"try\":\n try { yield* this.run(ast.body, input); }\n catch (error) {\n if (!(error instanceof JqError) || error instanceof JqLimitError || this.budget.signal.aborted) throw error;\n if (ast.handler) yield* this.run(ast.handler, error.message);\n }\n return;\n case \"reduce\":\n case \"foreach\": {\n const depth = (this.frame?.depth ?? 0) + 1;\n if (depth > this.budget.limits.maxAstDepth) throw new JqLimitError(\"maxAstDepth\");\n let sourceInput = input;\n for await (const initial of this.run(ast.init, input)) {\n let accumulator = initial;\n for await (const value of this.run(ast.source, sourceInput)) {\n await this.budget.tick();\n const scope = new Interpreter(this.budget, this.variables, { name: ast.name, value, parent: this.frame, depth });\n const previous = accumulator;\n accumulator = null;\n for await (const updated of scope.run(ast.update, previous)) {\n await this.budget.tick();\n accumulator = updated;\n if (ast.kind === \"foreach\") {\n if (ast.extract) yield* scope.run(ast.extract, updated);\n else yield updated;\n }\n }\n }\n if (ast.kind === \"reduce\") { sourceInput = null; yield accumulator; }\n }\n return;\n }\n case \"unary\":\n for await (const value of this.run(ast.operand, input)) {\n if (!isNumber(value)) throw new JqError(\"negation requires a number\");\n yield -numberValue(value);\n }\n return;\n case \"optional\":\n try { yield* this.run(ast.operand, input); }\n catch (error) { if (!(error instanceof JqError) || error instanceof JqLimitError || this.budget.signal.aborted) throw error; }\n return;\n case \"index\":\n for await (const index of this.run(ast.index, input)) for await (const base of this.run(ast.base, input)) yield indexValue(base, index);\n return;\n case \"slice\":\n for await (const start of ast.start ? this.run(ast.start, input) : [null])\n for await (const end of ast.end ? this.run(ast.end, input) : [null])\n for await (const base of this.run(ast.base, input)) { await this.budget.tick(); yield await sliceValue(base, start, end, this.budget); }\n return;\n case \"iterate\":\n for await (const base of this.run(ast.base, input)) for await (const [, value] of entries(base, this.budget)) { await this.budget.tick(); yield value; }\n return;\n case \"array\": yield ast.body ? await this.collect(ast.body, input) : []; return;\n case \"object\": {\n if (!ast.fields.length) { yield object(); return; }\n const stack = [this.field(ast.fields[0]!, object(), input)];\n try {\n while (stack.length) {\n const next = await stack[stack.length - 1]!.next();\n if (next.done) { stack.pop(); continue; }\n if (stack.length === ast.fields.length) yield next.value;\n else stack.push(this.field(ast.fields[stack.length]!, next.value, input));\n }\n } finally { for (const iterator of stack.reverse()) await iterator.return(undefined); }\n return;\n }\n case \"if\":\n for await (const condition of this.run(ast.condition, input)) yield* this.run(truth(condition) ? ast.yes : ast.no, input);\n return;\n case \"binary\": {\n const operator = ast.operator;\n if (operator === \"|\") { for await (const value of this.run(ast.left, input)) yield* this.run(ast.right, value); return; }\n if (operator === \",\") { yield* this.run(ast.left, input); yield* this.run(ast.right, input); return; }\n if (operator === \"//\") {\n let found = false;\n for await (const value of this.run(ast.left, input)) if (truth(value)) { found = true; yield value; }\n if (!found) yield* this.run(ast.right, input);\n return;\n }\n if ([\"=\", \"|=\", \"+=\", \"-=\", \"*=\", \"/=\", \"%=\", \"//=\"].includes(operator)) { yield* this.assign(ast.left, ast.right, operator, input); return; }\n if (operator === \"and\" || operator === \"or\") {\n for await (const left of this.run(ast.left, input)) {\n if (operator === \"and\" && !truth(left)) { yield false; continue; }\n if (operator === \"or\" && truth(left)) { yield true; continue; }\n for await (const right of this.run(ast.right, input)) yield truth(right);\n }\n return;\n }\n for await (const right of this.run(ast.right, input)) {\n for await (const left of this.run(ast.left, input)) {\n const result = await binary(operator, left, right, this.budget);\n this.budget.value(result); yield result;\n }\n }\n return;\n }\n case \"call\": yield* this.call(ast.name, ast.args, input); return;\n }\n }\n async *descend(input: Json, depth = 0): AsyncGenerator<Json> {\n await this.budget.tick();\n if (depth > this.budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n yield input;\n if (Array.isArray(input)) {\n if (depth + 1 > this.budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n this.budget.collection(input.length);\n for (const value of input) yield* this.descend(value, depth + 1);\n } else if (isObject(input)) {\n if (depth + 1 > this.budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n const keys = objectKeys(input);\n this.budget.collection(keys.length);\n for (const key of keys) yield* this.descend(input[key]!, depth + 1);\n }\n }\n async *field(field: { key: Ast; value: Ast }, previous: Record<string, Json>, input: Json): AsyncGenerator<Record<string, Json>> {\n for await (const key of this.run(field.key, input)) {\n if (typeof key !== \"string\") throw new JqError(\"object keys must be strings\");\n for await (const value of this.run(field.value, input)) {\n const item = copyObject(previous); put(item, key, value);\n this.budget.value(item); yield item;\n }\n }\n }\n async *paths(ast: Ast, input: Json): AsyncGenerator<Path> {\n await this.budget.tick();\n if (ast.kind === \"identity\") { yield []; return; }\n if (ast.kind === \"binary\" && ast.operator === \",\") { yield* this.paths(ast.left, input); yield* this.paths(ast.right, input); return; }\n if (ast.kind !== \"index\" && ast.kind !== \"iterate\") throw new JqError(\"unsupported assignment path\");\n if (ast.kind === \"index\") {\n for await (const key of this.run(ast.index, input)) for await (const path of this.paths(ast.base, input)) {\n let base = input;\n for (const component of path) base = indexValue(base, component);\n if (typeof key !== \"string\" && (!isNumber(key) || !Number.isFinite(numberValue(key)))) throw new JqError(\"assignment index must be a string or finite number\");\n indexValue(base, key);\n const integer = isNumber(key) ? Math.trunc(numberValue(key)) : key;\n yield [...path, typeof integer === \"number\" && integer < 0 && Array.isArray(base) ? base.length + integer : integer];\n }\n return;\n }\n for await (const path of this.paths(ast.base, input)) {\n let base = input;\n for (const component of path) base = indexValue(base, component);\n for await (const [key] of entries(base, this.budget)) { await this.budget.tick(); yield [...path, key]; }\n }\n }\n set(input: Json, path: Path, value: Json | typeof deleted, depth = 0): Json {\n this.budget.step();\n if (depth > this.budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n if (depth === path.length) return value === deleted ? null : value;\n const key = path[depth]!;\n if (value === deleted && (input === null\n || (typeof key === \"string\" && isObject(input) && !Object.hasOwn(input, key))\n || (typeof key === \"number\" && Array.isArray(input) && (key < 0 || key >= input.length)))) return input;\n const previous = indexValue(input, key);\n const remove = value === deleted && depth === path.length - 1;\n if (typeof key === \"string\") {\n if (input !== null && !isObject(input)) throw new JqError(\"object assignment requires object or null\");\n const result = copyObject(input);\n if (remove) removeKey(result, key);\n else put(result, key, this.set(previous, path, value, depth + 1));\n this.budget.collection(objectKeys(result).length); return result;\n }\n if (key < 0) throw new JqError(\"array index out of bounds\");\n if (input !== null && !Array.isArray(input)) throw new JqError(\"array assignment requires array or null\");\n const result = input === null ? [] : [...input];\n if (remove) { if (key < result.length) result.splice(key, 1); }\n else {\n this.budget.collection(Math.max(result.length, key + 1));\n while (result.length <= key) result.push(null);\n result[key] = this.set(previous, path, value, depth + 1);\n }\n return result;\n }\n async *assign(left: Ast, right: Ast, operator: string, input: Json): AsyncGenerator<Json> {\n if (operator !== \"|=\") {\n for await (const value of this.run(right, input)) {\n let result = input;\n for await (const path of this.paths(left, input)) {\n let previous = result;\n for (const key of path) previous = indexValue(previous, key);\n const assigned = operator === \"=\" ? value : operator === \"//=\" ? truth(previous) ? previous : value : await binary(operator.slice(0, -1), previous, value, this.budget);\n result = this.set(result, path, assigned); this.budget.value(result);\n }\n yield result;\n }\n return;\n }\n const paths: Path[] = [];\n for await (const path of this.paths(left, input)) { this.budget.collection(paths.length + 1); paths.push(path); }\n let result = input;\n const deletions: Path[] = [];\n for (const path of paths) {\n let previous = result;\n for (const key of path) previous = indexValue(previous, key);\n let value: Json | typeof deleted = deleted;\n for await (const output of this.run(right, previous)) { value = output; break; }\n if (value === deleted) deletions.push(path);\n else { result = this.set(result, path, value); this.budget.value(result); }\n }\n await stableSort(deletions, this.budget, async (first, second) => -await compare(first, second, this.budget));\n let lastDeletion: Path | undefined;\n for (const path of deletions) {\n if (!lastDeletion || await compare(lastDeletion, path, this.budget) !== 0) result = this.set(result, path, deleted);\n lastDeletion = path;\n }\n this.budget.value(result); yield result;\n }\n async *call(name: string, args: Ast[], input: Json): AsyncGenerator<Json> {\n const budget = this.budget;\n if (name === \"empty\") return;\n if (name === \"select\") { for await (const value of this.run(args[0]!, input)) if (truth(value)) yield input; return; }\n if (name === \"values\") { if (input !== null) yield input; return; }\n const filters: Readonly<Record<string, string>> = { strings: \"string\", numbers: \"number\", booleans: \"boolean\", arrays: \"array\", objects: \"object\", nulls: \"null\" };\n if (Object.hasOwn(filters, name)) { if (type(input) === filters[name]) yield input; return; }\n if (name === \"scalars\" || name === \"iterables\") {\n if ((isObject(input) || Array.isArray(input)) === (name === \"iterables\")) yield input; return;\n }\n if (name === \"type\") { yield type(input); return; }\n if (name === \"nan\" || name === \"infinite\") { yield name === \"nan\" ? NaN : Infinity; return; }\n if (name === \"isnan\" || name === \"isinfinite\" || name === \"isfinite\") {\n const value = isNumber(input) ? numberValue(input) : undefined;\n const infinite = value === Infinity || value === -Infinity;\n yield name === \"isnan\" ? value !== undefined && Number.isNaN(value) : name === \"isinfinite\" ? infinite : value !== undefined && !infinite;\n return;\n }\n if (name === \"not\") { yield !truth(input); return; }\n if (name === \"length\") {\n if (input === null) yield 0;\n else if (isNumber(input)) yield Math.abs(numberValue(input));\n else if (typeof input === \"string\") {\n await budget.tick(input.length);\n let length = 0;\n for (let offset = 0; offset < input.length; length++) {\n if (length % 32 === 0) await budget.tick(0);\n offset += input.codePointAt(offset)! > 0xffff ? 2 : 1;\n }\n yield length;\n }\n else if (Array.isArray(input)) yield input.length;\n else if (isObject(input)) {\n let length = 0;\n for (const key of objectKeyIterator(input)) { await budget.tick(); void key; length++; }\n yield length;\n }\n else throw new JqError(\"boolean has no length\");\n return;\n }\n if (name === \"keys\" || name === \"keys_unsorted\") {\n let result: Json[];\n if (Array.isArray(input)) {\n budget.collection(input.length);\n await budget.tick(input.length);\n result = [];\n let bytes = 2;\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n for (let index = 0; index < input.length; index++) {\n await budget.tick();\n bytes += String(index).length + (index ? 1 : 0);\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n result.push(index);\n }\n } else if (isObject(input)) {\n let bytes = 2;\n let count = 0;\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n for (const key of objectKeyIterator(input)) {\n await budget.tick();\n budget.collection(++count);\n const separator = count > 1 ? 1 : 0;\n bytes += separator + await measureValue(key, budget, 1, budget.limits.maxValueBytes - bytes - separator);\n }\n if (name === \"keys\") result = await sortedKeys(input, budget);\n else {\n result = [];\n for (const key of objectKeyIterator(input)) {\n await budget.tick();\n budget.collection(result.length + 1);\n result.push(key);\n }\n }\n } else throw new JqError(\"keys requires an object or array\");\n yield result; return;\n }\n if (name === \"map\" || name === \"map_values\") {\n const result: Json = name === \"map_values\" && isObject(input) ? object() : [];\n let bytes = 2;\n for await (const [key, value] of entries(input, budget)) for await (const mapped of this.run(args[0]!, value)) {\n bytes += budget.value(mapped) + 1 + (Array.isArray(result) ? 0 : Buffer.byteLength(JSON.stringify(String(key))) + 1);\n if (bytes - 1 > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (Array.isArray(result)) { budget.collection(result.length + 1); result.push(mapped); }\n else put(result, String(key), mapped);\n if (name === \"map_values\") break;\n }\n budget.value(result); yield result; return;\n }\n if (name === \"has\" || name === \"contains\") {\n for await (const argument of this.run(args[0]!, input)) {\n if (name === \"contains\") {\n if (type(input) !== type(argument)) throw new JqError(\"contains requires matching types\");\n yield contains(input, argument, budget);\n } else if (input === null) yield false;\n else if (isObject(input) && typeof argument === \"string\") yield Object.hasOwn(input, argument);\n else if (Array.isArray(input) && isNumber(argument)) yield Math.trunc(numberValue(argument)) >= 0 && Math.trunc(numberValue(argument)) < input.length;\n else throw new JqError(\"has requires object/string or array/number\");\n }\n return;\n }\n if (name === \"split\") {\n for await (const separator of this.run(args[0]!, input)) {\n yield await splitString(input, separator, budget);\n }\n return;\n }\n if (name === \"join\") {\n for await (const separator of this.run(args[0]!, input)) {\n const separatorBytes = budget.value(separator);\n let result = \"\";\n let bytes = 2;\n let first = true;\n const append = (text: string, encodedBytes: number): void => {\n bytes += encodedBytes - 2;\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n result += text;\n };\n for await (const [, item] of entries(input, budget)) {\n await budget.tick();\n if (!first && separator !== null) {\n if (typeof separator !== \"string\") await binary(\"+\", result, separator, budget);\n if (typeof separator !== \"string\") throw new JqError(\"join separator must be a string or null when used\");\n append(separator, separatorBytes);\n }\n first = false;\n if (isObject(item) || Array.isArray(item)) await binary(\"+\", result, item, budget);\n const text = item === null ? \"\" : typeof item === \"string\" ? item : await stringify(item, budget);\n append(text, budget.value(text));\n }\n budget.value(result); yield result;\n }\n return;\n }\n if (name === \"first\" || name === \"last\") {\n if (!args.length) {\n if (!Array.isArray(input) && input !== null) throw new JqError(`${name} requires an array`);\n yield input === null ? null : input[name === \"first\" ? 0 : input.length - 1] ?? null; return;\n }\n let last: Json | undefined;\n for await (const value of this.run(args[0]!, input)) { if (name === \"first\") { yield value; return; } last = value; }\n if (name === \"last\") yield last ?? null; return;\n }\n if (name === \"limit\") {\n for await (const argument of this.run(args[0]!, input)) {\n if (!isNumber(argument) || !Number.isSafeInteger(numberValue(argument)) || numberValue(argument) < 0) throw new JqError(\"limit requires a nonnegative integer\");\n const count = numberValue(argument);\n if (count === 0) continue;\n let emitted = 0;\n for await (const value of this.run(args[1]!, input)) { yield value; if (++emitted >= count) break; }\n }\n return;\n }\n if (name === \"range\") {\n for await (const start of args.length === 1 ? [0] : this.run(args[0]!, input))\n for await (const end of this.run(args[args.length === 1 ? 0 : 1]!, input))\n for await (const increment of args[2] ? this.run(args[2], input) : [1]) {\n if (!isNumber(start) || !isNumber(end) || !isNumber(increment)) throw new JqError(\"range requires numbers\");\n const step = numberValue(increment);\n const stop = numberValue(end);\n if (step === 0) continue;\n for (let value: Numeric = start; step > 0 ? numberValue(value) < stop : numberValue(value) > stop;) {\n await budget.tick(); yield value;\n const next = numberValue(value) + step;\n if (!Number.isFinite(next)) throw new JqError(\"nonfinite range increment\");\n if (next === numberValue(value)) throw new JqError(\"range increment makes no progress\"); value = next;\n }\n }\n return;\n }\n if (name === \"tostring\" || name === \"tojson\") {\n if (typeof input === \"string\" && name === \"tostring\") { await measureValue(input, budget); yield input; }\n else yield await stringify(input, budget, false, budget.limits.maxValueBytes, \"maxValueBytes\", true);\n return;\n }\n if (name === \"tonumber\" || name === \"fromjson\") {\n if (name === \"tonumber\" && isNumber(input)) { yield input; return; }\n if (typeof input !== \"string\") throw new JqError(name === \"fromjson\" ? `${describe(input, budget)} only strings can be parsed` : `${describe(input, budget)} cannot be parsed as a number`);\n let result: Json;\n try { result = parseJson(input, budget); }\n catch (error) {\n if (!(error instanceof JqParseError)) throw error;\n throw new JqError(`${error.diagnostic()} (while parsing '${input.split(\"\\0\", 1)[0]}')`);\n }\n if (name === \"tonumber\" && !isNumber(result)) throw new JqError(`${describe(input, budget)} cannot be parsed as a number`);\n yield result; return;\n }\n if (name === \"to_entries\") {\n if (Array.isArray(input)) await budget.tick(input.length);\n const result: Json[] = [];\n let bytes = 2;\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n for await (const [key, value] of entries(input, budget)) {\n budget.collection(result.length + 1);\n budget.collection(2);\n const overhead = 17 + (result.length ? 1 : 0);\n const keyBytes = await measureValue(key, budget, 2, budget.limits.maxValueBytes - bytes - overhead);\n const valueBytes = await measureValue(value, budget, 2, budget.limits.maxValueBytes - bytes - overhead - keyBytes);\n await budget.tick(4);\n bytes += overhead + keyBytes + valueBytes;\n const entry = object();\n put(entry, \"key\", key); put(entry, \"value\", value);\n result.push(entry);\n }\n yield result; return;\n }\n if (name === \"from_entries\" || name === \"with_entries\") {\n let values = input;\n if (name === \"with_entries\") {\n values = [];\n let bytes = 2;\n for await (const [key, value] of entries(input, budget)) for await (const mapped of this.run(args[0]!, copyObject({ key, value }))) {\n budget.collection(values.length + 1); bytes += budget.value(mapped) + (values.length ? 1 : 0);\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n values.push(mapped);\n }\n }\n const result = object();\n for await (const [, entry] of entries(values, budget)) {\n await budget.tick();\n if (!isObject(entry)) throw new JqError(`Cannot index ${type(entry)} with string \"key\"`);\n const key = [\"key\", \"Key\", \"name\", \"Name\"].find(candidate => Object.hasOwn(entry, candidate) && truth(entry[candidate]!));\n const value = [\"value\", \"Value\"].find(candidate => Object.hasOwn(entry, candidate));\n if (key === undefined || typeof entry[key] !== \"string\") throw new JqError(\"from_entries requires string keys\");\n put(result, entry[key] as string, value === undefined ? null : entry[value]!);\n }\n budget.value(result); yield result; return;\n }\n if (name === \"any\" || name === \"all\") {\n const generator: Ast = args.length === 2 ? args[0]! : { kind: \"iterate\", base: { kind: \"identity\" } };\n const condition: Ast = args[args.length === 2 ? 1 : 0] ?? { kind: \"identity\" };\n for await (const item of this.run(generator, input)) {\n for await (const value of this.run(condition, item)) {\n await budget.tick();\n if (truth(value) === (name === \"any\")) { yield name === \"any\"; return; }\n }\n }\n yield name === \"all\"; return;\n }\n if (!Array.isArray(input)) {\n if (name === \"unique\" && !isObject(input)) throw new JqError(`Cannot iterate over ${describe(input, budget)}`);\n if (name === \"sort\") throw new JqError(`${describe(input, budget)} cannot be sorted, as it is not an array`);\n throw new JqError(`${name} requires an array`);\n }\n if (name === \"reverse\") {\n await budget.tick(input.length);\n await measureValue(input, budget);\n const result: Json[] = [];\n for (let index = input.length - 1; index >= 0; index--) { await budget.tick(0); result.push(input[index]!); }\n yield result; return;\n }\n if (name === \"add\") {\n let result: Json = null;\n for (const item of input) { await budget.tick(); result = await binary(\"+\", result, item, budget); budget.value(result); }\n yield result; return;\n }\n const keyed: { key: Json; value: Json }[] = [];\n let keyBytes = 0;\n for (const value of input) {\n await budget.tick(); const key = args[0] ? await this.collect(args[0], value) : value;\n keyBytes += budget.value(key);\n if (keyBytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n keyed.push({ value, key });\n }\n await stableSort(keyed, budget, (left, right) => compare(left.key, right.key, budget));\n if (name === \"min\" || name === \"min_by\" || name === \"max\" || name === \"max_by\") { yield keyed[name.startsWith(\"min\") ? 0 : keyed.length - 1]?.value ?? null; return; }\n if (name === \"sort\" || name === \"sort_by\") { yield keyed.map(item => item.value); return; }\n if (name === \"unique\" || name === \"unique_by\") { yield keyed.filter((item, index) => index === 0 || !equal(item.key, keyed[index - 1]!.key, budget)).map(item => item.value); return; }\n if (name === \"group_by\") {\n const groups: Json[][] = [];\n let previous: Json | undefined;\n for (const item of keyed) {\n if (previous === undefined || !equal(previous, item.key, budget)) groups.push([]);\n groups[groups.length - 1]!.push(item.value); previous = item.key;\n }\n budget.value(groups); yield groups; return;\n }\n throw new JqError(`unsupported function ${name}`);\n }\n}\n", "import { readBytes, type ByteSource } from \"../../contracts/index.js\";\nimport { Budget, JqError, JqLimitError, object, objectKeyIterator, objectSize, put, scalarJson, type Json } from \"./limits.js\";\nimport { numericToken, isNumber } from \"./numbers.js\";\n\nexport class JqParseError extends JqError {\n constructor(readonly detail: string, readonly offset: number, readonly line = 1, readonly column = offset, readonly located = true) { super(detail); }\n diagnostic(): string { return this.located ? `${this.detail} at line ${this.line}, column ${this.column}` : this.detail; }\n}\nexport function decodeUtf8(bytes: string, budget: Budget): string {\n const points: string[] = [];\n budget.step(Math.ceil(bytes.length / 1024));\n let block = \"\";\n for (let offset = 0; offset < bytes.length;) {\n if (offset % 1024 === 0) { budget.signal.throwIfAborted(); points.push(block); block = \"\"; }\n const first = bytes.charCodeAt(offset);\n let length = first < 0x80 ? 1 : first >= 0xc2 && first <= 0xdf ? 2 : first >= 0xe0 && first <= 0xef ? 3 : first >= 0xf0 && first <= 0xf4 ? 4 : 1;\n let point = first < 0x80 ? first : -1;\n if (length > bytes.length - offset) length = bytes.length - offset;\n else if (length > 1) {\n point = first & (0x7f >> length);\n for (let index = 1; index < length; index++) {\n const next = bytes.charCodeAt(offset + index);\n if (next < 0x80 || next > 0xbf) { point = -1; length = index; break; }\n point = (point << 6) | (next & 0x3f);\n }\n if (point < [0, 0, 0x80, 0x800, 0x10000][length]! || point > 0x10ffff || (point >= 0xd800 && point <= 0xdfff)) point = -1;\n }\n block += String.fromCodePoint(point < 0 ? 0xfffd : point);\n offset += length;\n }\n return points.join(\"\") + block;\n}\nclass JsonParser {\n private readonly stack: (Json[] | Record<string, Json> | string)[] = [];\n private next: Json | undefined;\n private token = \"\";\n private quoted = false;\n private escaped = false;\n private bom = 0;\n private bytes = 0;\n private depth = 0;\n private offset = 0;\n private line = 1;\n private column = 0;\n constructor(private readonly budget: Budget) {}\n private fail(detail: string, located = true): never {\n throw new JqParseError(detail, this.offset, this.line, this.column, located);\n }\n private accept(value: Json): void {\n this.budget.step();\n if (this.next !== undefined) this.fail(\"Expected separator between values\");\n this.next = value;\n }\n private literal(eof = false): void {\n if (!this.token) return;\n const text = this.token;\n const pattern = text[0] === \"t\" ? \"true\" : text[0] === \"f\" ? \"false\" : text.startsWith(\"nu\") ? \"null\" : undefined;\n let value: Json | undefined;\n if (pattern) {\n if (text !== pattern) this.fail(\"Invalid literal\" + (eof ? \" at EOF\" : \"\"));\n value = pattern === \"true\" ? true : pattern === \"false\" ? false : null;\n } else {\n value = numericToken(text, this.budget);\n if (value === undefined) this.fail(\"Invalid numeric literal\" + (eof ? \" at EOF\" : \"\"));\n }\n this.accept(value);\n this.token = \"\";\n }\n private string(): string {\n let result = \"\";\n let start = 0;\n for (let index = 0; index < this.token.length; index++) {\n if (index % 1024 === 0) this.budget.step();\n const character = this.token[index]!;\n if (character === \"\\\\\") {\n result += decodeUtf8(this.token.slice(start, index), this.budget);\n const escaped = this.token[++index];\n if (escaped === \"u\") {\n const digits = this.token.slice(index + 1, index + 5);\n if (digits.length < 4) this.fail(\"Invalid \\\\uXXXX escape\");\n if (!/^[0-9a-f]{4}$/iu.test(digits)) this.fail(\"Invalid characters in \\\\uXXXX escape\");\n let point = parseInt(digits, 16);\n index += 4;\n if (point >= 0xd800 && point <= 0xdbff) {\n const tail = this.token.slice(index + 1, index + 7);\n const low = /^\\\\u[0-9a-f]{4}$/iu.test(tail) ? parseInt(tail.slice(2), 16) : 0;\n if (low < 0xdc00 || low > 0xdfff) this.fail(\"Invalid \\\\uXXXX\\\\uXXXX surrogate pair escape\");\n point = 0x10000 + ((point - 0xd800) << 10) + low - 0xdc00;\n index += 6;\n }\n result += String.fromCodePoint(point >= 0xdc00 && point <= 0xdfff ? 0xfffd : point);\n } else {\n const escapes: Record<string, string> = { '\"': '\"', \"\\\\\": \"\\\\\", \"/\": \"/\", b: \"\\b\", f: \"\\f\", n: \"\\n\", r: \"\\r\", t: \"\\t\" };\n if (escaped === undefined || !Object.hasOwn(escapes, escaped)) this.fail(\"Invalid escape\");\n result += escapes[escaped];\n }\n start = index + 1;\n } else if (character.charCodeAt(0) < 0x20) this.fail(\"Invalid string: control characters from U+0000 through U+001F must be escaped\");\n }\n result += decodeUtf8(this.token.slice(start), this.budget);\n this.budget.text(result);\n return result;\n }\n private done(): Json | undefined {\n if (this.stack.length || this.next === undefined) return undefined;\n const value = this.next;\n this.next = undefined;\n this.budget.value(value);\n this.bytes = 0;\n return value;\n }\n private append(): void {\n const parent = this.stack.at(-1);\n if (Array.isArray(parent)) {\n this.budget.collection(parent.length + 1);\n parent.push(this.next!);\n } else if (typeof parent === \"string\") {\n const container = this.stack.at(-2) as Record<string, Json>;\n if (!Object.hasOwn(container, parent)) this.budget.collection(objectSize(container) + 1);\n put(container, parent, this.next!);\n this.stack.pop();\n } else this.fail(\"Objects must consist of key:value pairs\");\n this.next = undefined;\n }\n private structure(character: string): void {\n const parent = this.stack.at(-1);\n if (character === \"[\" || character === \"{\") {\n if (this.next !== undefined) this.fail(\"Expected separator between values\");\n if (++this.depth > this.budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n this.stack.push(character === \"[\" ? [] : object());\n } else if (character === \":\") {\n if (this.next === undefined) this.fail(\"Expected string key before ':'\");\n if (!parent || Array.isArray(parent) || typeof parent === \"string\") this.fail(\"':' not as part of an object\");\n if (typeof this.next !== \"string\") this.fail(\"Object keys must be strings\");\n this.stack.push(this.next);\n this.next = undefined;\n } else if (character === \",\") {\n if (this.next === undefined) this.fail(\"Expected value before ','\");\n if (!this.stack.length) this.fail(\"',' not as part of an object or array\");\n this.append();\n } else if (character === \"]\") {\n if (!Array.isArray(parent)) this.fail(\"Unmatched ']'\");\n if (this.next !== undefined) this.append();\n else if (parent.length) this.fail(\"Expected another array element\");\n this.next = this.stack.pop() as Json;\n this.depth--;\n } else if (character === \"}\") {\n if (!this.stack.length) this.fail(\"Unmatched '}'\");\n if (this.next !== undefined) {\n if (typeof parent !== \"string\") this.fail(\"Objects must consist of key:value pairs\");\n this.append();\n } else {\n if (typeof parent === \"string\" || Array.isArray(parent)) this.fail(\"Unmatched '}'\");\n if (objectSize(parent!)) this.fail(\"Expected another key-value pair\");\n }\n this.next = this.stack.pop() as Json;\n this.depth--;\n }\n }\n feed(character: string): Json | undefined {\n this.offset++;\n if (this.bom < 3) {\n if (character.charCodeAt(0) === [0xef, 0xbb, 0xbf][this.bom]) { this.bom++; return undefined; }\n if (this.bom) this.fail(\"Malformed BOM\", false);\n this.bom = 3;\n }\n if (character === \"\\n\") { this.line++; this.column = 0; } else this.column++;\n const space = character === \" \" || character === \"\\t\" || character === \"\\r\" || character === \"\\n\";\n const structure = \"[]{}:,\".includes(character);\n const endsScalar = !this.quoted && !this.stack.length && this.token !== \"\" && (space || structure || character === '\"');\n if (!endsScalar && (this.bytes || !space)) {\n if (++this.bytes > this.budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n }\n if (this.quoted) {\n if (character === '\"' && !this.escaped) {\n this.accept(this.string());\n this.token = \"\";\n this.quoted = false;\n return this.done();\n }\n this.token += character;\n this.escaped = character === \"\\\\\" && !this.escaped;\n return undefined;\n }\n if (!space && !structure && character !== '\"') { this.token += character; return undefined; }\n this.literal();\n const output = this.done();\n if (character === '\"') this.quoted = true;\n else if (structure) this.structure(character);\n if (output !== undefined && (this.quoted || this.stack.length)) this.bytes = 1;\n return this.done() ?? output;\n }\n finish(): Json | undefined {\n if (this.quoted) this.fail(\"Unfinished string at EOF\");\n this.literal(true);\n if (this.stack.length) this.fail(\"Unfinished JSON term at EOF\");\n return this.done();\n }\n}\nexport function parseJson(input: string, budget: Budget, byteEncoded = false): Json {\n const text = byteEncoded ? input : Buffer.from(input).toString(\"latin1\");\n if (text.length > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n const parser = new JsonParser(budget);\n let value: Json | undefined;\n const accept = (next: Json | undefined): void => {\n if (next === undefined) return;\n if (value !== undefined) throw new JqParseError(\"Unexpected extra JSON values\", 0, 1, 0, false);\n value = next;\n };\n for (let index = 0; index < text.length; index++) {\n if (index % 1024 === 0) budget.step();\n accept(parser.feed(text[index]!));\n }\n accept(parser.finish());\n if (value === undefined) throw new JqParseError(\"Expected JSON value\", 0, 1, 0, false);\n return value;\n}\nexport async function* readChunks(source: ByteSource, budget: Budget): AsyncGenerator<Uint8Array> {\n for await (const chunk of readBytes(source, budget.signal)) {\n await budget.tick();\n budget.inputBytes += chunk.byteLength;\n if (budget.inputBytes > budget.limits.maxInputBytes) throw new JqLimitError(\"maxInputBytes\");\n let offset = 0;\n while (offset < chunk.length) {\n if (budget.inputLocation.complete) budget.inputLocation = { ...budget.inputLocation, complete: false };\n const newline = chunk.indexOf(10, offset);\n const end = Math.min(newline < 0 ? chunk.length : newline + 1, offset + 16384);\n budget.step(Math.ceil((end - offset) / 1024));\n await budget.tick();\n if (newline >= 0 && end === newline + 1) { budget.inputLocation.line++; budget.inputLocation.complete = true; }\n yield chunk.subarray(offset, end);\n offset = end;\n }\n }\n budget.inputLocation.complete = true;\n}\nexport async function* jsonValues(source: ByteSource, budget: Budget): AsyncGenerator<Json> {\n const parser = new JsonParser(budget);\n let scanned = 0;\n let nulTail: string | undefined;\n async function* scan(text: string, completeLine = false): AsyncGenerator<Json> {\n for (const character of text) {\n if (++scanned % 1024 === 0) await budget.tick();\n if (!completeLine && character === \"\\0\" && nulTail === undefined) nulTail = \"\";\n if (nulTail !== undefined) {\n nulTail += character;\n if (nulTail.length > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (character === \"\\n\") { const tail = nulTail; nulTail = undefined; yield* scan(tail, true); }\n continue;\n }\n const value = parser.feed(character);\n if (value !== undefined) yield value;\n }\n }\n try {\n for await (const chunk of readChunks(source, budget)) yield* scan(Buffer.from(chunk).toString(\"latin1\"));\n const value = parser.finish();\n if (value !== undefined) yield value;\n } catch (error) {\n if (!(error instanceof JqParseError)) throw error;\n throw new JqError(`parse error: ${error.diagnostic()}`);\n }\n}\n\nexport async function* rawValues(sources: AsyncIterable<ByteSource>, budget: Budget, slurp: boolean): AsyncGenerator<string> {\n let buffer = \"\";\n let bytes = 2;\n const append = (text: string): void => {\n bytes += Buffer.byteLength(JSON.stringify(text)) - 2;\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n buffer += text;\n };\n for await (const source of sources) {\n let pending = \"\";\n for await (const chunk of readChunks(source, budget)) {\n await budget.tick();\n pending += Buffer.from(chunk).toString(\"latin1\");\n if (pending.length + bytes - (!slurp && pending.endsWith(\"\\n\") ? 1 : 0) > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (pending.endsWith(\"\\n\")) {\n append(decodeUtf8(slurp ? pending : pending.slice(0, -1), budget));\n pending = \"\";\n if (!slurp) { budget.value(buffer); yield buffer; buffer = \"\"; bytes = 2; }\n }\n }\n append(decodeUtf8(pending, budget));\n }\n if (slurp || buffer) { budget.value(buffer); yield buffer; }\n}\n\nexport type JsonFragment = { readonly bytes: number; readonly text: string } | {\n readonly bytes: number;\n readonly value: string;\n readonly start: number;\n readonly end: number;\n readonly quoted: boolean;\n};\n\nfunction* quotedFragments(value: string, budget: Budget): Generator<JsonFragment> {\n yield { text: '\"', bytes: 1 };\n let offset = 0;\n while (offset < value.length) {\n const start = offset;\n const limit = Math.min(start + 32, value.length);\n budget.step(limit - start);\n let bytes = 0;\n while (offset < limit) {\n const code = value.charCodeAt(offset);\n if (code >= 0xd800 && code <= 0xdbff && offset + 1 === limit && limit < value.length) break;\n if (code >= 0xd800 && code <= 0xdbff && offset + 1 < limit) {\n const next = value.charCodeAt(offset + 1);\n if (next >= 0xdc00 && next <= 0xdfff) { bytes += 4; offset += 2; continue; }\n }\n if (code === 34 || code === 92 || code === 8 || code === 9 || code === 10 || code === 12 || code === 13) bytes += 2;\n else if (code < 32 || (code >= 0xd800 && code <= 0xdfff)) bytes += 6;\n else bytes += code < 128 ? 1 : code < 2048 ? 2 : 3;\n offset++;\n }\n yield { value, start, end: offset, bytes, quoted: true };\n }\n yield { text: '\"', bytes: 1 };\n}\n\nexport function renderJsonFragment(fragment: JsonFragment, budget: Budget): string {\n if (\"text\" in fragment) return fragment.text;\n budget.step(fragment.end - fragment.start);\n const text = fragment.value.slice(fragment.start, fragment.end);\n return fragment.quoted ? JSON.stringify(text).slice(1, -1) : text;\n}\n\nexport function* jsonFragments(value: Json, budget: Budget, pretty = false, depth = 0): Generator<JsonFragment> {\n budget.step();\n if (depth > budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n if (typeof value === \"string\") { yield* quotedFragments(value, budget); return; }\n if (value === null || typeof value !== \"object\" || isNumber(value)) {\n const text = scalarJson(value, budget);\n for (let start = 0; start < text.length; start += 32) {\n const end = Math.min(start + 32, text.length);\n budget.step(end - start);\n yield { value: text, start, end, bytes: end - start, quoted: false };\n }\n return;\n }\n if (depth + 1 > budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n const array = Array.isArray(value);\n if (array) budget.collection(value.length);\n yield { text: array ? \"[\" : \"{\", bytes: 1 };\n let count = 0;\n const keys = array ? value.keys() : objectKeyIterator(value);\n for (const key of keys) {\n budget.step();\n budget.collection(count + 1);\n if (count++) yield { text: \",\", bytes: 1 };\n if (pretty) {\n const bytes = 1 + 2 * (depth + 1);\n budget.step(bytes);\n yield { text: `\\n${\" \".repeat(depth + 1)}`, bytes };\n }\n if (!array) {\n yield* quotedFragments(String(key), budget);\n yield { text: pretty ? \": \" : \":\", bytes: pretty ? 2 : 1 };\n }\n yield* jsonFragments((value as Record<string | number, Json>)[key]!, budget, pretty, depth + 1);\n }\n if (pretty && count) {\n const bytes = 1 + 2 * depth;\n budget.step(bytes);\n yield { text: `\\n${\" \".repeat(depth)}`, bytes };\n }\n yield { text: array ? \"]\" : \"}\", bytes: 1 };\n}\n\nexport async function measureValue(value: Json, budget: Budget, depth = 0, maxBytes = budget.limits.maxValueBytes): Promise<number> {\n await budget.tick(0);\n let bytes = 0;\n for (const fragment of jsonFragments(value, budget, false, depth)) {\n await budget.tick(0);\n bytes += fragment.bytes;\n if (bytes > maxBytes) throw new JqLimitError(\"maxValueBytes\");\n }\n return bytes;\n}\n\nexport async function stringify(value: Json, budget: Budget, pretty = false, maxBytes = budget.limits.maxValueBytes, limitName: \"maxValueBytes\" | \"maxOutputBytes\" = \"maxValueBytes\", asStringValue = false): Promise<string> {\n await budget.tick(0);\n const parts: string[] = [];\n let bytes = 0;\n let units = 0;\n let stringBytes = 2;\n for (const fragment of jsonFragments(value, budget, pretty)) {\n await budget.tick(0);\n bytes += fragment.bytes;\n if (bytes > maxBytes) throw new JqLimitError(limitName);\n const text = renderJsonFragment(fragment, budget);\n if (asStringValue) {\n for (const encoded of quotedFragments(text, budget)) stringBytes += encoded.bytes;\n stringBytes -= 2;\n if (stringBytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n }\n budget.step();\n units += text.length;\n parts.push(text);\n }\n await budget.tick(units);\n return parts.join(\"\");\n}\n", "import { Budget, JqError, JqLimitError, type Json } from \"./limits.js\";\n\nexport async function splitString(input: Json, separator: Json, budget: Budget): Promise<string[]> {\n await budget.tick();\n if (typeof input !== \"string\" || typeof separator !== \"string\") {\n throw new JqError(\"split input and separator must be strings\");\n }\n const guaranteedFitUnits = Math.floor((budget.limits.maxValueBytes - 2) / 6);\n for (const operand of [input, separator]) {\n if (operand.length <= guaranteedFitUnits) budget.step();\n else budget.value(operand);\n }\n const result: string[] = [];\n let bytes = 2;\n const append = (start: number, end: number): void => {\n budget.collection(result.length + 1);\n const part = input.slice(start, end);\n bytes += budget.value(part) + (result.length ? 1 : 0);\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n result.push(part);\n };\n if (separator.length === 0) {\n let offset = 0;\n for (const character of input) {\n await budget.tick();\n append(offset, offset + character.length);\n offset += character.length;\n }\n } else if (input.length !== 0) {\n if (separator.length > input.length) append(0, input.length);\n else {\n const prefixes = new Int32Array(separator.length);\n let matched = 0;\n for (let index = 1; index < separator.length; index++) {\n await budget.tick();\n while (matched > 0 && separator[index] !== separator[matched]) {\n await budget.tick();\n matched = prefixes[matched - 1]!;\n }\n if (separator[index] === separator[matched]) matched++;\n prefixes[index] = matched;\n }\n matched = 0;\n let start = 0;\n for (let index = 0; index < input.length; index++) {\n await budget.tick();\n while (matched > 0 && input[index] !== separator[matched]) {\n await budget.tick();\n matched = prefixes[matched - 1]!;\n }\n if (input[index] === separator[matched]) matched++;\n if (matched === separator.length) {\n append(start, index + 1 - separator.length);\n start = index + 1;\n matched = 0;\n }\n }\n append(start, input.length);\n }\n }\n budget.value(result);\n return result;\n}\n", "import { Budget, copyObject, isObject, JqError, JqLimitError, objectKeyIterator, objectKeys, put, type Json } from \"./limits.js\";\nimport { compareNumbers, isNumber, numberValue, type Numeric } from \"./numbers.js\";\nimport { jsonFragments, renderJsonFragment } from \"./input.js\";\n\nexport function type(value: Json): string {\n return value === null ? \"null\" : isNumber(value) ? \"number\" : Array.isArray(value) ? \"array\" : typeof value;\n}\nexport function describe(value: Json, budget: Budget): string {\n const parts: Uint8Array[] = [];\n let length = 0;\n for (const fragment of jsonFragments(value, budget)) {\n const text = renderJsonFragment(fragment, budget);\n budget.step(text.length);\n const bytes = Buffer.from(text);\n const retained = Math.min(15 - length, bytes.length);\n parts.push(bytes.subarray(0, retained));\n length += retained;\n if (length === 15) break;\n }\n const bytes = Buffer.concat(parts, length);\n const text = length < 15 ? bytes.toString() : `${bytes.subarray(0, 11).toString()}...`;\n return `${type(value)} (${text})`;\n}\nexport async function stringCompare(left: string, right: string, budget: Budget): Promise<number> {\n await budget.tick(1 + Math.ceil(Math.min(left.length, right.length) / 32));\n let leftOffset = 0;\n let rightOffset = 0;\n let points = 0;\n while (leftOffset < left.length && rightOffset < right.length) {\n if (points++ % 32 === 0) await budget.tick(0);\n const leftPoint = left.codePointAt(leftOffset)!;\n const rightPoint = right.codePointAt(rightOffset)!;\n if (leftPoint !== rightPoint) return leftPoint < rightPoint ? -1 : 1;\n leftOffset += leftPoint > 0xffff ? 2 : 1;\n rightOffset += rightPoint > 0xffff ? 2 : 1;\n }\n return leftOffset < left.length ? 1 : rightOffset < right.length ? -1 : 0;\n}\nexport async function stableSort<Item>(items: Item[], budget: Budget, comparator: (left: Item, right: Item) => Promise<number>): Promise<void> {\n await budget.tick(0);\n budget.collection(items.length);\n if (items.length < 2) return;\n await budget.tick(items.length);\n const scratch = new Array<Item>(items.length);\n let source = items;\n let target = scratch;\n for (let width = 1; width < items.length; width *= 2) {\n for (let start = 0; start < items.length; start += width * 2) {\n const middle = Math.min(start + width, items.length);\n const end = Math.min(start + width * 2, items.length);\n let left = start;\n let right = middle;\n for (let index = start; index < end; index++) {\n await budget.tick();\n if (left < middle && (right >= end || await comparator(source[left]!, source[right]!) <= 0)) target[index] = source[left++]!;\n else target[index] = source[right++]!;\n }\n }\n const previous = source;\n source = target;\n target = previous;\n }\n if (source !== items) for (let index = 0; index < items.length; index++) {\n await budget.tick();\n items[index] = source[index]!;\n }\n}\nexport async function sortedKeys(value: Record<string, Json>, budget: Budget): Promise<string[]> {\n await budget.tick(0);\n const keys: string[] = [];\n for (const key of objectKeyIterator(value)) {\n await budget.tick();\n budget.collection(keys.length + 1);\n keys.push(key);\n }\n await stableSort(keys, budget, (left, right) => stringCompare(left, right, budget));\n return keys;\n}\nexport async function compare(left: Json, right: Json, budget: Budget): Promise<number> {\n await budget.tick();\n const rank = (value: Json): number => value === null ? 0 : value === false ? 1 : value === true ? 2 : isNumber(value) ? 3 : typeof value === \"string\" ? 4 : Array.isArray(value) ? 5 : 6;\n const difference = rank(left) - rank(right);\n if (difference) return Math.sign(difference);\n if (isNumber(left) && isNumber(right)) return compareNumbers(left, right, budget);\n if (typeof left === \"string\" && typeof right === \"string\") return stringCompare(left, right, budget);\n if (left === right && !Array.isArray(left) && !isObject(left)) return 0;\n if (Array.isArray(left) && Array.isArray(right)) {\n for (let index = 0; index < Math.min(left.length, right.length); index++) {\n const result = await compare(left[index]!, right[index]!, budget); if (result) return result;\n }\n return Math.sign(left.length - right.length);\n }\n if (isObject(left) && isObject(right)) {\n const keys = await sortedKeys(left, budget);\n const otherKeys = await sortedKeys(right, budget);\n const keyDifference = await compare(keys, otherKeys, budget);\n if (keyDifference) return keyDifference;\n for (const key of keys) { const result = await compare(left[key]!, right[key]!, budget); if (result) return result; }\n }\n return 0;\n}\nexport function equal(left: Json, right: Json, budget: Budget): boolean {\n budget.step();\n if (left === right) return true;\n if (isNumber(left) && isNumber(right)) return compareNumbers(left, right, budget) === 0;\n if (Array.isArray(left) && Array.isArray(right)) return left.length === right.length && left.every((value, index) => equal(value, right[index]!, budget));\n if (isObject(left) && isObject(right)) {\n const keys = objectKeys(left);\n return keys.length === objectKeys(right).length && keys.every(key => Object.hasOwn(right, key) && equal(left[key]!, right[key]!, budget));\n }\n return false;\n}\nexport async function* entries(value: Json, budget: Budget): AsyncGenerator<[string | number, Json]> {\n budget.signal.throwIfAborted();\n if (Array.isArray(value)) {\n budget.collection(value.length);\n for (let index = 0; index < value.length; index++) {\n await budget.tick(2);\n yield [index, value[index]!];\n }\n return;\n }\n if (isObject(value)) {\n let count = 0;\n for (const key of objectKeyIterator(value)) {\n await budget.tick(2);\n budget.collection(++count);\n yield [key, value[key]!];\n }\n return;\n }\n throw new JqError(`Cannot iterate over ${describe(value, budget)}`);\n}\nexport function indexValue(value: Json, index: Json): Json {\n if (typeof index === \"string\") {\n if (value === null) return null;\n if (isObject(value)) return Object.hasOwn(value, index) ? value[index]! : null;\n } else if (isNumber(index) && Number.isFinite(numberValue(index))) {\n if (value === null) return null;\n const integer = Math.trunc(numberValue(index));\n if (Array.isArray(value)) return value[integer < 0 ? value.length + integer : integer] ?? null;\n }\n throw new JqError(`Cannot index ${type(value)} with ${type(index)}${typeof index === \"string\" && Buffer.byteLength(index) < 30 ? ` ${JSON.stringify(index)}` : \"\"}`);\n}\nexport async function sliceValue(value: Json, start: Json, end: Json, budget: Budget): Promise<Json> {\n if (start !== null && (!isNumber(start) || !Number.isSafeInteger(numberValue(start)))) throw new JqError(\"slice start must be an integer or null\");\n if (end !== null && (!isNumber(end) || !Number.isSafeInteger(numberValue(end)))) throw new JqError(\"slice end must be an integer or null\");\n budget.signal.throwIfAborted();\n let first = start === null ? 0 : numberValue(start);\n let last = end === null ? undefined : numberValue(end);\n if (value === null) return null;\n if (Array.isArray(value)) return value.slice(first, last);\n if (typeof value !== \"string\") throw new JqError(`cannot slice ${type(value)}`);\n if (last === 0 || (last !== undefined && (first < 0) === (last < 0) && first >= last)) return \"\";\n if (first < 0 || (last !== undefined && last < 0)) {\n let length = 0;\n for (let offset = 0; offset < value.length; length++) {\n await budget.tick();\n offset += value.codePointAt(offset)! > 0xffff ? 2 : 1;\n }\n if (first < 0) first = Math.max(0, length + first);\n if (last !== undefined && last < 0) last = Math.max(0, length + last);\n if (last !== undefined && first >= last) return \"\";\n }\n let firstOffset = first === 0 ? 0 : value.length;\n let offset = 0;\n const stop = last ?? first;\n for (let point = 0; point < stop && offset < value.length;) {\n await budget.tick();\n offset += value.codePointAt(offset)! > 0xffff ? 2 : 1;\n if (++point === first) firstOffset = offset;\n }\n return value.slice(firstOffset, last === undefined ? undefined : offset);\n}\nexport function contains(value: Json, sought: Json, budget: Budget): boolean {\n budget.step();\n if (typeof value === \"string\" && typeof sought === \"string\") return value.includes(sought);\n if (Array.isArray(value) && Array.isArray(sought)) return sought.every(item => value.some(candidate => contains(candidate, item, budget)));\n if (isObject(value) && isObject(sought)) return objectKeys(sought).every(key => Object.hasOwn(value, key) && contains(value[key]!, sought[key]!, budget));\n return type(value) === type(sought) && equal(value, sought, budget);\n}\nexport async function binary(operator: string, left: Json, right: Json, budget: Budget): Promise<Json> {\n budget.step();\n if ([\"==\", \"!=\", \"<\", \"<=\", \">\", \">=\"].includes(operator)) {\n if (operator === \"==\") return equal(left, right, budget);\n if (operator === \"!=\") return !equal(left, right, budget);\n const order = await compare(left, right, budget);\n switch (operator) {\n case \"<\": return order < 0;\n case \"<=\": return order <= 0;\n case \">\": return order > 0;\n default: return order >= 0;\n }\n }\n if (operator === \"+\") {\n if (left === null) return right;\n if (right === null) return left;\n if (isNumber(left) && isNumber(right)) return numberValue(left) + numberValue(right);\n if (typeof left === \"string\" && typeof right === \"string\") {\n budget.step(left.length + right.length);\n const result = left + right;\n budget.text(result); return result;\n }\n if (Array.isArray(left) && Array.isArray(right)) { budget.collection(left.length + right.length); return [...left, ...right]; }\n if (isObject(left) && isObject(right)) { const result = copyObject(left, right); budget.collection(objectKeys(result).length); return result; }\n }\n if (operator === \"-\" && Array.isArray(left) && Array.isArray(right)) return left.filter(item => !right.some(other => equal(item, other, budget)));\n if (operator === \"*\" && isObject(left) && isObject(right)) {\n const result = copyObject(left);\n for (const key of objectKeys(right)) {\n const value = right[key]!;\n put(result, key, Object.hasOwn(left, key) && isObject(left[key]!) && isObject(value) ? await binary(\"*\", left[key]!, value, budget) : value);\n }\n budget.collection(objectKeys(result).length); return result;\n }\n if (operator === \"*\" && ((typeof left === \"string\" && isNumber(right)) || (typeof right === \"string\" && isNumber(left)))) {\n const text = typeof left === \"string\" ? left : right as string;\n const count = numberValue(isNumber(left) ? left : right as Numeric);\n if (count < 0) return null;\n if (text === \"\") return \"\";\n if (!Number.isFinite(count) || Buffer.byteLength(text) * Math.floor(count) > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n const result = text.repeat(Math.floor(count)); budget.text(result); return result;\n }\n if (operator === \"/\" && typeof left === \"string\" && typeof right === \"string\") {\n const result = right === \"\" ? Array.from(left) : left.split(right); budget.collection(result.length); return result;\n }\n if (isNumber(left) && isNumber(right)) {\n const first = numberValue(left);\n const second = numberValue(right);\n if (operator === \"%\" && (Number.isNaN(first) || Number.isNaN(second))) return NaN;\n if ((operator === \"/\" && second === 0) || (operator === \"%\" && Math.trunc(second) === 0)) throw new JqError(`${describe(left, budget)} and ${describe(right, budget)} cannot be divided${operator === \"%\" ? \" (remainder)\" : \"\"} because the divisor is zero`);\n if (operator === \"-\") return first - second;\n if (operator === \"*\") return first * second;\n if (operator === \"/\") return first / second;\n if (operator === \"%\") {\n const integer = (value: number): bigint => value >= 2 ** 63 ? 9223372036854775807n : value <= -(2 ** 63) ? -9223372036854775808n : BigInt(Math.trunc(value));\n return Number(integer(first) % integer(second));\n }\n }\n if (operator === \"+\") throw new JqError(`${describe(left, budget)} and ${describe(right, budget)} cannot be added`);\n if (operator === \"-\") throw new JqError(`${describe(left, budget)} and ${describe(right, budget)} cannot be subtracted`);\n throw new JqError(`cannot apply ${operator} to ${type(left)} and ${type(right)}`);\n}\n", "import { JqError, JqLimitError, wellFormed, type Budget, type Json } from \"./limits.js\";\nimport { decimalNumber } from \"./numbers.js\";\n\nexport type Ast =\n | { kind: \"identity\" }\n | { kind: \"literal\"; value: Json }\n | { kind: \"variable\"; name: string }\n | { kind: \"binary\"; operator: string; left: Ast; right: Ast }\n | { kind: \"unary\"; operand: Ast }\n | { kind: \"optional\"; operand: Ast }\n | { kind: \"descend\" }\n | { kind: \"try\"; body: Ast; handler: Ast | undefined }\n | { kind: \"reduce\" | \"foreach\"; source: Ast; name: string; init: Ast; update: Ast; extract: Ast | undefined }\n | { kind: \"index\"; base: Ast; index: Ast }\n | { kind: \"slice\"; base: Ast; start: Ast | undefined; end: Ast | undefined }\n | { kind: \"iterate\"; base: Ast }\n | { kind: \"array\"; body: Ast | undefined }\n | { kind: \"object\"; fields: { key: Ast; value: Ast }[] }\n | { kind: \"call\"; name: string; args: Ast[] }\n | { kind: \"if\"; condition: Ast; yes: Ast; no: Ast };\ninterface Token { text: string; offset: number; kind: \"symbol\" | \"name\" | \"number\" | \"string\" | \"end\" }\nconst precedence: Readonly<Record<string, number>> = Object.freeze({\n \"|\": 1, \",\": 2, \"=\": 3, \"|=\": 3, \"+=\": 3, \"-=\": 3, \"*=\": 3, \"/=\": 3, \"%=\": 3, \"//=\": 3,\n \"//\": 4, or: 5, and: 6, \"==\": 7, \"!=\": 7, \"<\": 7, \">\": 7, \"<=\": 7, \">=\": 7,\n \"+\": 8, \"-\": 8, \"*\": 9, \"/\": 9, \"%\": 9,\n});\nexport const functions: Readonly<Record<string, readonly number[]>> = Object.freeze({\n empty: [0], select: [1], map: [1], map_values: [1], length: [0], keys: [0], keys_unsorted: [0], values: [0],\n type: [0], has: [1], contains: [1], sort: [0], sort_by: [1], unique: [0], unique_by: [1], group_by: [1], add: [0],\n not: [0], reverse: [0], first: [0, 1], last: [0, 1], limit: [2], range: [1, 2, 3], join: [1], split: [1],\n tostring: [0], tonumber: [0], tojson: [0], fromjson: [0], to_entries: [0], from_entries: [0], with_entries: [1],\n min: [0], max: [0], min_by: [1], max_by: [1], any: [0, 1, 2], all: [0, 1, 2],\n strings: [0], numbers: [0], booleans: [0], arrays: [0], objects: [0], nulls: [0], scalars: [0], iterables: [0],\n nan: [0], infinite: [0], isnan: [0], isinfinite: [0], isfinite: [0],\n});\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = [];\n let offset = 0;\n while (offset < source.length) {\n const character = source[offset]!;\n if (/\\s/u.test(character)) { offset++; continue; }\n if (character === \"#\") { while (offset < source.length && source[offset] !== \"\\n\") offset++; continue; }\n const start = offset;\n if (character === '\"') {\n offset++;\n let escaped = false;\n while (offset < source.length) {\n const current = source[offset++]!;\n if (!escaped && current === '\"') break;\n if (!escaped && current === \"\\\\\") escaped = true;\n else escaped = false;\n }\n const text = source.slice(start, offset).replace(/[\\x00-\\x1f]/gu, character => `\\\\u${character.charCodeAt(0).toString(16).padStart(4, \"0\")}`);\n try { if (!wellFormed(JSON.parse(text) as string)) throw new Error(); } catch { throw new JqError(`invalid string at offset ${start}`, 3); }\n tokens.push({ text, offset: start, kind: \"string\" });\n continue;\n }\n const number = /^(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?/u.exec(source.slice(offset));\n if (number) {\n tokens.push({ text: number[0], offset, kind: \"number\" }); offset += number[0].length; continue;\n }\n const name = /^[A-Za-z_][A-Za-z_0-9]*/u.exec(source.slice(offset));\n if (name) { tokens.push({ text: name[0], offset, kind: \"name\" }); offset += name[0].length; continue; }\n if (source.startsWith(\"..\", offset)) {\n tokens.push({ text: \"..\", offset, kind: \"symbol\" }); offset += 2; continue;\n }\n const symbol = /^(?:\\/\\/=|\\|=|\\+=|-=|\\*=|\\/=|%=|==|!=|<=|>=|\\/\\/|[.\\[\\]{}(),:;?$|+*/%<>=-])/u.exec(source.slice(offset));\n if (!symbol) throw new JqError(`unexpected character at offset ${offset}`, 3);\n tokens.push({ text: symbol[0], offset, kind: \"symbol\" }); offset += symbol[0].length;\n }\n tokens.push({ text: \"\", offset, kind: \"end\" });\n return tokens;\n}\nfunction isPath(ast: Ast): boolean {\n const pending = [ast];\n while (pending.length) {\n const node = pending.pop()!;\n if (node.kind === \"identity\") continue;\n if (node.kind === \"index\" || node.kind === \"iterate\") pending.push(node.base);\n else if (node.kind === \"binary\" && node.operator === \",\") pending.push(node.left, node.right);\n else return false;\n }\n return true;\n}\nexport function parse(source: string, variables: ReadonlyMap<string, Json>, budget: Budget): Ast {\n const limits = budget.limits;\n if (Buffer.byteLength(source) > limits.maxSourceBytes) throw new JqLimitError(\"maxSourceBytes\");\n const tokens = tokenize(source);\n let position = 0;\n let nesting = 0;\n const unresolved = new Map<Ast, Token>();\n const bindings = new Map<string, number>();\n const peek = (): Token => tokens[Math.min(position, tokens.length - 1)]!;\n const take = (): Token => { const token = peek(); if (token.kind !== \"end\") position++; return token; };\n const accept = (text: string): boolean => { if (peek().text !== text) return false; take(); return true; };\n const fail = (message: string): never => { throw new JqError(`${message} at offset ${peek().offset}`, 3); };\n const diagnostic = (token: Token, message: string): string => {\n const prefix = source.slice(0, token.offset);\n const line = prefix.split(\"\\n\").length;\n const start = prefix.lastIndexOf(\"\\n\") + 1;\n const end = source.indexOf(\"\\n\", start);\n const context = source.slice(start, end < 0 ? source.length : end);\n return `error: ${message} at <top-level>, line ${line}:\\n${context}${\" \".repeat(Buffer.byteLength(prefix.slice(start)))}`;\n };\n const syntaxError = (token: Token, expectEnd = false): never => {\n const name = token.kind === \"end\" ? \"end of file\" : token.kind === \"name\" ? \"IDENT\" : token.kind === \"number\" || token.kind === \"string\" ? \"LITERAL\" : `'${token.text}'`;\n const location = token.kind === \"end\" ? tokens[Math.max(0, position - 1)]! : token;\n throw new JqError(`${diagnostic(location, `syntax error, unexpected ${name}${expectEnd ? \", expecting end of file\" : \"\"} (Unix shell quoting issues?)`)}\\njq: 1 compile error`, 3);\n };\n const expect = (text: string): void => { if (!accept(text)) fail(`expected '${text}'`); };\n const literal = (value: Json): Ast => ({ kind: \"literal\", value });\n const conditional = (): Ast => {\n const condition = expression(); expect(\"then\");\n const yes = expression();\n if (accept(\"elif\")) return { kind: \"if\", condition, yes, no: guardedConditional() };\n expect(\"else\"); const no = expression(); expect(\"end\");\n return { kind: \"if\", condition, yes, no };\n };\n const guardedConditional = (): Ast => {\n if (++nesting > limits.maxAstDepth) throw new JqLimitError(\"maxAstDepth\");\n try { return conditional(); } finally { nesting--; }\n };\n const expression = (minimum = 0, stopComma = false): Ast => {\n if (++nesting > limits.maxAstDepth) throw new JqLimitError(\"maxAstDepth\");\n try {\n let left = primary();\n while (true) {\n const operator = peek().text;\n const priority = Object.hasOwn(precedence, operator) ? precedence[operator]! : -1;\n if (priority < minimum || (stopComma && operator === \",\")) break;\n take();\n const assignment = priority === 3;\n if (assignment && !isPath(left)) fail(\"unsupported assignment path\");\n const right = expression(priority + (assignment ? 0 : 1), stopComma);\n left = { kind: \"binary\", operator, left, right };\n }\n return left;\n } finally { nesting--; }\n };\n const primary = (): Ast => {\n const token = take();\n let result: Ast;\n if (token.text === \"..\") result = { kind: \"descend\" };\n else if (token.text === \"try\") {\n const body = expression(10);\n result = { kind: \"try\", body, handler: accept(\"catch\") ? expression(10) : undefined };\n } else if (token.text === \"reduce\" || token.text === \"foreach\") {\n const source = expression(10); expect(\"as\"); expect(\"$\");\n const name = take(); if (name.kind !== \"name\") fail(\"expected variable name\");\n expect(\"(\"); const init = expression(); expect(\";\");\n const previous = bindings.get(name.text) ?? 0;\n bindings.set(name.text, previous + 1);\n try {\n const update = expression();\n const extract = token.text === \"foreach\" && accept(\";\") ? expression() : undefined;\n expect(\")\");\n result = { kind: token.text, source, name: name.text, init, update, extract };\n } finally {\n if (previous) bindings.set(name.text, previous);\n else bindings.delete(name.text);\n }\n } else if (token.text === \".\") {\n result = { kind: \"identity\" };\n if ((peek().kind === \"name\" && peek().offset === token.offset + 1) || peek().kind === \"string\") {\n const key = take(); result = { kind: \"index\", base: result, index: literal(key.kind === \"string\" ? JSON.parse(key.text) as string : key.text) };\n }\n } else if (token.text === \"(\") { result = expression(); expect(\")\"); }\n else if (token.text === \"[\") {\n result = { kind: \"array\", body: peek().text === \"]\" ? undefined : expression() }; expect(\"]\");\n } else if (token.text === \"{\") {\n const fields: { key: Ast; value: Ast }[] = [];\n if (peek().text !== \"}\") do {\n const keyToken = take();\n let key: Ast;\n if (keyToken.text === \"(\") { key = expression(); expect(\")\"); }\n else if (keyToken.kind === \"string\" || keyToken.kind === \"name\") key = literal(keyToken.kind === \"string\" ? JSON.parse(keyToken.text) as string : keyToken.text);\n else fail(\"expected object key\");\n const value = accept(\":\") ? expression(0, true) : key!.kind === \"literal\" ? { kind: \"index\" as const, base: { kind: \"identity\" as const }, index: key! } : fail(\"expected ':'\");\n fields.push({ key: key!, value });\n } while (accept(\",\"));\n expect(\"}\"); result = { kind: \"object\", fields };\n } else if (token.text === \"$\") {\n const name = take(); if (name.kind !== \"name\") fail(\"expected variable name\");\n if (!bindings.has(name.text) && !variables.has(name.text)) fail(`undefined variable $${name.text}`);\n result = { kind: \"variable\", name: name.text };\n } else if (token.text === \"-\") result = { kind: \"unary\", operand: expression(10) };\n else if (token.text === \"if\") result = guardedConditional();\n else if (token.kind === \"string\") result = literal(JSON.parse(token.text) as string);\n else if (token.kind === \"number\") {\n result = literal(decimalNumber(token.text, budget));\n } else if ([\"true\", \"false\", \"null\"].includes(token.text)) result = literal(JSON.parse(token.text) as Json);\n else if (token.kind === \"name\") {\n const args: Ast[] = [];\n if (accept(\"(\")) { if (peek().text !== \")\") do { args.push(expression()); } while (accept(\";\")); expect(\")\"); }\n if (token.text === \"split\" && args.length === 2) fail(\"unsupported function split/2\");\n result = { kind: \"call\", name: token.text, args };\n if (!Object.hasOwn(functions, token.text) || !functions[token.text]!.includes(args.length)) unresolved.set(result, token);\n } else syntaxError(token, nesting === 1);\n while (true) {\n if (accept(\"?\")) result = { kind: \"optional\", operand: result! };\n else if (accept(\".\")) {\n const key = take(); if (key.kind !== \"name\" && key.kind !== \"string\") fail(\"expected property name\");\n result = { kind: \"index\", base: result!, index: literal(key.kind === \"string\" ? JSON.parse(key.text) as string : key.text) };\n } else if (accept(\"[\")) {\n if (accept(\"]\")) result = { kind: \"iterate\", base: result! };\n else {\n const start = peek().text === \":\" ? undefined : expression();\n if (accept(\":\")) {\n const end = peek().text === \"]\" ? undefined : expression(); expect(\"]\");\n result = { kind: \"slice\", base: result!, start, end };\n } else { expect(\"]\"); result = { kind: \"index\", base: result!, index: start! }; }\n }\n } else break;\n }\n return result!;\n };\n const ast = expression();\n if (peek().kind !== \"end\") syntaxError(peek(), true);\n const pending: { node: Ast; depth: number }[] = [{ node: ast, depth: 1 }];\n const errors: string[] = [];\n let errorBytes = 0;\n while (pending.length) {\n const { node, depth } = pending.pop()!;\n if (depth > limits.maxAstDepth) throw new JqLimitError(\"maxAstDepth\");\n const token = unresolved.get(node);\n if (token && node.kind === \"call\") {\n const message = diagnostic(token, `${node.name}/${node.args.length} is not defined`);\n errorBytes += Buffer.byteLength(message) + 5;\n if (errorBytes > limits.maxOutputBytes) throw new JqLimitError(\"maxOutputBytes\");\n errors.push(message);\n continue;\n }\n const children: Ast[] = [];\n if (node.kind === \"binary\") children.push(node.left, node.right);\n else if (node.kind === \"unary\" || node.kind === \"optional\") children.push(node.operand);\n else if (node.kind === \"index\") children.push(node.base, node.index);\n else if (node.kind === \"iterate\") children.push(node.base);\n else if (node.kind === \"slice\") { children.push(node.base); if (node.start) children.push(node.start); if (node.end) children.push(node.end); }\n else if (node.kind === \"array\" && node.body) children.push(node.body);\n else if (node.kind === \"object\") for (const field of node.fields) children.push(field.key, field.value);\n else if (node.kind === \"call\") children.push(...node.args);\n else if (node.kind === \"if\") children.push(node.condition, node.yes, node.no);\n else if (node.kind === \"try\") { children.push(node.body); if (node.handler) children.push(node.handler); }\n else if (node.kind === \"reduce\" || node.kind === \"foreach\") {\n children.push(node.source, node.init, node.update);\n if (node.extract) children.push(node.extract);\n }\n for (const child of children.reverse()) pending.push({ node: child, depth: depth + 1 });\n }\n if (errors.length) throw new JqError(`${errors.join(\"\\njq: \")}\\njq: ${errors.length} compile error${errors.length === 1 ? \"\" : \"s\"}`, 3);\n return ast;\n}\n", "import { object, objectKeys, put, type Json } from \"../structured/limits.js\";\nimport { Decimal, numberText } from \"../structured/numbers.js\";\nimport type { YqOwnedWork } from \"../structured/query-core.js\";\nimport { YqError, limit } from \"./errors.js\";\n\nexport const yqCaps = Object.freeze({\n maxArgvEntries: 4096,\n maxArgvUtf8Bytes: 65_536,\n maxVfsOperandPathBytes: 16_384,\n maxInputBytes: 16_000_000,\n maxDocumentBytes: 8_388_608,\n maxValueBytes: 8_388_608,\n maxScalarBytes: 1_048_576,\n maxQuerySourceBytes: 8192,\n maxDepth: 128,\n maxAstDepth: 64,\n maxSteps: 1_000_000,\n maxResults: 100_000,\n maxCollectionSize: 100_000,\n maxDocuments: 1024,\n maxAnchorsPerDocument: 1024,\n maxAliasReferences: 1024,\n maxDocumentNodes: 100_000,\n maxOutputBytes: 16_777_216,\n diagnosticReserveBytes: 4096,\n stdoutCapBytes: 16_773_120,\n maxDisplayedFilenameBytes: 256,\n});\n\nfunction checked(current: number, incoming: number, limitValue: number, code: Parameters<typeof limit>[0]): number {\n if (!Number.isSafeInteger(incoming) || incoming < 0) throw new RangeError(\"invalid yq accounting projection\");\n if (incoming > limitValue - current) throw limit(code);\n return current + incoming;\n}\n\nexport class YqLedger {\n documents = 0;\n aliases = 0;\n documentNodes = 0;\n documentValueBytes = 0;\n anchors = 0;\n stdoutBytes = 0;\n combinedOutputBytes = 0;\n\n admitDocumentBytes(rawBytes: number): void {\n if (!Number.isSafeInteger(rawBytes) || rawBytes < 0) throw new RangeError(\"invalid raw document byte count\");\n if (rawBytes > yqCaps.maxDocumentBytes) throw limit(\"LIMIT_MAX_DOCUMENT_BYTES\");\n }\n\n beginDocument(rawBytes: number): void {\n this.admitDocumentBytes(rawBytes);\n this.documents = checked(this.documents, 1, yqCaps.maxDocuments, \"LIMIT_MAX_DOCUMENTS\");\n this.documentNodes = 0;\n this.documentValueBytes = 0;\n this.anchors = 0;\n }\n\n admitNode(): void {\n this.documentNodes = checked(this.documentNodes, 1, yqCaps.maxDocumentNodes, \"LIMIT_MAX_DOCUMENT_NODES\");\n }\n\n admitAnchor(): void {\n this.anchors = checked(this.anchors, 1, yqCaps.maxAnchorsPerDocument, \"LIMIT_MAX_ANCHORS_PER_DOCUMENT\");\n }\n\n admitScalar(bytes: number): void {\n if (bytes > yqCaps.maxScalarBytes) throw limit(\"LIMIT_MAX_SCALAR_BYTES\");\n }\n\n admitValueBytes(bytes: number): void {\n this.documentValueBytes = checked(this.documentValueBytes, bytes, yqCaps.maxValueBytes, \"LIMIT_MAX_VALUE_BYTES\");\n }\n\n preflightAlias(descriptor: AliasDescriptor): { readonly aliases: number; readonly nodes: number; readonly valueBytes: number } {\n const aliases = checked(this.aliases, 1, yqCaps.maxAliasReferences, \"LIMIT_MAX_ALIAS_REFERENCES\");\n const nodes = checked(this.documentNodes, descriptor.nodes, yqCaps.maxDocumentNodes, \"LIMIT_MAX_DOCUMENT_NODES\");\n const valueBytes = checked(this.documentValueBytes, descriptor.compactBytes, yqCaps.maxValueBytes, \"LIMIT_MAX_VALUE_BYTES\");\n if (descriptor.maxDepth > yqCaps.maxDepth) throw limit(\"LIMIT_MAX_DEPTH\");\n return { aliases, nodes, valueBytes };\n }\n\n commitAlias(projection: { readonly aliases: number; readonly nodes: number; readonly valueBytes: number }): void {\n this.aliases = projection.aliases;\n this.documentNodes = projection.nodes;\n this.documentValueBytes = projection.valueBytes;\n }\n\n admitStdout(bytes: number): void {\n this.stdoutBytes = checked(this.stdoutBytes, bytes, yqCaps.stdoutCapBytes, \"LIMIT_MAX_OUTPUT_BYTES\");\n this.combinedOutputBytes = checked(this.combinedOutputBytes, bytes, yqCaps.maxOutputBytes, \"LIMIT_MAX_OUTPUT_BYTES\");\n }\n\n canAdmitDiagnostic(bytes: number): boolean {\n return Number.isSafeInteger(bytes)\n && bytes >= 0\n && bytes <= yqCaps.diagnosticReserveBytes\n && bytes <= yqCaps.maxOutputBytes - this.combinedOutputBytes;\n }\n\n admitDiagnostic(bytes: number): void {\n if (!this.canAdmitDiagnostic(bytes)) throw limit(\"LIMIT_MAX_OUTPUT_BYTES\");\n this.combinedOutputBytes += bytes;\n }\n}\n\nexport interface AliasDescriptor {\n readonly nodes: number;\n readonly compactBytes: number;\n readonly maxDepth: number;\n readonly ordinaryUnits: number;\n}\n\nfunction addProjection(current: number, incoming: number): number {\n if (!Number.isSafeInteger(incoming) || incoming < 0 || incoming > Number.MAX_SAFE_INTEGER - current) {\n throw new RangeError(\"alias projection overflow\");\n }\n return current + incoming;\n}\n\nasync function payload(work: YqOwnedWork, text: string): Promise<number> {\n let codePoints = 0;\n let bytes = 0;\n for (const character of text) {\n codePoints++;\n bytes += Buffer.byteLength(character);\n if (codePoints === 256) {\n await work.charge(codePoints);\n work.assertOpen();\n codePoints = 0;\n }\n }\n if (codePoints > 0) {\n await work.charge(codePoints);\n work.assertOpen();\n }\n const units = bytes === 0 ? 0 : Math.ceil(bytes / 1024);\n if (units > 0) {\n await work.charge(units);\n work.assertOpen();\n }\n return units;\n}\n\nfunction jsonStringBytes(text: string): number {\n let bytes = 2;\n for (const character of text) {\n const point = character.codePointAt(0)!;\n if (point === 0x22 || point === 0x5c || point === 0x08 || point === 0x0c || point === 0x0a || point === 0x0d || point === 0x09) bytes += 2;\n else if (point < 0x20) bytes += 6;\n else bytes += Buffer.byteLength(character);\n }\n return bytes;\n}\n\nexport async function estimateAlias(value: Json, work: YqOwnedWork): Promise<AliasDescriptor> {\n let nodes = 0;\n let compactBytes = 0;\n let maxDepth = 0;\n let ordinaryUnits = 0;\n const stack: { readonly value: Json; readonly depth: number }[] = [{ value, depth: 0 }];\n while (stack.length > 0) {\n const item = stack.pop()!;\n await work.charge(1);\n work.assertOpen();\n nodes = addProjection(nodes, 1);\n ordinaryUnits = addProjection(ordinaryUnits, 1);\n maxDepth = Math.max(maxDepth, item.depth);\n if (maxDepth > yqCaps.maxDepth) throw limit(\"LIMIT_MAX_DEPTH\");\n const current = item.value;\n if (current === null || typeof current === \"boolean\") {\n compactBytes = addProjection(compactBytes, Buffer.byteLength(JSON.stringify(current)));\n } else if (typeof current === \"number\" || current instanceof Decimal) {\n const text = numberText(current);\n const units = await payload(work, text);\n work.assertOpen();\n ordinaryUnits = addProjection(ordinaryUnits, units);\n compactBytes = addProjection(compactBytes, Buffer.byteLength(text));\n } else if (typeof current === \"string\") {\n const units = await payload(work, current);\n work.assertOpen();\n ordinaryUnits = addProjection(ordinaryUnits, units);\n compactBytes = addProjection(compactBytes, jsonStringBytes(current));\n } else {\n const keys = Array.isArray(current) ? Object.keys(current) : objectKeys(current);\n if (keys.length > yqCaps.maxCollectionSize) throw limit(\"LIMIT_MAX_COLLECTION_SIZE\");\n compactBytes = addProjection(compactBytes, 2 + Math.max(0, keys.length - 1));\n for (let index = keys.length - 1; index >= 0; index--) {\n const key = keys[index]!;\n if (!Array.isArray(current)) {\n const units = await payload(work, key);\n work.assertOpen();\n ordinaryUnits = addProjection(ordinaryUnits, units);\n compactBytes = addProjection(compactBytes, jsonStringBytes(key) + 1);\n }\n stack.push({ value: (current as Record<string, Json>)[key]!, depth: item.depth + 1 });\n }\n }\n if (compactBytes > yqCaps.maxValueBytes) throw limit(\"LIMIT_MAX_VALUE_BYTES\");\n }\n return Object.freeze({ nodes, compactBytes, maxDepth, ordinaryUnits });\n}\n\nasync function consumePayload(work: YqOwnedWork, reservation: ReturnType<YqOwnedWork[\"reserve\"]>, text: string): Promise<void> {\n const bytes = Buffer.byteLength(text);\n const units = bytes === 0 ? 0 : Math.ceil(bytes / 1024);\n for (let unit = 0; unit < units; unit++) {\n await reservation.beforeUnit();\n work.assertOpen();\n }\n}\n\nexport async function copyAlias(value: Json, ledger: YqLedger, work: YqOwnedWork): Promise<Json> {\n const descriptor = await estimateAlias(value, work);\n work.assertOpen();\n const projection = ledger.preflightAlias(descriptor);\n const reservation = work.reserve(descriptor.ordinaryUnits);\n ledger.commitAlias(projection);\n let completed = false;\n const copy = async (current: Json): Promise<Json> => {\n await reservation.beforeUnit();\n work.assertOpen();\n if (current === null || typeof current === \"boolean\") return current;\n if (typeof current === \"number\" || current instanceof Decimal) {\n await consumePayload(work, reservation, numberText(current));\n work.assertOpen();\n return current;\n }\n if (typeof current === \"string\") {\n await consumePayload(work, reservation, current);\n work.assertOpen();\n return current;\n }\n if (Array.isArray(current)) {\n const result: Json[] = [];\n for (const child of current) {\n const copied = await copy(child);\n work.assertOpen();\n result.push(copied);\n }\n return result;\n }\n const result = object();\n for (const key of objectKeys(current)) {\n await consumePayload(work, reservation, key);\n work.assertOpen();\n const copied = await copy(current[key]!);\n work.assertOpen();\n put(result, key, copied);\n }\n return result;\n };\n try {\n const result = await copy(value);\n work.assertOpen();\n reservation.finish();\n work.assertOpen();\n completed = true;\n return result;\n } finally {\n if (!completed) reservation.abandon();\n }\n}\n\nexport function aliasFailure(code: \"ALIAS_UNDEFINED\" | \"ALIAS_FORWARD\" | \"ALIAS_CURRENT_NODE\" | \"ALIAS_CYCLE\"): YqError {\n return new YqError(\"alias\", code, 5);\n}\n", "import { JqLimitError, type JqLimits } from \"../structured/limits.js\";\n\nexport type YqCategory = \"cli\" | \"query\" | \"input\" | \"schema\" | \"alias\" | \"limit\" | \"vfs\" | \"encode\";\n\nexport type YqCode =\n | \"CLI_ARGV_ENTRIES_LIMIT\" | \"CLI_ARGV_BYTES_LIMIT\" | \"CLI_INVALID_UNICODE\" | \"CLI_INFO_COMBINATION\"\n | \"CLI_UNSUPPORTED_COMMAND\" | \"CLI_MISSING_OPTION_VALUE\" | \"CLI_INVALID_OPTION_VALUE\" | \"CLI_UNSUPPORTED_OPTION\"\n | \"CLI_UNKNOWN_OPTION\" | \"CLI_DUPLICATE_OPTION\" | \"CLI_INCOMPATIBLE_OPTIONS\" | \"CLI_DUPLICATE_STDIN\"\n | \"CLI_VFS_OPERAND_LIMIT\" | \"QUERY_COMPILE_FAILED\" | \"QUERY_RUNTIME_FAILED\" | \"INPUT_INVALID_UTF8\"\n | \"INPUT_YAML_SYNTAX\" | \"INPUT_TOML_SYNTAX\" | \"INPUT_DOCUMENT_STRUCTURE\" | \"SCHEMA_UNSUPPORTED_DIRECTIVE\" | \"SCHEMA_UNSUPPORTED_TAG\"\n | \"SCHEMA_TAG_KIND_MISMATCH\" | \"SCHEMA_TAG_LEXEME_MISMATCH\" | \"SCHEMA_NONSTRING_KEY\" | \"SCHEMA_DUPLICATE_KEY\"\n | \"SCHEMA_PLAIN_MERGE_KEY\" | \"SCHEMA_NONFINITE_NUMBER\" | \"SCHEMA_UNSAFE_INTEGER\" | \"SCHEMA_DECIMAL_RANGE\"\n | \"ALIAS_UNDEFINED\" | \"ALIAS_FORWARD\" | \"ALIAS_CURRENT_NODE\" | \"ALIAS_CYCLE\" | \"ALIAS_DUPLICATE_ANCHOR\"\n | \"LIMIT_MAX_INPUT_BYTES\" | \"LIMIT_MAX_DOCUMENT_BYTES\" | \"LIMIT_MAX_VALUE_BYTES\" | \"LIMIT_MAX_SCALAR_BYTES\"\n | \"LIMIT_MAX_QUERY_SOURCE_BYTES\" | \"LIMIT_MAX_DEPTH\" | \"LIMIT_MAX_AST_DEPTH\" | \"LIMIT_MAX_STEPS\"\n | \"LIMIT_MAX_RESULTS\" | \"LIMIT_MAX_COLLECTION_SIZE\" | \"LIMIT_MAX_DOCUMENTS\" | \"LIMIT_MAX_ANCHORS_PER_DOCUMENT\"\n | \"LIMIT_MAX_ALIAS_REFERENCES\" | \"LIMIT_MAX_DOCUMENT_NODES\" | \"LIMIT_MAX_OUTPUT_BYTES\" | \"DIAGNOSTIC_TRUNCATED\"\n | \"VFS_INPUT_OPEN\" | \"VFS_INPUT_READ\" | \"ENCODE_UNSUPPORTED_VALUE\" | \"ENCODE_INVALID_UNICODE\" | \"ENCODE_CYCLIC_GRAPH\";\n\nexport class YqError extends Error {\n constructor(\n readonly category: YqCategory,\n readonly code: YqCode,\n readonly status: number,\n readonly source?: string,\n readonly line?: number,\n readonly column?: number,\n ) {\n super(`${category}: ${code}`);\n }\n}\n\nconst budgetLimits: Readonly<Record<keyof JqLimits, YqCode>> = Object.freeze({\n maxInputBytes: \"LIMIT_MAX_INPUT_BYTES\",\n maxValueBytes: \"LIMIT_MAX_VALUE_BYTES\",\n maxOutputBytes: \"LIMIT_MAX_OUTPUT_BYTES\",\n maxSourceBytes: \"LIMIT_MAX_QUERY_SOURCE_BYTES\",\n maxDepth: \"LIMIT_MAX_DEPTH\",\n maxAstDepth: \"LIMIT_MAX_AST_DEPTH\",\n maxSteps: \"LIMIT_MAX_STEPS\",\n maxResults: \"LIMIT_MAX_RESULTS\",\n maxCollectionSize: \"LIMIT_MAX_COLLECTION_SIZE\",\n});\n\nexport function fromJqLimit(error: JqLimitError): YqError {\n const prefix = error.message.slice(0, error.message.indexOf(\" \")) as keyof JqLimits;\n return new YqError(\"limit\", budgetLimits[prefix] ?? \"LIMIT_MAX_STEPS\", 5);\n}\n\nexport function limit(code: YqCode, source?: string, line?: number, column?: number): YqError {\n return new YqError(\"limit\", code, 5, source, line, column);\n}\n", "import { JqLimitError, objectKeys, wellFormed, type Json } from \"../structured/limits.js\";\nimport { Decimal, numberText } from \"../structured/numbers.js\";\nimport type { YqOwnedWork } from \"../structured/query-core.js\";\nimport { YqValueFailure } from \"../structured/query-core.js\";\n\nclass Fragments {\n readonly parts: string[] = [];\n bytes = 0;\n\n constructor(\n readonly work: YqOwnedWork,\n readonly maxBytes: number,\n ) {}\n\n async append(fragment: string): Promise<void> {\n const bytes = Buffer.byteLength(fragment);\n if (bytes > this.maxBytes - this.bytes) throw new JqLimitError(\"maxOutputBytes\");\n if (bytes > 0) await this.work.charge(Math.ceil(bytes / 1024));\n this.work.assertOpen();\n this.parts.push(fragment);\n this.bytes += bytes;\n }\n\n reserve(bytes: number): void {\n if (!Number.isSafeInteger(bytes) || bytes < 0 || bytes > this.maxBytes - this.bytes) {\n throw new JqLimitError(\"maxOutputBytes\");\n }\n this.bytes += bytes;\n }\n\n async appendReserved(fragment: string, bytes: number): Promise<void> {\n if (Buffer.byteLength(fragment) !== bytes) throw new Error(\"escaped fragment projection mismatch\");\n if (bytes > 0) await this.work.charge(Math.ceil(bytes / 1024));\n this.work.assertOpen();\n this.parts.push(fragment);\n }\n\n async indent(depth: number): Promise<void> {\n const bytes = depth * 2;\n if (!Number.isSafeInteger(bytes) || bytes > this.maxBytes - this.bytes) throw new JqLimitError(\"maxOutputBytes\");\n if (bytes > 0) await this.work.charge(Math.ceil(bytes / 1024));\n this.work.assertOpen();\n this.parts.push(\" \".repeat(depth));\n this.bytes += bytes;\n }\n\n finish(): string {\n this.work.assertOpen();\n return this.parts.join(\"\");\n }\n}\n\nfunction yamlEscape(codePoint: number): string {\n if (codePoint === 0) return \"\\\\u0000\";\n if (codePoint === 0x22) return \"\\\\\\\"\";\n if (codePoint === 0x5c) return \"\\\\\\\\\";\n if (codePoint === 0x08) return \"\\\\b\";\n if (codePoint === 0x09) return \"\\\\t\";\n if (codePoint === 0x0a) return \"\\\\n\";\n if (codePoint === 0x0c) return \"\\\\f\";\n if (codePoint === 0x0d) return \"\\\\r\";\n if (codePoint === 0x1b) return \"\\\\e\";\n if (codePoint < 0x20 || codePoint === 0x7f || codePoint >= 0x80 && codePoint <= 0x9f || codePoint === 0xfffe || codePoint === 0xffff) {\n if (codePoint <= 0xffff) return `\\\\u${codePoint.toString(16).padStart(4, \"0\")}`;\n return `\\\\U${codePoint.toString(16).padStart(8, \"0\")}`;\n }\n return String.fromCodePoint(codePoint);\n}\n\nfunction yamlEscapedBytes(codePoint: number): number {\n if (codePoint === 0 || codePoint < 0x20 && ![0x08, 0x09, 0x0a, 0x0c, 0x0d, 0x1b].includes(codePoint)\n || codePoint === 0x7f || codePoint >= 0x80 && codePoint <= 0x9f || codePoint === 0xfffe || codePoint === 0xffff) return 6;\n if (codePoint === 0x22 || codePoint === 0x5c || codePoint === 0x08 || codePoint === 0x09 || codePoint === 0x0a\n || codePoint === 0x0c || codePoint === 0x0d || codePoint === 0x1b) return 2;\n return codePoint <= 0x7f ? 1 : codePoint <= 0x7ff ? 2 : codePoint <= 0xffff ? 3 : 4;\n}\n\nasync function quoted(text: string, output: Fragments): Promise<void> {\n if (!wellFormed(text)) throw new YqValueFailure(\"ENCODE_INVALID_UNICODE\");\n await output.append('\"');\n for (let start = 0; start < text.length;) {\n let end = start;\n let codePoints = 0;\n let projectedBytes = 0;\n while (end < text.length && codePoints < 256) {\n const codePoint = text.codePointAt(end)!;\n projectedBytes += yamlEscapedBytes(codePoint);\n end += codePoint > 0xffff ? 2 : 1;\n codePoints++;\n }\n output.reserve(projectedBytes);\n let fragment = \"\";\n for (let index = start; index < end;) {\n const codePoint = text.codePointAt(index)!;\n fragment += yamlEscape(codePoint);\n index += codePoint > 0xffff ? 2 : 1;\n }\n await output.work.charge(codePoints);\n output.work.assertOpen();\n await output.appendReserved(fragment, projectedBytes);\n output.work.assertOpen();\n start = end;\n }\n output.work.assertOpen();\n await output.append('\"');\n}\n\nfunction isCollection(value: Json): value is Json[] | Record<string, Json> {\n return value !== null && typeof value === \"object\" && !(value instanceof Decimal);\n}\n\nfunction nonemptyCollection(value: Json): boolean {\n if (!isCollection(value)) return false;\n return Array.isArray(value) ? value.length > 0 : objectKeys(value).length > 0;\n}\n\nasync function inline(value: Json, output: Fragments): Promise<void> {\n await output.work.charge(1);\n output.work.assertOpen();\n if (value === null || typeof value === \"boolean\") await output.append(JSON.stringify(value));\n else if (typeof value === \"number\" || value instanceof Decimal) {\n const numeric = value instanceof Decimal ? value.double : value;\n if (!Number.isFinite(numeric)) throw new YqValueFailure(\"SCHEMA_NONFINITE_NUMBER\");\n if (Number.isInteger(numeric) && !Number.isSafeInteger(numeric)) throw new YqValueFailure(\"SCHEMA_UNSAFE_INTEGER\");\n await output.append(numberText(value));\n } else if (typeof value === \"string\") await quoted(value, output);\n else if (Array.isArray(value) && value.length === 0) await output.append(\"[]\");\n else if (!Array.isArray(value) && objectKeys(value).length === 0) await output.append(\"{}\");\n else throw new YqValueFailure(\"ENCODE_UNSUPPORTED_VALUE\");\n}\n\nasync function mappingBlock(value: Record<string, Json>, output: Fragments, depth: number, firstInline: boolean): Promise<void> {\n const keys = objectKeys(value);\n for (let index = 0; index < keys.length; index++) {\n if (index > 0) await output.append(\"\\n\");\n if (!(firstInline && index === 0)) await output.indent(depth);\n await quoted(keys[index]!, output);\n await output.append(\":\");\n const item = value[keys[index]!]!;\n if (nonemptyCollection(item)) {\n await output.append(\"\\n\");\n await block(item, output, depth + 1);\n } else {\n await output.append(\" \");\n await inline(item, output);\n }\n }\n}\n\nasync function block(value: Json, output: Fragments, depth: number): Promise<void> {\n await output.work.charge(1);\n output.work.assertOpen();\n if (!nonemptyCollection(value)) {\n await output.indent(depth);\n await inline(value, output);\n return;\n }\n if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index++) {\n if (index > 0) await output.append(\"\\n\");\n await output.indent(depth);\n await output.append(\"-\");\n const item = value[index]!;\n if (isCollection(item) && !Array.isArray(item) && objectKeys(item).length > 0) {\n await output.work.charge(1);\n output.work.assertOpen();\n await output.append(\" \");\n await mappingBlock(item, output, depth + 1, true);\n } else if (nonemptyCollection(item)) {\n await output.append(\"\\n\");\n await block(item, output, depth + 1);\n } else {\n await output.append(\" \");\n await inline(item, output);\n }\n }\n return;\n }\n await mappingBlock(value as Record<string, Json>, output, depth, false);\n}\n\nexport async function encodeYaml(value: Json, work: YqOwnedWork, maxBytes: number): Promise<string> {\n if (!Number.isSafeInteger(maxBytes) || maxBytes < 0) throw new RangeError(\"maxBytes must be a nonnegative safe integer\");\n const output = new Fragments(work, maxBytes);\n if (nonemptyCollection(value)) await block(value, output, 0);\n else await inline(value, output);\n work.assertOpen();\n return output.finish();\n}\n\nexport async function encodeJson(value: Json, work: YqOwnedWork, pretty: boolean, maxBytes: number): Promise<string> {\n return work.stringifyJson(value, { pretty, maxBytes, limitName: \"maxOutputBytes\" });\n}\n\nexport async function encodeRaw(text: string, work: YqOwnedWork, maxBytes: number): Promise<string> {\n if (!wellFormed(text)) throw new YqValueFailure(\"ENCODE_INVALID_UNICODE\");\n let bytes = 0;\n let codePoints = 0;\n for (const character of text) {\n const incoming = Buffer.byteLength(character);\n if (incoming > maxBytes - bytes) throw new JqLimitError(\"maxOutputBytes\");\n bytes += incoming;\n codePoints++;\n if (codePoints === 256) {\n await work.charge(codePoints);\n work.assertOpen();\n codePoints = 0;\n }\n }\n if (codePoints > 0) await work.charge(codePoints);\n work.assertOpen();\n if (bytes > 0) await work.charge(Math.ceil(bytes / 1024));\n work.assertOpen();\n return text;\n}\n", "import { object, objectKeys, put, wellFormed, type Json } from \"../structured/limits.js\";\nimport { Decimal, isNumber, numberText } from \"../structured/numbers.js\";\nimport type { YqOwnedWork } from \"../structured/query-core.js\";\nimport { aliasFailure, copyAlias, YqLedger, yqCaps } from \"./accounting.js\";\nimport { YqError, limit, type YqCode } from \"./errors.js\";\n\ntype ScalarStyle = \"plain\" | \"single\" | \"double\" | \"literal\" | \"folded\";\n\ninterface ParsedNode {\n readonly value: Json;\n readonly style?: ScalarStyle;\n readonly explicitTag?: string;\n readonly raw?: string;\n}\n\ninterface SourceLine {\n readonly text: string;\n readonly number: number;\n readonly rawBytes: number;\n readonly hadBreak: boolean;\n}\n\ninterface RawDocument {\n readonly lines: SourceLine[];\n readonly explicit: boolean;\n readonly rawBytes: number;\n}\n\ninterface AnchorRecord {\n readonly name: string;\n pending: boolean;\n value?: Json;\n}\n\ninterface BlockScalarPart {\n readonly lineText: string;\n readonly contentIndent: number;\n readonly empty: boolean;\n readonly moreIndented: boolean;\n readonly hadBreak: boolean;\n}\n\nconst integerPattern = /^(?:[+-]?[0-9]+|0o[0-7]+|0x[0-9a-fA-F]+)$/u;\nconst floatPattern = /^[+-]?(?:(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?|\\.(?:inf|Inf|INF|nan|NaN|NAN))$/u;\n\nfunction syntax(line?: number, column?: number): YqError {\n return new YqError(\"input\", \"INPUT_YAML_SYNTAX\", 5, undefined, line, column);\n}\n\nfunction structure(line?: number, column?: number): YqError {\n return new YqError(\"input\", \"INPUT_DOCUMENT_STRUCTURE\", 5, undefined, line, column);\n}\n\nfunction schema(code: YqCode, line?: number, column?: number): YqError {\n return new YqError(\"schema\", code, 5, undefined, line, column);\n}\n\nfunction countCodePoints(text: string): number {\n let count = 0;\n for (const unused of text) {\n void unused;\n count++;\n }\n return count;\n}\n\nfunction utf8Width(codePoint: number): number {\n return codePoint <= 0x7f ? 1 : codePoint <= 0x7ff ? 2 : codePoint <= 0xffff ? 3 : 4;\n}\n\nfunction compactStringBytes(text: string): number {\n let bytes = 2;\n for (const character of text) {\n const point = character.codePointAt(0)!;\n if (point === 0x22 || point === 0x5c || point === 0x08 || point === 0x0c || point === 0x0a || point === 0x0d || point === 0x09) bytes += 2;\n else if (point < 0x20) bytes += 6;\n else bytes += Buffer.byteLength(character);\n }\n return bytes;\n}\n\nfunction compactScalarBytes(value: Json): number {\n if (typeof value === \"string\") return compactStringBytes(value);\n if (isNumber(value)) return Buffer.byteLength(numberText(value));\n return Buffer.byteLength(JSON.stringify(value));\n}\n\nfunction indentation(line: string): number {\n let index = 0;\n while (line[index] === \" \") index++;\n if (line[index] === \"\\t\") throw syntax();\n return index;\n}\n\nfunction stripComment(text: string): string {\n let single = false;\n let double = false;\n let escaped = false;\n let flowDepth = 0;\n for (let index = 0; index < text.length; index++) {\n const character = text[index]!;\n if (double) {\n if (escaped) escaped = false;\n else if (character === \"\\\\\") escaped = true;\n else if (character === '\"') double = false;\n continue;\n }\n if (single) {\n if (character === \"'\" && text[index + 1] === \"'\") index++;\n else if (character === \"'\") single = false;\n continue;\n }\n if (character === '\"') double = true;\n else if (character === \"'\") single = true;\n else if (character === \"[\" || character === \"{\") flowDepth++;\n else if (character === \"]\" || character === \"}\") flowDepth--;\n else if (character === \"#\" && (index === 0 || /[ \\t\\r\\n]/u.test(text[index - 1]!))) {\n return flowDepth > 0 ? text.trimEnd() : text.slice(0, index).trimEnd();\n }\n }\n return single || double ? text : text.trimEnd();\n}\n\nfunction mappingColon(text: string, flow = false): number {\n let single = false;\n let double = false;\n let escaped = false;\n let depth = 0;\n for (let index = 0; index < text.length; index++) {\n const character = text[index]!;\n if (double) {\n if (escaped) escaped = false;\n else if (character === \"\\\\\") escaped = true;\n else if (character === '\"') double = false;\n continue;\n }\n if (single) {\n if (character === \"'\" && text[index + 1] === \"'\") index++;\n else if (character === \"'\") single = false;\n continue;\n }\n if (character === '\"') double = true;\n else if (character === \"'\") single = true;\n else if (character === \"[\" || character === \"{\") depth++;\n else if (character === \"]\" || character === \"}\") depth--;\n else if (character === \":\" && depth === 0 && (flow || index + 1 === text.length || /[ \\t]/u.test(text[index + 1]!))) return index;\n }\n return -1;\n}\n\nfunction checkedExponent(text: string): number {\n let index = 0;\n let negative = false;\n if (text[index] === \"+\" || text[index] === \"-\") {\n negative = text[index] === \"-\";\n index++;\n }\n let value = 0;\n for (; index < text.length; index++) {\n const digit = text.charCodeAt(index) - 48;\n if (digit < 0 || digit > 9) throw syntax();\n value = value > 2_000_000_000 ? 2_000_000_001 : value * 10 + digit;\n }\n return negative ? -value : value;\n}\n\nfunction decimalText(digits: string, exponent: number, negative: boolean): string {\n const sign = negative ? \"-\" : \"\";\n const adjusted = exponent + digits.length - 1;\n if (exponent > 0 || adjusted < -6) {\n return `${sign}${digits[0]}${digits.length > 1 ? `.${digits.slice(1)}` : \"\"}E${adjusted >= 0 ? \"+\" : \"\"}${adjusted}`;\n }\n const point = digits.length + exponent;\n if (point <= 0) return `${sign}0.${\"0\".repeat(-point)}${digits}`;\n return `${sign}${digits.slice(0, point)}${point < digits.length ? `.${digits.slice(point)}` : \"\"}`;\n}\n\nfunction exactSafeIntegral(digits: string, exponent: number): boolean {\n if (digits === \"0\" || exponent < 0) return true;\n const length = digits.length + exponent;\n if (length < 16) return true;\n if (length > 16) return false;\n const boundary = \"9007199254740991\";\n for (let index = 0; index < digits.length; index++) {\n if (digits[index]! < boundary[index]!) return true;\n if (digits[index]! > boundary[index]!) return false;\n }\n for (let index = digits.length; index < boundary.length; index++) if (boundary[index] !== \"0\") return true;\n return true;\n}\n\nfunction parseDecimal(raw: string): Decimal {\n const negative = raw[0] === \"-\";\n const unsigned = raw[0] === \"+\" || raw[0] === \"-\" ? raw.slice(1) : raw;\n const exponentMarker = unsigned.search(/[eE]/u);\n const coefficient = exponentMarker < 0 ? unsigned : unsigned.slice(0, exponentMarker);\n const explicit = exponentMarker < 0 ? 0 : checkedExponent(unsigned.slice(exponentMarker + 1));\n const point = coefficient.indexOf(\".\");\n const fractional = point < 0 ? 0 : coefficient.length - point - 1;\n let exponent = explicit - fractional;\n let digits = coefficient.replace(\".\", \"\").replace(/^0+/u, \"\") || \"0\";\n if (digits !== \"0\") {\n let trailing = 0;\n while (digits.length - trailing > 1 && digits[digits.length - trailing - 1] === \"0\") trailing++;\n if (trailing > 0) {\n digits = digits.slice(0, -trailing);\n exponent += trailing;\n }\n }\n if (exponent < -1_147_483_646 || exponent > 999_999_999) throw schema(\"SCHEMA_DECIMAL_RANGE\");\n if (!exactSafeIntegral(digits, exponent)) throw schema(\"SCHEMA_UNSAFE_INTEGER\");\n const text = decimalText(digits, exponent, negative);\n const double = Number(`${negative ? \"-\" : \"\"}${digits}e${exponent}`);\n if (!Number.isFinite(double)) throw schema(\"SCHEMA_NONFINITE_NUMBER\");\n if (Number.isInteger(double) && !Number.isSafeInteger(double)) throw schema(\"SCHEMA_UNSAFE_INTEGER\");\n return new Decimal(digits, exponent, negative, text, double);\n}\n\nfunction parseBasedInteger(raw: string): number {\n const negative = raw[0] === \"-\";\n const unsigned = raw[0] === \"+\" || raw[0] === \"-\" ? raw.slice(1) : raw;\n const base = unsigned.startsWith(\"0x\") ? 16 : unsigned.startsWith(\"0o\") ? 8 : 10;\n const digits = base === 10 ? unsigned : unsigned.slice(2);\n let value = 0;\n for (const character of digits) {\n const digit = Number.parseInt(character, base);\n if (value > Math.floor((Number.MAX_SAFE_INTEGER - digit) / base)) throw schema(\"SCHEMA_UNSAFE_INTEGER\");\n value = value * base + digit;\n }\n return negative ? -value : value;\n}\n\nfunction scalarFromPlain(raw: string, explicitTag?: string): Json {\n if (explicitTag === \"str\") return raw;\n const nullMatch = /^(?:~|null|Null|NULL)$/u.test(raw);\n const boolMatch = /^(?:true|True|TRUE|false|False|FALSE)$/u.test(raw);\n const intMatch = integerPattern.test(raw);\n const floatMatch = floatPattern.test(raw);\n if (explicitTag === \"null\") {\n if (!nullMatch) throw schema(\"SCHEMA_TAG_LEXEME_MISMATCH\");\n return null;\n }\n if (explicitTag === \"bool\") {\n if (!boolMatch) throw schema(\"SCHEMA_TAG_LEXEME_MISMATCH\");\n return /^true$/iu.test(raw);\n }\n if (explicitTag === \"int\") {\n if (!intMatch) throw schema(\"SCHEMA_TAG_LEXEME_MISMATCH\");\n return parseBasedInteger(raw);\n }\n if (explicitTag === \"float\") {\n if (!(floatMatch || intMatch && /^[+-]?[0-9]+$/u.test(raw))) throw schema(\"SCHEMA_TAG_LEXEME_MISMATCH\");\n if (/^[+-]?\\.(?:inf|Inf|INF|nan|NaN|NAN)$/u.test(raw)) throw schema(\"SCHEMA_NONFINITE_NUMBER\");\n return parseDecimal(raw);\n }\n if (nullMatch) return null;\n if (boolMatch) return /^true$/iu.test(raw);\n if (intMatch) return parseBasedInteger(raw);\n if (floatMatch) {\n if (/^[+-]?\\.(?:inf|Inf|INF|nan|NaN|NAN)$/u.test(raw)) throw schema(\"SCHEMA_NONFINITE_NUMBER\");\n return parseDecimal(raw);\n }\n return raw;\n}\n\nfunction normalizeTag(raw: string): string {\n const expanded = raw.startsWith(\"!!\") ? `tag:yaml.org,2002:${raw.slice(2)}` : raw.startsWith(\"!<\") && raw.endsWith(\">\") ? raw.slice(2, -1) : raw;\n if (expanded === \"!\") throw schema(\"SCHEMA_UNSUPPORTED_TAG\");\n const prefix = \"tag:yaml.org,2002:\";\n if (!expanded.startsWith(prefix)) throw schema(\"SCHEMA_UNSUPPORTED_TAG\");\n const name = expanded.slice(prefix.length);\n if (![\"map\", \"seq\", \"str\", \"null\", \"bool\", \"int\", \"float\"].includes(name)) throw schema(\"SCHEMA_UNSUPPORTED_TAG\");\n return name;\n}\n\nfunction scanQuotedWhitespace(raw: string, start: number, end: number): { end: number; breaks: number } {\n let position = start;\n let breaks = 0;\n while (position < end) {\n const character = raw[position]!;\n if (character === \"\\r\" || character === \"\\n\") {\n breaks++;\n if (character === \"\\r\" && position + 1 < end && raw[position + 1] === \"\\n\") position++;\n } else if (character !== \" \" && character !== \"\\t\") break;\n position++;\n }\n return { end: position, breaks };\n}\n\nfunction decodeDouble(raw: string): string {\n let result = \"\";\n for (let index = 1; index < raw.length - 1; index++) {\n const character = raw[index]!;\n if (\" \\t\\r\\n\".includes(character)) {\n const whitespace = scanQuotedWhitespace(raw, index, raw.length - 1);\n result += whitespace.breaks === 0 ? raw.slice(index, whitespace.end)\n : whitespace.breaks === 1 ? \" \" : \"\\n\".repeat(whitespace.breaks - 1);\n index = whitespace.end - 1;\n continue;\n }\n if (character !== \"\\\\\") {\n const codePoint = raw.codePointAt(index)!;\n if (codePoint === 0) throw syntax();\n result += String.fromCodePoint(codePoint);\n if (codePoint > 0xffff) index++;\n continue;\n }\n const escape = raw[++index];\n if (escape === undefined) throw syntax();\n const simple: Record<string, string> = {\n \"0\": \"\\0\", a: \"\\x07\", b: \"\\b\", t: \"\\t\", \"\\t\": \"\\t\", n: \"\\n\", v: \"\\x0b\", f: \"\\f\", r: \"\\r\",\n e: \"\\x1b\", \" \": \" \", '\"': '\"', \"/\": \"/\", \"\\\\\": \"\\\\\", N: \"\\u0085\", _: \"\\u00a0\", L: \"\\u2028\", P: \"\\u2029\",\n };\n if (Object.hasOwn(simple, escape)) {\n result += simple[escape]!;\n continue;\n }\n if (escape === \"\\n\" || escape === \"\\r\") {\n const whitespace = scanQuotedWhitespace(raw, index, raw.length - 1);\n result += \"\\n\".repeat(whitespace.breaks - 1);\n index = whitespace.end - 1;\n continue;\n }\n const digits = escape === \"x\" ? 2 : escape === \"u\" ? 4 : escape === \"U\" ? 8 : 0;\n if (digits === 0) throw syntax();\n const hex = raw.slice(index + 1, index + 1 + digits);\n if (hex.length !== digits || !/^[0-9a-fA-F]+$/u.test(hex)) throw syntax();\n let codePoint = Number.parseInt(hex, 16);\n index += digits;\n if (escape === \"u\" && codePoint >= 0xd800 && codePoint <= 0xdbff) {\n const next = raw.slice(index + 1, index + 7);\n if (!/^\\\\u[0-9a-fA-F]{4}$/u.test(next)) throw syntax();\n const low = Number.parseInt(next.slice(2), 16);\n if (low < 0xdc00 || low > 0xdfff) throw syntax();\n codePoint = 0x10000 + (codePoint - 0xd800) * 0x400 + low - 0xdc00;\n index += 6;\n } else if (codePoint >= 0xd800 && codePoint <= 0xdfff) throw syntax();\n if (codePoint > 0x10ffff) throw syntax();\n result += String.fromCodePoint(codePoint);\n }\n if (!wellFormed(result)) throw syntax();\n return result;\n}\n\nfunction projectDoubleBytes(raw: string, start = 0, end = raw.length): number {\n let bytes = 0;\n for (let index = start + 1; index < end - 1; index++) {\n const character = raw[index]!;\n if (\" \\t\\r\\n\".includes(character)) {\n const whitespace = scanQuotedWhitespace(raw, index, end - 1);\n bytes += whitespace.breaks === 0 ? whitespace.end - index : Math.max(1, whitespace.breaks - 1);\n index = whitespace.end - 1;\n continue;\n }\n if (character !== \"\\\\\") {\n const codePoint = raw.codePointAt(index)!;\n if (codePoint === 0) throw syntax();\n bytes += utf8Width(codePoint);\n if (codePoint > 0xffff) index++;\n continue;\n }\n const escape = raw[++index];\n if (escape === undefined) throw syntax();\n const simpleWidths: Readonly<Record<string, number>> = {\n \"0\": 1, a: 1, b: 1, t: 1, \"\\t\": 1, n: 1, v: 1, f: 1, r: 1,\n e: 1, \" \": 1, '\"': 1, \"/\": 1, \"\\\\\": 1, N: 2, _: 2, L: 3, P: 3,\n };\n if (Object.hasOwn(simpleWidths, escape)) {\n bytes += simpleWidths[escape]!;\n continue;\n }\n if (escape === \"\\n\" || escape === \"\\r\") {\n const whitespace = scanQuotedWhitespace(raw, index, end - 1);\n bytes += whitespace.breaks - 1;\n index = whitespace.end - 1;\n continue;\n }\n const digits = escape === \"x\" ? 2 : escape === \"u\" ? 4 : escape === \"U\" ? 8 : 0;\n if (digits === 0) throw syntax();\n const hex = raw.slice(index + 1, index + 1 + digits);\n if (hex.length !== digits || !/^[0-9a-fA-F]+$/u.test(hex)) throw syntax();\n let codePoint = Number.parseInt(hex, 16);\n index += digits;\n if (escape === \"u\" && codePoint >= 0xd800 && codePoint <= 0xdbff) {\n const next = raw.slice(index + 1, index + 7);\n if (!/^\\\\u[0-9a-fA-F]{4}$/u.test(next)) throw syntax();\n const low = Number.parseInt(next.slice(2), 16);\n if (low < 0xdc00 || low > 0xdfff) throw syntax();\n codePoint = 0x10000 + (codePoint - 0xd800) * 0x400 + low - 0xdc00;\n index += 6;\n } else if (codePoint >= 0xd800 && codePoint <= 0xdfff) throw syntax();\n if (codePoint > 0x10ffff) throw syntax();\n bytes += utf8Width(codePoint);\n }\n return bytes;\n}\n\nfunction decodeSingle(raw: string): string {\n let result = \"\";\n for (let index = 1; index < raw.length - 1; index++) {\n const character = raw[index]!;\n if (\" \\t\\r\\n\".includes(character)) {\n const whitespace = scanQuotedWhitespace(raw, index, raw.length - 1);\n result += whitespace.breaks === 0 ? raw.slice(index, whitespace.end)\n : whitespace.breaks === 1 ? \" \" : \"\\n\".repeat(whitespace.breaks - 1);\n index = whitespace.end - 1;\n } else {\n result += character;\n if (character === \"'\" && raw[index + 1] === \"'\") index++;\n }\n }\n return result;\n}\n\nfunction projectSingleBytes(raw: string, start = 0, end = raw.length): number {\n let bytes = 0;\n for (let index = start + 1; index < end - 1; index++) {\n const character = raw[index]!;\n if (character === \"'\" && raw[index + 1] === \"'\") {\n bytes++;\n index++;\n } else if (\" \\t\\r\\n\".includes(character)) {\n const whitespace = scanQuotedWhitespace(raw, index, end - 1);\n bytes += whitespace.breaks === 0 ? whitespace.end - index : Math.max(1, whitespace.breaks - 1);\n index = whitespace.end - 1;\n } else {\n const codePoint = raw.codePointAt(index)!;\n bytes += utf8Width(codePoint);\n if (codePoint > 0xffff) index++;\n }\n }\n return bytes;\n}\n\nfunction plainBounds(source: string, start: number, end: number): readonly [number, number] {\n while (start < end && /\\s/u.test(source[start]!)) start++;\n while (end > start && /\\s/u.test(source[end - 1]!)) end--;\n return [start, end];\n}\n\nfunction projectPlainBytes(source: string, start: number, end: number): number {\n [start, end] = plainBounds(source, start, end);\n let bytes = 0;\n for (let index = start; index < end;) {\n if (source[index] === \"\\n\") {\n index++;\n while (index < end && (source[index] === \" \" || source[index] === \"\\t\")) index++;\n bytes++;\n continue;\n }\n const codePoint = source.codePointAt(index)!;\n bytes += utf8Width(codePoint);\n index += codePoint > 0xffff ? 2 : 1;\n }\n return bytes;\n}\n\nfunction blockPartText(part: BlockScalarPart): string {\n return part.empty ? \"\" : part.lineText.slice(part.contentIndent);\n}\n\nfunction blockPartBytes(part: BlockScalarPart): number {\n if (part.empty) return 0;\n let bytes = 0;\n for (let index = part.contentIndent; index < part.lineText.length;) {\n const codePoint = part.lineText.codePointAt(index)!;\n bytes += utf8Width(codePoint);\n index += codePoint > 0xffff ? 2 : 1;\n }\n return bytes;\n}\n\nfunction blockScalarUnchomped(parts: readonly BlockScalarPart[], style: \"literal\" | \"folded\"): string {\n if (style === \"literal\") {\n let value = parts.map(blockPartText).join(\"\\n\");\n if (parts.at(-1)?.hadBreak) value += \"\\n\";\n return value;\n }\n let value = \"\";\n for (let index = 0; index < parts.length; index++) {\n const current = parts[index]!;\n value += blockPartText(current);\n if (index < parts.length - 1) {\n const next = parts[index + 1]!;\n if (current.empty) value += next.empty ? \"\\n\" : \"\";\n else value += next.empty || current.moreIndented || next.moreIndented ? \"\\n\" : \" \";\n } else if (current.hadBreak) value += \"\\n\";\n }\n return value;\n}\n\nfunction projectBlockScalarBytes(parts: readonly BlockScalarPart[], style: \"literal\" | \"folded\", chomping: string): number {\n let bytes = 0;\n let trailingBreaks = 0;\n const addPart = (part: BlockScalarPart): void => {\n bytes += blockPartBytes(part);\n if (!part.empty) trailingBreaks = 0;\n };\n const addBreak = (): void => {\n bytes++;\n trailingBreaks++;\n };\n if (style === \"literal\") {\n for (let index = 0; index < parts.length; index++) {\n if (index > 0) addBreak();\n addPart(parts[index]!);\n }\n if (parts.at(-1)?.hadBreak) addBreak();\n } else {\n for (let index = 0; index < parts.length; index++) {\n const current = parts[index]!;\n addPart(current);\n if (index < parts.length - 1) {\n const next = parts[index + 1]!;\n if (current.empty && next.empty || !current.empty && (next.empty || current.moreIndented || next.moreIndented)) addBreak();\n else if (!current.empty) {\n bytes++;\n trailingBreaks = 0;\n }\n } else if (current.hadBreak) addBreak();\n }\n }\n if (chomping === \"+\") return bytes;\n const hasContent = parts.some(item => !item.empty);\n return bytes - trailingBreaks + (chomping === \"clip\" && hasContent && parts.at(-1)?.hadBreak ? 1 : 0);\n}\n\nfunction buildBlockScalar(parts: readonly BlockScalarPart[], style: \"literal\" | \"folded\", chomping: string): string {\n let value = blockScalarUnchomped(parts, style);\n const hasContent = parts.some(item => !item.empty);\n if (chomping === \"clip\") value = hasContent && parts.at(-1)?.hadBreak ? `${value.replace(/\\n+$/u, \"\")}\\n` : value.replace(/\\n+$/u, \"\");\n if (chomping === \"-\") value = value.replace(/\\n+$/u, \"\");\n return value;\n}\n\nclass FlowParser {\n #position = 0;\n\n constructor(\n readonly source: string,\n readonly composer: Composer,\n readonly line: number,\n ) {}\n\n async parse(): Promise<ParsedNode> {\n const node = await this.#node();\n this.#space();\n if (this.#position !== this.source.length) throw syntax(this.line, this.#position + 1);\n return node;\n }\n\n async #node(keyMode = false): Promise<ParsedNode> {\n this.#space();\n let tag: string | undefined;\n let anchor: string | undefined;\n while (true) {\n if (this.source.startsWith(\"!!\", this.#position)) {\n if (tag !== undefined) throw syntax(this.line, this.#position + 1);\n const match = /^!![^\\s,\\[\\]{}]+/u.exec(this.source.slice(this.#position));\n if (!match) throw syntax(this.line, this.#position + 1);\n tag = normalizeTag(match[0]);\n this.#position += match[0].length;\n this.#space();\n } else if (this.source.startsWith(\"!<\", this.#position)) {\n if (tag !== undefined) throw syntax(this.line, this.#position + 1);\n const end = this.source.indexOf(\">\", this.#position + 2);\n if (end < 0) throw syntax(this.line, this.#position + 1);\n tag = normalizeTag(this.source.slice(this.#position, end + 1));\n this.#position = end + 1;\n this.#space();\n } else if (this.source[this.#position] === \"!\") {\n throw schema(\"SCHEMA_UNSUPPORTED_TAG\", this.line, this.#position + 1);\n } else if (this.source[this.#position] === \"&\") {\n if (anchor !== undefined) throw syntax(this.line, this.#position + 1);\n const match = /^&([^\\s,\\[\\]{}]+)/u.exec(this.source.slice(this.#position));\n if (!match) throw syntax(this.line, this.#position + 1);\n anchor = match[1]!;\n this.#position += match[0].length;\n this.#space();\n } else break;\n }\n const record = anchor === undefined ? undefined : this.composer.beginAnchor(anchor);\n let parsed: ParsedNode;\n const character = this.source[this.#position];\n if (character === \"[\") parsed = await this.#sequence();\n else if (character === \"{\") parsed = await this.#mapping();\n else if (character === '\"' || character === \"'\") parsed = await this.#quoted();\n else if (character === \"*\") parsed = await this.#alias();\n else if (character === undefined && tag !== undefined) {\n await this.composer.scalar(\"\", null);\n parsed = { value: null, style: \"plain\", raw: \"\" };\n } else parsed = await this.#plain(keyMode);\n parsed = await this.composer.applyTag(parsed, tag);\n if (record) this.composer.completeAnchor(record, parsed.value);\n return { ...parsed, ...(tag === undefined ? {} : { explicitTag: tag }) };\n }\n\n async #sequence(): Promise<ParsedNode> {\n this.composer.enterCollection();\n try {\n this.#position++;\n await this.composer.node();\n this.composer.collection();\n const result: Json[] = [];\n this.#space();\n if (this.source[this.#position] === \"]\") {\n this.#position++;\n return { value: result };\n }\n while (true) {\n this.composer.member(result.length + 1);\n this.composer.member(1);\n const start = this.#position;\n let value = await this.#node();\n this.#space();\n if (this.source[this.#position] === \":\") {\n if (this.source.slice(start, this.#position).includes(\"\\n\")) throw syntax(this.line, this.#position + 1);\n this.#position++;\n this.composer.enterCollection();\n try {\n const mapped = await this.#node();\n await this.composer.node();\n this.composer.collection();\n const pair = object();\n this.composer.mappingEntry(pair, value, mapped.value, true, true);\n value = { value: pair };\n } finally { this.composer.leaveCollection(); }\n }\n result.push(value.value);\n this.#space();\n if (this.source[this.#position] === \"]\") {\n this.#position++;\n return { value: result };\n }\n if (this.source[this.#position] !== \",\") throw syntax(this.line, this.#position + 1);\n this.#position++;\n this.#space();\n if (this.source[this.#position] === \"]\") {\n this.#position++;\n return { value: result };\n }\n }\n } finally { this.composer.leaveCollection(); }\n }\n\n async #mapping(): Promise<ParsedNode> {\n this.composer.enterCollection();\n try {\n this.#position++;\n await this.composer.node();\n this.composer.collection();\n const result = object();\n let members = 0;\n this.#space();\n if (this.source[this.#position] === \"}\") {\n this.#position++;\n return { value: result };\n }\n while (true) {\n this.composer.member(++members);\n const key = await this.#node(true);\n this.#space();\n if (this.source[this.#position] !== \":\") throw syntax(this.line, this.#position + 1);\n this.#position++;\n const value = await this.#node();\n this.composer.mappingEntry(result, key, value.value, true, true);\n this.#space();\n if (this.source[this.#position] === \"}\") {\n this.#position++;\n return { value: result };\n }\n if (this.source[this.#position] !== \",\") throw syntax(this.line, this.#position + 1);\n this.#position++;\n this.#space();\n if (this.source[this.#position] === \"}\") {\n this.#position++;\n return { value: result };\n }\n }\n } finally { this.composer.leaveCollection(); }\n }\n\n async #quoted(): Promise<ParsedNode> {\n const quote = this.source[this.#position]!;\n const start = this.#position++;\n let escaped = false;\n while (this.#position < this.source.length) {\n const character = this.source[this.#position++]!;\n if (quote === '\"') {\n if (!escaped && character === '\"') break;\n if (!escaped && character === \"\\\\\") escaped = true;\n else escaped = false;\n } else if (character === \"'\" && this.source[this.#position] === \"'\") this.#position++;\n else if (character === \"'\") break;\n }\n if (this.source[this.#position - 1] !== quote) throw syntax(this.line, start + 1);\n const projectedBytes = quote === '\"'\n ? projectDoubleBytes(this.source, start, this.#position)\n : projectSingleBytes(this.source, start, this.#position);\n this.composer.admitScalar(projectedBytes);\n const raw = this.source.slice(start, this.#position);\n const value = quote === '\"' ? decodeDouble(raw) : decodeSingle(raw);\n await this.composer.scalar(value, value, true);\n return { value, style: quote === '\"' ? \"double\" : \"single\" };\n }\n\n async #alias(): Promise<ParsedNode> {\n const match = /^\\*([^\\s,\\[\\]{}]+)/u.exec(this.source.slice(this.#position));\n if (!match) throw syntax(this.line, this.#position + 1);\n this.#position += match[0].length;\n return { value: await this.composer.alias(match[1]!) };\n }\n\n async #plain(keyMode: boolean): Promise<ParsedNode> {\n const start = this.#position;\n let depth = 0;\n while (this.#position < this.source.length) {\n const character = this.source[this.#position]!;\n if (character === \"#\" && /[ \\t\\r\\n]/u.test(this.source[this.#position - 1] ?? \"\")) break;\n if (character === \"[\" || character === \"{\") depth++;\n if (character === \"]\" || character === \"}\") {\n if (depth === 0) break;\n depth--;\n }\n if (depth === 0 && (character === \",\" || character === \"]\" || character === \"}\")) break;\n if (depth === 0 && character === \":\" && (keyMode || /[\\s,\\]}]/u.test(this.source[this.#position + 1] ?? \"\"))) break;\n this.#position++;\n }\n const projectedBytes = projectPlainBytes(this.source, start, this.#position);\n this.composer.admitScalar(projectedBytes);\n const raw = this.source.slice(start, this.#position).trim().replace(/\\r?\\n[ \\t]*/gu, \" \");\n if (raw.length === 0) throw syntax(this.line, start + 1);\n const value = scalarFromPlain(raw);\n await this.composer.scalar(typeof value === \"string\" ? value : raw, value, true);\n return { value, style: \"plain\", raw };\n }\n\n #space(): void {\n while (this.#position < this.source.length) {\n const character = this.source[this.#position]!;\n if (/[ \\t\\r\\n]/u.test(character)) this.#position++;\n else if (character === \"#\") {\n while (this.#position < this.source.length && this.source[this.#position] !== \"\\n\") this.#position++;\n } else break;\n }\n }\n}\n\nclass Composer {\n readonly #anchors = new Map<string, AnchorRecord>();\n readonly #futureAnchors: Set<string>;\n #collectionDepth = 0;\n\n constructor(\n readonly work: YqOwnedWork,\n readonly ledger: YqLedger,\n futureAnchors: Iterable<string>,\n ) {\n this.#futureAnchors = new Set(futureAnchors);\n }\n\n async node(): Promise<void> {\n await this.work.charge(1);\n this.work.assertOpen();\n this.ledger.admitNode();\n }\n\n enterCollection(): void {\n this.work.assertOpen();\n if (this.#collectionDepth >= yqCaps.maxDepth) throw limit(\"LIMIT_MAX_DEPTH\");\n this.#collectionDepth++;\n }\n\n leaveCollection(): void {\n this.#collectionDepth--;\n }\n\n admitScalar(bytes: number): void {\n this.ledger.admitScalar(bytes);\n }\n\n async scalar(text: string, value: Json = text, admitted = false): Promise<void> {\n await this.node();\n const bytes = Buffer.byteLength(text);\n if (!admitted) this.ledger.admitScalar(bytes);\n let codePoints = 0;\n for (const unused of text) {\n void unused;\n codePoints++;\n if (codePoints === 256) {\n await this.work.charge(codePoints);\n this.work.assertOpen();\n codePoints = 0;\n }\n }\n if (codePoints > 0) await this.work.charge(codePoints);\n this.work.assertOpen();\n if (bytes > 0) await this.work.charge(Math.ceil(bytes / 1024));\n this.work.assertOpen();\n this.ledger.admitValueBytes(compactScalarBytes(value));\n }\n\n collection(): void {\n this.ledger.admitValueBytes(2);\n }\n\n member(size: number): void {\n if (size > yqCaps.maxCollectionSize) throw limit(\"LIMIT_MAX_COLLECTION_SIZE\");\n if (size > 1) this.ledger.admitValueBytes(1);\n }\n\n mappingEntry(target: Record<string, Json>, key: ParsedNode, value: Json, implicit: boolean, memberAdmitted = false): void {\n if (typeof key.value !== \"string\") throw schema(\"SCHEMA_NONSTRING_KEY\");\n if (implicit && countCodePoints(key.value) > 1024) throw syntax();\n if (key.style === \"plain\" && key.explicitTag === undefined && key.value === \"<<\") throw schema(\"SCHEMA_PLAIN_MERGE_KEY\");\n if (Object.hasOwn(target, key.value)) throw schema(\"SCHEMA_DUPLICATE_KEY\");\n if (!memberAdmitted) this.member(objectKeys(target).length + 1);\n this.ledger.admitValueBytes(1);\n put(target, key.value, value);\n }\n\n beginAnchor(name: string): AnchorRecord {\n this.ledger.admitAnchor();\n this.#futureAnchors.delete(name);\n const record: AnchorRecord = { name, pending: true };\n this.#anchors.set(name, record);\n return record;\n }\n\n completeAnchor(record: AnchorRecord, value: Json): void {\n record.pending = false;\n record.value = value;\n }\n\n async alias(name: string): Promise<Json> {\n const record = this.#anchors.get(name);\n if (!record) throw aliasFailure(this.#futureAnchors.has(name) ? \"ALIAS_FORWARD\" : \"ALIAS_UNDEFINED\");\n if (record.pending || record.value === undefined) throw aliasFailure(\"ALIAS_CURRENT_NODE\");\n return copyAlias(record.value, this.ledger, this.work);\n }\n\n async applyTag(node: ParsedNode, tag?: string): Promise<ParsedNode> {\n if (tag === undefined) return node;\n const collection = Array.isArray(node.value) ? \"seq\" : node.value !== null && typeof node.value === \"object\" && !(node.value instanceof Decimal) ? \"map\" : \"scalar\";\n if (tag === \"map\" || tag === \"seq\") {\n if (collection !== tag) throw schema(\"SCHEMA_TAG_KIND_MISMATCH\");\n return node;\n }\n if (collection !== \"scalar\") throw schema(\"SCHEMA_TAG_KIND_MISMATCH\");\n const raw = node.raw ?? (typeof node.value === \"string\" ? node.value : node.value instanceof Decimal ? node.value.text : String(node.value));\n const value = scalarFromPlain(raw, tag);\n return { value, ...(node.style === undefined ? {} : { style: node.style }), explicitTag: tag, ...(node.raw === undefined ? {} : { raw: node.raw }) };\n }\n}\n\nclass BlockParser {\n #index = 0;\n\n constructor(\n readonly lines: SourceLine[],\n readonly composer: Composer,\n ) {}\n\n async parse(): Promise<Json> {\n this.#skip();\n if (this.#index >= this.lines.length) {\n await this.composer.scalar(\"\", null);\n return null;\n }\n const indent = indentation(this.lines[this.#index]!.text);\n const node = await this.#node(indent);\n this.#skip();\n if (this.#index < this.lines.length) throw syntax(this.lines[this.#index]!.number, 1);\n return node.value;\n }\n\n async #node(indent: number): Promise<ParsedNode> {\n this.#skip();\n const line = this.lines[this.#index];\n if (!line) {\n await this.composer.scalar(\"\", null);\n return { value: null, style: \"plain\" };\n }\n const actual = indentation(line.text);\n if (actual !== indent) throw syntax(line.number, actual + 1);\n const content = stripComment(line.text.slice(indent));\n if (/^-(?:[ \\t]|$)/u.test(content)) return this.#sequence(indent);\n if (content.startsWith(\"? \") || mappingColon(content) >= 0) return this.#mapping(indent);\n this.#index++;\n return this.#inlineOrBlock(content, indent, line.number);\n }\n\n async #sequence(indent: number): Promise<ParsedNode> {\n this.composer.enterCollection();\n try {\n await this.composer.node();\n this.composer.collection();\n const result: Json[] = [];\n while (this.#index < this.lines.length) {\n this.#skip();\n const line = this.lines[this.#index];\n if (!line || indentation(line.text) !== indent) break;\n const content = stripComment(line.text.slice(indent));\n if (!/^-(?:[ \\t]|$)/u.test(content)) break;\n this.composer.member(result.length + 1);\n this.#index++;\n const rest = content.slice(1).trimStart();\n let item: ParsedNode;\n if (rest.length === 0) {\n this.#skip();\n const next = this.lines[this.#index];\n item = next && indentation(next.text) > indent ? await this.#node(indentation(next.text)) : { value: null, style: \"plain\" };\n if (!next || indentation(next.text) <= indent) await this.composer.scalar(\"\", null);\n } else if (mappingColon(rest) >= 0) {\n item = await this.#inlineMappingItem(rest, indent + 2, line.number);\n } else item = await this.#inlineOrBlock(rest, indent, line.number);\n result.push(item.value);\n }\n return { value: result };\n } finally { this.composer.leaveCollection(); }\n }\n\n async #inlineMappingItem(first: string, indent: number, lineNumber: number): Promise<ParsedNode> {\n this.composer.enterCollection();\n try {\n await this.composer.node();\n this.composer.collection();\n const result = object();\n let members = 1;\n this.composer.member(members);\n await this.#mappingLine(result, first, indent, lineNumber, true);\n while (this.#index < this.lines.length) {\n this.#skip();\n const line = this.lines[this.#index];\n if (!line || indentation(line.text) !== indent) break;\n const content = stripComment(line.text.slice(indent));\n if (mappingColon(content) < 0) break;\n this.composer.member(++members);\n this.#index++;\n await this.#mappingLine(result, content, indent, line.number, true);\n }\n return { value: result };\n } finally { this.composer.leaveCollection(); }\n }\n\n async #mapping(indent: number): Promise<ParsedNode> {\n this.composer.enterCollection();\n try {\n await this.composer.node();\n this.composer.collection();\n const result = object();\n let members = 0;\n while (this.#index < this.lines.length) {\n this.#skip();\n const line = this.lines[this.#index];\n if (!line || indentation(line.text) !== indent) break;\n const content = stripComment(line.text.slice(indent));\n if (content.startsWith(\"? \")) {\n this.composer.member(++members);\n this.#index++;\n const key = await this.#inlineOrBlock(content.slice(2).trimStart(), indent, line.number);\n this.#skip();\n const valueLine = this.lines[this.#index];\n if (!valueLine || indentation(valueLine.text) !== indent || !stripComment(valueLine.text.slice(indent)).startsWith(\":\")) throw syntax(line.number, 1);\n this.#index++;\n const valueText = stripComment(valueLine.text.slice(indent)).slice(1).trimStart();\n const value = valueText.length > 0 ? await this.#inlineOrBlock(valueText, indent, valueLine.number) : await this.#nestedOrNull(indent);\n this.composer.mappingEntry(result, key, value.value, false, true);\n continue;\n }\n const colon = mappingColon(content);\n if (colon < 0) break;\n this.composer.member(++members);\n this.#index++;\n await this.#mappingLine(result, content, indent, line.number, true);\n }\n return { value: result };\n } finally { this.composer.leaveCollection(); }\n }\n\n async #mappingLine(target: Record<string, Json>, content: string, indent: number, lineNumber: number, memberAdmitted: boolean): Promise<void> {\n const colon = mappingColon(content);\n if (colon < 0) throw syntax(lineNumber, 1);\n const keyText = content.slice(0, colon).trimEnd();\n const valueText = content.slice(colon + 1).trimStart();\n const key = await this.#inlineOrBlock(keyText, indent, lineNumber);\n const value = valueText.length > 0 ? await this.#inlineOrBlock(valueText, indent, lineNumber) : await this.#nestedOrNull(indent);\n this.composer.mappingEntry(target, key, value.value, true, memberAdmitted);\n }\n\n async #nestedOrNull(parentIndent: number): Promise<ParsedNode> {\n this.#skip();\n const next = this.lines[this.#index];\n if (next && indentation(next.text) > parentIndent) return this.#node(indentation(next.text));\n if (next && indentation(next.text) === parentIndent && /^-(?:[ \\t]|$)/u.test(stripComment(next.text.slice(parentIndent)))) {\n return this.#node(parentIndent);\n }\n await this.composer.scalar(\"\", null);\n return { value: null, style: \"plain\" };\n }\n\n async #inlineOrBlock(content: string, parentIndent: number, lineNumber: number): Promise<ParsedNode> {\n const property = /^(?:(!![^\\s]+|!<[^>]+>|!)\\s+)?(?:&([^\\s]+)\\s+)?([|>])([1-9]?[+-]?|[+-]?[1-9]?)$/u.exec(content);\n if (property) return this.#blockScalar(property, parentIndent, lineNumber);\n if (/^[|>]/u.test(content)) throw syntax(lineNumber, 1);\n const fragments = [content];\n let fragment = content;\n let single = false;\n let double = false;\n let escaped = false;\n let depth = 0;\n let negativeDepth = false;\n let balanced = false;\n while (true) {\n let inComment = false;\n for (let start = 0; start < fragment.length; start += 256) {\n const end = Math.min(start + 256, fragment.length);\n await this.composer.work.charge(end - start);\n this.composer.work.assertOpen();\n for (let index = start; index < end; index++) {\n if (inComment) continue;\n const character = fragment[index]!;\n if (double) {\n if (escaped) escaped = false;\n else if (character === \"\\\\\") escaped = true;\n else if (character === '\"') double = false;\n } else if (single) {\n if (character === \"'\") single = false;\n } else if (character === '\"') double = true;\n else if (character === \"'\") single = true;\n else if (character === \"#\" && (index === 0 || \" \\t\\r\\n,[]{}\\\"'\".includes(fragment[index - 1]!))) inComment = true;\n else if (character === \"[\" || character === \"{\") depth++;\n else if (character === \"]\" || character === \"}\") {\n depth--;\n if (depth < 0) negativeDepth = true;\n }\n }\n }\n balanced = !single && !double && (negativeDepth || depth === 0);\n if (balanced || this.#index >= this.lines.length) break;\n const continuation = this.lines[this.#index++]!.text;\n fragment = `\\n${single || double ? continuation : continuation.trimStart()}`;\n fragments.push(fragment);\n }\n if (!balanced) throw syntax(lineNumber, 1);\n return new FlowParser(fragments.join(\"\"), this.composer, lineNumber).parse();\n }\n\n async #blockScalar(match: RegExpExecArray, parentIndent: number, lineNumber: number): Promise<ParsedNode> {\n const tag = match[1] === undefined ? undefined : normalizeTag(match[1]);\n const anchorName = match[2];\n const style = match[3] === \"|\" ? \"literal\" : \"folded\";\n const header = match[4] ?? \"\";\n const digitMatch = /[1-9]/u.exec(header);\n const chomping = header.includes(\"+\") ? \"+\" : header.includes(\"-\") ? \"-\" : \"clip\";\n let contentIndent = digitMatch ? parentIndent + Number(digitMatch[0]) : -1;\n if (contentIndent < 0) {\n for (let cursor = this.#index; cursor < this.lines.length; cursor++) {\n if (this.lines[cursor]!.text.trim().length > 0) {\n contentIndent = indentation(this.lines[cursor]!.text);\n break;\n }\n }\n if (contentIndent < 0) contentIndent = parentIndent + 1;\n }\n const values: BlockScalarPart[] = [];\n while (this.#index < this.lines.length) {\n const line = this.lines[this.#index]!;\n const actual = indentation(line.text);\n if (line.text.trim().length > 0 && actual < contentIndent) break;\n this.#index++;\n const empty = line.text.trim().length === 0;\n values.push({ lineText: line.text, contentIndent, empty, moreIndented: !empty && actual > contentIndent, hadBreak: line.hadBreak });\n }\n const projectedBytes = projectBlockScalarBytes(values, style, chomping);\n this.composer.admitScalar(projectedBytes);\n const value = buildBlockScalar(values, style, chomping);\n const record = anchorName === undefined ? undefined : this.composer.beginAnchor(anchorName);\n await this.composer.scalar(value, value, true);\n let node: ParsedNode = { value, style };\n node = await this.composer.applyTag(node, tag);\n if (record) this.composer.completeAnchor(record, node.value);\n void lineNumber;\n return node;\n }\n\n #skip(): void {\n while (this.#index < this.lines.length) {\n const line = this.lines[this.#index]!;\n const indent = indentation(line.text);\n const content = line.text.slice(indent);\n if (content.trim().length > 0 && !content.startsWith(\"#\")) return;\n this.#index++;\n }\n }\n}\n\nfunction rawLines(text: string, lineOffset = 0): SourceLine[] {\n const normalized = text.replace(/\\r\\n|\\r/gu, \"\\n\");\n const finalBreak = normalized.endsWith(\"\\n\");\n const pieces = normalized.split(\"\\n\");\n if (pieces[pieces.length - 1] === \"\") pieces.pop();\n return pieces.map((line, index) => {\n const hadBreak = index < pieces.length - 1 || finalBreak;\n return { text: line, number: lineOffset + index + 1, rawBytes: Buffer.byteLength(line) + (hadBreak ? 1 : 0), hadBreak };\n });\n}\n\nfunction* documents(text: string, lineOffset = 0): Generator<RawDocument> {\n const lines = rawLines(text, lineOffset);\n let current: SourceLine[] = [];\n let explicit = false;\n let ended = false;\n let directives = 0;\n let sawContent = false;\n const take = (force: boolean): RawDocument | undefined => {\n const document = force || sawContent || explicit\n ? { lines: current, explicit, rawBytes: current.reduce((sum, line) => sum + line.rawBytes, 0) }\n : undefined;\n current = [];\n explicit = false;\n sawContent = false;\n directives = 0;\n return document;\n };\n for (const original of lines) {\n let line = original;\n if (line.number === 1 && line.text.startsWith(\"\\ufeff\")) line = { ...line, text: line.text.slice(1) };\n if (ended && line.text.startsWith(\"\\ufeff\")) line = { ...line, text: line.text.slice(1) };\n const trimmed = stripComment(line.text).trim();\n if (line.text.startsWith(\"%\")) {\n if (sawContent || explicit || ended) throw structure(line.number, 1);\n if (trimmed !== \"%YAML 1.2\" || directives > 0) throw schema(\"SCHEMA_UNSUPPORTED_DIRECTIVE\", line.number, 1);\n directives++;\n continue;\n }\n if (/^---(?:[ \\t]+#.*)?$/u.test(line.text)) {\n if (sawContent || explicit) {\n const document = take(false);\n if (document) yield document;\n }\n explicit = true;\n ended = false;\n continue;\n }\n if (/^\\.\\.\\.(?:[ \\t]+#.*)?$/u.test(line.text)) {\n if (!sawContent && !explicit) {\n ended = true;\n continue;\n }\n const document = take(true);\n if (document) yield document;\n ended = true;\n continue;\n }\n if (ended) {\n if (trimmed === \"\") continue;\n ended = false;\n }\n if (directives > 0 && !explicit && trimmed !== \"\") throw structure(line.number, 1);\n current.push(line);\n if (trimmed !== \"\") sawContent = true;\n }\n const document = take(false);\n if (document) yield document;\n}\n\nfunction futureAnchorNames(lines: readonly SourceLine[]): string[] {\n const names: string[] = [];\n for (const line of lines) {\n const source = stripComment(line.text);\n const matcher = /(?:^|[\\s\\[,{}])&([^\\s\\[\\],{}]+)/gu;\n for (const match of source.matchAll(matcher)) names.push(match[1]!);\n }\n return names;\n}\n\nexport async function* parseYamlDocuments(text: string, work: YqOwnedWork, ledger: YqLedger, admittedRawBytes?: number, lineOffset = 0): AsyncGenerator<Json> {\n if (!wellFormed(text)) throw new YqError(\"input\", \"INPUT_INVALID_UTF8\", 5);\n let admitted = false;\n for (const document of documents(text, lineOffset)) {\n ledger.beginDocument(admittedRawBytes !== undefined && !admitted ? admittedRawBytes : document.rawBytes);\n admitted = true;\n let singleQuoted = false;\n let doubleQuoted = false;\n let escaped = false;\n for (const line of document.lines) {\n let codePoints = 0;\n for (let index = 0; index < line.text.length; index++) {\n const character = line.text[index]!;\n const point = line.text.codePointAt(index)!;\n if (doubleQuoted) {\n if (escaped) escaped = false;\n else if (character === \"\\\\\") escaped = true;\n else if (character === '\"') doubleQuoted = false;\n if (!(point === 0x09 || point >= 0x20)) throw syntax(line.number, index + 1);\n } else if (singleQuoted) {\n if (character === \"'\" && line.text[index + 1] === \"'\") index++;\n else if (character === \"'\") singleQuoted = false;\n if (!(point === 0x09 || point >= 0x20)) throw syntax(line.number, index + 1);\n } else {\n if (character === '\"') doubleQuoted = true;\n else if (character === \"'\") singleQuoted = true;\n const printable = point === 0x09 || point >= 0x20 && point <= 0x7e || point === 0x85 || point >= 0xa0 && point <= 0xd7ff || point >= 0xe000 && point <= 0xfffd || point >= 0x10000 && point <= 0x10ffff;\n if (!printable) throw syntax(line.number, index + 1);\n if (point === 0xfeff) throw structure(line.number, index + 1);\n }\n codePoints++;\n if (point > 0xffff) index++;\n if (codePoints === 256) {\n await work.charge(codePoints);\n work.assertOpen();\n codePoints = 0;\n }\n }\n if (codePoints > 0) await work.charge(codePoints);\n work.assertOpen();\n }\n const composer = new Composer(work, ledger, futureAnchorNames(document.lines));\n const value = await new BlockParser(document.lines, composer).parse();\n work.assertOpen();\n yield value;\n }\n}\n", "import { object, objectKeyIterator, objectSize, put, type Json } from \"../structured/limits.js\";\nimport { Decimal, numberText } from \"../structured/numbers.js\";\nimport type { YqOwnedWork } from \"../structured/query-core.js\";\nimport { YqLedger, yqCaps } from \"./accounting.js\";\nimport { YqError, limit } from \"./errors.js\";\n\ntype Table = Record<string, Json>;\ntype TableKind = \"root\" | \"implicit\" | \"header\" | \"dotted\" | \"inline\";\ninterface TableState { kind: TableKind; readonly depth: number; sealed: boolean; }\n\nclass TomlParser {\n #offset = 0;\n #line = 1;\n #column = 1;\n #pending = 0;\n readonly #tables = new WeakMap<Table, TableState>();\n readonly #arraysOfTables = new WeakSet<Json[]>();\n\n constructor(readonly source: string, readonly work: YqOwnedWork, readonly ledger: YqLedger) {}\n\n #syntax(): never { throw new YqError(\"input\", \"INPUT_TOML_SYNTAX\", 5, undefined, this.#line, this.#column); }\n #conflict(): never { throw new YqError(\"schema\", \"SCHEMA_DUPLICATE_KEY\", 5, undefined, this.#line, this.#column); }\n #schema(code: \"SCHEMA_UNSAFE_INTEGER\" | \"SCHEMA_NONFINITE_NUMBER\" | \"SCHEMA_DECIMAL_RANGE\"): never {\n throw new YqError(\"schema\", code, 5, undefined, this.#line, this.#column);\n }\n #peek(distance = 0): string { return this.source[this.#offset + distance] ?? \"\"; }\n #take(): string {\n if (this.#offset >= this.source.length) this.#syntax();\n const point = this.source.codePointAt(this.#offset)!;\n if (point >= 0xd800 && point <= 0xdfff || point < 32 && point !== 9 && point !== 10 && point !== 13 || point === 127) this.#syntax();\n let value = String.fromCodePoint(point);\n this.#offset += value.length;\n this.#pending++;\n if (point === 13) {\n if (this.#peek() !== \"\\n\") this.#syntax();\n this.#offset++;\n value = \"\\n\";\n }\n if (value === \"\\n\") { this.#line++; this.#column = 1; }\n else this.#column++;\n return value;\n }\n async #flush(): Promise<void> {\n if (this.#pending) { const units = this.#pending; this.#pending = 0; await this.work.charge(units); }\n this.work.assertOpen();\n }\n async #space(newlines: boolean): Promise<void> {\n while (true) {\n const character = this.#peek();\n if (character === \" \" || character === \"\\t\" || newlines && (character === \"\\n\" || character === \"\\r\")) this.#take();\n else if (newlines && character === \"#\") {\n while (this.#peek() && this.#peek() !== \"\\n\" && this.#peek() !== \"\\r\") {\n this.#take();\n if (this.#pending >= 256) await this.#flush();\n }\n } else break;\n if (this.#pending >= 256) await this.#flush();\n }\n }\n async #lineEnd(): Promise<void> {\n await this.#space(false);\n if (this.#peek() === \"#\") {\n while (this.#peek() && this.#peek() !== \"\\n\" && this.#peek() !== \"\\r\") {\n this.#take();\n if (this.#pending >= 256) await this.#flush();\n }\n }\n if (this.#peek() === \"\\n\" || this.#peek() === \"\\r\") this.#take();\n else if (this.#peek()) this.#syntax();\n }\n #depth(depth: number): void { if (depth > yqCaps.maxDepth) throw limit(\"LIMIT_MAX_DEPTH\"); }\n async #node(): Promise<void> {\n await this.#flush();\n await this.work.charge(1);\n this.work.assertOpen();\n this.ledger.admitNode();\n }\n async #table(kind: TableKind, depth: number): Promise<Table> {\n this.#depth(depth);\n await this.#node();\n this.ledger.admitValueBytes(2);\n const value = object();\n this.#tables.set(value, { kind, depth, sealed: false });\n return value;\n }\n async #array(depth: number): Promise<Json[]> {\n this.#depth(depth);\n await this.#node();\n this.ledger.admitValueBytes(2);\n return [];\n }\n async #scalar(value: Json): Promise<void> {\n await this.#node();\n if (typeof value !== \"string\") {\n const text = typeof value === \"boolean\" ? String(value) : numberText(value as number | Decimal);\n this.ledger.admitScalar(text.length);\n this.ledger.admitValueBytes(text.length);\n return;\n }\n let rawBytes = 0;\n let compactBytes = 2;\n let work = 0;\n for (const character of value) {\n const point = character.codePointAt(0)!;\n const bytes = point <= 0x7f ? 1 : point <= 0x7ff ? 2 : point <= 0xffff ? 3 : 4;\n rawBytes += bytes;\n compactBytes += point === 34 || point === 92 || [8, 9, 10, 12, 13].includes(point) ? 2 : point < 32 ? 6 : bytes;\n this.ledger.admitScalar(rawBytes);\n if (++work === 256) { await this.work.charge(work); this.work.assertOpen(); work = 0; }\n }\n if (work) await this.work.charge(work);\n this.work.assertOpen();\n this.ledger.admitValueBytes(compactBytes);\n }\n async #member(table: Table, key: string, value: Json): Promise<void> {\n if (Object.hasOwn(table, key)) this.#conflict();\n const size = objectSize(table);\n if (size >= yqCaps.maxCollectionSize) throw limit(\"LIMIT_MAX_COLLECTION_SIZE\");\n await this.#scalar(key);\n this.ledger.admitValueBytes(size ? 2 : 1);\n this.work.assertOpen();\n put(table, key, value);\n }\n #append(array: Json[], value: Json): void {\n if (array.length >= yqCaps.maxCollectionSize) throw limit(\"LIMIT_MAX_COLLECTION_SIZE\");\n if (array.length) this.ledger.admitValueBytes(1);\n this.work.assertOpen();\n array.push(value);\n }\n async #string(key = false): Promise<string> {\n const quote = this.#take();\n let multiline = false;\n if (!key && this.#peek() === quote && this.#peek(1) === quote) {\n this.#take(); this.#take(); multiline = true;\n if (this.#peek() === \"\\n\" || this.#peek() === \"\\r\") this.#take();\n }\n const parts: string[] = [];\n let part = \"\";\n let bytes = 0;\n const append = (value: string): void => {\n bytes += Buffer.byteLength(value);\n this.ledger.admitScalar(bytes);\n part += value;\n if (part.length >= 256) { parts.push(part); part = \"\"; }\n };\n while (this.#peek()) {\n const character = this.#take();\n if (character === quote) {\n if (!multiline) { parts.push(part); return parts.join(\"\"); }\n let count = 1;\n while (count < 5 && this.#peek() === quote) { this.#take(); count++; }\n if (count >= 3) { append(quote.repeat(count - 3)); parts.push(part); return parts.join(\"\"); }\n append(quote.repeat(count));\n } else if (character === \"\\n\") {\n if (!multiline) this.#syntax();\n append(character);\n } else if (quote === '\"' && character === \"\\\\\") {\n if (multiline && [\" \", \"\\t\", \"\\n\", \"\\r\"].includes(this.#peek())) {\n await this.#space(false);\n if (this.#peek() !== \"\\n\" && this.#peek() !== \"\\r\") this.#syntax();\n this.#take();\n while ([\" \", \"\\t\", \"\\n\", \"\\r\"].includes(this.#peek())) {\n this.#take();\n if (this.#pending >= 256) await this.#flush();\n }\n } else {\n const escape = this.#take();\n const simple: Record<string, string> = { b: \"\\b\", t: \"\\t\", n: \"\\n\", f: \"\\f\", r: \"\\r\", '\"': '\"', \"\\\\\": \"\\\\\" };\n if (Object.hasOwn(simple, escape)) append(simple[escape]!);\n else if (escape === \"u\" || escape === \"U\") {\n let point = 0;\n for (let index = 0; index < (escape === \"u\" ? 4 : 8); index++) {\n const digit = this.#digit(this.#take(), 16);\n if (digit < 0) this.#syntax();\n point = point * 16 + digit;\n }\n if (point > 0x10ffff || point >= 0xd800 && point <= 0xdfff) this.#syntax();\n append(String.fromCodePoint(point));\n } else this.#syntax();\n }\n } else append(character);\n if (this.#pending >= 256) await this.#flush();\n }\n return this.#syntax();\n }\n #digit(character: string, base: number): number {\n const code = character.charCodeAt(0);\n const digit = code >= 48 && code <= 57 ? code - 48 : code >= 65 && code <= 70 ? code - 55 : code >= 97 && code <= 102 ? code - 87 : -1;\n return digit >= 0 && digit < base ? digit : -1;\n }\n async #keyPath(): Promise<string[]> {\n const path: string[] = [];\n while (true) {\n await this.#space(false);\n let key: string;\n if (this.#peek() === '\"' || this.#peek() === \"'\") key = await this.#string(true);\n else {\n const start = this.#offset;\n while (this.#peek()) {\n const code = this.#peek().charCodeAt(0);\n if (!(code >= 65 && code <= 90 || code >= 97 && code <= 122 || code >= 48 && code <= 57 || code === 95 || code === 45)) break;\n this.#take();\n if (this.#offset - start > yqCaps.maxScalarBytes) throw limit(\"LIMIT_MAX_SCALAR_BYTES\");\n if (this.#pending >= 256) await this.#flush();\n }\n if (this.#offset === start) this.#syntax();\n key = this.source.slice(start, this.#offset);\n }\n if (path.length >= yqCaps.maxDepth) throw limit(\"LIMIT_MAX_DEPTH\");\n path.push(key);\n await this.#space(false);\n if (this.#peek() !== \".\") return path;\n this.#take();\n }\n }\n #state(table: Table): TableState {\n const state = this.#tables.get(table);\n if (!state) this.#conflict();\n return state;\n }\n async #parents(start: Table, path: readonly string[], kind: \"implicit\" | \"dotted\", allowAoT: boolean): Promise<Table> {\n let current = start;\n for (const key of path) {\n await this.work.charge(1); this.work.assertOpen();\n const parent = this.#state(current);\n if (parent.sealed) this.#conflict();\n let value = current[key];\n if (!Object.hasOwn(current, key)) {\n value = await this.#table(kind, parent.depth + 1);\n await this.#member(current, key, value);\n } else if (Array.isArray(value) && allowAoT && this.#arraysOfTables.has(value)) value = value.at(-1)!;\n if (typeof value !== \"object\" || value === null || Array.isArray(value) || value instanceof Decimal) this.#conflict();\n const state = this.#state(value);\n if (state.sealed) this.#conflict();\n if (kind === \"dotted\" && state.kind === \"header\") this.#conflict();\n if (kind === \"dotted\" && state.kind === \"implicit\") state.kind = \"dotted\";\n current = value;\n }\n return current;\n }\n async #assignment(current: Table): Promise<void> {\n const path = await this.#keyPath();\n if (this.#take() !== \"=\") this.#syntax();\n await this.#space(false);\n const parent = await this.#parents(current, path.slice(0, -1), \"dotted\", false);\n if (this.#state(parent).sealed || Object.hasOwn(parent, path.at(-1)!)) this.#conflict();\n if (objectSize(parent) >= yqCaps.maxCollectionSize) throw limit(\"LIMIT_MAX_COLLECTION_SIZE\");\n const value = await this.#value(this.#state(parent).depth + 1);\n await this.#member(parent, path.at(-1)!, value);\n }\n async #header(root: Table): Promise<Table> {\n this.#take();\n const array = this.#peek() === \"[\";\n if (array) this.#take();\n const path = await this.#keyPath();\n if (this.#take() !== \"]\" || array && this.#take() !== \"]\") this.#syntax();\n await this.#lineEnd();\n const parent = await this.#parents(root, path.slice(0, -1), \"implicit\", true);\n const key = path.at(-1)!;\n const parentState = this.#state(parent);\n if (parentState.sealed) this.#conflict();\n const exists = Object.hasOwn(parent, key);\n const existing = parent[key];\n if (array) {\n let values: Json[];\n if (exists) {\n if (!Array.isArray(existing) || !this.#arraysOfTables.has(existing)) this.#conflict();\n values = existing;\n } else {\n values = await this.#array(parentState.depth + 1);\n this.#arraysOfTables.add(values);\n await this.#member(parent, key, values);\n }\n if (values.length >= yqCaps.maxCollectionSize) throw limit(\"LIMIT_MAX_COLLECTION_SIZE\");\n const table = await this.#table(\"header\", parentState.depth + 2);\n this.#append(values, table);\n return table;\n }\n if (exists) {\n if (typeof existing !== \"object\" || existing === null || Array.isArray(existing) || existing instanceof Decimal) this.#conflict();\n const state = this.#state(existing);\n if (state.kind !== \"implicit\" || state.sealed) this.#conflict();\n state.kind = \"header\";\n return existing;\n }\n const table = await this.#table(\"header\", parentState.depth + 1);\n await this.#member(parent, key, table);\n return table;\n }\n async #seal(table: Table): Promise<void> {\n const pending: Table[] = [table];\n while (pending.length) {\n const current = pending.pop()!;\n await this.work.charge(1); this.work.assertOpen();\n this.#state(current).sealed = true;\n for (const key of objectKeyIterator(current)) {\n await this.work.charge(1); this.work.assertOpen();\n const value = current[key];\n if (typeof value === \"object\" && value !== null && !Array.isArray(value) && !(value instanceof Decimal)) pending.push(value);\n }\n }\n }\n async #value(depth: number): Promise<Json> {\n this.#depth(depth);\n const character = this.#peek();\n if (character === '\"' || character === \"'\") {\n const value = await this.#string();\n await this.#scalar(value);\n return value;\n }\n if (character === \"[\") {\n this.#take();\n const result = await this.#array(depth);\n await this.#space(true);\n while (this.#peek() !== \"]\") {\n if (!this.#peek()) this.#syntax();\n if (result.length >= yqCaps.maxCollectionSize) throw limit(\"LIMIT_MAX_COLLECTION_SIZE\");\n const value = await this.#value(depth + 1);\n this.#append(result, value);\n await this.#space(true);\n if (this.#peek() !== \",\") break;\n this.#take(); await this.#space(true);\n }\n if (this.#take() !== \"]\") this.#syntax();\n return result;\n }\n if (character === \"{\") {\n this.#take();\n const result = await this.#table(\"inline\", depth);\n await this.#space(false);\n if (this.#peek() !== \"}\") {\n while (true) {\n await this.#assignment(result);\n await this.#space(false);\n if (this.#peek() !== \",\") break;\n this.#take(); await this.#space(false);\n if (this.#peek() === \"}\") this.#syntax();\n }\n }\n if (this.#take() !== \"}\") this.#syntax();\n await this.#seal(result);\n return result;\n }\n const start = this.#offset;\n while (this.#peek()) {\n const next = this.#peek();\n if (\" \\t\\r\\n#,]}\".includes(next)) {\n if (next === \" \" && this.#offset - start === 10 && this.source[start + 4] === \"-\" && this.source[start + 7] === \"-\" && this.#digit(this.#peek(1), 10) >= 0) this.#take();\n else break;\n } else this.#take();\n if (this.#offset - start > yqCaps.maxScalarBytes) throw limit(\"LIMIT_MAX_SCALAR_BYTES\");\n if (this.#pending >= 256) await this.#flush();\n }\n if (this.#offset === start) this.#syntax();\n const raw = this.source.slice(start, this.#offset);\n await this.#flush();\n let value: Json;\n if (raw === \"true\" || raw === \"false\") value = raw === \"true\";\n else if (raw.length >= 8 && (raw[2] === \":\" || raw[4] === \"-\" && raw[7] === \"-\")) {\n await this.#date(raw); value = raw;\n } else value = await this.#number(raw);\n await this.#scalar(value);\n return value;\n }\n async #number(raw: string): Promise<number | Decimal> {\n let start = 0;\n const negative = raw[0] === \"-\";\n if (negative || raw[0] === \"+\") start++;\n const unsigned = raw.slice(start);\n if (unsigned === \"inf\" || unsigned === \"nan\") this.#schema(\"SCHEMA_NONFINITE_NUMBER\");\n let base = 10;\n if (unsigned.startsWith(\"0x\")) base = 16;\n else if (unsigned.startsWith(\"0o\")) base = 8;\n else if (unsigned.startsWith(\"0b\")) base = 2;\n if (base !== 10) {\n if (start) this.#syntax();\n let value = 0;\n let previousDigit = false;\n if (raw.length <= 2) this.#syntax();\n for (let index = 2; index < raw.length; index++) {\n const character = raw[index]!;\n if (character === \"_\") { if (!previousDigit || this.#digit(raw[index + 1] ?? \"\", base) < 0) this.#syntax(); previousDigit = false; }\n else {\n const digit = this.#digit(character, base);\n if (digit < 0) this.#syntax();\n if (value > Math.floor((Number.MAX_SAFE_INTEGER - digit) / base)) this.#schema(\"SCHEMA_UNSAFE_INTEGER\");\n value = value * base + digit; previousDigit = true;\n }\n if (index % 256 === 0) { await this.work.charge(256); this.work.assertOpen(); }\n }\n return value;\n }\n let clean = \"\";\n let integerDigits = 0;\n let fractionDigits = 0;\n let exponentDigits = 0;\n let exponentValue = 0;\n let exponentNegative = false;\n let state: \"integer\" | \"fraction\" | \"exponent\" = \"integer\";\n let previousDigit = false;\n let coefficient = \"\";\n for (let index = start; index < raw.length; index++) {\n const character = raw[index]!;\n const digit = this.#digit(character, 10);\n if (digit >= 0) {\n clean += character; previousDigit = true;\n if (state === \"integer\") { integerDigits++; coefficient += character; }\n else if (state === \"fraction\") { fractionDigits++; coefficient += character; }\n else { exponentDigits++; if (exponentValue > 1_147_483_646) this.#schema(\"SCHEMA_DECIMAL_RANGE\"); exponentValue = exponentValue * 10 + digit; }\n } else if (character === \"_\") {\n if (!previousDigit || this.#digit(raw[index + 1] ?? \"\", 10) < 0) this.#syntax();\n previousDigit = false;\n } else if (character === \".\" && state === \"integer\" && previousDigit) {\n state = \"fraction\"; previousDigit = false; clean += character;\n } else if ((character === \"e\" || character === \"E\") && state !== \"exponent\" && previousDigit) {\n state = \"exponent\"; previousDigit = false; clean += \"e\";\n if (raw[index + 1] === \"+\" || raw[index + 1] === \"-\") { exponentNegative = raw[index + 1] === \"-\"; clean += raw[++index]; }\n } else this.#syntax();\n if ((index - start + 1) % 256 === 0) { await this.work.charge(256); this.work.assertOpen(); }\n }\n if (!previousDigit || !integerDigits || integerDigits > 1 && unsigned[0] === \"0\" || state === \"fraction\" && !fractionDigits || state === \"exponent\" && !exponentDigits) this.#syntax();\n const signed = (negative ? \"-\" : \"\") + clean;\n const value = Number(signed);\n if (!Number.isFinite(value)) this.#schema(\"SCHEMA_NONFINITE_NUMBER\");\n if (Number.isInteger(value) && !Number.isSafeInteger(value)) this.#schema(\"SCHEMA_UNSAFE_INTEGER\");\n if (state === \"integer\") return value;\n let exponent = (exponentNegative ? -exponentValue : exponentValue) - fractionDigits;\n if (exponent < -1_147_483_646 || exponent > 999_999_999) this.#schema(\"SCHEMA_DECIMAL_RANGE\");\n let first = 0;\n while (first < coefficient.length - 1 && coefficient[first] === \"0\") {\n first++; if (first % 256 === 0) { await this.work.charge(256); this.work.assertOpen(); }\n }\n let last = coefficient.length;\n while (last > first + 1 && coefficient[last - 1] === \"0\") {\n last--; exponent++; if ((coefficient.length - last) % 256 === 0) { await this.work.charge(256); this.work.assertOpen(); }\n }\n const digits = coefficient.slice(first, last);\n if (digits !== \"0\" && exponent >= 0 && (digits.length + exponent > 16 || !Number.isSafeInteger(Number(`${digits}e${exponent}`)))) this.#schema(\"SCHEMA_UNSAFE_INTEGER\");\n return new Decimal(digits, exponent, negative, signed, value);\n }\n async #date(raw: string): Promise<void> {\n const digits = (offset: number, length: number): number => {\n let value = 0;\n for (let index = offset; index < offset + length; index++) {\n const digit = this.#digit(raw[index] ?? \"\", 10);\n if (digit < 0) this.#syntax();\n value = value * 10 + digit;\n }\n return value;\n };\n let offset = 0;\n const date = raw[4] === \"-\" && raw[7] === \"-\";\n if (date) {\n const year = digits(0, 4), month = digits(5, 2), day = digits(8, 2);\n const leap = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n const days = [31, leap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (year < 1 || month < 1 || month > 12 || day < 1 || day > days[month - 1]!) this.#syntax();\n if (raw.length === 10) return;\n if (![\"T\", \"t\", \" \"].includes(raw[10]!)) this.#syntax();\n offset = 11;\n }\n if (raw[offset + 2] !== \":\" || raw[offset + 5] !== \":\" || digits(offset, 2) > 23 || digits(offset + 3, 2) > 59 || digits(offset + 6, 2) > 59) this.#syntax();\n offset += 8;\n if (raw[offset] === \".\") {\n const start = ++offset;\n while (this.#digit(raw[offset] ?? \"\", 10) >= 0) {\n offset++; if ((offset - start) % 256 === 0) { await this.work.charge(256); this.work.assertOpen(); }\n }\n if (offset === start) this.#syntax();\n }\n if (offset === raw.length) return;\n if (!date) this.#syntax();\n if (raw[offset] === \"Z\" || raw[offset] === \"z\") offset++;\n else if (raw[offset] === \"+\" || raw[offset] === \"-\") {\n if (raw[offset + 3] !== \":\" || digits(offset + 1, 2) > 23 || digits(offset + 4, 2) > 59) this.#syntax();\n offset += 6;\n } else this.#syntax();\n if (offset !== raw.length) this.#syntax();\n }\n async parse(): Promise<Json> {\n if (this.source.charCodeAt(0) === 0xfeff) this.#syntax();\n const root = await this.#table(\"root\", 1);\n let current = root;\n while (true) {\n await this.#space(true);\n if (!this.#peek()) break;\n if (this.#peek() === \"[\") current = await this.#header(root);\n else { await this.#assignment(current); await this.#lineEnd(); }\n }\n await this.#flush();\n return root;\n }\n}\n\nexport async function parseTomlDocument(text: string, work: YqOwnedWork, ledger: YqLedger, rawBytes: number): Promise<Json> {\n work.assertOpen();\n ledger.beginDocument(rawBytes);\n return new TomlParser(text, work, ledger).parse();\n}\n"],
5
- "mappings": "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",
6
- "names": ["block", "structure", "limit", "text", "bytes", "offset", "remove", "result", "keyBytes", "character", "diagnostic", "source", "limit", "result", "codePoint", "value", "document", "table", "value", "previousDigit", "offset", "documents"]
7
- }