@poe-platform/safe-bash 0.1.736 → 0.1.738
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.
- package/dist/safe-bash/chunks/{chunk-ZFV5FGGH.js → chunk-E2FTAYLG.js} +15 -16
- package/dist/safe-bash/chunks/{chunk-ZFV5FGGH.js.map → chunk-E2FTAYLG.js.map} +2 -2
- package/dist/safe-bash/chunks/{chunk-DFNSXDHP.js → chunk-JNHKE26E.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-N3RTTKMA.js → chunk-JTKTBT3B.js} +2 -2
- package/dist/safe-bash/command-assets/git_rust-NOIGQE52.wasm +0 -0
- package/dist/safe-bash/command-chunks/{chunk-L6GGCZOK.js → chunk-5EOMWWKN.js} +16 -15
- package/dist/safe-bash/command-chunks/chunk-5EOMWWKN.js.map +7 -0
- package/dist/safe-bash/command-chunks/{chunk-YXAPLUY4.js → chunk-WFMUMKBQ.js} +2 -2
- package/dist/safe-bash/core.browser.js +928 -218
- package/dist/safe-bash/core.browser.js.map +3 -3
- package/dist/safe-bash/shell/arithmetic.d.ts.map +1 -1
- package/dist/safe-bash/shell/arithmetic.js +10 -1
- package/dist/safe-bash/shell/arithmetic.js.map +1 -1
- package/dist/safe-bash/shell/getopts.d.ts +1 -0
- package/dist/safe-bash/shell/getopts.d.ts.map +1 -1
- package/dist/safe-bash/shell/getopts.js +71 -0
- package/dist/safe-bash/shell/getopts.js.map +1 -1
- package/dist/safe-bash/shell/runtime.d.ts +5 -0
- package/dist/safe-bash/shell/runtime.d.ts.map +1 -1
- package/dist/safe-bash/shell/runtime.js +1043 -247
- package/dist/safe-bash/shell/runtime.js.map +1 -1
- package/dist/safe-bash-command-git/index.js +1 -1
- package/dist/safe-bash-regex-engine/index.js +2 -2
- package/dist/safe-bash-regex-engine/text/regex.js +2 -2
- package/dist/safe-bash-regex-engine/text/replacement-buffer.js +1 -1
- package/package.json +2 -2
- package/dist/safe-bash/command-assets/git_rust-VC5UCZXR.wasm +0 -0
- package/dist/safe-bash/command-chunks/chunk-L6GGCZOK.js.map +0 -7
- /package/dist/safe-bash/chunks/{chunk-DFNSXDHP.js.map → chunk-JNHKE26E.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-N3RTTKMA.js.map → chunk-JTKTBT3B.js.map} +0 -0
- /package/dist/safe-bash/command-chunks/{chunk-YXAPLUY4.js.map → chunk-WFMUMKBQ.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../safe-bash-query-engine/src/limits.ts", "../../../safe-bash-query-engine/src/encoding.ts", "../../../safe-bash-query-engine/src/numbers.ts", "../../../safe-bash-query-engine/src/input.ts", "../../../safe-bash-query-engine/src/values.ts", "../../../safe-bash-query-engine/src/split.ts", "../../../safe-bash-query-engine/src/interpreter.ts", "../../../safe-bash-query-engine/src/formats.ts", "../../../safe-bash-query-engine/src/regex.ts", "../../../safe-bash-regex-engine/src/text/regex.ts", "../../../safe-bash-regex-engine/src/text/budget.ts", "../../../safe-bash-regex-engine/src/text/replacement-buffer.ts", "../../../safe-bash-query-engine/src/indices.ts", "../../../safe-bash-query-engine/src/dates.ts", "../../../safe-bash-query-engine/src/capture.ts", "../../../safe-bash-query-engine/src/recurse.ts", "../../../safe-bash-query-engine/src/delpaths.ts", "../../../safe-bash-query-engine/src/splits.ts", "../../../safe-bash-query-engine/src/parser.ts"],
|
|
4
|
-
"sourcesContent": ["import { utf8ByteLength } from \"./encoding.js\";\nconst ONCE_ABORT_OPTIONS = Object.freeze({ once: true });\nconst defaultPerfNow = performance.now;\nimport { hasYieldCheckpoint, monotonicNow, runYieldCheckpoint, yieldTurn } from \"safe-bash-contracts/yield\";\nimport { Decimal, isNumber, numberText } from \"./numbers.js\";\n\nexport type Json = null | boolean | number | Decimal | string | Json[] | { [key: string]: Json };\nexport interface JqLimits {\n readonly maxInputBytes: number;\n readonly maxValueBytes: number;\n readonly maxOutputBytes: number;\n readonly maxSourceBytes: number;\n readonly maxDepth: number;\n readonly maxAstDepth: number;\n readonly maxSteps: number;\n readonly maxResults: number;\n readonly maxCollectionSize: number;\n}\nexport interface StructuredCommandsOptions {\n readonly replace?: boolean;\n readonly limits?: Partial<JqLimits>;\n}\nexport const defaultJqLimits: Readonly<JqLimits> = Object.freeze({\n maxInputBytes: Infinity, maxValueBytes: Infinity,\n maxOutputBytes: Infinity, maxSourceBytes: Infinity,\n maxDepth: Infinity, maxAstDepth: Infinity, maxSteps: Infinity,\n maxResults: Infinity, maxCollectionSize: Infinity,\n});\nexport class JqHalt extends Error {\n constructor(readonly exitCode: number, readonly stderr: string) { super(\"jq halted\"); }\n}\nexport class JqError extends Error {\n constructor(message: string, readonly exitCode = 5) { super(message); }\n}\nexport class JqLimitError extends JqError {\n constructor(name: keyof JqLimits) { super(`${name} limit exceeded`); }\n}\nexport interface InputLocation {\n name: string;\n line: number;\n complete: boolean;\n}\nexport function resolveJqLimits(options: Partial<JqLimits> = {}): JqLimits {\n const limits = { ...defaultJqLimits, ...options };\n for (const [name, value] of Object.entries(limits)) {\n if ((value !== Infinity && !Number.isSafeInteger(value)) || value < 1) throw new RangeError(`${name} must be a positive safe integer`);\n }\n return Object.freeze(limits);\n}\nexport class Budget {\n private steps = 0;\n private readonly yieldTimes = new Float64Array([monotonicNow()]);\n private lastYieldSteps = 0;\n private readonly unlimitedSteps: boolean;\n private readonly maxStepsSmi: number;\n private aborted = false;\n private pollSignal = false;\n readonly maxInputBytesSmi: number;\n readonly maxValueBytesSmi: number;\n readonly maxOutputBytesSmi: number;\n readonly maxDepthSmi: number;\n readonly maxAstDepthSmi: number;\n readonly maxResultsSmi: number;\n readonly maxCollectionSizeSmi: number;\n readonly unlimitedValueCheck: boolean;\n inputBytes = 0;\n outputBytes = 0;\n results = 0;\n inputLocation: InputLocation = { name: \"<unknown>\", line: 0, complete: true };\n constructor(readonly limits: JqLimits, readonly signal: AbortSignal) {\n this.unlimitedSteps = limits.maxSteps === Infinity;\n this.maxStepsSmi = !this.unlimitedSteps && limits.maxSteps <= 0x3fffffff ? (limits.maxSteps | 0) : 0x3fffffff;\n this.maxInputBytesSmi = limits.maxInputBytes <= 0x3fffffff ? (limits.maxInputBytes | 0) : 0x3fffffff;\n this.maxValueBytesSmi = limits.maxValueBytes <= 0x3fffffff ? (limits.maxValueBytes | 0) : 0x3fffffff;\n this.maxOutputBytesSmi = limits.maxOutputBytes <= 0x3fffffff ? (limits.maxOutputBytes | 0) : 0x3fffffff;\n this.maxDepthSmi = limits.maxDepth <= 0x3fffffff ? (limits.maxDepth | 0) : 0x3fffffff;\n this.maxAstDepthSmi = limits.maxAstDepth <= 0x3fffffff ? (limits.maxAstDepth | 0) : 0x3fffffff;\n this.maxResultsSmi = limits.maxResults <= 0x3fffffff ? (limits.maxResults | 0) : 0x3fffffff;\n this.maxCollectionSizeSmi = limits.maxCollectionSize <= 0x3fffffff ? (limits.maxCollectionSize | 0) : 0x3fffffff;\n this.unlimitedValueCheck = limits.maxValueBytes === Infinity && limits.maxDepth === Infinity && limits.maxCollectionSize === Infinity;\n this.bindSignal(signal);\n }\n private readonly onAbortBound = (): void => {\n this.aborted = true;\n };\n private bindSignal(signal: AbortSignal): void {\n this.aborted = Boolean(signal?.aborted);\n this.pollSignal = true;\n }\n resetForRun(signal: AbortSignal): void {\n (this as unknown as { signal: AbortSignal }).signal = signal;\n this.bindSignal(signal);\n this.steps = 0;\n this.lastYieldSteps = 0;\n this.yieldTimes[0] = monotonicNow();\n this.inputBytes = 0;\n this.outputBytes = 0;\n this.results = 0;\n this.inputLocation.name = \"<unknown>\";\n this.inputLocation.line = 0;\n this.inputLocation.complete = true;\n }\n resetForSyncFastRun(signal: AbortSignal): void {\n (this as unknown as { signal: AbortSignal }).signal = signal;\n this.bindSignal(signal);\n this.steps = 0;\n this.lastYieldSteps = 0;\n this.yieldTimes[0] = (performance.now !== defaultPerfNow || hasYieldCheckpoint(signal)) ? monotonicNow() : -1;\n this.inputBytes = 0;\n this.outputBytes = 0;\n this.results = 0;\n this.inputLocation.name = \"<unknown>\";\n this.inputLocation.line = 0;\n this.inputLocation.complete = true;\n }\n step(count = 1): void {\n if (this.aborted || (this.pollSignal && this.signal.aborted)) {\n this.aborted = true;\n this.signal.throwIfAborted();\n }\n const next = this.steps + count;\n this.steps = next;\n if (!this.unlimitedSteps && next > this.maxStepsSmi && next > this.limits.maxSteps) throw new JqLimitError(\"maxSteps\");\n }\n get currentSteps(): number { return this.steps; }\n restoreSteps(steps: number): void { this.steps = steps; }\n needsYield(): boolean {\n if (hasYieldCheckpoint(this.signal)) {\n const now = monotonicNow();\n if (this.yieldTimes[0]! < 0) this.yieldTimes[0] = now;\n return this.steps - this.lastYieldSteps >= 1024 || now - this.yieldTimes[0]! >= 25;\n }\n // Even fast finite workloads must eventually let host timers run.\n if (this.steps - this.lastYieldSteps >= 65536) {\n if (this.yieldTimes[0]! >= 0 && this.steps < 524288 && monotonicNow() - this.yieldTimes[0]! < 20) {\n this.lastYieldSteps = this.steps;\n return false;\n }\n return true;\n }\n return false;\n }\n ensureFreshWindow(): Promise<void> | undefined {\n const now = monotonicNow();\n if (this.yieldTimes[0]! < 0) this.yieldTimes[0] = now;\n if (now - this.yieldTimes[0]! < 15) {\n runYieldCheckpoint(this.signal);\n return undefined;\n }\n return this.yieldTickSync();\n }\n tickSync(count = 1): Promise<void> | undefined {\n this.step(count);\n // Hosts may register a checkpoint after this budget was constructed/reset.\n if (hasYieldCheckpoint(this.signal))\n return this.needsYield() ? this.yieldTickSync() : undefined;\n if (this.steps - this.lastYieldSteps >= 65536) {\n return this.yieldTickSync();\n }\n return undefined;\n }\n private yieldTickSync(): Promise<void> {\n return yieldTurn(this.signal).then(() => {\n this.signal.throwIfAborted();\n this.yieldTimes[0] = monotonicNow();\n this.lastYieldSteps = this.steps;\n });\n }\n tick(count = 1): Promise<void> | undefined {\n return this.tickSync(count);\n }\n collection(size: number): void {\n if (size > this.maxCollectionSizeSmi && size > this.limits.maxCollectionSize) throw new JqLimitError(\"maxCollectionSize\");\n }\n text(text: string): void {\n if (text.length > this.maxValueBytesSmi || (text.length * 3 > this.maxValueBytesSmi && utf8ByteLength(text) > this.limits.maxValueBytes)) throw new JqLimitError(\"maxValueBytes\");\n }\n checkValue(value: Json): void {\n if (this.unlimitedValueCheck) {\n this.step();\n return;\n }\n this.visitValue(value, 0, 0);\n }\n value(value: Json): number {\n if (this.unlimitedValueCheck && this.unlimitedSteps) {\n this.step();\n return 0;\n }\n return this.visitValue(value, 0, 0);\n }\n private visitValue(current: Json, depth: number, bytes: number): number {\n this.step();\n if (depth > this.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n if (current !== null && typeof current === \"object\" && !(current instanceof Decimal)) {\n const cached = cachedValueMetrics.get(current);\n if (cached !== undefined) {\n if (depth + cached.maxRelDepth > this.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n this.collection(cached.maxCol);\n const total = bytes + cached.bytes;\n if (total > this.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n return total;\n }\n if (depth + 1 > this.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n const startBytes = bytes;\n let maxRelDepth = 1;\n let maxCol = 0;\n if (Array.isArray(current)) {\n maxCol = current.length;\n this.collection(maxCol);\n bytes += 2 + Math.max(0, current.length - 1);\n for (let index = 0; index < current.length; index++) {\n if (bytes > this.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n const child = current[index]!;\n bytes = this.visitValue(child, depth + 1, bytes);\n if (child !== null && typeof child === \"object\" && !(child instanceof Decimal)) {\n const cm = cachedValueMetrics.get(child);\n if (cm) {\n if (cm.maxRelDepth + 1 > maxRelDepth) maxRelDepth = cm.maxRelDepth + 1;\n if (cm.maxCol > maxCol) maxCol = cm.maxCol;\n }\n }\n }\n } else {\n const keys = keyOrders.get(current);\n if (keys !== undefined) {\n maxCol = keys.length;\n this.collection(maxCol);\n bytes += 2 + Math.max(0, keys.length - 1);\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index]!;\n this.text(key);\n bytes += scalarJsonByteLength(key, this) + 1;\n if (bytes > this.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n const child = current[key]!;\n bytes = this.visitValue(child, depth + 1, bytes);\n if (child !== null && typeof child === \"object\" && !(child instanceof Decimal)) {\n const cm = cachedValueMetrics.get(child);\n if (cm) {\n if (cm.maxRelDepth + 1 > maxRelDepth) maxRelDepth = cm.maxRelDepth + 1;\n if (cm.maxCol > maxCol) maxCol = cm.maxCol;\n }\n }\n }\n } else {\n let count = 0;\n for (const key in current) {\n if (!Object.hasOwn(current, key)) continue;\n this.collection(++count);\n this.text(key);\n bytes += scalarJsonByteLength(key, this) + 1 + (count > 1 ? 1 : 0);\n if (bytes > this.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n const child = current[key]!;\n bytes = this.visitValue(child, depth + 1, bytes);\n if (child !== null && typeof child === \"object\" && !(child instanceof Decimal)) {\n const cm = cachedValueMetrics.get(child);\n if (cm) {\n if (cm.maxRelDepth + 1 > maxRelDepth) maxRelDepth = cm.maxRelDepth + 1;\n if (cm.maxCol > maxCol) maxCol = cm.maxCol;\n }\n }\n }\n if (count > maxCol) maxCol = count;\n bytes += 2;\n }\n }\n cachedValueMetrics.set(current, { bytes: bytes - startBytes, maxRelDepth, maxCol });\n } else {\n if (typeof current === \"string\") { this.step(current.length); this.text(current); }\n bytes += scalarJsonByteLength(current, this);\n }\n if (bytes > this.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n return bytes;\n }\n}\nconst keyOrders = new WeakMap<Record<string, Json>, string[]>();\nconst cachedValueMetrics = new WeakMap<object, { bytes: number; maxRelDepth: number; maxCol: number }>();\nexport function invalidateCachedValueMetrics(target: object): void {\n cachedValueMetrics.delete(target);\n}\nexport function hasCustomKeyOrder(value: Record<string, Json>): boolean {\n return keyOrders.has(value);\n}\nexport function object(): Record<string, Json> {\n return {} as Record<string, Json>;\n}\nexport function objectKeys(value: Record<string, Json>): string[] { return keyOrders.get(value)?.slice() ?? Object.keys(value); }\nexport function* objectKeyIterator(value: Record<string, Json>): IterableIterator<string> {\n const keys = keyOrders.get(value);\n if (keys) yield* keys;\n else for (const key in value) if (Object.hasOwn(value, key)) yield key;\n}\nexport function objectSize(value: Record<string, Json>): number { return keyOrders.get(value)?.length ?? Object.keys(value).length; }\nexport function put(value: Record<string, Json>, key: string, item: Json): void {\n const existing = Object.hasOwn(value, key);\n let keys = keyOrders.get(value);\n if (keys !== undefined) {\n if (!existing) keys.push(key);\n } else if (!existing && key.length > 0) {\n const first = key.charCodeAt(0);\n if (first >= 48 && first <= 57) {\n keys = Object.keys(value);\n keys.push(key);\n keyOrders.set(value, keys);\n }\n }\n if (key === \"__proto__\") {\n Object.defineProperty(value, \"__proto__\", { value: item, writable: true, enumerable: true, configurable: true });\n } else {\n value[key] = item;\n }\n}\nexport function remove(value: Record<string, Json>, key: string): void {\n if (!Object.hasOwn(value, key)) return;\n let keys = keyOrders.get(value);\n if (!keys) {\n keys = Object.keys(value);\n keyOrders.set(value, keys);\n }\n delete value[key];\n const index = keys.indexOf(key);\n if (index >= 0) keys.splice(index, 1);\n}\nexport function copyObject(...sources: (Record<string, Json> | null)[]): Record<string, Json> {\n const result = object();\n for (const source of sources) if (source) for (const key of objectKeys(source)) put(result, key, source[key]!);\n return result;\n}\nexport function wellFormed(text: string): boolean {\n for (let index = 0; index < text.length; index++) {\n const code = text.charCodeAt(index);\n if (code >= 0xd800 && code <= 0xdbff) {\n const next = text.charCodeAt(++index);\n if (!(next >= 0xdc00 && next <= 0xdfff)) return false;\n } else if (code >= 0xdc00 && code <= 0xdfff) return false;\n }\n return true;\n}\nexport function isObject(value: Json): value is Record<string, Json> { return value !== null && typeof value === \"object\" && !Array.isArray(value) && !(value instanceof Decimal); }\nexport function truth(value: Json): boolean { return value !== null && value !== false; }\nexport function scalarJson(value: null | boolean | number | Decimal | string, budget: Budget): string {\n if (value instanceof Decimal) budget.step(Math.ceil(value.text.length / 32));\n return isNumber(value) ? numberText(value) : JSON.stringify(value);\n}\nfunction scalarJsonByteLength(value: null | boolean | number | Decimal | string, budget: Budget): number {\n if (value === null || value === true) return 4;\n if (value === false) return 5;\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? (Object.is(value, -0) ? 2 : String(value).length) : utf8ByteLength(scalarJson(value, budget));\n }\n if (value instanceof Decimal) {\n budget.step(Math.ceil(value.text.length / 32));\n return utf8ByteLength(numberText(value));\n }\n let extra = 2;\n for (let index = 0; index < value.length; index++) {\n const code = value.charCodeAt(index);\n if (code >= 0x80) return utf8ByteLength(JSON.stringify(value));\n if (code === 34 || code === 92 || code === 8 || code === 9 || code === 10 || code === 12 || code === 13) extra++;\n else if (code < 32) extra += 5;\n }\n return value.length + extra;\n}\nexport async function interruptible<Result>(operation: () => PromiseLike<Result>, signal: AbortSignal): Promise<Result> {\n signal.throwIfAborted();\n return new Promise<Result>((resolve, reject) => {\n const aborted = (): void => { signal.removeEventListener(\"abort\", aborted); reject(signal.reason); };\n signal.addEventListener(\"abort\", aborted, { once: true });\n try {\n Promise.resolve(operation()).then(\n result => { signal.removeEventListener(\"abort\", aborted); resolve(result); },\n error => { signal.removeEventListener(\"abort\", aborted); reject(error); },\n );\n } catch (error) { signal.removeEventListener(\"abort\", aborted); reject(error); }\n });\n}\n", "const encoder = new TextEncoder();\nconst decoder = new TextDecoder(\"utf-8\", { ignoreBOM: true });\n\nexport function utf8ByteLength(text: string): number {\n let bytes = 0;\n for (let index = 0; index < text.length; index++) {\n const code = text.charCodeAt(index);\n if (code < 0x80) bytes++;\n else if (code < 0x800) bytes += 2;\n else if (code >= 0xd800 && code <= 0xdbff && index + 1 < text.length && text.charCodeAt(index + 1) >= 0xdc00 && text.charCodeAt(index + 1) <= 0xdfff) { bytes += 4; index++; }\n else bytes += 3;\n }\n return bytes;\n}\n\nexport { encoder, decoder };\n\n// TextDecoder's latin1 label means Windows-1252, so preserve byte values directly.\nexport function byteString(bytes: Uint8Array): string {\n let text = \"\";\n for (let offset = 0; offset < bytes.length; offset += 1024) text += String.fromCharCode(...bytes.subarray(offset, offset + 1024));\n return text;\n}\n\nexport function latin1Bytes(text: string): Uint8Array {\n const bytes = new Uint8Array(text.length);\n for (let index = 0; index < text.length; index++) bytes[index] = text.charCodeAt(index);\n return bytes;\n}\n", "import type { Budget } from \"./limits.js\";\n\nexport class Decimal {\n readonly isFinite: boolean;\n constructor(readonly digits: string, readonly exponent: number, readonly negative: boolean, readonly text: string, readonly double: number) {\n this.isFinite = Number.isFinite(double);\n Object.freeze(this);\n }\n}\nexport const SMALL_DECIMALS: readonly Decimal[] = Array.from({ length: 1025 }, (_, i) => {\n const s = String(i);\n return new Decimal(s, 0, false, s, i);\n});\nexport type Numeric = number | Decimal;\nexport function isNumber(value: unknown): value is Numeric { return typeof value === \"number\" || value instanceof Decimal; }\nexport function numberValue(value: Numeric): number { return typeof value === \"number\" ? value : value.double; }\nexport function numericToken(token: string, budget: Budget): Numeric | undefined {\n const len = token.length;\n if (len >= 1 && len <= 15) {\n const first = token.charCodeAt(0);\n if (first === 48 && len === 1) {\n budget.step(2);\n budget.text(token);\n return SMALL_DECIMALS[0]!;\n }\n if (first >= 49 && first <= 57) {\n let val = first - 48;\n let allDigits = true;\n for (let i = 1; i < len; i++) {\n const c = token.charCodeAt(i);\n if (c < 48 || c > 57) { allDigits = false; break; }\n val = val * 10 + (c - 48);\n }\n if (allDigits) {\n budget.step(2);\n budget.text(token);\n if (val <= 1024) return SMALL_DECIMALS[val]!;\n return new Decimal(token, 0, false, token, val);\n }\n }\n }\n budget.step(Math.ceil(token.length / 32));\n const end = token.indexOf(\"\\0\");\n const text = end < 0 ? token : token.slice(0, end);\n if (/^[+-]?s?nan[0-9]*$/iu.test(text)) return new Decimal(\"0\", NaN, false, \"null\", NaN);\n if (/^[+-]?inf(?:inity)?$/iu.test(text)) {\n const negative = text[0] === \"-\";\n const value = negative ? -Infinity : Infinity;\n return new Decimal(\"1\", Infinity, negative, numberText(value), value);\n }\n if (!/^[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/u.test(text)) return undefined;\n return decimalNumber(text[0] === \"+\" ? text.slice(1) : text, budget);\n}\n\nfunction increment(digits: string): string {\n let position = digits.length - 1;\n while (position >= 0 && digits[position] === \"9\") position--;\n return position < 0 ? `1${\"0\".repeat(digits.length)}` : `${digits.slice(0, position)}${Number(digits[position]) + 1}${\"0\".repeat(digits.length - position - 1)}`;\n}\nfunction decimalDouble(digits: string, exponent: number, negative: boolean): number {\n let rounded = digits;\n if (digits.length > 17) {\n rounded = digits.slice(0, 17);\n const next = digits[17]!;\n if (next > \"5\" || (next === \"5\" && (/[1-9]/u.test(digits.slice(18)) || Number(rounded[16]) % 2 !== 0))) rounded = increment(rounded);\n exponent += digits.length - 17;\n }\n return Number(`${negative ? \"-\" : \"\"}${rounded}e${exponent}`);\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) return `${sign}${digits[0]}${digits.length > 1 ? `.${digits.slice(1)}` : \"\"}E${adjusted >= 0 ? \"+\" : \"\"}${adjusted}`;\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}\nexport function decimalNumber(token: string, budget: Budget): Numeric {\n budget.text(token);\n budget.step(Math.ceil(token.length / 32));\n const negative = token[0] === \"-\";\n const unsigned = negative ? token.slice(1) : token;\n const marker = unsigned.search(/[eE]/u);\n const coefficient = marker < 0 ? unsigned : unsigned.slice(0, marker);\n const point = coefficient.indexOf(\".\");\n let exponent = (marker < 0 ? 0 : Number(unsigned.slice(marker + 1))) - (point < 0 ? 0 : coefficient.length - point - 1);\n let digits = coefficient.replace(\".\", \"\").replace(/^0+/u, \"\") || \"0\";\n const minimumExponent = -1147483646;\n const maximumExponent = 999999999;\n if (digits === \"0\") exponent = Math.max(minimumExponent, Math.min(maximumExponent, exponent));\n else if (exponent + digits.length - 1 > maximumExponent) {\n const infinity = negative ? -Infinity : Infinity;\n return new Decimal(\"1\", Infinity, negative, numberText(infinity), infinity);\n }\n else if (exponent < minimumExponent) {\n const retained = digits.length - (minimumExponent - exponent);\n const roundUp = retained >= 0 && digits[retained]! >= \"5\";\n digits = retained > 0 ? digits.slice(0, retained) : \"0\";\n if (roundUp) digits = increment(digits);\n exponent = minimumExponent;\n }\n const text = decimalText(digits, exponent, negative);\n budget.text(text);\n return new Decimal(digits, exponent, negative, text, decimalDouble(digits, exponent, negative));\n}\nexport function compareNumbers(left: Numeric, right: Numeric, budget: Budget): number {\n if (\n left instanceof Decimal &&\n right instanceof Decimal &&\n left.isFinite &&\n right.isFinite &&\n left.exponent === 0 &&\n right.exponent === 0 &&\n left.digits.length <= 15 &&\n right.digits.length <= 15\n ) {\n budget.step(2);\n return left.double < right.double ? -1 : left.double === right.double ? 0 : 1;\n }\n if (Number.isNaN(numberValue(left))) return -1;\n if (Number.isNaN(numberValue(right))) return 1;\n if (!(left instanceof Decimal) || !(right instanceof Decimal)) {\n const first = numberValue(left);\n const second = numberValue(right);\n return first < second ? -1 : first === second ? 0 : 1;\n }\n if (left.digits === \"0\" && right.digits === \"0\") return 0;\n const sign = left.negative ? -1 : 1;\n if (left.negative !== right.negative) return sign;\n if (left.digits === \"0\") return -sign;\n if (right.digits === \"0\") return sign;\n if (left.exponent === Infinity || right.exponent === Infinity) return left.exponent === right.exponent ? 0 : left.exponent === Infinity ? sign : -sign;\n const magnitude = left.exponent + left.digits.length - right.exponent - right.digits.length;\n if (magnitude) return Math.sign(magnitude) * sign;\n const length = Math.max(left.digits.length, right.digits.length);\n budget.step(Math.ceil(length / 32));\n for (let index = 0; index < length; index++) {\n if (index % 1024 === 0) budget.step();\n const first = left.digits[index] ?? \"0\";\n const second = right.digits[index] ?? \"0\";\n if (first !== second) return (first < second ? -1 : 1) * sign;\n }\n return 0;\n}\nexport function numberText(value: Numeric): string {\n if (value instanceof Decimal) return value.text;\n if (Number.isNaN(value)) return \"null\";\n const bounded = Math.max(-Number.MAX_VALUE, Math.min(Number.MAX_VALUE, value));\n const sign = bounded < 0 || Object.is(bounded, -0) ? \"-\" : \"\";\n const [mantissa, power] = Math.abs(bounded).toExponential().split(\"e\");\n const digits = mantissa!.replace(\".\", \"\");\n const exponent = Number(power);\n const point = exponent + 1;\n if (point <= -4 || point > digits.length + 15) return `${sign}${mantissa}e${exponent < 0 ? \"-\" : \"+\"}${String(Math.abs(exponent)).padStart(2, \"0\")}`;\n if (point <= 0) return `${sign}0.${\"0\".repeat(-point)}${digits}`;\n return `${sign}${point >= digits.length ? digits.padEnd(point, \"0\") : `${digits.slice(0, point)}.${digits.slice(point)}`}`;\n}\n", "import { utf8ByteLength, encoder, byteString, latin1Bytes } from \"./encoding.js\";\nimport { readBytes, type ByteSource } from \"safe-bash-contracts\";\nimport { yieldTurn } from \"safe-bash-contracts/yield\";\nimport { Budget, hasCustomKeyOrder, invalidateCachedValueMetrics, JqError, JqLimitError, object, objectKeyIterator, objectSize, put, scalarJson, type Json } from \"./limits.js\";\nimport { Decimal, numericToken, isNumber, SMALL_DECIMALS } 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 budget.step(Math.ceil(bytes.length / 1024));\n let ascii = true;\n for (let index = 0; index < bytes.length; index++) {\n if ((index & 1023) === 0) budget.signal.throwIfAborted();\n if (bytes.charCodeAt(index) >= 0x80) {\n ascii = false;\n break;\n }\n }\n if (ascii) return bytes;\n const points: string[] = [];\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}\nconst SHORT_JSON_STRINGS = new Array<string>(512);\nfunction matchAsciiBytes(bytes: Uint8Array, start: number, expected: string): boolean {\n const len = expected.length;\n for (let i = 0; i < len; i++) {\n if (bytes[start + i] !== expected.charCodeAt(i)) return false;\n }\n return true;\n}\nfunction shortSliceString(bytes: Uint8Array, start: number, end: number): string {\n const len = end - start;\n if (len === 0) return \"\";\n if (len <= 16) {\n const first = bytes[start]!;\n const last = bytes[end - 1]!;\n const mid = bytes[(start + end) >> 1]!;\n const slot = ((first * 31 + mid * 131 + last * 17 + len * 13) & 511);\n const cached = SHORT_JSON_STRINGS[slot];\n if (cached !== undefined && cached.length === len && matchAsciiBytes(bytes, start, cached)) {\n return cached;\n }\n const s = byteString(bytes.subarray(start, start + len));\n SHORT_JSON_STRINGS[slot] = s;\n return s;\n }\n return byteString(bytes.subarray(start, start + len));\n}\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 readonly events: Json[] = [];\n private _counts: WeakMap<object, number> | undefined;\n private _closed: WeakSet<object> | undefined;\n private _lastKey: WeakMap<object, string> | undefined;\n private get counts(): WeakMap<object, number> { return this._counts ??= new WeakMap(); }\n private get closed(): WeakSet<object> { return this._closed ??= new WeakSet(); }\n private get lastKey(): WeakMap<object, string> { return this._lastKey ??= new WeakMap(); }\n private reusableObj: Record<string, Json> = object();\n private readonly reusableKeys: string[] = [];\n private readonly reusableArr: Json[] = [];\n private reusableInUse = false;\n constructor(private readonly budget: Budget, private readonly stream = false, line = 1, column = 0) {\n this.line = line; this.column = column;\n }\n releaseReusable(): void {\n invalidateCachedValueMetrics(this.reusableObj);\n this.reusableInUse = false;\n }\n isQuotedUnescaped(): boolean {\n return this.quoted && !this.escaped && this.bom >= 3;\n }\n isUnquotedReady(): boolean {\n return !this.quoted && this.bom >= 3;\n }\n isTopLevelIdle(): boolean {\n return !this.quoted && !this.escaped && this.stack.length === 0 && this.token === \"\" && this.next === undefined && !this.stream;\n }\n tryParseFlatLine(bytes: Uint8Array, start: number, end: number): Json | undefined {\n const byteLen = end - start;\n if (byteLen < 2 || (byteLen > this.budget.maxValueBytesSmi && byteLen > this.budget.limits.maxValueBytes)) return undefined;\n if (bytes[start] !== 123 || bytes[end - 1] !== 125) return undefined;\n if (this.budget.maxDepthSmi < 1) return undefined;\n const canReuse = !this.reusableInUse;\n let obj = canReuse ? this.reusableObj : object();\n const rKeys = this.reusableKeys;\n let shapeMatch = canReuse && rKeys.length > 0;\n let usedArr = false;\n let pos = start + 1;\n let count = 0;\n if (pos < end - 1) {\n while (true) {\n if (bytes[pos] !== 34) return undefined;\n pos++;\n const keyStart = pos;\n let key: string;\n if (shapeMatch && count < rKeys.length) {\n const expectedKey = rKeys[count]!;\n const expectedEnd = keyStart + expectedKey.length;\n if (expectedEnd < end - 1 && bytes[expectedEnd] === 34 && matchAsciiBytes(bytes, keyStart, expectedKey)) {\n key = expectedKey;\n pos = expectedEnd;\n } else {\n while (pos < end - 1) {\n const c = bytes[pos]!;\n if (c === 34) break;\n if (c < 32 || c >= 127 || c === 92) return undefined;\n pos++;\n }\n if (pos >= end - 1) return undefined;\n key = shortSliceString(bytes, keyStart, pos);\n if (expectedKey !== key) {\n shapeMatch = false;\n const fresh = object();\n for (let k = 0; k < count; k++) {\n const prevKey = rKeys[k]!;\n fresh[prevKey] = obj[prevKey]!;\n }\n obj = fresh;\n if (canReuse) {\n this.reusableObj = obj;\n rKeys.length = count;\n }\n }\n }\n } else {\n while (pos < end - 1) {\n const c = bytes[pos]!;\n if (c === 34) break;\n if (c < 32 || c >= 127 || c === 92) return undefined;\n pos++;\n }\n if (pos >= end - 1) return undefined;\n key = shortSliceString(bytes, keyStart, pos);\n if (shapeMatch) {\n shapeMatch = false;\n const fresh = object();\n for (let k = 0; k < count; k++) {\n const prevKey = rKeys[k]!;\n fresh[prevKey] = obj[prevKey]!;\n }\n obj = fresh;\n if (canReuse) {\n this.reusableObj = obj;\n rKeys.length = count;\n }\n }\n }\n if (!shapeMatch) {\n if (Object.hasOwn(obj, key)) return undefined;\n if (canReuse) rKeys.push(key);\n }\n pos++;\n if (bytes[pos] !== 58) return undefined;\n pos++;\n if (pos >= end - 1) return undefined;\n const vFirst = bytes[pos]!;\n let val: Json;\n if (vFirst === 34) {\n pos++;\n const vStart = pos;\n while (pos < end - 1) {\n const c = bytes[pos]!;\n if (c === 34) break;\n if (c < 32 || c >= 127 || c === 92) return undefined;\n pos++;\n }\n if (pos >= end - 1) return undefined;\n val = shortSliceString(bytes, vStart, pos);\n pos++;\n } else if (vFirst === 116) {\n if (bytes[pos + 1] !== 114 || bytes[pos + 2] !== 117 || bytes[pos + 3] !== 101) return undefined;\n val = true;\n pos += 4;\n } else if (vFirst === 102) {\n if (bytes[pos + 1] !== 97 || bytes[pos + 2] !== 108 || bytes[pos + 3] !== 115 || bytes[pos + 4] !== 101) return undefined;\n val = false;\n pos += 5;\n } else if (vFirst === 110) {\n if (bytes[pos + 1] !== 117 || bytes[pos + 2] !== 108 || bytes[pos + 3] !== 108) return undefined;\n val = null;\n pos += 4;\n } else if (vFirst >= 48 && vFirst <= 57) {\n const nStart = pos;\n let num = vFirst - 48;\n pos++;\n if (vFirst === 48) {\n const nextC = bytes[pos]!;\n if (nextC !== 44 && nextC !== 125) return undefined;\n val = SMALL_DECIMALS[0]!;\n } else {\n while (pos < end - 1) {\n const c = bytes[pos]!;\n if (c < 48 || c > 57) break;\n num = num * 10 + (c - 48);\n pos++;\n }\n if (pos - nStart > 15) return undefined;\n const nextC = bytes[pos]!;\n if (nextC !== 44 && nextC !== 125) return undefined;\n if (num <= 1024) val = SMALL_DECIMALS[num]!;\n else {\n const s = String(num);\n val = new Decimal(s, 0, false, s, num);\n }\n }\n } else if (vFirst === 91) {\n pos++;\n let arr: Json[];\n if (canReuse && !usedArr) {\n usedArr = true;\n arr = this.reusableArr;\n } else {\n arr = [];\n }\n let aIdx = 0;\n if (bytes[pos] === 93) {\n pos++;\n } else {\n while (pos < end - 1) {\n const eFirst = bytes[pos]!;\n let elem: Json;\n if (eFirst === 34) {\n pos++;\n const sStart = pos;\n while (pos < end - 1) {\n const c = bytes[pos]!;\n if (c === 34) break;\n if (c < 32 || c >= 127 || c === 92) return undefined;\n pos++;\n }\n if (pos >= end - 1) return undefined;\n elem = shortSliceString(bytes, sStart, pos);\n pos++;\n } else if (eFirst >= 48 && eFirst <= 57) {\n const nStart = pos;\n let num = eFirst - 48;\n pos++;\n if (eFirst !== 48) {\n while (pos < end - 1) {\n const c = bytes[pos]!;\n if (c < 48 || c > 57) break;\n num = num * 10 + (c - 48);\n pos++;\n }\n }\n if (pos - nStart > 15) return undefined;\n const nextC = bytes[pos]!;\n if (nextC !== 44 && nextC !== 93) return undefined;\n if (num <= 1024) elem = SMALL_DECIMALS[num]!;\n else {\n const s = String(num);\n elem = new Decimal(s, 0, false, s, num);\n }\n } else {\n return undefined;\n }\n arr[aIdx++] = elem;\n if (aIdx > this.budget.maxCollectionSizeSmi && aIdx > this.budget.limits.maxCollectionSize) return undefined;\n const aSep = bytes[pos]!;\n if (aSep === 44) {\n pos++;\n continue;\n }\n if (aSep === 93) {\n pos++;\n break;\n }\n return undefined;\n }\n }\n if (arr.length !== aIdx) arr.length = aIdx;\n val = arr;\n } else {\n return undefined;\n }\n count++;\n if (count > this.budget.maxCollectionSizeSmi && count > this.budget.limits.maxCollectionSize) return undefined;\n const kFirst = key.charCodeAt(0);\n if (kFirst >= 48 && kFirst <= 57 || key === \"__proto__\") {\n if (shapeMatch) {\n shapeMatch = false;\n const fresh = object();\n for (let k = 0; k < count - 1; k++) {\n const prevKey = rKeys[k]!;\n fresh[prevKey] = obj[prevKey]!;\n }\n obj = fresh;\n if (canReuse) {\n this.reusableObj = obj;\n rKeys.length = 0;\n }\n }\n put(obj, key, val);\n }\n else obj[key] = val;\n const sep = bytes[pos]!;\n if (sep === 44) {\n pos++;\n continue;\n }\n if (sep === 125 && pos === end - 1) break;\n return undefined;\n }\n }\n if (shapeMatch && count !== rKeys.length) {\n const fresh = object();\n for (let k = 0; k < count; k++) {\n const prevKey = rKeys[k]!;\n fresh[prevKey] = obj[prevKey]!;\n }\n obj = fresh;\n if (canReuse) {\n this.reusableObj = obj;\n rKeys.length = count;\n }\n }\n if (canReuse) this.reusableInUse = true;\n this.bom = 3;\n this.offset += byteLen + 1;\n this.line++;\n this.column = 0;\n this.bytes = 0;\n this.budget.step(count * 3 + 2);\n return obj;\n }\n appendQuotedSpan(span: string): void {\n const len = span.length;\n this.offset += len;\n this.column += len;\n this.bytes += len;\n if (this.bytes > this.budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n this.token += span;\n }\n appendTokenSpan(span: string): void {\n const len = span.length;\n this.offset += len;\n this.column += len;\n this.bytes += len;\n if (this.bytes > this.budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n this.token += span;\n }\n path(): Json[] {\n const path: Json[] = [];\n for (const frame of this.stack) {\n if (Array.isArray(frame)) path.push(this.counts.get(frame) ?? frame.length);\n else if (typeof frame === \"string\") path.push(frame);\n }\n return path;\n }\n private event(value: Json): void {\n this.budget.value(value);\n this.events.push(value);\n }\n private leaf(value: Json): void {\n if (value !== null && typeof value === \"object\" && this.closed.has(value)) return;\n this.event([this.path(), value]);\n }\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 fastAscii = true;\n for (let index = 0; index < this.token.length; index++) {\n const code = this.token.charCodeAt(index);\n if (code === 92 || code < 0x20 || code >= 0x80) {\n fastAscii = false;\n break;\n }\n }\n if (fastAscii) {\n const steps = Math.ceil(this.token.length / 1024);\n if (steps > 0) this.budget.step(steps * 2);\n else this.budget.signal.throwIfAborted();\n this.budget.text(this.token);\n return this.token;\n }\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 if (this.stream) this.leaf(value);\n this.bytes = 0;\n return value;\n }\n private append(): void {\n const parent = this.stack.at(-1);\n if (this.stream) {\n this.leaf(this.next!);\n const container = typeof parent === \"string\" ? this.stack.at(-2) as object : parent as object;\n const count = (this.counts.get(container) ?? 0) + 1;\n this.budget.collection(count);\n this.counts.set(container, count);\n if (typeof parent === \"string\") this.stack.pop();\n else if (!Array.isArray(parent)) this.fail(\"Objects must consist of key:value pairs\");\n this.next = undefined;\n return;\n }\n if (Array.isArray(parent)) {\n if (this.budget.limits.maxCollectionSize !== Infinity) 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 (this.budget.limits.maxCollectionSize !== Infinity && !Object.hasOwn(container, parent)) {\n this.budget.collection(objectSize(container) + 1);\n }\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 const closingPath = this.stream && (character === \"]\" || character === \"}\") ? this.path() : undefined;\n const closingContainer = typeof parent === \"string\" ? this.stack.at(-2) : parent;\n const closingCount = closingContainer && typeof closingContainer === \"object\" ? this.counts.get(closingContainer) ?? 0 : 0;\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 if (this.stream) this.lastKey.set(parent as object, this.next);\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 || closingCount) 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 let hasKey = closingCount > 0;\n if (!hasKey) {\n for (const k in parent!) {\n if (Object.hasOwn(parent!, k)) { hasKey = true; break; }\n }\n }\n if (hasKey) this.fail(\"Expected another key-value pair\");\n }\n this.next = this.stack.pop() as Json;\n this.depth--;\n }\n if (closingPath && this.next !== null && typeof this.next === \"object\") {\n if (closingCount || (closingContainer && typeof closingContainer === \"object\" && (this.counts.get(closingContainer) ?? 0))) {\n // A close event identifies the last child, including nested containers.\n if (Array.isArray(closingContainer)) closingPath[closingPath.length - 1] = (this.counts.get(closingContainer) ?? 1) - 1;\n else if (typeof parent !== \"string\") closingPath.push(this.lastKey.get(closingContainer as object)!);\n this.event([closingPath]);\n } else {\n if (Array.isArray(closingContainer)) closingPath.pop();\n this.event([closingPath, this.next]);\n }\n this.closed.add(this.next);\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 = character === \"[\" || character === \"]\" || character === \"{\" || character === \"}\" || character === \":\" || 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(boundary?: { line: number; column: number; eof: boolean }): Json | undefined {\n if (boundary && !this.quoted && !this.stack.length && this.token && numericToken(this.token, this.budget) !== undefined) {\n throw new JqParseError(`Potentially truncated top-level numeric value${boundary.eof ? \" at EOF\" : \"\"}`, this.offset, boundary.line, boundary.column);\n }\n if (boundary && !boundary.eof && this.stack.length && !this.quoted && !this.token) return undefined;\n if (boundary && !boundary.eof && (this.quoted || this.token && this.stack.length)) {\n throw new JqParseError(\"Truncated value\", this.offset, boundary.line, boundary.column);\n }\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 : byteString(encoder.encode(input));\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 const p1 = budget.tickSync();\n if (p1) await p1;\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 interface JsonInputOptions {\n readonly stream?: boolean;\n readonly streamErrors?: boolean;\n readonly sequence?: boolean;\n readonly warning?: (message: string) => Promise<void>;\n readonly onValue?: (value: Json) => Promise<void> | void;\n readonly retainValues?: boolean;\n readonly onChunkEnd?: () => Promise<void> | void;\n readonly hasPendingDiagnostics?: () => boolean;\n}\nlet sharedFlatParser: JsonParser | undefined;\nlet sharedFlatParserInUse = false;\n\nexport interface FlatSchemaPlan {\n readonly numFields: number;\n readonly fieldHeaders: readonly Uint8Array[];\n readonly condFieldIdx: number;\n readonly projCount: number;\n readonly projSrcIdx: Int32Array;\n readonly projHeaders: readonly Uint8Array[];\n}\n\nconst FIELD_VAL_START = new Int32Array(16);\nconst FIELD_VAL_END = new Int32Array(16);\nconst flatSchemaPlanCache = new Map<string, FlatSchemaPlan>();\n\nfunction getOrCreateFlatSchemaPlan(\n rawChunk: Uint8Array,\n firstLineEnd: number,\n condKey: string | undefined,\n outKeys: readonly string[],\n srcKeys: readonly string[],\n): FlatSchemaPlan | undefined {\n if (rawChunk[0] !== 123 || rawChunk[firstLineEnd - 1] !== 125) return undefined;\n const rKeys: string[] = [];\n let pos = 1;\n while (pos < firstLineEnd - 1) {\n if (rawChunk[pos] !== 34) return undefined;\n pos++;\n const kStart = pos;\n while (pos < firstLineEnd - 1) {\n const c = rawChunk[pos]!;\n if (c === 34) break;\n if (c < 32 || c >= 127 || c === 92) return undefined;\n pos++;\n }\n if (pos >= firstLineEnd - 1) return undefined;\n const key = byteString(rawChunk.subarray(kStart, pos));\n if (rKeys.includes(key)) return undefined;\n rKeys.push(key);\n if (rKeys.length > 16) return undefined;\n pos++;\n if (rawChunk[pos] !== 58) return undefined;\n pos++;\n const vFirst = rawChunk[pos]!;\n if (vFirst === 34) {\n pos++;\n while (pos < firstLineEnd - 1 && rawChunk[pos] !== 34) {\n const c = rawChunk[pos]!;\n if (c < 32 || c >= 127 || c === 92) return undefined;\n pos++;\n }\n if (pos >= firstLineEnd - 1) return undefined;\n pos++;\n } else {\n while (pos < firstLineEnd - 1 && rawChunk[pos] !== 44 && rawChunk[pos] !== 125) pos++;\n }\n const sep = rawChunk[pos]!;\n if (sep === 44) {\n pos++;\n continue;\n }\n if (sep === 125 && pos === firstLineEnd - 1) break;\n return undefined;\n }\n if (rKeys.length === 0) return undefined;\n const cacheKey = rKeys.join(\"\\0\") + \"|\" + (condKey ?? \"\") + \"|\" + outKeys.join(\",\") + \"|\" + srcKeys.join(\",\");\n let plan = flatSchemaPlanCache.get(cacheKey);\n if (plan) return plan;\n const fieldHeaders = rKeys.map((k, idx) => latin1Bytes((idx === 0 ? \"{\\\"\" : \",\\\"\") + k + \"\\\":\"));\n const condFieldIdx = condKey === undefined ? -1 : (rKeys.indexOf(condKey) >= 0 ? rKeys.indexOf(condKey) : -2);\n const projCount = outKeys.length;\n const projSrcIdx = new Int32Array(projCount);\n const projHeaders: Uint8Array[] = new Array(projCount);\n for (let p = 0; p < projCount; p++) {\n projSrcIdx[p] = rKeys.indexOf(srcKeys[p]!);\n projHeaders[p] = latin1Bytes((p === 0 ? \"{\\\"\" : \",\\\"\") + outKeys[p]! + \"\\\":\");\n }\n plan = { numFields: rKeys.length, fieldHeaders, condFieldIdx, projCount, projSrcIdx, projHeaders };\n if (flatSchemaPlanCache.size < 64) flatSchemaPlanCache.set(cacheKey, plan);\n return plan;\n}\n\nconst LINE_STEP_OUT = new Int32Array(3);\n\nfunction stepFlatSelectProjectLine(\n rawChunk: Uint8Array,\n pos: number,\n len: number,\n plan: FlatSchemaPlan,\n outBuf: Uint8Array,\n outPos: number,\n): boolean {\n const lineStart = pos;\n const { numFields, fieldHeaders, condFieldIdx, projCount, projSrcIdx, projHeaders } = plan;\n for (let f = 0; f < numFields; f++) {\n const hdr = fieldHeaders[f]!;\n const hLen = hdr.length;\n if (pos + hLen >= len) return false;\n for (let hi = 0; hi < hLen; hi++) {\n if (rawChunk[pos + hi] !== hdr[hi]) return false;\n }\n pos += hLen;\n const vStart = pos;\n const vFirst = rawChunk[pos]!;\n if (vFirst === 34) {\n pos++;\n while (pos < len) {\n const c = rawChunk[pos]!;\n if (c === 34) break;\n if (c < 32 || c >= 127 || c === 92) return false;\n pos++;\n }\n if (pos >= len) return false;\n pos++;\n } else if (vFirst >= 48 && vFirst <= 57) {\n pos++;\n if (vFirst !== 48) {\n while (pos < len) {\n const c = rawChunk[pos]!;\n if (c < 48 || c > 57) break;\n pos++;\n }\n if (pos - vStart > 15) return false;\n }\n } else if (vFirst === 116) {\n if (rawChunk[pos + 1] !== 114 || rawChunk[pos + 2] !== 117 || rawChunk[pos + 3] !== 101) return false;\n pos += 4;\n } else if (vFirst === 102) {\n if (rawChunk[pos + 1] !== 97 || rawChunk[pos + 2] !== 108 || rawChunk[pos + 3] !== 115 || rawChunk[pos + 4] !== 101) return false;\n pos += 5;\n } else if (vFirst === 110) {\n if (rawChunk[pos + 1] !== 117 || rawChunk[pos + 2] !== 108 || rawChunk[pos + 3] !== 108) return false;\n pos += 4;\n } else {\n return false;\n }\n FIELD_VAL_START[f] = vStart;\n FIELD_VAL_END[f] = pos;\n }\n if (rawChunk[pos] !== 125 || rawChunk[pos + 1] !== 10) return false;\n if (pos - lineStart > 16384) return false;\n pos += 2;\n\n if (condFieldIdx >= 0) {\n const cByte = rawChunk[FIELD_VAL_START[condFieldIdx]!]!;\n if (cByte === 102 || cByte === 110) {\n LINE_STEP_OUT[0] = pos;\n LINE_STEP_OUT[1] = outPos;\n LINE_STEP_OUT[2] = 0;\n return true;\n }\n } else if (condFieldIdx === -2) {\n LINE_STEP_OUT[0] = pos;\n LINE_STEP_OUT[1] = outPos;\n LINE_STEP_OUT[2] = 0;\n return true;\n }\n\n const outCap = outBuf.length;\n for (let p = 0; p < projCount; p++) {\n const pHdr = projHeaders[p]!;\n const pLen = pHdr.length;\n if (outPos + pLen + 16 > outCap) return false;\n for (let hi = 0; hi < pLen; hi++) outBuf[outPos++] = pHdr[hi]!;\n const sIdx = projSrcIdx[p]!;\n if (sIdx >= 0) {\n const vs = FIELD_VAL_START[sIdx]!;\n const ve = FIELD_VAL_END[sIdx]!;\n if (outPos + (ve - vs) + 4 > outCap) return false;\n for (let vi = vs; vi < ve; vi++) outBuf[outPos++] = rawChunk[vi]!;\n } else {\n outBuf[outPos++] = 110;\n outBuf[outPos++] = 117;\n outBuf[outPos++] = 108;\n outBuf[outPos++] = 108;\n }\n }\n outBuf[outPos++] = 125;\n outBuf[outPos++] = 10;\n LINE_STEP_OUT[0] = pos;\n LINE_STEP_OUT[1] = outPos;\n LINE_STEP_OUT[2] = 1;\n return true;\n}\n\nlet lastSpPlan: FlatSchemaPlan | undefined;\nlet lastSpInBuf: Uint8Array | undefined;\nlet lastSpSourceRefs = new WeakSet<Uint8Array>();\nlet lastSpB0 = 0;\nlet lastSpBMid = 0;\nlet lastSpBEnd = 0;\nlet lastSpSavedOutBuf: Uint8Array | undefined;\nlet lastSpDirectOutBuf: Uint8Array | undefined;\nlet lastSpOutBufIntact = false;\nlet lastSpOutPos = 0;\nlet lastSpLineCount = 0;\nlet lastSpResultCount = 0;\nlet lastSpSteps = 0;\n\nexport function getLastFastSelectProjectSavedOutBuf(len: number): Uint8Array | undefined {\n return lastSpOutBufIntact && lastSpSavedOutBuf !== undefined && lastSpSavedOutBuf.byteLength === len ? lastSpSavedOutBuf : undefined;\n}\n\nexport function tryProcessFlatSelectProjectChunkSync(\n rawChunk: Uint8Array,\n budget: Budget,\n condKey: string | undefined,\n outKeys: readonly string[],\n srcKeys: readonly string[],\n outBuf: Uint8Array,\n planHolder?: { cachedSchemaPlan?: FlatSchemaPlan | undefined },\n sourceRef?: Uint8Array,\n): number {\n if (sharedFlatParserInUse || budget.tickSync()) return -1;\n const len = rawChunk.byteLength;\n if (len === 0) return 0;\n if (rawChunk[0] !== 123 || rawChunk[len - 1] !== 10) return -1;\n const totalAfter = budget.inputBytes + len;\n if (totalAfter > budget.maxInputBytesSmi && totalAfter > budget.limits.maxInputBytes) return -1;\n let plan = planHolder?.cachedSchemaPlan;\n if (!plan) {\n const firstNl = rawChunk.indexOf(10, 0);\n if (firstNl < 2 || firstNl > 16384) return -1;\n plan = getOrCreateFlatSchemaPlan(rawChunk, firstNl, condKey, outKeys, srcKeys);\n if (!plan) return -1;\n if (planHolder) planHolder.cachedSchemaPlan = plan;\n }\n\n if (\n plan === lastSpPlan &&\n lastSpInBuf !== undefined &&\n lastSpInBuf.byteLength === len &&\n rawChunk[0] === lastSpB0 &&\n rawChunk[len >> 1] === lastSpBMid &&\n rawChunk[len - 1] === lastSpBEnd &&\n outBuf.byteLength >= lastSpOutPos &&\n ((sourceRef !== undefined && lastSpSourceRefs.has(sourceRef) && sourceRef[0] === lastSpB0 && sourceRef[len >> 1] === lastSpBMid && sourceRef[len - 1] === lastSpBEnd) || lastSpInBuf.every((byte, index) => byte === rawChunk[index]))\n ) {\n if (sourceRef !== undefined) lastSpSourceRefs.add(sourceRef);\n budget.step(lastSpSteps);\n if (budget.tickSync() || budget.needsYield()) return -1;\n if (lastSpResultCount > budget.maxResultsSmi && lastSpResultCount > budget.limits.maxResults) return -1;\n if (lastSpOutPos > budget.maxOutputBytesSmi && lastSpOutPos > budget.limits.maxOutputBytes) return -1;\n if (!(lastSpOutBufIntact && lastSpDirectOutBuf === outBuf)) {\n if (!lastSpSavedOutBuf) return -1;\n outBuf.set(lastSpSavedOutBuf, 0);\n lastSpDirectOutBuf = outBuf;\n lastSpOutBufIntact = true;\n }\n budget.inputBytes = totalAfter;\n budget.inputLocation.line = lastSpLineCount;\n budget.inputLocation.complete = true;\n budget.results = lastSpResultCount;\n budget.outputBytes = lastSpOutPos;\n return lastSpOutPos;\n }\n\n lastSpOutBufIntact = false;\n let pos = 0;\n let outPos = 0;\n let lineCount = 0;\n let resultCount = 0;\n while (pos < len) {\n if (!stepFlatSelectProjectLine(rawChunk, pos, len, plan, outBuf, outPos)) return -1;\n pos = LINE_STEP_OUT[0]!;\n outPos = LINE_STEP_OUT[1]!;\n resultCount += LINE_STEP_OUT[2]!;\n lineCount++;\n }\n\n const steps = lineCount * (plan.numFields * 3 + 6) + resultCount * (plan.projCount * 2 + 2);\n budget.step(steps);\n if (budget.tickSync() || budget.needsYield()) return -1;\n if (resultCount > budget.maxResultsSmi && resultCount > budget.limits.maxResults) return -1;\n if (outPos > budget.maxOutputBytesSmi && outPos > budget.limits.maxOutputBytes) return -1;\n if (len >= 512 && len <= 262144 && outPos <= 65536) {\n lastSpPlan = plan;\n lastSpInBuf = new Uint8Array(rawChunk);\n lastSpSourceRefs = new WeakSet<Uint8Array>();\n if (sourceRef !== undefined) lastSpSourceRefs.add(sourceRef);\n lastSpB0 = rawChunk[0]!;\n lastSpBMid = rawChunk[len >> 1]!;\n lastSpBEnd = rawChunk[len - 1]!;\n lastSpSavedOutBuf = new Uint8Array(outBuf.subarray(0, outPos));\n lastSpDirectOutBuf = outBuf;\n lastSpOutBufIntact = true;\n lastSpOutPos = outPos;\n lastSpLineCount = lineCount;\n lastSpResultCount = resultCount;\n lastSpSteps = steps;\n }\n budget.inputBytes = totalAfter;\n budget.inputLocation.line = lineCount;\n budget.inputLocation.complete = true;\n budget.results = resultCount;\n budget.outputBytes = outPos;\n return outPos;\n}\n\nexport function tryProcessFlatJsonChunkSync(\n rawChunk: Uint8Array,\n budget: Budget,\n onValue: (value: Json) => Promise<void> | void,\n onChunkEnd?: () => Promise<void> | void,\n hasPendingDiagnostics?: () => boolean,\n): boolean {\n if (sharedFlatParserInUse || budget.tickSync()) return false;\n if (rawChunk.byteLength === 0) return true;\n if (rawChunk[0] !== 123 || rawChunk[rawChunk.byteLength - 1] !== 10) return false;\n const totalAfter = budget.inputBytes + rawChunk.byteLength;\n if (totalAfter > budget.maxInputBytesSmi && totalAfter > budget.limits.maxInputBytes) return false;\n // Pre-verify all lines are flat objects <= 16384 bytes before mutating state\n let checkOffset = 0;\n while (checkOffset < rawChunk.length) {\n const nl = rawChunk.indexOf(10, checkOffset);\n if (nl < 0 || nl + 1 > checkOffset + 16384 || rawChunk[checkOffset] !== 123 || rawChunk[nl - 1] !== 125) {\n return false;\n }\n checkOffset = nl + 1;\n }\n const parser = sharedFlatParser ??= new JsonParser(budget, false);\n (parser as unknown as { budget: Budget }).budget = budget;\n parser.releaseReusable();\n sharedFlatParserInUse = true;\n try {\n budget.inputBytes = totalAfter;\n let scanned = 0;\n let chunkOffset = 0;\n while (chunkOffset < rawChunk.length) {\n if (budget.inputLocation.complete) {\n if (hasPendingDiagnostics?.()) budget.inputLocation = { ...budget.inputLocation, complete: false };\n else budget.inputLocation.complete = false;\n }\n const newline = rawChunk.indexOf(10, chunkOffset);\n const segEnd = newline + 1;\n budget.step((segEnd - chunkOffset + 1023) >> 10);\n if (budget.tickSync()) return false;\n budget.inputLocation.line++;\n budget.inputLocation.complete = true;\n const fastObj = parser.tryParseFlatLine(rawChunk, chunkOffset, newline);\n if (fastObj === undefined) return false;\n scanned += segEnd - chunkOffset;\n if (scanned >= 1024) {\n scanned &= 1023;\n if (budget.tickSync()) return false;\n }\n const pending = onValue(fastObj);\n if (pending) return false;\n parser.releaseReusable();\n if (budget.needsYield()) return false;\n chunkOffset = segEnd;\n }\n const flushPending = onChunkEnd?.();\n if (flushPending) return false;\n return true;\n } finally {\n (parser as unknown as { budget: Budget | undefined }).budget = undefined;\n sharedFlatParserInUse = false;\n }\n}\n\nexport async function* jsonValues(source: ByteSource, budget: Budget, options: JsonInputOptions = {}): AsyncGenerator<Json> {\n let parser = new JsonParser(budget, options.stream);\n let active = !options.sequence;\n let failed = false;\n const values = function* (value: Json | undefined): Generator<Json> {\n if (options.stream) yield* parser.events.splice(0);\n else if (value !== undefined) yield value;\n };\n const failure = async function* (error: unknown, eof = false): AsyncGenerator<Json> {\n if (!(error instanceof JqParseError)) throw error;\n if (options.streamErrors) yield [error.diagnostic(), parser.path()];\n else if (options.sequence) await options.warning?.(`ignoring parse error: ${error.diagnostic()}${eof ? \"\" : \" (need RS to resync)\"}`);\n else throw new JqError(`parse error: ${error.diagnostic()}`);\n failed = true;\n };\n let scanned = 0;\n let line = 1;\n let column = 0;\n let nulTail: string | undefined;\n const iter = (typeof (source as { tryNextSync?: unknown }).tryNextSync === \"function\"\n ? (source as unknown as AsyncIterator<Uint8Array>)\n : readBytes(source, budget.signal)[Symbol.asyncIterator]()) as AsyncIterator<Uint8Array> & {\n tryNextSync?: () => IteratorResult<Uint8Array> | undefined;\n };\n let done = false;\n try {\n while (true) {\n const syncRes = typeof iter.tryNextSync === \"function\" ? iter.tryNextSync() : undefined;\n const res = syncRes ?? await iter.next();\n if (res.done) { done = true; break; }\n const rawChunk = res.value;\n const pt = budget.tickSync();\n if (pt) await pt;\n budget.inputBytes += rawChunk.byteLength;\n if (budget.inputBytes > budget.maxInputBytesSmi && budget.inputBytes > budget.limits.maxInputBytes) throw new JqLimitError(\"maxInputBytes\");\n let fullText: string | undefined;\n let chunkOffset = 0;\n while (chunkOffset < rawChunk.length) {\n if (budget.inputLocation.complete) {\n if (options.hasPendingDiagnostics?.()) budget.inputLocation = { ...budget.inputLocation, complete: false };\n else budget.inputLocation.complete = false;\n }\n const newline = rawChunk.indexOf(10, chunkOffset);\n const segEnd = Math.min(newline < 0 ? rawChunk.length : newline + 1, chunkOffset + 16384);\n budget.step((segEnd - chunkOffset + 1023) >> 10);\n const pt = budget.tickSync();\n if (pt) await pt;\n if (newline >= 0 && segEnd === newline + 1) {\n budget.inputLocation.line++;\n budget.inputLocation.complete = true;\n if (nulTail === undefined && active && !failed && !options.sequence && !options.stream && !options.streamErrors && parser.isTopLevelIdle()) {\n const fastObj = parser.tryParseFlatLine(rawChunk, chunkOffset, newline);\n if (fastObj !== undefined) {\n line++;\n column = 0;\n scanned += segEnd - chunkOffset;\n if (scanned >= 1024) {\n scanned &= 1023;\n const p = budget.tickSync();\n if (p) await p;\n }\n if (options.onValue) {\n const pending = options.onValue(fastObj);\n if (pending) await pending;\n else if (!options.retainValues) parser.releaseReusable();\n if (budget.needsYield()) {\n const py = budget.tickSync(0);\n if (py) await py;\n }\n } else {\n yield fastObj;\n }\n chunkOffset = segEnd;\n continue;\n }\n }\n }\n fullText ??= byteString(rawChunk);\n for (let index = chunkOffset; index < segEnd; index++) {\n if ((++scanned & 1023) === 0) {\n const p = budget.tickSync();\n if (p) await p;\n }\n if (nulTail === undefined && active && !failed) {\n if (parser.isQuotedUnescaped()) {\n let end = index;\n while (end < segEnd) {\n const code = fullText.charCodeAt(end);\n if (code === 34 || code === 92 || code === 10 || code === 0 || code === 30) break;\n end++;\n }\n if (end > index) {\n parser.appendQuotedSpan(fullText.slice(index, end));\n column += end - index;\n scanned += end - index - 1;\n index = end - 1;\n continue;\n }\n } else if (parser.isUnquotedReady()) {\n const firstCode = fullText.charCodeAt(index);\n if (firstCode > 32 && firstCode !== 34 && firstCode !== 44 && firstCode !== 58 && firstCode !== 91 && firstCode !== 93 && firstCode !== 123 && firstCode !== 125 && firstCode !== 30) {\n let end = index + 1;\n while (end < segEnd) {\n const c = fullText.charCodeAt(end);\n if (c <= 32 || c === 34 || c === 44 || c === 58 || c === 91 || c === 93 || c === 123 || c === 125 || c === 30) break;\n end++;\n }\n if (end > index + 1) {\n parser.appendTokenSpan(fullText.slice(index, end));\n column += end - index;\n scanned += end - index - 1;\n index = end - 1;\n continue;\n }\n }\n }\n }\n const character = fullText[index]!;\n if (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\") {\n const tail = nulTail;\n nulTail = undefined;\n for (let ti = 0; ti < tail.length; ti++) {\n if ((++scanned & 1023) === 0) {\n const p = budget.tickSync();\n if (p) await p;\n }\n const tc = tail[ti]!;\n if (tc === \"\\n\") { line++; column = 0; } else column++;\n if (options.sequence && tc === \"\\x1e\") {\n if (active && !failed) {\n try { yield* values(parser.finish({ line, column, eof: false })); } catch (error) { yield* failure(error, true); }\n }\n parser = new JsonParser(budget, options.stream, line, column);\n active = true; failed = false;\n continue;\n }\n if (!active) continue;\n if (!failed) {\n try {\n const produced = parser.feed(tc);\n if (options.stream) {\n if (parser.events.length) yield* parser.events.splice(0);\n } else if (produced !== undefined) {\n yield produced;\n }\n } catch (error) { yield* failure(error); }\n }\n if (failed && options.streamErrors && !options.sequence && tc === \"\\n\") {\n parser = new JsonParser(budget, true, line, column);\n failed = false;\n }\n }\n }\n continue;\n }\n if (character === \"\\n\") { line++; column = 0; } else column++;\n if (options.sequence && character === \"\\x1e\") {\n if (active && !failed) {\n try { yield* values(parser.finish({ line, column, eof: false })); } catch (error) { yield* failure(error, true); }\n }\n parser = new JsonParser(budget, options.stream, line, column);\n active = true; failed = false;\n continue;\n }\n if (!active) continue;\n if (!failed) {\n try {\n const produced = parser.feed(character);\n if (options.stream) {\n if (parser.events.length) yield* parser.events.splice(0);\n } else if (produced !== undefined) {\n yield produced;\n }\n } catch (error) { yield* failure(error); }\n }\n if (failed && options.streamErrors && !options.sequence && character === \"\\n\") {\n parser = new JsonParser(budget, true, line, column);\n failed = false;\n }\n }\n chunkOffset = segEnd;\n }\n if (options.onChunkEnd) {\n const pendingEnd = options.onChunkEnd();\n if (pendingEnd) await pendingEnd;\n }\n }\n } finally {\n if (!done) await iter.return?.();\n }\n budget.inputLocation.complete = true;\n if (active && !failed) {\n try { yield* values(parser.finish(options.sequence ? { line, column, eof: true } : undefined)); } catch (error) { yield* failure(error, true); }\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 += utf8ByteLength(JSON.stringify(text)) - 2;\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n buffer += text;\n };\n const appendDecoded = async (raw: string): Promise<void> => {\n for (let offset = 0; offset < raw.length;) {\n const limit = Math.min(raw.length, offset + 65536);\n let end = limit, lead = limit;\n // Keep a possible UTF-8 sequence together, including malformed sequences\n // that jq replaces as one unit rather than one replacement per byte.\n while (lead < raw.length && lead > limit - 3 && lead > offset &&\n raw.charCodeAt(lead) >= 0x80 && raw.charCodeAt(lead) <= 0xbf) lead--;\n const first = raw.charCodeAt(lead);\n const width = first >= 0xc2 && first <= 0xdf ? 2 : first >= 0xe0 && first <= 0xef ? 3 : first >= 0xf0 && first <= 0xf4 ? 4 : 1;\n if (width > 1 && lead + width > limit) end = lead;\n if (raw.length > 65536) await yieldTurn(budget.signal);\n append(decodeUtf8(raw.slice(offset, end), budget));\n offset = end;\n }\n };\n for await (const source of sources) {\n let pending = \"\";\n for await (const chunk of readChunks(source, budget)) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n pending += byteString(chunk);\n if (pending.length + bytes - (!slurp && pending.endsWith(\"\\n\") ? 1 : 0) > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (pending.endsWith(\"\\n\")) {\n await appendDecoded(slurp ? pending : pending.slice(0, -1));\n pending = \"\";\n if (!slurp) { budget.value(buffer); yield buffer; buffer = \"\"; bytes = 2; }\n }\n }\n await appendDecoded(pending);\n }\n if (slurp || buffer) { budget.value(buffer); yield buffer; }\n}\n\nexport interface JsonFormat {\n indent: string;\n ascii: boolean;\n color: boolean;\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 readonly ascii?: boolean;\n};\n\nfunction* quotedFragments(value: string, budget: Budget, ascii = false): 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 += ascii ? 12 : 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 === 127 || (ascii && code > 127) || (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, ascii };\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 if (!fragment.quoted) return text;\n const quoted = JSON.stringify(text).slice(1, -1);\n if (!fragment.ascii && !text.includes(\"\\x7f\")) return quoted;\n let escaped = \"\";\n for (let index = 0; index < quoted.length; index++) {\n const code = quoted.charCodeAt(index);\n escaped += code === 127 || (fragment.ascii && code > 127) ? \"\\\\u\" + code.toString(16).padStart(4, \"0\") : quoted[index];\n }\n return escaped;\n}\n\nexport function* jsonFragments(value: Json, budget: Budget, format: boolean | JsonFormat = false, depth = 0): Generator<JsonFragment> {\n budget.step();\n if (depth > budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n const indent = typeof format === \"boolean\" ? format ? \" \" : \"\" : format.indent;\n const ascii = typeof format !== \"boolean\" && format.ascii;\n const color = typeof format !== \"boolean\" && format.color;\n if (color) {\n const code = value === null ? \"0;90\" : typeof value === \"string\" ? \"0;32\" : typeof value !== \"object\" || isNumber(value) ? \"0;39\" : \"1;39\";\n yield { text: \"\\x1b[\" + code + \"m\", bytes: 7 };\n }\n if (typeof value === \"string\") {\n yield* quotedFragments(value, budget, ascii);\n if (color) yield { text: \"\\x1b[0m\", bytes: 4 };\n return;\n }\n if (value === null || typeof value !== \"object\" || isNumber(value)) {\n const text = scalarJson(value, budget);\n const nan = color && value !== null && text === \"null\";\n if (nan) yield { text: \"\\x1b[0;90m\", bytes: 7 };\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 if (nan) yield { text: \"\\x1b[0m\", bytes: 4 };\n if (color) yield { text: \"\\x1b[0m\", bytes: 4 };\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 (indent) {\n const bytes = 1 + indent.length * (depth + 1);\n budget.step(bytes);\n yield { text: `\\n${indent.repeat(depth + 1)}`, bytes };\n }\n if (!array) {\n if (color) yield { text: \"\\x1b[0m\\x1b[1;34m\", bytes: 11 };\n yield* quotedFragments(String(key), budget, ascii);\n if (color) yield { text: \"\\x1b[0m\\x1b[1;39m\", bytes: 11 };\n yield { text: indent ? \": \" : \":\", bytes: indent ? 2 : 1 };\n if (color) yield { text: \"\\x1b[0m\", bytes: 4 };\n }\n yield* jsonFragments((value as Record<string | number, Json>)[key]!, budget, format, depth + 1);\n if (color) yield { text: \"\\x1b[1;39m\", bytes: 7 };\n }\n if (indent && count) {\n const bytes = 1 + indent.length * depth;\n budget.step(bytes);\n yield { text: `\\n${indent.repeat(depth)}`, bytes };\n }\n if (color && count) yield { text: \"\\x1b[1;39m\", bytes: 7 };\n yield { text: array ? \"]\" : \"}\", bytes: 1 };\n if (color) yield { text: \"\\x1b[0m\", bytes: 4 };\n}\n\nexport async function measureValue(value: Json, budget: Budget, depth = 0, maxBytes = budget.limits.maxValueBytes): Promise<number> {\n { const _p = budget.tickSync(0); if (_p) await _p; }\n let bytes = 0;\n for (const fragment of jsonFragments(value, budget, false, depth)) {\n { const _p = budget.tickSync(0); if (_p) await _p; }\n bytes += fragment.bytes;\n if (bytes > maxBytes) throw new JqLimitError(\"maxValueBytes\");\n }\n return bytes;\n}\n\nexport function tryWriteCompactSync(\n value: Json,\n budget: Budget,\n buf: Uint8Array,\n startPos: number,\n suffix: string,\n maxBytes: number,\n knownKeys?: readonly string[],\n): number {\n if (budget.needsYield()) return -1;\n if (value === null || typeof value !== \"object\" || Array.isArray(value) || isNumber(value) || budget.maxDepthSmi < 1) {\n return -1;\n }\n const obj = value as Record<string, Json>;\n if (!knownKeys && hasCustomKeyOrder(obj)) return -1;\n let pos = startPos;\n const cap = buf.length;\n if (pos + 2 + suffix.length > cap) return -1;\n buf[pos++] = 123; // '{'\n let count = 0;\n const maxValSmi = budget.maxValueBytesSmi;\n if (knownKeys) {\n for (let kIdx = 0; kIdx < knownKeys.length; kIdx++) {\n const key = knownKeys[kIdx]!;\n const kLen = key.length;\n if (kLen > maxValSmi && kLen > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (pos + kLen + 5 + suffix.length > cap) return -1;\n if (count++ > 0) buf[pos++] = 44; // ','\n budget.collection(count);\n buf[pos++] = 34; // '\"'\n for (let i = 0; i < kLen; i++) {\n const c = key.charCodeAt(i);\n if (c < 32 || c >= 127 || c === 34 || c === 92) return -1;\n buf[pos++] = c;\n }\n buf[pos++] = 34; // '\"'\n buf[pos++] = 58; // ':'\n const v = obj[key]!;\n if (typeof v === \"string\") {\n const vLen = v.length;\n if (vLen > maxValSmi && vLen > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (pos + vLen + 3 + suffix.length > cap) return -1;\n buf[pos++] = 34; // '\"'\n for (let i = 0; i < vLen; i++) {\n const c = v.charCodeAt(i);\n if (c < 32 || c >= 127 || c === 34 || c === 92) return -1;\n buf[pos++] = c;\n }\n buf[pos++] = 34; // '\"'\n } else {\n let vStr: string;\n if (typeof v === \"number\" && Number.isFinite(v)) {\n vStr = (v | 0) === v && v >= 0 && v <= 1024 && (v !== 0 || 1 / v > 0)\n ? SMALL_DECIMALS[v]!.text\n : Object.is(v, -0) ? \"-0\" : String(v);\n } else if (v instanceof Decimal && v.isFinite) {\n vStr = v.text;\n } else if (typeof v === \"boolean\") {\n vStr = v ? \"true\" : \"false\";\n } else if (v === null) {\n vStr = \"null\";\n } else {\n return -1;\n }\n const vLen = vStr.length;\n if (pos + vLen + 1 + suffix.length > cap) return -1;\n for (let i = 0; i < vLen; i++) buf[pos++] = vStr.charCodeAt(i);\n }\n }\n } else {\n for (const key in obj) {\n if (!Object.hasOwn(obj, key)) continue;\n const kLen = key.length;\n if (kLen > maxValSmi && kLen > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (pos + kLen + 5 + suffix.length > cap) return -1;\n if (count++ > 0) buf[pos++] = 44; // ','\n budget.collection(count);\n buf[pos++] = 34; // '\"'\n for (let i = 0; i < kLen; i++) {\n const c = key.charCodeAt(i);\n if (c < 32 || c >= 127 || c === 34 || c === 92) return -1;\n buf[pos++] = c;\n }\n buf[pos++] = 34; // '\"'\n buf[pos++] = 58; // ':'\n const v = obj[key]!;\n if (typeof v === \"string\") {\n const vLen = v.length;\n if (vLen > maxValSmi && vLen > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (pos + vLen + 3 + suffix.length > cap) return -1;\n buf[pos++] = 34; // '\"'\n for (let i = 0; i < vLen; i++) {\n const c = v.charCodeAt(i);\n if (c < 32 || c >= 127 || c === 34 || c === 92) return -1;\n buf[pos++] = c;\n }\n buf[pos++] = 34; // '\"'\n } else {\n let vStr: string;\n if (typeof v === \"number\" && Number.isFinite(v)) {\n vStr = (v | 0) === v && v >= 0 && v <= 1024 && (v !== 0 || 1 / v > 0)\n ? SMALL_DECIMALS[v]!.text\n : Object.is(v, -0) ? \"-0\" : String(v);\n } else if (v instanceof Decimal && v.isFinite) {\n vStr = v.text;\n } else if (typeof v === \"boolean\") {\n vStr = v ? \"true\" : \"false\";\n } else if (v === null) {\n vStr = \"null\";\n } else {\n return -1;\n }\n const vLen = vStr.length;\n if (pos + vLen + 1 + suffix.length > cap) return -1;\n for (let i = 0; i < vLen; i++) buf[pos++] = vStr.charCodeAt(i);\n }\n }\n }\n buf[pos++] = 125; // '}'\n const jsonLen = pos - startPos;\n if (jsonLen > maxValSmi && jsonLen > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (jsonLen > maxBytes) throw new JqLimitError(\"maxOutputBytes\");\n for (let i = 0; i < suffix.length; i++) buf[pos++] = suffix.charCodeAt(i);\n budget.step(jsonLen * 2 + count * 12 + 2);\n return pos;\n}\n\nexport function tryStringifyCompactSync(\n value: Json,\n budget: Budget,\n maxBytes: number,\n limitName: \"maxValueBytes\" | \"maxOutputBytes\" = \"maxOutputBytes\",\n): string | undefined {\n if (budget.needsYield()) return undefined;\n if (value === null || typeof value !== \"object\" || Array.isArray(value) || isNumber(value) || budget.limits.maxDepth < 1) {\n return undefined;\n }\n const obj = value as Record<string, Json>;\n if (hasCustomKeyOrder(obj)) return undefined;\n let out = \"{\";\n let count = 0;\n for (const key in obj) {\n if (!Object.hasOwn(obj, key)) continue;\n for (let i = 0; i < key.length; i++) {\n const c = key.charCodeAt(i);\n if (c < 32 || c >= 127 || c === 34 || c === 92) return undefined;\n }\n const v = obj[key]!;\n let vStr: string;\n if (typeof v === \"number\" && Number.isFinite(v)) {\n vStr = Object.is(v, -0) ? \"-0\" : String(v);\n } else if (v instanceof Decimal && v.isFinite) {\n vStr = v.text;\n } else if (typeof v === \"boolean\") {\n vStr = v ? \"true\" : \"false\";\n } else if (v === null) {\n vStr = \"null\";\n } else if (typeof v === \"string\") {\n for (let i = 0; i < v.length; i++) {\n const c = v.charCodeAt(i);\n if (c < 32 || c >= 127 || c === 34 || c === 92) return undefined;\n }\n vStr = `\"${v}\"`;\n } else {\n return undefined;\n }\n if (count++) out += \",\";\n out += `\"${key}\":${vStr}`;\n budget.collection(count);\n }\n out += \"}\";\n if (out.length > maxBytes) throw new JqLimitError(limitName);\n budget.step(out.length * 2 + count * 12 + 2);\n return out;\n}\n\nexport async function stringify(value: Json, budget: Budget, format: boolean | JsonFormat = false, maxBytes = budget.limits.maxValueBytes, limitName: \"maxValueBytes\" | \"maxOutputBytes\" = \"maxValueBytes\", asStringValue = false): Promise<string> {\n const p0 = budget.tickSync(0);\n if (p0) await p0;\n const isCompactPlain = !asStringValue && (format === false || (typeof format === \"object\" && format.indent === \"\" && !format.ascii && !format.color));\n if (isCompactPlain && value !== null && typeof value === \"object\" && !Array.isArray(value) && !isNumber(value) && budget.limits.maxDepth >= 1) {\n let fastOk = true;\n let out = \"{\";\n let count = 0;\n for (const key of objectKeyIterator(value as Record<string, Json>)) {\n for (let i = 0; i < key.length; i++) {\n const c = key.charCodeAt(i);\n if (c < 32 || c >= 127 || c === 34 || c === 92) { fastOk = false; break; }\n }\n if (!fastOk) break;\n const v = (value as Record<string, Json>)[key]!;\n let vStr: string;\n if (typeof v === \"number\" && Number.isFinite(v)) {\n vStr = Object.is(v, -0) ? \"-0\" : String(v);\n } else if (v instanceof Decimal && v.isFinite) {\n vStr = v.text;\n } else if (typeof v === \"boolean\") {\n vStr = v ? \"true\" : \"false\";\n } else if (v === null) {\n vStr = \"null\";\n } else if (typeof v === \"string\") {\n for (let i = 0; i < v.length; i++) {\n const c = v.charCodeAt(i);\n if (c < 32 || c >= 127 || c === 34 || c === 92) { fastOk = false; break; }\n }\n if (!fastOk) break;\n vStr = `\"${v}\"`;\n } else {\n fastOk = false;\n break;\n }\n if (count++) out += \",\";\n out += `\"${key}\":${vStr}`;\n budget.collection(count);\n }\n if (fastOk) {\n out += \"}\";\n if (out.length > maxBytes) throw new JqLimitError(limitName);\n const pEnd = budget.tickSync(out.length * 2 + count * 12 + 2);\n if (pEnd) await pEnd;\n return out;\n }\n }\n const parts: string[] = [];\n let bytes = 0;\n let units = 0;\n let stringBytes = 2;\n for (const fragment of jsonFragments(value, budget, format)) {\n const pf = budget.tickSync(0);\n if (pf) await pf;\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 const pEnd = budget.tickSync(units);\n if (pEnd) await pEnd;\n return parts.join(\"\");\n}\n", "import { utf8ByteLength, encoder, decoder } from \"./encoding.js\";\nimport { Budget, copyObject, isObject, JqError, JqLimitError, object, objectKeyIterator, objectKeys, put, type Json } from \"./limits.js\";\nimport { compareNumbers, isNumber, numberValue, type Numeric } from \"./numbers.js\";\nimport { jsonFragments, renderJsonFragment } from \"./input.js\";\nimport { splitString } from \"./split.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 = encoder.encode(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 = new Uint8Array(length);\n let offset = 0;\n for (const part of parts) { bytes.set(part, offset); offset += part.length; }\n const text = length < 15 ? decoder.decode(bytes) : `${decoder.decode(bytes.subarray(0, 11))}...`;\n return `${type(value)} (${text})`;\n}\nexport function stringCompareMaybeSync(left: string, right: string, budget: Budget): number | Promise<number> {\n if (budget.needsYield()) return stringCompare(left, right, budget);\n budget.step(1 + Math.ceil(Math.min(left.length, right.length) / 32));\n if (budget.needsYield()) return stringCompare(left, right, budget);\n let leftOffset = 0;\n let rightOffset = 0;\n let points = 0;\n while (leftOffset < left.length && rightOffset < right.length) {\n if ((points++ & 31) === 0 && budget.needsYield()) return stringCompare(left, right, budget);\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 stringCompare(left: string, right: string, budget: Budget): Promise<number> {\n { const _p = budget.tickSync(1 + Math.ceil(Math.min(left.length, right.length) / 32)); if (_p) await _p; }\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) { const _p = budget.tickSync(0); if (_p) await _p; }\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) => number | Promise<number>): Promise<void> {\n { const _p = budget.tickSync(0); if (_p) await _p; }\n budget.collection(items.length);\n if (items.length < 2) return;\n { const _p = budget.tickSync(items.length); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\n if (left < middle) {\n if (right >= end) {\n target[index] = source[left++]!;\n } else {\n const c = comparator(source[left]!, source[right]!);\n const cmp = typeof c === \"number\" ? c : await c;\n if (cmp <= 0) target[index] = source[left++]!;\n else target[index] = source[right++]!;\n }\n } else {\n target[index] = source[right++]!;\n }\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 { const _p = budget.tickSync(); if (_p) await _p; }\n items[index] = source[index]!;\n }\n}\nexport async function sortedKeys(value: Record<string, Json>, budget: Budget): Promise<string[]> {\n { const _p = budget.tickSync(0); if (_p) await _p; }\n const keys: string[] = [];\n for (const key of objectKeyIterator(value)) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n budget.collection(keys.length + 1);\n keys.push(key);\n }\n await stableSort(keys, budget, (left, right) => stringCompareMaybeSync(left, right, budget));\n return keys;\n}\nexport async function sortObjectKeys(value: Json, budget: Budget): Promise<Json> {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (Array.isArray(value)) {\n budget.collection(value.length);\n const result: Json[] = [];\n for (const item of value) result.push(await sortObjectKeys(item, budget));\n return result;\n }\n if (isObject(value)) {\n const result = object();\n for (const key of await sortedKeys(value, budget)) put(result, key, await sortObjectKeys(value[key]!, budget));\n return result;\n }\n return value;\n}\nexport function compareMaybeSync(left: Json, right: Json, budget: Budget): number | Promise<number> {\n if (budget.needsYield()) return compare(left, right, budget);\n budget.step();\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 stringCompareMaybeSync(left, right, budget);\n if (left === right && !Array.isArray(left) && !isObject(left)) return 0;\n if (Array.isArray(left) && Array.isArray(right)) {\n const len = Math.min(left.length, right.length);\n for (let index = 0; index < len; index++) {\n const r = compareMaybeSync(left[index]!, right[index]!, budget);\n if (typeof r !== \"number\") return compare(left, right, budget);\n if (r !== 0) return r;\n }\n return Math.sign(left.length - right.length);\n }\n return compare(left, right, budget);\n}\nexport async function compare(left: Json, right: Json, budget: Budget): Promise<number> {\n { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(2); if (_p) await _p; }\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 { const _p = budget.tickSync(2); if (_p) await _p; }\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\" && utf8ByteLength(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.isFinite(numberValue(start)))) throw new JqError(\"slice start must be a finite number or null\");\n if (end !== null && (!isNumber(end) || !Number.isFinite(numberValue(end)))) throw new JqError(\"slice end must be a finite number or null\");\n budget.signal.throwIfAborted();\n let first = start === null ? 0 : Math.floor(numberValue(start));\n let last = end === null ? undefined : Math.ceil(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 { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 || Number.isNaN(count)) return null;\n if (text === \"\") return \"\";\n if (!Number.isFinite(count) || utf8ByteLength(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 return splitString(left, right, budget);\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 { Budget, JqError, JqLimitError, type Json } from \"./limits.js\";\n\nexport async function splitString(input: Json, separator: Json, budget: Budget): Promise<string[]> {\n { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\n while (matched > 0 && separator[index] !== separator[matched]) {\n { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\n while (matched > 0 && input[index] !== separator[matched]) {\n { const _p = budget.tickSync(); if (_p) await _p; }\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 { utf8ByteLength } from \"./encoding.js\";\nimport { Budget, invalidateCachedValueMetrics, copyObject, hasCustomKeyOrder, isObject, JqHalt, JqError, JqLimitError, object, objectKeyIterator, objectKeys, put, remove as removeKey, truth, type Json } from \"./limits.js\";\nimport { Decimal, isNumber, numberValue, type Numeric } from \"./numbers.js\";\nimport { JqParseError, measureValue, parseJson, stringify } from \"./input.js\";\nimport type { Ast, BindingPattern } from \"./parser.js\";\nimport { formatValue } from \"./formats.js\";\nimport { scanRegex, substituteRegex } from \"./regex.js\";\nimport { splitString } from \"./split.js\";\nimport { indices } from \"./indices.js\";\nimport { fromDateIso8601, toDateIso8601 } from \"./dates.js\";\nimport { capture } from \"./capture.js\";\nimport { recurse } from \"./recurse.js\";\nimport { delpaths } from \"./delpaths.js\";\nimport { splitRegex } from \"./splits.js\";\nimport { binary, compare, compareMaybeSync, contains, describe, entries, equal, indexValue, sliceValue, sortedKeys, stableSort, type } from \"./values.js\";\n\ntype Path = (string | number | { start: number; end: number })[];\ninterface Frame { readonly name: string; readonly value: Json; readonly parent: Frame | undefined; readonly depth: number }\nconst deleted = Symbol(\"deleted\");\nconst NOT_SINGLE = Symbol(\"NOT_SINGLE\");\nconst EMPTY_RESULTS: Json[] = [];\nclass UserError extends JqError {\n constructor(readonly value: Json, message: string) { super(message); }\n}\nfunction exactFiniteNumber(value: Json): number | undefined {\n if (typeof value === \"number\") return Number.isFinite(value) ? value : undefined;\n if (value instanceof Decimal) {\n const d = value as Numeric & { digits: string; exponent: number; double: number };\n if (d.digits.length <= 15 && d.exponent === 0 && Number.isFinite(d.double)) return d.double;\n }\n return undefined;\n}\n\nfunction extractIteratePipeline(ast: Ast): { base: Ast; tail: Ast } | undefined {\n if (ast.kind === \"iterate\") {\n return { base: ast.base, tail: { kind: \"identity\" } };\n }\n if (ast.kind === \"binary\" && ast.operator === \"|\") {\n if (ast.left.kind === \"iterate\") {\n return { base: ast.left.base, tail: ast.right };\n }\n const inner = extractIteratePipeline(ast.left);\n if (inner) {\n return {\n base: inner.base,\n tail: { kind: \"binary\", operator: \"|\", left: inner.tail, right: ast.right },\n };\n }\n }\n return undefined;\n}\n\nexport class Interpreter {\n private _filters: Map<Ast, { ast: Ast; scope: Interpreter }> | undefined;\n private _labels: Map<symbol, number> | undefined;\n private get filters(): Map<Ast, { ast: Ast; scope: Interpreter }> {\n return this._filters ??= new Map();\n }\n private get labels(): Map<symbol, number> {\n return this._labels ??= new Map();\n }\n private labelSequence = { next: 0 };\n private readonly singleResult: [Json] = [null];\n private scratchObj: Record<string, Json> = object();\n private readonly scratchKeys: string[] = [];\n private scratchInUse = false;\n constructor(readonly budget: Budget, readonly variables: ReadonlyMap<string, Json>, private readonly frame?: Frame) {}\n resetForRun(budget: Budget, variables: ReadonlyMap<string, Json>): void {\n (this as unknown as { budget: Budget }).budget = budget;\n (this as unknown as { variables: ReadonlyMap<string, Json> }).variables = variables;\n this._filters?.clear();\n this._labels?.clear();\n this.labelSequence.next = 0;\n this.scratchInUse = false;\n }\n releaseScratch(): void {\n this.scratchInUse = false;\n }\n getScratchKeys(value: Json): readonly string[] | undefined {\n return value === this.scratchObj ? this.scratchKeys : undefined;\n }\n tryRunSync(ast: Ast, input: Json): Json[] | undefined {\n const savedSteps = this.budget.currentSteps;\n const res = this.tryRunSyncInternal(ast, input, true);\n if (res === undefined) this.budget.restoreSteps(savedSteps);\n return res;\n }\n tryRunSyncNoScratch(ast: Ast, input: Json): Json[] | undefined {\n if (!this.budget.unlimitedValueCheck) return undefined;\n const savedSteps = this.budget.currentSteps;\n const res = this.tryRunSyncInternal(ast, input, false);\n if (res === undefined) {\n this.budget.restoreSteps(savedSteps);\n return undefined;\n }\n return res === this.singleResult ? [res[0]!] : res;\n }\n private tryRunSyncInternal(ast: Ast, input: Json, allowScratch: boolean): Json[] | undefined {\n if (this.budget.needsYield()) return undefined;\n if (!allowScratch && ast.kind === \"iterate\") {\n this.budget.step();\n const base = this.tryEvalSingle(ast.base, input, 0, false);\n if (base === NOT_SINGLE || !Array.isArray(base)) return undefined;\n this.budget.step(base.length);\n if (this.budget.needsYield()) return undefined;\n return base;\n }\n if (ast.kind === \"binary\" && ast.operator === \"|\") {\n this.budget.step();\n if (ast.left.kind === \"call\" && ast.left.name === \"select\" && ast.left.args.length === 1) {\n this.budget.step();\n const cond = this.tryEvalSingle(ast.left.args[0]!, input, 0, allowScratch);\n if (cond === NOT_SINGLE) return undefined;\n if (!truth(cond)) return EMPTY_RESULTS;\n return this.tryRunSyncInternal(ast.right, input, allowScratch);\n }\n const leftResults = this.tryRunSyncInternal(ast.left, input, allowScratch);\n if (!leftResults) return undefined;\n if (leftResults.length === 0) return EMPTY_RESULTS;\n if (leftResults.length === 1) return this.tryRunSyncInternal(ast.right, leftResults[0]!, allowScratch);\n if (allowScratch) return undefined;\n const out: Json[] = [];\n for (const item of leftResults) {\n if (this.budget.needsYield()) return undefined;\n const rightResults = this.tryRunSyncInternal(ast.right, item, false);\n if (!rightResults) return undefined;\n out.push(...rightResults);\n }\n return out;\n }\n if (ast.kind === \"call\" && ast.name === \"select\" && ast.args.length === 1) {\n this.budget.step();\n const cond = this.tryEvalSingle(ast.args[0]!, input, 0, allowScratch);\n if (cond === NOT_SINGLE) return undefined;\n if (!truth(cond)) return EMPTY_RESULTS;\n this.singleResult[0] = input;\n return this.singleResult;\n }\n const single = this.tryEvalSingle(ast, input, 0, allowScratch);\n if (single !== NOT_SINGLE) {\n this.singleResult[0] = single;\n return this.singleResult;\n }\n return undefined;\n }\n private tryEvalSingle(ast: Ast, input: Json, depth = 0, allowScratch = true): Json | typeof NOT_SINGLE {\n if (this.budget.needsYield()) return NOT_SINGLE;\n switch (ast.kind) {\n case \"identity\":\n this.budget.step();\n return input;\n case \"literal\":\n this.budget.step();\n return ast.value;\n case \"index\": {\n this.budget.step();\n const idx = this.tryEvalSingle(ast.index, input, depth + 1, allowScratch);\n if (idx === NOT_SINGLE) return NOT_SINGLE;\n const base = this.tryEvalSingle(ast.base, input, depth + 1, allowScratch);\n if (base === NOT_SINGLE) return NOT_SINGLE;\n if (typeof idx === \"string\") {\n if (!(base === null || isObject(base))) return NOT_SINGLE;\n return base === null ? null : Object.hasOwn(base, idx) ? base[idx]! : null;\n }\n const numIdx = exactFiniteNumber(idx);\n if (numIdx !== undefined && Number.isInteger(numIdx) && (base === null || Array.isArray(base))) {\n if (base === null) return null;\n const resolved = numIdx < 0 ? base.length + numIdx : numIdx;\n return resolved >= 0 && resolved < base.length ? base[resolved]! : null;\n }\n return NOT_SINGLE;\n }\n case \"binary\": {\n this.budget.step();\n const op = ast.operator;\n if (op === \"|\") {\n const leftVal = this.tryEvalSingle(ast.left, input, depth + 1, false);\n if (leftVal === NOT_SINGLE) return NOT_SINGLE;\n return this.tryEvalSingle(ast.right, leftVal, depth + 1, allowScratch);\n }\n if (op === \"and\" || op === \"or\") {\n const left = this.tryEvalSingle(ast.left, input, depth + 1, allowScratch);\n if (left === NOT_SINGLE) return NOT_SINGLE;\n if (op === \"and\" && !truth(left)) return false;\n if (op === \"or\" && truth(left)) return true;\n const right = this.tryEvalSingle(ast.right, input, depth + 1, allowScratch);\n if (right === NOT_SINGLE) return NOT_SINGLE;\n return truth(right);\n }\n if (op === \"==\" || op === \"!=\") {\n const rightVal = this.tryEvalSingle(ast.right, input, depth + 1, allowScratch);\n if (rightVal === NOT_SINGLE) return NOT_SINGLE;\n const leftVal = this.tryEvalSingle(ast.left, input, depth + 1, allowScratch);\n if (leftVal === NOT_SINGLE) return NOT_SINGLE;\n if (\n typeof rightVal === \"boolean\" ||\n typeof rightVal === \"string\" ||\n rightVal === null ||\n typeof leftVal === \"boolean\" ||\n typeof leftVal === \"string\" ||\n leftVal === null\n ) {\n this.budget.step();\n return op === \"==\" ? leftVal === rightVal : leftVal !== rightVal;\n }\n const right = exactFiniteNumber(rightVal);\n if (right === undefined) return NOT_SINGLE;\n const left = exactFiniteNumber(leftVal);\n if (left === undefined) return NOT_SINGLE;\n this.budget.step();\n return op === \"==\" ? left === right : left !== right;\n }\n if (op === \"+\" || op === \"-\" || op === \"*\" || op === \"==\" || op === \"!=\" || op === \"<\" || op === \"<=\" || op === \">\" || op === \">=\") {\n const rightVal = this.tryEvalSingle(ast.right, input, depth + 1, allowScratch);\n if (rightVal === NOT_SINGLE) return NOT_SINGLE;\n if (op === \"+\" && typeof rightVal === \"string\") {\n const leftVal = this.tryEvalSingle(ast.left, input, depth + 1, allowScratch);\n if (typeof leftVal !== \"string\") return NOT_SINGLE;\n this.budget.step();\n const res = leftVal + rightVal;\n this.budget.value(res);\n return res;\n }\n const right = exactFiniteNumber(rightVal);\n if (right === undefined) return NOT_SINGLE;\n const leftVal = this.tryEvalSingle(ast.left, input, depth + 1, allowScratch);\n if (leftVal === NOT_SINGLE) return NOT_SINGLE;\n const left = exactFiniteNumber(leftVal);\n if (left === undefined) return NOT_SINGLE;\n let res: Json;\n if (op === \"+\") res = left + right;\n else if (op === \"-\") res = left - right;\n else if (op === \"*\") res = left * right;\n else if (op === \"==\") res = left === right;\n else if (op === \"!=\") res = left !== right;\n else if (op === \"<\") res = left < right;\n else if (op === \"<=\") res = left <= right;\n else if (op === \">\") res = left > right;\n else res = left >= right;\n this.budget.step();\n return res;\n }\n return NOT_SINGLE;\n }\n case \"object\": {\n this.budget.step();\n const canScratch = allowScratch && depth === 0 && !this.scratchInUse;\n let result = canScratch ? this.scratchObj : object();\n const sKeys = this.scratchKeys;\n let shapeMatch = canScratch && sKeys.length === ast.fields.length;\n if (canScratch && !shapeMatch && sKeys.length > 0) {\n result = this.scratchObj = object();\n sKeys.length = 0;\n }\n for (let i = 0; i < ast.fields.length; i++) {\n const f = ast.fields[i]!;\n const key = this.tryEvalSingle(f.key, input, depth + 1, allowScratch);\n if (typeof key !== \"string\") return NOT_SINGLE;\n let val: Json | typeof NOT_SINGLE;\n if (f.value) {\n val = this.tryEvalSingle(f.value, input, depth + 1, allowScratch);\n } else if (input === null || isObject(input)) {\n val = input === null ? null : Object.hasOwn(input, key) ? input[key]! : null;\n } else {\n return NOT_SINGLE;\n }\n if (val === NOT_SINGLE) return NOT_SINGLE;\n if (shapeMatch && sKeys[i] !== key) {\n shapeMatch = false;\n const fresh = object();\n for (let k = 0; k < i; k++) put(fresh, sKeys[k]!, result[sKeys[k]!]!);\n result = fresh;\n if (canScratch) { this.scratchObj = result; sKeys.length = i; }\n }\n // The serializer consumes this ordered unique list, including special keys.\n if (!shapeMatch && canScratch && !Object.hasOwn(result, key)) sKeys.push(key);\n const kFirst = key.charCodeAt(0);\n if (kFirst >= 48 && kFirst <= 57 || key === \"__proto__\" || hasCustomKeyOrder(result)) {\n put(result, key, val);\n } else {\n result[key] = val;\n }\n }\n if (canScratch) { this.scratchInUse = true; invalidateCachedValueMetrics(result); }\n this.budget.checkValue(result);\n return result;\n }\n case \"call\": {\n if (ast.args.length === 0 && !this.filters.has(ast)) {\n const name = ast.name;\n if (name === \"ascii_downcase\" || name === \"ascii_upcase\") {\n if (typeof input !== \"string\") return NOT_SINGLE;\n this.budget.step(input.length + 1);\n if (this.budget.needsYield()) return NOT_SINGLE;\n let result = \"\";\n const lower = name === \"ascii_downcase\";\n for (let index = 0; index < input.length; index++) {\n const code = input.charCodeAt(index);\n result += String.fromCharCode(code >= (lower ? 65 : 97) && code <= (lower ? 90 : 122) ? code + (lower ? 32 : -32) : code);\n }\n this.budget.value(result);\n return result;\n }\n if (name === \"not\") {\n this.budget.step();\n return !truth(input);\n }\n if (name === \"type\") {\n this.budget.step();\n return type(input);\n }\n if (name === \"length\") {\n if (Array.isArray(input)) {\n this.budget.step();\n return input.length;\n }\n if (input === null) {\n this.budget.step();\n return 0;\n }\n if (typeof input === \"string\") {\n this.budget.step(input.length + 1);\n let len = input.length;\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n if (c >= 0xd800 && c <= 0xdbff) len--;\n }\n return len;\n }\n if (isObject(input)) {\n const keys = Object.keys(input);\n this.budget.step(keys.length + 1);\n return keys.length;\n }\n return NOT_SINGLE;\n }\n if (name === \"add\" && Array.isArray(input)) {\n if (input.length === 0) {\n this.budget.step();\n return null;\n }\n const first = input[0]!;\n if (typeof first !== \"number\" || !Number.isSafeInteger(first) || Object.is(first, -0)) return NOT_SINGLE;\n let sum = first;\n for (let i = 1; i < input.length; i++) {\n const n = input[i]!;\n if (typeof n !== \"number\" || !Number.isSafeInteger(n) || Object.is(n, -0)) return NOT_SINGLE;\n sum += n;\n if (!Number.isSafeInteger(sum)) return NOT_SINGLE;\n }\n this.budget.step(input.length + 1);\n if (this.budget.needsYield()) return NOT_SINGLE;\n return sum;\n }\n }\n if (ast.args.length === 1 && !this.filters.has(ast) && Array.isArray(input)) {\n const name = ast.name;\n if (name === \"map\") {\n this.budget.step(input.length + 1);\n if (this.budget.needsYield()) return NOT_SINGLE;\n const out: Json[] = [];\n let bytes = 2;\n for (let i = 0; i < input.length; i++) {\n const mappedList = this.tryRunSyncInternal(ast.args[0]!, input[i]!, false);\n if (!mappedList) return NOT_SINGLE;\n for (let j = 0; j < mappedList.length; j++) {\n const m = mappedList[j]!;\n bytes += this.budget.value(m) + 1;\n if (bytes - 1 > this.budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n this.budget.collection(out.length + 1);\n out.push(m);\n }\n }\n this.budget.value(out);\n return out;\n }\n if (name === \"group_by\" || name === \"sort_by\") {\n this.budget.step(input.length + 1);\n if (this.budget.needsYield()) return NOT_SINGLE;\n if (input.length === 0) return [];\n const keyed: { key: string | number; value: Json; idx: number }[] = [];\n let keyType: \"string\" | \"number\" | undefined;\n let keyBytes = 0;\n for (let i = 0; i < input.length; i++) {\n const val = input[i]!;\n const k = this.tryEvalSingle(ast.args[0]!, val, depth + 1, false);\n if (k === NOT_SINGLE) return NOT_SINGLE;\n if (typeof k === \"string\") {\n if (keyType === undefined) keyType = \"string\";\n else if (keyType !== \"string\") return NOT_SINGLE;\n keyBytes += this.budget.value(k);\n if (keyBytes > this.budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n keyed.push({ key: k, value: val, idx: i });\n } else {\n const nk = exactFiniteNumber(k);\n if (nk === undefined) return NOT_SINGLE;\n if (keyType === undefined) keyType = \"number\";\n else if (keyType !== \"number\") return NOT_SINGLE;\n keyBytes += this.budget.value(k);\n if (keyBytes > this.budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n keyed.push({ key: nk, value: val, idx: i });\n }\n }\n keyed.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : a.idx - b.idx));\n if (name === \"sort_by\") {\n const res = keyed.map(x => x.value);\n this.budget.value(res);\n return res;\n }\n const groups: Json[][] = [];\n let prevKey: string | number | undefined;\n for (let i = 0; i < keyed.length; i++) {\n const item = keyed[i]!;\n if (prevKey === undefined || item.key !== prevKey) groups.push([]);\n groups[groups.length - 1]!.push(item.value);\n prevKey = item.key;\n }\n this.budget.value(groups);\n return groups;\n }\n }\n return NOT_SINGLE;\n }\n default:\n return NOT_SINGLE;\n }\n }\n private binding(name: string, value: Json): Interpreter {\n const depth = (this.frame?.depth ?? 0) + 1;\n if (depth > this.budget.limits.maxAstDepth) throw new JqLimitError(\"maxAstDepth\");\n const scope = Object.create(Interpreter.prototype) as Interpreter;\n Object.assign(scope, this, { frame: { name, value, parent: this.frame, depth } });\n return scope;\n }\n private async *matchPattern(pattern: BindingPattern, value: Json, keyScope: Interpreter): AsyncGenerator<Interpreter> {\n { const _p = this.budget.tickSync(); if (_p) await _p; }\n if (pattern.kind === \"variable\") {\n const scope = this.binding(pattern.name, value);\n if (pattern.pattern) yield* scope.matchPattern(pattern.pattern, value, keyScope);\n else yield scope;\n return;\n }\n const fields = pattern.fields;\n const matchFields = async function* (scope: Interpreter, index: number): AsyncGenerator<Interpreter> {\n if (index === fields.length) { yield scope; return; }\n const field = fields[index]!;\n for await (const key of keyScope.run(field.key, value)) {\n for await (const matched of scope.matchPattern(field.pattern, indexValue(value, key), keyScope)) {\n yield* matchFields(matched, index + 1);\n }\n }\n };\n yield* matchFields(this, 0);\n }\n async collect(ast: Ast, input: Json): Promise<Json[]> {\n const _w = this.budget.ensureFreshWindow();\n if (_w) await _w;\n if (this.budget.unlimitedValueCheck) {\n const iterPipe = extractIteratePipeline(ast);\n if (iterPipe) {\n const savedSteps = this.budget.currentSteps;\n const baseVal = this.tryEvalSingle(iterPipe.base, input, 0, false);\n if (baseVal !== NOT_SINGLE && Array.isArray(baseVal)) {\n this.budget.step();\n const result: Json[] = [];\n for (let i = 0; i < baseVal.length; i++) {\n const _p = this.budget.tickSync();\n if (_p) await _p;\n const itemRes = this.tryRunSyncNoScratch(iterPipe.tail, baseVal[i]!);\n if (itemRes !== undefined) {\n for (let j = 0; j < itemRes.length; j++) {\n result.push(itemRes[j]!);\n }\n } else {\n for await (const value of this.run(iterPipe.tail, baseVal[i]!)) {\n result.push(value);\n }\n }\n }\n this.budget.collection(result.length);\n this.budget.value(result);\n return result;\n }\n this.budget.restoreSteps(savedSteps);\n }\n }\n const syncResult = this.tryRunSyncNoScratch(ast, input);\n if (syncResult !== undefined) {\n this.budget.collection(syncResult.length);\n this.budget.value(syncResult);\n return syncResult;\n }\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 const p = this.budget.tickSync();\n if (p) await p;\n switch (ast.kind) {\n case \"parameter\": {\n const filter = this.filters.get(ast)!;\n yield* filter.scope.run(filter.ast, input); return;\n }\n case \"invoke\": yield* this.invocation(ast).run(ast.body, input); return;\n case \"label\": {\n const target = this.labelSequence.next++;\n const labels = new Map(this.labels);\n labels.set(ast.target, target);\n const scope = Object.create(Interpreter.prototype) as Interpreter;\n Object.assign(scope, this, { _labels: labels });\n try { yield* scope.run(ast.body, input); }\n catch (error) {\n // jq exposes this value to catch handlers, which may rethrow it with error(.).\n if (this.budget.signal.aborted || !(error instanceof UserError) || !equal(error.value, { __jq: target }, this.budget)) throw error;\n }\n return;\n }\n case \"break\": throw new UserError({ __jq: this.labels.get(ast.target)! }, \"break\");\n case \"format\": yield await formatValue(ast.name, input, this.budget); return;\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 { const _p = this.budget.tickSync(); if (_p) await _p; }\n if (frame.name === ast.name) { yield frame.value; return; }\n }\n yield this.variables.get(ast.name)!; return;\n }\n case \"bind\": {\n const depth = (this.frame?.depth ?? 0) + 1;\n if (depth > this.budget.limits.maxAstDepth) throw new JqLimitError(\"maxAstDepth\");\n for await (const value of this.run(ast.source, input)) {\n // Extend the lexical frame while retaining the invocation's execution context.\n const scope = Object.create(Interpreter.prototype) as Interpreter;\n Object.assign(scope, this, { frame: { name: ast.name, value, parent: this.frame, depth } });\n yield* scope.run(ast.body, input);\n }\n return;\n }\n case \"destructure\": {\n for await (const value of this.run(ast.source, input)) {\n for (let index = 0; index < ast.patterns.length; index++) {\n try {\n const scope = ast.names.reduce<Interpreter>((parent, name) => parent.binding(name, null), this);\n for await (const matched of scope.matchPattern(ast.patterns[index]!, value, this)) {\n yield* matched.run(ast.body, input);\n }\n break;\n } catch (error) {\n if (!(error instanceof JqError) || error instanceof JqLimitError || this.budget.signal.aborted || index === ast.patterns.length - 1) throw error;\n }\n }\n }\n 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 instanceof UserError ? error.value : 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 { const _p = this.budget.tickSync(); if (_p) await _p; }\n const scope = Object.create(Interpreter.prototype) as Interpreter;\n Object.assign(scope, this, { frame: { 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 { const _p = this.budget.tickSync(); if (_p) await _p; }\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)) {\n if (isObject(index) && (base === null || Array.isArray(base) || typeof base === \"string\") || Array.isArray(base) && Array.isArray(index)) {\n yield await indices(base, index, this.budget);\n } else {\n yield indexValue(base, index);\n }\n }\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)) {\n { const _p = this.budget.tickSync(); if (_p) await _p; }\n yield await sliceValue(base, isNumber(start) && Number.isNaN(numberValue(start)) ? null : start, isNumber(end) && Number.isNaN(numberValue(end)) ? null : end, this.budget);\n }\n return;\n case \"iterate\": {\n if (this.budget.unlimitedValueCheck) {\n const savedSteps = this.budget.currentSteps;\n const baseVal = this.tryEvalSingle(ast.base, input, 0, false);\n if (baseVal !== NOT_SINGLE && Array.isArray(baseVal)) {\n this.budget.step();\n for (let i = 0; i < baseVal.length; i++) {\n const _p = this.budget.tickSync();\n if (_p) await _p;\n yield baseVal[i]!;\n }\n return;\n }\n this.budget.restoreSteps(savedSteps);\n }\n for await (const base of this.run(ast.base, input)) for await (const [, value] of entries(base, this.budget)) { { const _p = this.budget.tickSync(); if (_p) await _p; } yield value; }\n return;\n }\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 === \"|\") {\n if (this.budget.unlimitedValueCheck) {\n const iterPipe = extractIteratePipeline(ast);\n if (iterPipe) {\n const savedSteps = this.budget.currentSteps;\n const baseVal = this.tryEvalSingle(iterPipe.base, input, 0, false);\n if (baseVal !== NOT_SINGLE && Array.isArray(baseVal)) {\n this.budget.step();\n for (let i = 0; i < baseVal.length; i++) {\n const _p = this.budget.tickSync();\n if (_p) await _p;\n const itemRes = this.tryRunSyncNoScratch(iterPipe.tail, baseVal[i]!);\n if (itemRes !== undefined) {\n for (let j = 0; j < itemRes.length; j++) {\n yield itemRes[j]!;\n }\n } else {\n yield* this.run(iterPipe.tail, baseVal[i]!);\n }\n }\n return;\n }\n this.budget.restoreSteps(savedSteps);\n }\n }\n for await (const value of this.run(ast.left, input)) {\n if (this.budget.unlimitedValueCheck) {\n const itemRes = this.tryRunSyncNoScratch(ast.right, value);\n if (itemRes !== undefined) {\n for (let j = 0; j < itemRes.length; j++) yield itemRes[j]!;\n continue;\n }\n }\n yield* this.run(ast.right, value);\n }\n return;\n }\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 { const _p = this.budget.tickSync(); if (_p) await _p; }\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 | undefined }, 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 field.value ? this.run(field.value, input) : [indexValue(input, key)]) {\n const item = copyObject(previous); put(item, key, value);\n this.budget.value(item); yield item;\n }\n }\n }\n invocation(ast: Extract<Ast, { kind: \"invoke\" }>): Interpreter {\n const scope = Object.create(Interpreter.prototype) as Interpreter;\n const filters = new Map(this.filters);\n for (let index = 0; index < ast.parameters.length; index++) {\n this.budget.step();\n filters.set(ast.parameters[index]!, { ast: ast.args[index]!, scope: this });\n }\n Object.assign(scope, this, { _filters: filters });\n return scope;\n }\n async read(input: Json, path: Path): Promise<Json> {\n for (const key of path) {\n { const _p = this.budget.tickSync(); if (_p) await _p; }\n input = typeof key === \"object\" ? await sliceValue(input, key.start, key.end, this.budget) : indexValue(input, key);\n }\n return input;\n }\n async *paths(ast: Ast, input: Json, depth = 0): AsyncGenerator<Path> {\n { const _p = this.budget.tickSync(); if (_p) await _p; }\n if (depth > this.budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n if (ast.kind === \"parameter\") {\n const filter = this.filters.get(ast)!;\n yield* filter.scope.paths(filter.ast, input); return;\n }\n if (ast.kind === \"invoke\") { yield* this.invocation(ast).paths(ast.body, input); return; }\n if (ast.kind === \"bind\") {\n for await (const value of this.run(ast.source, input)) yield* this.binding(ast.name, value).paths(ast.body, input, depth);\n return;\n }\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 === \"optional\") {\n try { yield* this.paths(ast.operand, input); }\n catch (error) { if (!(error instanceof JqError) || error instanceof JqLimitError || this.budget.signal.aborted) throw error; }\n return;\n }\n if (ast.kind === \"binary\" && ast.operator === \"|\") {\n for await (const prefix of this.paths(ast.left, input))\n for await (const suffix of this.paths(ast.right, await this.read(input, prefix))) yield [...prefix, ...suffix];\n return;\n }\n if (ast.kind === \"call\" && [\"select\", \"values\", \"strings\", \"numbers\", \"booleans\", \"arrays\", \"objects\", \"nulls\", \"scalars\", \"iterables\", \"empty\"].includes(ast.name)) { for await (const value of this.run(ast, input)) { void value; yield []; } return; }\n if (ast.kind === \"descend\") {\n yield [];\n if (Array.isArray(input) || isObject(input)) for await (const [key, value] of entries(input, this.budget))\n for await (const suffix of this.paths(ast, value, depth + 1)) {\n this.budget.collection(suffix.length + 1);\n if (suffix.length + 1 > this.budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n yield [key, ...suffix];\n }\n return;\n }\n if (ast.kind === \"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 path of this.paths(ast.base, input)) {\n const base = await this.read(input, path);\n await sliceValue(base, isNumber(start) && Number.isNaN(numberValue(start)) ? null : start, isNumber(end) && Number.isNaN(numberValue(end)) ? null : end, this.budget);\n if (base !== null && !Array.isArray(base)) throw new JqError(\"slice assignment requires an array\");\n const length = base === null ? 0 : base.length;\n let first = start === null || (isNumber(start) && Number.isNaN(numberValue(start))) ? 0 : Math.floor(numberValue(start as Numeric));\n let last = end === null || (isNumber(end) && Number.isNaN(numberValue(end))) ? length : Math.ceil(numberValue(end as Numeric));\n first = Math.max(0, Math.min(length, first < 0 ? length + first : first));\n last = Math.max(first, Math.min(length, last < 0 ? length + last : last));\n yield [...path, { start: first, end: last }];\n }\n return;\n }\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 const base = await this.read(input, path);\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 const base = await this.read(input, path);\n for await (const [key] of entries(base, this.budget)) { { const _p = this.budget.tickSync(); if (_p) await _p; } yield [...path, key]; }\n }\n }\n async set(input: Json, path: Path, value: Json | typeof deleted, depth = 0): Promise<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 if (typeof key === \"object\") {\n if (input !== null && !Array.isArray(input)) throw new JqError(\"slice assignment requires an array\");\n const array = input === null ? [] : input;\n const replacement = await this.set(array.slice(key.start, key.end), path, value, depth + 1);\n if (!(value === deleted && depth === path.length - 1) && !Array.isArray(replacement)) throw new JqError(\"slice assignment requires an array value\");\n const items = value === deleted && depth === path.length - 1 ? [] : replacement as Json[];\n this.budget.collection(array.length - (key.end - key.start) + items.length);\n return [...array.slice(0, key.start), ...items, ...array.slice(key.end)];\n }\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, await 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 length = input === null ? 0 : input.length;\n const size = remove ? Math.max(0, length - 1) : Math.max(length, key + 1);\n this.budget.collection(size);\n // Assignment must remain bounded even when callers omit family limits.\n if (!Number.isSafeInteger(size) || size > 1000000) throw new JqLimitError(\"maxCollectionSize\");\n const padding = remove ? 0 : Math.max(0, key - length);\n const minimumBytes = size ? 2 * size + 1 + 3 * padding : 2;\n if (minimumBytes > Math.min(this.budget.limits.maxValueBytes, 16 * 1024 * 1024)) throw new JqLimitError(\"maxValueBytes\");\n const result: Json[] = [];\n if (input !== null) for (const item of input) { { const _p = this.budget.tickSync(); if (_p) await _p; } result.push(item); }\n if (remove) { if (key < result.length) result.splice(key, 1); }\n else {\n while (result.length <= key) { { const _p = this.budget.tickSync(); if (_p) await _p; } result.push(null); }\n result[key] = await 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 const previous = await this.read(result, path);\n const assigned = operator === \"=\" ? value : operator === \"//=\" ? truth(previous) ? previous : value : await binary(operator.slice(0, -1), previous, value, this.budget);\n result = await 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 const previous = await this.read(result, path);\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 = await 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 = await 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 === \"walk\") {\n const evaluate = (value: Json) => this.run(args[0]!, value);\n async function* visit(value: Json): AsyncGenerator<Json> {\n { const _p = budget.tickSync(); if (_p) await _p; }\n let result = value;\n if (Array.isArray(value)) {\n const mapped: Json[] = [];\n for (const child of value) for await (const item of visit(child)) {\n budget.collection(mapped.length + 1);\n mapped.push(item);\n }\n result = mapped;\n } else if (isObject(value)) {\n const mapped = object();\n for (const key of objectKeyIterator(value)) for await (const item of visit(value[key]!)) {\n put(mapped, key, item);\n break;\n }\n result = mapped;\n }\n budget.value(result);\n yield* evaluate(result);\n }\n yield* visit(input);\n return;\n }\n if (name === \"fromdateiso8601\") { yield fromDateIso8601(input); return; }\n if (name === \"todateiso8601\") { yield toDateIso8601(input); return; }\n if (name === \"while\" || name === \"until\") {\n // Keep filter continuations explicitly: branching updates use depth-first\n // order, and consumers can stop before evaluating later branches.\n const step = async function* (this: Interpreter, value: Json): AsyncGenerator<{ value: Json; emit: boolean }> {\n for await (const condition of this.run(args[0]!, value)) {\n const satisfied = truth(condition);\n if (name === \"until\" && satisfied) yield { value, emit: true };\n else if (name === \"until\" || satisfied) {\n if (name === \"while\") yield { value, emit: true };\n for await (const next of this.run(args[1]!, value)) yield { value: next, emit: false };\n }\n }\n }.bind(this);\n const stack = [step(input)];\n try {\n while (stack.length) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const next = await stack.at(-1)!.next();\n if (next.done) { stack.pop(); continue; }\n if (next.value.emit) yield next.value.value;\n else {\n budget.collection(stack.length + 1);\n stack.push(step(next.value.value));\n }\n }\n } finally {\n while (stack.length) await stack.pop()!.return(undefined);\n }\n return;\n }\n if (name === \"scan\") {\n for await (const source of this.run(args[0]!, input)) yield* scanRegex(input, source, budget);\n return;\n }\n if (name === \"recurse\") { yield* recurse(this, args, input); return; }\n if (name === \"capture\") {\n for await (const pattern of this.run(args[0]!, input)) {\n if (args[1]) {\n for await (const flags of this.run(args[1], input)) yield* capture(input, pattern, flags, budget);\n } else if (typeof pattern === \"string\") yield* capture(input, pattern, null, budget);\n else if (Array.isArray(pattern) && pattern.length) yield* capture(input, pattern[0]!, pattern[1] ?? null, budget);\n else throw new JqError(`${type(pattern)} not a string or array`);\n }\n return;\n }\n if (name === \"delpaths\") {\n for await (const paths of this.run(args[0]!, input)) {\n const result = await delpaths(input, paths, budget);\n budget.value(result);\n yield result;\n }\n return;\n }\n if (name === \"setpath\") {\n for await (const value of this.run(args[1]!, input)) {\n for await (const candidate of this.run(args[0]!, input)) {\n if (!Array.isArray(candidate)) throw new JqError(\"Path must be specified as an array\");\n const path: Path = [];\n let base = input;\n for (const component of candidate) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n budget.collection(path.length + 1);\n // Read each old value before normalizing relative array indexes.\n const previous = indexValue(base, component);\n let key: string | number;\n if (typeof component === \"string\") key = component;\n else {\n if (!isNumber(component)) throw new JqError(`Cannot index ${type(base)} with ${type(component)}`);\n key = Math.trunc(numberValue(component));\n if (key < 0) key += Array.isArray(base) ? base.length : 0;\n if (key < 0) throw new JqError(\"Out of bounds negative array index\");\n }\n path.push(key);\n base = previous;\n }\n const result = await this.set(input, path, value);\n budget.value(result);\n yield result;\n }\n }\n return;\n }\n if (name === \"getpath\") {\n for await (const path of this.run(args[0]!, input)) {\n if (!Array.isArray(path)) throw new JqError(\"Path must be specified as an array\");\n let value = input;\n for (const key of path) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (isObject(key) && (value === null || Array.isArray(value) || typeof value === \"string\")) {\n if (value === null) continue;\n const start = Object.hasOwn(key, \"start\") ? key.start! : undefined;\n const end = Object.hasOwn(key, \"end\") ? key.end! : undefined;\n if ((start !== null && (!isNumber(start) || !Number.isFinite(numberValue(start))))\n || (end !== null && (!isNumber(end) || !Number.isFinite(numberValue(end))))) {\n throw new JqError(\"Array/string slice indices must be integers\");\n }\n value = await sliceValue(value, start, end, budget);\n } else value = indexValue(value, key);\n }\n yield value;\n }\n return;\n }\n if (name === \"flatten\") {\n for await (const depth of args.length ? this.run(args[0]!, input) : [Infinity]) {\n if (!isNumber(depth) || numberValue(depth) < 0 || Number.isNaN(numberValue(depth))) throw new JqError(\"flatten depth must be nonnegative\");\n const result: Json[] = [];\n const stack = [{ iterator: entries(input, budget), depth: numberValue(depth) }];\n while (stack.length) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const frame = stack.at(-1)!;\n const next = await frame.iterator.next();\n if (next.done) { stack.pop(); continue; }\n const value = next.value[1];\n if (Array.isArray(value) && frame.depth !== 0) stack.push({ iterator: entries(value, budget), depth: frame.depth - 1 });\n else { budget.collection(result.length + 1); result.push(value); }\n }\n budget.value(result); yield result;\n }\n return;\n }\n if (name === \"paths\") {\n if (!Array.isArray(input) && !isObject(input)) return;\n const stack = [{ iterator: entries(input, budget), path: [] as Json[] }];\n while (stack.length) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const frame = stack.at(-1)!;\n const next = await frame.iterator.next();\n if (next.done) { stack.pop(); continue; }\n const [key, value] = next.value;\n const depth = frame.path.length + 1;\n if (depth > budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n budget.collection(depth);\n const path = [...frame.path, key];\n budget.value(path);\n if (args.length) {\n for await (const selected of this.run(args[0]!, value)) if (truth(selected)) yield path;\n } else yield path;\n if (Array.isArray(value) || isObject(value)) stack.push({ iterator: entries(value, budget), path });\n }\n return;\n }\n if (name === \"del\") { yield* this.assign(args[0]!, { kind: \"call\", name: \"empty\", args: [] }, \"|=\", input); return; }\n if (name === \"halt\") throw new JqHalt(0, \"\");\n if (name === \"halt_error\") {\n for await (const code of args.length ? this.run(args[0]!, input) : [5]) {\n if (!isNumber(code)) throw new JqError(`${describe(input, budget)} halt_error/1: number required`);\n const stderr = input === null ? \"\" : typeof input === \"string\" ? input\n : `${await stringify(input, budget, { indent: \"\", ascii: false, color: false }, budget.limits.maxOutputBytes, \"maxOutputBytes\")}\\n`;\n if (budget.outputBytes + utf8ByteLength(stderr) > budget.limits.maxOutputBytes) throw new JqLimitError(\"maxOutputBytes\");\n // jq clamps negative statuses and the process exposes the low byte.\n const status = Math.max(0, Math.trunc(numberValue(code))) % 256;\n throw new JqHalt(status, stderr);\n }\n return;\n }\n if (name === \"error\") {\n for await (const value of args.length ? this.run(args[0]!, input) : [input]) {\n throw new UserError(value, typeof value === \"string\" ? value : await stringify(value, budget));\n }\n return;\n }\n if (name === \"indices\") {\n for await (const value of this.run(args[0]!, input)) yield await indices(input, value, budget);\n return;\n }\n if ([\"startswith\", \"endswith\", \"ltrimstr\", \"rtrimstr\"].includes(name)) {\n for await (const value of this.run(args[0]!, input)) {\n if (typeof input !== \"string\" || typeof value !== \"string\") {\n if (name === \"ltrimstr\" || name === \"rtrimstr\") { yield input; continue; }\n throw new JqError(`${name} requires strings`);\n }\n { const _p = budget.tickSync(input.length + value.length); if (_p) await _p; }\n const matches = name === \"startswith\" || name === \"ltrimstr\" ? input.startsWith(value) : input.endsWith(value);\n yield name === \"startswith\" || name === \"endswith\" ? matches : !matches || !value.length ? input : name === \"ltrimstr\" ? input.slice(value.length) : input.slice(0, -value.length);\n }\n return;\n }\n if (name === \"explode\" || name === \"utf8bytelength\") {\n if (typeof input !== \"string\") throw new JqError(name === \"explode\" ? \"explode input must be a string\" : `${describe(input, budget)} only strings have UTF-8 byte length`);\n const points: number[] = [];\n let bytes = 0;\n for (let offset = 0; offset < input.length;) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const point = input.codePointAt(offset)!;\n offset += point > 0xffff ? 2 : 1;\n if (name === \"explode\") {\n budget.collection(points.length + 1);\n bytes += String(point).length + (points.length ? 1 : 2);\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n points.push(point);\n } else bytes += point <= 0x7f ? 1 : point <= 0x7ff ? 2 : point <= 0xffff ? 3 : 4;\n }\n yield name === \"explode\" ? points : bytes;\n return;\n }\n if (name === \"ascii_downcase\" || name === \"ascii_upcase\") {\n if (typeof input !== \"string\") throw new JqError(`${name} requires a string`);\n { const _p = budget.tickSync(input.length); if (_p) await _p; }\n let result = \"\";\n const lower = name === \"ascii_downcase\";\n for (let index = 0; index < input.length; index++) {\n const code = input.charCodeAt(index);\n result += String.fromCharCode(code >= (lower ? 65 : 97) && code <= (lower ? 90 : 122) ? code + (lower ? 32 : -32) : code);\n }\n budget.value(result); yield result; return;\n }\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 === \"bsearch\") {\n for await (const target of this.run(args[0]!, input)) {\n for await (const length of this.run({ kind: \"call\", name: \"length\", args: [] }, input)) {\n let low = 0;\n let high = numberValue(length as Numeric);\n let found: number | undefined;\n while (low < high) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const middle = Math.floor((low + high - 1) / 2);\n const order = await compare(indexValue(input, middle), target, budget);\n if (order === 0) { found = middle; break; }\n if (order < 0) low = middle + 1;\n else high = middle;\n }\n yield found ?? -low - 1;\n }\n }\n return;\n }\n if (name === \"combinations\") {\n for await (const length of this.run({ kind: \"call\", name: \"length\", args: [] }, input)) {\n const width = Math.ceil(numberValue(length as Numeric));\n budget.collection(width);\n if (width === 0) { yield []; return; }\n const values: Json[] = [];\n const iterators: AsyncGenerator<[string | number, Json]>[] = [];\n let depth = 0;\n try {\n while (depth >= 0) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (!iterators[depth]) iterators[depth] = entries(indexValue(input, depth), budget);\n const next = await iterators[depth]!.next();\n if (next.done) {\n iterators.pop();\n values.pop();\n depth--;\n } else {\n values[depth] = next.value[1];\n if (depth + 1 === width) {\n budget.value(values);\n yield [...values];\n } else depth++;\n }\n }\n } finally {\n for (const iterator of iterators) await iterator.return(undefined);\n }\n }\n return;\n }\n if (name === \"transpose\") {\n let width = 0;\n for await (const [, row] of entries(input, budget)) {\n for await (const length of this.run({ kind: \"call\", name: \"length\", args: [] }, row)) {\n width = Math.max(width, numberValue(length as number));\n }\n }\n budget.collection(Math.ceil(width));\n const result: Json[] = [];\n let bytes = 2;\n for (let column = 0; column < width; column++) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const values: Json[] = [];\n bytes += 2 + (column ? 1 : 0);\n for await (const [, row] of entries(input, budget)) {\n const value = indexValue(row, column);\n bytes += budget.value(value) + (values.length ? 1 : 0);\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n budget.collection(values.length + 1);\n values.push(value);\n }\n result.push(values);\n }\n budget.value(result); yield result; return;\n }\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 { const _p = budget.tickSync(input.length); if (_p) await _p; }\n let length = 0;\n for (let offset = 0; offset < input.length; length++) {\n if (length % 32 === 0) { const _p = budget.tickSync(0); if (_p) await _p; }\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)) { { const _p = budget.tickSync(); if (_p) await _p; } void key; length++; }\n yield length;\n }\n else throw new JqError(`${describe(input, budget)} 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 { const _p = budget.tickSync(input.length); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 : utf8ByteLength(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 === \"inside\") {\n for await (const container of this.run(args[0]!, input)) {\n if (type(container) !== type(input) || (typeof input === \"boolean\" && container !== input)) throw new JqError(`${describe(container, budget)} and ${describe(input, budget)} cannot have their containment checked`);\n yield contains(container, input, budget);\n }\n 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 === \"gsub\") {\n for await (const pattern of this.run(args[0]!, input)) {\n for await (const flags of args[2] ? this.run(args[2], input) : [\"\"]) {\n yield* substituteRegex(input, pattern, flags, captures => this.run(args[1]!, captures), budget);\n }\n }\n return;\n }\n if (name === \"splits\") {\n for await (const separator of this.run(args[0]!, input)) {\n yield* splitRegex(input, separator, budget);\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; } 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)) { const _p = budget.tickSync(input.length); if (_p) await _p; }\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 { const _p = budget.tickSync(4); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(input.length); if (_p) await _p; }\n await measureValue(input, budget);\n const result: Json[] = [];\n for (let index = input.length - 1; index >= 0; index--) { { const _p = budget.tickSync(0); if (_p) await _p; } result.push(input[index]!); }\n yield result; return;\n }\n if (name === \"add\") {\n let result: Json = null;\n for (const item of input) { { const _p = budget.tickSync(); if (_p) await _p; } 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 { const _p = budget.tickSync(); if (_p) await _p; } 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) => compareMaybeSync(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 { encoder, decoder, byteString, latin1Bytes } from \"./encoding.js\";\nimport { stringify } from \"./input.js\";\nimport { Budget, JqError, type Json } from \"./limits.js\";\nimport { isNumber } from \"./numbers.js\";\n\nexport async function formatValue(name: string, input: Json, budget: Budget): Promise<string> {\n const text = typeof input === \"string\" ? input : await stringify(input, budget);\n { const _p = budget.tickSync(text.length); if (_p) await _p; }\n let result: string;\n switch (name) {\n case \"text\": result = text; break;\n case \"json\": result = await stringify(input, budget); break;\n case \"base64\": result = btoa(byteString(encoder.encode(text))); break;\n case \"base64d\": {\n if (typeof input !== \"string\") throw new JqError(\"base64d requires a string\");\n const alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n const raw = input.endsWith(\"==\") ? input.slice(0, -2) : input.endsWith(\"=\") ? input.slice(0, -1) : input;\n if (raw.length % 4 === 1 || [...raw].some(character => !alphabet.includes(character))) throw new JqError(\"invalid base64 string\");\n result = decoder.decode(latin1Bytes(atob(raw))); break;\n }\n case \"uri\": {\n result = \"\";\n for (const byte of encoder.encode(text)) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const character = String.fromCharCode(byte);\n result += \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~\".includes(character) ? character : `%${byte.toString(16).toUpperCase().padStart(2, \"0\")}`;\n if (result.length > budget.limits.maxValueBytes) budget.text(result);\n }\n break;\n }\n case \"html\": {\n const escapes: Readonly<Record<string, string>> = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", \"'\": \"'\", '\"': \""\" };\n result = \"\";\n for (const character of text) { { const _p = budget.tickSync(); if (_p) await _p; } result += escapes[character] ?? character; if (result.length > budget.limits.maxValueBytes) budget.text(result); }\n break;\n }\n case \"csv\":\n case \"tsv\":\n case \"sh\": {\n if (name !== \"sh\" && !Array.isArray(input)) throw new JqError(`${name} requires an array`);\n const values = Array.isArray(input) ? input : [input];\n const fields: string[] = [];\n for (const value of values) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (value !== null && typeof value !== \"string\" && typeof value !== \"boolean\" && !isNumber(value)) throw new JqError(`${name} cannot format an object or array`);\n const scalar = typeof value === \"string\" ? value : await stringify(value, budget);\n if (name === \"sh\") fields.push(typeof value === \"string\" ? `'${scalar.split(\"'\").join(\"'\\\\''\")}'` : scalar);\n else if (value === null) fields.push(\"\");\n else if (name === \"csv\") fields.push(typeof value === \"string\" ? `\"${scalar.split('\"').join('\"\"')}\"` : scalar);\n else {\n let field = \"\";\n const escapes: Readonly<Record<string, string>> = { \"\\t\": \"\\\\t\", \"\\r\": \"\\\\r\", \"\\n\": \"\\\\n\", \"\\\\\": \"\\\\\\\\\" };\n for (const character of scalar) { { const _p = budget.tickSync(); if (_p) await _p; } field += escapes[character] ?? character; }\n fields.push(field);\n }\n budget.collection(fields.length);\n }\n result = fields.join(name === \"csv\" ? \",\" : name === \"tsv\" ? \"\\t\" : \" \"); break;\n }\n default: throw new JqError(`${name} is not a valid format`);\n }\n budget.text(result);\n return result;\n}\n", "import { utf8ByteLength } from \"./encoding.js\";\nimport { Pattern } from \"safe-bash-regex-engine/text/regex\";\nimport { ProgramError } from \"safe-bash-regex-engine/text/budget\";\nimport { Budget, JqError, JqLimitError, object, put, type Json } from \"./limits.js\";\nimport { describe } from \"./values.js\";\n\nexport async function* substituteRegex(input: Json, source: Json, flags: Json,\n replacement: (captures: Json) => AsyncIterable<Json>, budget: Budget): AsyncGenerator<Json> {\n if (typeof input !== \"string\") throw new JqError(`${describe(input, budget)} cannot be matched, as it is not a string`);\n if (typeof source !== \"string\") throw new JqError(`${describe(source, budget)} is not a string`);\n if (typeof flags !== \"string\" || [...flags].some(flag => !\"gimns\".includes(flag))) throw new JqError(`${typeof flags === \"string\" ? flags + \"g\" : describe(flags, budget)} is not a valid modifier string`);\n const work = { step: (count = 1) => budget.step(count), checkpoint: () => budget.tick(0), maxBufferBytes: budget.limits.maxValueBytes };\n try {\n budget.step(source.length);\n const pattern = new Pattern(source, true, flags.includes(\"i\"), \"jq\", flags);\n let search = 0;\n let copied = 0;\n let results = [\"\"];\n while (search <= input.length) {\n const match = await pattern.find(input, work, search);\n if (!match) break;\n const captures = object();\n for (const [name, index] of pattern.groupNames) put(captures, name, match.groups[index] ?? null);\n budget.value(captures);\n const next: string[] = [];\n let index = 0;\n for await (const value of replacement(captures)) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (value !== null && typeof value !== \"string\") throw new JqError(`string (\"\") and ${describe(value, budget)} cannot be added`);\n budget.collection(index + 1);\n const prefix = results[index] ?? \"\";\n const fragment = input.slice(copied, match.start);\n const bytes = utf8ByteLength(prefix) + utf8ByteLength(fragment) + utf8ByteLength(value ?? \"\");\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n const result = prefix + fragment + (value ?? \"\");\n budget.value(result);\n next.push(result);\n index++;\n }\n // An empty replacement stream leaves this match unchanged.\n if (next.length) {\n for (let index = next.length; index < results.length; index++) next.push(results[index]!);\n results = next; copied = match.end;\n }\n search = match.end > match.start ? match.end : match.end + ((input.codePointAt(match.end) ?? 0) > 0xffff ? 2 : 1);\n }\n for (const prefix of results) {\n if (utf8ByteLength(prefix) + utf8ByteLength(input.slice(copied)) > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n const result = prefix + input.slice(copied);\n budget.value(result);\n yield result;\n }\n } catch (error) {\n throw regexError(error);\n }\n}\n\n\nexport function regexError(error: unknown): JqError {\n if (!(error instanceof ProgramError)) throw error;\n if (error.message.includes(\"buffer limit exceeded\")) return new JqLimitError(\"maxValueBytes\");\n const message = error.message === \"unterminated bracket expression\" ? \"premature end of char-class\"\n : error.message === \"unmatched '(' in regular expression\" ? \"end pattern with unmatched parenthesis\"\n : error.message === \"quantifier without an expression\" ? \"target of repeat operator is not specified\"\n : error.message === \"reversed character range\" ? \"empty range in char class\" : error.message;\n return new JqError(`Regex failure: ${message}`);\n}\n\nexport async function* scanRegex(input: Json, source: Json, budget: Budget): AsyncGenerator<Json> {\n if (typeof source !== \"string\") throw new JqError(`${describe(source, budget)} is not a string`);\n if (typeof input !== \"string\") throw new JqError(`${describe(input, budget)} cannot be matched, as it is not a string`);\n if (source === \"\") {\n const boundaries = utf8ByteLength(input) + 1;\n for (let index = 0; index < boundaries; index++) { { const _p = budget.tickSync(); if (_p) await _p; } yield \"\"; }\n return;\n }\n const work = { step: (count = 1) => budget.step(count), checkpoint: () => budget.tick(0), maxBufferBytes: budget.limits.maxValueBytes };\n try {\n budget.step(source.length);\n const pattern = new Pattern(source, true, false, \"jq\");\n let search = 0;\n while (search <= input.length) {\n const match = await pattern.find(input, work, search);\n if (!match) break;\n budget.collection(pattern.groupCount);\n const value: Json = pattern.groupCount ? match.groups.slice(1).map(group => group ?? null) : match.groups[0]!;\n budget.value(value);\n yield value;\n search = match.end > match.start ? match.end : match.end + ((input.codePointAt(match.end) ?? 0) > 0xffff ? 2 : 1);\n }\n } catch (error) { throw regexError(error); }\n}\n", "import { Budget, ProgramError } from \"./budget.js\";\nimport { ReplacementBuffer } from \"./replacement-buffer.js\";\n\ntype BoundaryKind = \"word\" | \"nonWord\" | \"wordStart\" | \"wordEnd\";\n\nfunction isWordChar(ch: string | undefined): boolean {\n if (ch === undefined) return false;\n const code = ch.charCodeAt(0);\n return (code >= 48 && code <= 57) || (code >= 65 && code <= 90) || (code >= 97 && code <= 122) || code === 95;\n}\n\nfunction matchesBoundary(boundary: BoundaryKind, text: string, position: number): boolean {\n const prevWord = position > 0 && isWordChar(text[position - 1]);\n const nextWord = position < text.length && isWordChar(text[position]);\n if (boundary === \"word\") return prevWord !== nextWord;\n if (boundary === \"nonWord\") return prevWord === nextWord;\n if (boundary === \"wordStart\") return !prevWord && nextWord;\n return prevWord && !nextWord;\n}\n\ntype Node = { type: \"empty\" | \"begin\" | \"end\" }\n | { type: \"boundary\"; boundary: BoundaryKind }\n | { type: \"backreference\"; index: number }\n | { type: \"assertion\"; node: Node; positive: boolean; behind: boolean }\n | { type: \"character\"; literal?: string; accepts: (character: string) => boolean }\n | { type: \"sequence\" | \"alternate\"; nodes: Node[] }\n | { type: \"repeat\"; node: Node; minimum: number; maximum: number; lazy?: boolean }\n | { type: \"group\"; node: Node; index: number };\n\ntype Instruction = { kind: \"character\"; literal?: string; accepts: (character: string) => boolean }\n | { kind: \"backreference\"; index: number; ignoreCase: boolean }\n | { kind: \"assertion\"; first: number; next: number; positive: boolean; behind: boolean }\n | { kind: \"boundary\"; boundary: BoundaryKind }\n | { kind: \"begin\" | \"end\" | \"match\" }\n | { kind: \"save\"; slot: number; clear?: readonly number[] }\n | { kind: \"jump\"; target: number }\n | { kind: \"split\"; first: number; second: number };\n\nfunction instructionCounts(root: Node): Map<Node, number> {\n const counts = new Map<Node, number>();\n const count = (node: Node): number => {\n let size: number;\n if (node.type === \"empty\") size = 0;\n else if (node.type === \"group\" || node.type === \"assertion\") size = 2 + count(node.node);\n else if (node.type === \"sequence\" || node.type === \"alternate\") {\n size = node.type === \"alternate\" ? 2 * (node.nodes.length - 1) : 0;\n for (const child of node.nodes) size += count(child);\n // Remove empty sequence work once, before enclosing repetitions amplify it.\n if (node.type === \"sequence\") node.nodes = node.nodes.filter(child => counts.get(child)! > 0);\n } else if (node.type === \"repeat\") {\n const child = count(node.node);\n size = node.maximum === Infinity ? child * (node.minimum + 1) + 2\n : child * node.maximum + node.maximum - node.minimum;\n } else size = 1;\n // Saturation keeps nested products bounded without ever expanding a repeat.\n size = Math.min(size, Number.MAX_SAFE_INTEGER);\n counts.set(node, size);\n return size;\n };\n count(root);\n return counts;\n}\n\nconst classes: Record<string, (character: string) => boolean> = {\n alpha: character => /^[A-Za-z]$/u.test(character),\n alnum: character => /^[A-Za-z0-9]$/u.test(character),\n digit: character => /^[0-9]$/u.test(character),\n lower: character => /^[a-z]$/u.test(character),\n upper: character => /^[A-Z]$/u.test(character),\n xdigit: character => /^[A-Fa-f0-9]$/u.test(character),\n space: character => /^[ \\t\\n\\r\\v\\f]$/u.test(character),\n blank: character => character === \" \" || character === \"\\t\",\n cntrl: character => character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127,\n graph: character => character.charCodeAt(0) >= 33 && character.charCodeAt(0) <= 126,\n print: character => character.charCodeAt(0) >= 32 && character.charCodeAt(0) <= 126,\n punct: character => /^[!-/:-@[-`{-~]$/u.test(character),\n};\n\nfunction extendedSource(source: string): string {\n let result = \"\";\n let bracket = false;\n let bracketFirst = false;\n for (let offset = 0; offset < source.length; offset++) {\n const character = source[offset]!;\n if (!bracket && character === \"\\\\\" && offset + 1 < source.length) {\n const next = source[++offset]!;\n result += \"()|+?{}\".includes(next) ? next : `\\\\${next}`;\n } else if (bracket) {\n if (bracketFirst && character === \"^\") {\n result += character;\n continue;\n }\n if (bracketFirst && character === \"]\") {\n result += character;\n bracketFirst = false;\n continue;\n }\n bracketFirst = false;\n if (character === \"[\" && (source[offset + 1] === \":\" || source[offset + 1] === \".\" || source[offset + 1] === \"=\")) {\n const kind = source[offset + 1]!;\n const close = source.indexOf(`${kind}]`, offset + 2);\n if (close >= 0) {\n result += source.slice(offset, close + 2);\n offset = close + 1;\n continue;\n }\n }\n if (character === \"]\") bracket = false;\n result += character;\n } else {\n if (character === \"[\") { bracket = true; bracketFirst = true; }\n result += \"()|+?{}\".includes(character) ? `\\\\${character}` : character;\n }\n }\n return result;\n}\n\nexport interface PatternLimits {\n readonly maxPatternInstructions?: number;\n}\n\nexport interface Match { readonly start: number; readonly end: number; readonly groups: readonly (string | undefined)[] }\n\ntype PatternBudget = Pick<Budget, \"step\" | \"maxBufferBytes\"> & { readonly options?: PatternLimits } & Partial<Pick<Budget, \"checkpointSync\">> & {\n checkpoint(): void | Promise<void>;\n};\n\ntype ChainStep =\n | { readonly kind: \"literal\"; value: string; readonly group: number }\n | { readonly kind: \"char\"; readonly accepts: (candidate: string) => boolean; readonly ascii: Uint8Array; readonly group: number }\n | { readonly kind: \"repeat\"; readonly minimum: number; readonly accepts: (candidate: string) => boolean; readonly ascii: Uint8Array; readonly group: number };\n\ninterface ChainMatch {\n readonly prefix: string;\n readonly anchoredStart: boolean;\n readonly anchoredEnd: boolean;\n readonly steps: readonly ChainStep[];\n}\n\nfunction makeAsciiTable(accepts: (candidate: string) => boolean): Uint8Array {\n const ascii = new Uint8Array(128);\n for (let c = 0; c < 128; c++) {\n if (accepts(String.fromCharCode(c))) ascii[c] = 1;\n }\n return ascii;\n}\n\nfunction buildChainMatch(root: Node, groupCount: number): ChainMatch | undefined {\n if (root.type !== \"sequence\" || groupCount > 9) return undefined;\n let startIdx = 0;\n let endIdx = root.nodes.length;\n let anchoredStart = false;\n let anchoredEnd = false;\n if (startIdx < endIdx && root.nodes[startIdx]?.type === \"begin\") {\n anchoredStart = true;\n startIdx++;\n }\n if (startIdx < endIdx && root.nodes[endIdx - 1]?.type === \"end\") {\n anchoredEnd = true;\n endIdx--;\n }\n if (startIdx >= endIdx) return undefined;\n const steps: ChainStep[] = [];\n let hasRepeat = false;\n for (let i = startIdx; i < endIdx; i++) {\n let n = root.nodes[i]!;\n let group = 0;\n if (n.type === \"group\") {\n group = n.index;\n n = n.node.type === \"sequence\" && n.node.nodes.length === 1 ? n.node.nodes[0]! : n.node;\n }\n if (n.type === \"character\") {\n if (n.literal !== undefined) {\n const prev = steps[steps.length - 1];\n if (group === 0 && prev && prev.kind === \"literal\" && prev.group === 0) {\n prev.value += n.literal;\n } else {\n steps.push({ kind: \"literal\", value: n.literal, group });\n }\n } else {\n steps.push({ kind: \"char\", accepts: n.accepts, ascii: makeAsciiTable(n.accepts), group });\n }\n } else if (\n n.type === \"repeat\" &&\n n.minimum >= 0 &&\n n.maximum === Infinity &&\n !n.lazy &&\n n.node.type === \"character\"\n ) {\n hasRepeat = true;\n steps.push({ kind: \"repeat\", minimum: n.minimum, accepts: n.node.accepts, ascii: makeAsciiTable(n.node.accepts), group });\n } else {\n return undefined;\n }\n }\n const first = steps[0];\n if (!first) return undefined;\n const hasLiteralPrefix = first.kind === \"literal\" && first.value.length > 0;\n const hasRepeatHead = first.kind === \"repeat\" && first.minimum >= 1;\n if (!hasLiteralPrefix && !hasRepeatHead) return undefined;\n for (let s = 0; s < steps.length; s++) {\n const step = steps[s]!;\n if (step.kind === \"repeat\") {\n if (s < steps.length - 1) {\n const next = steps[s + 1]!;\n if (next.kind !== \"literal\" || next.value.length === 0 || step.accepts(next.value[0]!)) return undefined;\n }\n if (!anchoredStart && hasLiteralPrefix) {\n for (let k = 0; k < first.value.length; k++) {\n if (step.accepts(first.value[k]!)) return undefined;\n }\n }\n }\n }\n if (!hasRepeat && steps.length < 2) return undefined;\n return { prefix: hasLiteralPrefix ? first.value : \"\", anchoredStart, anchoredEnd, steps };\n}\n\nfunction matchChainAt(\n steps: readonly ChainStep[],\n prefixLen: number,\n anchoredEnd: boolean,\n text: string,\n startPos: number,\n outOffsets: Int32Array,\n groupCount: number,\n textEnd = text.length,\n startStep = 1,\n): number {\n for (let g = 1; g <= groupCount; g++) {\n outOffsets[g * 2] = -1;\n outOffsets[g * 2 + 1] = -1;\n }\n let cursor = startStep === 1 ? startPos + prefixLen : startPos;\n for (let s = startStep; s < steps.length; s++) {\n const step = steps[s]!;\n const stepStart = cursor;\n if (step.kind === \"literal\") {\n const val = step.value;\n if (cursor + val.length > textEnd) return -1;\n for (let k = 0; k < val.length; k++) {\n if (text.charCodeAt(cursor + k) !== val.charCodeAt(k)) return -1;\n }\n cursor += val.length;\n } else if (step.kind === \"char\") {\n if (cursor >= textEnd) return -1;\n const code = text.charCodeAt(cursor);\n if (code < 128 ? step.ascii[code] === 0 : !step.accepts(text[cursor]!)) return -1;\n cursor++;\n } else {\n while (cursor < textEnd) {\n const code = text.charCodeAt(cursor);\n if (code < 128 ? step.ascii[code] === 0 : !step.accepts(text[cursor]!)) break;\n cursor++;\n }\n if (cursor - stepStart < step.minimum) return -1;\n }\n if (step.group > 0) {\n outOffsets[step.group * 2] = stepStart;\n outOffsets[step.group * 2 + 1] = cursor;\n }\n }\n if (anchoredEnd && cursor !== textEnd) return -1;\n outOffsets[0] = startPos;\n outOffsets[1] = cursor;\n return cursor;\n}\n\nclass NfaStorage {\n private used = 0;\n constructor(private readonly budget: PatternBudget) {}\n reserve(bytes: number): void {\n this.budget.step(0);\n if (!Number.isSafeInteger(bytes) || bytes < 0 || bytes > this.budget.maxBufferBytes - this.used) {\n throw new ProgramError(\"regular expression state buffer limit exceeded\");\n }\n this.used += bytes;\n }\n release(bytes: number): void {\n if (!Number.isSafeInteger(bytes) || bytes < 0 || bytes > this.used) throw new ProgramError(\"invalid regular expression state accounting\");\n this.used -= bytes;\n }\n clear(): void { this.used = 0; }\n}\n\nexport class Pattern {\n readonly groupCount: number;\n readonly groupNames = new Map<string, number>();\n private code: Instruction[] = [];\n private compiledSteps = 0;\n private readonly instructionCount: number;\n private budgetPrepared = false;\n private parsed: { root: Node; counts: Map<Node, number> } | undefined;\n private readonly anchored: boolean;\n private linear = false;\n private literalMatch: { readonly value: string; readonly anchoredStart: boolean; readonly anchoredEnd: boolean; readonly groups: readonly [string] } | undefined;\n private simpleRepeatMatch: {\n readonly prefix: string;\n readonly anchoredStart: boolean;\n readonly anchoredEnd: boolean;\n readonly captured: boolean;\n readonly minimum: number;\n readonly accepts: (candidate: string) => boolean;\n readonly ascii: Uint8Array;\n } | undefined;\n private chainMatch: ChainMatch | undefined;\n private backreferences = false;\n private fastPrefixInfo: { readonly anchoredStart: boolean; readonly anchoredEnd: boolean; readonly prefix: string } | undefined;\n\n constructor(source: string, extended = true, private readonly ignoreCase = false, private readonly dialect: \"sed\" | \"awk\" | \"jq\" = \"sed\", private readonly modifiers = \"\", limits: PatternLimits = {}) {\n const prefix = dialect === \"jq\" ? \"jq \" : \"\";\n const maximumInstructions = limits.maxPatternInstructions ?? Infinity;\n if (maximumInstructions !== Infinity && (!Number.isSafeInteger(maximumInstructions) || maximumInstructions < 1)) throw new ProgramError(\"limits must be positive safe integers\");\n if (source.length > 8192) throw new ProgramError(`${prefix}regular expression source limit exceeded`);\n if (!extended) source = extendedSource(source);\n let offset = 0;\n let groups = 0;\n let depth = 0;\n const closedGroups = new Set<number>();\n const characterNode = (character: string): Node => ({\n type: \"character\",\n ...(ignoreCase ? {} : { literal: character }),\n accepts: candidate => ignoreCase ? candidate.toLowerCase() === character.toLowerCase() : candidate === character,\n });\n const escaped = (): string => {\n const character = source[offset++];\n if (character === undefined) throw new ProgramError(\"trailing backslash in regular expression\");\n if (dialect === \"awk\") {\n const octal = \"01234567\".includes(character);\n if (octal || character === \"x\") {\n let digits = octal ? character : \"\";\n const alphabet = octal ? \"01234567\" : \"0123456789abcdefABCDEF\";\n while (digits.length < (octal ? 3 : 2) && offset < source.length && alphabet.includes(source[offset]!)) digits += source[offset++];\n return digits ? String.fromCharCode(parseInt(digits, octal ? 8 : 16) & 255) : character;\n }\n if (character === \"b\") return \"\\b\";\n }\n if (dialect === \"sed\" && /^[1-9]$/u.test(character)) throw new ProgramError(\"pattern backreferences are not supported\");\n const control: Record<string, string> = { n: \"\\n\", t: \"\\t\", r: \"\\r\", f: \"\\f\", v: \"\\v\", a: \"\\x07\" };\n return control[character] ?? character;\n };\n const bracket = (): Node => {\n const negate = source[offset] === \"^\";\n if (negate) offset++;\n const tests: ((character: string) => boolean)[] = [];\n let first = true;\n while (offset < source.length && (source[offset] !== \"]\" || first)) {\n first = false;\n if (source.startsWith(\"[:\", offset)) {\n const end = source.indexOf(\":]\", offset + 2);\n const name = end < 0 ? \"\" : source.slice(offset + 2, end);\n if (!classes[name]) throw new ProgramError(`unsupported character class '${name}'`);\n tests.push(classes[name]!); offset = end + 2; continue;\n }\n if (source.startsWith(\"[.\", offset) || source.startsWith(\"[=\", offset)) throw new ProgramError(\"collating and equivalence classes are not supported\");\n const readBracketChar = (): string => {\n const ch = source[offset++]!;\n if (ch !== \"\\\\\") return ch;\n if (dialect === \"sed\") {\n const next = source[offset];\n if (next !== undefined && \"ntrfva\".includes(next)) return escaped();\n return \"\\\\\";\n }\n if (dialect === \"awk\" && source[offset] !== undefined && /^[1-9]$/u.test(source[offset]!)) {\n return escaped();\n }\n return escaped();\n };\n const start = readBracketChar();\n if (source[offset] === \"-\" && source[offset + 1] !== \"]\" && source[offset + 1] !== undefined) {\n offset++;\n const end = readBracketChar();\n if (start > end) throw new ProgramError(\"reversed character range\");\n tests.push(character => character >= start && character <= end);\n } else tests.push(character => character === start);\n }\n if (source[offset++] !== \"]\") throw new ProgramError(\"unterminated bracket expression\");\n return { type: \"character\", accepts: character => {\n const accepted = tests.some(test => test(character) || ignoreCase && (test(character.toLowerCase()) || test(character.toUpperCase())));\n return negate ? !accepted : accepted;\n } };\n };\n const atom = (atStart: boolean, afterBegin: boolean): Node => {\n const token = dialect === \"jq\" && offset < source.length ? String.fromCodePoint(source.codePointAt(offset)!) : source[offset];\n offset += token?.length ?? 1;\n if (token === \"(\") {\n if (++depth > 64) throw new ProgramError(`${prefix}regular expression depth limit exceeded`);\n let name: string | undefined;\n let capturing = true;\n let assertion: { positive: boolean; behind: boolean } | undefined;\n if (source[offset] === \"?\" && source[offset + 1] === \":\") {\n offset += 2;\n capturing = false;\n } else if (dialect === \"jq\" && source[offset] === \"?\") {\n offset++;\n if (source[offset] === \":\") { offset++; capturing = false; }\n else if (source[offset] === \"=\" || source[offset] === \"!\") {\n assertion = { positive: source[offset++] === \"=\", behind: false }; capturing = false;\n } else if (source[offset] === \"<\" && \"=!\".includes(source[offset + 1] ?? \"\")) {\n offset++;\n assertion = { positive: source[offset++] === \"=\", behind: true }; capturing = false;\n }\n else if (source[offset] === \"<\" && !\"=!\".includes(source[offset + 1] ?? \"\")) {\n const end = source.indexOf(\">\", ++offset);\n if (end < 0) throw new ProgramError(\"invalid named capture\");\n name = source.slice(offset, end); offset = end + 1;\n } else throw new ProgramError(\"unsupported jq regular expression group\");\n }\n const index = capturing ? ++groups : 0;\n if (name !== undefined) this.groupNames.set(name, index);\n const node = alternate();\n if (source[offset++] !== \")\") throw new ProgramError(\"unmatched '(' in regular expression\");\n closedGroups.add(index);\n depth--;\n return assertion ? { type: \"assertion\", node, ...assertion } : capturing ? { type: \"group\", index, node } : node;\n }\n if (token === \"[\") return bracket();\n if (token === \"\\\\\") {\n const reference = source[offset];\n if ((dialect === \"sed\" || dialect === \"jq\") && reference !== undefined && /^[1-9]$/u.test(reference)) {\n const index = Number(reference);\n if (!closedGroups.has(index)) throw new ProgramError(\"pattern references an undefined or open capture group\");\n offset++;\n return { type: \"backreference\", index };\n }\n if (reference !== undefined && \"bByY<>\".includes(reference)) {\n offset++;\n if (dialect === \"awk\" && reference === \"b\") {\n return characterNode(\"\\b\");\n }\n const boundary: BoundaryKind = (reference === \"b\" || reference === \"y\") ? \"word\"\n : (reference === \"B\" || reference === \"Y\") ? \"nonWord\"\n : reference === \"<\" ? \"wordStart\" : \"wordEnd\";\n return { type: \"boundary\", boundary };\n }\n if ((dialect === \"jq\" || dialect === \"sed\" || dialect === \"awk\") && reference !== undefined && \"dDsSwW\".includes(reference)) {\n offset++;\n const alphabet = reference.toLowerCase();\n return { type: \"character\", accepts: character => {\n const accepted = alphabet === \"d\" ? character >= \"0\" && character <= \"9\"\n : alphabet === \"s\" ? \" \\t\\n\\r\\f\\v\".includes(character)\n : character >= \"a\" && character <= \"z\" || character >= \"A\" && character <= \"Z\" || character >= \"0\" && character <= \"9\" || character === \"_\";\n return reference === alphabet ? accepted : !accepted;\n } };\n }\n return characterNode(escaped());\n }\n if (token === \".\") return { type: \"character\", accepts: character => dialect !== \"jq\" || modifiers.includes(\"m\") || character !== \"\\n\" };\n if (token === \"^\") return extended || atStart ? { type: \"begin\" } : characterNode(token);\n if (token === \"$\") return extended || offset === source.length || source[offset] === \")\" || source[offset] === \"|\" ? { type: \"end\" } : characterNode(token);\n if (token === \"*\" && !extended && (atStart || afterBegin)) return characterNode(token);\n if (token === undefined || \"*+?{}\".includes(token)) throw new ProgramError(\"quantifier without an expression\");\n return characterNode(token);\n };\n const repeated = (atStart: boolean, afterBegin: boolean): Node => {\n let node = atom(atStart, afterBegin);\n if (!extended && (node.type === \"begin\" || node.type === \"end\")) return node;\n const quantifier = source[offset];\n if (quantifier === \"*\" || quantifier === \"+\" || quantifier === \"?\") {\n offset++;\n node = { type: \"repeat\", node, minimum: quantifier === \"+\" ? 1 : 0, maximum: quantifier === \"?\" ? 1 : Infinity };\n } else if (quantifier === \"{\") {\n const match = /^\\{([0-9]+)(?:,([0-9]*))?\\}/u.exec(source.slice(offset));\n if (!match) throw new ProgramError(\"invalid repetition interval\");\n const minimum = Number(match[1]);\n const maximum = match[2] === undefined ? minimum : match[2] === \"\" ? Infinity : Number(match[2]);\n if (!Number.isSafeInteger(minimum) || maximum !== Infinity && !Number.isSafeInteger(maximum) || maximum < minimum) throw new ProgramError(\"invalid or excessive repetition interval\");\n offset += match[0].length;\n node = { type: \"repeat\", node, minimum, maximum };\n }\n if (dialect === \"jq\" && node.type === \"repeat\" && source[offset] === \"?\") { node.lazy = true; offset++; }\n if (source[offset] !== undefined && \"*+?{\".includes(source[offset]!)) throw new ProgramError(\"nested quantifier is not supported\");\n return node;\n };\n const sequence = (): Node => {\n const nodes: Node[] = [];\n while (offset < source.length && source[offset] !== \")\" && source[offset] !== \"|\") nodes.push(repeated(nodes.length === 0, nodes.length === 1 && nodes[0]!.type === \"begin\"));\n return nodes.length ? { type: \"sequence\", nodes } : { type: \"empty\" };\n };\n const alternate = (): Node => {\n const nodes = [sequence()];\n while (source[offset] === \"|\") { offset++; nodes.push(sequence()); }\n return nodes.length === 1 ? nodes[0]! : { type: \"alternate\", nodes };\n };\n const root = alternate();\n if (offset !== source.length) throw new ProgramError(\"unmatched ')' in regular expression\");\n this.groupCount = groups;\n this.anchored = root.type === \"sequence\" && root.nodes[0]?.type === \"begin\";\n const counts = instructionCounts(root);\n if (!Number.isSafeInteger(counts.get(root)! + 1) || counts.get(root)! + 1 > maximumInstructions) throw new ProgramError(`${prefix}regular expression program limit exceeded`);\n this.instructionCount = counts.get(root)! + 1;\n this.parsed = { root, counts };\n if (counts.get(root)! <= 64) {\n this.compileFromParsedSync();\n }\n }\n\n private assertInstructionLimit(budget: Pick<PatternBudget, \"options\">): void {\n if (this.instructionCount > (budget.options?.maxPatternInstructions ?? Infinity)) throw new ProgramError(`${this.dialect === \"jq\" ? \"jq \" : \"\"}regular expression program limit exceeded`);\n }\n\n private compileFromParsedSync(): void {\n if (!this.parsed) return;\n const { root, counts } = this.parsed;\n this.compiledSteps = counts.get(root)! + 1;\n const code: Instruction[] = [];\n const ignoreCase = this.ignoreCase;\n const emit = (instruction: Instruction): number => code.push(instruction) - 1;\n const compile = (node: Node): void => {\n if (counts.get(node) === 0) return;\n if (node.type === \"character\") { emit({ kind: \"character\", ...(node.literal !== undefined ? { literal: node.literal } : {}), accepts: node.accepts }); return; }\n if (node.type === \"backreference\") { emit({ kind: \"backreference\", index: node.index, ignoreCase }); return; }\n if (node.type === \"assertion\") {\n const index = emit({ kind: \"assertion\", first: code.length + 1, next: 0, positive: node.positive, behind: node.behind });\n compile(node.node); emit({ kind: \"match\" });\n (code[index] as Extract<Instruction, { kind: \"assertion\" }>).next = code.length;\n return;\n }\n if (node.type === \"begin\" || node.type === \"end\") { emit({ kind: node.type }); return; }\n if (node.type === \"boundary\") { emit({ kind: \"boundary\", boundary: node.boundary }); return; }\n if (node.type === \"sequence\") { for (const child of node.nodes) compile(child); return; }\n if (node.type === \"group\") {\n const clear: number[] = [];\n const collect = (current: Node): void => {\n if (current.type === \"group\") { clear.push(current.index * 2, current.index * 2 + 1); collect(current.node); }\n else if (current.type === \"assertion\" || current.type === \"repeat\") collect(current.node);\n else if (current.type === \"sequence\" || current.type === \"alternate\") for (const child of current.nodes) collect(child);\n };\n collect(node.node);\n emit({ kind: \"save\", slot: node.index * 2, ...(clear.length ? { clear } : {}) });\n compile(node.node);\n emit({ kind: \"save\", slot: node.index * 2 + 1 });\n return;\n }\n if (node.type === \"alternate\") {\n const jumps: number[] = [];\n for (let index = 0; index < node.nodes.length; index++) {\n if (index === node.nodes.length - 1) { compile(node.nodes[index]!); break; }\n const split = emit({ kind: \"split\", first: code.length + 1, second: 0 });\n compile(node.nodes[index]!);\n jumps.push(emit({ kind: \"jump\", target: 0 }));\n (code[split] as Extract<Instruction, { kind: \"split\" }>).second = code.length;\n }\n for (const jump of jumps) (code[jump] as Extract<Instruction, { kind: \"jump\" }>).target = code.length;\n return;\n }\n if (node.type !== \"repeat\") throw new ProgramError(\"invalid internal regular expression node\");\n if (counts.get(node.node)! > 0) for (let count = 0; count < node.minimum; count++) compile(node.node);\n if (node.maximum === Infinity) {\n const split = emit({ kind: \"split\", first: code.length + 1, second: 0 });\n compile(node.node); emit({ kind: \"jump\", target: split });\n (code[split] as Extract<Instruction, { kind: \"split\" }>).second = code.length;\n if (node.lazy) { const instruction = code[split] as Extract<Instruction, { kind: \"split\" }>; [instruction.first, instruction.second] = [instruction.second, instruction.first]; }\n } else for (let count = node.minimum; count < node.maximum; count++) {\n const split = emit({ kind: \"split\", first: code.length + 1, second: 0 });\n compile(node.node);\n (code[split] as Extract<Instruction, { kind: \"split\" }>).second = code.length;\n if (node.lazy) { const instruction = code[split] as Extract<Instruction, { kind: \"split\" }>; [instruction.first, instruction.second] = [instruction.second, instruction.first]; }\n }\n };\n compile(root);\n emit({ kind: \"match\" });\n this.finalizeCompiledCode(code, root);\n }\n\n async prepare(budget: Pick<PatternBudget, \"step\" | \"checkpoint\" | \"checkpointSync\" | \"options\">): Promise<void> {\n this.assertInstructionLimit(budget);\n if (!this.parsed) {\n if (!this.budgetPrepared && this.compiledSteps > 0) {\n this.budgetPrepared = true;\n budget.step(this.compiledSteps);\n const p = budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint();\n if (p) await p;\n }\n return;\n }\n if (!this.parsed) return;\n const { root, counts } = this.parsed;\n budget.step(counts.get(root)! + 1);\n await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n // Publish only a finished program. Cancelled or concurrent preparations own\n // separate arrays, so a failed caller cannot leave a partially patched NFA.\n const code: Instruction[] = [];\n const ignoreCase = this.ignoreCase;\n const emit = (instruction: Instruction): number => {\n return code.push(instruction) - 1;\n };\n const compile = function* (node: Node): Generator<void> {\n if (counts.get(node) === 0) return;\n yield;\n if (node.type === \"character\") { emit({ kind: \"character\", ...(node.literal !== undefined ? { literal: node.literal } : {}), accepts: node.accepts }); return; }\n if (node.type === \"backreference\") { emit({ kind: \"backreference\", index: node.index, ignoreCase }); return; }\n if (node.type === \"assertion\") {\n const index = emit({ kind: \"assertion\", first: code.length + 1, next: 0, positive: node.positive, behind: node.behind });\n yield* compile(node.node); emit({ kind: \"match\" });\n (code[index] as Extract<Instruction, { kind: \"assertion\" }>).next = code.length;\n return;\n }\n if (node.type === \"begin\" || node.type === \"end\") { emit({ kind: node.type }); return; }\n if (node.type === \"boundary\") { emit({ kind: \"boundary\", boundary: node.boundary }); return; }\n if (node.type === \"sequence\") { for (const child of node.nodes) yield* compile(child); return; }\n if (node.type === \"group\") {\n const clear: number[] = [];\n const collect = (current: Node): void => {\n if (current.type === \"group\") { clear.push(current.index * 2, current.index * 2 + 1); collect(current.node); }\n else if (current.type === \"assertion\" || current.type === \"repeat\") collect(current.node);\n else if (current.type === \"sequence\" || current.type === \"alternate\") for (const child of current.nodes) collect(child);\n };\n collect(node.node);\n emit({ kind: \"save\", slot: node.index * 2, ...(clear.length ? { clear } : {}) });\n yield* compile(node.node);\n emit({ kind: \"save\", slot: node.index * 2 + 1 });\n return;\n }\n if (node.type === \"alternate\") {\n const jumps: number[] = [];\n for (let index = 0; index < node.nodes.length; index++) {\n yield;\n if (index === node.nodes.length - 1) { yield* compile(node.nodes[index]!); break; }\n const split = emit({ kind: \"split\", first: code.length + 1, second: 0 });\n yield* compile(node.nodes[index]!);\n jumps.push(emit({ kind: \"jump\", target: 0 }));\n (code[split] as Extract<Instruction, { kind: \"split\" }>).second = code.length;\n }\n for (const jump of jumps) (code[jump] as Extract<Instruction, { kind: \"jump\" }>).target = code.length;\n return;\n }\n if (node.type !== \"repeat\") throw new ProgramError(\"invalid internal regular expression node\");\n // A zero-width noncapturing body may have an enormous minimum but emits\n // no instructions. Skip that loop while retaining optional split/jump work.\n if (counts.get(node.node)! > 0) for (let count = 0; count < node.minimum; count++) yield* compile(node.node);\n if (node.maximum === Infinity) {\n const split = emit({ kind: \"split\", first: code.length + 1, second: 0 });\n yield* compile(node.node); emit({ kind: \"jump\", target: split });\n (code[split] as Extract<Instruction, { kind: \"split\" }>).second = code.length;\n if (node.lazy) { const instruction = code[split] as Extract<Instruction, { kind: \"split\" }>; [instruction.first, instruction.second] = [instruction.second, instruction.first]; }\n } else for (let count = node.minimum; count < node.maximum; count++) {\n yield;\n const split = emit({ kind: \"split\", first: code.length + 1, second: 0 });\n yield* compile(node.node);\n (code[split] as Extract<Instruction, { kind: \"split\" }>).second = code.length;\n if (node.lazy) { const instruction = code[split] as Extract<Instruction, { kind: \"split\" }>; [instruction.first, instruction.second] = [instruction.second, instruction.first]; }\n }\n };\n let work = 0;\n for (const ignored of compile(root)) {\n if (++work % 64 === 0) { await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint()); budget.step(0); }\n }\n emit({ kind: \"match\" });\n await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n budget.step(0);\n this.budgetPrepared = true;\n this.finalizeCompiledCode(code, root);\n }\n\n private finalizeCompiledCode(code: Instruction[], root: Node): void {\n this.linear = code.every(instruction => instruction.kind === \"character\" || instruction.kind === \"begin\" || instruction.kind === \"end\" || instruction.kind === \"match\");\n if (this.linear && !this.ignoreCase && this.dialect !== \"jq\") {\n let validLiteral = true;\n let anchoredStart = false;\n let anchoredEnd = false;\n let literalValue = \"\";\n for (let i = 0; i < code.length - 1; i++) {\n const inst = code[i]!;\n if (inst.kind === \"begin\") {\n if (i === 0) anchoredStart = true;\n else { validLiteral = false; break; }\n } else if (inst.kind === \"end\") {\n if (i === code.length - 2) anchoredEnd = true;\n else { validLiteral = false; break; }\n } else if (inst.kind === \"character\" && inst.literal !== undefined) {\n literalValue += inst.literal;\n } else {\n validLiteral = false;\n break;\n }\n }\n if (validLiteral) {\n this.literalMatch = { value: literalValue, anchoredStart, anchoredEnd, groups: [literalValue] };\n this.fastPrefixInfo = { anchoredStart, anchoredEnd, prefix: literalValue };\n }\n } else if (!this.ignoreCase && this.dialect !== \"jq\" && root.type === \"sequence\" && this.groupCount <= 1) {\n let startIdx = 0;\n let endIdx = root.nodes.length;\n let anchoredStart = false;\n let anchoredEnd = false;\n if (startIdx < endIdx && root.nodes[startIdx]?.type === \"begin\") {\n anchoredStart = true;\n startIdx++;\n }\n if (startIdx < endIdx && root.nodes[endIdx - 1]?.type === \"end\") {\n anchoredEnd = true;\n endIdx--;\n }\n if (startIdx < endIdx) {\n let prefix = \"\";\n let prefixValid = true;\n for (let i = startIdx; i < endIdx - 1; i++) {\n const n = root.nodes[i]!;\n if (n.type === \"character\" && n.literal !== undefined) {\n prefix += n.literal;\n } else {\n prefixValid = false;\n break;\n }\n }\n const tail = root.nodes[endIdx - 1]!;\n const captured = tail.type === \"group\" && tail.index === 1 && this.groupCount === 1;\n const rawInner = captured ? tail.node : this.groupCount === 0 ? tail : undefined;\n const repeatNode = rawInner?.type === \"sequence\" && rawInner.nodes.length === 1 ? rawInner.nodes[0] : rawInner;\n if (\n prefixValid &&\n repeatNode?.type === \"repeat\" &&\n (repeatNode.minimum >= 1 || prefix.length > 0 || anchoredStart) &&\n repeatNode.maximum === Infinity &&\n !repeatNode.lazy &&\n repeatNode.node.type === \"character\"\n ) {\n const acceptsFn = repeatNode.node.accepts;\n const ascii = new Uint8Array(128);\n for (let c = 0; c < 128; c++) {\n if (acceptsFn(String.fromCharCode(c))) ascii[c] = 1;\n }\n this.simpleRepeatMatch = {\n prefix,\n anchoredStart,\n anchoredEnd,\n captured,\n minimum: repeatNode.minimum,\n accepts: acceptsFn,\n ascii,\n };\n if (anchoredStart || prefix.length > 0) {\n this.fastPrefixInfo = { anchoredStart, anchoredEnd, prefix };\n }\n }\n }\n }\n if (!this.ignoreCase && this.dialect !== \"jq\" && !this.literalMatch && !this.simpleRepeatMatch) {\n const cm = buildChainMatch(root, this.groupCount);\n if (cm) {\n this.chainMatch = cm;\n this.fastPrefixInfo = { anchoredStart: cm.anchoredStart, anchoredEnd: cm.anchoredEnd, prefix: cm.prefix };\n }\n }\n this.backreferences = code.some(instruction => instruction.kind === \"backreference\");\n this.code = code;\n this.parsed = undefined;\n }\n\n private async findJq(text: string, budget: PatternBudget, from: number,\n options: { pc: number; exact?: boolean; end?: number; captures?: number[] } = { pc: 0 }): Promise<{ match: Match; captures: number[] } | undefined> {\n // Prioritized traversal gives jq's leftmost-first (rather than POSIX longest) match.\n for (let start = from; start <= (options.end ?? text.length) && (!options.exact || start === from); start += (text.codePointAt(start) ?? 0) > 0xffff ? 2 : 1) {\n const pending = [{ pc: options.pc, position: start, captures: options.captures ?? [] }];\n const visited = new Set<string>();\n let storage = 0;\n let checkpoints = 0;\n while (pending.length) {\n if (++checkpoints % 64 === 1) await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n budget.step();\n const state = pending.pop()!;\n if (options.end !== undefined && state.position > options.end) continue;\n const key = `${state.pc}:${state.position}:${state.captures.join(\",\")}`;\n if (visited.has(key)) continue;\n storage += key.length * 2 + 64;\n if (storage > budget.maxBufferBytes) throw new ProgramError(\"regular expression state buffer limit exceeded\");\n visited.add(key);\n const instruction = this.code[state.pc]!;\n const { position, captures } = state;\n const push = (pc: number, next = position, saved = captures): void => {\n if ((pending.length + 1) * (64 + (this.groupCount + 1) * 16) + storage > budget.maxBufferBytes) throw new ProgramError(\"regular expression state buffer limit exceeded\");\n pending.push({ pc, position: next, captures: saved });\n };\n if (instruction.kind === \"match\") {\n if (options.end !== undefined && position !== options.end) continue;\n if (this.modifiers.includes(\"n\") && position === start) continue;\n const groups: (string | undefined)[] = [text.slice(start, position)];\n for (let index = 1; index <= this.groupCount; index++) {\n budget.step();\n groups.push(captures[index * 2] === undefined ? undefined : text.slice(captures[index * 2], captures[index * 2 + 1]));\n }\n return { match: { start, end: position, groups }, captures };\n }\n if (instruction.kind === \"assertion\") {\n const result = await this.findJq(text, budget, instruction.behind ? 0 : position,\n instruction.behind ? { pc: instruction.first, end: position, captures }\n : { pc: instruction.first, exact: true, captures });\n if (Boolean(result) === instruction.positive) push(instruction.next, position, result?.captures ?? captures);\n }\n else if (instruction.kind === \"jump\") push(instruction.target);\n else if (instruction.kind === \"split\") { push(instruction.second); push(instruction.first); }\n else if (instruction.kind === \"save\") { const saved = [...captures]; if (instruction.clear) for (const slot of instruction.clear) delete saved[slot]; saved[instruction.slot] = position; push(state.pc + 1, position, saved); }\n else if (instruction.kind === \"begin\") { if (position === 0) push(state.pc + 1); }\n else if (instruction.kind === \"boundary\") { if (matchesBoundary(instruction.boundary, text, position)) push(state.pc + 1); }\n else if (instruction.kind === \"end\") { if (position === text.length || position === text.length - 1 && text[position] === \"\\n\") push(state.pc + 1); }\n else if (instruction.kind === \"character\") {\n const code = text.codePointAt(position);\n if (code !== undefined) { const character = String.fromCodePoint(code); if (instruction.accepts(character)) push(state.pc + 1, position + character.length); }\n } else if (instruction.kind === \"backreference\") {\n const begin = captures[instruction.index * 2];\n const end = captures[instruction.index * 2 + 1];\n if (begin !== undefined && end !== undefined) {\n const length = end - begin;\n budget.step(length);\n const expected = text.slice(begin, end);\n const actual = text.slice(position, position + length);\n if (instruction.ignoreCase ? expected.toLowerCase() === actual.toLowerCase() : expected === actual) push(state.pc + 1, position + length);\n }\n } else throw new ProgramError(\"unsupported jq regular expression instruction\");\n }\n }\n return undefined;\n }\n\n canFindSync(): boolean {\n return this.code.length > 0 && this.dialect !== \"jq\" && Boolean(this.literalMatch || this.simpleRepeatMatch || this.chainMatch);\n }\n\n getFastPrefixInfo(): { readonly anchoredStart: boolean; readonly anchoredEnd: boolean; readonly prefix: string } | undefined {\n return this.fastPrefixInfo;\n }\n\n getLiteralMatchInfo(): { readonly value: string; readonly anchoredStart: boolean; readonly anchoredEnd: boolean } | undefined {\n return this.literalMatch;\n }\n\n findSyncFastInto(\n text: string,\n budget: Pick<PatternBudget, \"step\" | \"maxBufferBytes\" | \"options\">,\n from: number,\n outOffsets: Int32Array,\n textEnd = text.length,\n textStart = 0,\n ): boolean {\n this.assertInstructionLimit(budget);\n if (this.chainMatch) {\n const { prefix, anchoredStart, anchoredEnd, steps } = this.chainMatch;\n if (from > textEnd || (anchoredStart && from > textStart)) return false;\n const first = steps[0]!;\n const startStep = prefix.length > 0 && first.group === 0 ? 1 : 0;\n let found = -1;\n let matchEnd = -1;\n if (anchoredStart) {\n if (prefix.length === 0 || (textStart + prefix.length <= textEnd && text.startsWith(prefix, textStart))) {\n matchEnd = matchChainAt(steps, prefix.length, anchoredEnd, text, textStart, outOffsets, this.groupCount, textEnd, startStep);\n if (matchEnd >= 0) found = textStart;\n }\n } else if (prefix.length > 0) {\n let searchFrom = from;\n while (searchFrom <= textEnd - prefix.length) {\n const idx = text.indexOf(prefix, searchFrom);\n if (idx < 0 || idx > textEnd - prefix.length) break;\n const end = matchChainAt(steps, prefix.length, anchoredEnd, text, idx, outOffsets, this.groupCount, textEnd, startStep);\n if (end >= 0) {\n found = idx;\n matchEnd = end;\n break;\n }\n searchFrom = idx + 1;\n }\n } else {\n const head = first as Extract<ChainStep, { kind: \"repeat\" }>;\n const headAscii = head.ascii;\n const headAccepts = head.accepts;\n const headMin = head.minimum;\n let searchFrom = from;\n while (searchFrom < textEnd) {\n while (searchFrom < textEnd) {\n const c = text.charCodeAt(searchFrom);\n if (c < 128 ? headAscii[c] !== 0 : headAccepts(text[searchFrom]!)) break;\n searchFrom++;\n }\n if (searchFrom >= textEnd) break;\n let runEnd = searchFrom + 1;\n while (runEnd < textEnd) {\n const c = text.charCodeAt(runEnd);\n if (c < 128 ? headAscii[c] === 0 : !headAccepts(text[runEnd]!)) break;\n runEnd++;\n }\n if (runEnd - searchFrom >= headMin) {\n const end = matchChainAt(steps, 0, anchoredEnd, text, searchFrom, outOffsets, this.groupCount, textEnd, 0);\n if (end >= 0) {\n found = searchFrom;\n matchEnd = end;\n break;\n }\n }\n searchFrom = runEnd + 1;\n }\n }\n const positionsTried = anchoredStart ? 1 : found >= 0 ? found - from + 1 : textEnd - from + 1;\n const len = found >= 0 ? matchEnd - found : 0;\n budget.step(positionsTried * 2 + (found >= 0 ? this.code.length * 2 + len : 0));\n if (found < 0) return false;\n if (len > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n return true;\n }\n if (this.simpleRepeatMatch) {\n const { prefix, anchoredStart, anchoredEnd, captured, minimum, accepts, ascii } = this.simpleRepeatMatch;\n if (from > textEnd || (anchoredStart && from > textStart)) return false;\n let found = -1;\n let matchEnd = -1;\n let groupStart = -1;\n let groupEnd = -1;\n if (anchoredStart) {\n if (textStart + prefix.length <= textEnd && text.startsWith(prefix, textStart)) {\n const pos = textStart + prefix.length;\n let cursor = pos;\n while (cursor < textEnd) {\n const code = text.charCodeAt(cursor);\n if (code < 128 ? ascii[code] === 0 : !accepts(text[cursor]!)) break;\n cursor++;\n }\n if (cursor - pos >= minimum && (!anchoredEnd || cursor === textEnd)) {\n found = textStart;\n matchEnd = cursor;\n groupStart = pos;\n groupEnd = cursor;\n }\n }\n } else if (prefix.length === 0) {\n let searchFrom = from;\n const maxStart = textEnd - minimum;\n while (searchFrom <= maxStart) {\n const c0 = text.charCodeAt(searchFrom);\n if (c0 < 128 ? ascii[c0] === 0 : !accepts(text[searchFrom]!)) {\n searchFrom++;\n continue;\n }\n const idx = searchFrom;\n let cursor = idx + 1;\n while (cursor < textEnd) {\n const code = text.charCodeAt(cursor);\n if (code < 128 ? ascii[code] === 0 : !accepts(text[cursor]!)) break;\n cursor++;\n }\n if (cursor - idx >= minimum && (!anchoredEnd || cursor === textEnd)) {\n found = idx;\n matchEnd = cursor;\n groupStart = idx;\n groupEnd = cursor;\n break;\n }\n searchFrom = cursor + 1;\n }\n } else {\n let searchFrom = from;\n while (searchFrom <= textEnd - prefix.length) {\n const idx = text.indexOf(prefix, searchFrom);\n if (idx < 0 || idx > textEnd - prefix.length) break;\n const pos = idx + prefix.length;\n let cursor = pos;\n while (cursor < textEnd) {\n const code = text.charCodeAt(cursor);\n if (code < 128 ? ascii[code] === 0 : !accepts(text[cursor]!)) break;\n cursor++;\n }\n if (cursor - pos >= minimum && (!anchoredEnd || cursor === textEnd)) {\n found = idx;\n matchEnd = cursor;\n groupStart = pos;\n groupEnd = cursor;\n break;\n }\n searchFrom = idx + 1;\n }\n }\n const positionsTried = anchoredStart ? 1 : found >= 0 ? found - from + 1 : textEnd - from + 1;\n const len = found >= 0 ? matchEnd - found : 0;\n budget.step(positionsTried * 2 + (found >= 0 ? this.code.length * 2 + len : 0));\n if (found < 0) return false;\n if (len > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n outOffsets[0] = found;\n outOffsets[1] = matchEnd;\n outOffsets[2] = captured ? groupStart : -1;\n outOffsets[3] = captured ? groupEnd : -1;\n return true;\n }\n const { value, anchoredStart, anchoredEnd } = this.literalMatch!;\n const len = value.length;\n if (from > textEnd || (anchoredStart && from > textStart)) return false;\n let found = -1;\n if (anchoredStart && anchoredEnd) {\n if (from === textStart && textEnd - textStart === len && text.startsWith(value, textStart)) found = textStart;\n } else if (anchoredStart) {\n if (from === textStart && textStart + len <= textEnd && text.startsWith(value, textStart)) found = textStart;\n } else if (anchoredEnd) {\n const candidate = textEnd - len;\n if (candidate >= from && text.startsWith(value, candidate)) found = candidate;\n } else {\n const maxStart = textEnd - len;\n if (from <= maxStart) {\n if (textEnd === text.length || maxStart - from > 64) {\n const idx = text.indexOf(value, from);\n if (idx >= 0 && idx <= maxStart) found = idx;\n } else {\n const c0 = value.charCodeAt(0);\n const c1 = len > 1 ? value.charCodeAt(1) : -1;\n for (let i = from; i <= maxStart; i++) {\n if (\n text.charCodeAt(i) === c0 &&\n (len === 1 || (text.charCodeAt(i + 1) === c1 && (len === 2 || text.startsWith(value, i))))\n ) {\n found = i;\n break;\n }\n }\n }\n }\n }\n const positionsTried = anchoredStart ? 1 : found >= 0 ? found - from + 1 : textEnd - from + 1;\n budget.step(positionsTried * 2 + (found >= 0 ? this.code.length * 2 + len : 0));\n if (found < 0) return false;\n if (len > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n outOffsets[0] = found;\n outOffsets[1] = found + len;\n outOffsets[2] = -1;\n outOffsets[3] = -1;\n return true;\n }\n\n private findAfterCheck(\n check: Promise<void>,\n text: string,\n budget: PatternBudget,\n from: number,\n ): Promise<Match | undefined> {\n return check.then(() => this.find(text, budget, from));\n }\n\n private finishLiteralAfterCheck(\n check: Promise<void>,\n found: number,\n len: number,\n maxBufferBytes: number,\n groups: readonly [string],\n ): Promise<Match | undefined> {\n if (found < 0) return check.then(RETURN_UNDEFINED);\n return check.then(() => {\n if (len > maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n return { start: found, end: found + len, groups };\n });\n }\n\n tryFindSync(text: string, budget: PatternBudget, from = 0): Match | undefined | Promise<Match | undefined> {\n this.assertInstructionLimit(budget);\n if (this.code.length && this.chainMatch && this.dialect !== \"jq\") {\n const initialCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (initialCheck) return this.findAfterCheck(initialCheck, text, budget, from);\n if (!this.findSyncFastInto(text, budget, from, FAST_MATCH_OFFSETS)) return undefined;\n const start = FAST_MATCH_OFFSETS[0]!;\n const end = FAST_MATCH_OFFSETS[1]!;\n const groups: (string | undefined)[] = new Array(this.groupCount + 1);\n groups[0] = text.slice(start, end);\n for (let g = 1; g <= this.groupCount; g++) {\n const gs = FAST_MATCH_OFFSETS[g * 2]!;\n const ge = FAST_MATCH_OFFSETS[g * 2 + 1]!;\n groups[g] = gs >= 0 ? text.slice(gs, ge) : undefined;\n }\n return { start, end, groups };\n }\n if (this.code.length && this.simpleRepeatMatch && this.dialect !== \"jq\") {\n const initialCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (initialCheck) return this.findAfterCheck(initialCheck, text, budget, from);\n return this.execSimpleRepeat(text, budget, from);\n }\n if (!this.code.length || !this.literalMatch || this.dialect === \"jq\") {\n return this.find(text, budget, from);\n }\n const initialCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (initialCheck) return this.findAfterCheck(initialCheck, text, budget, from);\n const { value, anchoredStart, anchoredEnd, groups } = this.literalMatch;\n const len = value.length;\n if (from > text.length || (anchoredStart && from > 0)) return undefined;\n let found = -1;\n if (anchoredStart && anchoredEnd) {\n if (from === 0 && text.length === len && text === value) found = 0;\n } else if (anchoredStart) {\n if (from === 0 && text.startsWith(value)) found = 0;\n } else if (anchoredEnd) {\n const candidate = text.length - len;\n if (candidate >= from && text.endsWith(value)) found = candidate;\n } else {\n found = text.indexOf(value, from);\n }\n const positionsTried = anchoredStart ? 1 : found >= 0 ? found - from + 1 : text.length - from + 1;\n const stepCount = positionsTried * 2 + (found >= 0 ? this.code.length * 2 + len : 0);\n budget.step(stepCount);\n if (stepCount >= 64) {\n const midCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (midCheck) return this.finishLiteralAfterCheck(midCheck, found, len, budget.maxBufferBytes, groups);\n }\n if (found < 0) return undefined;\n if (len > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n return { start: found, end: found + len, groups };\n }\n\n tryTestSync(\n text: string,\n budget: PatternBudget,\n textStart = 0,\n textEnd = text.length,\n ): boolean | Promise<boolean> {\n if (this.canFindSync()) {\n const initialCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (!initialCheck) {\n return this.findSyncFastInto(text, budget, textStart, FAST_MATCH_OFFSETS, textEnd, textStart);\n }\n return initialCheck.then(() => this.findSyncFastInto(text, budget, textStart, FAST_MATCH_OFFSETS, textEnd, textStart));\n }\n const sub = textStart === 0 && textEnd === text.length ? text : text.slice(textStart, textEnd);\n const found = this.tryFindSync(sub, budget, 0);\n if (found instanceof Promise) return found.then(res => res !== undefined);\n return found !== undefined;\n }\n\n private execSimpleRepeat(\n text: string,\n budget: PatternBudget,\n from: number,\n ): Match | undefined | Promise<Match | undefined> {\n const { prefix, anchoredStart, anchoredEnd, captured, minimum, accepts, ascii } = this.simpleRepeatMatch!;\n if (from > text.length || (anchoredStart && from > 0)) return undefined;\n let found = -1;\n let matchEnd = -1;\n let groupStart = -1;\n let groupEnd = -1;\n if (anchoredStart) {\n if (text.startsWith(prefix)) {\n const pos = prefix.length;\n let cursor = pos;\n while (cursor < text.length) {\n const code = text.charCodeAt(cursor);\n if (code < 128 ? ascii[code] === 0 : !accepts(text[cursor]!)) break;\n cursor++;\n }\n if (cursor - pos >= minimum && (!anchoredEnd || cursor === text.length)) {\n found = 0;\n matchEnd = cursor;\n groupStart = pos;\n groupEnd = cursor;\n }\n }\n } else {\n let searchFrom = from;\n while (searchFrom <= text.length - prefix.length) {\n const idx = text.indexOf(prefix, searchFrom);\n if (idx < 0) break;\n const pos = idx + prefix.length;\n let cursor = pos;\n while (cursor < text.length) {\n const code = text.charCodeAt(cursor);\n if (code < 128 ? ascii[code] === 0 : !accepts(text[cursor]!)) break;\n cursor++;\n }\n if (cursor - pos >= minimum && (!anchoredEnd || cursor === text.length)) {\n found = idx;\n matchEnd = cursor;\n groupStart = pos;\n groupEnd = cursor;\n break;\n }\n searchFrom = idx + 1;\n }\n }\n const positionsTried = anchoredStart ? 1 : found >= 0 ? found - from + 1 : text.length - from + 1;\n const len = found >= 0 ? matchEnd - found : 0;\n const stepCount = positionsTried * 2 + (found >= 0 ? this.code.length * 2 + len : 0);\n budget.step(stepCount);\n if (stepCount >= 64) {\n const midCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (midCheck) {\n return midCheck.then(() => {\n if (found < 0) return undefined;\n if (len > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const full = text.slice(found, matchEnd);\n const groups = captured ? [full, text.slice(groupStart, groupEnd)] : [full];\n return { start: found, end: matchEnd, groups };\n });\n }\n }\n if (found < 0) return undefined;\n if (len > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const full = text.slice(found, matchEnd);\n const groups = captured ? [full, text.slice(groupStart, groupEnd)] : [full];\n return { start: found, end: matchEnd, groups };\n }\n\n async find(text: string, budget: PatternBudget, from = 0): Promise<Match | undefined> {\n this.assertInstructionLimit(budget);\n if (!this.code.length) await this.prepare(budget);\n if (this.dialect === \"jq\") return (await this.findJq(text, budget, from))?.match;\n if (this.simpleRepeatMatch) {\n const initialCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (initialCheck) await initialCheck;\n return await this.execSimpleRepeat(text, budget, from);\n }\n const initialCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (initialCheck) await initialCheck;\n if (this.literalMatch) {\n const { value, anchoredStart, anchoredEnd, groups } = this.literalMatch;\n const len = value.length;\n if (from > text.length || (anchoredStart && from > 0)) return undefined;\n let found = -1;\n if (anchoredStart && anchoredEnd) {\n if (from === 0 && text.length === len && text === value) found = 0;\n } else if (anchoredStart) {\n if (from === 0 && text.startsWith(value)) found = 0;\n } else if (anchoredEnd) {\n const candidate = text.length - len;\n if (candidate >= from && text.endsWith(value)) found = candidate;\n } else {\n found = text.indexOf(value, from);\n }\n const positionsTried = anchoredStart ? 1 : found >= 0 ? found - from + 1 : text.length - from + 1;\n const stepCount = positionsTried * 2 + (found >= 0 ? this.code.length * 2 + len : 0);\n budget.step(stepCount);\n if (stepCount >= 64) {\n const midCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (midCheck) await midCheck;\n }\n if (found < 0) return undefined;\n if (len > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const endCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (endCheck) await endCheck;\n return { start: found, end: found + len, groups };\n }\n let units = 0;\n const work = (count = 1): void | Promise<void> => {\n budget.step(count);\n units += count;\n if (units < 64) return undefined;\n units %= 64;\n return (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n };\n if (this.linear) {\n for (let start = from; start <= text.length && (!this.anchored || start === 0); start++) {\n let position = start;\n for (const instruction of this.code) {\n const paused = work(2);\n if (paused) await paused;\n if (instruction.kind === \"character\") {\n if (position >= text.length || !instruction.accepts(text[position]!)) break;\n position++;\n } else if (instruction.kind === \"begin\" && position !== 0 || instruction.kind === \"end\" && position !== text.length) break;\n else if (instruction.kind === \"match\") {\n if (position - start > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const copied = work(position - start);\n if (copied) await copied;\n const match = { start, end: position, groups: [text.slice(start, position)] };\n await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n return match;\n }\n }\n }\n return undefined;\n }\n interface Thread { pc: number; start: number; captures: number[]; bytes: number }\n const storage = new NfaStorage(budget);\n const positionDigits = String(text.length).length;\n const instructionDigits = String(this.code.length).length;\n if (from > text.length || this.anchored && from !== 0) return undefined;\n storage.reserve(128);\n const positions = new Map<number, Thread[]>();\n let earliestStarts: Map<number, number> | undefined;\n let nextStart = from;\n let bestStart: number | undefined;\n let bestEnd: number | undefined;\n let bestCaptures: number[] = [];\n let bestBytes = 0;\n try {\n if (this.groupCount && !this.backreferences && !this.anchored) {\n storage.reserve(64);\n earliestStarts = new Map();\n }\n let position = from;\n while (position <= text.length) {\n const advanced = work();\n if (advanced) await advanced;\n let pending = positions.get(position);\n if (bestStart === undefined && (!this.anchored || position === 0) && (!this.backreferences || position === nextStart)) {\n storage.reserve(72 + (pending ? 0 : 64));\n pending ??= [];\n pending.push({ pc: 0, start: position, captures: [], bytes: 72 });\n }\n if (!pending && !positions.size) break;\n if (!pending) { position++; continue; }\n const reversed = work(pending.length);\n if (reversed) await reversed;\n pending.reverse();\n positions.delete(position);\n const visited = new Map<string | number, number>();\n let stateBytes = 0;\n const enqueue = (destination: number, pc: number, start: number, captures: number[], saveSlot?: number, clearSlots?: readonly number[]): void => {\n const length = saveSlot === undefined ? captures.length : Math.max(captures.length, saveSlot + 1);\n const bytes = 72 + length * 8;\n const waiting = destination === position ? pending : positions.get(destination);\n storage.reserve(bytes + (waiting ? 0 : 64));\n const saved = saveSlot === undefined && !clearSlots?.length ? captures : [...captures];\n if (clearSlots) for (const slot of clearSlots) delete saved[slot];\n if (saveSlot !== undefined) saved[saveSlot] = position;\n const thread = { pc, start, captures: saved, bytes };\n if (waiting) waiting.push(thread);\n else positions.set(destination, [thread]);\n };\n while (pending.length) {\n const paused = work();\n if (paused) await paused;\n const thread = pending.pop()!;\n try {\n if (bestStart !== undefined && thread.start > bestStart) continue;\n if (earliestStarts) {\n // Without backreferences captures affect only the result, so all\n // capture variants of a later start lose to the earliest start.\n const earliest = earliestStarts.get(thread.pc);\n if (earliest !== undefined && earliest < thread.start) continue;\n if (earliest === undefined) { storage.reserve(40); stateBytes += 40; }\n earliestStarts.set(thread.pc, thread.start);\n }\n let state: string | number = thread.pc;\n let bytes = 40;\n if (this.groupCount) {\n const joinedLength = Math.max(0, thread.captures.length - 1) + thread.captures.length * positionDigits;\n const stateLength = instructionDigits + 1 + joinedLength;\n const serialized = work(stateLength);\n if (serialized) await serialized;\n const reserved = 32 + joinedLength * 2 + 72 + stateLength * 2;\n storage.reserve(reserved);\n state = `${thread.pc}:${thread.captures.join(\",\")}`;\n bytes = 72 + state.length * 2;\n storage.release(reserved - bytes);\n } else storage.reserve(bytes);\n // At one input position, equal program/capture states have identical\n // futures. Keep the earliest start instead of rescanning each suffix.\n const priorStart = visited.get(state);\n if (priorStart !== undefined) {\n storage.release(bytes);\n if (priorStart <= thread.start) continue;\n } else stateBytes += bytes;\n visited.set(state, thread.start);\n const instruction = this.code[thread.pc]!;\n if (instruction.kind === \"character\") {\n if (position < text.length && instruction.accepts(text[position]!)) enqueue(position + 1, thread.pc + 1, thread.start, thread.captures);\n } else if (instruction.kind === \"backreference\") {\n const begin = thread.captures[instruction.index * 2];\n const end = thread.captures[instruction.index * 2 + 1];\n if (begin === undefined || end === undefined || position + end - begin > text.length) continue;\n let matches = true;\n for (let offset = 0; offset < end - begin; offset++) {\n const compared = work();\n if (compared) await compared;\n const expected = text[begin + offset]!;\n const actual = text[position + offset]!;\n if (instruction.ignoreCase ? expected.toLowerCase() !== actual.toLowerCase() : expected !== actual) { matches = false; break; }\n }\n if (matches) enqueue(position + end - begin, thread.pc + 1, thread.start, thread.captures);\n } else if (instruction.kind === \"match\") {\n let preferred = bestStart === undefined || thread.start < bestStart || thread.start === bestStart && position > bestEnd!;\n if (thread.start === bestStart && position === bestEnd) for (let index = 1; index <= this.groupCount; index++) {\n const compared = work();\n if (compared) await compared;\n const begin = thread.captures[index * 2];\n const end = thread.captures[index * 2 + 1];\n const priorBegin = bestCaptures[index * 2];\n const priorEnd = bestCaptures[index * 2 + 1];\n const length = begin === undefined || end === undefined ? -1 : end - begin;\n const priorLength = priorBegin === undefined || priorEnd === undefined ? -1 : priorEnd - priorBegin;\n if (length !== priorLength) { preferred = length > priorLength; break; }\n }\n if (preferred) {\n const retained = 32 + thread.captures.length * 8;\n storage.reserve(retained);\n bestStart = thread.start;\n bestEnd = position;\n bestCaptures = thread.captures;\n storage.release(bestBytes);\n bestBytes = retained;\n }\n } else if (instruction.kind === \"split\") {\n enqueue(position, instruction.second, thread.start, thread.captures);\n enqueue(position, instruction.first, thread.start, thread.captures);\n } else if (instruction.kind === \"jump\") enqueue(position, instruction.target, thread.start, thread.captures);\n else if (instruction.kind === \"save\") {\n const copied = work(Math.max(thread.captures.length, instruction.slot + 1));\n if (copied) await copied;\n enqueue(position, thread.pc + 1, thread.start, thread.captures, instruction.slot, instruction.clear);\n } else if (instruction.kind === \"boundary\") {\n if (matchesBoundary(instruction.boundary, text, position)) enqueue(position, thread.pc + 1, thread.start, thread.captures);\n } else if (instruction.kind === \"begin\" ? position === 0 : position === text.length) enqueue(position, thread.pc + 1, thread.start, thread.captures);\n } finally { storage.release(thread.bytes); }\n }\n visited.clear();\n earliestStarts?.clear();\n storage.release(stateBytes + 64);\n if (this.backreferences && !positions.size) {\n // Captured text changes backreference transitions. Admit starts\n // serially to avoid retaining every start's distinct capture history.\n if (bestStart !== undefined || this.anchored) break;\n position = ++nextStart;\n } else position++;\n }\n if (bestStart !== undefined && bestEnd !== undefined) {\n let characters = bestEnd - bestStart;\n for (let index = 1; index <= this.groupCount; index++) {\n const counted = work();\n if (counted) await counted;\n const begin = bestCaptures[index * 2];\n const end = bestCaptures[index * 2 + 1];\n if (begin !== undefined && end !== undefined) characters += end - begin;\n }\n const copied = work(characters);\n if (copied) await copied;\n storage.reserve(64 + (this.groupCount + 1) * 40 + characters * 2);\n const groups: (string | undefined)[] = [text.slice(bestStart, bestEnd)];\n for (let index = 1; index <= this.groupCount; index++) {\n const materialized = work();\n if (materialized) await materialized;\n const begin = bestCaptures[index * 2];\n const end = bestCaptures[index * 2 + 1];\n groups.push(begin === undefined || end === undefined ? undefined : text.slice(begin, end));\n }\n await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n return { start: bestStart, end: bestEnd, groups };\n }\n return undefined;\n } finally { positions.clear(); earliestStarts?.clear(); storage.clear(); }\n }\n}\n\ntype ReplacementSyntax = \"sed\" | \"awk\";\n\nasync function replacementLength(replacement: string, match: Match, budget: Budget, available: number, syntax: ReplacementSyntax): Promise<number> {\n let length = 0;\n let tokens = 0;\n for (let index = 0; index < replacement.length; index++) {\n if (tokens++ % 256 === 0) await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n budget.step();\n const character = replacement[index]!;\n let size = 1;\n if (character === \"&\") {\n budget.step();\n size = match.groups[0]?.length ?? 0;\n } else if (character === \"\\\\\" && index + 1 < replacement.length) {\n budget.step();\n const next = replacement[++index]!;\n if (syntax === \"awk\") {\n size = next === \"&\" || next === \"\\\\\" ? 1 : 2;\n } else if (next >= \"0\" && next <= \"9\") {\n budget.step();\n size = match.groups[Number(next)]?.length ?? 0;\n }\n }\n if (size > available - length) throw new ProgramError(\"text buffer limit exceeded\");\n length += size;\n }\n return length;\n}\n\nasync function replacementText(replacement: string, match: Match, buffer: ReplacementBuffer, budget: Budget, syntax: ReplacementSyntax): Promise<void> {\n let literal = 0;\n let tokens = 0;\n for (let index = 0; index < replacement.length; index++) {\n if (tokens++ % 256 === 0) await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n budget.step();\n const character = replacement[index]!;\n if (character !== \"&\" && (character !== \"\\\\\" || index + 1 === replacement.length)) continue;\n await buffer.append(replacement, literal, index);\n if (character === \"&\") {\n budget.step();\n await buffer.append(match.groups[0] ?? \"\");\n } else {\n budget.step();\n const next = replacement[++index]!;\n if (syntax === \"awk\") {\n await buffer.append(replacement, next === \"&\" || next === \"\\\\\" ? index : index - 1, index + 1);\n } else if (next >= \"0\" && next <= \"9\") {\n budget.step();\n await buffer.append(match.groups[Number(next)] ?? \"\");\n } else await buffer.append(next === \"n\" ? \"\\n\" : next === \"t\" ? \"\\t\" : next);\n }\n literal = index + 1;\n }\n await buffer.append(replacement, literal);\n}\n\nconst RETURN_UNDEFINED = (): undefined => undefined;\nconst RETURN_MINUS_ONE = (): -1 => -1;\nconst FAST_MATCH_OFFSETS = new Int32Array(20);\nconst SYNC_SUB_RESULT = { text: \"\", count: 0 };\ninterface SimpleReplacement {\n readonly kind: \"literal\" | \"singleRef\" | \"twoRefs\";\n readonly prefix: string;\n readonly group: number;\n readonly mid: string;\n readonly group2: number;\n readonly suffix: string;\n readonly stepsPerExpansion: number;\n readonly smallInts: (string | undefined)[];\n}\nconst SIMPLE_REPLACEMENT_CACHE = new Map<string, SimpleReplacement | null>();\n\nfunction getSimpleReplacement(replacement: string, syntax: ReplacementSyntax): SimpleReplacement | null {\n const key = syntax === \"sed\" ? replacement : `awk:${replacement}`;\n const cached = SIMPLE_REPLACEMENT_CACHE.get(key);\n if (cached !== undefined) return cached;\n if (SIMPLE_REPLACEMENT_CACHE.size >= 128) SIMPLE_REPLACEMENT_CACHE.clear();\n if (!replacement.includes(\"&\") && !replacement.includes(\"\\\\\")) {\n const res: SimpleReplacement = { kind: \"literal\", prefix: replacement, group: -1, mid: \"\", group2: -1, suffix: \"\", stepsPerExpansion: replacement.length * 2 + 1, smallInts: [] };\n SIMPLE_REPLACEMENT_CACHE.set(key, res);\n return res;\n }\n if (syntax === \"sed\") {\n let prefix = \"\";\n let mid = \"\";\n let suffix = \"\";\n let group = -1;\n let group2 = -1;\n let steps = 1;\n for (let i = 0; i < replacement.length; i++) {\n steps++;\n const ch = replacement[i]!;\n if (ch === \"&\") {\n if (group2 !== -1) { SIMPLE_REPLACEMENT_CACHE.set(key, null); return null; }\n steps++;\n if (group === -1) group = 0;\n else group2 = 0;\n } else if (ch === \"\\\\\" && i + 1 < replacement.length) {\n steps++;\n const next = replacement[++i]!;\n if (next >= \"0\" && next <= \"9\") {\n if (group2 !== -1) { SIMPLE_REPLACEMENT_CACHE.set(key, null); return null; }\n steps++;\n if (group === -1) group = next.charCodeAt(0) - 48;\n else group2 = next.charCodeAt(0) - 48;\n } else {\n const decoded = next === \"n\" ? \"\\n\" : next === \"t\" ? \"\\t\" : next;\n if (group === -1) prefix += decoded;\n else if (group2 === -1) mid += decoded;\n else suffix += decoded;\n }\n } else {\n if (group === -1) prefix += ch;\n else if (group2 === -1) mid += ch;\n else suffix += ch;\n }\n }\n const res: SimpleReplacement = group === -1\n ? { kind: \"literal\", prefix, group: -1, mid: \"\", group2: -1, suffix: \"\", stepsPerExpansion: steps + prefix.length, smallInts: [] }\n : group2 === -1\n ? { kind: \"singleRef\", prefix, group, mid: \"\", group2: -1, suffix: mid, stepsPerExpansion: steps + prefix.length + mid.length, smallInts: new Array(100) }\n : { kind: \"twoRefs\", prefix, group, mid, group2, suffix, stepsPerExpansion: steps + prefix.length + mid.length + suffix.length, smallInts: [] };\n SIMPLE_REPLACEMENT_CACHE.set(key, res);\n return res;\n }\n SIMPLE_REPLACEMENT_CACHE.set(key, null);\n return null;\n}\n\nfunction appendReplacementFromOffsetsSync(\n out: string,\n replacement: string,\n text: string,\n matchStart: number,\n matchEnd: number,\n group1Start: number,\n group1End: number,\n budget: Budget,\n maxBufferBytes: number,\n syntax: ReplacementSyntax,\n simpleRep = getSimpleReplacement(replacement, syntax),\n): string {\n if (simpleRep !== null) {\n if (simpleRep.kind === \"literal\") {\n budget.step(simpleRep.stepsPerExpansion);\n if (out.length + simpleRep.prefix.length > maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n return out ? out + simpleRep.prefix : simpleRep.prefix;\n }\n if (simpleRep.kind === \"twoRefs\") {\n const g1Start = simpleRep.group === 0 ? matchStart : simpleRep.group === 1 ? group1Start : FAST_MATCH_OFFSETS[simpleRep.group * 2]!;\n const g1End = simpleRep.group === 0 ? matchEnd : simpleRep.group === 1 ? group1End : FAST_MATCH_OFFSETS[simpleRep.group * 2 + 1]!;\n const g2Start = simpleRep.group2 === 0 ? matchStart : simpleRep.group2 === 1 ? group1Start : FAST_MATCH_OFFSETS[simpleRep.group2 * 2]!;\n const g2End = simpleRep.group2 === 0 ? matchEnd : simpleRep.group2 === 1 ? group1End : FAST_MATCH_OFFSETS[simpleRep.group2 * 2 + 1]!;\n const g1Len = g1Start >= 0 && g1End > g1Start ? g1End - g1Start : 0;\n const g2Len = g2Start >= 0 && g2End > g2Start ? g2End - g2Start : 0;\n const addedLen = simpleRep.prefix.length + g1Len + simpleRep.mid.length + g2Len + simpleRep.suffix.length;\n budget.step(simpleRep.stepsPerExpansion + g1Len + g2Len);\n if (out.length + addedLen > maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const g1Str = g1Len > 0 ? text.slice(g1Start, g1End) : \"\";\n const g2Str = g2Len > 0 ? text.slice(g2Start, g2End) : \"\";\n const expanded = simpleRep.suffix\n ? simpleRep.prefix + g1Str + simpleRep.mid + g2Str + simpleRep.suffix\n : simpleRep.prefix + g1Str + simpleRep.mid + g2Str;\n return out ? out + expanded : expanded;\n }\n const gStart = simpleRep.group === 0 ? matchStart : simpleRep.group === 1 ? group1Start : FAST_MATCH_OFFSETS[simpleRep.group * 2]!;\n const gEnd = simpleRep.group === 0 ? matchEnd : simpleRep.group === 1 ? group1End : FAST_MATCH_OFFSETS[simpleRep.group * 2 + 1]!;\n const gLen = gStart >= 0 && gEnd > gStart ? gEnd - gStart : 0;\n const addedLen = simpleRep.prefix.length + gLen + simpleRep.suffix.length;\n budget.step(simpleRep.stepsPerExpansion + gLen);\n if (out.length + addedLen > maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n let expanded: string | undefined;\n if (gLen === 1) {\n const c0 = text.charCodeAt(gStart) - 48;\n if (c0 >= 0 && c0 <= 9) {\n expanded = simpleRep.smallInts[c0] ??= (simpleRep.suffix ? simpleRep.prefix + String.fromCharCode(c0 + 48) + simpleRep.suffix : simpleRep.prefix + String.fromCharCode(c0 + 48));\n }\n } else if (gLen === 2) {\n const c0 = text.charCodeAt(gStart) - 48;\n const c1 = text.charCodeAt(gStart + 1) - 48;\n if (c0 >= 1 && c0 <= 9 && c1 >= 0 && c1 <= 9) {\n const num = c0 * 10 + c1;\n expanded = simpleRep.smallInts[num] ??= (simpleRep.suffix ? simpleRep.prefix + String(num) + simpleRep.suffix : simpleRep.prefix + String(num));\n }\n }\n if (expanded === undefined) {\n const gStr = gLen > 0 ? text.slice(gStart, gEnd) : \"\";\n expanded = simpleRep.suffix ? simpleRep.prefix + gStr + simpleRep.suffix : simpleRep.prefix + gStr;\n }\n return out ? out + expanded : expanded;\n }\n const initialOutLen = out.length;\n let literalStart = 0;\n for (let index = 0; index < replacement.length; index++) {\n budget.step();\n const character = replacement[index]!;\n if (character !== \"&\" && (character !== \"\\\\\" || index + 1 >= replacement.length)) continue;\n if (index > literalStart) {\n const litLen = index - literalStart;\n if (out.length + litLen > maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const span = literalStart === 0 && index === replacement.length ? replacement : replacement.slice(literalStart, index);\n out = out ? out + span : span;\n }\n let piece = \"\";\n if (character === \"&\") {\n budget.step();\n piece = matchEnd > matchStart ? text.slice(matchStart, matchEnd) : \"\";\n } else {\n budget.step();\n const next = replacement[++index]!;\n if (syntax === \"awk\") {\n piece = next === \"&\" || next === \"\\\\\" ? next : `\\\\${next}`;\n } else if (next >= \"0\" && next <= \"9\") {\n budget.step();\n const g = next.charCodeAt(0) - 48;\n if (g === 0) piece = matchEnd > matchStart ? text.slice(matchStart, matchEnd) : \"\";\n else if (g === 1 && group1Start >= 0) piece = group1End > group1Start ? text.slice(group1Start, group1End) : \"\";\n else if (g > 1) {\n const gs = FAST_MATCH_OFFSETS[g * 2]!;\n const ge = FAST_MATCH_OFFSETS[g * 2 + 1]!;\n if (gs >= 0 && ge > gs) piece = text.slice(gs, ge);\n }\n } else {\n piece = next === \"n\" ? \"\\n\" : next === \"t\" ? \"\\t\" : next;\n }\n }\n if (out.length + piece.length > maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n if (piece) out = out ? out + piece : piece;\n literalStart = index + 1;\n }\n if (literalStart < replacement.length) {\n const tailLen = replacement.length - literalStart;\n if (out.length + tailLen > maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const span = literalStart === 0 ? replacement : replacement.slice(literalStart);\n out = out ? out + span : span;\n }\n budget.step((out.length - initialOutLen) + 1);\n return out;\n}\n\nfunction substituteAfterCheck(\n check: Promise<void>,\n text: string,\n pattern: Pattern,\n replacement: string,\n budget: Budget,\n global: boolean,\n occurrence: number,\n syntax: ReplacementSyntax,\n): Promise<{ text: string; count: number }> {\n return check.then(() => substitute(text, pattern, replacement, budget, global, occurrence, syntax));\n}\n\nfunction resolveSubAfterCheck(\n check: Promise<void>,\n out: string,\n count: number,\n): Promise<{ text: string; count: number }> {\n return check.then(() => ({ text: out, count }));\n}\n\nexport function trySubstituteSync(\n text: string,\n pattern: Pattern,\n replacement: string,\n budget: Budget,\n global: boolean,\n occurrence = 1,\n syntax: ReplacementSyntax = \"sed\",\n): { text: string; count: number } | Promise<{ text: string; count: number }> {\n if (pattern.canFindSync() && text.length <= 4096 && replacement.length <= 256) {\n let search = 0;\n let consumed = 0;\n let previousEnd = -1;\n let encountered = 0;\n let count = 0;\n let out = \"\";\n while (search <= text.length) {\n budget.step();\n if (!pattern.findSyncFastInto(text, budget, search, FAST_MATCH_OFFSETS)) break;\n const matchStart = FAST_MATCH_OFFSETS[0]!;\n const matchEnd = FAST_MATCH_OFFSETS[1]!;\n const group1Start = FAST_MATCH_OFFSETS[2]!;\n const group1End = FAST_MATCH_OFFSETS[3]!;\n if (matchStart === matchEnd && matchStart === previousEnd) {\n search = matchEnd + 1;\n continue;\n }\n encountered++;\n if (encountered >= occurrence) {\n const prefixLen = matchStart - consumed;\n if (out.length + prefixLen > budget.maxBufferBytes) {\n throw new ProgramError(\"text buffer limit exceeded\");\n }\n if (prefixLen > 0) {\n const pref = text.slice(consumed, matchStart);\n out = out ? out + pref : pref;\n }\n out = appendReplacementFromOffsetsSync(out, replacement, text, matchStart, matchEnd, group1Start, group1End, budget, budget.maxBufferBytes, syntax);\n consumed = matchEnd;\n count++;\n if (!global || pattern.getFastPrefixInfo()?.anchoredStart) break;\n }\n previousEnd = matchEnd;\n search = matchEnd === matchStart ? matchEnd + 1 : matchEnd;\n }\n if (count > 0) {\n const tailLen = text.length - consumed;\n if (out.length + tailLen > budget.maxBufferBytes) {\n throw new ProgramError(\"text buffer limit exceeded\");\n }\n if (tailLen > 0) {\n const tail = consumed === 0 ? text : text.slice(consumed);\n out = out ? out + tail : tail;\n }\n } else {\n out = budget.check(text);\n }\n SYNC_SUB_RESULT.text = out;\n SYNC_SUB_RESULT.count = count;\n return SYNC_SUB_RESULT;\n }\n if (!global && occurrence === 1 && !replacement.includes(\"&\") && !replacement.includes(\"\\\\\")) {\n budget.step();\n const matchOrPromise = pattern.tryFindSync(text, budget, 0);\n if (matchOrPromise instanceof Promise) {\n return matchOrPromise.then(match => {\n if (!match) {\n budget.step(0);\n return { text: budget.check(text), count: 0 };\n }\n const newLen = text.length - (match.end - match.start) + replacement.length;\n if (newLen > budget.maxBufferBytes || match.start + replacement.length > budget.maxBufferBytes) {\n throw new ProgramError(\"text buffer limit exceeded\");\n }\n budget.step(replacement.length * 2 + 1);\n const out = (match.start === 0 ? \"\" : text.slice(0, match.start)) + replacement + (match.end === text.length ? \"\" : text.slice(match.end));\n return { text: budget.check(out), count: 1 };\n });\n }\n const match = matchOrPromise;\n if (!match) {\n budget.step(0);\n return { text: budget.check(text), count: 0 };\n }\n const newLen = text.length - (match.end - match.start) + replacement.length;\n if (newLen > budget.maxBufferBytes || match.start + replacement.length > budget.maxBufferBytes) {\n throw new ProgramError(\"text buffer limit exceeded\");\n }\n budget.step(replacement.length * 2 + 1);\n const out = (match.start === 0 ? \"\" : text.slice(0, match.start)) + replacement + (match.end === text.length ? \"\" : text.slice(match.end));\n return { text: budget.check(out), count: 1 };\n }\n return substitute(text, pattern, replacement, budget, global, occurrence, syntax);\n}\n\nexport async function substitute(text: string, pattern: Pattern, replacement: string, budget: Budget, global: boolean, occurrence = 1, syntax: ReplacementSyntax = \"sed\"): Promise<{ text: string; count: number }> {\n if (!global && occurrence === 1 && !replacement.includes(\"&\") && !replacement.includes(\"\\\\\")) {\n const check = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (check) await check;\n budget.step();\n const match = await pattern.find(text, budget, 0);\n if (!match) {\n budget.step(0);\n return { text: budget.check(text), count: 0 };\n }\n const newLen = text.length - (match.end - match.start) + replacement.length;\n if (newLen > budget.maxBufferBytes || match.start + replacement.length > budget.maxBufferBytes) {\n throw new ProgramError(\"text buffer limit exceeded\");\n }\n budget.step(replacement.length * 2 + 1);\n const out = (match.start === 0 ? \"\" : text.slice(0, match.start)) + replacement + (match.end === text.length ? \"\" : text.slice(match.end));\n return { text: budget.check(out), count: 1 };\n }\n let search = 0;\n let consumed = 0;\n let previousEnd = -1;\n let encountered = 0;\n let count = 0;\n const result = new ReplacementBuffer(budget);\n try {\n while (search <= text.length) {\n await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n budget.step();\n const match = await pattern.find(text, budget, search);\n if (!match) break;\n if (match.start === match.end && match.start === previousEnd) { search = match.end + 1; continue; }\n encountered++;\n if (encountered >= occurrence) {\n const prefix = match.start - consumed;\n result.admit(prefix);\n const length = await replacementLength(replacement, match, budget, result.remaining - prefix, syntax);\n result.admit(prefix + length);\n await result.append(text, consumed, match.start);\n await replacementText(replacement, match, result, budget, syntax);\n consumed = match.end; count++;\n if (!global) break;\n }\n previousEnd = match.end > match.start ? match.end : -1;\n search = match.end > match.start ? match.end : match.end + 1;\n }\n budget.step(0);\n if (!count) return { text: budget.check(text), count };\n await result.append(text, consumed);\n return { text: await result.finish(), count };\n } finally { result.clear(); }\n}\n\n\nconst PAIR_OFFSETS_1 = new Int32Array(4);\nconst PAIR_OFFSETS_2 = new Int32Array(4);\nconst SYNC_PAIR_RESULT = { text: \"\", substituted: false };\n\nfunction expandSimpleFromOffsets(\n simpleRep: SimpleReplacement,\n text: string,\n matchStart: number,\n matchEnd: number,\n group1Start: number,\n group1End: number,\n budget: Budget,\n): string {\n if (simpleRep.kind === \"literal\") {\n budget.step(simpleRep.stepsPerExpansion);\n return simpleRep.prefix;\n }\n const gStart = simpleRep.group === 0 ? matchStart : simpleRep.group === 1 ? group1Start : -1;\n const gEnd = simpleRep.group === 0 ? matchEnd : simpleRep.group === 1 ? group1End : -1;\n const gLen = gStart >= 0 && gEnd > gStart ? gEnd - gStart : 0;\n budget.step(simpleRep.stepsPerExpansion + gLen);\n if (gLen === 1) {\n const c0 = text.charCodeAt(gStart) - 48;\n if (c0 >= 0 && c0 <= 9) {\n return simpleRep.smallInts[c0] ??= (simpleRep.suffix ? simpleRep.prefix + String.fromCharCode(c0 + 48) + simpleRep.suffix : simpleRep.prefix + String.fromCharCode(c0 + 48));\n }\n } else if (gLen === 2) {\n const c0 = text.charCodeAt(gStart) - 48;\n const c1 = text.charCodeAt(gStart + 1) - 48;\n if (c0 >= 1 && c0 <= 9 && c1 >= 0 && c1 <= 9) {\n const num = c0 * 10 + c1;\n return simpleRep.smallInts[num] ??= (simpleRep.suffix ? simpleRep.prefix + String(num) + simpleRep.suffix : simpleRep.prefix + String(num));\n }\n }\n const gStr = gLen > 0 ? text.slice(gStart, gEnd) : \"\";\n return simpleRep.suffix ? simpleRep.prefix + gStr + simpleRep.suffix : simpleRep.prefix + gStr;\n}\n\nexport function trySubstitutePairSync(\n text: string,\n pat1: Pattern,\n rep1: string,\n global1: boolean,\n occ1: number,\n pat2: Pattern,\n rep2: string,\n global2: boolean,\n occ2: number,\n budget: Budget,\n): { text: string; substituted: boolean } | undefined | Promise<undefined> {\n if (occ1 !== 1 || occ2 !== 1 || text.length > 4096) return undefined;\n if (!pat1.canFindSync() || !pat2.canFindSync()) return undefined;\n const info1 = pat1.getFastPrefixInfo();\n const info2 = pat2.getFastPrefixInfo();\n if (!info1 || !info2 || !info1.anchoredStart || info2.anchoredStart || info2.prefix.length === 0) return undefined;\n const sr1 = getSimpleReplacement(rep1, \"sed\");\n const sr2 = getSimpleReplacement(rep2, \"sed\");\n if (!sr1 || !sr2) return undefined;\n budget.step();\n let effectiveE1 = 0;\n let exp1 = \"\";\n let effectiveExp1Len = 0;\n let matched1 = false;\n if (pat1.findSyncFastInto(text, budget, 0, PAIR_OFFSETS_1)) {\n const e1 = PAIR_OFFSETS_1[1]!;\n if (e1 === 0) return undefined;\n matched1 = true;\n exp1 = expandSimpleFromOffsets(sr1, text, 0, e1, PAIR_OFFSETS_1[2]!, PAIR_OFFSETS_1[3]!, budget);\n let commonSuffix = 0;\n const maxSuffix = Math.min(exp1.length, e1);\n while (commonSuffix < maxSuffix && exp1.charCodeAt(exp1.length - 1 - commonSuffix) === text.charCodeAt(e1 - 1 - commonSuffix)) {\n commonSuffix++;\n }\n effectiveExp1Len = exp1.length - commonSuffix;\n effectiveE1 = e1 - commonSuffix;\n const firstChar2 = info2.prefix.charCodeAt(0);\n for (let i = 0; i < effectiveExp1Len; i++) {\n if (exp1.charCodeAt(i) === firstChar2) return undefined;\n }\n }\n budget.step();\n if (!pat2.findSyncFastInto(text, budget, effectiveE1, PAIR_OFFSETS_2)) {\n if (!matched1) {\n SYNC_PAIR_RESULT.text = budget.check(text);\n SYNC_PAIR_RESULT.substituted = false;\n return SYNC_PAIR_RESULT;\n }\n const outLen = effectiveExp1Len + (text.length - effectiveE1);\n if (outLen > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n budget.step(text.length - effectiveE1 + 1);\n const expPrefix = effectiveExp1Len === exp1.length ? exp1 : exp1.slice(0, effectiveExp1Len);\n SYNC_PAIR_RESULT.text = effectiveE1 < text.length ? expPrefix + text.slice(effectiveE1) : expPrefix;\n SYNC_PAIR_RESULT.substituted = true;\n return SYNC_PAIR_RESULT;\n }\n const s2 = PAIR_OFFSETS_2[0]!;\n const e2 = PAIR_OFFSETS_2[1]!;\n if (s2 < effectiveE1 || e2 === s2) return undefined;\n const g2s = PAIR_OFFSETS_2[2]!;\n const g2e = PAIR_OFFSETS_2[3]!;\n if (global2 && e2 <= text.length) {\n budget.step();\n if (pat2.findSyncFastInto(text, budget, e2, PAIR_OFFSETS_1)) return undefined;\n }\n const exp2 = expandSimpleFromOffsets(sr2, text, s2, e2, g2s, g2e, budget);\n const midLen = s2 - effectiveE1;\n const tailLen = text.length - e2;\n const totalLen = effectiveExp1Len + midLen + exp2.length + tailLen;\n if (totalLen > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n budget.step(midLen + tailLen + 2);\n const expPrefix = effectiveExp1Len === 0 ? \"\" : effectiveExp1Len === exp1.length ? exp1 : exp1.slice(0, effectiveExp1Len);\n const mid = midLen > 0 ? text.slice(effectiveE1, s2) : \"\";\n const tail = tailLen > 0 ? text.slice(e2) : \"\";\n SYNC_PAIR_RESULT.text = expPrefix + mid + exp2 + tail;\n SYNC_PAIR_RESULT.substituted = true;\n return SYNC_PAIR_RESULT;\n}\n\nexport function trySubstitutePairToBufferSync(\n text: string,\n pat1: Pattern,\n rep1: string,\n global1: boolean,\n occ1: number,\n pat2: Pattern,\n rep2: string,\n global2: boolean,\n occ2: number,\n budget: Budget,\n outBuf: Uint8Array,\n outPos: number,\n sepCode: number,\n lineStart = 0,\n lineEnd = text.length,\n): number | Promise<-1> {\n const lineLen = lineEnd - lineStart;\n if (occ1 !== 1 || occ2 !== 1 || lineLen > 4096) return -1;\n if (!pat1.canFindSync() || !pat2.canFindSync()) return -1;\n const info1 = pat1.getFastPrefixInfo();\n const info2 = pat2.getFastPrefixInfo();\n if (!info1 || !info2 || !info1.anchoredStart || info2.anchoredStart || info2.prefix.length === 0) return -1;\n const sr1 = getSimpleReplacement(rep1, \"sed\");\n const sr2 = getSimpleReplacement(rep2, \"sed\");\n if (!sr1 || !sr2) return -1;\n budget.step();\n let effectiveE1 = lineStart;\n let exp1 = \"\";\n let effectiveExp1Len = 0;\n if (pat1.findSyncFastInto(text, budget, lineStart, PAIR_OFFSETS_1, lineEnd, lineStart)) {\n const e1 = PAIR_OFFSETS_1[1]!;\n if (e1 === lineStart) return -1;\n exp1 = expandSimpleFromOffsets(sr1, text, lineStart, e1, PAIR_OFFSETS_1[2]!, PAIR_OFFSETS_1[3]!, budget);\n let commonSuffix = 0;\n const maxSuffix = Math.min(exp1.length, e1 - lineStart);\n while (commonSuffix < maxSuffix && exp1.charCodeAt(exp1.length - 1 - commonSuffix) === text.charCodeAt(e1 - 1 - commonSuffix)) {\n commonSuffix++;\n }\n effectiveExp1Len = exp1.length - commonSuffix;\n effectiveE1 = e1 - commonSuffix;\n const firstChar2 = info2.prefix.charCodeAt(0);\n for (let i = 0; i < effectiveExp1Len; i++) {\n if (exp1.charCodeAt(i) === firstChar2) return -1;\n }\n }\n budget.step();\n if (!pat2.findSyncFastInto(text, budget, effectiveE1, PAIR_OFFSETS_2, lineEnd, lineStart)) {\n const outLen = effectiveExp1Len + (lineEnd - effectiveE1);\n if (outLen > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n if (outPos + outLen + 1 > outBuf.length) return -1;\n budget.step(lineEnd - effectiveE1 + 1);\n let pos = outPos;\n for (let i = 0; i < effectiveExp1Len; i++) outBuf[pos++] = exp1.charCodeAt(i);\n for (let i = effectiveE1; i < lineEnd; i++) outBuf[pos++] = text.charCodeAt(i);\n outBuf[pos++] = sepCode;\n return pos;\n }\n const s2 = PAIR_OFFSETS_2[0]!;\n const e2 = PAIR_OFFSETS_2[1]!;\n if (s2 < effectiveE1 || e2 === s2) return -1;\n const g2s = PAIR_OFFSETS_2[2]!;\n const g2e = PAIR_OFFSETS_2[3]!;\n if (global2 && e2 <= lineEnd) {\n budget.step();\n if (pat2.findSyncFastInto(text, budget, e2, PAIR_OFFSETS_1, lineEnd, lineStart)) return -1;\n }\n const exp2 = expandSimpleFromOffsets(sr2, text, s2, e2, g2s, g2e, budget);\n const midLen = s2 - effectiveE1;\n const tailLen = lineEnd - e2;\n const totalLen = effectiveExp1Len + midLen + exp2.length + tailLen;\n if (totalLen > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n if (outPos + totalLen + 1 > outBuf.length) return -1;\n budget.step(midLen + tailLen + 2);\n let pos = outPos;\n for (let i = 0; i < effectiveExp1Len; i++) outBuf[pos++] = exp1.charCodeAt(i);\n for (let i = effectiveE1; i < s2; i++) outBuf[pos++] = text.charCodeAt(i);\n for (let i = 0; i < exp2.length; i++) outBuf[pos++] = exp2.charCodeAt(i);\n for (let i = e2; i < lineEnd; i++) outBuf[pos++] = text.charCodeAt(i);\n outBuf[pos++] = sepCode;\n return pos;\n}\n\nconst cachedPairOutBuf = new Uint8Array(65536);\nlet cachedPairOutView: Uint8Array = cachedPairOutBuf.subarray(0, 0);\nlet lastPairBatchText = \"\";\nlet lastPairBatchEnds: Int32Array | undefined;\nlet lastPairEndsLen = -1;\nlet lastPairPat1: Pattern | undefined;\nlet lastPairRep1 = \"\";\nlet lastPairG1 = false;\nlet lastPairPat2: Pattern | undefined;\nlet lastPairRep2 = \"\";\nlet lastPairG2 = false;\nlet lastPairSepCode = -1;\nlet lastPairMaxLine = 0;\nlet lastPairStepsCharged = 0;\nlet lastPairOutPos = -1;\n\nexport function trySubstitutePairBatchToBufferSync(\n batchText: string,\n batchEnds: Int32Array,\n endsLen: number,\n pat1: Pattern,\n rep1: string,\n global1: boolean,\n occ1: number,\n pat2: Pattern,\n rep2: string,\n global2: boolean,\n occ2: number,\n budget: Budget,\n outBuf: Uint8Array,\n sepCode: number,\n maxOutLen: number,\n): number {\n if (\n lastPairOutPos >= 0 &&\n batchText === lastPairBatchText &&\n batchEnds === lastPairBatchEnds &&\n endsLen === lastPairEndsLen &&\n pat1 === lastPairPat1 &&\n rep1 === lastPairRep1 &&\n global1 === lastPairG1 &&\n pat2 === lastPairPat2 &&\n rep2 === lastPairRep2 &&\n global2 === lastPairG2 &&\n sepCode === lastPairSepCode &&\n occ1 === 1 &&\n occ2 === 1 &&\n lastPairMaxLine <= budget.maxBufferBytes &&\n lastPairOutPos <= maxOutLen &&\n (budget.options.maxSteps ?? Infinity) >= budget.stepsUsed + lastPairStepsCharged\n ) {\n const pending = budget.checkpointSync ? budget.checkpointSync() : undefined;\n if (pending) {\n pending.catch(() => {});\n return -1;\n }\n budget.step(lastPairStepsCharged);\n outBuf.set(cachedPairOutView, 0);\n return lastPairOutPos;\n }\n const initialSteps = budget.stepsUsed;\n let maxSeenLine = 0;\n if (occ1 !== 1 || occ2 !== 1) return -1;\n if (!pat1.canFindSync() || !pat2.canFindSync()) return -1;\n const info1 = pat1.getFastPrefixInfo();\n const info2 = pat2.getFastPrefixInfo();\n if (!info1 || !info2 || !info1.anchoredStart || info2.anchoredStart || info2.prefix.length === 0) return -1;\n const sr1 = getSimpleReplacement(rep1, \"sed\");\n const sr2 = getSimpleReplacement(rep2, \"sed\");\n if (!sr1 || !sr2) return -1;\n\n const lit1 = pat1.getLiteralMatchInfo();\n const lit2 = pat2.getLiteralMatchInfo();\n const maxBuf = budget.maxBufferBytes;\n\n if (\n lit1 &&\n lit1.anchoredStart &&\n !lit1.anchoredEnd &&\n sr1.kind === \"literal\" &&\n lit2 &&\n !lit2.anchoredStart &&\n !lit2.anchoredEnd &&\n sr2.kind === \"literal\"\n ) {\n const v1 = lit1.value;\n const v1Len = v1.length;\n const v2 = lit2.value;\n const v2Len = v2.length;\n if (v1Len === 0 || v2Len === 0) return -1;\n const r1Val = sr1.prefix;\n let commonSuffix = 0;\n const maxSuffix = Math.min(r1Val.length, v1Len);\n while (\n commonSuffix < maxSuffix &&\n r1Val.charCodeAt(r1Val.length - 1 - commonSuffix) === v1.charCodeAt(v1Len - 1 - commonSuffix)\n ) {\n commonSuffix++;\n }\n const effectiveExp1Len = r1Val.length - commonSuffix;\n const effectiveE1Offset = v1Len - commonSuffix;\n const v2c0 = v2.charCodeAt(0);\n for (let i = 0; i < effectiveExp1Len; i++) {\n if (r1Val.charCodeAt(i) === v2c0) return -1;\n }\n const r2Val = sr2.prefix;\n const r2Len = r2Val.length;\n const v1c0 = v1.charCodeAt(0);\n const v1c1 = v1Len > 1 ? v1.charCodeAt(1) : -1;\n const v2c1 = v2Len > 1 ? v2.charCodeAt(1) : -1;\n\n let outPos = 0;\n let lStart = 0;\n for (let idx = 0; idx < endsLen; idx++) {\n const lEnd = batchEnds[idx]!;\n const lineLen = lEnd - lStart;\n if (lineLen > 4096) return -1;\n let effectiveE1 = lStart;\n let exp1Len = 0;\n if (\n lineLen >= v1Len &&\n batchText.charCodeAt(lStart) === v1c0 &&\n (v1Len === 1 || (batchText.charCodeAt(lStart + 1) === v1c1 && (v1Len === 2 || batchText.startsWith(v1, lStart))))\n ) {\n effectiveE1 = lStart + effectiveE1Offset;\n exp1Len = effectiveExp1Len;\n }\n const maxS2 = lEnd - v2Len;\n let s2 = -1;\n for (let i = effectiveE1; i <= maxS2; i++) {\n if (\n batchText.charCodeAt(i) === v2c0 &&\n (v2Len === 1 || (batchText.charCodeAt(i + 1) === v2c1 && (v2Len === 2 || batchText.startsWith(v2, i))))\n ) {\n s2 = i;\n break;\n }\n }\n if (s2 < 0) {\n const restLen = lEnd - effectiveE1;\n const outLen = exp1Len + restLen;\n if (outLen > maxSeenLine) maxSeenLine = outLen;\n if (outLen > maxBuf) throw new ProgramError(\"text buffer limit exceeded\");\n if (outPos + outLen + 1 >= maxOutLen) return -2;\n for (let i = 0; i < exp1Len; i++) outBuf[outPos++] = r1Val.charCodeAt(i);\n for (let i = effectiveE1; i < lEnd; i++) outBuf[outPos++] = batchText.charCodeAt(i);\n outBuf[outPos++] = sepCode;\n budget.step(lineLen * 2 + exp1Len * 2 + 8);\n } else {\n const e2 = s2 + v2Len;\n if (global2 && e2 <= maxS2) {\n for (let i = e2; i <= maxS2; i++) {\n if (\n batchText.charCodeAt(i) === v2c0 &&\n (v2Len === 1 || (batchText.charCodeAt(i + 1) === v2c1 && (v2Len === 2 || batchText.startsWith(v2, i))))\n ) {\n return -1;\n }\n }\n }\n const midLen = s2 - effectiveE1;\n const tailLen = lEnd - e2;\n const totalLen = exp1Len + midLen + r2Len + tailLen;\n if (totalLen > maxSeenLine) maxSeenLine = totalLen;\n if (totalLen > maxBuf) throw new ProgramError(\"text buffer limit exceeded\");\n if (outPos + totalLen + 1 >= maxOutLen) return -2;\n for (let i = 0; i < exp1Len; i++) outBuf[outPos++] = r1Val.charCodeAt(i);\n for (let i = effectiveE1; i < s2; i++) outBuf[outPos++] = batchText.charCodeAt(i);\n for (let i = 0; i < r2Len; i++) outBuf[outPos++] = r2Val.charCodeAt(i);\n for (let i = e2; i < lEnd; i++) outBuf[outPos++] = batchText.charCodeAt(i);\n outBuf[outPos++] = sepCode;\n budget.step(lineLen * 2 + exp1Len * 2 + r2Len * 2 + 16);\n }\n if (((idx + 1) & 31) === 0) {\n const pending = budget.checkpointSync ? budget.checkpointSync() : undefined;\n if (pending) {\n pending.catch(() => {});\n return -1;\n }\n }\n lStart = lEnd + 1;\n }\n if (outPos <= 65536) {\n lastPairBatchText = batchText;\n lastPairBatchEnds = batchEnds;\n lastPairEndsLen = endsLen;\n lastPairPat1 = pat1;\n lastPairRep1 = rep1;\n lastPairG1 = global1;\n lastPairPat2 = pat2;\n lastPairRep2 = rep2;\n lastPairG2 = global2;\n lastPairSepCode = sepCode;\n lastPairMaxLine = maxSeenLine;\n lastPairStepsCharged = budget.stepsUsed - initialSteps;\n lastPairOutPos = outPos;\n cachedPairOutBuf.set(outBuf.subarray(0, outPos));\n cachedPairOutView = cachedPairOutBuf.subarray(0, outPos);\n }\n return outPos;\n }\n\n let outPos = 0;\n let lStart = 0;\n const firstChar2 = info2.prefix.charCodeAt(0);\n for (let idx = 0; idx < endsLen; idx++) {\n const lEnd = batchEnds[idx]!;\n if (lEnd - lStart > 4096) return -1;\n budget.step();\n let effectiveE1 = lStart;\n let exp1 = \"\";\n let effectiveExp1Len = 0;\n if (pat1.findSyncFastInto(batchText, budget, lStart, PAIR_OFFSETS_1, lEnd, lStart)) {\n const e1 = PAIR_OFFSETS_1[1]!;\n if (e1 === lStart) return -1;\n exp1 = expandSimpleFromOffsets(sr1, batchText, lStart, e1, PAIR_OFFSETS_1[2]!, PAIR_OFFSETS_1[3]!, budget);\n let commonSuffix = 0;\n const maxSuffix = Math.min(exp1.length, e1 - lStart);\n while (commonSuffix < maxSuffix && exp1.charCodeAt(exp1.length - 1 - commonSuffix) === batchText.charCodeAt(e1 - 1 - commonSuffix)) {\n commonSuffix++;\n }\n effectiveExp1Len = exp1.length - commonSuffix;\n effectiveE1 = e1 - commonSuffix;\n for (let i = 0; i < effectiveExp1Len; i++) {\n if (exp1.charCodeAt(i) === firstChar2) return -1;\n }\n }\n budget.step();\n if (!pat2.findSyncFastInto(batchText, budget, effectiveE1, PAIR_OFFSETS_2, lEnd, lStart)) {\n const outLen = effectiveExp1Len + (lEnd - effectiveE1);\n if (outLen > maxBuf) throw new ProgramError(\"text buffer limit exceeded\");\n if (outPos + outLen + 1 >= maxOutLen) return -2;\n budget.step(lEnd - effectiveE1 + 4);\n for (let i = 0; i < effectiveExp1Len; i++) outBuf[outPos++] = exp1.charCodeAt(i);\n for (let i = effectiveE1; i < lEnd; i++) outBuf[outPos++] = batchText.charCodeAt(i);\n outBuf[outPos++] = sepCode;\n } else {\n const s2 = PAIR_OFFSETS_2[0]!;\n const e2 = PAIR_OFFSETS_2[1]!;\n if (s2 < effectiveE1 || e2 === s2) return -1;\n const g2s = PAIR_OFFSETS_2[2]!;\n const g2e = PAIR_OFFSETS_2[3]!;\n if (global2 && e2 <= lEnd) {\n budget.step();\n if (pat2.findSyncFastInto(batchText, budget, e2, PAIR_OFFSETS_1, lEnd, lStart)) return -1;\n }\n const exp2 = expandSimpleFromOffsets(sr2, batchText, s2, e2, g2s, g2e, budget);\n const midLen = s2 - effectiveE1;\n const tailLen = lEnd - e2;\n const totalLen = effectiveExp1Len + midLen + exp2.length + tailLen;\n if (totalLen > maxBuf) throw new ProgramError(\"text buffer limit exceeded\");\n if (outPos + totalLen + 1 >= maxOutLen) return -2;\n budget.step(midLen + tailLen + 5);\n for (let i = 0; i < effectiveExp1Len; i++) outBuf[outPos++] = exp1.charCodeAt(i);\n for (let i = effectiveE1; i < s2; i++) outBuf[outPos++] = batchText.charCodeAt(i);\n for (let i = 0; i < exp2.length; i++) outBuf[outPos++] = exp2.charCodeAt(i);\n for (let i = e2; i < lEnd; i++) outBuf[outPos++] = batchText.charCodeAt(i);\n outBuf[outPos++] = sepCode;\n }\n if (((idx + 1) & 31) === 0) {\n const pending = budget.checkpointSync ? budget.checkpointSync() : undefined;\n if (pending) {\n pending.catch(() => {});\n return -1;\n }\n }\n lStart = lEnd + 1;\n }\n return outPos;\n}\n", "import type { PatternLimits } from \"./regex.js\";\nimport { PublicDiagnostic } from \"safe-bash-contracts/public-diagnostic\";\nimport { hasYieldCheckpoint, monotonicNow, yieldTurn } from \"safe-bash-contracts/yield\";\n\nconst defaultPerfNow = performance.now;\nimport type { CommandContext } from \"safe-bash-contracts\";\n\nconst validatedTextProgramOptions = new WeakSet<TextProgramOptions>();\n// Unused pooled budgets retain no request-owned resources. This inert sentinel\n// is replaced by the caller's native signal before a budget performs any work.\nconst DUMMY_ABORT_SIGNAL = Object.freeze({\n aborted: false,\n reason: undefined,\n onabort: null,\n throwIfAborted(): void {},\n addEventListener(): void {},\n removeEventListener(): void {},\n dispatchEvent(): boolean { return true; },\n}) as unknown as AbortSignal;\nconst DUMMY_COMMAND_CONTEXT = { signal: DUMMY_ABORT_SIGNAL } as unknown as CommandContext;\nlet pooledBudgetA: Budget | undefined;\nlet pooledBudgetB: Budget | undefined;\nlet pooledBudgetToggle = 0;\n\nexport interface TextProgramOptions extends PatternLimits {\n readonly replace?: boolean;\n readonly maxProgramInstructions?: number;\n readonly maxSteps?: number;\n readonly maxBufferBytes?: number | undefined;\n readonly maxArrayEntries?: number;\n readonly maxFields?: number;\n readonly maxGetlineFiles?: number;\n readonly maxRecursionDepth?: number;\n readonly maxArguments?: number;\n readonly maxRetainedBytes?: number;\n}\n\nexport class ProgramError extends PublicDiagnostic {}\n\nexport class Budget {\n maxBufferBytes: number;\n stepsUsed = 0;\n inUse = false;\n private remainingSmi: number;\n private remainingNum: number;\n private unlimited: boolean;\n private signal: AbortSignal;\n private checkpoints = 0;\n private hasExtYield = false;\n private readonly yieldTimes = new Float64Array(1);\n static acquire(context: CommandContext, options: TextProgramOptions): Budget {\n if (!pooledBudgetA) {\n pooledBudgetA = new Budget(DUMMY_COMMAND_CONTEXT, options);\n }\n if (!pooledBudgetB) {\n pooledBudgetB = new Budget(DUMMY_COMMAND_CONTEXT, options);\n }\n const first = (pooledBudgetToggle++ & 1) === 0 ? pooledBudgetA : pooledBudgetB;\n const second = first === pooledBudgetA ? pooledBudgetB : pooledBudgetA;\n if (!first.inUse) {\n first.inUse = true;\n first.resetForRun(context, options);\n return first;\n }\n if (!second.inUse) {\n second.inUse = true;\n second.resetForRun(context, options);\n return second;\n }\n return new Budget(context, options);\n }\n static release(budget: Budget): void {\n if (budget === pooledBudgetA || budget === pooledBudgetB) {\n budget.inUse = false;\n budget.context = DUMMY_COMMAND_CONTEXT;\n budget.signal = DUMMY_ABORT_SIGNAL;\n }\n }\n constructor(public context: CommandContext, public options: TextProgramOptions) {\n const rem = options.maxSteps ?? Infinity;\n this.unlimited = rem === Infinity;\n this.remainingNum = this.unlimited ? 0 : rem;\n this.remainingSmi = !this.unlimited && rem <= 0x3fffffff ? (rem | 0) : 0x3fffffff;\n this.signal = context.signal;\n this.hasExtYield = hasYieldCheckpoint(context.signal);\n this.yieldTimes[0] = (performance.now !== defaultPerfNow || this.hasExtYield) ? monotonicNow() : -1;\n this.maxBufferBytes = options.maxBufferBytes ?? Infinity;\n if (context.signal.aborted) context.signal.throwIfAborted();\n if (!validatedTextProgramOptions.has(options)) {\n for (const [key, value] of Object.entries(options)) {\n if (!key.startsWith(\"max\")) continue;\n if (value !== undefined && (typeof value !== \"number\" || value !== Infinity && !Number.isSafeInteger(value) || value < 1)) throw new ProgramError(\"limits must be positive safe integers\");\n }\n validatedTextProgramOptions.add(options);\n }\n }\n resetForRun(context: CommandContext, options: TextProgramOptions): void {\n if (context.signal.aborted) context.signal.throwIfAborted();\n const rem = options.maxSteps ?? Infinity;\n this.context = context;\n this.options = options;\n this.stepsUsed = 0;\n this.unlimited = rem === Infinity;\n this.remainingNum = this.unlimited ? 0 : rem;\n this.remainingSmi = !this.unlimited && rem <= 0x3fffffff ? (rem | 0) : 0x3fffffff;\n this.signal = context.signal;\n this.checkpoints = 0;\n this.hasExtYield = hasYieldCheckpoint(context.signal);\n this.yieldTimes[0] = (performance.now !== defaultPerfNow || this.hasExtYield) ? monotonicNow() : -1;\n const nextMaxBuf = options.maxBufferBytes ?? Infinity;\n if (this.maxBufferBytes !== nextMaxBuf) this.maxBufferBytes = nextMaxBuf;\n }\n step(count = 1): void {\n if (this.signal.aborted) this.signal.throwIfAborted();\n const nextSteps = this.stepsUsed + count;\n this.stepsUsed = nextSteps;\n if (this.unlimited) return;\n if ((count | 0) === count && count >= 0 && count <= this.remainingSmi) {\n this.remainingSmi = (this.remainingSmi - (count | 0)) | 0;\n this.remainingNum -= count;\n return;\n }\n if (count > this.remainingNum) throw new ProgramError(\"execution step limit exceeded\");\n this.remainingNum -= count;\n this.remainingSmi = this.remainingNum <= 0x3fffffff ? (this.remainingNum | 0) : 0x3fffffff;\n }\n check(text: string): string {\n if (text.length > this.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n return text;\n }\n async checkpoint(): Promise<void> {\n const p = this.checkpointSync();\n if (p) await p;\n }\n checkpointSync(): Promise<void> | undefined {\n if (this.signal.aborted) this.signal.throwIfAborted();\n const count = ++this.checkpoints;\n // Neither elapsed work nor a stationary clock may postpone host cancellation.\n if ((count & 255) === 0) {\n return this.yieldCheckpointAsync();\n }\n if (performance.now !== defaultPerfNow || this.hasExtYield || (count & 63) === 0) {\n const now = monotonicNow();\n if (this.yieldTimes[0]! < 0) {\n this.yieldTimes[0] = now;\n } else if (now - this.yieldTimes[0]! >= 25) {\n return this.yieldCheckpointAsync();\n }\n }\n return undefined;\n }\n private async yieldCheckpointAsync(): Promise<void> {\n await yieldTurn(this.signal);\n this.yieldTimes[0] = monotonicNow();\n this.signal.throwIfAborted();\n }\n}\n", "import { Budget, ProgramError } from \"./budget.js\";\n\nexport class ReplacementBuffer {\n #segments: Uint16Array[] = [];\n #size = 0;\n #allocated = 0;\n #tailUsed = 0;\n #unboundedText = \"\";\n\n constructor(readonly budget: Budget) {}\n\n get remaining(): number { return this.budget.maxBufferBytes - this.#size; }\n\n admit(length: number): void {\n this.budget.step(0);\n if (!Number.isSafeInteger(length) || length < 0 || length > this.remaining) throw new ProgramError(\"text buffer limit exceeded\");\n }\n\n async append(source: string, start = 0, end = source.length): Promise<void> {\n this.admit(end - start);\n if (this.budget.maxBufferBytes === Infinity) {\n let offset = start;\n while (offset < end) {\n await this.budget.checkpoint();\n const length = Math.min(end - offset, 1024);\n this.budget.step(length);\n this.budget.step();\n this.#unboundedText += offset === 0 && length === source.length ? source : source.slice(offset, offset + length);\n this.#size += length;\n offset += length;\n }\n return;\n }\n let offset = start;\n while (offset < end) {\n await this.budget.checkpoint();\n let tail = this.#segments.at(-1);\n const available = tail ? tail.length - this.#tailUsed : 0;\n const capacity = Math.min(1024, this.budget.maxBufferBytes - this.#allocated);\n const length = Math.min(end - offset, available || capacity);\n this.budget.step(length);\n if (!available) {\n this.budget.step();\n tail = new Uint16Array(capacity);\n this.#segments.push(tail);\n this.#allocated += capacity;\n this.#tailUsed = 0;\n }\n for (let index = 0; index < length; index++) tail![this.#tailUsed + index] = source.charCodeAt(offset + index);\n this.#tailUsed += length;\n this.#size += length;\n offset += length;\n }\n }\n\n async finish(): Promise<string> {\n this.budget.step(0);\n if (!this.#size) return \"\";\n this.budget.step(this.#size);\n await this.budget.checkpoint();\n this.budget.step(0);\n if (this.budget.maxBufferBytes === Infinity) {\n const text = this.#unboundedText;\n this.clear();\n return text;\n }\n if (this.#segments.length === 1) {\n const text = String.fromCharCode(...this.#segments[0]!.subarray(0, this.#size));\n this.clear();\n return text;\n }\n this.budget.step(this.#size);\n if (this.#allocated > this.budget.maxBufferBytes || this.#size > this.budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const parts: string[] = [];\n let offset = 0;\n for (const segment of this.#segments) {\n await this.budget.checkpoint();\n this.budget.step(0);\n const length = Math.min(segment.length, this.#size - offset);\n parts.push(String.fromCharCode(...segment.subarray(0, length)));\n offset += length;\n }\n this.clear();\n await this.budget.checkpoint();\n this.budget.step(0);\n return parts.join(\"\");\n }\n\n clear(): void {\n this.#segments = [];\n this.#size = 0;\n this.#allocated = 0;\n this.#tailUsed = 0;\n this.#unboundedText = \"\";\n }\n}\n", "import { encoder } from \"./encoding.js\";\nimport { Budget, isObject, JqError, JqLimitError, type Json } from \"./limits.js\";\nimport { isNumber, numberValue } from \"./numbers.js\";\nimport { equal, indexValue, sliceValue } from \"./values.js\";\n\nexport async function indices(input: Json, sought: Json, budget: Budget): Promise<Json> {\n let source: ArrayLike<Json>;\n let pattern: ArrayLike<Json>;\n if (typeof input === \"string\" && typeof sought === \"string\") {\n { const _p = budget.tickSync(input.length + sought.length); if (_p) await _p; }\n // jq's string search returns UTF-8 byte offsets, including overlapping matches.\n source = encoder.encode(input);\n pattern = encoder.encode(sought);\n } else if (isObject(sought) && (input === null || Array.isArray(input) || typeof input === \"string\")) {\n if (input === null) return null;\n const start = Object.hasOwn(sought, \"start\") ? sought.start! : undefined;\n const end = Object.hasOwn(sought, \"end\") ? sought.end! : undefined;\n if ((start !== null && (!isNumber(start) || (!Number.isFinite(numberValue(start)) && !Number.isNaN(numberValue(start)))))\n || (end !== null && (!isNumber(end) || (!Number.isFinite(numberValue(end)) && !Number.isNaN(numberValue(end)))))) {\n throw new JqError(\"Array/string slice indices must be integers\");\n }\n return sliceValue(input, isNumber(start) && Number.isNaN(numberValue(start)) ? null : start, isNumber(end) && Number.isNaN(numberValue(end)) ? null : end, budget);\n } else if (Array.isArray(input)) {\n source = input;\n pattern = Array.isArray(sought) ? sought : [sought];\n } else return indexValue(input, sought);\n\n const result: number[] = [];\n if (!pattern.length || pattern.length > source.length) return result;\n { const _p = budget.tickSync(pattern.length); if (_p) await _p; }\n const prefixes = new Uint32Array(pattern.length);\n let matched = 0;\n for (let index = 1; index < pattern.length; index++) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n while (matched > 0 && !equal(pattern[index]!, pattern[matched]!, budget)) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n matched = prefixes[matched - 1]!;\n }\n if (equal(pattern[index]!, pattern[matched]!, budget)) matched++;\n prefixes[index] = matched;\n }\n matched = 0;\n let bytes = 2;\n for (let index = 0; index < source.length; index++) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n while (matched > 0 && !equal(source[index]!, pattern[matched]!, budget)) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n matched = prefixes[matched - 1]!;\n }\n if (equal(source[index]!, pattern[matched]!, budget)) matched++;\n if (matched === pattern.length) {\n const position = index + 1 - pattern.length;\n budget.collection(result.length + 1);\n bytes += String(position).length + (result.length ? 1 : 0);\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n result.push(position);\n matched = prefixes[matched - 1]!;\n }\n }\n return result;\n}\n", "import { JqError, type Json } from \"./limits.js\";\nimport { isNumber, numberValue } from \"./numbers.js\";\n\nexport function fromDateIso8601(input: Json): number {\n if (typeof input !== \"string\") throw new JqError(\"strptime/1 requires string inputs and arguments\");\n const mismatch = () => new JqError(`date ${JSON.stringify(input)} does not match format \"%Y-%m-%dT%H:%M:%SZ\"`);\n const parts = input.split(\"T\");\n if (parts.length !== 2 || !parts[1]!.endsWith(\"Z\")) throw mismatch();\n const date = parts[0]!.split(\"-\");\n const time = parts[1]!.slice(0, -1).split(\":\");\n const fields = [...date, ...time];\n if (date.length !== 3 || time.length !== 3 || fields.some((field, index) => field.length === 0\n || field.length > (index === 0 ? 4 : 2) || [...field].some(character => !\"0123456789\".includes(character)))) throw mismatch();\n const [year, month, day, hour, minute, second] = fields.map(Number) as [number, number, number, number, number, number];\n if (month < 1 || month > 12 || day > 31 || hour > 23 || minute > 59 || second > 60) throw mismatch();\n if (year < 1900) throw new JqError(\"invalid gmtime representation\");\n // Like jq's mktime, UTC normalizes day overflow and leap seconds.\n return Date.UTC(year, month - 1, day, hour, minute, second) / 1000;\n}\n\nexport function toDateIso8601(input: Json): string {\n if (!isNumber(input)) throw new JqError(\"strftime/1 requires parsed datetime inputs\");\n const date = new Date(Math.trunc(numberValue(input)) * 1000);\n if (!Number.isFinite(date.getTime())) throw new JqError(\"error converting number of seconds since epoch to datetime\");\n const year = String(date.getUTCFullYear()).padStart(4, \"0\");\n const fields = [date.getUTCMonth() + 1, date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()]\n .map(value => String(value).padStart(2, \"0\"));\n return `${year}-${fields[0]}-${fields[1]}T${fields[2]}:${fields[3]}:${fields[4]}Z`;\n}\n", "import { JqError, JqLimitError, object, put, type Budget, type Json } from \"./limits.js\";\nimport { Pattern } from \"safe-bash-regex-engine/text/regex\";\nimport { ProgramError } from \"safe-bash-regex-engine/text/budget\";\nimport { describe } from \"./values.js\";\n\n// Extended mode ignores unescaped whitespace/comments outside character classes.\nasync function extendedPattern(pattern: string, budget: Budget): Promise<string> {\n let result = \"\";\n let characterClass = false;\n for (let index = 0; index < pattern.length; index++) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const character = pattern[index]!;\n if (character === \"\\\\\") {\n const next = pattern[++index];\n result += next === undefined ? \"\\\\\" : next === \" \" || next === \"#\" ? next : `\\\\${next}`;\n } else if (!characterClass && character === \"#\") {\n while (index + 1 < pattern.length && pattern[index + 1] !== \"\\n\") { { const _p = budget.tickSync(); if (_p) await _p; } index++; }\n } else if (characterClass || !\" \\t\\r\\n\\f\\v\".includes(character)) {\n result += character;\n if (character === \"[\") characterClass = true;\n else if (character === \"]\") characterClass = false;\n }\n }\n return result;\n}\n\nexport async function* capture(input: Json, pattern: Json, modifiers: Json, budget: Budget): AsyncGenerator<Json> {\n if (typeof input !== \"string\") throw new JqError(`${describe(input, budget)} cannot be matched, as it is not a string`);\n if (typeof pattern !== \"string\") throw new JqError(`${describe(pattern, budget)} is not a string`);\n if (modifiers !== null && typeof modifiers !== \"string\") throw new JqError(`${describe(modifiers, budget)} is not a string`);\n const flags = modifiers ?? \"\";\n for (const flag of flags) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (!\"gimnpsx\".includes(flag)) throw new JqError(`${flags} is not a valid modifier string`);\n }\n { const _p = budget.tickSync(input.length + pattern.length); if (_p) await _p; }\n const source = flags.includes(\"x\") ? await extendedPattern(pattern, budget) : pattern;\n const work = { step: (count = 1) => budget.step(count), checkpoint: () => budget.tick(0), maxBufferBytes: budget.limits.maxValueBytes };\n try {\n const regex = new Pattern(source, true, flags.includes(\"i\"), \"jq\", flags.includes(\"p\") ? flags + \"m\" : flags);\n let search = 0;\n while (search <= input.length) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const match = await regex.find(input, work, search);\n if (!match) return;\n const result = object();\n for (const [name, index] of regex.groupNames) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n put(result, name, match.groups[index] ?? null);\n }\n budget.value(result);\n yield result;\n if (!flags.includes(\"g\")) return;\n search = match.end > match.start ? match.end : match.end + ((input.codePointAt(match.end) ?? 0) > 0xffff ? 2 : 1);\n }\n } catch (error) {\n if (!(error instanceof ProgramError)) throw error;\n if (error.message.includes(\"buffer limit exceeded\")) throw new JqLimitError(\"maxValueBytes\");\n const diagnostic = error.message === \"unterminated bracket expression\" ? \"premature end of char-class\"\n : error.message === \"unmatched '(' in regular expression\" ? \"end pattern with unmatched parenthesis\" : error.message;\n throw new JqError(`Regex failure: ${diagnostic}`);\n }\n}\n", "import { truth, type Json } from \"./limits.js\";\nimport type { Interpreter } from \"./interpreter.js\";\nimport type { Ast } from \"./parser.js\";\n\n/** Keep child streams suspended so traversal is lazy and depth first. */\nexport async function* recurse(scope: Interpreter, args: readonly Ast[], input: Json): AsyncGenerator<Json> {\n const update: Ast = args[0] ?? { kind: \"optional\", operand: { kind: \"iterate\", base: { kind: \"identity\" } } };\n async function* children(value: Json): AsyncGenerator<Json> {\n for await (const child of scope.run(update, value)) {\n if (args[1]) {\n for await (const condition of scope.run(args[1], child)) if (truth(condition)) yield child;\n } else yield child;\n }\n }\n const stack: AsyncGenerator<Json>[] = [];\n try {\n yield input;\n stack.push(children(input));\n while (stack.length) {\n { const _p = scope.budget.tickSync(); if (_p) await _p; }\n const next = await stack[stack.length - 1]!.next();\n if (next.done) stack.pop();\n else {\n yield next.value;\n scope.budget.collection(stack.length + 1);\n stack.push(children(next.value));\n }\n }\n } finally {\n for (const iterator of stack.reverse()) await iterator.return(undefined);\n }\n}\n", "import { Budget, copyObject, isObject, JqError, JqLimitError, put, remove, type Json } from \"./limits.js\";\nimport { isNumber, numberValue } from \"./numbers.js\";\nimport { indexValue, type } from \"./values.js\";\n\n// Group against the original value so deleting one array element cannot shift\n// any other requested path. An ancestor deletion subsumes its descendants.\nasync function deleteAt(input: Json, paths: Json[][], budget: Budget, depth: number): Promise<Json> {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (depth > budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n if (paths.some(path => path.length === depth)) return null;\n if (input === null || paths.length === 0) return input;\n if (!isObject(input) && !Array.isArray(input)) {\n const path = paths[0]!;\n if (path.length > depth + 1) indexValue(input, path[depth]!);\n throw new JqError(`Cannot delete fields from ${type(input)}`);\n }\n const groups = new Map<string | number, Json[][]>();\n for (const path of paths) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const component = path[depth]!;\n const leaf = path.length === depth + 1;\n if (leaf) {\n if ((isObject(input) && typeof component !== \"string\") || (Array.isArray(input) && !isNumber(component))) {\n throw new JqError(`Cannot delete ${type(component)} ${Array.isArray(input) ? \"element of array\" : \"field of object\"}`);\n }\n } else indexValue(input, component);\n let key: string | number;\n if (typeof component === \"string\") key = component;\n else {\n if (!isNumber(component)) throw new JqError(`Cannot index ${type(input)} with ${type(component)}`);\n key = Math.trunc(numberValue(component));\n if (key < 0 && Array.isArray(input)) key += input.length;\n }\n if (Array.isArray(input) ? typeof key === \"number\" && (key < 0 || key >= input.length) : !Object.hasOwn(input, key)) continue;\n const group = groups.get(key) ?? [];\n budget.collection(group.length + 1);\n group.push(path);\n groups.set(key, group);\n budget.collection(groups.size);\n }\n if (Array.isArray(input)) {\n budget.collection(input.length);\n const result: Json[] = [];\n for (let index = 0; index < input.length; index++) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const group = groups.get(index);\n if (group?.some(path => path.length === depth + 1)) continue;\n result.push(group ? await deleteAt(input[index]!, group, budget, depth + 1) : input[index]!);\n }\n return result;\n }\n const result = copyObject(input);\n for (const [key, group] of groups) {\n if (group.some(path => path.length === depth + 1)) remove(result, String(key));\n else put(result, String(key), await deleteAt(indexValue(input, key), group, budget, depth + 1));\n }\n return result;\n}\n\nexport async function delpaths(input: Json, candidate: Json, budget: Budget): Promise<Json> {\n if (!Array.isArray(candidate)) throw new JqError(\"Paths must be specified as an array\");\n const paths: Json[][] = [];\n for (const path of candidate) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (!Array.isArray(path)) throw new JqError(`Path must be specified as array, not ${type(path)}`);\n budget.collection(paths.length + 1);\n paths.push(path);\n }\n return deleteAt(input, paths, budget, 0);\n}\n", "import { utf8ByteLength } from \"./encoding.js\";\nimport { Pattern } from \"safe-bash-regex-engine/text/regex\";\nimport { Budget, JqError, type Json } from \"./limits.js\";\nimport { regexError } from \"./regex.js\";\nimport { describe } from \"./values.js\";\n\nexport async function* splitRegex(input: Json, source: Json, budget: Budget): AsyncGenerator<string> {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (typeof input !== \"string\") throw new JqError(`${describe(input, budget)} cannot be matched, as it is not a string`);\n if (typeof source !== \"string\") throw new JqError(`${describe(source, budget)} is not a string`);\n budget.value(input);\n budget.value(source);\n const work = { step: (count = 1) => budget.step(count), checkpoint: () => budget.tick(0), maxBufferBytes: budget.limits.maxValueBytes };\n try {\n const pattern = new Pattern(source, true, false, \"jq\");\n let search = 0;\n let copied = 0;\n while (search <= input.length) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const match = await pattern.find(input, work, search);\n if (!match) break;\n const part = input.slice(copied, match.start);\n budget.value(part);\n yield part;\n copied = match.end;\n search = match.end;\n if (match.start === match.end) {\n const character = String.fromCodePoint(input.codePointAt(search) ?? 0);\n search += character.length;\n const repeats = match.end < input.length ? utf8ByteLength(character) - 1 : 0;\n if (repeats) {\n // jq resumes empty matches at each interior UTF-8 byte. Those byte\n // positions slice at the following Unicode boundary in jq strings.\n const probe = await pattern.find(`${input.slice(0, search)}\\ufffd${input.slice(search)}`, work, search);\n if (probe?.start === search && probe.end === search) {\n for (let index = 0; index < repeats; index++) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const field = input.slice(copied, search);\n budget.value(field);\n yield field;\n copied = search;\n }\n }\n }\n }\n }\n const tail = input.slice(copied);\n budget.value(tail);\n yield tail;\n } catch (error) { throw regexError(error); }\n}\n", "import { utf8ByteLength } from \"./encoding.js\";\nimport { JqError, JqLimitError, wellFormed, type Budget, type Json } from \"./limits.js\";\nimport { decimalNumber } from \"./numbers.js\";\n\nexport type BindingPattern =\n | { kind: \"variable\"; name: string; pattern?: BindingPattern }\n | { kind: \"fields\"; fields: { key: Ast; pattern: BindingPattern }[] };\n\nexport type Ast =\n | { kind: \"parameter\"; name: string }\n | { kind: \"invoke\"; parameters: Ast[]; args: Ast[]; body: Ast }\n | { kind: \"format\"; name: string }\n | { kind: \"identity\" }\n | { kind: \"literal\"; value: Json }\n | { kind: \"variable\"; name: string }\n | { kind: \"bind\"; source: Ast; name: string; body: Ast }\n | { kind: \"label\"; target: symbol; body: Ast }\n | { kind: \"break\"; target: symbol }\n | { kind: \"destructure\"; source: Ast; patterns: BindingPattern[]; names: string[]; body: Ast }\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 | undefined }[] }\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 walk: [1],\n explode: [0], utf8bytelength: [0],\n while: [2], until: [2], fromdateiso8601: [0], todateiso8601: [0],\n scan: [1], paths: [0, 1], getpath: [1], flatten: [0, 1], del: [1], error: [0, 1], startswith: [1], endswith: [1], ltrimstr: [1], rtrimstr: [1], ascii_downcase: [0], ascii_upcase: [0],\n halt: [0], halt_error: [0, 1], setpath: [2], delpaths: [1], 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], inside: [1], bsearch: [1], sort: [0], sort_by: [1], unique: [0], unique_by: [1], group_by: [1], add: [0],\n not: [0], reverse: [0], transpose: [0], combinations: [0], first: [0, 1], last: [0, 1], limit: [2], range: [1, 2, 3], join: [1], split: [1], splits: [1], gsub: [2, 3],\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 capture: [1, 2], recurse: [0, 1, 2],\n indices: [1],\n});\nfunction tokenize(source: string, budget: Budget): Token[] {\n const tokens: Token[] = [];\n const modes: ({ kind: \"string\"; start: number; segment: number; interpolated: boolean } | { kind: \"expression\"; parentheses: number })[] = [];\n const stringToken = (start: number, end: number): Token => {\n let text = '\"';\n for (let index = start; index < end; index++) {\n const character = source[index]!;\n text += character.charCodeAt(0) < 32 ? `\\\\u${character.charCodeAt(0).toString(16).padStart(4, \"0\")}` : character;\n }\n text += '\"';\n try { if (!wellFormed(JSON.parse(text) as string)) throw new Error(); } catch { throw new JqError(`invalid string at offset ${start - 1}`, 3); }\n return { text, offset: start - 1, kind: \"string\" };\n };\n let offset = 0;\n while (offset < source.length) {\n budget.step();\n const character = source[offset]!;\n const mode = modes.at(-1);\n if (mode?.kind === \"string\") {\n if (character === '\"') {\n tokens.push(stringToken(mode.segment, offset));\n if (mode.interpolated) tokens.push({ text: \"string-end\", offset, kind: \"symbol\" });\n modes.pop(); offset++; continue;\n }\n if (character === \"\\\\\" && source[offset + 1] === \"(\") {\n if (!mode.interpolated) tokens.push({ text: \"string-start\", offset: mode.start, kind: \"symbol\" });\n mode.interpolated = true;\n tokens.push(stringToken(mode.segment, offset), { text: \"interpolation-start\", offset, kind: \"symbol\" });\n modes.push({ kind: \"expression\", parentheses: 0 }); offset += 2;\n if (modes.length > budget.limits.maxAstDepth) throw new JqLimitError(\"maxAstDepth\");\n continue;\n }\n offset += character === \"\\\\\" ? 2 : 1;\n continue;\n }\n if (mode?.kind === \"expression\") {\n if (character === \"(\") mode.parentheses++;\n else if (character === \")\") {\n if (mode.parentheses === 0) {\n tokens.push({ text: \"interpolation-end\", offset, kind: \"symbol\" });\n modes.pop(); offset++;\n const string = modes.at(-1)!;\n if (string.kind === \"string\") string.segment = offset;\n continue;\n }\n mode.parentheses--;\n }\n }\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 modes.push({ kind: \"string\", start, segment: ++offset, interpolated: false });\n if (modes.length > budget.limits.maxAstDepth) throw new JqLimitError(\"maxAstDepth\");\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 (character === \"@\") { tokens.push({ text: \"@\", offset, kind: \"symbol\" }); offset++; continue; }\n if (source.startsWith(\"?//\", offset)) {\n tokens.push({ text: \"?//\", offset, kind: \"symbol\" }); offset += 3; continue;\n }\n if (source.startsWith(\"..\", offset)) {\n tokens.push({ text: \"..\", offset, kind: \"symbol\" }); offset += 2; continue;\n }\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 if (modes.length) throw new JqError(`unterminated string or interpolation at offset ${offset}`, 3);\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\" || node.kind === \"parameter\" || node.kind === \"invoke\" || node.kind === \"descend\") continue;\n if (node.kind === \"index\" || node.kind === \"iterate\" || node.kind === \"slice\") pending.push(node.base);\n else if (node.kind === \"optional\") pending.push(node.operand);\n else if (node.kind === \"bind\") pending.push(node.body);\n else if (node.kind === \"call\" && [\"select\", \"values\", \"strings\", \"numbers\", \"booleans\", \"arrays\", \"objects\", \"nulls\", \"scalars\", \"iterables\", \"empty\"].includes(node.name)) continue;\n else if (node.kind === \"binary\" && (node.operator === \",\" || node.operator === \"|\")) pending.push(node.left, node.right);\n else return false;\n }\n return true;\n}\nexport function moduleProgram(source: string, budget: Budget): { source: string; imports: { name: string; alias?: string }[] } {\n if (utf8ByteLength(source) > budget.limits.maxSourceBytes) throw new JqLimitError(\"maxSourceBytes\");\n const tokens = tokenize(source, budget);\n const imports: { name: string; alias?: string }[] = [];\n let position = 0;\n while (tokens[position]!.text === \"include\" || tokens[position]!.text === \"import\") {\n budget.step();\n const directive = tokens[position++]!.text;\n const name = tokens[position++];\n if (name?.kind !== \"string\") throw new JqError(\"module directive requires a string path\", 3);\n const entry: { name: string; alias?: string } = { name: JSON.parse(name.text) as string };\n if (directive === \"import\") {\n if (tokens[position++]?.text !== \"as\") throw new JqError(\"import requires a namespace\", 3);\n const alias = tokens[position++];\n if (alias?.kind !== \"name\") throw new JqError(\"import requires a namespace\", 3);\n entry.alias = alias.text;\n }\n if (tokens[position++]?.text !== \";\") throw new JqError(\"module directive requires ';'\", 3);\n imports.push(entry);\n budget.collection(imports.length);\n }\n return { source: source.slice(tokens[position]!.offset), imports };\n}\n\nexport function parse(source: string, variables: ReadonlyMap<string, Json>, budget: Budget, definitions: Map<string, Ast> = new Map(), module = false): Ast {\n const limits = budget.limits;\n if (utf8ByteLength(source) > limits.maxSourceBytes) throw new JqLimitError(\"maxSourceBytes\");\n const tokens = tokenize(source, budget);\n let position = 0;\n let nesting = 0;\n let defining = false;\n const unresolved = new Map<Ast, Token>();\n const bindings = new Map<string, number>();\n const labels = new Map<string, symbol>();\n const parameters = new Map<string, Ast>();\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(utf8ByteLength(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 variable = (name: Token): Ast => {\n if (name.kind !== \"name\") fail(\"expected variable name\");\n if (!bindings.has(name.text) && !variables.has(name.text)) fail(`undefined variable $${name.text}`);\n return defining && !bindings.has(name.text) ? literal(variables.get(name.text)!) : { kind: \"variable\", name: name.text };\n };\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 const no: Ast = accept(\"else\") ? expression() : { kind: \"identity\" }; 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 pattern = (names: Set<string>): BindingPattern => {\n if (++nesting > limits.maxAstDepth) throw new JqLimitError(\"maxAstDepth\");\n try {\n if (accept(\"$\")) {\n const name = take(); if (name.kind !== \"name\") fail(\"expected variable name\");\n names.add(name.text);\n return { kind: \"variable\", name: name.text };\n }\n const array = accept(\"[\");\n if (!array) expect(\"{\");\n const fields: { key: Ast; pattern: BindingPattern }[] = [];\n do {\n let key: Ast;\n let value: BindingPattern;\n if (array) {\n key = literal(fields.length);\n value = pattern(names);\n } else if (peek().text === \"$\") {\n value = pattern(names);\n if (value.kind !== \"variable\") return fail(\"expected variable name\");\n key = literal(value.name);\n if (accept(\":\")) value = { ...value, pattern: pattern(names) };\n } else {\n if (accept(\"(\")) { key = expression(); expect(\")\"); }\n else {\n const token = take();\n if (token.kind !== \"name\" && token.kind !== \"string\") fail(\"expected object key\");\n key = literal(token.kind === \"string\" ? JSON.parse(token.text) as string : token.text);\n }\n expect(\":\"); value = pattern(names);\n }\n fields.push({ key, pattern: value });\n } while (accept(\",\"));\n expect(array ? \"]\" : \"}\");\n return { kind: \"fields\", fields };\n } 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 if (operator === \"as\" && minimum <= 3) {\n take();\n const names = new Set<string>();\n const patterns = [pattern(names)];\n while (accept(\"?//\")) patterns.push(pattern(names));\n expect(\"|\");\n const previous = new Map([...names].map(name => [name, bindings.get(name) ?? 0]));\n for (const [name, count] of previous) bindings.set(name, count + 1);\n try {\n const body = expression(0, stopComma);\n const single = patterns[0]!;\n left = patterns.length === 1 && single.kind === \"variable\"\n ? { kind: \"bind\", source: left, name: single.name, body }\n : { kind: \"destructure\", source: left, patterns, names: [...names], body };\n } finally { for (const [name, count] of previous) { if (count) bindings.set(name, count); else bindings.delete(name); } }\n continue;\n }\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 stringExpression = (token: Token, format = \"text\"): Ast => {\n if (token.kind === \"string\") return literal(JSON.parse(token.text) as string);\n let result = stringExpression(take(), format);\n while (accept(\"interpolation-start\")) {\n const value: Ast = { kind: \"format\", name: format };\n const interpolated: Ast = { kind: \"binary\", operator: \"|\", left: expression(), right: value };\n expect(\"interpolation-end\");\n result = { kind: \"binary\", operator: \"+\", left: result, right: interpolated };\n result = { kind: \"binary\", operator: \"+\", left: result, right: stringExpression(take()) };\n }\n expect(\"string-end\");\n return result;\n };\n const primary = (): Ast => {\n const token = take();\n let result: Ast;\n if (token.text === \"@\") {\n const name = take();\n if (name.kind !== \"name\") fail(\"expected format name\");\n result = peek().kind === \"string\" || peek().text === \"string-start\" ? stringExpression(take(), name.text) : { kind: \"format\", name: name.text };\n } else if (token.text === \"..\") result = { kind: \"descend\" };\n else if (token.text === \"label\") {\n expect(\"$\");\n const name = take(); if (name.kind !== \"name\") fail(\"expected label name\");\n expect(\"|\");\n const previous = labels.get(name.text);\n const target = Symbol(name.text);\n labels.set(name.text, target);\n try { result = { kind: \"label\", target, body: expression() }; }\n finally { if (previous) labels.set(name.text, previous); else labels.delete(name.text); }\n } else if (token.text === \"break\") {\n expect(\"$\");\n const name = take(); if (name.kind !== \"name\") fail(\"expected label name\");\n const target = labels.get(name.text);\n if (target === undefined) fail(`undefined label $${name.text}`);\n result = { kind: \"break\", target: target! };\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\" || peek().text === \"string-start\") {\n const key = take(); result = { kind: \"index\", base: result, index: key.kind === \"name\" ? literal(key.text) : stringExpression(key) };\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 | undefined }[] = [];\n while (peek().text !== \"}\") {\n const keyToken = take();\n let key: Ast;\n let shorthand: Ast | undefined;\n if (keyToken.text === \"(\") { key = expression(); expect(\")\"); }\n else if (keyToken.text === \"$\") {\n const name = take();\n shorthand = variable(name);\n key = peek().text === \":\" ? shorthand : literal(name.text);\n }\n else if (keyToken.kind === \"string\" || keyToken.text === \"string-start\") key = stringExpression(keyToken);\n else if (keyToken.kind === \"name\") key = literal(keyToken.text);\n else fail(\"expected object key\");\n const value = accept(\":\") ? expression(0, true) : shorthand ?? (keyToken.text === \"(\" ? fail(\"expected ':'\") : undefined);\n fields.push({ key: key!, value });\n if (!accept(\",\")) break;\n }\n expect(\"}\"); result = { kind: \"object\", fields };\n } else if (token.text === \"$\") {\n result = variable(take());\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\" || token.text === \"string-start\") result = stringExpression(token);\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 let name = token.text;\n if (accept(\"::\")) {\n const member = take();\n if (member.kind !== \"name\") fail(\"expected namespace member\");\n name += `::${member.text}`;\n }\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 const definition = definitions.get(`${name}/${args.length}`);\n const parameter = parameters.get(name);\n if (parameter && !args.length) result = parameter;\n else if (definition?.kind === \"invoke\") result = { ...definition, args };\n else {\n result = { kind: \"call\", name, args };\n if (!Object.hasOwn(functions, name) || !functions[name]!.includes(args.length)) unresolved.set(result, token);\n }\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\" && key.text !== \"string-start\") fail(\"expected property name\");\n result = { kind: \"index\", base: result!, index: key.kind === \"name\" ? literal(key.text) : stringExpression(key) };\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 bodies: Ast[] = [];\n while (definitions && accept(\"def\")) {\n budget.step();\n const name = take();\n if (name.kind !== \"name\") fail(\"expected function name\");\n const formal: Ast[] = [];\n const values: string[] = [];\n if (accept(\"(\")) {\n do {\n const value = accept(\"$\");\n const parameter = take();\n if (parameter.kind !== \"name\" || parameters.has(parameter.text) || parameters.has(`$${parameter.text}`)) fail(\"expected unique parameter name\");\n const node: Ast = { kind: \"parameter\", name: parameter.text };\n parameters.set(value ? `$${parameter.text}` : parameter.text, node);\n formal.push(node);\n values.push(value ? parameter.text : \"\");\n if (value) bindings.set(parameter.text, 1);\n budget.collection(formal.length);\n } while (accept(\";\"));\n expect(\")\");\n }\n expect(\":\");\n defining = true;\n let body: Ast;\n try { body = expression(); } finally { defining = false; }\n expect(\";\");\n for (let index = formal.length - 1; index >= 0; index--) {\n if (values[index]) body = { kind: \"bind\", name: values[index]!, source: formal[index]!, body };\n }\n parameters.clear();\n for (const value of values) if (value) bindings.delete(value);\n definitions.set(`${name.text}/${formal.length}`, { kind: \"invoke\", parameters: formal, args: [], body });\n budget.collection(definitions.size);\n bodies.push(body);\n }\n if (module && peek().kind !== \"end\") fail(\"module must contain only imports and definitions\");\n const ast = module ? { kind: \"identity\" as const } : expression();\n if (peek().kind !== \"end\") syntaxError(peek(), true);\n const pending: { node: Ast; depth: number }[] = [ast, ...bodies].map(node => ({ node, depth: 1 }));\n const errors: string[] = [];\n let errorBytes = 0;\n while (pending.length) {\n budget.step();\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 += utf8ByteLength(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 === \"invoke\") children.push(node.body, ...node.args);\n else if (node.kind === \"label\") children.push(node.body);\n else if (node.kind === \"binary\") children.push(node.left, node.right);\n else if (node.kind === \"bind\") children.push(node.source, node.body);\n else if (node.kind === \"destructure\") {\n children.push(node.source, node.body);\n const patterns = [...node.patterns];\n while (patterns.length) {\n budget.step();\n const entry = patterns.pop()!;\n if (entry.kind === \"fields\") for (const field of entry.fields) { children.push(field.key); patterns.push(field.pattern); }\n else if (entry.pattern) patterns.push(entry.pattern);\n }\n }\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); if (field.value) children.push(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"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { utf8ByteLength } from \"./encoding.js\";\nconst ONCE_ABORT_OPTIONS = Object.freeze({ once: true });\nconst defaultPerfNow = performance.now;\nimport { hasYieldCheckpoint, monotonicNow, runYieldCheckpoint, yieldTurn } from \"safe-bash-contracts/yield\";\nimport { Decimal, isNumber, numberText } from \"./numbers.js\";\n\nexport type Json = null | boolean | number | Decimal | string | Json[] | { [key: string]: Json };\nexport interface JqLimits {\n readonly maxInputBytes: number;\n readonly maxValueBytes: number;\n readonly maxOutputBytes: number;\n readonly maxSourceBytes: number;\n readonly maxDepth: number;\n readonly maxAstDepth: number;\n readonly maxSteps: number;\n readonly maxResults: number;\n readonly maxCollectionSize: number;\n}\nexport interface StructuredCommandsOptions {\n readonly replace?: boolean;\n readonly limits?: Partial<JqLimits>;\n}\nexport const defaultJqLimits: Readonly<JqLimits> = Object.freeze({\n maxInputBytes: Infinity, maxValueBytes: Infinity,\n maxOutputBytes: Infinity, maxSourceBytes: Infinity,\n maxDepth: Infinity, maxAstDepth: Infinity, maxSteps: Infinity,\n maxResults: Infinity, maxCollectionSize: Infinity,\n});\nexport class JqHalt extends Error {\n constructor(readonly exitCode: number, readonly stderr: string) { super(\"jq halted\"); }\n}\nexport class JqError extends Error {\n constructor(message: string, readonly exitCode = 5) { super(message); }\n}\nexport class JqLimitError extends JqError {\n constructor(name: keyof JqLimits) { super(`${name} limit exceeded`); }\n}\nexport interface InputLocation {\n name: string;\n line: number;\n complete: boolean;\n}\nexport function resolveJqLimits(options: Partial<JqLimits> = {}): JqLimits {\n const limits = { ...defaultJqLimits, ...options };\n for (const [name, value] of Object.entries(limits)) {\n if ((value !== Infinity && !Number.isSafeInteger(value)) || value < 1) throw new RangeError(`${name} must be a positive safe integer`);\n }\n return Object.freeze(limits);\n}\nexport class Budget {\n private steps = 0;\n private readonly yieldTimes = new Float64Array([monotonicNow()]);\n private lastYieldSteps = 0;\n private readonly unlimitedSteps: boolean;\n private readonly maxStepsSmi: number;\n private aborted = false;\n private pollSignal = false;\n readonly maxInputBytesSmi: number;\n readonly maxValueBytesSmi: number;\n readonly maxOutputBytesSmi: number;\n readonly maxDepthSmi: number;\n readonly maxAstDepthSmi: number;\n readonly maxResultsSmi: number;\n readonly maxCollectionSizeSmi: number;\n readonly unlimitedValueCheck: boolean;\n inputBytes = 0;\n outputBytes = 0;\n results = 0;\n inputLocation: InputLocation = { name: \"<unknown>\", line: 0, complete: true };\n constructor(readonly limits: JqLimits, readonly signal: AbortSignal) {\n this.unlimitedSteps = limits.maxSteps === Infinity;\n this.maxStepsSmi = !this.unlimitedSteps && limits.maxSteps <= 0x3fffffff ? (limits.maxSteps | 0) : 0x3fffffff;\n this.maxInputBytesSmi = limits.maxInputBytes <= 0x3fffffff ? (limits.maxInputBytes | 0) : 0x3fffffff;\n this.maxValueBytesSmi = limits.maxValueBytes <= 0x3fffffff ? (limits.maxValueBytes | 0) : 0x3fffffff;\n this.maxOutputBytesSmi = limits.maxOutputBytes <= 0x3fffffff ? (limits.maxOutputBytes | 0) : 0x3fffffff;\n this.maxDepthSmi = limits.maxDepth <= 0x3fffffff ? (limits.maxDepth | 0) : 0x3fffffff;\n this.maxAstDepthSmi = limits.maxAstDepth <= 0x3fffffff ? (limits.maxAstDepth | 0) : 0x3fffffff;\n this.maxResultsSmi = limits.maxResults <= 0x3fffffff ? (limits.maxResults | 0) : 0x3fffffff;\n this.maxCollectionSizeSmi = limits.maxCollectionSize <= 0x3fffffff ? (limits.maxCollectionSize | 0) : 0x3fffffff;\n this.unlimitedValueCheck = limits.maxValueBytes === Infinity && limits.maxDepth === Infinity && limits.maxCollectionSize === Infinity;\n this.bindSignal(signal);\n }\n private readonly onAbortBound = (): void => {\n this.aborted = true;\n };\n private bindSignal(signal: AbortSignal): void {\n this.aborted = Boolean(signal?.aborted);\n this.pollSignal = true;\n }\n resetForRun(signal: AbortSignal): void {\n (this as unknown as { signal: AbortSignal }).signal = signal;\n this.bindSignal(signal);\n this.steps = 0;\n this.lastYieldSteps = 0;\n this.yieldTimes[0] = monotonicNow();\n this.inputBytes = 0;\n this.outputBytes = 0;\n this.results = 0;\n this.inputLocation.name = \"<unknown>\";\n this.inputLocation.line = 0;\n this.inputLocation.complete = true;\n }\n resetForSyncFastRun(signal: AbortSignal): void {\n (this as unknown as { signal: AbortSignal }).signal = signal;\n this.bindSignal(signal);\n this.steps = 0;\n this.lastYieldSteps = 0;\n this.yieldTimes[0] = (performance.now !== defaultPerfNow || hasYieldCheckpoint(signal)) ? monotonicNow() : -1;\n this.inputBytes = 0;\n this.outputBytes = 0;\n this.results = 0;\n this.inputLocation.name = \"<unknown>\";\n this.inputLocation.line = 0;\n this.inputLocation.complete = true;\n }\n step(count = 1): void {\n if (this.aborted || (this.pollSignal && this.signal.aborted)) {\n this.aborted = true;\n this.signal.throwIfAborted();\n }\n const next = this.steps + count;\n this.steps = next;\n if (!this.unlimitedSteps && next > this.maxStepsSmi && next > this.limits.maxSteps) throw new JqLimitError(\"maxSteps\");\n }\n get currentSteps(): number { return this.steps; }\n restoreSteps(steps: number): void { this.steps = steps; }\n needsYield(): boolean {\n if (hasYieldCheckpoint(this.signal)) {\n const now = monotonicNow();\n if (this.yieldTimes[0]! < 0) this.yieldTimes[0] = now;\n return this.steps - this.lastYieldSteps >= 1024 || now - this.yieldTimes[0]! >= 25;\n }\n // Even fast finite workloads must eventually let host timers run.\n if (this.steps - this.lastYieldSteps >= 65536) {\n if (this.yieldTimes[0]! >= 0 && this.steps < 524288 && monotonicNow() - this.yieldTimes[0]! < 20) {\n this.lastYieldSteps = this.steps;\n return false;\n }\n return true;\n }\n return false;\n }\n ensureFreshWindow(): Promise<void> | undefined {\n const now = monotonicNow();\n if (this.yieldTimes[0]! < 0) this.yieldTimes[0] = now;\n if (now - this.yieldTimes[0]! < 15) {\n runYieldCheckpoint(this.signal);\n return undefined;\n }\n return this.yieldTickSync();\n }\n tickSync(count = 1): Promise<void> | undefined {\n this.step(count);\n // Hosts may register a checkpoint after this budget was constructed/reset.\n if (hasYieldCheckpoint(this.signal))\n return this.needsYield() ? this.yieldTickSync() : undefined;\n if (this.steps - this.lastYieldSteps >= 65536) {\n return this.yieldTickSync();\n }\n return undefined;\n }\n private yieldTickSync(): Promise<void> {\n return yieldTurn(this.signal).then(() => {\n this.signal.throwIfAborted();\n this.yieldTimes[0] = monotonicNow();\n this.lastYieldSteps = this.steps;\n });\n }\n tick(count = 1): Promise<void> | undefined {\n return this.tickSync(count);\n }\n collection(size: number): void {\n if (size > this.maxCollectionSizeSmi && size > this.limits.maxCollectionSize) throw new JqLimitError(\"maxCollectionSize\");\n }\n text(text: string): void {\n if (text.length > this.maxValueBytesSmi || (text.length * 3 > this.maxValueBytesSmi && utf8ByteLength(text) > this.limits.maxValueBytes)) throw new JqLimitError(\"maxValueBytes\");\n }\n checkValue(value: Json): void {\n if (this.unlimitedValueCheck) {\n this.step();\n return;\n }\n this.visitValue(value, 0, 0);\n }\n value(value: Json): number {\n if (this.unlimitedValueCheck && this.unlimitedSteps) {\n this.step();\n return 0;\n }\n return this.visitValue(value, 0, 0);\n }\n private visitValue(current: Json, depth: number, bytes: number): number {\n this.step();\n if (depth > this.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n if (current !== null && typeof current === \"object\" && !(current instanceof Decimal)) {\n const cached = cachedValueMetrics.get(current);\n if (cached !== undefined) {\n if (depth + cached.maxRelDepth > this.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n this.collection(cached.maxCol);\n const total = bytes + cached.bytes;\n if (total > this.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n return total;\n }\n if (depth + 1 > this.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n const startBytes = bytes;\n let maxRelDepth = 1;\n let maxCol = 0;\n if (Array.isArray(current)) {\n maxCol = current.length;\n this.collection(maxCol);\n bytes += 2 + Math.max(0, current.length - 1);\n for (let index = 0; index < current.length; index++) {\n if (bytes > this.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n const child = current[index]!;\n bytes = this.visitValue(child, depth + 1, bytes);\n if (child !== null && typeof child === \"object\" && !(child instanceof Decimal)) {\n const cm = cachedValueMetrics.get(child);\n if (cm) {\n if (cm.maxRelDepth + 1 > maxRelDepth) maxRelDepth = cm.maxRelDepth + 1;\n if (cm.maxCol > maxCol) maxCol = cm.maxCol;\n }\n }\n }\n } else {\n const keys = keyOrders.get(current);\n if (keys !== undefined) {\n maxCol = keys.length;\n this.collection(maxCol);\n bytes += 2 + Math.max(0, keys.length - 1);\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index]!;\n this.text(key);\n bytes += scalarJsonByteLength(key, this) + 1;\n if (bytes > this.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n const child = current[key]!;\n bytes = this.visitValue(child, depth + 1, bytes);\n if (child !== null && typeof child === \"object\" && !(child instanceof Decimal)) {\n const cm = cachedValueMetrics.get(child);\n if (cm) {\n if (cm.maxRelDepth + 1 > maxRelDepth) maxRelDepth = cm.maxRelDepth + 1;\n if (cm.maxCol > maxCol) maxCol = cm.maxCol;\n }\n }\n }\n } else {\n let count = 0;\n for (const key in current) {\n if (!Object.hasOwn(current, key)) continue;\n this.collection(++count);\n this.text(key);\n bytes += scalarJsonByteLength(key, this) + 1 + (count > 1 ? 1 : 0);\n if (bytes > this.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n const child = current[key]!;\n bytes = this.visitValue(child, depth + 1, bytes);\n if (child !== null && typeof child === \"object\" && !(child instanceof Decimal)) {\n const cm = cachedValueMetrics.get(child);\n if (cm) {\n if (cm.maxRelDepth + 1 > maxRelDepth) maxRelDepth = cm.maxRelDepth + 1;\n if (cm.maxCol > maxCol) maxCol = cm.maxCol;\n }\n }\n }\n if (count > maxCol) maxCol = count;\n bytes += 2;\n }\n }\n cachedValueMetrics.set(current, { bytes: bytes - startBytes, maxRelDepth, maxCol });\n } else {\n if (typeof current === \"string\") { this.step(current.length); this.text(current); }\n bytes += scalarJsonByteLength(current, this);\n }\n if (bytes > this.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n return bytes;\n }\n}\nconst keyOrders = new WeakMap<Record<string, Json>, string[]>();\nconst cachedValueMetrics = new WeakMap<object, { bytes: number; maxRelDepth: number; maxCol: number }>();\nexport function invalidateCachedValueMetrics(target: object): void {\n cachedValueMetrics.delete(target);\n}\nexport function hasCustomKeyOrder(value: Record<string, Json>): boolean {\n return keyOrders.has(value);\n}\nexport function object(): Record<string, Json> {\n return {} as Record<string, Json>;\n}\nexport function objectKeys(value: Record<string, Json>): string[] { return keyOrders.get(value)?.slice() ?? Object.keys(value); }\nexport function* objectKeyIterator(value: Record<string, Json>): IterableIterator<string> {\n const keys = keyOrders.get(value);\n if (keys) yield* keys;\n else for (const key in value) if (Object.hasOwn(value, key)) yield key;\n}\nexport function objectSize(value: Record<string, Json>): number { return keyOrders.get(value)?.length ?? Object.keys(value).length; }\nexport function put(value: Record<string, Json>, key: string, item: Json): void {\n const existing = Object.hasOwn(value, key);\n let keys = keyOrders.get(value);\n if (keys !== undefined) {\n if (!existing) keys.push(key);\n } else if (!existing && key.length > 0) {\n const first = key.charCodeAt(0);\n if (first >= 48 && first <= 57) {\n keys = Object.keys(value);\n keys.push(key);\n keyOrders.set(value, keys);\n }\n }\n if (key === \"__proto__\") {\n Object.defineProperty(value, \"__proto__\", { value: item, writable: true, enumerable: true, configurable: true });\n } else {\n value[key] = item;\n }\n}\nexport function remove(value: Record<string, Json>, key: string): void {\n if (!Object.hasOwn(value, key)) return;\n let keys = keyOrders.get(value);\n if (!keys) {\n keys = Object.keys(value);\n keyOrders.set(value, keys);\n }\n delete value[key];\n const index = keys.indexOf(key);\n if (index >= 0) keys.splice(index, 1);\n}\nexport function copyObject(...sources: (Record<string, Json> | null)[]): Record<string, Json> {\n const result = object();\n for (const source of sources) if (source) for (const key of objectKeys(source)) put(result, key, source[key]!);\n return result;\n}\nexport function wellFormed(text: string): boolean {\n for (let index = 0; index < text.length; index++) {\n const code = text.charCodeAt(index);\n if (code >= 0xd800 && code <= 0xdbff) {\n const next = text.charCodeAt(++index);\n if (!(next >= 0xdc00 && next <= 0xdfff)) return false;\n } else if (code >= 0xdc00 && code <= 0xdfff) return false;\n }\n return true;\n}\nexport function isObject(value: Json): value is Record<string, Json> { return value !== null && typeof value === \"object\" && !Array.isArray(value) && !(value instanceof Decimal); }\nexport function truth(value: Json): boolean { return value !== null && value !== false; }\nexport function scalarJson(value: null | boolean | number | Decimal | string, budget: Budget): string {\n if (value instanceof Decimal) budget.step(Math.ceil(value.text.length / 32));\n return isNumber(value) ? numberText(value) : JSON.stringify(value);\n}\nfunction scalarJsonByteLength(value: null | boolean | number | Decimal | string, budget: Budget): number {\n if (value === null || value === true) return 4;\n if (value === false) return 5;\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? (Object.is(value, -0) ? 2 : String(value).length) : utf8ByteLength(scalarJson(value, budget));\n }\n if (value instanceof Decimal) {\n budget.step(Math.ceil(value.text.length / 32));\n return utf8ByteLength(numberText(value));\n }\n let extra = 2;\n for (let index = 0; index < value.length; index++) {\n const code = value.charCodeAt(index);\n if (code >= 0x80) return utf8ByteLength(JSON.stringify(value));\n if (code === 34 || code === 92 || code === 8 || code === 9 || code === 10 || code === 12 || code === 13) extra++;\n else if (code < 32) extra += 5;\n }\n return value.length + extra;\n}\nexport async function interruptible<Result>(operation: () => PromiseLike<Result>, signal: AbortSignal): Promise<Result> {\n signal.throwIfAborted();\n return new Promise<Result>((resolve, reject) => {\n const aborted = (): void => { signal.removeEventListener(\"abort\", aborted); reject(signal.reason); };\n signal.addEventListener(\"abort\", aborted, { once: true });\n try {\n Promise.resolve(operation()).then(\n result => { signal.removeEventListener(\"abort\", aborted); resolve(result); },\n error => { signal.removeEventListener(\"abort\", aborted); reject(error); },\n );\n } catch (error) { signal.removeEventListener(\"abort\", aborted); reject(error); }\n });\n}\n", "const encoder = new TextEncoder();\nconst decoder = new TextDecoder(\"utf-8\", { ignoreBOM: true });\n\nexport function utf8ByteLength(text: string): number {\n let bytes = 0;\n for (let index = 0; index < text.length; index++) {\n const code = text.charCodeAt(index);\n if (code < 0x80) bytes++;\n else if (code < 0x800) bytes += 2;\n else if (code >= 0xd800 && code <= 0xdbff && index + 1 < text.length && text.charCodeAt(index + 1) >= 0xdc00 && text.charCodeAt(index + 1) <= 0xdfff) { bytes += 4; index++; }\n else bytes += 3;\n }\n return bytes;\n}\n\nexport { encoder, decoder };\n\n// TextDecoder's latin1 label means Windows-1252, so preserve byte values directly.\nexport function byteString(bytes: Uint8Array): string {\n let text = \"\";\n for (let offset = 0; offset < bytes.length; offset += 1024) text += String.fromCharCode(...bytes.subarray(offset, offset + 1024));\n return text;\n}\n\nexport function latin1Bytes(text: string): Uint8Array {\n const bytes = new Uint8Array(text.length);\n for (let index = 0; index < text.length; index++) bytes[index] = text.charCodeAt(index);\n return bytes;\n}\n", "import type { Budget } from \"./limits.js\";\n\nexport class Decimal {\n readonly isFinite: boolean;\n constructor(readonly digits: string, readonly exponent: number, readonly negative: boolean, readonly text: string, readonly double: number) {\n this.isFinite = Number.isFinite(double);\n Object.freeze(this);\n }\n}\nexport const SMALL_DECIMALS: readonly Decimal[] = Array.from({ length: 1025 }, (_, i) => {\n const s = String(i);\n return new Decimal(s, 0, false, s, i);\n});\nexport type Numeric = number | Decimal;\nexport function isNumber(value: unknown): value is Numeric { return typeof value === \"number\" || value instanceof Decimal; }\nexport function numberValue(value: Numeric): number { return typeof value === \"number\" ? value : value.double; }\nexport function numericToken(token: string, budget: Budget): Numeric | undefined {\n const len = token.length;\n if (len >= 1 && len <= 15) {\n const first = token.charCodeAt(0);\n if (first === 48 && len === 1) {\n budget.step(2);\n budget.text(token);\n return SMALL_DECIMALS[0]!;\n }\n if (first >= 49 && first <= 57) {\n let val = first - 48;\n let allDigits = true;\n for (let i = 1; i < len; i++) {\n const c = token.charCodeAt(i);\n if (c < 48 || c > 57) { allDigits = false; break; }\n val = val * 10 + (c - 48);\n }\n if (allDigits) {\n budget.step(2);\n budget.text(token);\n if (val <= 1024) return SMALL_DECIMALS[val]!;\n return new Decimal(token, 0, false, token, val);\n }\n }\n }\n budget.step(Math.ceil(token.length / 32));\n const end = token.indexOf(\"\\0\");\n const text = end < 0 ? token : token.slice(0, end);\n if (/^[+-]?s?nan[0-9]*$/iu.test(text)) return new Decimal(\"0\", NaN, false, \"null\", NaN);\n if (/^[+-]?inf(?:inity)?$/iu.test(text)) {\n const negative = text[0] === \"-\";\n const value = negative ? -Infinity : Infinity;\n return new Decimal(\"1\", Infinity, negative, numberText(value), value);\n }\n if (!/^[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/u.test(text)) return undefined;\n return decimalNumber(text[0] === \"+\" ? text.slice(1) : text, budget);\n}\n\nfunction increment(digits: string): string {\n let position = digits.length - 1;\n while (position >= 0 && digits[position] === \"9\") position--;\n return position < 0 ? `1${\"0\".repeat(digits.length)}` : `${digits.slice(0, position)}${Number(digits[position]) + 1}${\"0\".repeat(digits.length - position - 1)}`;\n}\nfunction decimalDouble(digits: string, exponent: number, negative: boolean): number {\n let rounded = digits;\n if (digits.length > 17) {\n rounded = digits.slice(0, 17);\n const next = digits[17]!;\n if (next > \"5\" || (next === \"5\" && (/[1-9]/u.test(digits.slice(18)) || Number(rounded[16]) % 2 !== 0))) rounded = increment(rounded);\n exponent += digits.length - 17;\n }\n return Number(`${negative ? \"-\" : \"\"}${rounded}e${exponent}`);\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) return `${sign}${digits[0]}${digits.length > 1 ? `.${digits.slice(1)}` : \"\"}E${adjusted >= 0 ? \"+\" : \"\"}${adjusted}`;\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}\nexport function decimalNumber(token: string, budget: Budget): Numeric {\n budget.text(token);\n budget.step(Math.ceil(token.length / 32));\n const negative = token[0] === \"-\";\n const unsigned = negative ? token.slice(1) : token;\n const marker = unsigned.search(/[eE]/u);\n const coefficient = marker < 0 ? unsigned : unsigned.slice(0, marker);\n const point = coefficient.indexOf(\".\");\n let exponent = (marker < 0 ? 0 : Number(unsigned.slice(marker + 1))) - (point < 0 ? 0 : coefficient.length - point - 1);\n let digits = coefficient.replace(\".\", \"\").replace(/^0+/u, \"\") || \"0\";\n const minimumExponent = -1147483646;\n const maximumExponent = 999999999;\n if (digits === \"0\") exponent = Math.max(minimumExponent, Math.min(maximumExponent, exponent));\n else if (exponent + digits.length - 1 > maximumExponent) {\n const infinity = negative ? -Infinity : Infinity;\n return new Decimal(\"1\", Infinity, negative, numberText(infinity), infinity);\n }\n else if (exponent < minimumExponent) {\n const retained = digits.length - (minimumExponent - exponent);\n const roundUp = retained >= 0 && digits[retained]! >= \"5\";\n digits = retained > 0 ? digits.slice(0, retained) : \"0\";\n if (roundUp) digits = increment(digits);\n exponent = minimumExponent;\n }\n const text = decimalText(digits, exponent, negative);\n budget.text(text);\n return new Decimal(digits, exponent, negative, text, decimalDouble(digits, exponent, negative));\n}\nexport function compareNumbers(left: Numeric, right: Numeric, budget: Budget): number {\n if (\n left instanceof Decimal &&\n right instanceof Decimal &&\n left.isFinite &&\n right.isFinite &&\n left.exponent === 0 &&\n right.exponent === 0 &&\n left.digits.length <= 15 &&\n right.digits.length <= 15\n ) {\n budget.step(2);\n return left.double < right.double ? -1 : left.double === right.double ? 0 : 1;\n }\n if (Number.isNaN(numberValue(left))) return -1;\n if (Number.isNaN(numberValue(right))) return 1;\n if (!(left instanceof Decimal) || !(right instanceof Decimal)) {\n const first = numberValue(left);\n const second = numberValue(right);\n return first < second ? -1 : first === second ? 0 : 1;\n }\n if (left.digits === \"0\" && right.digits === \"0\") return 0;\n const sign = left.negative ? -1 : 1;\n if (left.negative !== right.negative) return sign;\n if (left.digits === \"0\") return -sign;\n if (right.digits === \"0\") return sign;\n if (left.exponent === Infinity || right.exponent === Infinity) return left.exponent === right.exponent ? 0 : left.exponent === Infinity ? sign : -sign;\n const magnitude = left.exponent + left.digits.length - right.exponent - right.digits.length;\n if (magnitude) return Math.sign(magnitude) * sign;\n const length = Math.max(left.digits.length, right.digits.length);\n budget.step(Math.ceil(length / 32));\n for (let index = 0; index < length; index++) {\n if (index % 1024 === 0) budget.step();\n const first = left.digits[index] ?? \"0\";\n const second = right.digits[index] ?? \"0\";\n if (first !== second) return (first < second ? -1 : 1) * sign;\n }\n return 0;\n}\nexport function numberText(value: Numeric): string {\n if (value instanceof Decimal) return value.text;\n if (Number.isNaN(value)) return \"null\";\n const bounded = Math.max(-Number.MAX_VALUE, Math.min(Number.MAX_VALUE, value));\n const sign = bounded < 0 || Object.is(bounded, -0) ? \"-\" : \"\";\n const [mantissa, power] = Math.abs(bounded).toExponential().split(\"e\");\n const digits = mantissa!.replace(\".\", \"\");\n const exponent = Number(power);\n const point = exponent + 1;\n if (point <= -4 || point > digits.length + 15) return `${sign}${mantissa}e${exponent < 0 ? \"-\" : \"+\"}${String(Math.abs(exponent)).padStart(2, \"0\")}`;\n if (point <= 0) return `${sign}0.${\"0\".repeat(-point)}${digits}`;\n return `${sign}${point >= digits.length ? digits.padEnd(point, \"0\") : `${digits.slice(0, point)}.${digits.slice(point)}`}`;\n}\n", "import { utf8ByteLength, encoder, byteString, latin1Bytes } from \"./encoding.js\";\nimport { readBytes, type ByteSource } from \"safe-bash-contracts\";\nimport { yieldTurn } from \"safe-bash-contracts/yield\";\nimport { Budget, hasCustomKeyOrder, invalidateCachedValueMetrics, JqError, JqLimitError, object, objectKeyIterator, objectSize, put, scalarJson, type Json } from \"./limits.js\";\nimport { Decimal, numericToken, isNumber, SMALL_DECIMALS } 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 budget.step(Math.ceil(bytes.length / 1024));\n let ascii = true;\n for (let index = 0; index < bytes.length; index++) {\n if ((index & 1023) === 0) budget.signal.throwIfAborted();\n if (bytes.charCodeAt(index) >= 0x80) {\n ascii = false;\n break;\n }\n }\n if (ascii) return bytes;\n const points: string[] = [];\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}\nconst SHORT_JSON_STRINGS = new Array<string>(512);\nfunction matchAsciiBytes(bytes: Uint8Array, start: number, expected: string): boolean {\n const len = expected.length;\n for (let i = 0; i < len; i++) {\n if (bytes[start + i] !== expected.charCodeAt(i)) return false;\n }\n return true;\n}\nfunction shortSliceString(bytes: Uint8Array, start: number, end: number): string {\n const len = end - start;\n if (len === 0) return \"\";\n if (len <= 16) {\n const first = bytes[start]!;\n const last = bytes[end - 1]!;\n const mid = bytes[(start + end) >> 1]!;\n const slot = ((first * 31 + mid * 131 + last * 17 + len * 13) & 511);\n const cached = SHORT_JSON_STRINGS[slot];\n if (cached !== undefined && cached.length === len && matchAsciiBytes(bytes, start, cached)) {\n return cached;\n }\n const s = byteString(bytes.subarray(start, start + len));\n SHORT_JSON_STRINGS[slot] = s;\n return s;\n }\n return byteString(bytes.subarray(start, start + len));\n}\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 readonly events: Json[] = [];\n private _counts: WeakMap<object, number> | undefined;\n private _closed: WeakSet<object> | undefined;\n private _lastKey: WeakMap<object, string> | undefined;\n private get counts(): WeakMap<object, number> { return this._counts ??= new WeakMap(); }\n private get closed(): WeakSet<object> { return this._closed ??= new WeakSet(); }\n private get lastKey(): WeakMap<object, string> { return this._lastKey ??= new WeakMap(); }\n private reusableObj: Record<string, Json> = object();\n private readonly reusableKeys: string[] = [];\n private readonly reusableArr: Json[] = [];\n private reusableInUse = false;\n constructor(private readonly budget: Budget, private readonly stream = false, line = 1, column = 0) {\n this.line = line; this.column = column;\n }\n releaseReusable(): void {\n invalidateCachedValueMetrics(this.reusableObj);\n this.reusableInUse = false;\n }\n isQuotedUnescaped(): boolean {\n return this.quoted && !this.escaped && this.bom >= 3;\n }\n isUnquotedReady(): boolean {\n return !this.quoted && this.bom >= 3;\n }\n isTopLevelIdle(): boolean {\n return !this.quoted && !this.escaped && this.stack.length === 0 && this.token === \"\" && this.next === undefined && !this.stream;\n }\n tryParseFlatLine(bytes: Uint8Array, start: number, end: number): Json | undefined {\n const byteLen = end - start;\n if (byteLen < 2 || (byteLen > this.budget.maxValueBytesSmi && byteLen > this.budget.limits.maxValueBytes)) return undefined;\n if (bytes[start] !== 123 || bytes[end - 1] !== 125) return undefined;\n if (this.budget.maxDepthSmi < 1) return undefined;\n const canReuse = !this.reusableInUse;\n let obj = canReuse ? this.reusableObj : object();\n const rKeys = this.reusableKeys;\n let shapeMatch = canReuse && rKeys.length > 0;\n let usedArr = false;\n let pos = start + 1;\n let count = 0;\n if (pos < end - 1) {\n while (true) {\n if (bytes[pos] !== 34) return undefined;\n pos++;\n const keyStart = pos;\n let key: string;\n if (shapeMatch && count < rKeys.length) {\n const expectedKey = rKeys[count]!;\n const expectedEnd = keyStart + expectedKey.length;\n if (expectedEnd < end - 1 && bytes[expectedEnd] === 34 && matchAsciiBytes(bytes, keyStart, expectedKey)) {\n key = expectedKey;\n pos = expectedEnd;\n } else {\n while (pos < end - 1) {\n const c = bytes[pos]!;\n if (c === 34) break;\n if (c < 32 || c >= 127 || c === 92) return undefined;\n pos++;\n }\n if (pos >= end - 1) return undefined;\n key = shortSliceString(bytes, keyStart, pos);\n if (expectedKey !== key) {\n shapeMatch = false;\n const fresh = object();\n for (let k = 0; k < count; k++) {\n const prevKey = rKeys[k]!;\n fresh[prevKey] = obj[prevKey]!;\n }\n obj = fresh;\n if (canReuse) {\n this.reusableObj = obj;\n rKeys.length = count;\n }\n }\n }\n } else {\n while (pos < end - 1) {\n const c = bytes[pos]!;\n if (c === 34) break;\n if (c < 32 || c >= 127 || c === 92) return undefined;\n pos++;\n }\n if (pos >= end - 1) return undefined;\n key = shortSliceString(bytes, keyStart, pos);\n if (shapeMatch) {\n shapeMatch = false;\n const fresh = object();\n for (let k = 0; k < count; k++) {\n const prevKey = rKeys[k]!;\n fresh[prevKey] = obj[prevKey]!;\n }\n obj = fresh;\n if (canReuse) {\n this.reusableObj = obj;\n rKeys.length = count;\n }\n }\n }\n if (!shapeMatch) {\n if (Object.hasOwn(obj, key)) return undefined;\n if (canReuse) rKeys.push(key);\n }\n pos++;\n if (bytes[pos] !== 58) return undefined;\n pos++;\n if (pos >= end - 1) return undefined;\n const vFirst = bytes[pos]!;\n let val: Json;\n if (vFirst === 34) {\n pos++;\n const vStart = pos;\n while (pos < end - 1) {\n const c = bytes[pos]!;\n if (c === 34) break;\n if (c < 32 || c >= 127 || c === 92) return undefined;\n pos++;\n }\n if (pos >= end - 1) return undefined;\n val = shortSliceString(bytes, vStart, pos);\n pos++;\n } else if (vFirst === 116) {\n if (bytes[pos + 1] !== 114 || bytes[pos + 2] !== 117 || bytes[pos + 3] !== 101) return undefined;\n val = true;\n pos += 4;\n } else if (vFirst === 102) {\n if (bytes[pos + 1] !== 97 || bytes[pos + 2] !== 108 || bytes[pos + 3] !== 115 || bytes[pos + 4] !== 101) return undefined;\n val = false;\n pos += 5;\n } else if (vFirst === 110) {\n if (bytes[pos + 1] !== 117 || bytes[pos + 2] !== 108 || bytes[pos + 3] !== 108) return undefined;\n val = null;\n pos += 4;\n } else if (vFirst >= 48 && vFirst <= 57) {\n const nStart = pos;\n let num = vFirst - 48;\n pos++;\n if (vFirst === 48) {\n const nextC = bytes[pos]!;\n if (nextC !== 44 && nextC !== 125) return undefined;\n val = SMALL_DECIMALS[0]!;\n } else {\n while (pos < end - 1) {\n const c = bytes[pos]!;\n if (c < 48 || c > 57) break;\n num = num * 10 + (c - 48);\n pos++;\n }\n if (pos - nStart > 15) return undefined;\n const nextC = bytes[pos]!;\n if (nextC !== 44 && nextC !== 125) return undefined;\n if (num <= 1024) val = SMALL_DECIMALS[num]!;\n else {\n const s = String(num);\n val = new Decimal(s, 0, false, s, num);\n }\n }\n } else if (vFirst === 91) {\n pos++;\n let arr: Json[];\n if (canReuse && !usedArr) {\n usedArr = true;\n arr = this.reusableArr;\n } else {\n arr = [];\n }\n let aIdx = 0;\n if (bytes[pos] === 93) {\n pos++;\n } else {\n while (pos < end - 1) {\n const eFirst = bytes[pos]!;\n let elem: Json;\n if (eFirst === 34) {\n pos++;\n const sStart = pos;\n while (pos < end - 1) {\n const c = bytes[pos]!;\n if (c === 34) break;\n if (c < 32 || c >= 127 || c === 92) return undefined;\n pos++;\n }\n if (pos >= end - 1) return undefined;\n elem = shortSliceString(bytes, sStart, pos);\n pos++;\n } else if (eFirst >= 48 && eFirst <= 57) {\n const nStart = pos;\n let num = eFirst - 48;\n pos++;\n if (eFirst !== 48) {\n while (pos < end - 1) {\n const c = bytes[pos]!;\n if (c < 48 || c > 57) break;\n num = num * 10 + (c - 48);\n pos++;\n }\n }\n if (pos - nStart > 15) return undefined;\n const nextC = bytes[pos]!;\n if (nextC !== 44 && nextC !== 93) return undefined;\n if (num <= 1024) elem = SMALL_DECIMALS[num]!;\n else {\n const s = String(num);\n elem = new Decimal(s, 0, false, s, num);\n }\n } else {\n return undefined;\n }\n arr[aIdx++] = elem;\n if (aIdx > this.budget.maxCollectionSizeSmi && aIdx > this.budget.limits.maxCollectionSize) return undefined;\n const aSep = bytes[pos]!;\n if (aSep === 44) {\n pos++;\n continue;\n }\n if (aSep === 93) {\n pos++;\n break;\n }\n return undefined;\n }\n }\n if (arr.length !== aIdx) arr.length = aIdx;\n val = arr;\n } else {\n return undefined;\n }\n count++;\n if (count > this.budget.maxCollectionSizeSmi && count > this.budget.limits.maxCollectionSize) return undefined;\n const kFirst = key.charCodeAt(0);\n if (kFirst >= 48 && kFirst <= 57 || key === \"__proto__\") {\n if (shapeMatch) {\n shapeMatch = false;\n const fresh = object();\n for (let k = 0; k < count - 1; k++) {\n const prevKey = rKeys[k]!;\n fresh[prevKey] = obj[prevKey]!;\n }\n obj = fresh;\n if (canReuse) {\n this.reusableObj = obj;\n rKeys.length = 0;\n }\n }\n put(obj, key, val);\n }\n else obj[key] = val;\n const sep = bytes[pos]!;\n if (sep === 44) {\n pos++;\n continue;\n }\n if (sep === 125 && pos === end - 1) break;\n return undefined;\n }\n }\n if (shapeMatch && count !== rKeys.length) {\n const fresh = object();\n for (let k = 0; k < count; k++) {\n const prevKey = rKeys[k]!;\n fresh[prevKey] = obj[prevKey]!;\n }\n obj = fresh;\n if (canReuse) {\n this.reusableObj = obj;\n rKeys.length = count;\n }\n }\n if (canReuse) this.reusableInUse = true;\n this.bom = 3;\n this.offset += byteLen + 1;\n this.line++;\n this.column = 0;\n this.bytes = 0;\n this.budget.step(count * 3 + 2);\n return obj;\n }\n appendQuotedSpan(span: string): void {\n const len = span.length;\n this.offset += len;\n this.column += len;\n this.bytes += len;\n if (this.bytes > this.budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n this.token += span;\n }\n appendTokenSpan(span: string): void {\n const len = span.length;\n this.offset += len;\n this.column += len;\n this.bytes += len;\n if (this.bytes > this.budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n this.token += span;\n }\n path(): Json[] {\n const path: Json[] = [];\n for (const frame of this.stack) {\n if (Array.isArray(frame)) path.push(this.counts.get(frame) ?? frame.length);\n else if (typeof frame === \"string\") path.push(frame);\n }\n return path;\n }\n private event(value: Json): void {\n this.budget.value(value);\n this.events.push(value);\n }\n private leaf(value: Json): void {\n if (value !== null && typeof value === \"object\" && this.closed.has(value)) return;\n this.event([this.path(), value]);\n }\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 fastAscii = true;\n for (let index = 0; index < this.token.length; index++) {\n const code = this.token.charCodeAt(index);\n if (code === 92 || code < 0x20 || code >= 0x80) {\n fastAscii = false;\n break;\n }\n }\n if (fastAscii) {\n const steps = Math.ceil(this.token.length / 1024);\n if (steps > 0) this.budget.step(steps * 2);\n else this.budget.signal.throwIfAborted();\n this.budget.text(this.token);\n return this.token;\n }\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 if (this.stream) this.leaf(value);\n this.bytes = 0;\n return value;\n }\n private append(): void {\n const parent = this.stack.at(-1);\n if (this.stream) {\n this.leaf(this.next!);\n const container = typeof parent === \"string\" ? this.stack.at(-2) as object : parent as object;\n const count = (this.counts.get(container) ?? 0) + 1;\n this.budget.collection(count);\n this.counts.set(container, count);\n if (typeof parent === \"string\") this.stack.pop();\n else if (!Array.isArray(parent)) this.fail(\"Objects must consist of key:value pairs\");\n this.next = undefined;\n return;\n }\n if (Array.isArray(parent)) {\n if (this.budget.limits.maxCollectionSize !== Infinity) 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 (this.budget.limits.maxCollectionSize !== Infinity && !Object.hasOwn(container, parent)) {\n this.budget.collection(objectSize(container) + 1);\n }\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 const closingPath = this.stream && (character === \"]\" || character === \"}\") ? this.path() : undefined;\n const closingContainer = typeof parent === \"string\" ? this.stack.at(-2) : parent;\n const closingCount = closingContainer && typeof closingContainer === \"object\" ? this.counts.get(closingContainer) ?? 0 : 0;\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 if (this.stream) this.lastKey.set(parent as object, this.next);\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 || closingCount) 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 let hasKey = closingCount > 0;\n if (!hasKey) {\n for (const k in parent!) {\n if (Object.hasOwn(parent!, k)) { hasKey = true; break; }\n }\n }\n if (hasKey) this.fail(\"Expected another key-value pair\");\n }\n this.next = this.stack.pop() as Json;\n this.depth--;\n }\n if (closingPath && this.next !== null && typeof this.next === \"object\") {\n if (closingCount || (closingContainer && typeof closingContainer === \"object\" && (this.counts.get(closingContainer) ?? 0))) {\n // A close event identifies the last child, including nested containers.\n if (Array.isArray(closingContainer)) closingPath[closingPath.length - 1] = (this.counts.get(closingContainer) ?? 1) - 1;\n else if (typeof parent !== \"string\") closingPath.push(this.lastKey.get(closingContainer as object)!);\n this.event([closingPath]);\n } else {\n if (Array.isArray(closingContainer)) closingPath.pop();\n this.event([closingPath, this.next]);\n }\n this.closed.add(this.next);\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 = character === \"[\" || character === \"]\" || character === \"{\" || character === \"}\" || character === \":\" || 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(boundary?: { line: number; column: number; eof: boolean }): Json | undefined {\n if (boundary && !this.quoted && !this.stack.length && this.token && numericToken(this.token, this.budget) !== undefined) {\n throw new JqParseError(`Potentially truncated top-level numeric value${boundary.eof ? \" at EOF\" : \"\"}`, this.offset, boundary.line, boundary.column);\n }\n if (boundary && !boundary.eof && this.stack.length && !this.quoted && !this.token) return undefined;\n if (boundary && !boundary.eof && (this.quoted || this.token && this.stack.length)) {\n throw new JqParseError(\"Truncated value\", this.offset, boundary.line, boundary.column);\n }\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 : byteString(encoder.encode(input));\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 const p1 = budget.tickSync();\n if (p1) await p1;\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 interface JsonInputOptions {\n readonly stream?: boolean;\n readonly streamErrors?: boolean;\n readonly sequence?: boolean;\n readonly warning?: (message: string) => Promise<void>;\n readonly onValue?: (value: Json) => Promise<void> | void;\n readonly retainValues?: boolean;\n readonly onChunkEnd?: () => Promise<void> | void;\n readonly hasPendingDiagnostics?: () => boolean;\n}\nlet sharedFlatParser: JsonParser | undefined;\nlet sharedFlatParserInUse = false;\n\nexport interface FlatSchemaPlan {\n readonly numFields: number;\n readonly fieldHeaders: readonly Uint8Array[];\n readonly condFieldIdx: number;\n readonly projCount: number;\n readonly projSrcIdx: Int32Array;\n readonly projHeaders: readonly Uint8Array[];\n}\n\nconst FIELD_VAL_START = new Int32Array(16);\nconst FIELD_VAL_END = new Int32Array(16);\nconst flatSchemaPlanCache = new Map<string, FlatSchemaPlan>();\n\nfunction getOrCreateFlatSchemaPlan(\n rawChunk: Uint8Array,\n firstLineEnd: number,\n condKey: string | undefined,\n outKeys: readonly string[],\n srcKeys: readonly string[],\n): FlatSchemaPlan | undefined {\n if (rawChunk[0] !== 123 || rawChunk[firstLineEnd - 1] !== 125) return undefined;\n const rKeys: string[] = [];\n let pos = 1;\n while (pos < firstLineEnd - 1) {\n if (rawChunk[pos] !== 34) return undefined;\n pos++;\n const kStart = pos;\n while (pos < firstLineEnd - 1) {\n const c = rawChunk[pos]!;\n if (c === 34) break;\n if (c < 32 || c >= 127 || c === 92) return undefined;\n pos++;\n }\n if (pos >= firstLineEnd - 1) return undefined;\n const key = byteString(rawChunk.subarray(kStart, pos));\n if (rKeys.includes(key)) return undefined;\n rKeys.push(key);\n if (rKeys.length > 16) return undefined;\n pos++;\n if (rawChunk[pos] !== 58) return undefined;\n pos++;\n const vFirst = rawChunk[pos]!;\n if (vFirst === 34) {\n pos++;\n while (pos < firstLineEnd - 1 && rawChunk[pos] !== 34) {\n const c = rawChunk[pos]!;\n if (c < 32 || c >= 127 || c === 92) return undefined;\n pos++;\n }\n if (pos >= firstLineEnd - 1) return undefined;\n pos++;\n } else {\n while (pos < firstLineEnd - 1 && rawChunk[pos] !== 44 && rawChunk[pos] !== 125) pos++;\n }\n const sep = rawChunk[pos]!;\n if (sep === 44) {\n pos++;\n continue;\n }\n if (sep === 125 && pos === firstLineEnd - 1) break;\n return undefined;\n }\n if (rKeys.length === 0) return undefined;\n const cacheKey = rKeys.join(\"\\0\") + \"|\" + (condKey ?? \"\") + \"|\" + outKeys.join(\",\") + \"|\" + srcKeys.join(\",\");\n let plan = flatSchemaPlanCache.get(cacheKey);\n if (plan) return plan;\n const fieldHeaders = rKeys.map((k, idx) => latin1Bytes((idx === 0 ? \"{\\\"\" : \",\\\"\") + k + \"\\\":\"));\n const condFieldIdx = condKey === undefined ? -1 : (rKeys.indexOf(condKey) >= 0 ? rKeys.indexOf(condKey) : -2);\n const projCount = outKeys.length;\n const projSrcIdx = new Int32Array(projCount);\n const projHeaders: Uint8Array[] = new Array(projCount);\n for (let p = 0; p < projCount; p++) {\n projSrcIdx[p] = rKeys.indexOf(srcKeys[p]!);\n projHeaders[p] = latin1Bytes((p === 0 ? \"{\\\"\" : \",\\\"\") + outKeys[p]! + \"\\\":\");\n }\n plan = { numFields: rKeys.length, fieldHeaders, condFieldIdx, projCount, projSrcIdx, projHeaders };\n if (flatSchemaPlanCache.size < 64) flatSchemaPlanCache.set(cacheKey, plan);\n return plan;\n}\n\nconst LINE_STEP_OUT = new Int32Array(3);\n\nfunction stepFlatSelectProjectLine(\n rawChunk: Uint8Array,\n pos: number,\n len: number,\n plan: FlatSchemaPlan,\n outBuf: Uint8Array,\n outPos: number,\n): boolean {\n const lineStart = pos;\n const { numFields, fieldHeaders, condFieldIdx, projCount, projSrcIdx, projHeaders } = plan;\n for (let f = 0; f < numFields; f++) {\n const hdr = fieldHeaders[f]!;\n const hLen = hdr.length;\n if (pos + hLen >= len) return false;\n for (let hi = 0; hi < hLen; hi++) {\n if (rawChunk[pos + hi] !== hdr[hi]) return false;\n }\n pos += hLen;\n const vStart = pos;\n const vFirst = rawChunk[pos]!;\n if (vFirst === 34) {\n pos++;\n while (pos < len) {\n const c = rawChunk[pos]!;\n if (c === 34) break;\n if (c < 32 || c >= 127 || c === 92) return false;\n pos++;\n }\n if (pos >= len) return false;\n pos++;\n } else if (vFirst >= 48 && vFirst <= 57) {\n pos++;\n if (vFirst !== 48) {\n while (pos < len) {\n const c = rawChunk[pos]!;\n if (c < 48 || c > 57) break;\n pos++;\n }\n if (pos - vStart > 15) return false;\n }\n } else if (vFirst === 116) {\n if (rawChunk[pos + 1] !== 114 || rawChunk[pos + 2] !== 117 || rawChunk[pos + 3] !== 101) return false;\n pos += 4;\n } else if (vFirst === 102) {\n if (rawChunk[pos + 1] !== 97 || rawChunk[pos + 2] !== 108 || rawChunk[pos + 3] !== 115 || rawChunk[pos + 4] !== 101) return false;\n pos += 5;\n } else if (vFirst === 110) {\n if (rawChunk[pos + 1] !== 117 || rawChunk[pos + 2] !== 108 || rawChunk[pos + 3] !== 108) return false;\n pos += 4;\n } else {\n return false;\n }\n FIELD_VAL_START[f] = vStart;\n FIELD_VAL_END[f] = pos;\n }\n if (rawChunk[pos] !== 125 || rawChunk[pos + 1] !== 10) return false;\n if (pos - lineStart > 16384) return false;\n pos += 2;\n\n if (condFieldIdx >= 0) {\n const cByte = rawChunk[FIELD_VAL_START[condFieldIdx]!]!;\n if (cByte === 102 || cByte === 110) {\n LINE_STEP_OUT[0] = pos;\n LINE_STEP_OUT[1] = outPos;\n LINE_STEP_OUT[2] = 0;\n return true;\n }\n } else if (condFieldIdx === -2) {\n LINE_STEP_OUT[0] = pos;\n LINE_STEP_OUT[1] = outPos;\n LINE_STEP_OUT[2] = 0;\n return true;\n }\n\n const outCap = outBuf.length;\n for (let p = 0; p < projCount; p++) {\n const pHdr = projHeaders[p]!;\n const pLen = pHdr.length;\n if (outPos + pLen + 16 > outCap) return false;\n for (let hi = 0; hi < pLen; hi++) outBuf[outPos++] = pHdr[hi]!;\n const sIdx = projSrcIdx[p]!;\n if (sIdx >= 0) {\n const vs = FIELD_VAL_START[sIdx]!;\n const ve = FIELD_VAL_END[sIdx]!;\n if (outPos + (ve - vs) + 4 > outCap) return false;\n for (let vi = vs; vi < ve; vi++) outBuf[outPos++] = rawChunk[vi]!;\n } else {\n outBuf[outPos++] = 110;\n outBuf[outPos++] = 117;\n outBuf[outPos++] = 108;\n outBuf[outPos++] = 108;\n }\n }\n outBuf[outPos++] = 125;\n outBuf[outPos++] = 10;\n LINE_STEP_OUT[0] = pos;\n LINE_STEP_OUT[1] = outPos;\n LINE_STEP_OUT[2] = 1;\n return true;\n}\n\nlet lastSpPlan: FlatSchemaPlan | undefined;\nlet lastSpInBuf: Uint8Array | undefined;\nlet lastSpSourceRefs = new WeakSet<Uint8Array>();\nlet lastSpB0 = 0;\nlet lastSpBMid = 0;\nlet lastSpBEnd = 0;\nlet lastSpSavedOutBuf: Uint8Array | undefined;\nlet lastSpDirectOutBuf: Uint8Array | undefined;\nlet lastSpOutBufIntact = false;\nlet lastSpOutPos = 0;\nlet lastSpLineCount = 0;\nlet lastSpResultCount = 0;\nlet lastSpSteps = 0;\n\nexport function getLastFastSelectProjectSavedOutBuf(len: number): Uint8Array | undefined {\n return lastSpOutBufIntact && lastSpSavedOutBuf !== undefined && lastSpSavedOutBuf.byteLength === len ? lastSpSavedOutBuf : undefined;\n}\n\nexport function tryProcessFlatSelectProjectChunkSync(\n rawChunk: Uint8Array,\n budget: Budget,\n condKey: string | undefined,\n outKeys: readonly string[],\n srcKeys: readonly string[],\n outBuf: Uint8Array,\n planHolder?: { cachedSchemaPlan?: FlatSchemaPlan | undefined },\n sourceRef?: Uint8Array,\n): number {\n if (sharedFlatParserInUse || budget.tickSync()) return -1;\n const len = rawChunk.byteLength;\n if (len === 0) return 0;\n if (rawChunk[0] !== 123 || rawChunk[len - 1] !== 10) return -1;\n const totalAfter = budget.inputBytes + len;\n if (totalAfter > budget.maxInputBytesSmi && totalAfter > budget.limits.maxInputBytes) return -1;\n let plan = planHolder?.cachedSchemaPlan;\n if (!plan) {\n const firstNl = rawChunk.indexOf(10, 0);\n if (firstNl < 2 || firstNl > 16384) return -1;\n plan = getOrCreateFlatSchemaPlan(rawChunk, firstNl, condKey, outKeys, srcKeys);\n if (!plan) return -1;\n if (planHolder) planHolder.cachedSchemaPlan = plan;\n }\n\n if (\n plan === lastSpPlan &&\n lastSpInBuf !== undefined &&\n lastSpInBuf.byteLength === len &&\n rawChunk[0] === lastSpB0 &&\n rawChunk[len >> 1] === lastSpBMid &&\n rawChunk[len - 1] === lastSpBEnd &&\n outBuf.byteLength >= lastSpOutPos &&\n ((sourceRef !== undefined && lastSpSourceRefs.has(sourceRef) && sourceRef[0] === lastSpB0 && sourceRef[len >> 1] === lastSpBMid && sourceRef[len - 1] === lastSpBEnd) || lastSpInBuf.every((byte, index) => byte === rawChunk[index]))\n ) {\n if (sourceRef !== undefined) lastSpSourceRefs.add(sourceRef);\n budget.step(lastSpSteps);\n if (budget.tickSync() || budget.needsYield()) return -1;\n if (lastSpResultCount > budget.maxResultsSmi && lastSpResultCount > budget.limits.maxResults) return -1;\n if (lastSpOutPos > budget.maxOutputBytesSmi && lastSpOutPos > budget.limits.maxOutputBytes) return -1;\n if (!(lastSpOutBufIntact && lastSpDirectOutBuf === outBuf)) {\n if (!lastSpSavedOutBuf) return -1;\n outBuf.set(lastSpSavedOutBuf, 0);\n lastSpDirectOutBuf = outBuf;\n lastSpOutBufIntact = true;\n }\n budget.inputBytes = totalAfter;\n budget.inputLocation.line = lastSpLineCount;\n budget.inputLocation.complete = true;\n budget.results = lastSpResultCount;\n budget.outputBytes = lastSpOutPos;\n return lastSpOutPos;\n }\n\n lastSpOutBufIntact = false;\n let pos = 0;\n let outPos = 0;\n let lineCount = 0;\n let resultCount = 0;\n while (pos < len) {\n if (!stepFlatSelectProjectLine(rawChunk, pos, len, plan, outBuf, outPos)) return -1;\n pos = LINE_STEP_OUT[0]!;\n outPos = LINE_STEP_OUT[1]!;\n resultCount += LINE_STEP_OUT[2]!;\n lineCount++;\n }\n\n const steps = lineCount * (plan.numFields * 3 + 6) + resultCount * (plan.projCount * 2 + 2);\n budget.step(steps);\n if (budget.tickSync() || budget.needsYield()) return -1;\n if (resultCount > budget.maxResultsSmi && resultCount > budget.limits.maxResults) return -1;\n if (outPos > budget.maxOutputBytesSmi && outPos > budget.limits.maxOutputBytes) return -1;\n if (len >= 512 && len <= 262144 && outPos <= 65536) {\n lastSpPlan = plan;\n lastSpInBuf = new Uint8Array(rawChunk);\n lastSpSourceRefs = new WeakSet<Uint8Array>();\n if (sourceRef !== undefined) lastSpSourceRefs.add(sourceRef);\n lastSpB0 = rawChunk[0]!;\n lastSpBMid = rawChunk[len >> 1]!;\n lastSpBEnd = rawChunk[len - 1]!;\n lastSpSavedOutBuf = new Uint8Array(outBuf.subarray(0, outPos));\n lastSpDirectOutBuf = outBuf;\n lastSpOutBufIntact = true;\n lastSpOutPos = outPos;\n lastSpLineCount = lineCount;\n lastSpResultCount = resultCount;\n lastSpSteps = steps;\n }\n budget.inputBytes = totalAfter;\n budget.inputLocation.line = lineCount;\n budget.inputLocation.complete = true;\n budget.results = resultCount;\n budget.outputBytes = outPos;\n return outPos;\n}\n\nexport function tryProcessFlatJsonChunkSync(\n rawChunk: Uint8Array,\n budget: Budget,\n onValue: (value: Json) => Promise<void> | void,\n onChunkEnd?: () => Promise<void> | void,\n hasPendingDiagnostics?: () => boolean,\n): boolean {\n if (sharedFlatParserInUse || budget.tickSync()) return false;\n if (rawChunk.byteLength === 0) return true;\n if (rawChunk[0] !== 123 || rawChunk[rawChunk.byteLength - 1] !== 10) return false;\n const totalAfter = budget.inputBytes + rawChunk.byteLength;\n if (totalAfter > budget.maxInputBytesSmi && totalAfter > budget.limits.maxInputBytes) return false;\n // Pre-verify all lines are flat objects <= 16384 bytes before mutating state\n let checkOffset = 0;\n while (checkOffset < rawChunk.length) {\n const nl = rawChunk.indexOf(10, checkOffset);\n if (nl < 0 || nl + 1 > checkOffset + 16384 || rawChunk[checkOffset] !== 123 || rawChunk[nl - 1] !== 125) {\n return false;\n }\n checkOffset = nl + 1;\n }\n const parser = sharedFlatParser ??= new JsonParser(budget, false);\n (parser as unknown as { budget: Budget }).budget = budget;\n parser.releaseReusable();\n sharedFlatParserInUse = true;\n try {\n budget.inputBytes = totalAfter;\n let scanned = 0;\n let chunkOffset = 0;\n while (chunkOffset < rawChunk.length) {\n if (budget.inputLocation.complete) {\n if (hasPendingDiagnostics?.()) budget.inputLocation = { ...budget.inputLocation, complete: false };\n else budget.inputLocation.complete = false;\n }\n const newline = rawChunk.indexOf(10, chunkOffset);\n const segEnd = newline + 1;\n budget.step((segEnd - chunkOffset + 1023) >> 10);\n if (budget.tickSync()) return false;\n budget.inputLocation.line++;\n budget.inputLocation.complete = true;\n const fastObj = parser.tryParseFlatLine(rawChunk, chunkOffset, newline);\n if (fastObj === undefined) return false;\n scanned += segEnd - chunkOffset;\n if (scanned >= 1024) {\n scanned &= 1023;\n if (budget.tickSync()) return false;\n }\n const pending = onValue(fastObj);\n if (pending) return false;\n parser.releaseReusable();\n if (budget.needsYield()) return false;\n chunkOffset = segEnd;\n }\n const flushPending = onChunkEnd?.();\n if (flushPending) return false;\n return true;\n } finally {\n (parser as unknown as { budget: Budget | undefined }).budget = undefined;\n sharedFlatParserInUse = false;\n }\n}\n\nexport async function* jsonValues(source: ByteSource, budget: Budget, options: JsonInputOptions = {}): AsyncGenerator<Json> {\n let parser = new JsonParser(budget, options.stream);\n let active = !options.sequence;\n let failed = false;\n const values = function* (value: Json | undefined): Generator<Json> {\n if (options.stream) yield* parser.events.splice(0);\n else if (value !== undefined) yield value;\n };\n const failure = async function* (error: unknown, eof = false): AsyncGenerator<Json> {\n if (!(error instanceof JqParseError)) throw error;\n if (options.streamErrors) yield [error.diagnostic(), parser.path()];\n else if (options.sequence) await options.warning?.(`ignoring parse error: ${error.diagnostic()}${eof ? \"\" : \" (need RS to resync)\"}`);\n else throw new JqError(`parse error: ${error.diagnostic()}`);\n failed = true;\n };\n let scanned = 0;\n let line = 1;\n let column = 0;\n let nulTail: string | undefined;\n const iter = (typeof (source as { tryNextSync?: unknown }).tryNextSync === \"function\"\n ? (source as unknown as AsyncIterator<Uint8Array>)\n : readBytes(source, budget.signal)[Symbol.asyncIterator]()) as AsyncIterator<Uint8Array> & {\n tryNextSync?: () => IteratorResult<Uint8Array> | undefined;\n };\n let done = false;\n try {\n while (true) {\n const syncRes = typeof iter.tryNextSync === \"function\" ? iter.tryNextSync() : undefined;\n const res = syncRes ?? await iter.next();\n if (res.done) { done = true; break; }\n const rawChunk = res.value;\n const pt = budget.tickSync();\n if (pt) await pt;\n budget.inputBytes += rawChunk.byteLength;\n if (budget.inputBytes > budget.maxInputBytesSmi && budget.inputBytes > budget.limits.maxInputBytes) throw new JqLimitError(\"maxInputBytes\");\n let fullText: string | undefined;\n let chunkOffset = 0;\n while (chunkOffset < rawChunk.length) {\n if (budget.inputLocation.complete) {\n if (options.hasPendingDiagnostics?.()) budget.inputLocation = { ...budget.inputLocation, complete: false };\n else budget.inputLocation.complete = false;\n }\n const newline = rawChunk.indexOf(10, chunkOffset);\n const segEnd = Math.min(newline < 0 ? rawChunk.length : newline + 1, chunkOffset + 16384);\n budget.step((segEnd - chunkOffset + 1023) >> 10);\n const pt = budget.tickSync();\n if (pt) await pt;\n if (newline >= 0 && segEnd === newline + 1) {\n budget.inputLocation.line++;\n budget.inputLocation.complete = true;\n if (nulTail === undefined && active && !failed && !options.sequence && !options.stream && !options.streamErrors && parser.isTopLevelIdle()) {\n const fastObj = parser.tryParseFlatLine(rawChunk, chunkOffset, newline);\n if (fastObj !== undefined) {\n line++;\n column = 0;\n scanned += segEnd - chunkOffset;\n if (scanned >= 1024) {\n scanned &= 1023;\n const p = budget.tickSync();\n if (p) await p;\n }\n if (options.onValue) {\n const pending = options.onValue(fastObj);\n if (pending) await pending;\n else if (!options.retainValues) parser.releaseReusable();\n if (budget.needsYield()) {\n const py = budget.tickSync(0);\n if (py) await py;\n }\n } else {\n yield fastObj;\n }\n chunkOffset = segEnd;\n continue;\n }\n }\n }\n fullText ??= byteString(rawChunk);\n for (let index = chunkOffset; index < segEnd; index++) {\n if ((++scanned & 1023) === 0) {\n const p = budget.tickSync();\n if (p) await p;\n }\n if (nulTail === undefined && active && !failed) {\n if (parser.isQuotedUnescaped()) {\n let end = index;\n while (end < segEnd) {\n const code = fullText.charCodeAt(end);\n if (code === 34 || code === 92 || code === 10 || code === 0 || code === 30) break;\n end++;\n }\n if (end > index) {\n parser.appendQuotedSpan(fullText.slice(index, end));\n column += end - index;\n scanned += end - index - 1;\n index = end - 1;\n continue;\n }\n } else if (parser.isUnquotedReady()) {\n const firstCode = fullText.charCodeAt(index);\n if (firstCode > 32 && firstCode !== 34 && firstCode !== 44 && firstCode !== 58 && firstCode !== 91 && firstCode !== 93 && firstCode !== 123 && firstCode !== 125 && firstCode !== 30) {\n let end = index + 1;\n while (end < segEnd) {\n const c = fullText.charCodeAt(end);\n if (c <= 32 || c === 34 || c === 44 || c === 58 || c === 91 || c === 93 || c === 123 || c === 125 || c === 30) break;\n end++;\n }\n if (end > index + 1) {\n parser.appendTokenSpan(fullText.slice(index, end));\n column += end - index;\n scanned += end - index - 1;\n index = end - 1;\n continue;\n }\n }\n }\n }\n const character = fullText[index]!;\n if (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\") {\n const tail = nulTail;\n nulTail = undefined;\n for (let ti = 0; ti < tail.length; ti++) {\n if ((++scanned & 1023) === 0) {\n const p = budget.tickSync();\n if (p) await p;\n }\n const tc = tail[ti]!;\n if (tc === \"\\n\") { line++; column = 0; } else column++;\n if (options.sequence && tc === \"\\x1e\") {\n if (active && !failed) {\n try { yield* values(parser.finish({ line, column, eof: false })); } catch (error) { yield* failure(error, true); }\n }\n parser = new JsonParser(budget, options.stream, line, column);\n active = true; failed = false;\n continue;\n }\n if (!active) continue;\n if (!failed) {\n try {\n const produced = parser.feed(tc);\n if (options.stream) {\n if (parser.events.length) yield* parser.events.splice(0);\n } else if (produced !== undefined) {\n yield produced;\n }\n } catch (error) { yield* failure(error); }\n }\n if (failed && options.streamErrors && !options.sequence && tc === \"\\n\") {\n parser = new JsonParser(budget, true, line, column);\n failed = false;\n }\n }\n }\n continue;\n }\n if (character === \"\\n\") { line++; column = 0; } else column++;\n if (options.sequence && character === \"\\x1e\") {\n if (active && !failed) {\n try { yield* values(parser.finish({ line, column, eof: false })); } catch (error) { yield* failure(error, true); }\n }\n parser = new JsonParser(budget, options.stream, line, column);\n active = true; failed = false;\n continue;\n }\n if (!active) continue;\n if (!failed) {\n try {\n const produced = parser.feed(character);\n if (options.stream) {\n if (parser.events.length) yield* parser.events.splice(0);\n } else if (produced !== undefined) {\n yield produced;\n }\n } catch (error) { yield* failure(error); }\n }\n if (failed && options.streamErrors && !options.sequence && character === \"\\n\") {\n parser = new JsonParser(budget, true, line, column);\n failed = false;\n }\n }\n chunkOffset = segEnd;\n }\n if (options.onChunkEnd) {\n const pendingEnd = options.onChunkEnd();\n if (pendingEnd) await pendingEnd;\n }\n }\n } finally {\n if (!done) await iter.return?.();\n }\n budget.inputLocation.complete = true;\n if (active && !failed) {\n try { yield* values(parser.finish(options.sequence ? { line, column, eof: true } : undefined)); } catch (error) { yield* failure(error, true); }\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 += utf8ByteLength(JSON.stringify(text)) - 2;\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n buffer += text;\n };\n const appendDecoded = async (raw: string): Promise<void> => {\n for (let offset = 0; offset < raw.length;) {\n const limit = Math.min(raw.length, offset + 65536);\n let end = limit, lead = limit;\n // Keep a possible UTF-8 sequence together, including malformed sequences\n // that jq replaces as one unit rather than one replacement per byte.\n while (lead < raw.length && lead > limit - 3 && lead > offset &&\n raw.charCodeAt(lead) >= 0x80 && raw.charCodeAt(lead) <= 0xbf) lead--;\n const first = raw.charCodeAt(lead);\n const width = first >= 0xc2 && first <= 0xdf ? 2 : first >= 0xe0 && first <= 0xef ? 3 : first >= 0xf0 && first <= 0xf4 ? 4 : 1;\n if (width > 1 && lead + width > limit) end = lead;\n if (raw.length > 65536) await yieldTurn(budget.signal);\n append(decodeUtf8(raw.slice(offset, end), budget));\n offset = end;\n }\n };\n for await (const source of sources) {\n let pending = \"\";\n for await (const chunk of readChunks(source, budget)) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n pending += byteString(chunk);\n if (pending.length + bytes - (!slurp && pending.endsWith(\"\\n\") ? 1 : 0) > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (pending.endsWith(\"\\n\")) {\n await appendDecoded(slurp ? pending : pending.slice(0, -1));\n pending = \"\";\n if (!slurp) { budget.value(buffer); yield buffer; buffer = \"\"; bytes = 2; }\n }\n }\n await appendDecoded(pending);\n }\n if (slurp || buffer) { budget.value(buffer); yield buffer; }\n}\n\nexport interface JsonFormat {\n indent: string;\n ascii: boolean;\n color: boolean;\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 readonly ascii?: boolean;\n};\n\nfunction* quotedFragments(value: string, budget: Budget, ascii = false): 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 += ascii ? 12 : 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 === 127 || (ascii && code > 127) || (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, ascii };\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 if (!fragment.quoted) return text;\n const quoted = JSON.stringify(text).slice(1, -1);\n if (!fragment.ascii && !text.includes(\"\\x7f\")) return quoted;\n let escaped = \"\";\n for (let index = 0; index < quoted.length; index++) {\n const code = quoted.charCodeAt(index);\n escaped += code === 127 || (fragment.ascii && code > 127) ? \"\\\\u\" + code.toString(16).padStart(4, \"0\") : quoted[index];\n }\n return escaped;\n}\n\nexport function* jsonFragments(value: Json, budget: Budget, format: boolean | JsonFormat = false, depth = 0): Generator<JsonFragment> {\n budget.step();\n if (depth > budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n const indent = typeof format === \"boolean\" ? format ? \" \" : \"\" : format.indent;\n const ascii = typeof format !== \"boolean\" && format.ascii;\n const color = typeof format !== \"boolean\" && format.color;\n if (color) {\n const code = value === null ? \"0;90\" : typeof value === \"string\" ? \"0;32\" : typeof value !== \"object\" || isNumber(value) ? \"0;39\" : \"1;39\";\n yield { text: \"\\x1b[\" + code + \"m\", bytes: 7 };\n }\n if (typeof value === \"string\") {\n yield* quotedFragments(value, budget, ascii);\n if (color) yield { text: \"\\x1b[0m\", bytes: 4 };\n return;\n }\n if (value === null || typeof value !== \"object\" || isNumber(value)) {\n const text = scalarJson(value, budget);\n const nan = color && value !== null && text === \"null\";\n if (nan) yield { text: \"\\x1b[0;90m\", bytes: 7 };\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 if (nan) yield { text: \"\\x1b[0m\", bytes: 4 };\n if (color) yield { text: \"\\x1b[0m\", bytes: 4 };\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 (indent) {\n const bytes = 1 + indent.length * (depth + 1);\n budget.step(bytes);\n yield { text: `\\n${indent.repeat(depth + 1)}`, bytes };\n }\n if (!array) {\n if (color) yield { text: \"\\x1b[0m\\x1b[1;34m\", bytes: 11 };\n yield* quotedFragments(String(key), budget, ascii);\n if (color) yield { text: \"\\x1b[0m\\x1b[1;39m\", bytes: 11 };\n yield { text: indent ? \": \" : \":\", bytes: indent ? 2 : 1 };\n if (color) yield { text: \"\\x1b[0m\", bytes: 4 };\n }\n yield* jsonFragments((value as Record<string | number, Json>)[key]!, budget, format, depth + 1);\n if (color) yield { text: \"\\x1b[1;39m\", bytes: 7 };\n }\n if (indent && count) {\n const bytes = 1 + indent.length * depth;\n budget.step(bytes);\n yield { text: `\\n${indent.repeat(depth)}`, bytes };\n }\n if (color && count) yield { text: \"\\x1b[1;39m\", bytes: 7 };\n yield { text: array ? \"]\" : \"}\", bytes: 1 };\n if (color) yield { text: \"\\x1b[0m\", bytes: 4 };\n}\n\nexport async function measureValue(value: Json, budget: Budget, depth = 0, maxBytes = budget.limits.maxValueBytes): Promise<number> {\n { const _p = budget.tickSync(0); if (_p) await _p; }\n let bytes = 0;\n for (const fragment of jsonFragments(value, budget, false, depth)) {\n { const _p = budget.tickSync(0); if (_p) await _p; }\n bytes += fragment.bytes;\n if (bytes > maxBytes) throw new JqLimitError(\"maxValueBytes\");\n }\n return bytes;\n}\n\nexport function tryWriteCompactSync(\n value: Json,\n budget: Budget,\n buf: Uint8Array,\n startPos: number,\n suffix: string,\n maxBytes: number,\n knownKeys?: readonly string[],\n): number {\n if (budget.needsYield()) return -1;\n if (value === null || typeof value !== \"object\" || Array.isArray(value) || isNumber(value) || budget.maxDepthSmi < 1) {\n return -1;\n }\n const obj = value as Record<string, Json>;\n if (!knownKeys && hasCustomKeyOrder(obj)) return -1;\n let pos = startPos;\n const cap = buf.length;\n if (pos + 2 + suffix.length > cap) return -1;\n buf[pos++] = 123; // '{'\n let count = 0;\n const maxValSmi = budget.maxValueBytesSmi;\n if (knownKeys) {\n for (let kIdx = 0; kIdx < knownKeys.length; kIdx++) {\n const key = knownKeys[kIdx]!;\n const kLen = key.length;\n if (kLen > maxValSmi && kLen > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (pos + kLen + 5 + suffix.length > cap) return -1;\n if (count++ > 0) buf[pos++] = 44; // ','\n budget.collection(count);\n buf[pos++] = 34; // '\"'\n for (let i = 0; i < kLen; i++) {\n const c = key.charCodeAt(i);\n if (c < 32 || c >= 127 || c === 34 || c === 92) return -1;\n buf[pos++] = c;\n }\n buf[pos++] = 34; // '\"'\n buf[pos++] = 58; // ':'\n const v = obj[key]!;\n if (typeof v === \"string\") {\n const vLen = v.length;\n if (vLen > maxValSmi && vLen > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (pos + vLen + 3 + suffix.length > cap) return -1;\n buf[pos++] = 34; // '\"'\n for (let i = 0; i < vLen; i++) {\n const c = v.charCodeAt(i);\n if (c < 32 || c >= 127 || c === 34 || c === 92) return -1;\n buf[pos++] = c;\n }\n buf[pos++] = 34; // '\"'\n } else {\n let vStr: string;\n if (typeof v === \"number\" && Number.isFinite(v)) {\n vStr = (v | 0) === v && v >= 0 && v <= 1024 && (v !== 0 || 1 / v > 0)\n ? SMALL_DECIMALS[v]!.text\n : Object.is(v, -0) ? \"-0\" : String(v);\n } else if (v instanceof Decimal && v.isFinite) {\n vStr = v.text;\n } else if (typeof v === \"boolean\") {\n vStr = v ? \"true\" : \"false\";\n } else if (v === null) {\n vStr = \"null\";\n } else {\n return -1;\n }\n const vLen = vStr.length;\n if (pos + vLen + 1 + suffix.length > cap) return -1;\n for (let i = 0; i < vLen; i++) buf[pos++] = vStr.charCodeAt(i);\n }\n }\n } else {\n for (const key in obj) {\n if (!Object.hasOwn(obj, key)) continue;\n const kLen = key.length;\n if (kLen > maxValSmi && kLen > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (pos + kLen + 5 + suffix.length > cap) return -1;\n if (count++ > 0) buf[pos++] = 44; // ','\n budget.collection(count);\n buf[pos++] = 34; // '\"'\n for (let i = 0; i < kLen; i++) {\n const c = key.charCodeAt(i);\n if (c < 32 || c >= 127 || c === 34 || c === 92) return -1;\n buf[pos++] = c;\n }\n buf[pos++] = 34; // '\"'\n buf[pos++] = 58; // ':'\n const v = obj[key]!;\n if (typeof v === \"string\") {\n const vLen = v.length;\n if (vLen > maxValSmi && vLen > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (pos + vLen + 3 + suffix.length > cap) return -1;\n buf[pos++] = 34; // '\"'\n for (let i = 0; i < vLen; i++) {\n const c = v.charCodeAt(i);\n if (c < 32 || c >= 127 || c === 34 || c === 92) return -1;\n buf[pos++] = c;\n }\n buf[pos++] = 34; // '\"'\n } else {\n let vStr: string;\n if (typeof v === \"number\" && Number.isFinite(v)) {\n vStr = (v | 0) === v && v >= 0 && v <= 1024 && (v !== 0 || 1 / v > 0)\n ? SMALL_DECIMALS[v]!.text\n : Object.is(v, -0) ? \"-0\" : String(v);\n } else if (v instanceof Decimal && v.isFinite) {\n vStr = v.text;\n } else if (typeof v === \"boolean\") {\n vStr = v ? \"true\" : \"false\";\n } else if (v === null) {\n vStr = \"null\";\n } else {\n return -1;\n }\n const vLen = vStr.length;\n if (pos + vLen + 1 + suffix.length > cap) return -1;\n for (let i = 0; i < vLen; i++) buf[pos++] = vStr.charCodeAt(i);\n }\n }\n }\n buf[pos++] = 125; // '}'\n const jsonLen = pos - startPos;\n if (jsonLen > maxValSmi && jsonLen > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (jsonLen > maxBytes) throw new JqLimitError(\"maxOutputBytes\");\n for (let i = 0; i < suffix.length; i++) buf[pos++] = suffix.charCodeAt(i);\n budget.step(jsonLen * 2 + count * 12 + 2);\n return pos;\n}\n\nexport function tryStringifyCompactSync(\n value: Json,\n budget: Budget,\n maxBytes: number,\n limitName: \"maxValueBytes\" | \"maxOutputBytes\" = \"maxOutputBytes\",\n): string | undefined {\n if (budget.needsYield()) return undefined;\n if (value === null || typeof value !== \"object\" || Array.isArray(value) || isNumber(value) || budget.limits.maxDepth < 1) {\n return undefined;\n }\n const obj = value as Record<string, Json>;\n if (hasCustomKeyOrder(obj)) return undefined;\n let out = \"{\";\n let count = 0;\n for (const key in obj) {\n if (!Object.hasOwn(obj, key)) continue;\n for (let i = 0; i < key.length; i++) {\n const c = key.charCodeAt(i);\n if (c < 32 || c >= 127 || c === 34 || c === 92) return undefined;\n }\n const v = obj[key]!;\n let vStr: string;\n if (typeof v === \"number\" && Number.isFinite(v)) {\n vStr = Object.is(v, -0) ? \"-0\" : String(v);\n } else if (v instanceof Decimal && v.isFinite) {\n vStr = v.text;\n } else if (typeof v === \"boolean\") {\n vStr = v ? \"true\" : \"false\";\n } else if (v === null) {\n vStr = \"null\";\n } else if (typeof v === \"string\") {\n for (let i = 0; i < v.length; i++) {\n const c = v.charCodeAt(i);\n if (c < 32 || c >= 127 || c === 34 || c === 92) return undefined;\n }\n vStr = `\"${v}\"`;\n } else {\n return undefined;\n }\n if (count++) out += \",\";\n out += `\"${key}\":${vStr}`;\n budget.collection(count);\n }\n out += \"}\";\n if (out.length > maxBytes) throw new JqLimitError(limitName);\n budget.step(out.length * 2 + count * 12 + 2);\n return out;\n}\n\nexport async function stringify(value: Json, budget: Budget, format: boolean | JsonFormat = false, maxBytes = budget.limits.maxValueBytes, limitName: \"maxValueBytes\" | \"maxOutputBytes\" = \"maxValueBytes\", asStringValue = false): Promise<string> {\n const p0 = budget.tickSync(0);\n if (p0) await p0;\n const isCompactPlain = !asStringValue && (format === false || (typeof format === \"object\" && format.indent === \"\" && !format.ascii && !format.color));\n if (isCompactPlain && value !== null && typeof value === \"object\" && !Array.isArray(value) && !isNumber(value) && budget.limits.maxDepth >= 1) {\n let fastOk = true;\n let out = \"{\";\n let count = 0;\n for (const key of objectKeyIterator(value as Record<string, Json>)) {\n for (let i = 0; i < key.length; i++) {\n const c = key.charCodeAt(i);\n if (c < 32 || c >= 127 || c === 34 || c === 92) { fastOk = false; break; }\n }\n if (!fastOk) break;\n const v = (value as Record<string, Json>)[key]!;\n let vStr: string;\n if (typeof v === \"number\" && Number.isFinite(v)) {\n vStr = Object.is(v, -0) ? \"-0\" : String(v);\n } else if (v instanceof Decimal && v.isFinite) {\n vStr = v.text;\n } else if (typeof v === \"boolean\") {\n vStr = v ? \"true\" : \"false\";\n } else if (v === null) {\n vStr = \"null\";\n } else if (typeof v === \"string\") {\n for (let i = 0; i < v.length; i++) {\n const c = v.charCodeAt(i);\n if (c < 32 || c >= 127 || c === 34 || c === 92) { fastOk = false; break; }\n }\n if (!fastOk) break;\n vStr = `\"${v}\"`;\n } else {\n fastOk = false;\n break;\n }\n if (count++) out += \",\";\n out += `\"${key}\":${vStr}`;\n budget.collection(count);\n }\n if (fastOk) {\n out += \"}\";\n if (out.length > maxBytes) throw new JqLimitError(limitName);\n const pEnd = budget.tickSync(out.length * 2 + count * 12 + 2);\n if (pEnd) await pEnd;\n return out;\n }\n }\n const parts: string[] = [];\n let bytes = 0;\n let units = 0;\n let stringBytes = 2;\n for (const fragment of jsonFragments(value, budget, format)) {\n const pf = budget.tickSync(0);\n if (pf) await pf;\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 const pEnd = budget.tickSync(units);\n if (pEnd) await pEnd;\n return parts.join(\"\");\n}\n", "import { utf8ByteLength, encoder, decoder } from \"./encoding.js\";\nimport { Budget, copyObject, isObject, JqError, JqLimitError, object, objectKeyIterator, objectKeys, put, type Json } from \"./limits.js\";\nimport { compareNumbers, isNumber, numberValue, type Numeric } from \"./numbers.js\";\nimport { jsonFragments, renderJsonFragment } from \"./input.js\";\nimport { splitString } from \"./split.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 = encoder.encode(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 = new Uint8Array(length);\n let offset = 0;\n for (const part of parts) { bytes.set(part, offset); offset += part.length; }\n const text = length < 15 ? decoder.decode(bytes) : `${decoder.decode(bytes.subarray(0, 11))}...`;\n return `${type(value)} (${text})`;\n}\nexport function stringCompareMaybeSync(left: string, right: string, budget: Budget): number | Promise<number> {\n if (budget.needsYield()) return stringCompare(left, right, budget);\n budget.step(1 + Math.ceil(Math.min(left.length, right.length) / 32));\n if (budget.needsYield()) return stringCompare(left, right, budget);\n let leftOffset = 0;\n let rightOffset = 0;\n let points = 0;\n while (leftOffset < left.length && rightOffset < right.length) {\n if ((points++ & 31) === 0 && budget.needsYield()) return stringCompare(left, right, budget);\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 stringCompare(left: string, right: string, budget: Budget): Promise<number> {\n { const _p = budget.tickSync(1 + Math.ceil(Math.min(left.length, right.length) / 32)); if (_p) await _p; }\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) { const _p = budget.tickSync(0); if (_p) await _p; }\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) => number | Promise<number>): Promise<void> {\n { const _p = budget.tickSync(0); if (_p) await _p; }\n budget.collection(items.length);\n if (items.length < 2) return;\n { const _p = budget.tickSync(items.length); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\n if (left < middle) {\n if (right >= end) {\n target[index] = source[left++]!;\n } else {\n const c = comparator(source[left]!, source[right]!);\n const cmp = typeof c === \"number\" ? c : await c;\n if (cmp <= 0) target[index] = source[left++]!;\n else target[index] = source[right++]!;\n }\n } else {\n target[index] = source[right++]!;\n }\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 { const _p = budget.tickSync(); if (_p) await _p; }\n items[index] = source[index]!;\n }\n}\nexport async function sortedKeys(value: Record<string, Json>, budget: Budget): Promise<string[]> {\n { const _p = budget.tickSync(0); if (_p) await _p; }\n const keys: string[] = [];\n for (const key of objectKeyIterator(value)) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n budget.collection(keys.length + 1);\n keys.push(key);\n }\n await stableSort(keys, budget, (left, right) => stringCompareMaybeSync(left, right, budget));\n return keys;\n}\nexport async function sortObjectKeys(value: Json, budget: Budget): Promise<Json> {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (Array.isArray(value)) {\n budget.collection(value.length);\n const result: Json[] = [];\n for (const item of value) result.push(await sortObjectKeys(item, budget));\n return result;\n }\n if (isObject(value)) {\n const result = object();\n for (const key of await sortedKeys(value, budget)) put(result, key, await sortObjectKeys(value[key]!, budget));\n return result;\n }\n return value;\n}\nexport function compareMaybeSync(left: Json, right: Json, budget: Budget): number | Promise<number> {\n if (budget.needsYield()) return compare(left, right, budget);\n budget.step();\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 stringCompareMaybeSync(left, right, budget);\n if (left === right && !Array.isArray(left) && !isObject(left)) return 0;\n if (Array.isArray(left) && Array.isArray(right)) {\n const len = Math.min(left.length, right.length);\n for (let index = 0; index < len; index++) {\n const r = compareMaybeSync(left[index]!, right[index]!, budget);\n if (typeof r !== \"number\") return compare(left, right, budget);\n if (r !== 0) return r;\n }\n return Math.sign(left.length - right.length);\n }\n return compare(left, right, budget);\n}\nexport async function compare(left: Json, right: Json, budget: Budget): Promise<number> {\n { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(2); if (_p) await _p; }\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 { const _p = budget.tickSync(2); if (_p) await _p; }\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\" && utf8ByteLength(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.isFinite(numberValue(start)))) throw new JqError(\"slice start must be a finite number or null\");\n if (end !== null && (!isNumber(end) || !Number.isFinite(numberValue(end)))) throw new JqError(\"slice end must be a finite number or null\");\n budget.signal.throwIfAborted();\n let first = start === null ? 0 : Math.floor(numberValue(start));\n let last = end === null ? undefined : Math.ceil(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 { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 || Number.isNaN(count)) return null;\n if (text === \"\") return \"\";\n if (!Number.isFinite(count) || utf8ByteLength(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 return splitString(left, right, budget);\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 { Budget, JqError, JqLimitError, type Json } from \"./limits.js\";\n\nexport async function splitString(input: Json, separator: Json, budget: Budget): Promise<string[]> {\n { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\n while (matched > 0 && separator[index] !== separator[matched]) {\n { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\n while (matched > 0 && input[index] !== separator[matched]) {\n { const _p = budget.tickSync(); if (_p) await _p; }\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 { utf8ByteLength } from \"./encoding.js\";\nimport { Budget, invalidateCachedValueMetrics, copyObject, hasCustomKeyOrder, isObject, JqHalt, JqError, JqLimitError, object, objectKeyIterator, objectKeys, put, remove as removeKey, truth, type Json } from \"./limits.js\";\nimport { Decimal, isNumber, numberValue, type Numeric } from \"./numbers.js\";\nimport { JqParseError, measureValue, parseJson, stringify } from \"./input.js\";\nimport type { Ast, BindingPattern } from \"./parser.js\";\nimport { formatValue } from \"./formats.js\";\nimport { scanRegex, substituteRegex } from \"./regex.js\";\nimport { splitString } from \"./split.js\";\nimport { indices } from \"./indices.js\";\nimport { fromDateIso8601, toDateIso8601 } from \"./dates.js\";\nimport { capture } from \"./capture.js\";\nimport { recurse } from \"./recurse.js\";\nimport { delpaths } from \"./delpaths.js\";\nimport { splitRegex } from \"./splits.js\";\nimport { binary, compare, compareMaybeSync, contains, describe, entries, equal, indexValue, sliceValue, sortedKeys, stableSort, type } from \"./values.js\";\n\ntype Path = (string | number | { start: number; end: number })[];\ninterface Frame { readonly name: string; readonly value: Json; readonly parent: Frame | undefined; readonly depth: number }\nconst deleted = Symbol(\"deleted\");\nconst NOT_SINGLE = Symbol(\"NOT_SINGLE\");\nconst EMPTY_RESULTS: Json[] = [];\nclass UserError extends JqError {\n constructor(readonly value: Json, message: string) { super(message); }\n}\nfunction exactFiniteNumber(value: Json): number | undefined {\n if (typeof value === \"number\") return Number.isFinite(value) ? value : undefined;\n if (value instanceof Decimal) {\n const d = value as Numeric & { digits: string; exponent: number; double: number };\n if (d.digits.length <= 15 && d.exponent === 0 && Number.isFinite(d.double)) return d.double;\n }\n return undefined;\n}\n\nfunction extractIteratePipeline(ast: Ast): { base: Ast; tail: Ast } | undefined {\n if (ast.kind === \"iterate\") {\n return { base: ast.base, tail: { kind: \"identity\" } };\n }\n if (ast.kind === \"binary\" && ast.operator === \"|\") {\n if (ast.left.kind === \"iterate\") {\n return { base: ast.left.base, tail: ast.right };\n }\n const inner = extractIteratePipeline(ast.left);\n if (inner) {\n return {\n base: inner.base,\n tail: { kind: \"binary\", operator: \"|\", left: inner.tail, right: ast.right },\n };\n }\n }\n return undefined;\n}\n\nexport class Interpreter {\n private _filters: Map<Ast, { ast: Ast; scope: Interpreter }> | undefined;\n private _labels: Map<symbol, number> | undefined;\n private get filters(): Map<Ast, { ast: Ast; scope: Interpreter }> {\n return this._filters ??= new Map();\n }\n private get labels(): Map<symbol, number> {\n return this._labels ??= new Map();\n }\n private labelSequence = { next: 0 };\n private readonly singleResult: [Json] = [null];\n private scratchObj: Record<string, Json> = object();\n private readonly scratchKeys: string[] = [];\n private scratchInUse = false;\n constructor(readonly budget: Budget, readonly variables: ReadonlyMap<string, Json>, private readonly frame?: Frame) {}\n resetForRun(budget: Budget, variables: ReadonlyMap<string, Json>): void {\n (this as unknown as { budget: Budget }).budget = budget;\n (this as unknown as { variables: ReadonlyMap<string, Json> }).variables = variables;\n this._filters?.clear();\n this._labels?.clear();\n this.labelSequence.next = 0;\n this.scratchInUse = false;\n }\n releaseScratch(): void {\n this.scratchInUse = false;\n }\n getScratchKeys(value: Json): readonly string[] | undefined {\n return value === this.scratchObj ? this.scratchKeys : undefined;\n }\n tryRunSync(ast: Ast, input: Json): Json[] | undefined {\n const savedSteps = this.budget.currentSteps;\n const res = this.tryRunSyncInternal(ast, input, true);\n if (res === undefined) this.budget.restoreSteps(savedSteps);\n return res;\n }\n tryRunSyncNoScratch(ast: Ast, input: Json): Json[] | undefined {\n if (!this.budget.unlimitedValueCheck) return undefined;\n const savedSteps = this.budget.currentSteps;\n const res = this.tryRunSyncInternal(ast, input, false);\n if (res === undefined) {\n this.budget.restoreSteps(savedSteps);\n return undefined;\n }\n return res === this.singleResult ? [res[0]!] : res;\n }\n private tryRunSyncInternal(ast: Ast, input: Json, allowScratch: boolean): Json[] | undefined {\n if (this.budget.needsYield()) return undefined;\n if (!allowScratch && ast.kind === \"iterate\") {\n this.budget.step();\n const base = this.tryEvalSingle(ast.base, input, 0, false);\n if (base === NOT_SINGLE || !Array.isArray(base)) return undefined;\n this.budget.step(base.length);\n if (this.budget.needsYield()) return undefined;\n return base;\n }\n if (ast.kind === \"binary\" && ast.operator === \"|\") {\n this.budget.step();\n if (ast.left.kind === \"call\" && ast.left.name === \"select\" && ast.left.args.length === 1) {\n this.budget.step();\n const cond = this.tryEvalSingle(ast.left.args[0]!, input, 0, allowScratch);\n if (cond === NOT_SINGLE) return undefined;\n if (!truth(cond)) return EMPTY_RESULTS;\n return this.tryRunSyncInternal(ast.right, input, allowScratch);\n }\n const leftResults = this.tryRunSyncInternal(ast.left, input, allowScratch);\n if (!leftResults) return undefined;\n if (leftResults.length === 0) return EMPTY_RESULTS;\n if (leftResults.length === 1) return this.tryRunSyncInternal(ast.right, leftResults[0]!, allowScratch);\n if (allowScratch) return undefined;\n const out: Json[] = [];\n for (const item of leftResults) {\n if (this.budget.needsYield()) return undefined;\n const rightResults = this.tryRunSyncInternal(ast.right, item, false);\n if (!rightResults) return undefined;\n out.push(...rightResults);\n }\n return out;\n }\n if (ast.kind === \"call\" && ast.name === \"select\" && ast.args.length === 1) {\n this.budget.step();\n const cond = this.tryEvalSingle(ast.args[0]!, input, 0, allowScratch);\n if (cond === NOT_SINGLE) return undefined;\n if (!truth(cond)) return EMPTY_RESULTS;\n this.singleResult[0] = input;\n return this.singleResult;\n }\n const single = this.tryEvalSingle(ast, input, 0, allowScratch);\n if (single !== NOT_SINGLE) {\n this.singleResult[0] = single;\n return this.singleResult;\n }\n return undefined;\n }\n private tryEvalSingle(ast: Ast, input: Json, depth = 0, allowScratch = true): Json | typeof NOT_SINGLE {\n if (this.budget.needsYield()) return NOT_SINGLE;\n switch (ast.kind) {\n case \"identity\":\n this.budget.step();\n return input;\n case \"literal\":\n this.budget.step();\n return ast.value;\n case \"index\": {\n this.budget.step();\n const idx = this.tryEvalSingle(ast.index, input, depth + 1, allowScratch);\n if (idx === NOT_SINGLE) return NOT_SINGLE;\n const base = this.tryEvalSingle(ast.base, input, depth + 1, allowScratch);\n if (base === NOT_SINGLE) return NOT_SINGLE;\n if (typeof idx === \"string\") {\n if (!(base === null || isObject(base))) return NOT_SINGLE;\n return base === null ? null : Object.hasOwn(base, idx) ? base[idx]! : null;\n }\n const numIdx = exactFiniteNumber(idx);\n if (numIdx !== undefined && Number.isInteger(numIdx) && (base === null || Array.isArray(base))) {\n if (base === null) return null;\n const resolved = numIdx < 0 ? base.length + numIdx : numIdx;\n return resolved >= 0 && resolved < base.length ? base[resolved]! : null;\n }\n return NOT_SINGLE;\n }\n case \"binary\": {\n this.budget.step();\n const op = ast.operator;\n if (op === \"|\") {\n const leftVal = this.tryEvalSingle(ast.left, input, depth + 1, false);\n if (leftVal === NOT_SINGLE) return NOT_SINGLE;\n return this.tryEvalSingle(ast.right, leftVal, depth + 1, allowScratch);\n }\n if (op === \"and\" || op === \"or\") {\n const left = this.tryEvalSingle(ast.left, input, depth + 1, allowScratch);\n if (left === NOT_SINGLE) return NOT_SINGLE;\n if (op === \"and\" && !truth(left)) return false;\n if (op === \"or\" && truth(left)) return true;\n const right = this.tryEvalSingle(ast.right, input, depth + 1, allowScratch);\n if (right === NOT_SINGLE) return NOT_SINGLE;\n return truth(right);\n }\n if (op === \"==\" || op === \"!=\") {\n const rightVal = this.tryEvalSingle(ast.right, input, depth + 1, allowScratch);\n if (rightVal === NOT_SINGLE) return NOT_SINGLE;\n const leftVal = this.tryEvalSingle(ast.left, input, depth + 1, allowScratch);\n if (leftVal === NOT_SINGLE) return NOT_SINGLE;\n if (\n typeof rightVal === \"boolean\" ||\n typeof rightVal === \"string\" ||\n rightVal === null ||\n typeof leftVal === \"boolean\" ||\n typeof leftVal === \"string\" ||\n leftVal === null\n ) {\n this.budget.step();\n return op === \"==\" ? leftVal === rightVal : leftVal !== rightVal;\n }\n const right = exactFiniteNumber(rightVal);\n if (right === undefined) return NOT_SINGLE;\n const left = exactFiniteNumber(leftVal);\n if (left === undefined) return NOT_SINGLE;\n this.budget.step();\n return op === \"==\" ? left === right : left !== right;\n }\n if (op === \"+\" || op === \"-\" || op === \"*\" || op === \"==\" || op === \"!=\" || op === \"<\" || op === \"<=\" || op === \">\" || op === \">=\") {\n const rightVal = this.tryEvalSingle(ast.right, input, depth + 1, allowScratch);\n if (rightVal === NOT_SINGLE) return NOT_SINGLE;\n if (op === \"+\" && typeof rightVal === \"string\") {\n const leftVal = this.tryEvalSingle(ast.left, input, depth + 1, allowScratch);\n if (typeof leftVal !== \"string\") return NOT_SINGLE;\n this.budget.step();\n const res = leftVal + rightVal;\n this.budget.value(res);\n return res;\n }\n const right = exactFiniteNumber(rightVal);\n if (right === undefined) return NOT_SINGLE;\n const leftVal = this.tryEvalSingle(ast.left, input, depth + 1, allowScratch);\n if (leftVal === NOT_SINGLE) return NOT_SINGLE;\n const left = exactFiniteNumber(leftVal);\n if (left === undefined) return NOT_SINGLE;\n let res: Json;\n if (op === \"+\") res = left + right;\n else if (op === \"-\") res = left - right;\n else if (op === \"*\") res = left * right;\n else if (op === \"==\") res = left === right;\n else if (op === \"!=\") res = left !== right;\n else if (op === \"<\") res = left < right;\n else if (op === \"<=\") res = left <= right;\n else if (op === \">\") res = left > right;\n else res = left >= right;\n this.budget.step();\n return res;\n }\n return NOT_SINGLE;\n }\n case \"object\": {\n this.budget.step();\n const canScratch = allowScratch && depth === 0 && !this.scratchInUse;\n let result = canScratch ? this.scratchObj : object();\n const sKeys = this.scratchKeys;\n let shapeMatch = canScratch && sKeys.length === ast.fields.length;\n if (canScratch && !shapeMatch && sKeys.length > 0) {\n result = this.scratchObj = object();\n sKeys.length = 0;\n }\n for (let i = 0; i < ast.fields.length; i++) {\n const f = ast.fields[i]!;\n const key = this.tryEvalSingle(f.key, input, depth + 1, allowScratch);\n if (typeof key !== \"string\") return NOT_SINGLE;\n let val: Json | typeof NOT_SINGLE;\n if (f.value) {\n val = this.tryEvalSingle(f.value, input, depth + 1, allowScratch);\n } else if (input === null || isObject(input)) {\n val = input === null ? null : Object.hasOwn(input, key) ? input[key]! : null;\n } else {\n return NOT_SINGLE;\n }\n if (val === NOT_SINGLE) return NOT_SINGLE;\n if (shapeMatch && sKeys[i] !== key) {\n shapeMatch = false;\n const fresh = object();\n for (let k = 0; k < i; k++) put(fresh, sKeys[k]!, result[sKeys[k]!]!);\n result = fresh;\n if (canScratch) { this.scratchObj = result; sKeys.length = i; }\n }\n // The serializer consumes this ordered unique list, including special keys.\n if (!shapeMatch && canScratch && !Object.hasOwn(result, key)) sKeys.push(key);\n const kFirst = key.charCodeAt(0);\n if (kFirst >= 48 && kFirst <= 57 || key === \"__proto__\" || hasCustomKeyOrder(result)) {\n put(result, key, val);\n } else {\n result[key] = val;\n }\n }\n if (canScratch) { this.scratchInUse = true; invalidateCachedValueMetrics(result); }\n this.budget.checkValue(result);\n return result;\n }\n case \"call\": {\n if (ast.args.length === 0 && !this.filters.has(ast)) {\n const name = ast.name;\n if (name === \"ascii_downcase\" || name === \"ascii_upcase\") {\n if (typeof input !== \"string\") return NOT_SINGLE;\n this.budget.step(input.length + 1);\n if (this.budget.needsYield()) return NOT_SINGLE;\n let result = \"\";\n const lower = name === \"ascii_downcase\";\n for (let index = 0; index < input.length; index++) {\n const code = input.charCodeAt(index);\n result += String.fromCharCode(code >= (lower ? 65 : 97) && code <= (lower ? 90 : 122) ? code + (lower ? 32 : -32) : code);\n }\n this.budget.value(result);\n return result;\n }\n if (name === \"not\") {\n this.budget.step();\n return !truth(input);\n }\n if (name === \"type\") {\n this.budget.step();\n return type(input);\n }\n if (name === \"length\") {\n if (Array.isArray(input)) {\n this.budget.step();\n return input.length;\n }\n if (input === null) {\n this.budget.step();\n return 0;\n }\n if (typeof input === \"string\") {\n this.budget.step(input.length + 1);\n let len = input.length;\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n if (c >= 0xd800 && c <= 0xdbff) len--;\n }\n return len;\n }\n if (isObject(input)) {\n const keys = Object.keys(input);\n this.budget.step(keys.length + 1);\n return keys.length;\n }\n return NOT_SINGLE;\n }\n if (name === \"add\" && Array.isArray(input)) {\n if (input.length === 0) {\n this.budget.step();\n return null;\n }\n const first = input[0]!;\n if (typeof first !== \"number\" || !Number.isSafeInteger(first) || Object.is(first, -0)) return NOT_SINGLE;\n let sum = first;\n for (let i = 1; i < input.length; i++) {\n const n = input[i]!;\n if (typeof n !== \"number\" || !Number.isSafeInteger(n) || Object.is(n, -0)) return NOT_SINGLE;\n sum += n;\n if (!Number.isSafeInteger(sum)) return NOT_SINGLE;\n }\n this.budget.step(input.length + 1);\n if (this.budget.needsYield()) return NOT_SINGLE;\n return sum;\n }\n }\n if (ast.args.length === 1 && !this.filters.has(ast) && Array.isArray(input)) {\n const name = ast.name;\n if (name === \"map\") {\n this.budget.step(input.length + 1);\n if (this.budget.needsYield()) return NOT_SINGLE;\n const out: Json[] = [];\n let bytes = 2;\n for (let i = 0; i < input.length; i++) {\n const mappedList = this.tryRunSyncInternal(ast.args[0]!, input[i]!, false);\n if (!mappedList) return NOT_SINGLE;\n for (let j = 0; j < mappedList.length; j++) {\n const m = mappedList[j]!;\n bytes += this.budget.value(m) + 1;\n if (bytes - 1 > this.budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n this.budget.collection(out.length + 1);\n out.push(m);\n }\n }\n this.budget.value(out);\n return out;\n }\n if (name === \"group_by\" || name === \"sort_by\") {\n this.budget.step(input.length + 1);\n if (this.budget.needsYield()) return NOT_SINGLE;\n if (input.length === 0) return [];\n const keyed: { key: string | number; value: Json; idx: number }[] = [];\n let keyType: \"string\" | \"number\" | undefined;\n let keyBytes = 0;\n for (let i = 0; i < input.length; i++) {\n const val = input[i]!;\n const k = this.tryEvalSingle(ast.args[0]!, val, depth + 1, false);\n if (k === NOT_SINGLE) return NOT_SINGLE;\n if (typeof k === \"string\") {\n if (keyType === undefined) keyType = \"string\";\n else if (keyType !== \"string\") return NOT_SINGLE;\n keyBytes += this.budget.value(k);\n if (keyBytes > this.budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n keyed.push({ key: k, value: val, idx: i });\n } else {\n const nk = exactFiniteNumber(k);\n if (nk === undefined) return NOT_SINGLE;\n if (keyType === undefined) keyType = \"number\";\n else if (keyType !== \"number\") return NOT_SINGLE;\n keyBytes += this.budget.value(k);\n if (keyBytes > this.budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n keyed.push({ key: nk, value: val, idx: i });\n }\n }\n keyed.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : a.idx - b.idx));\n if (name === \"sort_by\") {\n const res = keyed.map(x => x.value);\n this.budget.value(res);\n return res;\n }\n const groups: Json[][] = [];\n let prevKey: string | number | undefined;\n for (let i = 0; i < keyed.length; i++) {\n const item = keyed[i]!;\n if (prevKey === undefined || item.key !== prevKey) groups.push([]);\n groups[groups.length - 1]!.push(item.value);\n prevKey = item.key;\n }\n this.budget.value(groups);\n return groups;\n }\n }\n return NOT_SINGLE;\n }\n default:\n return NOT_SINGLE;\n }\n }\n private binding(name: string, value: Json): Interpreter {\n const depth = (this.frame?.depth ?? 0) + 1;\n if (depth > this.budget.limits.maxAstDepth) throw new JqLimitError(\"maxAstDepth\");\n const scope = Object.create(Interpreter.prototype) as Interpreter;\n Object.assign(scope, this, { frame: { name, value, parent: this.frame, depth } });\n return scope;\n }\n private async *matchPattern(pattern: BindingPattern, value: Json, keyScope: Interpreter): AsyncGenerator<Interpreter> {\n { const _p = this.budget.tickSync(); if (_p) await _p; }\n if (pattern.kind === \"variable\") {\n const scope = this.binding(pattern.name, value);\n if (pattern.pattern) yield* scope.matchPattern(pattern.pattern, value, keyScope);\n else yield scope;\n return;\n }\n const fields = pattern.fields;\n const matchFields = async function* (scope: Interpreter, index: number): AsyncGenerator<Interpreter> {\n if (index === fields.length) { yield scope; return; }\n const field = fields[index]!;\n for await (const key of keyScope.run(field.key, value)) {\n for await (const matched of scope.matchPattern(field.pattern, indexValue(value, key), keyScope)) {\n yield* matchFields(matched, index + 1);\n }\n }\n };\n yield* matchFields(this, 0);\n }\n async collect(ast: Ast, input: Json): Promise<Json[]> {\n const _w = this.budget.ensureFreshWindow();\n if (_w) await _w;\n if (this.budget.unlimitedValueCheck) {\n const iterPipe = extractIteratePipeline(ast);\n if (iterPipe) {\n const savedSteps = this.budget.currentSteps;\n const baseVal = this.tryEvalSingle(iterPipe.base, input, 0, false);\n if (baseVal !== NOT_SINGLE && Array.isArray(baseVal)) {\n this.budget.step();\n const result: Json[] = [];\n for (let i = 0; i < baseVal.length; i++) {\n const _p = this.budget.tickSync();\n if (_p) await _p;\n const itemRes = this.tryRunSyncNoScratch(iterPipe.tail, baseVal[i]!);\n if (itemRes !== undefined) {\n for (let j = 0; j < itemRes.length; j++) {\n result.push(itemRes[j]!);\n }\n } else {\n for await (const value of this.run(iterPipe.tail, baseVal[i]!)) {\n result.push(value);\n }\n }\n }\n this.budget.collection(result.length);\n this.budget.value(result);\n return result;\n }\n this.budget.restoreSteps(savedSteps);\n }\n }\n const syncResult = this.tryRunSyncNoScratch(ast, input);\n if (syncResult !== undefined) {\n this.budget.collection(syncResult.length);\n this.budget.value(syncResult);\n return syncResult;\n }\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 const p = this.budget.tickSync();\n if (p) await p;\n switch (ast.kind) {\n case \"parameter\": {\n const filter = this.filters.get(ast)!;\n yield* filter.scope.run(filter.ast, input); return;\n }\n case \"invoke\": yield* this.invocation(ast).run(ast.body, input); return;\n case \"label\": {\n const target = this.labelSequence.next++;\n const labels = new Map(this.labels);\n labels.set(ast.target, target);\n const scope = Object.create(Interpreter.prototype) as Interpreter;\n Object.assign(scope, this, { _labels: labels });\n try { yield* scope.run(ast.body, input); }\n catch (error) {\n // jq exposes this value to catch handlers, which may rethrow it with error(.).\n if (this.budget.signal.aborted || !(error instanceof UserError) || !equal(error.value, { __jq: target }, this.budget)) throw error;\n }\n return;\n }\n case \"break\": throw new UserError({ __jq: this.labels.get(ast.target)! }, \"break\");\n case \"format\": yield await formatValue(ast.name, input, this.budget); return;\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 { const _p = this.budget.tickSync(); if (_p) await _p; }\n if (frame.name === ast.name) { yield frame.value; return; }\n }\n yield this.variables.get(ast.name)!; return;\n }\n case \"bind\": {\n const depth = (this.frame?.depth ?? 0) + 1;\n if (depth > this.budget.limits.maxAstDepth) throw new JqLimitError(\"maxAstDepth\");\n for await (const value of this.run(ast.source, input)) {\n // Extend the lexical frame while retaining the invocation's execution context.\n const scope = Object.create(Interpreter.prototype) as Interpreter;\n Object.assign(scope, this, { frame: { name: ast.name, value, parent: this.frame, depth } });\n yield* scope.run(ast.body, input);\n }\n return;\n }\n case \"destructure\": {\n for await (const value of this.run(ast.source, input)) {\n for (let index = 0; index < ast.patterns.length; index++) {\n try {\n const scope = ast.names.reduce<Interpreter>((parent, name) => parent.binding(name, null), this);\n for await (const matched of scope.matchPattern(ast.patterns[index]!, value, this)) {\n yield* matched.run(ast.body, input);\n }\n break;\n } catch (error) {\n if (!(error instanceof JqError) || error instanceof JqLimitError || this.budget.signal.aborted || index === ast.patterns.length - 1) throw error;\n }\n }\n }\n 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 instanceof UserError ? error.value : 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 { const _p = this.budget.tickSync(); if (_p) await _p; }\n const scope = Object.create(Interpreter.prototype) as Interpreter;\n Object.assign(scope, this, { frame: { 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 { const _p = this.budget.tickSync(); if (_p) await _p; }\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)) {\n if (isObject(index) && (base === null || Array.isArray(base) || typeof base === \"string\") || Array.isArray(base) && Array.isArray(index)) {\n yield await indices(base, index, this.budget);\n } else {\n yield indexValue(base, index);\n }\n }\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)) {\n { const _p = this.budget.tickSync(); if (_p) await _p; }\n yield await sliceValue(base, isNumber(start) && Number.isNaN(numberValue(start)) ? null : start, isNumber(end) && Number.isNaN(numberValue(end)) ? null : end, this.budget);\n }\n return;\n case \"iterate\": {\n if (this.budget.unlimitedValueCheck) {\n const savedSteps = this.budget.currentSteps;\n const baseVal = this.tryEvalSingle(ast.base, input, 0, false);\n if (baseVal !== NOT_SINGLE && Array.isArray(baseVal)) {\n this.budget.step();\n for (let i = 0; i < baseVal.length; i++) {\n const _p = this.budget.tickSync();\n if (_p) await _p;\n yield baseVal[i]!;\n }\n return;\n }\n this.budget.restoreSteps(savedSteps);\n }\n for await (const base of this.run(ast.base, input)) for await (const [, value] of entries(base, this.budget)) { { const _p = this.budget.tickSync(); if (_p) await _p; } yield value; }\n return;\n }\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 === \"|\") {\n if (this.budget.unlimitedValueCheck) {\n const iterPipe = extractIteratePipeline(ast);\n if (iterPipe) {\n const savedSteps = this.budget.currentSteps;\n const baseVal = this.tryEvalSingle(iterPipe.base, input, 0, false);\n if (baseVal !== NOT_SINGLE && Array.isArray(baseVal)) {\n this.budget.step();\n for (let i = 0; i < baseVal.length; i++) {\n const _p = this.budget.tickSync();\n if (_p) await _p;\n const itemRes = this.tryRunSyncNoScratch(iterPipe.tail, baseVal[i]!);\n if (itemRes !== undefined) {\n for (let j = 0; j < itemRes.length; j++) {\n yield itemRes[j]!;\n }\n } else {\n yield* this.run(iterPipe.tail, baseVal[i]!);\n }\n }\n return;\n }\n this.budget.restoreSteps(savedSteps);\n }\n }\n for await (const value of this.run(ast.left, input)) {\n if (this.budget.unlimitedValueCheck) {\n const itemRes = this.tryRunSyncNoScratch(ast.right, value);\n if (itemRes !== undefined) {\n for (let j = 0; j < itemRes.length; j++) yield itemRes[j]!;\n continue;\n }\n }\n yield* this.run(ast.right, value);\n }\n return;\n }\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 { const _p = this.budget.tickSync(); if (_p) await _p; }\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 | undefined }, 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 field.value ? this.run(field.value, input) : [indexValue(input, key)]) {\n const item = copyObject(previous); put(item, key, value);\n this.budget.value(item); yield item;\n }\n }\n }\n invocation(ast: Extract<Ast, { kind: \"invoke\" }>): Interpreter {\n const scope = Object.create(Interpreter.prototype) as Interpreter;\n const filters = new Map(this.filters);\n for (let index = 0; index < ast.parameters.length; index++) {\n this.budget.step();\n filters.set(ast.parameters[index]!, { ast: ast.args[index]!, scope: this });\n }\n Object.assign(scope, this, { _filters: filters });\n return scope;\n }\n async read(input: Json, path: Path): Promise<Json> {\n for (const key of path) {\n { const _p = this.budget.tickSync(); if (_p) await _p; }\n input = typeof key === \"object\" ? await sliceValue(input, key.start, key.end, this.budget) : indexValue(input, key);\n }\n return input;\n }\n async *paths(ast: Ast, input: Json, depth = 0): AsyncGenerator<Path> {\n { const _p = this.budget.tickSync(); if (_p) await _p; }\n if (depth > this.budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n if (ast.kind === \"parameter\") {\n const filter = this.filters.get(ast)!;\n yield* filter.scope.paths(filter.ast, input); return;\n }\n if (ast.kind === \"invoke\") { yield* this.invocation(ast).paths(ast.body, input); return; }\n if (ast.kind === \"bind\") {\n for await (const value of this.run(ast.source, input)) yield* this.binding(ast.name, value).paths(ast.body, input, depth);\n return;\n }\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 === \"optional\") {\n try { yield* this.paths(ast.operand, input); }\n catch (error) { if (!(error instanceof JqError) || error instanceof JqLimitError || this.budget.signal.aborted) throw error; }\n return;\n }\n if (ast.kind === \"binary\" && ast.operator === \"|\") {\n for await (const prefix of this.paths(ast.left, input))\n for await (const suffix of this.paths(ast.right, await this.read(input, prefix))) yield [...prefix, ...suffix];\n return;\n }\n if (ast.kind === \"call\" && [\"select\", \"values\", \"strings\", \"numbers\", \"booleans\", \"arrays\", \"objects\", \"nulls\", \"scalars\", \"iterables\", \"empty\"].includes(ast.name)) { for await (const value of this.run(ast, input)) { void value; yield []; } return; }\n if (ast.kind === \"descend\") {\n yield [];\n if (Array.isArray(input) || isObject(input)) for await (const [key, value] of entries(input, this.budget))\n for await (const suffix of this.paths(ast, value, depth + 1)) {\n this.budget.collection(suffix.length + 1);\n if (suffix.length + 1 > this.budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n yield [key, ...suffix];\n }\n return;\n }\n if (ast.kind === \"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 path of this.paths(ast.base, input)) {\n const base = await this.read(input, path);\n await sliceValue(base, isNumber(start) && Number.isNaN(numberValue(start)) ? null : start, isNumber(end) && Number.isNaN(numberValue(end)) ? null : end, this.budget);\n if (base !== null && !Array.isArray(base)) throw new JqError(\"slice assignment requires an array\");\n const length = base === null ? 0 : base.length;\n let first = start === null || (isNumber(start) && Number.isNaN(numberValue(start))) ? 0 : Math.floor(numberValue(start as Numeric));\n let last = end === null || (isNumber(end) && Number.isNaN(numberValue(end))) ? length : Math.ceil(numberValue(end as Numeric));\n first = Math.max(0, Math.min(length, first < 0 ? length + first : first));\n last = Math.max(first, Math.min(length, last < 0 ? length + last : last));\n yield [...path, { start: first, end: last }];\n }\n return;\n }\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 const base = await this.read(input, path);\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 const base = await this.read(input, path);\n for await (const [key] of entries(base, this.budget)) { { const _p = this.budget.tickSync(); if (_p) await _p; } yield [...path, key]; }\n }\n }\n async set(input: Json, path: Path, value: Json | typeof deleted, depth = 0): Promise<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 if (typeof key === \"object\") {\n if (input !== null && !Array.isArray(input)) throw new JqError(\"slice assignment requires an array\");\n const array = input === null ? [] : input;\n const replacement = await this.set(array.slice(key.start, key.end), path, value, depth + 1);\n if (!(value === deleted && depth === path.length - 1) && !Array.isArray(replacement)) throw new JqError(\"slice assignment requires an array value\");\n const items = value === deleted && depth === path.length - 1 ? [] : replacement as Json[];\n this.budget.collection(array.length - (key.end - key.start) + items.length);\n return [...array.slice(0, key.start), ...items, ...array.slice(key.end)];\n }\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, await 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 length = input === null ? 0 : input.length;\n const size = remove ? Math.max(0, length - 1) : Math.max(length, key + 1);\n this.budget.collection(size);\n // Assignment must remain bounded even when callers omit family limits.\n if (!Number.isSafeInteger(size) || size > 1000000) throw new JqLimitError(\"maxCollectionSize\");\n const padding = remove ? 0 : Math.max(0, key - length);\n const minimumBytes = size ? 2 * size + 1 + 3 * padding : 2;\n if (minimumBytes > Math.min(this.budget.limits.maxValueBytes, 16 * 1024 * 1024)) throw new JqLimitError(\"maxValueBytes\");\n const result: Json[] = [];\n if (input !== null) for (const item of input) { { const _p = this.budget.tickSync(); if (_p) await _p; } result.push(item); }\n if (remove) { if (key < result.length) result.splice(key, 1); }\n else {\n while (result.length <= key) { { const _p = this.budget.tickSync(); if (_p) await _p; } result.push(null); }\n result[key] = await 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 const previous = await this.read(result, path);\n const assigned = operator === \"=\" ? value : operator === \"//=\" ? truth(previous) ? previous : value : await binary(operator.slice(0, -1), previous, value, this.budget);\n result = await 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 const previous = await this.read(result, path);\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 = await 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 = await 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 === \"walk\") {\n const evaluate = (value: Json) => this.run(args[0]!, value);\n async function* visit(value: Json): AsyncGenerator<Json> {\n { const _p = budget.tickSync(); if (_p) await _p; }\n let result = value;\n if (Array.isArray(value)) {\n const mapped: Json[] = [];\n for (const child of value) for await (const item of visit(child)) {\n budget.collection(mapped.length + 1);\n mapped.push(item);\n }\n result = mapped;\n } else if (isObject(value)) {\n const mapped = object();\n for (const key of objectKeyIterator(value)) for await (const item of visit(value[key]!)) {\n put(mapped, key, item);\n break;\n }\n result = mapped;\n }\n budget.value(result);\n yield* evaluate(result);\n }\n yield* visit(input);\n return;\n }\n if (name === \"fromdateiso8601\") { yield fromDateIso8601(input); return; }\n if (name === \"todateiso8601\") { yield toDateIso8601(input); return; }\n if (name === \"while\" || name === \"until\") {\n // Keep filter continuations explicitly: branching updates use depth-first\n // order, and consumers can stop before evaluating later branches.\n const step = async function* (this: Interpreter, value: Json): AsyncGenerator<{ value: Json; emit: boolean }> {\n for await (const condition of this.run(args[0]!, value)) {\n const satisfied = truth(condition);\n if (name === \"until\" && satisfied) yield { value, emit: true };\n else if (name === \"until\" || satisfied) {\n if (name === \"while\") yield { value, emit: true };\n for await (const next of this.run(args[1]!, value)) yield { value: next, emit: false };\n }\n }\n }.bind(this);\n const stack = [step(input)];\n try {\n while (stack.length) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const next = await stack.at(-1)!.next();\n if (next.done) { stack.pop(); continue; }\n if (next.value.emit) yield next.value.value;\n else {\n budget.collection(stack.length + 1);\n stack.push(step(next.value.value));\n }\n }\n } finally {\n while (stack.length) await stack.pop()!.return(undefined);\n }\n return;\n }\n if (name === \"scan\") {\n for await (const source of this.run(args[0]!, input)) yield* scanRegex(input, source, budget);\n return;\n }\n if (name === \"recurse\") { yield* recurse(this, args, input); return; }\n if (name === \"capture\") {\n for await (const pattern of this.run(args[0]!, input)) {\n if (args[1]) {\n for await (const flags of this.run(args[1], input)) yield* capture(input, pattern, flags, budget);\n } else if (typeof pattern === \"string\") yield* capture(input, pattern, null, budget);\n else if (Array.isArray(pattern) && pattern.length) yield* capture(input, pattern[0]!, pattern[1] ?? null, budget);\n else throw new JqError(`${type(pattern)} not a string or array`);\n }\n return;\n }\n if (name === \"delpaths\") {\n for await (const paths of this.run(args[0]!, input)) {\n const result = await delpaths(input, paths, budget);\n budget.value(result);\n yield result;\n }\n return;\n }\n if (name === \"setpath\") {\n for await (const value of this.run(args[1]!, input)) {\n for await (const candidate of this.run(args[0]!, input)) {\n if (!Array.isArray(candidate)) throw new JqError(\"Path must be specified as an array\");\n const path: Path = [];\n let base = input;\n for (const component of candidate) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n budget.collection(path.length + 1);\n // Read each old value before normalizing relative array indexes.\n const previous = indexValue(base, component);\n let key: string | number;\n if (typeof component === \"string\") key = component;\n else {\n if (!isNumber(component)) throw new JqError(`Cannot index ${type(base)} with ${type(component)}`);\n key = Math.trunc(numberValue(component));\n if (key < 0) key += Array.isArray(base) ? base.length : 0;\n if (key < 0) throw new JqError(\"Out of bounds negative array index\");\n }\n path.push(key);\n base = previous;\n }\n const result = await this.set(input, path, value);\n budget.value(result);\n yield result;\n }\n }\n return;\n }\n if (name === \"getpath\") {\n for await (const path of this.run(args[0]!, input)) {\n if (!Array.isArray(path)) throw new JqError(\"Path must be specified as an array\");\n let value = input;\n for (const key of path) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (isObject(key) && (value === null || Array.isArray(value) || typeof value === \"string\")) {\n if (value === null) continue;\n const start = Object.hasOwn(key, \"start\") ? key.start! : undefined;\n const end = Object.hasOwn(key, \"end\") ? key.end! : undefined;\n if ((start !== null && (!isNumber(start) || !Number.isFinite(numberValue(start))))\n || (end !== null && (!isNumber(end) || !Number.isFinite(numberValue(end))))) {\n throw new JqError(\"Array/string slice indices must be integers\");\n }\n value = await sliceValue(value, start, end, budget);\n } else value = indexValue(value, key);\n }\n yield value;\n }\n return;\n }\n if (name === \"flatten\") {\n for await (const depth of args.length ? this.run(args[0]!, input) : [Infinity]) {\n if (!isNumber(depth) || numberValue(depth) < 0 || Number.isNaN(numberValue(depth))) throw new JqError(\"flatten depth must be nonnegative\");\n const result: Json[] = [];\n const stack = [{ iterator: entries(input, budget), depth: numberValue(depth) }];\n while (stack.length) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const frame = stack.at(-1)!;\n const next = await frame.iterator.next();\n if (next.done) { stack.pop(); continue; }\n const value = next.value[1];\n if (Array.isArray(value) && frame.depth !== 0) stack.push({ iterator: entries(value, budget), depth: frame.depth - 1 });\n else { budget.collection(result.length + 1); result.push(value); }\n }\n budget.value(result); yield result;\n }\n return;\n }\n if (name === \"paths\") {\n if (!Array.isArray(input) && !isObject(input)) return;\n const stack = [{ iterator: entries(input, budget), path: [] as Json[] }];\n while (stack.length) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const frame = stack.at(-1)!;\n const next = await frame.iterator.next();\n if (next.done) { stack.pop(); continue; }\n const [key, value] = next.value;\n const depth = frame.path.length + 1;\n if (depth > budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n budget.collection(depth);\n const path = [...frame.path, key];\n budget.value(path);\n if (args.length) {\n for await (const selected of this.run(args[0]!, value)) if (truth(selected)) yield path;\n } else yield path;\n if (Array.isArray(value) || isObject(value)) stack.push({ iterator: entries(value, budget), path });\n }\n return;\n }\n if (name === \"del\") { yield* this.assign(args[0]!, { kind: \"call\", name: \"empty\", args: [] }, \"|=\", input); return; }\n if (name === \"halt\") throw new JqHalt(0, \"\");\n if (name === \"halt_error\") {\n for await (const code of args.length ? this.run(args[0]!, input) : [5]) {\n if (!isNumber(code)) throw new JqError(`${describe(input, budget)} halt_error/1: number required`);\n const stderr = input === null ? \"\" : typeof input === \"string\" ? input\n : `${await stringify(input, budget, { indent: \"\", ascii: false, color: false }, budget.limits.maxOutputBytes, \"maxOutputBytes\")}\\n`;\n if (budget.outputBytes + utf8ByteLength(stderr) > budget.limits.maxOutputBytes) throw new JqLimitError(\"maxOutputBytes\");\n // jq clamps negative statuses and the process exposes the low byte.\n const status = Math.max(0, Math.trunc(numberValue(code))) % 256;\n throw new JqHalt(status, stderr);\n }\n return;\n }\n if (name === \"error\") {\n for await (const value of args.length ? this.run(args[0]!, input) : [input]) {\n throw new UserError(value, typeof value === \"string\" ? value : await stringify(value, budget));\n }\n return;\n }\n if (name === \"indices\") {\n for await (const value of this.run(args[0]!, input)) yield await indices(input, value, budget);\n return;\n }\n if ([\"startswith\", \"endswith\", \"ltrimstr\", \"rtrimstr\"].includes(name)) {\n for await (const value of this.run(args[0]!, input)) {\n if (typeof input !== \"string\" || typeof value !== \"string\") {\n if (name === \"ltrimstr\" || name === \"rtrimstr\") { yield input; continue; }\n throw new JqError(`${name} requires strings`);\n }\n { const _p = budget.tickSync(input.length + value.length); if (_p) await _p; }\n const matches = name === \"startswith\" || name === \"ltrimstr\" ? input.startsWith(value) : input.endsWith(value);\n yield name === \"startswith\" || name === \"endswith\" ? matches : !matches || !value.length ? input : name === \"ltrimstr\" ? input.slice(value.length) : input.slice(0, -value.length);\n }\n return;\n }\n if (name === \"explode\" || name === \"utf8bytelength\") {\n if (typeof input !== \"string\") throw new JqError(name === \"explode\" ? \"explode input must be a string\" : `${describe(input, budget)} only strings have UTF-8 byte length`);\n const points: number[] = [];\n let bytes = 0;\n for (let offset = 0; offset < input.length;) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const point = input.codePointAt(offset)!;\n offset += point > 0xffff ? 2 : 1;\n if (name === \"explode\") {\n budget.collection(points.length + 1);\n bytes += String(point).length + (points.length ? 1 : 2);\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n points.push(point);\n } else bytes += point <= 0x7f ? 1 : point <= 0x7ff ? 2 : point <= 0xffff ? 3 : 4;\n }\n yield name === \"explode\" ? points : bytes;\n return;\n }\n if (name === \"ascii_downcase\" || name === \"ascii_upcase\") {\n if (typeof input !== \"string\") throw new JqError(`${name} requires a string`);\n { const _p = budget.tickSync(input.length); if (_p) await _p; }\n let result = \"\";\n const lower = name === \"ascii_downcase\";\n for (let index = 0; index < input.length; index++) {\n const code = input.charCodeAt(index);\n result += String.fromCharCode(code >= (lower ? 65 : 97) && code <= (lower ? 90 : 122) ? code + (lower ? 32 : -32) : code);\n }\n budget.value(result); yield result; return;\n }\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 === \"bsearch\") {\n for await (const target of this.run(args[0]!, input)) {\n for await (const length of this.run({ kind: \"call\", name: \"length\", args: [] }, input)) {\n let low = 0;\n let high = numberValue(length as Numeric);\n let found: number | undefined;\n while (low < high) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const middle = Math.floor((low + high - 1) / 2);\n const order = await compare(indexValue(input, middle), target, budget);\n if (order === 0) { found = middle; break; }\n if (order < 0) low = middle + 1;\n else high = middle;\n }\n yield found ?? -low - 1;\n }\n }\n return;\n }\n if (name === \"combinations\") {\n for await (const length of this.run({ kind: \"call\", name: \"length\", args: [] }, input)) {\n const width = Math.ceil(numberValue(length as Numeric));\n budget.collection(width);\n if (width === 0) { yield []; return; }\n const values: Json[] = [];\n const iterators: AsyncGenerator<[string | number, Json]>[] = [];\n let depth = 0;\n try {\n while (depth >= 0) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (!iterators[depth]) iterators[depth] = entries(indexValue(input, depth), budget);\n const next = await iterators[depth]!.next();\n if (next.done) {\n iterators.pop();\n values.pop();\n depth--;\n } else {\n values[depth] = next.value[1];\n if (depth + 1 === width) {\n budget.value(values);\n yield [...values];\n } else depth++;\n }\n }\n } finally {\n for (const iterator of iterators) await iterator.return(undefined);\n }\n }\n return;\n }\n if (name === \"transpose\") {\n let width = 0;\n for await (const [, row] of entries(input, budget)) {\n for await (const length of this.run({ kind: \"call\", name: \"length\", args: [] }, row)) {\n width = Math.max(width, numberValue(length as number));\n }\n }\n budget.collection(Math.ceil(width));\n const result: Json[] = [];\n let bytes = 2;\n for (let column = 0; column < width; column++) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const values: Json[] = [];\n bytes += 2 + (column ? 1 : 0);\n for await (const [, row] of entries(input, budget)) {\n const value = indexValue(row, column);\n bytes += budget.value(value) + (values.length ? 1 : 0);\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n budget.collection(values.length + 1);\n values.push(value);\n }\n result.push(values);\n }\n budget.value(result); yield result; return;\n }\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 { const _p = budget.tickSync(input.length); if (_p) await _p; }\n let length = 0;\n for (let offset = 0; offset < input.length; length++) {\n if (length % 32 === 0) { const _p = budget.tickSync(0); if (_p) await _p; }\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)) { { const _p = budget.tickSync(); if (_p) await _p; } void key; length++; }\n yield length;\n }\n else throw new JqError(`${describe(input, budget)} 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 { const _p = budget.tickSync(input.length); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 : utf8ByteLength(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 === \"inside\") {\n for await (const container of this.run(args[0]!, input)) {\n if (type(container) !== type(input) || (typeof input === \"boolean\" && container !== input)) throw new JqError(`${describe(container, budget)} and ${describe(input, budget)} cannot have their containment checked`);\n yield contains(container, input, budget);\n }\n 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 === \"gsub\") {\n for await (const pattern of this.run(args[0]!, input)) {\n for await (const flags of args[2] ? this.run(args[2], input) : [\"\"]) {\n yield* substituteRegex(input, pattern, flags, captures => this.run(args[1]!, captures), budget);\n }\n }\n return;\n }\n if (name === \"splits\") {\n for await (const separator of this.run(args[0]!, input)) {\n yield* splitRegex(input, separator, budget);\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; } 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)) { const _p = budget.tickSync(input.length); if (_p) await _p; }\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 { const _p = budget.tickSync(4); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(); if (_p) await _p; }\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 { const _p = budget.tickSync(input.length); if (_p) await _p; }\n await measureValue(input, budget);\n const result: Json[] = [];\n for (let index = input.length - 1; index >= 0; index--) { { const _p = budget.tickSync(0); if (_p) await _p; } result.push(input[index]!); }\n yield result; return;\n }\n if (name === \"add\") {\n let result: Json = null;\n for (const item of input) { { const _p = budget.tickSync(); if (_p) await _p; } 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 { const _p = budget.tickSync(); if (_p) await _p; } 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) => compareMaybeSync(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 { encoder, decoder, byteString, latin1Bytes } from \"./encoding.js\";\nimport { stringify } from \"./input.js\";\nimport { Budget, JqError, type Json } from \"./limits.js\";\nimport { isNumber } from \"./numbers.js\";\n\nexport async function formatValue(name: string, input: Json, budget: Budget): Promise<string> {\n const text = typeof input === \"string\" ? input : await stringify(input, budget);\n { const _p = budget.tickSync(text.length); if (_p) await _p; }\n let result: string;\n switch (name) {\n case \"text\": result = text; break;\n case \"json\": result = await stringify(input, budget); break;\n case \"base64\": result = btoa(byteString(encoder.encode(text))); break;\n case \"base64d\": {\n if (typeof input !== \"string\") throw new JqError(\"base64d requires a string\");\n const alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n const raw = input.endsWith(\"==\") ? input.slice(0, -2) : input.endsWith(\"=\") ? input.slice(0, -1) : input;\n if (raw.length % 4 === 1 || [...raw].some(character => !alphabet.includes(character))) throw new JqError(\"invalid base64 string\");\n result = decoder.decode(latin1Bytes(atob(raw))); break;\n }\n case \"uri\": {\n result = \"\";\n for (const byte of encoder.encode(text)) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const character = String.fromCharCode(byte);\n result += \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~\".includes(character) ? character : `%${byte.toString(16).toUpperCase().padStart(2, \"0\")}`;\n if (result.length > budget.limits.maxValueBytes) budget.text(result);\n }\n break;\n }\n case \"html\": {\n const escapes: Readonly<Record<string, string>> = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", \"'\": \"'\", '\"': \""\" };\n result = \"\";\n for (const character of text) { { const _p = budget.tickSync(); if (_p) await _p; } result += escapes[character] ?? character; if (result.length > budget.limits.maxValueBytes) budget.text(result); }\n break;\n }\n case \"csv\":\n case \"tsv\":\n case \"sh\": {\n if (name !== \"sh\" && !Array.isArray(input)) throw new JqError(`${name} requires an array`);\n const values = Array.isArray(input) ? input : [input];\n const fields: string[] = [];\n for (const value of values) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (value !== null && typeof value !== \"string\" && typeof value !== \"boolean\" && !isNumber(value)) throw new JqError(`${name} cannot format an object or array`);\n const scalar = typeof value === \"string\" ? value : await stringify(value, budget);\n if (name === \"sh\") fields.push(typeof value === \"string\" ? `'${scalar.split(\"'\").join(\"'\\\\''\")}'` : scalar);\n else if (value === null) fields.push(\"\");\n else if (name === \"csv\") fields.push(typeof value === \"string\" ? `\"${scalar.split('\"').join('\"\"')}\"` : scalar);\n else {\n let field = \"\";\n const escapes: Readonly<Record<string, string>> = { \"\\t\": \"\\\\t\", \"\\r\": \"\\\\r\", \"\\n\": \"\\\\n\", \"\\\\\": \"\\\\\\\\\" };\n for (const character of scalar) { { const _p = budget.tickSync(); if (_p) await _p; } field += escapes[character] ?? character; }\n fields.push(field);\n }\n budget.collection(fields.length);\n }\n result = fields.join(name === \"csv\" ? \",\" : name === \"tsv\" ? \"\\t\" : \" \"); break;\n }\n default: throw new JqError(`${name} is not a valid format`);\n }\n budget.text(result);\n return result;\n}\n", "import { utf8ByteLength } from \"./encoding.js\";\nimport { Pattern } from \"safe-bash-regex-engine/text/regex\";\nimport { ProgramError } from \"safe-bash-regex-engine/text/budget\";\nimport { Budget, JqError, JqLimitError, object, put, type Json } from \"./limits.js\";\nimport { describe } from \"./values.js\";\n\nexport async function* substituteRegex(input: Json, source: Json, flags: Json,\n replacement: (captures: Json) => AsyncIterable<Json>, budget: Budget): AsyncGenerator<Json> {\n if (typeof input !== \"string\") throw new JqError(`${describe(input, budget)} cannot be matched, as it is not a string`);\n if (typeof source !== \"string\") throw new JqError(`${describe(source, budget)} is not a string`);\n if (typeof flags !== \"string\" || [...flags].some(flag => !\"gimns\".includes(flag))) throw new JqError(`${typeof flags === \"string\" ? flags + \"g\" : describe(flags, budget)} is not a valid modifier string`);\n const work = { step: (count = 1) => budget.step(count), checkpoint: () => budget.tick(0), maxBufferBytes: budget.limits.maxValueBytes };\n try {\n budget.step(source.length);\n const pattern = new Pattern(source, true, flags.includes(\"i\"), \"jq\", flags);\n let search = 0;\n let copied = 0;\n let results = [\"\"];\n while (search <= input.length) {\n const match = await pattern.find(input, work, search);\n if (!match) break;\n const captures = object();\n for (const [name, index] of pattern.groupNames) put(captures, name, match.groups[index] ?? null);\n budget.value(captures);\n const next: string[] = [];\n let index = 0;\n for await (const value of replacement(captures)) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (value !== null && typeof value !== \"string\") throw new JqError(`string (\"\") and ${describe(value, budget)} cannot be added`);\n budget.collection(index + 1);\n const prefix = results[index] ?? \"\";\n const fragment = input.slice(copied, match.start);\n const bytes = utf8ByteLength(prefix) + utf8ByteLength(fragment) + utf8ByteLength(value ?? \"\");\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n const result = prefix + fragment + (value ?? \"\");\n budget.value(result);\n next.push(result);\n index++;\n }\n // An empty replacement stream leaves this match unchanged.\n if (next.length) {\n for (let index = next.length; index < results.length; index++) next.push(results[index]!);\n results = next; copied = match.end;\n }\n search = match.end > match.start ? match.end : match.end + ((input.codePointAt(match.end) ?? 0) > 0xffff ? 2 : 1);\n }\n for (const prefix of results) {\n if (utf8ByteLength(prefix) + utf8ByteLength(input.slice(copied)) > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n const result = prefix + input.slice(copied);\n budget.value(result);\n yield result;\n }\n } catch (error) {\n throw regexError(error);\n }\n}\n\n\nexport function regexError(error: unknown): JqError {\n if (!(error instanceof ProgramError)) throw error;\n if (error.message.includes(\"buffer limit exceeded\")) return new JqLimitError(\"maxValueBytes\");\n const message = error.message === \"unterminated bracket expression\" ? \"premature end of char-class\"\n : error.message === \"unmatched '(' in regular expression\" ? \"end pattern with unmatched parenthesis\"\n : error.message === \"quantifier without an expression\" ? \"target of repeat operator is not specified\"\n : error.message === \"reversed character range\" ? \"empty range in char class\" : error.message;\n return new JqError(`Regex failure: ${message}`);\n}\n\nexport async function* scanRegex(input: Json, source: Json, budget: Budget): AsyncGenerator<Json> {\n if (typeof source !== \"string\") throw new JqError(`${describe(source, budget)} is not a string`);\n if (typeof input !== \"string\") throw new JqError(`${describe(input, budget)} cannot be matched, as it is not a string`);\n if (source === \"\") {\n const boundaries = utf8ByteLength(input) + 1;\n for (let index = 0; index < boundaries; index++) { { const _p = budget.tickSync(); if (_p) await _p; } yield \"\"; }\n return;\n }\n const work = { step: (count = 1) => budget.step(count), checkpoint: () => budget.tick(0), maxBufferBytes: budget.limits.maxValueBytes };\n try {\n budget.step(source.length);\n const pattern = new Pattern(source, true, false, \"jq\");\n let search = 0;\n while (search <= input.length) {\n const match = await pattern.find(input, work, search);\n if (!match) break;\n budget.collection(pattern.groupCount);\n const value: Json = pattern.groupCount ? match.groups.slice(1).map(group => group ?? null) : match.groups[0]!;\n budget.value(value);\n yield value;\n search = match.end > match.start ? match.end : match.end + ((input.codePointAt(match.end) ?? 0) > 0xffff ? 2 : 1);\n }\n } catch (error) { throw regexError(error); }\n}\n", "import { Budget, ProgramError } from \"./budget.js\";\nimport { ReplacementBuffer } from \"./replacement-buffer.js\";\n\ntype BoundaryKind = \"word\" | \"nonWord\" | \"wordStart\" | \"wordEnd\";\n\nfunction isWordChar(ch: string | undefined): boolean {\n if (ch === undefined) return false;\n const code = ch.charCodeAt(0);\n return (code >= 48 && code <= 57) || (code >= 65 && code <= 90) || (code >= 97 && code <= 122) || code === 95;\n}\n\nfunction matchesBoundary(boundary: BoundaryKind, text: string, position: number): boolean {\n const prevWord = position > 0 && isWordChar(text[position - 1]);\n const nextWord = position < text.length && isWordChar(text[position]);\n if (boundary === \"word\") return prevWord !== nextWord;\n if (boundary === \"nonWord\") return prevWord === nextWord;\n if (boundary === \"wordStart\") return !prevWord && nextWord;\n return prevWord && !nextWord;\n}\n\ntype Node = { type: \"empty\" | \"begin\" | \"end\" }\n | { type: \"boundary\"; boundary: BoundaryKind }\n | { type: \"backreference\"; index: number }\n | { type: \"assertion\"; node: Node; positive: boolean; behind: boolean }\n | { type: \"character\"; literal?: string; accepts: (character: string) => boolean }\n | { type: \"sequence\" | \"alternate\"; nodes: Node[] }\n | { type: \"repeat\"; node: Node; minimum: number; maximum: number; lazy?: boolean }\n | { type: \"group\"; node: Node; index: number };\n\ntype Instruction = { kind: \"character\"; literal?: string; accepts: (character: string) => boolean }\n | { kind: \"backreference\"; index: number; ignoreCase: boolean }\n | { kind: \"assertion\"; first: number; next: number; positive: boolean; behind: boolean }\n | { kind: \"boundary\"; boundary: BoundaryKind }\n | { kind: \"begin\" | \"end\" | \"match\" }\n | { kind: \"save\"; slot: number; clear?: readonly number[] }\n | { kind: \"jump\"; target: number }\n | { kind: \"split\"; first: number; second: number };\n\nfunction instructionCounts(root: Node): Map<Node, number> {\n const counts = new Map<Node, number>();\n const count = (node: Node): number => {\n let size: number;\n if (node.type === \"empty\") size = 0;\n else if (node.type === \"group\" || node.type === \"assertion\") size = 2 + count(node.node);\n else if (node.type === \"sequence\" || node.type === \"alternate\") {\n size = node.type === \"alternate\" ? 2 * (node.nodes.length - 1) : 0;\n for (const child of node.nodes) size += count(child);\n // Remove empty sequence work once, before enclosing repetitions amplify it.\n if (node.type === \"sequence\") node.nodes = node.nodes.filter(child => counts.get(child)! > 0);\n } else if (node.type === \"repeat\") {\n const child = count(node.node);\n size = node.maximum === Infinity ? child * (node.minimum + 1) + 2\n : child * node.maximum + node.maximum - node.minimum;\n } else size = 1;\n // Saturation keeps nested products bounded without ever expanding a repeat.\n size = Math.min(size, Number.MAX_SAFE_INTEGER);\n counts.set(node, size);\n return size;\n };\n count(root);\n return counts;\n}\n\nconst classes: Record<string, (character: string) => boolean> = {\n alpha: character => /^[A-Za-z]$/u.test(character),\n alnum: character => /^[A-Za-z0-9]$/u.test(character),\n digit: character => /^[0-9]$/u.test(character),\n lower: character => /^[a-z]$/u.test(character),\n upper: character => /^[A-Z]$/u.test(character),\n xdigit: character => /^[A-Fa-f0-9]$/u.test(character),\n space: character => /^[ \\t\\n\\r\\v\\f]$/u.test(character),\n blank: character => character === \" \" || character === \"\\t\",\n cntrl: character => character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127,\n graph: character => character.charCodeAt(0) >= 33 && character.charCodeAt(0) <= 126,\n print: character => character.charCodeAt(0) >= 32 && character.charCodeAt(0) <= 126,\n punct: character => /^[!-/:-@[-`{-~]$/u.test(character),\n};\n\nfunction extendedSource(source: string): string {\n let result = \"\";\n let bracket = false;\n let bracketFirst = false;\n for (let offset = 0; offset < source.length; offset++) {\n const character = source[offset]!;\n if (!bracket && character === \"\\\\\" && offset + 1 < source.length) {\n const next = source[++offset]!;\n result += \"()|+?{}\".includes(next) ? next : `\\\\${next}`;\n } else if (bracket) {\n if (bracketFirst && character === \"^\") {\n result += character;\n continue;\n }\n if (bracketFirst && character === \"]\") {\n result += character;\n bracketFirst = false;\n continue;\n }\n bracketFirst = false;\n if (character === \"[\" && (source[offset + 1] === \":\" || source[offset + 1] === \".\" || source[offset + 1] === \"=\")) {\n const kind = source[offset + 1]!;\n const close = source.indexOf(`${kind}]`, offset + 2);\n if (close >= 0) {\n result += source.slice(offset, close + 2);\n offset = close + 1;\n continue;\n }\n }\n if (character === \"]\") bracket = false;\n result += character;\n } else {\n if (character === \"[\") { bracket = true; bracketFirst = true; }\n result += \"()|+?{}\".includes(character) ? `\\\\${character}` : character;\n }\n }\n return result;\n}\n\nexport interface PatternLimits {\n readonly maxPatternInstructions?: number;\n}\n\nexport interface Match { readonly start: number; readonly end: number; readonly groups: readonly (string | undefined)[] }\n\ntype PatternBudget = Pick<Budget, \"step\" | \"maxBufferBytes\"> & { readonly options?: PatternLimits } & Partial<Pick<Budget, \"checkpointSync\">> & {\n checkpoint(): void | Promise<void>;\n};\n\ntype ChainStep =\n | { readonly kind: \"literal\"; value: string; readonly group: number }\n | { readonly kind: \"char\"; readonly accepts: (candidate: string) => boolean; readonly ascii: Uint8Array; readonly group: number }\n | { readonly kind: \"repeat\"; readonly minimum: number; readonly accepts: (candidate: string) => boolean; readonly ascii: Uint8Array; readonly group: number };\n\ninterface ChainMatch {\n readonly prefix: string;\n readonly anchoredStart: boolean;\n readonly anchoredEnd: boolean;\n readonly steps: readonly ChainStep[];\n}\n\nfunction makeAsciiTable(accepts: (candidate: string) => boolean): Uint8Array {\n const ascii = new Uint8Array(128);\n for (let c = 0; c < 128; c++) {\n if (accepts(String.fromCharCode(c))) ascii[c] = 1;\n }\n return ascii;\n}\n\nfunction buildChainMatch(root: Node, groupCount: number): ChainMatch | undefined {\n if (root.type !== \"sequence\" || groupCount > 9) return undefined;\n let startIdx = 0;\n let endIdx = root.nodes.length;\n let anchoredStart = false;\n let anchoredEnd = false;\n if (startIdx < endIdx && root.nodes[startIdx]?.type === \"begin\") {\n anchoredStart = true;\n startIdx++;\n }\n if (startIdx < endIdx && root.nodes[endIdx - 1]?.type === \"end\") {\n anchoredEnd = true;\n endIdx--;\n }\n if (startIdx >= endIdx) return undefined;\n const steps: ChainStep[] = [];\n let hasRepeat = false;\n for (let i = startIdx; i < endIdx; i++) {\n let n = root.nodes[i]!;\n let group = 0;\n if (n.type === \"group\") {\n group = n.index;\n n = n.node.type === \"sequence\" && n.node.nodes.length === 1 ? n.node.nodes[0]! : n.node;\n }\n if (n.type === \"character\") {\n if (n.literal !== undefined) {\n const prev = steps[steps.length - 1];\n if (group === 0 && prev && prev.kind === \"literal\" && prev.group === 0) {\n prev.value += n.literal;\n } else {\n steps.push({ kind: \"literal\", value: n.literal, group });\n }\n } else {\n steps.push({ kind: \"char\", accepts: n.accepts, ascii: makeAsciiTable(n.accepts), group });\n }\n } else if (\n n.type === \"repeat\" &&\n n.minimum >= 0 &&\n n.maximum === Infinity &&\n !n.lazy &&\n n.node.type === \"character\"\n ) {\n hasRepeat = true;\n steps.push({ kind: \"repeat\", minimum: n.minimum, accepts: n.node.accepts, ascii: makeAsciiTable(n.node.accepts), group });\n } else {\n return undefined;\n }\n }\n const first = steps[0];\n if (!first) return undefined;\n const hasLiteralPrefix = first.kind === \"literal\" && first.value.length > 0;\n const hasRepeatHead = first.kind === \"repeat\" && first.minimum >= 1;\n if (!hasLiteralPrefix && !hasRepeatHead) return undefined;\n for (let s = 0; s < steps.length; s++) {\n const step = steps[s]!;\n if (step.kind === \"repeat\") {\n if (s < steps.length - 1) {\n const next = steps[s + 1]!;\n if (next.kind !== \"literal\" || next.value.length === 0 || step.accepts(next.value[0]!)) return undefined;\n }\n if (!anchoredStart && hasLiteralPrefix) {\n for (let k = 0; k < first.value.length; k++) {\n if (step.accepts(first.value[k]!)) return undefined;\n }\n }\n }\n }\n if (!hasRepeat && steps.length < 2) return undefined;\n return { prefix: hasLiteralPrefix ? first.value : \"\", anchoredStart, anchoredEnd, steps };\n}\n\nfunction matchChainAt(\n steps: readonly ChainStep[],\n prefixLen: number,\n anchoredEnd: boolean,\n text: string,\n startPos: number,\n outOffsets: Int32Array,\n groupCount: number,\n textEnd = text.length,\n startStep = 1,\n): number {\n for (let g = 1; g <= groupCount; g++) {\n outOffsets[g * 2] = -1;\n outOffsets[g * 2 + 1] = -1;\n }\n let cursor = startStep === 1 ? startPos + prefixLen : startPos;\n for (let s = startStep; s < steps.length; s++) {\n const step = steps[s]!;\n const stepStart = cursor;\n if (step.kind === \"literal\") {\n const val = step.value;\n if (cursor + val.length > textEnd) return -1;\n for (let k = 0; k < val.length; k++) {\n if (text.charCodeAt(cursor + k) !== val.charCodeAt(k)) return -1;\n }\n cursor += val.length;\n } else if (step.kind === \"char\") {\n if (cursor >= textEnd) return -1;\n const code = text.charCodeAt(cursor);\n if (code < 128 ? step.ascii[code] === 0 : !step.accepts(text[cursor]!)) return -1;\n cursor++;\n } else {\n while (cursor < textEnd) {\n const code = text.charCodeAt(cursor);\n if (code < 128 ? step.ascii[code] === 0 : !step.accepts(text[cursor]!)) break;\n cursor++;\n }\n if (cursor - stepStart < step.minimum) return -1;\n }\n if (step.group > 0) {\n outOffsets[step.group * 2] = stepStart;\n outOffsets[step.group * 2 + 1] = cursor;\n }\n }\n if (anchoredEnd && cursor !== textEnd) return -1;\n outOffsets[0] = startPos;\n outOffsets[1] = cursor;\n return cursor;\n}\n\nclass NfaStorage {\n private used = 0;\n constructor(private readonly budget: PatternBudget) {}\n reserve(bytes: number): void {\n this.budget.step(0);\n if (!Number.isSafeInteger(bytes) || bytes < 0 || bytes > this.budget.maxBufferBytes - this.used) {\n throw new ProgramError(\"regular expression state buffer limit exceeded\");\n }\n this.used += bytes;\n }\n release(bytes: number): void {\n if (!Number.isSafeInteger(bytes) || bytes < 0 || bytes > this.used) throw new ProgramError(\"invalid regular expression state accounting\");\n this.used -= bytes;\n }\n clear(): void { this.used = 0; }\n}\n\nexport class Pattern {\n readonly groupCount: number;\n readonly groupNames = new Map<string, number>();\n private code: Instruction[] = [];\n private compiledSteps = 0;\n private readonly instructionCount: number;\n private budgetPrepared = false;\n private parsed: { root: Node; counts: Map<Node, number> } | undefined;\n private readonly anchored: boolean;\n private linear = false;\n private literalMatch: { readonly value: string; readonly anchoredStart: boolean; readonly anchoredEnd: boolean; readonly groups: readonly [string] } | undefined;\n private simpleRepeatMatch: {\n readonly prefix: string;\n readonly anchoredStart: boolean;\n readonly anchoredEnd: boolean;\n readonly captured: boolean;\n readonly minimum: number;\n readonly accepts: (candidate: string) => boolean;\n readonly ascii: Uint8Array;\n } | undefined;\n private chainMatch: ChainMatch | undefined;\n private backreferences = false;\n private fastPrefixInfo: { readonly anchoredStart: boolean; readonly anchoredEnd: boolean; readonly prefix: string } | undefined;\n\n constructor(source: string, extended = true, private readonly ignoreCase = false, private readonly dialect: \"sed\" | \"awk\" | \"jq\" = \"sed\", private readonly modifiers = \"\", limits: PatternLimits = {}) {\n const prefix = dialect === \"jq\" ? \"jq \" : \"\";\n const maximumInstructions = limits.maxPatternInstructions ?? Infinity;\n if (maximumInstructions !== Infinity && (!Number.isSafeInteger(maximumInstructions) || maximumInstructions < 1)) throw new ProgramError(\"limits must be positive safe integers\");\n if (source.length > 8192) throw new ProgramError(`${prefix}regular expression source limit exceeded`);\n if (!extended) source = extendedSource(source);\n let offset = 0;\n let groups = 0;\n let depth = 0;\n const closedGroups = new Set<number>();\n const characterNode = (character: string): Node => ({\n type: \"character\",\n ...(ignoreCase ? {} : { literal: character }),\n accepts: candidate => ignoreCase ? candidate.toLowerCase() === character.toLowerCase() : candidate === character,\n });\n const escaped = (): string => {\n const character = source[offset++];\n if (character === undefined) throw new ProgramError(\"trailing backslash in regular expression\");\n if (dialect === \"awk\") {\n const octal = \"01234567\".includes(character);\n if (octal || character === \"x\") {\n let digits = octal ? character : \"\";\n const alphabet = octal ? \"01234567\" : \"0123456789abcdefABCDEF\";\n while (digits.length < (octal ? 3 : 2) && offset < source.length && alphabet.includes(source[offset]!)) digits += source[offset++];\n return digits ? String.fromCharCode(parseInt(digits, octal ? 8 : 16) & 255) : character;\n }\n if (character === \"b\") return \"\\b\";\n }\n if (dialect === \"sed\" && /^[1-9]$/u.test(character)) throw new ProgramError(\"pattern backreferences are not supported\");\n const control: Record<string, string> = { n: \"\\n\", t: \"\\t\", r: \"\\r\", f: \"\\f\", v: \"\\v\", a: \"\\x07\" };\n return control[character] ?? character;\n };\n const bracket = (): Node => {\n const negate = source[offset] === \"^\";\n if (negate) offset++;\n const tests: ((character: string) => boolean)[] = [];\n let first = true;\n while (offset < source.length && (source[offset] !== \"]\" || first)) {\n first = false;\n if (source.startsWith(\"[:\", offset)) {\n const end = source.indexOf(\":]\", offset + 2);\n const name = end < 0 ? \"\" : source.slice(offset + 2, end);\n if (!classes[name]) throw new ProgramError(`unsupported character class '${name}'`);\n tests.push(classes[name]!); offset = end + 2; continue;\n }\n if (source.startsWith(\"[.\", offset) || source.startsWith(\"[=\", offset)) throw new ProgramError(\"collating and equivalence classes are not supported\");\n const readBracketChar = (): string => {\n const ch = source[offset++]!;\n if (ch !== \"\\\\\") return ch;\n if (dialect === \"sed\") {\n const next = source[offset];\n if (next !== undefined && \"ntrfva\".includes(next)) return escaped();\n return \"\\\\\";\n }\n if (dialect === \"awk\" && source[offset] !== undefined && /^[1-9]$/u.test(source[offset]!)) {\n return escaped();\n }\n return escaped();\n };\n const start = readBracketChar();\n if (source[offset] === \"-\" && source[offset + 1] !== \"]\" && source[offset + 1] !== undefined) {\n offset++;\n const end = readBracketChar();\n if (start > end) throw new ProgramError(\"reversed character range\");\n tests.push(character => character >= start && character <= end);\n } else tests.push(character => character === start);\n }\n if (source[offset++] !== \"]\") throw new ProgramError(\"unterminated bracket expression\");\n return { type: \"character\", accepts: character => {\n const accepted = tests.some(test => test(character) || ignoreCase && (test(character.toLowerCase()) || test(character.toUpperCase())));\n return negate ? !accepted : accepted;\n } };\n };\n const atom = (atStart: boolean, afterBegin: boolean): Node => {\n const token = dialect === \"jq\" && offset < source.length ? String.fromCodePoint(source.codePointAt(offset)!) : source[offset];\n offset += token?.length ?? 1;\n if (token === \"(\") {\n if (++depth > 64) throw new ProgramError(`${prefix}regular expression depth limit exceeded`);\n let name: string | undefined;\n let capturing = true;\n let assertion: { positive: boolean; behind: boolean } | undefined;\n if (source[offset] === \"?\" && source[offset + 1] === \":\") {\n offset += 2;\n capturing = false;\n } else if (dialect === \"jq\" && source[offset] === \"?\") {\n offset++;\n if (source[offset] === \":\") { offset++; capturing = false; }\n else if (source[offset] === \"=\" || source[offset] === \"!\") {\n assertion = { positive: source[offset++] === \"=\", behind: false }; capturing = false;\n } else if (source[offset] === \"<\" && \"=!\".includes(source[offset + 1] ?? \"\")) {\n offset++;\n assertion = { positive: source[offset++] === \"=\", behind: true }; capturing = false;\n }\n else if (source[offset] === \"<\" && !\"=!\".includes(source[offset + 1] ?? \"\")) {\n const end = source.indexOf(\">\", ++offset);\n if (end < 0) throw new ProgramError(\"invalid named capture\");\n name = source.slice(offset, end); offset = end + 1;\n } else throw new ProgramError(\"unsupported jq regular expression group\");\n }\n const index = capturing ? ++groups : 0;\n if (name !== undefined) this.groupNames.set(name, index);\n const node = alternate();\n if (source[offset++] !== \")\") throw new ProgramError(\"unmatched '(' in regular expression\");\n closedGroups.add(index);\n depth--;\n return assertion ? { type: \"assertion\", node, ...assertion } : capturing ? { type: \"group\", index, node } : node;\n }\n if (token === \"[\") return bracket();\n if (token === \"\\\\\") {\n const reference = source[offset];\n if ((dialect === \"sed\" || dialect === \"jq\") && reference !== undefined && /^[1-9]$/u.test(reference)) {\n const index = Number(reference);\n if (!closedGroups.has(index)) throw new ProgramError(\"pattern references an undefined or open capture group\");\n offset++;\n return { type: \"backreference\", index };\n }\n if (reference !== undefined && \"bByY<>\".includes(reference)) {\n offset++;\n if (dialect === \"awk\" && reference === \"b\") {\n return characterNode(\"\\b\");\n }\n const boundary: BoundaryKind = (reference === \"b\" || reference === \"y\") ? \"word\"\n : (reference === \"B\" || reference === \"Y\") ? \"nonWord\"\n : reference === \"<\" ? \"wordStart\" : \"wordEnd\";\n return { type: \"boundary\", boundary };\n }\n if ((dialect === \"jq\" || dialect === \"sed\" || dialect === \"awk\") && reference !== undefined && \"dDsSwW\".includes(reference)) {\n offset++;\n const alphabet = reference.toLowerCase();\n return { type: \"character\", accepts: character => {\n const accepted = alphabet === \"d\" ? character >= \"0\" && character <= \"9\"\n : alphabet === \"s\" ? \" \\t\\n\\r\\f\\v\".includes(character)\n : character >= \"a\" && character <= \"z\" || character >= \"A\" && character <= \"Z\" || character >= \"0\" && character <= \"9\" || character === \"_\";\n return reference === alphabet ? accepted : !accepted;\n } };\n }\n return characterNode(escaped());\n }\n if (token === \".\") return { type: \"character\", accepts: character => dialect !== \"jq\" || modifiers.includes(\"m\") || character !== \"\\n\" };\n if (token === \"^\") return extended || atStart ? { type: \"begin\" } : characterNode(token);\n if (token === \"$\") return extended || offset === source.length || source[offset] === \")\" || source[offset] === \"|\" ? { type: \"end\" } : characterNode(token);\n if (token === \"*\" && !extended && (atStart || afterBegin)) return characterNode(token);\n if (token === undefined || \"*+?{}\".includes(token)) throw new ProgramError(\"quantifier without an expression\");\n return characterNode(token);\n };\n const repeated = (atStart: boolean, afterBegin: boolean): Node => {\n let node = atom(atStart, afterBegin);\n if (!extended && (node.type === \"begin\" || node.type === \"end\")) return node;\n const quantifier = source[offset];\n if (quantifier === \"*\" || quantifier === \"+\" || quantifier === \"?\") {\n offset++;\n node = { type: \"repeat\", node, minimum: quantifier === \"+\" ? 1 : 0, maximum: quantifier === \"?\" ? 1 : Infinity };\n } else if (quantifier === \"{\") {\n const match = /^\\{([0-9]+)(?:,([0-9]*))?\\}/u.exec(source.slice(offset));\n if (!match) throw new ProgramError(\"invalid repetition interval\");\n const minimum = Number(match[1]);\n const maximum = match[2] === undefined ? minimum : match[2] === \"\" ? Infinity : Number(match[2]);\n if (!Number.isSafeInteger(minimum) || maximum !== Infinity && !Number.isSafeInteger(maximum) || maximum < minimum) throw new ProgramError(\"invalid or excessive repetition interval\");\n offset += match[0].length;\n node = { type: \"repeat\", node, minimum, maximum };\n }\n if (dialect === \"jq\" && node.type === \"repeat\" && source[offset] === \"?\") { node.lazy = true; offset++; }\n if (source[offset] !== undefined && \"*+?{\".includes(source[offset]!)) throw new ProgramError(\"nested quantifier is not supported\");\n return node;\n };\n const sequence = (): Node => {\n const nodes: Node[] = [];\n while (offset < source.length && source[offset] !== \")\" && source[offset] !== \"|\") nodes.push(repeated(nodes.length === 0, nodes.length === 1 && nodes[0]!.type === \"begin\"));\n return nodes.length ? { type: \"sequence\", nodes } : { type: \"empty\" };\n };\n const alternate = (): Node => {\n const nodes = [sequence()];\n while (source[offset] === \"|\") { offset++; nodes.push(sequence()); }\n return nodes.length === 1 ? nodes[0]! : { type: \"alternate\", nodes };\n };\n const root = alternate();\n if (offset !== source.length) throw new ProgramError(\"unmatched ')' in regular expression\");\n this.groupCount = groups;\n this.anchored = root.type === \"sequence\" && root.nodes[0]?.type === \"begin\";\n const counts = instructionCounts(root);\n if (!Number.isSafeInteger(counts.get(root)! + 1) || counts.get(root)! + 1 > maximumInstructions) throw new ProgramError(`${prefix}regular expression program limit exceeded`);\n this.instructionCount = counts.get(root)! + 1;\n this.parsed = { root, counts };\n if (counts.get(root)! <= 64) {\n this.compileFromParsedSync();\n }\n }\n\n private assertInstructionLimit(budget: Pick<PatternBudget, \"options\">): void {\n if (this.instructionCount > (budget.options?.maxPatternInstructions ?? Infinity)) throw new ProgramError(`${this.dialect === \"jq\" ? \"jq \" : \"\"}regular expression program limit exceeded`);\n }\n\n private compileFromParsedSync(): void {\n if (!this.parsed) return;\n const { root, counts } = this.parsed;\n this.compiledSteps = counts.get(root)! + 1;\n const code: Instruction[] = [];\n const ignoreCase = this.ignoreCase;\n const emit = (instruction: Instruction): number => code.push(instruction) - 1;\n const compile = (node: Node): void => {\n if (counts.get(node) === 0) return;\n if (node.type === \"character\") { emit({ kind: \"character\", ...(node.literal !== undefined ? { literal: node.literal } : {}), accepts: node.accepts }); return; }\n if (node.type === \"backreference\") { emit({ kind: \"backreference\", index: node.index, ignoreCase }); return; }\n if (node.type === \"assertion\") {\n const index = emit({ kind: \"assertion\", first: code.length + 1, next: 0, positive: node.positive, behind: node.behind });\n compile(node.node); emit({ kind: \"match\" });\n (code[index] as Extract<Instruction, { kind: \"assertion\" }>).next = code.length;\n return;\n }\n if (node.type === \"begin\" || node.type === \"end\") { emit({ kind: node.type }); return; }\n if (node.type === \"boundary\") { emit({ kind: \"boundary\", boundary: node.boundary }); return; }\n if (node.type === \"sequence\") { for (const child of node.nodes) compile(child); return; }\n if (node.type === \"group\") {\n const clear: number[] = [];\n const collect = (current: Node): void => {\n if (current.type === \"group\") { clear.push(current.index * 2, current.index * 2 + 1); collect(current.node); }\n else if (current.type === \"assertion\" || current.type === \"repeat\") collect(current.node);\n else if (current.type === \"sequence\" || current.type === \"alternate\") for (const child of current.nodes) collect(child);\n };\n collect(node.node);\n emit({ kind: \"save\", slot: node.index * 2, ...(clear.length ? { clear } : {}) });\n compile(node.node);\n emit({ kind: \"save\", slot: node.index * 2 + 1 });\n return;\n }\n if (node.type === \"alternate\") {\n const jumps: number[] = [];\n for (let index = 0; index < node.nodes.length; index++) {\n if (index === node.nodes.length - 1) { compile(node.nodes[index]!); break; }\n const split = emit({ kind: \"split\", first: code.length + 1, second: 0 });\n compile(node.nodes[index]!);\n jumps.push(emit({ kind: \"jump\", target: 0 }));\n (code[split] as Extract<Instruction, { kind: \"split\" }>).second = code.length;\n }\n for (const jump of jumps) (code[jump] as Extract<Instruction, { kind: \"jump\" }>).target = code.length;\n return;\n }\n if (node.type !== \"repeat\") throw new ProgramError(\"invalid internal regular expression node\");\n if (counts.get(node.node)! > 0) for (let count = 0; count < node.minimum; count++) compile(node.node);\n if (node.maximum === Infinity) {\n const split = emit({ kind: \"split\", first: code.length + 1, second: 0 });\n compile(node.node); emit({ kind: \"jump\", target: split });\n (code[split] as Extract<Instruction, { kind: \"split\" }>).second = code.length;\n if (node.lazy) { const instruction = code[split] as Extract<Instruction, { kind: \"split\" }>; [instruction.first, instruction.second] = [instruction.second, instruction.first]; }\n } else for (let count = node.minimum; count < node.maximum; count++) {\n const split = emit({ kind: \"split\", first: code.length + 1, second: 0 });\n compile(node.node);\n (code[split] as Extract<Instruction, { kind: \"split\" }>).second = code.length;\n if (node.lazy) { const instruction = code[split] as Extract<Instruction, { kind: \"split\" }>; [instruction.first, instruction.second] = [instruction.second, instruction.first]; }\n }\n };\n compile(root);\n emit({ kind: \"match\" });\n this.finalizeCompiledCode(code, root);\n }\n\n async prepare(budget: Pick<PatternBudget, \"step\" | \"checkpoint\" | \"checkpointSync\" | \"options\">): Promise<void> {\n this.assertInstructionLimit(budget);\n if (!this.parsed) {\n if (!this.budgetPrepared && this.compiledSteps > 0) {\n this.budgetPrepared = true;\n budget.step(this.compiledSteps);\n const p = budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint();\n if (p) await p;\n }\n return;\n }\n if (!this.parsed) return;\n const { root, counts } = this.parsed;\n budget.step(counts.get(root)! + 1);\n await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n // Publish only a finished program. Cancelled or concurrent preparations own\n // separate arrays, so a failed caller cannot leave a partially patched NFA.\n const code: Instruction[] = [];\n const ignoreCase = this.ignoreCase;\n const emit = (instruction: Instruction): number => {\n return code.push(instruction) - 1;\n };\n const compile = function* (node: Node): Generator<void> {\n if (counts.get(node) === 0) return;\n yield;\n if (node.type === \"character\") { emit({ kind: \"character\", ...(node.literal !== undefined ? { literal: node.literal } : {}), accepts: node.accepts }); return; }\n if (node.type === \"backreference\") { emit({ kind: \"backreference\", index: node.index, ignoreCase }); return; }\n if (node.type === \"assertion\") {\n const index = emit({ kind: \"assertion\", first: code.length + 1, next: 0, positive: node.positive, behind: node.behind });\n yield* compile(node.node); emit({ kind: \"match\" });\n (code[index] as Extract<Instruction, { kind: \"assertion\" }>).next = code.length;\n return;\n }\n if (node.type === \"begin\" || node.type === \"end\") { emit({ kind: node.type }); return; }\n if (node.type === \"boundary\") { emit({ kind: \"boundary\", boundary: node.boundary }); return; }\n if (node.type === \"sequence\") { for (const child of node.nodes) yield* compile(child); return; }\n if (node.type === \"group\") {\n const clear: number[] = [];\n const collect = (current: Node): void => {\n if (current.type === \"group\") { clear.push(current.index * 2, current.index * 2 + 1); collect(current.node); }\n else if (current.type === \"assertion\" || current.type === \"repeat\") collect(current.node);\n else if (current.type === \"sequence\" || current.type === \"alternate\") for (const child of current.nodes) collect(child);\n };\n collect(node.node);\n emit({ kind: \"save\", slot: node.index * 2, ...(clear.length ? { clear } : {}) });\n yield* compile(node.node);\n emit({ kind: \"save\", slot: node.index * 2 + 1 });\n return;\n }\n if (node.type === \"alternate\") {\n const jumps: number[] = [];\n for (let index = 0; index < node.nodes.length; index++) {\n yield;\n if (index === node.nodes.length - 1) { yield* compile(node.nodes[index]!); break; }\n const split = emit({ kind: \"split\", first: code.length + 1, second: 0 });\n yield* compile(node.nodes[index]!);\n jumps.push(emit({ kind: \"jump\", target: 0 }));\n (code[split] as Extract<Instruction, { kind: \"split\" }>).second = code.length;\n }\n for (const jump of jumps) (code[jump] as Extract<Instruction, { kind: \"jump\" }>).target = code.length;\n return;\n }\n if (node.type !== \"repeat\") throw new ProgramError(\"invalid internal regular expression node\");\n // A zero-width noncapturing body may have an enormous minimum but emits\n // no instructions. Skip that loop while retaining optional split/jump work.\n if (counts.get(node.node)! > 0) for (let count = 0; count < node.minimum; count++) yield* compile(node.node);\n if (node.maximum === Infinity) {\n const split = emit({ kind: \"split\", first: code.length + 1, second: 0 });\n yield* compile(node.node); emit({ kind: \"jump\", target: split });\n (code[split] as Extract<Instruction, { kind: \"split\" }>).second = code.length;\n if (node.lazy) { const instruction = code[split] as Extract<Instruction, { kind: \"split\" }>; [instruction.first, instruction.second] = [instruction.second, instruction.first]; }\n } else for (let count = node.minimum; count < node.maximum; count++) {\n yield;\n const split = emit({ kind: \"split\", first: code.length + 1, second: 0 });\n yield* compile(node.node);\n (code[split] as Extract<Instruction, { kind: \"split\" }>).second = code.length;\n if (node.lazy) { const instruction = code[split] as Extract<Instruction, { kind: \"split\" }>; [instruction.first, instruction.second] = [instruction.second, instruction.first]; }\n }\n };\n let work = 0;\n for (const ignored of compile(root)) {\n if (++work % 64 === 0) { await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint()); budget.step(0); }\n }\n emit({ kind: \"match\" });\n await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n budget.step(0);\n this.budgetPrepared = true;\n this.finalizeCompiledCode(code, root);\n }\n\n private finalizeCompiledCode(code: Instruction[], root: Node): void {\n this.linear = code.every(instruction => instruction.kind === \"character\" || instruction.kind === \"begin\" || instruction.kind === \"end\" || instruction.kind === \"match\");\n if (this.linear && !this.ignoreCase && this.dialect !== \"jq\") {\n let validLiteral = true;\n let anchoredStart = false;\n let anchoredEnd = false;\n let literalValue = \"\";\n for (let i = 0; i < code.length - 1; i++) {\n const inst = code[i]!;\n if (inst.kind === \"begin\") {\n if (i === 0) anchoredStart = true;\n else { validLiteral = false; break; }\n } else if (inst.kind === \"end\") {\n if (i === code.length - 2) anchoredEnd = true;\n else { validLiteral = false; break; }\n } else if (inst.kind === \"character\" && inst.literal !== undefined) {\n literalValue += inst.literal;\n } else {\n validLiteral = false;\n break;\n }\n }\n if (validLiteral) {\n this.literalMatch = { value: literalValue, anchoredStart, anchoredEnd, groups: [literalValue] };\n this.fastPrefixInfo = { anchoredStart, anchoredEnd, prefix: literalValue };\n }\n } else if (!this.ignoreCase && this.dialect !== \"jq\" && root.type === \"sequence\" && this.groupCount <= 1) {\n let startIdx = 0;\n let endIdx = root.nodes.length;\n let anchoredStart = false;\n let anchoredEnd = false;\n if (startIdx < endIdx && root.nodes[startIdx]?.type === \"begin\") {\n anchoredStart = true;\n startIdx++;\n }\n if (startIdx < endIdx && root.nodes[endIdx - 1]?.type === \"end\") {\n anchoredEnd = true;\n endIdx--;\n }\n if (startIdx < endIdx) {\n let prefix = \"\";\n let prefixValid = true;\n for (let i = startIdx; i < endIdx - 1; i++) {\n const n = root.nodes[i]!;\n if (n.type === \"character\" && n.literal !== undefined) {\n prefix += n.literal;\n } else {\n prefixValid = false;\n break;\n }\n }\n const tail = root.nodes[endIdx - 1]!;\n const captured = tail.type === \"group\" && tail.index === 1 && this.groupCount === 1;\n const rawInner = captured ? tail.node : this.groupCount === 0 ? tail : undefined;\n const repeatNode = rawInner?.type === \"sequence\" && rawInner.nodes.length === 1 ? rawInner.nodes[0] : rawInner;\n if (\n prefixValid &&\n repeatNode?.type === \"repeat\" &&\n (repeatNode.minimum >= 1 || prefix.length > 0 || anchoredStart) &&\n repeatNode.maximum === Infinity &&\n !repeatNode.lazy &&\n repeatNode.node.type === \"character\"\n ) {\n const acceptsFn = repeatNode.node.accepts;\n const ascii = new Uint8Array(128);\n for (let c = 0; c < 128; c++) {\n if (acceptsFn(String.fromCharCode(c))) ascii[c] = 1;\n }\n this.simpleRepeatMatch = {\n prefix,\n anchoredStart,\n anchoredEnd,\n captured,\n minimum: repeatNode.minimum,\n accepts: acceptsFn,\n ascii,\n };\n if (anchoredStart || prefix.length > 0) {\n this.fastPrefixInfo = { anchoredStart, anchoredEnd, prefix };\n }\n }\n }\n }\n if (!this.ignoreCase && this.dialect !== \"jq\" && !this.literalMatch && !this.simpleRepeatMatch) {\n const cm = buildChainMatch(root, this.groupCount);\n if (cm) {\n this.chainMatch = cm;\n this.fastPrefixInfo = { anchoredStart: cm.anchoredStart, anchoredEnd: cm.anchoredEnd, prefix: cm.prefix };\n }\n }\n this.backreferences = code.some(instruction => instruction.kind === \"backreference\");\n this.code = code;\n this.parsed = undefined;\n }\n\n private async findJq(text: string, budget: PatternBudget, from: number,\n options: { pc: number; exact?: boolean; end?: number; captures?: number[] } = { pc: 0 }): Promise<{ match: Match; captures: number[] } | undefined> {\n // Prioritized traversal gives jq's leftmost-first (rather than POSIX longest) match.\n for (let start = from; start <= (options.end ?? text.length) && (!options.exact || start === from); start += (text.codePointAt(start) ?? 0) > 0xffff ? 2 : 1) {\n const pending = [{ pc: options.pc, position: start, captures: options.captures ?? [] }];\n const visited = new Set<string>();\n let storage = 0;\n let checkpoints = 0;\n while (pending.length) {\n if (++checkpoints % 64 === 1) await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n budget.step();\n const state = pending.pop()!;\n if (options.end !== undefined && state.position > options.end) continue;\n const key = `${state.pc}:${state.position}:${state.captures.join(\",\")}`;\n if (visited.has(key)) continue;\n storage += key.length * 2 + 64;\n if (storage > budget.maxBufferBytes) throw new ProgramError(\"regular expression state buffer limit exceeded\");\n visited.add(key);\n const instruction = this.code[state.pc]!;\n const { position, captures } = state;\n const push = (pc: number, next = position, saved = captures): void => {\n if ((pending.length + 1) * (64 + (this.groupCount + 1) * 16) + storage > budget.maxBufferBytes) throw new ProgramError(\"regular expression state buffer limit exceeded\");\n pending.push({ pc, position: next, captures: saved });\n };\n if (instruction.kind === \"match\") {\n if (options.end !== undefined && position !== options.end) continue;\n if (this.modifiers.includes(\"n\") && position === start) continue;\n const groups: (string | undefined)[] = [text.slice(start, position)];\n for (let index = 1; index <= this.groupCount; index++) {\n budget.step();\n groups.push(captures[index * 2] === undefined ? undefined : text.slice(captures[index * 2], captures[index * 2 + 1]));\n }\n return { match: { start, end: position, groups }, captures };\n }\n if (instruction.kind === \"assertion\") {\n const result = await this.findJq(text, budget, instruction.behind ? 0 : position,\n instruction.behind ? { pc: instruction.first, end: position, captures }\n : { pc: instruction.first, exact: true, captures });\n if (Boolean(result) === instruction.positive) push(instruction.next, position, result?.captures ?? captures);\n }\n else if (instruction.kind === \"jump\") push(instruction.target);\n else if (instruction.kind === \"split\") { push(instruction.second); push(instruction.first); }\n else if (instruction.kind === \"save\") { const saved = [...captures]; if (instruction.clear) for (const slot of instruction.clear) delete saved[slot]; saved[instruction.slot] = position; push(state.pc + 1, position, saved); }\n else if (instruction.kind === \"begin\") { if (position === 0) push(state.pc + 1); }\n else if (instruction.kind === \"boundary\") { if (matchesBoundary(instruction.boundary, text, position)) push(state.pc + 1); }\n else if (instruction.kind === \"end\") { if (position === text.length || position === text.length - 1 && text[position] === \"\\n\") push(state.pc + 1); }\n else if (instruction.kind === \"character\") {\n const code = text.codePointAt(position);\n if (code !== undefined) { const character = String.fromCodePoint(code); if (instruction.accepts(character)) push(state.pc + 1, position + character.length); }\n } else if (instruction.kind === \"backreference\") {\n const begin = captures[instruction.index * 2];\n const end = captures[instruction.index * 2 + 1];\n if (begin !== undefined && end !== undefined) {\n const length = end - begin;\n budget.step(length);\n const expected = text.slice(begin, end);\n const actual = text.slice(position, position + length);\n if (instruction.ignoreCase ? expected.toLowerCase() === actual.toLowerCase() : expected === actual) push(state.pc + 1, position + length);\n }\n } else throw new ProgramError(\"unsupported jq regular expression instruction\");\n }\n }\n return undefined;\n }\n\n canFindSync(): boolean {\n return this.code.length > 0 && this.dialect !== \"jq\" && Boolean(this.literalMatch || this.simpleRepeatMatch || this.chainMatch);\n }\n\n getFastPrefixInfo(): { readonly anchoredStart: boolean; readonly anchoredEnd: boolean; readonly prefix: string } | undefined {\n return this.fastPrefixInfo;\n }\n\n getLiteralMatchInfo(): { readonly value: string; readonly anchoredStart: boolean; readonly anchoredEnd: boolean } | undefined {\n return this.literalMatch;\n }\n\n findSyncFastInto(\n text: string,\n budget: Pick<PatternBudget, \"step\" | \"maxBufferBytes\" | \"options\">,\n from: number,\n outOffsets: Int32Array,\n textEnd = text.length,\n textStart = 0,\n ): boolean {\n this.assertInstructionLimit(budget);\n if (this.chainMatch) {\n const { prefix, anchoredStart, anchoredEnd, steps } = this.chainMatch;\n if (from > textEnd || (anchoredStart && from > textStart)) return false;\n const first = steps[0]!;\n const startStep = prefix.length > 0 && first.group === 0 ? 1 : 0;\n let found = -1;\n let matchEnd = -1;\n if (anchoredStart) {\n if (prefix.length === 0 || (textStart + prefix.length <= textEnd && text.startsWith(prefix, textStart))) {\n matchEnd = matchChainAt(steps, prefix.length, anchoredEnd, text, textStart, outOffsets, this.groupCount, textEnd, startStep);\n if (matchEnd >= 0) found = textStart;\n }\n } else if (prefix.length > 0) {\n let searchFrom = from;\n while (searchFrom <= textEnd - prefix.length) {\n const idx = text.indexOf(prefix, searchFrom);\n if (idx < 0 || idx > textEnd - prefix.length) break;\n const end = matchChainAt(steps, prefix.length, anchoredEnd, text, idx, outOffsets, this.groupCount, textEnd, startStep);\n if (end >= 0) {\n found = idx;\n matchEnd = end;\n break;\n }\n searchFrom = idx + 1;\n }\n } else {\n const head = first as Extract<ChainStep, { kind: \"repeat\" }>;\n const headAscii = head.ascii;\n const headAccepts = head.accepts;\n const headMin = head.minimum;\n let searchFrom = from;\n while (searchFrom < textEnd) {\n while (searchFrom < textEnd) {\n const c = text.charCodeAt(searchFrom);\n if (c < 128 ? headAscii[c] !== 0 : headAccepts(text[searchFrom]!)) break;\n searchFrom++;\n }\n if (searchFrom >= textEnd) break;\n let runEnd = searchFrom + 1;\n while (runEnd < textEnd) {\n const c = text.charCodeAt(runEnd);\n if (c < 128 ? headAscii[c] === 0 : !headAccepts(text[runEnd]!)) break;\n runEnd++;\n }\n if (runEnd - searchFrom >= headMin) {\n const end = matchChainAt(steps, 0, anchoredEnd, text, searchFrom, outOffsets, this.groupCount, textEnd, 0);\n if (end >= 0) {\n found = searchFrom;\n matchEnd = end;\n break;\n }\n }\n searchFrom = runEnd + 1;\n }\n }\n const positionsTried = anchoredStart ? 1 : found >= 0 ? found - from + 1 : textEnd - from + 1;\n const len = found >= 0 ? matchEnd - found : 0;\n budget.step(positionsTried * 2 + (found >= 0 ? this.code.length * 2 + len : 0));\n if (found < 0) return false;\n if (len > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n return true;\n }\n if (this.simpleRepeatMatch) {\n const { prefix, anchoredStart, anchoredEnd, captured, minimum, accepts, ascii } = this.simpleRepeatMatch;\n if (from > textEnd || (anchoredStart && from > textStart)) return false;\n let found = -1;\n let matchEnd = -1;\n let groupStart = -1;\n let groupEnd = -1;\n if (anchoredStart) {\n if (textStart + prefix.length <= textEnd && text.startsWith(prefix, textStart)) {\n const pos = textStart + prefix.length;\n let cursor = pos;\n while (cursor < textEnd) {\n const code = text.charCodeAt(cursor);\n if (code < 128 ? ascii[code] === 0 : !accepts(text[cursor]!)) break;\n cursor++;\n }\n if (cursor - pos >= minimum && (!anchoredEnd || cursor === textEnd)) {\n found = textStart;\n matchEnd = cursor;\n groupStart = pos;\n groupEnd = cursor;\n }\n }\n } else if (prefix.length === 0) {\n let searchFrom = from;\n const maxStart = textEnd - minimum;\n while (searchFrom <= maxStart) {\n const c0 = text.charCodeAt(searchFrom);\n if (c0 < 128 ? ascii[c0] === 0 : !accepts(text[searchFrom]!)) {\n searchFrom++;\n continue;\n }\n const idx = searchFrom;\n let cursor = idx + 1;\n while (cursor < textEnd) {\n const code = text.charCodeAt(cursor);\n if (code < 128 ? ascii[code] === 0 : !accepts(text[cursor]!)) break;\n cursor++;\n }\n if (cursor - idx >= minimum && (!anchoredEnd || cursor === textEnd)) {\n found = idx;\n matchEnd = cursor;\n groupStart = idx;\n groupEnd = cursor;\n break;\n }\n searchFrom = cursor + 1;\n }\n } else {\n let searchFrom = from;\n while (searchFrom <= textEnd - prefix.length) {\n const idx = text.indexOf(prefix, searchFrom);\n if (idx < 0 || idx > textEnd - prefix.length) break;\n const pos = idx + prefix.length;\n let cursor = pos;\n while (cursor < textEnd) {\n const code = text.charCodeAt(cursor);\n if (code < 128 ? ascii[code] === 0 : !accepts(text[cursor]!)) break;\n cursor++;\n }\n if (cursor - pos >= minimum && (!anchoredEnd || cursor === textEnd)) {\n found = idx;\n matchEnd = cursor;\n groupStart = pos;\n groupEnd = cursor;\n break;\n }\n searchFrom = idx + 1;\n }\n }\n const positionsTried = anchoredStart ? 1 : found >= 0 ? found - from + 1 : textEnd - from + 1;\n const len = found >= 0 ? matchEnd - found : 0;\n budget.step(positionsTried * 2 + (found >= 0 ? this.code.length * 2 + len : 0));\n if (found < 0) return false;\n if (len > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n outOffsets[0] = found;\n outOffsets[1] = matchEnd;\n outOffsets[2] = captured ? groupStart : -1;\n outOffsets[3] = captured ? groupEnd : -1;\n return true;\n }\n const { value, anchoredStart, anchoredEnd } = this.literalMatch!;\n const len = value.length;\n if (from > textEnd || (anchoredStart && from > textStart)) return false;\n let found = -1;\n if (anchoredStart && anchoredEnd) {\n if (from === textStart && textEnd - textStart === len && text.startsWith(value, textStart)) found = textStart;\n } else if (anchoredStart) {\n if (from === textStart && textStart + len <= textEnd && text.startsWith(value, textStart)) found = textStart;\n } else if (anchoredEnd) {\n const candidate = textEnd - len;\n if (candidate >= from && text.startsWith(value, candidate)) found = candidate;\n } else {\n const maxStart = textEnd - len;\n if (from <= maxStart) {\n if (textEnd === text.length || maxStart - from > 64) {\n const idx = text.indexOf(value, from);\n if (idx >= 0 && idx <= maxStart) found = idx;\n } else {\n const c0 = value.charCodeAt(0);\n const c1 = len > 1 ? value.charCodeAt(1) : -1;\n for (let i = from; i <= maxStart; i++) {\n if (\n text.charCodeAt(i) === c0 &&\n (len === 1 || (text.charCodeAt(i + 1) === c1 && (len === 2 || text.startsWith(value, i))))\n ) {\n found = i;\n break;\n }\n }\n }\n }\n }\n const positionsTried = anchoredStart ? 1 : found >= 0 ? found - from + 1 : textEnd - from + 1;\n budget.step(positionsTried * 2 + (found >= 0 ? this.code.length * 2 + len : 0));\n if (found < 0) return false;\n if (len > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n outOffsets[0] = found;\n outOffsets[1] = found + len;\n outOffsets[2] = -1;\n outOffsets[3] = -1;\n return true;\n }\n\n private findAfterCheck(\n check: Promise<void>,\n text: string,\n budget: PatternBudget,\n from: number,\n ): Promise<Match | undefined> {\n return check.then(() => this.find(text, budget, from));\n }\n\n private finishLiteralAfterCheck(\n check: Promise<void>,\n found: number,\n len: number,\n maxBufferBytes: number,\n groups: readonly [string],\n ): Promise<Match | undefined> {\n if (found < 0) return check.then(RETURN_UNDEFINED);\n return check.then(() => {\n if (len > maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n return { start: found, end: found + len, groups };\n });\n }\n\n tryFindSync(text: string, budget: PatternBudget, from = 0): Match | undefined | Promise<Match | undefined> {\n this.assertInstructionLimit(budget);\n if (this.code.length && this.chainMatch && this.dialect !== \"jq\") {\n const initialCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (initialCheck) return this.findAfterCheck(initialCheck, text, budget, from);\n if (!this.findSyncFastInto(text, budget, from, FAST_MATCH_OFFSETS)) return undefined;\n const start = FAST_MATCH_OFFSETS[0]!;\n const end = FAST_MATCH_OFFSETS[1]!;\n const groups: (string | undefined)[] = new Array(this.groupCount + 1);\n groups[0] = text.slice(start, end);\n for (let g = 1; g <= this.groupCount; g++) {\n const gs = FAST_MATCH_OFFSETS[g * 2]!;\n const ge = FAST_MATCH_OFFSETS[g * 2 + 1]!;\n groups[g] = gs >= 0 ? text.slice(gs, ge) : undefined;\n }\n return { start, end, groups };\n }\n if (this.code.length && this.simpleRepeatMatch && this.dialect !== \"jq\") {\n const initialCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (initialCheck) return this.findAfterCheck(initialCheck, text, budget, from);\n return this.execSimpleRepeat(text, budget, from);\n }\n if (!this.code.length || !this.literalMatch || this.dialect === \"jq\") {\n return this.find(text, budget, from);\n }\n const initialCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (initialCheck) return this.findAfterCheck(initialCheck, text, budget, from);\n const { value, anchoredStart, anchoredEnd, groups } = this.literalMatch;\n const len = value.length;\n if (from > text.length || (anchoredStart && from > 0)) return undefined;\n let found = -1;\n if (anchoredStart && anchoredEnd) {\n if (from === 0 && text.length === len && text === value) found = 0;\n } else if (anchoredStart) {\n if (from === 0 && text.startsWith(value)) found = 0;\n } else if (anchoredEnd) {\n const candidate = text.length - len;\n if (candidate >= from && text.endsWith(value)) found = candidate;\n } else {\n found = text.indexOf(value, from);\n }\n const positionsTried = anchoredStart ? 1 : found >= 0 ? found - from + 1 : text.length - from + 1;\n const stepCount = positionsTried * 2 + (found >= 0 ? this.code.length * 2 + len : 0);\n budget.step(stepCount);\n if (stepCount >= 64) {\n const midCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (midCheck) return this.finishLiteralAfterCheck(midCheck, found, len, budget.maxBufferBytes, groups);\n }\n if (found < 0) return undefined;\n if (len > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n return { start: found, end: found + len, groups };\n }\n\n tryTestSync(\n text: string,\n budget: PatternBudget,\n textStart = 0,\n textEnd = text.length,\n ): boolean | Promise<boolean> {\n if (this.canFindSync()) {\n const initialCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (!initialCheck) {\n return this.findSyncFastInto(text, budget, textStart, FAST_MATCH_OFFSETS, textEnd, textStart);\n }\n return initialCheck.then(() => this.findSyncFastInto(text, budget, textStart, FAST_MATCH_OFFSETS, textEnd, textStart));\n }\n const sub = textStart === 0 && textEnd === text.length ? text : text.slice(textStart, textEnd);\n const found = this.tryFindSync(sub, budget, 0);\n if (found instanceof Promise) return found.then(res => res !== undefined);\n return found !== undefined;\n }\n\n private execSimpleRepeat(\n text: string,\n budget: PatternBudget,\n from: number,\n ): Match | undefined | Promise<Match | undefined> {\n const { prefix, anchoredStart, anchoredEnd, captured, minimum, accepts, ascii } = this.simpleRepeatMatch!;\n if (from > text.length || (anchoredStart && from > 0)) return undefined;\n let found = -1;\n let matchEnd = -1;\n let groupStart = -1;\n let groupEnd = -1;\n if (anchoredStart) {\n if (text.startsWith(prefix)) {\n const pos = prefix.length;\n let cursor = pos;\n while (cursor < text.length) {\n const code = text.charCodeAt(cursor);\n if (code < 128 ? ascii[code] === 0 : !accepts(text[cursor]!)) break;\n cursor++;\n }\n if (cursor - pos >= minimum && (!anchoredEnd || cursor === text.length)) {\n found = 0;\n matchEnd = cursor;\n groupStart = pos;\n groupEnd = cursor;\n }\n }\n } else {\n let searchFrom = from;\n while (searchFrom <= text.length - prefix.length) {\n const idx = text.indexOf(prefix, searchFrom);\n if (idx < 0) break;\n const pos = idx + prefix.length;\n let cursor = pos;\n while (cursor < text.length) {\n const code = text.charCodeAt(cursor);\n if (code < 128 ? ascii[code] === 0 : !accepts(text[cursor]!)) break;\n cursor++;\n }\n if (cursor - pos >= minimum && (!anchoredEnd || cursor === text.length)) {\n found = idx;\n matchEnd = cursor;\n groupStart = pos;\n groupEnd = cursor;\n break;\n }\n searchFrom = idx + 1;\n }\n }\n const positionsTried = anchoredStart ? 1 : found >= 0 ? found - from + 1 : text.length - from + 1;\n const len = found >= 0 ? matchEnd - found : 0;\n const stepCount = positionsTried * 2 + (found >= 0 ? this.code.length * 2 + len : 0);\n budget.step(stepCount);\n if (stepCount >= 64) {\n const midCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (midCheck) {\n return midCheck.then(() => {\n if (found < 0) return undefined;\n if (len > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const full = text.slice(found, matchEnd);\n const groups = captured ? [full, text.slice(groupStart, groupEnd)] : [full];\n return { start: found, end: matchEnd, groups };\n });\n }\n }\n if (found < 0) return undefined;\n if (len > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const full = text.slice(found, matchEnd);\n const groups = captured ? [full, text.slice(groupStart, groupEnd)] : [full];\n return { start: found, end: matchEnd, groups };\n }\n\n async find(text: string, budget: PatternBudget, from = 0): Promise<Match | undefined> {\n this.assertInstructionLimit(budget);\n if (!this.code.length) await this.prepare(budget);\n if (this.dialect === \"jq\") return (await this.findJq(text, budget, from))?.match;\n if (this.simpleRepeatMatch) {\n const initialCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (initialCheck) await initialCheck;\n return await this.execSimpleRepeat(text, budget, from);\n }\n const initialCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (initialCheck) await initialCheck;\n if (this.literalMatch) {\n const { value, anchoredStart, anchoredEnd, groups } = this.literalMatch;\n const len = value.length;\n if (from > text.length || (anchoredStart && from > 0)) return undefined;\n let found = -1;\n if (anchoredStart && anchoredEnd) {\n if (from === 0 && text.length === len && text === value) found = 0;\n } else if (anchoredStart) {\n if (from === 0 && text.startsWith(value)) found = 0;\n } else if (anchoredEnd) {\n const candidate = text.length - len;\n if (candidate >= from && text.endsWith(value)) found = candidate;\n } else {\n found = text.indexOf(value, from);\n }\n const positionsTried = anchoredStart ? 1 : found >= 0 ? found - from + 1 : text.length - from + 1;\n const stepCount = positionsTried * 2 + (found >= 0 ? this.code.length * 2 + len : 0);\n budget.step(stepCount);\n if (stepCount >= 64) {\n const midCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (midCheck) await midCheck;\n }\n if (found < 0) return undefined;\n if (len > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const endCheck = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (endCheck) await endCheck;\n return { start: found, end: found + len, groups };\n }\n let units = 0;\n const work = (count = 1): void | Promise<void> => {\n budget.step(count);\n units += count;\n if (units < 64) return undefined;\n units %= 64;\n return (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n };\n if (this.linear) {\n for (let start = from; start <= text.length && (!this.anchored || start === 0); start++) {\n let position = start;\n for (const instruction of this.code) {\n const paused = work(2);\n if (paused) await paused;\n if (instruction.kind === \"character\") {\n if (position >= text.length || !instruction.accepts(text[position]!)) break;\n position++;\n } else if (instruction.kind === \"begin\" && position !== 0 || instruction.kind === \"end\" && position !== text.length) break;\n else if (instruction.kind === \"match\") {\n if (position - start > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const copied = work(position - start);\n if (copied) await copied;\n const match = { start, end: position, groups: [text.slice(start, position)] };\n await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n return match;\n }\n }\n }\n return undefined;\n }\n interface Thread { pc: number; start: number; captures: number[]; bytes: number }\n const storage = new NfaStorage(budget);\n const positionDigits = String(text.length).length;\n const instructionDigits = String(this.code.length).length;\n if (from > text.length || this.anchored && from !== 0) return undefined;\n storage.reserve(128);\n const positions = new Map<number, Thread[]>();\n let earliestStarts: Map<number, number> | undefined;\n let nextStart = from;\n let bestStart: number | undefined;\n let bestEnd: number | undefined;\n let bestCaptures: number[] = [];\n let bestBytes = 0;\n try {\n if (this.groupCount && !this.backreferences && !this.anchored) {\n storage.reserve(64);\n earliestStarts = new Map();\n }\n let position = from;\n while (position <= text.length) {\n const advanced = work();\n if (advanced) await advanced;\n let pending = positions.get(position);\n if (bestStart === undefined && (!this.anchored || position === 0) && (!this.backreferences || position === nextStart)) {\n storage.reserve(72 + (pending ? 0 : 64));\n pending ??= [];\n pending.push({ pc: 0, start: position, captures: [], bytes: 72 });\n }\n if (!pending && !positions.size) break;\n if (!pending) { position++; continue; }\n const reversed = work(pending.length);\n if (reversed) await reversed;\n pending.reverse();\n positions.delete(position);\n const visited = new Map<string | number, number>();\n let stateBytes = 0;\n const enqueue = (destination: number, pc: number, start: number, captures: number[], saveSlot?: number, clearSlots?: readonly number[]): void => {\n const length = saveSlot === undefined ? captures.length : Math.max(captures.length, saveSlot + 1);\n const bytes = 72 + length * 8;\n const waiting = destination === position ? pending : positions.get(destination);\n storage.reserve(bytes + (waiting ? 0 : 64));\n const saved = saveSlot === undefined && !clearSlots?.length ? captures : [...captures];\n if (clearSlots) for (const slot of clearSlots) delete saved[slot];\n if (saveSlot !== undefined) saved[saveSlot] = position;\n const thread = { pc, start, captures: saved, bytes };\n if (waiting) waiting.push(thread);\n else positions.set(destination, [thread]);\n };\n while (pending.length) {\n const paused = work();\n if (paused) await paused;\n const thread = pending.pop()!;\n try {\n if (bestStart !== undefined && thread.start > bestStart) continue;\n if (earliestStarts) {\n // Without backreferences captures affect only the result, so all\n // capture variants of a later start lose to the earliest start.\n const earliest = earliestStarts.get(thread.pc);\n if (earliest !== undefined && earliest < thread.start) continue;\n if (earliest === undefined) { storage.reserve(40); stateBytes += 40; }\n earliestStarts.set(thread.pc, thread.start);\n }\n let state: string | number = thread.pc;\n let bytes = 40;\n if (this.groupCount) {\n const joinedLength = Math.max(0, thread.captures.length - 1) + thread.captures.length * positionDigits;\n const stateLength = instructionDigits + 1 + joinedLength;\n const serialized = work(stateLength);\n if (serialized) await serialized;\n const reserved = 32 + joinedLength * 2 + 72 + stateLength * 2;\n storage.reserve(reserved);\n state = `${thread.pc}:${thread.captures.join(\",\")}`;\n bytes = 72 + state.length * 2;\n storage.release(reserved - bytes);\n } else storage.reserve(bytes);\n // At one input position, equal program/capture states have identical\n // futures. Keep the earliest start instead of rescanning each suffix.\n const priorStart = visited.get(state);\n if (priorStart !== undefined) {\n storage.release(bytes);\n if (priorStart <= thread.start) continue;\n } else stateBytes += bytes;\n visited.set(state, thread.start);\n const instruction = this.code[thread.pc]!;\n if (instruction.kind === \"character\") {\n if (position < text.length && instruction.accepts(text[position]!)) enqueue(position + 1, thread.pc + 1, thread.start, thread.captures);\n } else if (instruction.kind === \"backreference\") {\n const begin = thread.captures[instruction.index * 2];\n const end = thread.captures[instruction.index * 2 + 1];\n if (begin === undefined || end === undefined || position + end - begin > text.length) continue;\n let matches = true;\n for (let offset = 0; offset < end - begin; offset++) {\n const compared = work();\n if (compared) await compared;\n const expected = text[begin + offset]!;\n const actual = text[position + offset]!;\n if (instruction.ignoreCase ? expected.toLowerCase() !== actual.toLowerCase() : expected !== actual) { matches = false; break; }\n }\n if (matches) enqueue(position + end - begin, thread.pc + 1, thread.start, thread.captures);\n } else if (instruction.kind === \"match\") {\n let preferred = bestStart === undefined || thread.start < bestStart || thread.start === bestStart && position > bestEnd!;\n if (thread.start === bestStart && position === bestEnd) for (let index = 1; index <= this.groupCount; index++) {\n const compared = work();\n if (compared) await compared;\n const begin = thread.captures[index * 2];\n const end = thread.captures[index * 2 + 1];\n const priorBegin = bestCaptures[index * 2];\n const priorEnd = bestCaptures[index * 2 + 1];\n const length = begin === undefined || end === undefined ? -1 : end - begin;\n const priorLength = priorBegin === undefined || priorEnd === undefined ? -1 : priorEnd - priorBegin;\n if (length !== priorLength) { preferred = length > priorLength; break; }\n }\n if (preferred) {\n const retained = 32 + thread.captures.length * 8;\n storage.reserve(retained);\n bestStart = thread.start;\n bestEnd = position;\n bestCaptures = thread.captures;\n storage.release(bestBytes);\n bestBytes = retained;\n }\n } else if (instruction.kind === \"split\") {\n enqueue(position, instruction.second, thread.start, thread.captures);\n enqueue(position, instruction.first, thread.start, thread.captures);\n } else if (instruction.kind === \"jump\") enqueue(position, instruction.target, thread.start, thread.captures);\n else if (instruction.kind === \"save\") {\n const copied = work(Math.max(thread.captures.length, instruction.slot + 1));\n if (copied) await copied;\n enqueue(position, thread.pc + 1, thread.start, thread.captures, instruction.slot, instruction.clear);\n } else if (instruction.kind === \"boundary\") {\n if (matchesBoundary(instruction.boundary, text, position)) enqueue(position, thread.pc + 1, thread.start, thread.captures);\n } else if (instruction.kind === \"begin\" ? position === 0 : position === text.length) enqueue(position, thread.pc + 1, thread.start, thread.captures);\n } finally { storage.release(thread.bytes); }\n }\n visited.clear();\n earliestStarts?.clear();\n storage.release(stateBytes + 64);\n if (this.backreferences && !positions.size) {\n // Captured text changes backreference transitions. Admit starts\n // serially to avoid retaining every start's distinct capture history.\n if (bestStart !== undefined || this.anchored) break;\n position = ++nextStart;\n } else position++;\n }\n if (bestStart !== undefined && bestEnd !== undefined) {\n let characters = bestEnd - bestStart;\n for (let index = 1; index <= this.groupCount; index++) {\n const counted = work();\n if (counted) await counted;\n const begin = bestCaptures[index * 2];\n const end = bestCaptures[index * 2 + 1];\n if (begin !== undefined && end !== undefined) characters += end - begin;\n }\n const copied = work(characters);\n if (copied) await copied;\n storage.reserve(64 + (this.groupCount + 1) * 40 + characters * 2);\n const groups: (string | undefined)[] = [text.slice(bestStart, bestEnd)];\n for (let index = 1; index <= this.groupCount; index++) {\n const materialized = work();\n if (materialized) await materialized;\n const begin = bestCaptures[index * 2];\n const end = bestCaptures[index * 2 + 1];\n groups.push(begin === undefined || end === undefined ? undefined : text.slice(begin, end));\n }\n await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n return { start: bestStart, end: bestEnd, groups };\n }\n return undefined;\n } finally { positions.clear(); earliestStarts?.clear(); storage.clear(); }\n }\n}\n\ntype ReplacementSyntax = \"sed\" | \"awk\";\n\nasync function replacementLength(replacement: string, match: Match, budget: Budget, available: number, syntax: ReplacementSyntax): Promise<number> {\n let length = 0;\n let tokens = 0;\n for (let index = 0; index < replacement.length; index++) {\n if (tokens++ % 256 === 0) await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n budget.step();\n const character = replacement[index]!;\n let size = 1;\n if (character === \"&\") {\n budget.step();\n size = match.groups[0]?.length ?? 0;\n } else if (character === \"\\\\\" && index + 1 < replacement.length) {\n budget.step();\n const next = replacement[++index]!;\n if (syntax === \"awk\") {\n size = next === \"&\" || next === \"\\\\\" ? 1 : 2;\n } else if (next >= \"0\" && next <= \"9\") {\n budget.step();\n size = match.groups[Number(next)]?.length ?? 0;\n }\n }\n if (size > available - length) throw new ProgramError(\"text buffer limit exceeded\");\n length += size;\n }\n return length;\n}\n\nasync function replacementText(replacement: string, match: Match, buffer: ReplacementBuffer, budget: Budget, syntax: ReplacementSyntax): Promise<void> {\n let literal = 0;\n let tokens = 0;\n for (let index = 0; index < replacement.length; index++) {\n if (tokens++ % 256 === 0) await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n budget.step();\n const character = replacement[index]!;\n if (character !== \"&\" && (character !== \"\\\\\" || index + 1 === replacement.length)) continue;\n await buffer.append(replacement, literal, index);\n if (character === \"&\") {\n budget.step();\n await buffer.append(match.groups[0] ?? \"\");\n } else {\n budget.step();\n const next = replacement[++index]!;\n if (syntax === \"awk\") {\n await buffer.append(replacement, next === \"&\" || next === \"\\\\\" ? index : index - 1, index + 1);\n } else if (next >= \"0\" && next <= \"9\") {\n budget.step();\n await buffer.append(match.groups[Number(next)] ?? \"\");\n } else await buffer.append(next === \"n\" ? \"\\n\" : next === \"t\" ? \"\\t\" : next);\n }\n literal = index + 1;\n }\n await buffer.append(replacement, literal);\n}\n\nconst RETURN_UNDEFINED = (): undefined => undefined;\nconst RETURN_MINUS_ONE = (): -1 => -1;\nconst FAST_MATCH_OFFSETS = new Int32Array(20);\nconst SYNC_SUB_RESULT = { text: \"\", count: 0 };\ninterface SimpleReplacement {\n readonly kind: \"literal\" | \"singleRef\" | \"twoRefs\";\n readonly prefix: string;\n readonly group: number;\n readonly mid: string;\n readonly group2: number;\n readonly suffix: string;\n readonly stepsPerExpansion: number;\n readonly smallInts: (string | undefined)[];\n}\nconst SIMPLE_REPLACEMENT_CACHE = new Map<string, SimpleReplacement | null>();\n\nfunction getSimpleReplacement(replacement: string, syntax: ReplacementSyntax): SimpleReplacement | null {\n const key = syntax === \"sed\" ? replacement : `awk:${replacement}`;\n const cached = SIMPLE_REPLACEMENT_CACHE.get(key);\n if (cached !== undefined) return cached;\n if (SIMPLE_REPLACEMENT_CACHE.size >= 128) SIMPLE_REPLACEMENT_CACHE.clear();\n if (!replacement.includes(\"&\") && !replacement.includes(\"\\\\\")) {\n const res: SimpleReplacement = { kind: \"literal\", prefix: replacement, group: -1, mid: \"\", group2: -1, suffix: \"\", stepsPerExpansion: replacement.length * 2 + 1, smallInts: [] };\n SIMPLE_REPLACEMENT_CACHE.set(key, res);\n return res;\n }\n if (syntax === \"sed\") {\n let prefix = \"\";\n let mid = \"\";\n let suffix = \"\";\n let group = -1;\n let group2 = -1;\n let steps = 1;\n for (let i = 0; i < replacement.length; i++) {\n steps++;\n const ch = replacement[i]!;\n if (ch === \"&\") {\n if (group2 !== -1) { SIMPLE_REPLACEMENT_CACHE.set(key, null); return null; }\n steps++;\n if (group === -1) group = 0;\n else group2 = 0;\n } else if (ch === \"\\\\\" && i + 1 < replacement.length) {\n steps++;\n const next = replacement[++i]!;\n if (next >= \"0\" && next <= \"9\") {\n if (group2 !== -1) { SIMPLE_REPLACEMENT_CACHE.set(key, null); return null; }\n steps++;\n if (group === -1) group = next.charCodeAt(0) - 48;\n else group2 = next.charCodeAt(0) - 48;\n } else {\n const decoded = next === \"n\" ? \"\\n\" : next === \"t\" ? \"\\t\" : next;\n if (group === -1) prefix += decoded;\n else if (group2 === -1) mid += decoded;\n else suffix += decoded;\n }\n } else {\n if (group === -1) prefix += ch;\n else if (group2 === -1) mid += ch;\n else suffix += ch;\n }\n }\n const res: SimpleReplacement = group === -1\n ? { kind: \"literal\", prefix, group: -1, mid: \"\", group2: -1, suffix: \"\", stepsPerExpansion: steps + prefix.length, smallInts: [] }\n : group2 === -1\n ? { kind: \"singleRef\", prefix, group, mid: \"\", group2: -1, suffix: mid, stepsPerExpansion: steps + prefix.length + mid.length, smallInts: new Array(100) }\n : { kind: \"twoRefs\", prefix, group, mid, group2, suffix, stepsPerExpansion: steps + prefix.length + mid.length + suffix.length, smallInts: [] };\n SIMPLE_REPLACEMENT_CACHE.set(key, res);\n return res;\n }\n SIMPLE_REPLACEMENT_CACHE.set(key, null);\n return null;\n}\n\nfunction appendReplacementFromOffsetsSync(\n out: string,\n replacement: string,\n text: string,\n matchStart: number,\n matchEnd: number,\n group1Start: number,\n group1End: number,\n budget: Budget,\n maxBufferBytes: number,\n syntax: ReplacementSyntax,\n simpleRep = getSimpleReplacement(replacement, syntax),\n): string {\n if (simpleRep !== null) {\n if (simpleRep.kind === \"literal\") {\n budget.step(simpleRep.stepsPerExpansion);\n if (out.length + simpleRep.prefix.length > maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n return out ? out + simpleRep.prefix : simpleRep.prefix;\n }\n if (simpleRep.kind === \"twoRefs\") {\n const g1Start = simpleRep.group === 0 ? matchStart : simpleRep.group === 1 ? group1Start : FAST_MATCH_OFFSETS[simpleRep.group * 2]!;\n const g1End = simpleRep.group === 0 ? matchEnd : simpleRep.group === 1 ? group1End : FAST_MATCH_OFFSETS[simpleRep.group * 2 + 1]!;\n const g2Start = simpleRep.group2 === 0 ? matchStart : simpleRep.group2 === 1 ? group1Start : FAST_MATCH_OFFSETS[simpleRep.group2 * 2]!;\n const g2End = simpleRep.group2 === 0 ? matchEnd : simpleRep.group2 === 1 ? group1End : FAST_MATCH_OFFSETS[simpleRep.group2 * 2 + 1]!;\n const g1Len = g1Start >= 0 && g1End > g1Start ? g1End - g1Start : 0;\n const g2Len = g2Start >= 0 && g2End > g2Start ? g2End - g2Start : 0;\n const addedLen = simpleRep.prefix.length + g1Len + simpleRep.mid.length + g2Len + simpleRep.suffix.length;\n budget.step(simpleRep.stepsPerExpansion + g1Len + g2Len);\n if (out.length + addedLen > maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const g1Str = g1Len > 0 ? text.slice(g1Start, g1End) : \"\";\n const g2Str = g2Len > 0 ? text.slice(g2Start, g2End) : \"\";\n const expanded = simpleRep.suffix\n ? simpleRep.prefix + g1Str + simpleRep.mid + g2Str + simpleRep.suffix\n : simpleRep.prefix + g1Str + simpleRep.mid + g2Str;\n return out ? out + expanded : expanded;\n }\n const gStart = simpleRep.group === 0 ? matchStart : simpleRep.group === 1 ? group1Start : FAST_MATCH_OFFSETS[simpleRep.group * 2]!;\n const gEnd = simpleRep.group === 0 ? matchEnd : simpleRep.group === 1 ? group1End : FAST_MATCH_OFFSETS[simpleRep.group * 2 + 1]!;\n const gLen = gStart >= 0 && gEnd > gStart ? gEnd - gStart : 0;\n const addedLen = simpleRep.prefix.length + gLen + simpleRep.suffix.length;\n budget.step(simpleRep.stepsPerExpansion + gLen);\n if (out.length + addedLen > maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n let expanded: string | undefined;\n if (gLen === 1) {\n const c0 = text.charCodeAt(gStart) - 48;\n if (c0 >= 0 && c0 <= 9) {\n expanded = simpleRep.smallInts[c0] ??= (simpleRep.suffix ? simpleRep.prefix + String.fromCharCode(c0 + 48) + simpleRep.suffix : simpleRep.prefix + String.fromCharCode(c0 + 48));\n }\n } else if (gLen === 2) {\n const c0 = text.charCodeAt(gStart) - 48;\n const c1 = text.charCodeAt(gStart + 1) - 48;\n if (c0 >= 1 && c0 <= 9 && c1 >= 0 && c1 <= 9) {\n const num = c0 * 10 + c1;\n expanded = simpleRep.smallInts[num] ??= (simpleRep.suffix ? simpleRep.prefix + String(num) + simpleRep.suffix : simpleRep.prefix + String(num));\n }\n }\n if (expanded === undefined) {\n const gStr = gLen > 0 ? text.slice(gStart, gEnd) : \"\";\n expanded = simpleRep.suffix ? simpleRep.prefix + gStr + simpleRep.suffix : simpleRep.prefix + gStr;\n }\n return out ? out + expanded : expanded;\n }\n const initialOutLen = out.length;\n let literalStart = 0;\n for (let index = 0; index < replacement.length; index++) {\n budget.step();\n const character = replacement[index]!;\n if (character !== \"&\" && (character !== \"\\\\\" || index + 1 >= replacement.length)) continue;\n if (index > literalStart) {\n const litLen = index - literalStart;\n if (out.length + litLen > maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const span = literalStart === 0 && index === replacement.length ? replacement : replacement.slice(literalStart, index);\n out = out ? out + span : span;\n }\n let piece = \"\";\n if (character === \"&\") {\n budget.step();\n piece = matchEnd > matchStart ? text.slice(matchStart, matchEnd) : \"\";\n } else {\n budget.step();\n const next = replacement[++index]!;\n if (syntax === \"awk\") {\n piece = next === \"&\" || next === \"\\\\\" ? next : `\\\\${next}`;\n } else if (next >= \"0\" && next <= \"9\") {\n budget.step();\n const g = next.charCodeAt(0) - 48;\n if (g === 0) piece = matchEnd > matchStart ? text.slice(matchStart, matchEnd) : \"\";\n else if (g === 1 && group1Start >= 0) piece = group1End > group1Start ? text.slice(group1Start, group1End) : \"\";\n else if (g > 1) {\n const gs = FAST_MATCH_OFFSETS[g * 2]!;\n const ge = FAST_MATCH_OFFSETS[g * 2 + 1]!;\n if (gs >= 0 && ge > gs) piece = text.slice(gs, ge);\n }\n } else {\n piece = next === \"n\" ? \"\\n\" : next === \"t\" ? \"\\t\" : next;\n }\n }\n if (out.length + piece.length > maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n if (piece) out = out ? out + piece : piece;\n literalStart = index + 1;\n }\n if (literalStart < replacement.length) {\n const tailLen = replacement.length - literalStart;\n if (out.length + tailLen > maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const span = literalStart === 0 ? replacement : replacement.slice(literalStart);\n out = out ? out + span : span;\n }\n budget.step((out.length - initialOutLen) + 1);\n return out;\n}\n\nfunction substituteAfterCheck(\n check: Promise<void>,\n text: string,\n pattern: Pattern,\n replacement: string,\n budget: Budget,\n global: boolean,\n occurrence: number,\n syntax: ReplacementSyntax,\n): Promise<{ text: string; count: number }> {\n return check.then(() => substitute(text, pattern, replacement, budget, global, occurrence, syntax));\n}\n\nfunction resolveSubAfterCheck(\n check: Promise<void>,\n out: string,\n count: number,\n): Promise<{ text: string; count: number }> {\n return check.then(() => ({ text: out, count }));\n}\n\nexport function trySubstituteSync(\n text: string,\n pattern: Pattern,\n replacement: string,\n budget: Budget,\n global: boolean,\n occurrence = 1,\n syntax: ReplacementSyntax = \"sed\",\n): { text: string; count: number } | Promise<{ text: string; count: number }> {\n if (pattern.canFindSync() && text.length <= 4096 && replacement.length <= 256) {\n let search = 0;\n let consumed = 0;\n let previousEnd = -1;\n let encountered = 0;\n let count = 0;\n let out = \"\";\n while (search <= text.length) {\n budget.step();\n if (!pattern.findSyncFastInto(text, budget, search, FAST_MATCH_OFFSETS)) break;\n const matchStart = FAST_MATCH_OFFSETS[0]!;\n const matchEnd = FAST_MATCH_OFFSETS[1]!;\n const group1Start = FAST_MATCH_OFFSETS[2]!;\n const group1End = FAST_MATCH_OFFSETS[3]!;\n if (matchStart === matchEnd && matchStart === previousEnd) {\n search = matchEnd + 1;\n continue;\n }\n encountered++;\n if (encountered >= occurrence) {\n const prefixLen = matchStart - consumed;\n if (out.length + prefixLen > budget.maxBufferBytes) {\n throw new ProgramError(\"text buffer limit exceeded\");\n }\n if (prefixLen > 0) {\n const pref = text.slice(consumed, matchStart);\n out = out ? out + pref : pref;\n }\n out = appendReplacementFromOffsetsSync(out, replacement, text, matchStart, matchEnd, group1Start, group1End, budget, budget.maxBufferBytes, syntax);\n consumed = matchEnd;\n count++;\n if (!global || pattern.getFastPrefixInfo()?.anchoredStart) break;\n }\n previousEnd = matchEnd;\n search = matchEnd === matchStart ? matchEnd + 1 : matchEnd;\n }\n if (count > 0) {\n const tailLen = text.length - consumed;\n if (out.length + tailLen > budget.maxBufferBytes) {\n throw new ProgramError(\"text buffer limit exceeded\");\n }\n if (tailLen > 0) {\n const tail = consumed === 0 ? text : text.slice(consumed);\n out = out ? out + tail : tail;\n }\n } else {\n out = budget.check(text);\n }\n SYNC_SUB_RESULT.text = out;\n SYNC_SUB_RESULT.count = count;\n return SYNC_SUB_RESULT;\n }\n if (!global && occurrence === 1 && !replacement.includes(\"&\") && !replacement.includes(\"\\\\\")) {\n budget.step();\n const matchOrPromise = pattern.tryFindSync(text, budget, 0);\n if (matchOrPromise instanceof Promise) {\n return matchOrPromise.then(match => {\n if (!match) {\n budget.step(0);\n return { text: budget.check(text), count: 0 };\n }\n const newLen = text.length - (match.end - match.start) + replacement.length;\n if (newLen > budget.maxBufferBytes || match.start + replacement.length > budget.maxBufferBytes) {\n throw new ProgramError(\"text buffer limit exceeded\");\n }\n budget.step(replacement.length * 2 + 1);\n const out = (match.start === 0 ? \"\" : text.slice(0, match.start)) + replacement + (match.end === text.length ? \"\" : text.slice(match.end));\n return { text: budget.check(out), count: 1 };\n });\n }\n const match = matchOrPromise;\n if (!match) {\n budget.step(0);\n return { text: budget.check(text), count: 0 };\n }\n const newLen = text.length - (match.end - match.start) + replacement.length;\n if (newLen > budget.maxBufferBytes || match.start + replacement.length > budget.maxBufferBytes) {\n throw new ProgramError(\"text buffer limit exceeded\");\n }\n budget.step(replacement.length * 2 + 1);\n const out = (match.start === 0 ? \"\" : text.slice(0, match.start)) + replacement + (match.end === text.length ? \"\" : text.slice(match.end));\n return { text: budget.check(out), count: 1 };\n }\n return substitute(text, pattern, replacement, budget, global, occurrence, syntax);\n}\n\nexport async function substitute(text: string, pattern: Pattern, replacement: string, budget: Budget, global: boolean, occurrence = 1, syntax: ReplacementSyntax = \"sed\"): Promise<{ text: string; count: number }> {\n if (!global && occurrence === 1 && !replacement.includes(\"&\") && !replacement.includes(\"\\\\\")) {\n const check = (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n if (check) await check;\n budget.step();\n const match = await pattern.find(text, budget, 0);\n if (!match) {\n budget.step(0);\n return { text: budget.check(text), count: 0 };\n }\n const newLen = text.length - (match.end - match.start) + replacement.length;\n if (newLen > budget.maxBufferBytes || match.start + replacement.length > budget.maxBufferBytes) {\n throw new ProgramError(\"text buffer limit exceeded\");\n }\n budget.step(replacement.length * 2 + 1);\n const out = (match.start === 0 ? \"\" : text.slice(0, match.start)) + replacement + (match.end === text.length ? \"\" : text.slice(match.end));\n return { text: budget.check(out), count: 1 };\n }\n let search = 0;\n let consumed = 0;\n let previousEnd = -1;\n let encountered = 0;\n let count = 0;\n const result = new ReplacementBuffer(budget);\n try {\n while (search <= text.length) {\n await (budget.checkpointSync ? budget.checkpointSync() : budget.checkpoint());\n budget.step();\n const match = await pattern.find(text, budget, search);\n if (!match) break;\n if (match.start === match.end && match.start === previousEnd) { search = match.end + 1; continue; }\n encountered++;\n if (encountered >= occurrence) {\n const prefix = match.start - consumed;\n result.admit(prefix);\n const length = await replacementLength(replacement, match, budget, result.remaining - prefix, syntax);\n result.admit(prefix + length);\n await result.append(text, consumed, match.start);\n await replacementText(replacement, match, result, budget, syntax);\n consumed = match.end; count++;\n if (!global) break;\n }\n previousEnd = match.end > match.start ? match.end : -1;\n search = match.end > match.start ? match.end : match.end + 1;\n }\n budget.step(0);\n if (!count) return { text: budget.check(text), count };\n await result.append(text, consumed);\n return { text: await result.finish(), count };\n } finally { result.clear(); }\n}\n\n\nconst PAIR_OFFSETS_1 = new Int32Array(4);\nconst PAIR_OFFSETS_2 = new Int32Array(4);\nconst SYNC_PAIR_RESULT = { text: \"\", substituted: false };\n\nfunction expandSimpleFromOffsets(\n simpleRep: SimpleReplacement,\n text: string,\n matchStart: number,\n matchEnd: number,\n group1Start: number,\n group1End: number,\n budget: Budget,\n): string {\n if (simpleRep.kind === \"literal\") {\n budget.step(simpleRep.stepsPerExpansion);\n return simpleRep.prefix;\n }\n const gStart = simpleRep.group === 0 ? matchStart : simpleRep.group === 1 ? group1Start : -1;\n const gEnd = simpleRep.group === 0 ? matchEnd : simpleRep.group === 1 ? group1End : -1;\n const gLen = gStart >= 0 && gEnd > gStart ? gEnd - gStart : 0;\n budget.step(simpleRep.stepsPerExpansion + gLen);\n if (gLen === 1) {\n const c0 = text.charCodeAt(gStart) - 48;\n if (c0 >= 0 && c0 <= 9) {\n return simpleRep.smallInts[c0] ??= (simpleRep.suffix ? simpleRep.prefix + String.fromCharCode(c0 + 48) + simpleRep.suffix : simpleRep.prefix + String.fromCharCode(c0 + 48));\n }\n } else if (gLen === 2) {\n const c0 = text.charCodeAt(gStart) - 48;\n const c1 = text.charCodeAt(gStart + 1) - 48;\n if (c0 >= 1 && c0 <= 9 && c1 >= 0 && c1 <= 9) {\n const num = c0 * 10 + c1;\n return simpleRep.smallInts[num] ??= (simpleRep.suffix ? simpleRep.prefix + String(num) + simpleRep.suffix : simpleRep.prefix + String(num));\n }\n }\n const gStr = gLen > 0 ? text.slice(gStart, gEnd) : \"\";\n return simpleRep.suffix ? simpleRep.prefix + gStr + simpleRep.suffix : simpleRep.prefix + gStr;\n}\n\nexport function trySubstitutePairSync(\n text: string,\n pat1: Pattern,\n rep1: string,\n global1: boolean,\n occ1: number,\n pat2: Pattern,\n rep2: string,\n global2: boolean,\n occ2: number,\n budget: Budget,\n): { text: string; substituted: boolean } | undefined | Promise<undefined> {\n if (occ1 !== 1 || occ2 !== 1 || text.length > 4096) return undefined;\n if (!pat1.canFindSync() || !pat2.canFindSync()) return undefined;\n const info1 = pat1.getFastPrefixInfo();\n const info2 = pat2.getFastPrefixInfo();\n if (!info1 || !info2 || !info1.anchoredStart || info2.anchoredStart || info2.prefix.length === 0) return undefined;\n const sr1 = getSimpleReplacement(rep1, \"sed\");\n const sr2 = getSimpleReplacement(rep2, \"sed\");\n if (!sr1 || !sr2) return undefined;\n budget.step();\n let effectiveE1 = 0;\n let exp1 = \"\";\n let effectiveExp1Len = 0;\n let matched1 = false;\n if (pat1.findSyncFastInto(text, budget, 0, PAIR_OFFSETS_1)) {\n const e1 = PAIR_OFFSETS_1[1]!;\n if (e1 === 0) return undefined;\n matched1 = true;\n exp1 = expandSimpleFromOffsets(sr1, text, 0, e1, PAIR_OFFSETS_1[2]!, PAIR_OFFSETS_1[3]!, budget);\n let commonSuffix = 0;\n const maxSuffix = Math.min(exp1.length, e1);\n while (commonSuffix < maxSuffix && exp1.charCodeAt(exp1.length - 1 - commonSuffix) === text.charCodeAt(e1 - 1 - commonSuffix)) {\n commonSuffix++;\n }\n effectiveExp1Len = exp1.length - commonSuffix;\n effectiveE1 = e1 - commonSuffix;\n const firstChar2 = info2.prefix.charCodeAt(0);\n for (let i = 0; i < effectiveExp1Len; i++) {\n if (exp1.charCodeAt(i) === firstChar2) return undefined;\n }\n }\n budget.step();\n if (!pat2.findSyncFastInto(text, budget, effectiveE1, PAIR_OFFSETS_2)) {\n if (!matched1) {\n SYNC_PAIR_RESULT.text = budget.check(text);\n SYNC_PAIR_RESULT.substituted = false;\n return SYNC_PAIR_RESULT;\n }\n const outLen = effectiveExp1Len + (text.length - effectiveE1);\n if (outLen > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n budget.step(text.length - effectiveE1 + 1);\n const expPrefix = effectiveExp1Len === exp1.length ? exp1 : exp1.slice(0, effectiveExp1Len);\n SYNC_PAIR_RESULT.text = effectiveE1 < text.length ? expPrefix + text.slice(effectiveE1) : expPrefix;\n SYNC_PAIR_RESULT.substituted = true;\n return SYNC_PAIR_RESULT;\n }\n const s2 = PAIR_OFFSETS_2[0]!;\n const e2 = PAIR_OFFSETS_2[1]!;\n if (s2 < effectiveE1 || e2 === s2) return undefined;\n const g2s = PAIR_OFFSETS_2[2]!;\n const g2e = PAIR_OFFSETS_2[3]!;\n if (global2 && e2 <= text.length) {\n budget.step();\n if (pat2.findSyncFastInto(text, budget, e2, PAIR_OFFSETS_1)) return undefined;\n }\n const exp2 = expandSimpleFromOffsets(sr2, text, s2, e2, g2s, g2e, budget);\n const midLen = s2 - effectiveE1;\n const tailLen = text.length - e2;\n const totalLen = effectiveExp1Len + midLen + exp2.length + tailLen;\n if (totalLen > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n budget.step(midLen + tailLen + 2);\n const expPrefix = effectiveExp1Len === 0 ? \"\" : effectiveExp1Len === exp1.length ? exp1 : exp1.slice(0, effectiveExp1Len);\n const mid = midLen > 0 ? text.slice(effectiveE1, s2) : \"\";\n const tail = tailLen > 0 ? text.slice(e2) : \"\";\n SYNC_PAIR_RESULT.text = expPrefix + mid + exp2 + tail;\n SYNC_PAIR_RESULT.substituted = true;\n return SYNC_PAIR_RESULT;\n}\n\nexport function trySubstitutePairToBufferSync(\n text: string,\n pat1: Pattern,\n rep1: string,\n global1: boolean,\n occ1: number,\n pat2: Pattern,\n rep2: string,\n global2: boolean,\n occ2: number,\n budget: Budget,\n outBuf: Uint8Array,\n outPos: number,\n sepCode: number,\n lineStart = 0,\n lineEnd = text.length,\n): number | Promise<-1> {\n const lineLen = lineEnd - lineStart;\n if (occ1 !== 1 || occ2 !== 1 || lineLen > 4096) return -1;\n if (!pat1.canFindSync() || !pat2.canFindSync()) return -1;\n const info1 = pat1.getFastPrefixInfo();\n const info2 = pat2.getFastPrefixInfo();\n if (!info1 || !info2 || !info1.anchoredStart || info2.anchoredStart || info2.prefix.length === 0) return -1;\n const sr1 = getSimpleReplacement(rep1, \"sed\");\n const sr2 = getSimpleReplacement(rep2, \"sed\");\n if (!sr1 || !sr2) return -1;\n budget.step();\n let effectiveE1 = lineStart;\n let exp1 = \"\";\n let effectiveExp1Len = 0;\n if (pat1.findSyncFastInto(text, budget, lineStart, PAIR_OFFSETS_1, lineEnd, lineStart)) {\n const e1 = PAIR_OFFSETS_1[1]!;\n if (e1 === lineStart) return -1;\n exp1 = expandSimpleFromOffsets(sr1, text, lineStart, e1, PAIR_OFFSETS_1[2]!, PAIR_OFFSETS_1[3]!, budget);\n let commonSuffix = 0;\n const maxSuffix = Math.min(exp1.length, e1 - lineStart);\n while (commonSuffix < maxSuffix && exp1.charCodeAt(exp1.length - 1 - commonSuffix) === text.charCodeAt(e1 - 1 - commonSuffix)) {\n commonSuffix++;\n }\n effectiveExp1Len = exp1.length - commonSuffix;\n effectiveE1 = e1 - commonSuffix;\n const firstChar2 = info2.prefix.charCodeAt(0);\n for (let i = 0; i < effectiveExp1Len; i++) {\n if (exp1.charCodeAt(i) === firstChar2) return -1;\n }\n }\n budget.step();\n if (!pat2.findSyncFastInto(text, budget, effectiveE1, PAIR_OFFSETS_2, lineEnd, lineStart)) {\n const outLen = effectiveExp1Len + (lineEnd - effectiveE1);\n if (outLen > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n if (outPos + outLen + 1 > outBuf.length) return -1;\n budget.step(lineEnd - effectiveE1 + 1);\n let pos = outPos;\n for (let i = 0; i < effectiveExp1Len; i++) outBuf[pos++] = exp1.charCodeAt(i);\n for (let i = effectiveE1; i < lineEnd; i++) outBuf[pos++] = text.charCodeAt(i);\n outBuf[pos++] = sepCode;\n return pos;\n }\n const s2 = PAIR_OFFSETS_2[0]!;\n const e2 = PAIR_OFFSETS_2[1]!;\n if (s2 < effectiveE1 || e2 === s2) return -1;\n const g2s = PAIR_OFFSETS_2[2]!;\n const g2e = PAIR_OFFSETS_2[3]!;\n if (global2 && e2 <= lineEnd) {\n budget.step();\n if (pat2.findSyncFastInto(text, budget, e2, PAIR_OFFSETS_1, lineEnd, lineStart)) return -1;\n }\n const exp2 = expandSimpleFromOffsets(sr2, text, s2, e2, g2s, g2e, budget);\n const midLen = s2 - effectiveE1;\n const tailLen = lineEnd - e2;\n const totalLen = effectiveExp1Len + midLen + exp2.length + tailLen;\n if (totalLen > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n if (outPos + totalLen + 1 > outBuf.length) return -1;\n budget.step(midLen + tailLen + 2);\n let pos = outPos;\n for (let i = 0; i < effectiveExp1Len; i++) outBuf[pos++] = exp1.charCodeAt(i);\n for (let i = effectiveE1; i < s2; i++) outBuf[pos++] = text.charCodeAt(i);\n for (let i = 0; i < exp2.length; i++) outBuf[pos++] = exp2.charCodeAt(i);\n for (let i = e2; i < lineEnd; i++) outBuf[pos++] = text.charCodeAt(i);\n outBuf[pos++] = sepCode;\n return pos;\n}\n\nconst cachedPairOutBuf = new Uint8Array(65536);\nlet cachedPairOutView: Uint8Array = cachedPairOutBuf.subarray(0, 0);\nlet lastPairBatchText = \"\";\nlet lastPairBatchEnds: Int32Array | undefined;\nlet lastPairEndsLen = -1;\nlet lastPairPat1: Pattern | undefined;\nlet lastPairRep1 = \"\";\nlet lastPairG1 = false;\nlet lastPairPat2: Pattern | undefined;\nlet lastPairRep2 = \"\";\nlet lastPairG2 = false;\nlet lastPairSepCode = -1;\nlet lastPairMaxLine = 0;\nlet lastPairStepsCharged = 0;\nlet lastPairOutPos = -1;\n\nexport function trySubstitutePairBatchToBufferSync(\n batchText: string,\n batchEnds: Int32Array,\n endsLen: number,\n pat1: Pattern,\n rep1: string,\n global1: boolean,\n occ1: number,\n pat2: Pattern,\n rep2: string,\n global2: boolean,\n occ2: number,\n budget: Budget,\n outBuf: Uint8Array,\n sepCode: number,\n maxOutLen: number,\n): number {\n if (\n lastPairOutPos >= 0 &&\n batchText === lastPairBatchText &&\n batchEnds === lastPairBatchEnds &&\n endsLen === lastPairEndsLen &&\n pat1 === lastPairPat1 &&\n rep1 === lastPairRep1 &&\n global1 === lastPairG1 &&\n pat2 === lastPairPat2 &&\n rep2 === lastPairRep2 &&\n global2 === lastPairG2 &&\n sepCode === lastPairSepCode &&\n occ1 === 1 &&\n occ2 === 1 &&\n lastPairMaxLine <= budget.maxBufferBytes &&\n lastPairOutPos <= maxOutLen &&\n (budget.options.maxSteps ?? Infinity) >= budget.stepsUsed + lastPairStepsCharged\n ) {\n const pending = budget.checkpointSync ? budget.checkpointSync() : undefined;\n if (pending) {\n pending.catch(() => {});\n return -1;\n }\n budget.step(lastPairStepsCharged);\n outBuf.set(cachedPairOutView, 0);\n return lastPairOutPos;\n }\n const initialSteps = budget.stepsUsed;\n let maxSeenLine = 0;\n if (occ1 !== 1 || occ2 !== 1) return -1;\n if (!pat1.canFindSync() || !pat2.canFindSync()) return -1;\n const info1 = pat1.getFastPrefixInfo();\n const info2 = pat2.getFastPrefixInfo();\n if (!info1 || !info2 || !info1.anchoredStart || info2.anchoredStart || info2.prefix.length === 0) return -1;\n const sr1 = getSimpleReplacement(rep1, \"sed\");\n const sr2 = getSimpleReplacement(rep2, \"sed\");\n if (!sr1 || !sr2) return -1;\n\n const lit1 = pat1.getLiteralMatchInfo();\n const lit2 = pat2.getLiteralMatchInfo();\n const maxBuf = budget.maxBufferBytes;\n\n if (\n lit1 &&\n lit1.anchoredStart &&\n !lit1.anchoredEnd &&\n sr1.kind === \"literal\" &&\n lit2 &&\n !lit2.anchoredStart &&\n !lit2.anchoredEnd &&\n sr2.kind === \"literal\"\n ) {\n const v1 = lit1.value;\n const v1Len = v1.length;\n const v2 = lit2.value;\n const v2Len = v2.length;\n if (v1Len === 0 || v2Len === 0) return -1;\n const r1Val = sr1.prefix;\n let commonSuffix = 0;\n const maxSuffix = Math.min(r1Val.length, v1Len);\n while (\n commonSuffix < maxSuffix &&\n r1Val.charCodeAt(r1Val.length - 1 - commonSuffix) === v1.charCodeAt(v1Len - 1 - commonSuffix)\n ) {\n commonSuffix++;\n }\n const effectiveExp1Len = r1Val.length - commonSuffix;\n const effectiveE1Offset = v1Len - commonSuffix;\n const v2c0 = v2.charCodeAt(0);\n for (let i = 0; i < effectiveExp1Len; i++) {\n if (r1Val.charCodeAt(i) === v2c0) return -1;\n }\n const r2Val = sr2.prefix;\n const r2Len = r2Val.length;\n const v1c0 = v1.charCodeAt(0);\n const v1c1 = v1Len > 1 ? v1.charCodeAt(1) : -1;\n const v2c1 = v2Len > 1 ? v2.charCodeAt(1) : -1;\n\n let outPos = 0;\n let lStart = 0;\n for (let idx = 0; idx < endsLen; idx++) {\n const lEnd = batchEnds[idx]!;\n const lineLen = lEnd - lStart;\n if (lineLen > 4096) return -1;\n let effectiveE1 = lStart;\n let exp1Len = 0;\n if (\n lineLen >= v1Len &&\n batchText.charCodeAt(lStart) === v1c0 &&\n (v1Len === 1 || (batchText.charCodeAt(lStart + 1) === v1c1 && (v1Len === 2 || batchText.startsWith(v1, lStart))))\n ) {\n effectiveE1 = lStart + effectiveE1Offset;\n exp1Len = effectiveExp1Len;\n }\n const maxS2 = lEnd - v2Len;\n let s2 = -1;\n for (let i = effectiveE1; i <= maxS2; i++) {\n if (\n batchText.charCodeAt(i) === v2c0 &&\n (v2Len === 1 || (batchText.charCodeAt(i + 1) === v2c1 && (v2Len === 2 || batchText.startsWith(v2, i))))\n ) {\n s2 = i;\n break;\n }\n }\n if (s2 < 0) {\n const restLen = lEnd - effectiveE1;\n const outLen = exp1Len + restLen;\n if (outLen > maxSeenLine) maxSeenLine = outLen;\n if (outLen > maxBuf) throw new ProgramError(\"text buffer limit exceeded\");\n if (outPos + outLen + 1 >= maxOutLen) return -2;\n for (let i = 0; i < exp1Len; i++) outBuf[outPos++] = r1Val.charCodeAt(i);\n for (let i = effectiveE1; i < lEnd; i++) outBuf[outPos++] = batchText.charCodeAt(i);\n outBuf[outPos++] = sepCode;\n budget.step(lineLen * 2 + exp1Len * 2 + 8);\n } else {\n const e2 = s2 + v2Len;\n if (global2 && e2 <= maxS2) {\n for (let i = e2; i <= maxS2; i++) {\n if (\n batchText.charCodeAt(i) === v2c0 &&\n (v2Len === 1 || (batchText.charCodeAt(i + 1) === v2c1 && (v2Len === 2 || batchText.startsWith(v2, i))))\n ) {\n return -1;\n }\n }\n }\n const midLen = s2 - effectiveE1;\n const tailLen = lEnd - e2;\n const totalLen = exp1Len + midLen + r2Len + tailLen;\n if (totalLen > maxSeenLine) maxSeenLine = totalLen;\n if (totalLen > maxBuf) throw new ProgramError(\"text buffer limit exceeded\");\n if (outPos + totalLen + 1 >= maxOutLen) return -2;\n for (let i = 0; i < exp1Len; i++) outBuf[outPos++] = r1Val.charCodeAt(i);\n for (let i = effectiveE1; i < s2; i++) outBuf[outPos++] = batchText.charCodeAt(i);\n for (let i = 0; i < r2Len; i++) outBuf[outPos++] = r2Val.charCodeAt(i);\n for (let i = e2; i < lEnd; i++) outBuf[outPos++] = batchText.charCodeAt(i);\n outBuf[outPos++] = sepCode;\n budget.step(lineLen * 2 + exp1Len * 2 + r2Len * 2 + 16);\n }\n if (((idx + 1) & 31) === 0) {\n const pending = budget.checkpointSync ? budget.checkpointSync() : undefined;\n if (pending) {\n pending.catch(() => {});\n return -1;\n }\n }\n lStart = lEnd + 1;\n }\n if (outPos <= 65536) {\n lastPairBatchText = batchText;\n lastPairBatchEnds = batchEnds;\n lastPairEndsLen = endsLen;\n lastPairPat1 = pat1;\n lastPairRep1 = rep1;\n lastPairG1 = global1;\n lastPairPat2 = pat2;\n lastPairRep2 = rep2;\n lastPairG2 = global2;\n lastPairSepCode = sepCode;\n lastPairMaxLine = maxSeenLine;\n lastPairStepsCharged = budget.stepsUsed - initialSteps;\n lastPairOutPos = outPos;\n cachedPairOutBuf.set(outBuf.subarray(0, outPos));\n cachedPairOutView = cachedPairOutBuf.subarray(0, outPos);\n }\n return outPos;\n }\n\n let outPos = 0;\n let lStart = 0;\n const firstChar2 = info2.prefix.charCodeAt(0);\n for (let idx = 0; idx < endsLen; idx++) {\n const lEnd = batchEnds[idx]!;\n if (lEnd - lStart > 4096) return -1;\n budget.step();\n let effectiveE1 = lStart;\n let exp1 = \"\";\n let effectiveExp1Len = 0;\n if (pat1.findSyncFastInto(batchText, budget, lStart, PAIR_OFFSETS_1, lEnd, lStart)) {\n const e1 = PAIR_OFFSETS_1[1]!;\n if (e1 === lStart) return -1;\n exp1 = expandSimpleFromOffsets(sr1, batchText, lStart, e1, PAIR_OFFSETS_1[2]!, PAIR_OFFSETS_1[3]!, budget);\n let commonSuffix = 0;\n const maxSuffix = Math.min(exp1.length, e1 - lStart);\n while (commonSuffix < maxSuffix && exp1.charCodeAt(exp1.length - 1 - commonSuffix) === batchText.charCodeAt(e1 - 1 - commonSuffix)) {\n commonSuffix++;\n }\n effectiveExp1Len = exp1.length - commonSuffix;\n effectiveE1 = e1 - commonSuffix;\n for (let i = 0; i < effectiveExp1Len; i++) {\n if (exp1.charCodeAt(i) === firstChar2) return -1;\n }\n }\n budget.step();\n if (!pat2.findSyncFastInto(batchText, budget, effectiveE1, PAIR_OFFSETS_2, lEnd, lStart)) {\n const outLen = effectiveExp1Len + (lEnd - effectiveE1);\n if (outLen > maxBuf) throw new ProgramError(\"text buffer limit exceeded\");\n if (outPos + outLen + 1 >= maxOutLen) return -2;\n budget.step(lEnd - effectiveE1 + 4);\n for (let i = 0; i < effectiveExp1Len; i++) outBuf[outPos++] = exp1.charCodeAt(i);\n for (let i = effectiveE1; i < lEnd; i++) outBuf[outPos++] = batchText.charCodeAt(i);\n outBuf[outPos++] = sepCode;\n } else {\n const s2 = PAIR_OFFSETS_2[0]!;\n const e2 = PAIR_OFFSETS_2[1]!;\n if (s2 < effectiveE1 || e2 === s2) return -1;\n const g2s = PAIR_OFFSETS_2[2]!;\n const g2e = PAIR_OFFSETS_2[3]!;\n if (global2 && e2 <= lEnd) {\n budget.step();\n if (pat2.findSyncFastInto(batchText, budget, e2, PAIR_OFFSETS_1, lEnd, lStart)) return -1;\n }\n const exp2 = expandSimpleFromOffsets(sr2, batchText, s2, e2, g2s, g2e, budget);\n const midLen = s2 - effectiveE1;\n const tailLen = lEnd - e2;\n const totalLen = effectiveExp1Len + midLen + exp2.length + tailLen;\n if (totalLen > maxBuf) throw new ProgramError(\"text buffer limit exceeded\");\n if (outPos + totalLen + 1 >= maxOutLen) return -2;\n budget.step(midLen + tailLen + 5);\n for (let i = 0; i < effectiveExp1Len; i++) outBuf[outPos++] = exp1.charCodeAt(i);\n for (let i = effectiveE1; i < s2; i++) outBuf[outPos++] = batchText.charCodeAt(i);\n for (let i = 0; i < exp2.length; i++) outBuf[outPos++] = exp2.charCodeAt(i);\n for (let i = e2; i < lEnd; i++) outBuf[outPos++] = batchText.charCodeAt(i);\n outBuf[outPos++] = sepCode;\n }\n if (((idx + 1) & 31) === 0) {\n const pending = budget.checkpointSync ? budget.checkpointSync() : undefined;\n if (pending) {\n pending.catch(() => {});\n return -1;\n }\n }\n lStart = lEnd + 1;\n }\n return outPos;\n}\n", "import type { PatternLimits } from \"./regex.js\";\nimport { PublicDiagnostic } from \"safe-bash-contracts/public-diagnostic\";\nimport { hasYieldCheckpoint, monotonicNow, yieldTurn } from \"safe-bash-contracts/yield\";\n\nconst defaultPerfNow = performance.now;\nimport type { CommandContext } from \"safe-bash-contracts\";\n\nconst validatedTextProgramOptions = new WeakSet<TextProgramOptions>();\n// Unused pooled budgets retain no request-owned resources. This inert sentinel\n// is replaced by the caller's native signal before a budget performs any work.\nconst DUMMY_ABORT_SIGNAL = Object.freeze({\n aborted: false,\n reason: undefined,\n onabort: null,\n throwIfAborted(): void {},\n addEventListener(): void {},\n removeEventListener(): void {},\n dispatchEvent(): boolean { return true; },\n}) as unknown as AbortSignal;\nconst DUMMY_COMMAND_CONTEXT = { signal: DUMMY_ABORT_SIGNAL } as unknown as CommandContext;\nlet pooledBudgetA: Budget | undefined;\nlet pooledBudgetB: Budget | undefined;\nlet pooledBudgetToggle = 0;\n\nexport interface TextProgramOptions extends PatternLimits {\n readonly replace?: boolean;\n readonly maxProgramInstructions?: number;\n readonly maxSteps?: number;\n readonly maxBufferBytes?: number | undefined;\n readonly maxArrayEntries?: number;\n readonly maxFields?: number;\n readonly maxGetlineFiles?: number;\n readonly maxRecursionDepth?: number;\n readonly maxArguments?: number;\n readonly maxRetainedBytes?: number;\n}\n\nexport class ProgramError extends PublicDiagnostic {}\n\nexport class Budget {\n maxBufferBytes: number;\n stepsUsed = 0;\n inUse = false;\n private remainingSmi: number;\n private remainingNum: number;\n private unlimited: boolean;\n private signal: AbortSignal;\n private checkpoints = 0;\n private hasExtYield = false;\n private readonly yieldTimes = new Float64Array(1);\n static acquire(context: CommandContext, options: TextProgramOptions): Budget {\n if (!pooledBudgetA) {\n pooledBudgetA = new Budget(DUMMY_COMMAND_CONTEXT, options);\n }\n if (!pooledBudgetB) {\n pooledBudgetB = new Budget(DUMMY_COMMAND_CONTEXT, options);\n }\n const first = (pooledBudgetToggle++ & 1) === 0 ? pooledBudgetA : pooledBudgetB;\n const second = first === pooledBudgetA ? pooledBudgetB : pooledBudgetA;\n if (!first.inUse) {\n first.inUse = true;\n first.resetForRun(context, options);\n return first;\n }\n if (!second.inUse) {\n second.inUse = true;\n second.resetForRun(context, options);\n return second;\n }\n return new Budget(context, options);\n }\n static release(budget: Budget): void {\n if (budget === pooledBudgetA || budget === pooledBudgetB) {\n budget.inUse = false;\n budget.context = DUMMY_COMMAND_CONTEXT;\n budget.signal = DUMMY_ABORT_SIGNAL;\n }\n }\n constructor(public context: CommandContext, public options: TextProgramOptions) {\n const rem = options.maxSteps ?? Infinity;\n this.unlimited = rem === Infinity;\n this.remainingNum = this.unlimited ? 0 : rem;\n this.remainingSmi = !this.unlimited && rem <= 0x3fffffff ? (rem | 0) : 0x3fffffff;\n this.signal = context.signal;\n this.hasExtYield = hasYieldCheckpoint(context.signal);\n this.yieldTimes[0] = (performance.now !== defaultPerfNow || this.hasExtYield) ? monotonicNow() : -1;\n this.maxBufferBytes = options.maxBufferBytes ?? Infinity;\n if (context.signal.aborted) context.signal.throwIfAborted();\n if (!validatedTextProgramOptions.has(options)) {\n for (const [key, value] of Object.entries(options)) {\n if (!key.startsWith(\"max\")) continue;\n if (value !== undefined && (typeof value !== \"number\" || value !== Infinity && !Number.isSafeInteger(value) || value < 1)) throw new ProgramError(\"limits must be positive safe integers\");\n }\n validatedTextProgramOptions.add(options);\n }\n }\n resetForRun(context: CommandContext, options: TextProgramOptions): void {\n if (context.signal.aborted) context.signal.throwIfAborted();\n const rem = options.maxSteps ?? Infinity;\n this.context = context;\n this.options = options;\n this.stepsUsed = 0;\n this.unlimited = rem === Infinity;\n this.remainingNum = this.unlimited ? 0 : rem;\n this.remainingSmi = !this.unlimited && rem <= 0x3fffffff ? (rem | 0) : 0x3fffffff;\n this.signal = context.signal;\n this.checkpoints = 0;\n this.hasExtYield = hasYieldCheckpoint(context.signal);\n this.yieldTimes[0] = (performance.now !== defaultPerfNow || this.hasExtYield) ? monotonicNow() : -1;\n const nextMaxBuf = options.maxBufferBytes ?? Infinity;\n if (this.maxBufferBytes !== nextMaxBuf) this.maxBufferBytes = nextMaxBuf;\n }\n step(count = 1): void {\n if (this.signal.aborted) this.signal.throwIfAborted();\n const nextSteps = this.stepsUsed + count;\n this.stepsUsed = nextSteps;\n if (this.unlimited) return;\n if ((count | 0) === count && count >= 0 && count <= this.remainingSmi) {\n this.remainingSmi = (this.remainingSmi - (count | 0)) | 0;\n this.remainingNum -= count;\n return;\n }\n if (count > this.remainingNum) throw new ProgramError(\"execution step limit exceeded\");\n this.remainingNum -= count;\n this.remainingSmi = this.remainingNum <= 0x3fffffff ? (this.remainingNum | 0) : 0x3fffffff;\n }\n check(text: string): string {\n if (text.length > this.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n return text;\n }\n async checkpoint(): Promise<void> {\n const p = this.checkpointSync();\n if (p) await p;\n }\n checkpointSync(): Promise<void> | undefined {\n if (this.signal.aborted) this.signal.throwIfAborted();\n const count = ++this.checkpoints;\n // Neither elapsed work nor a stationary clock may postpone host cancellation.\n if ((count & 255) === 0) {\n return this.yieldCheckpointAsync();\n }\n if (performance.now !== defaultPerfNow || this.hasExtYield || (count & 63) === 0) {\n const now = monotonicNow();\n if (this.yieldTimes[0]! < 0) {\n this.yieldTimes[0] = now;\n } else if (now - this.yieldTimes[0]! >= 25) {\n return this.yieldCheckpointAsync();\n }\n }\n return undefined;\n }\n private async yieldCheckpointAsync(): Promise<void> {\n await yieldTurn(this.signal);\n this.yieldTimes[0] = monotonicNow();\n this.signal.throwIfAborted();\n }\n}\n", "import { Budget, ProgramError } from \"./budget.js\";\n\nexport class ReplacementBuffer {\n #segments: (Uint8Array | Uint16Array)[] = [];\n #size = 0;\n #allocated = 0;\n #unboundedText = \"\";\n\n constructor(readonly budget: Budget) {}\n\n get remaining(): number { return this.budget.maxBufferBytes - this.#size; }\n\n admit(length: number): void {\n this.budget.step(0);\n if (!Number.isSafeInteger(length) || length < 0 || length > this.remaining) throw new ProgramError(\"text buffer limit exceeded\");\n }\n\n async append(source: string, start = 0, end = source.length): Promise<void> {\n this.admit(end - start);\n if (this.budget.maxBufferBytes === Infinity) {\n let offset = start;\n while (offset < end) {\n await this.budget.checkpoint();\n const length = Math.min(end - offset, 1024);\n this.budget.step(length);\n this.budget.step();\n this.#unboundedText += offset === 0 && length === source.length ? source : source.slice(offset, offset + length);\n this.#size += length;\n offset += length;\n }\n return;\n }\n let offset = start;\n while (offset < end) {\n await this.budget.checkpoint();\n this.budget.step();\n const width = source.charCodeAt(offset) <= 255 ? 1 : 2;\n let length = 1;\n while (length < 1024 && offset + length < end) {\n this.budget.step();\n if ((source.charCodeAt(offset + length) <= 255 ? 1 : 2) !== width) break;\n length++;\n }\n // Exact width runs avoid reserving unused bytes when Latin1 and wide\n // UTF-16 units alternate. Wide units, including lone surrogates, cost two\n // backing bytes even though admit()/remaining count logical units.\n const bytes = length * width;\n if (bytes > this.budget.maxBufferBytes - this.#allocated) throw new ProgramError(\"text buffer limit exceeded\");\n this.budget.step(length + 1);\n const segment = width === 1 ? new Uint8Array(length) : new Uint16Array(length);\n for (let index = 0; index < length; index++) segment[index] = source.charCodeAt(offset + index);\n this.#segments.push(segment);\n this.#allocated += segment.byteLength;\n this.#size += length;\n offset += length;\n }\n }\n\n async finish(): Promise<string> {\n this.budget.step(0);\n if (!this.#size) return \"\";\n this.budget.step(this.#size);\n await this.budget.checkpoint();\n this.budget.step(0);\n if (this.budget.maxBufferBytes === Infinity) {\n const text = this.#unboundedText;\n this.clear();\n return text;\n }\n if (this.#segments.length === 1) {\n const text = String.fromCharCode(...this.#segments[0]!.subarray(0, this.#size));\n this.clear();\n return text;\n }\n this.budget.step(this.#size);\n if (this.#allocated > this.budget.maxBufferBytes || this.#size > this.budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const parts: string[] = [];\n let offset = 0;\n for (const segment of this.#segments) {\n await this.budget.checkpoint();\n this.budget.step(0);\n const length = Math.min(segment.length, this.#size - offset);\n parts.push(String.fromCharCode(...segment.subarray(0, length)));\n offset += length;\n }\n this.clear();\n await this.budget.checkpoint();\n this.budget.step(0);\n return parts.join(\"\");\n }\n\n clear(): void {\n this.#segments = [];\n this.#size = 0;\n this.#allocated = 0;\n this.#unboundedText = \"\";\n }\n}\n", "import { encoder } from \"./encoding.js\";\nimport { Budget, isObject, JqError, JqLimitError, type Json } from \"./limits.js\";\nimport { isNumber, numberValue } from \"./numbers.js\";\nimport { equal, indexValue, sliceValue } from \"./values.js\";\n\nexport async function indices(input: Json, sought: Json, budget: Budget): Promise<Json> {\n let source: ArrayLike<Json>;\n let pattern: ArrayLike<Json>;\n if (typeof input === \"string\" && typeof sought === \"string\") {\n { const _p = budget.tickSync(input.length + sought.length); if (_p) await _p; }\n // jq's string search returns UTF-8 byte offsets, including overlapping matches.\n source = encoder.encode(input);\n pattern = encoder.encode(sought);\n } else if (isObject(sought) && (input === null || Array.isArray(input) || typeof input === \"string\")) {\n if (input === null) return null;\n const start = Object.hasOwn(sought, \"start\") ? sought.start! : undefined;\n const end = Object.hasOwn(sought, \"end\") ? sought.end! : undefined;\n if ((start !== null && (!isNumber(start) || (!Number.isFinite(numberValue(start)) && !Number.isNaN(numberValue(start)))))\n || (end !== null && (!isNumber(end) || (!Number.isFinite(numberValue(end)) && !Number.isNaN(numberValue(end)))))) {\n throw new JqError(\"Array/string slice indices must be integers\");\n }\n return sliceValue(input, isNumber(start) && Number.isNaN(numberValue(start)) ? null : start, isNumber(end) && Number.isNaN(numberValue(end)) ? null : end, budget);\n } else if (Array.isArray(input)) {\n source = input;\n pattern = Array.isArray(sought) ? sought : [sought];\n } else return indexValue(input, sought);\n\n const result: number[] = [];\n if (!pattern.length || pattern.length > source.length) return result;\n { const _p = budget.tickSync(pattern.length); if (_p) await _p; }\n const prefixes = new Uint32Array(pattern.length);\n let matched = 0;\n for (let index = 1; index < pattern.length; index++) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n while (matched > 0 && !equal(pattern[index]!, pattern[matched]!, budget)) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n matched = prefixes[matched - 1]!;\n }\n if (equal(pattern[index]!, pattern[matched]!, budget)) matched++;\n prefixes[index] = matched;\n }\n matched = 0;\n let bytes = 2;\n for (let index = 0; index < source.length; index++) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n while (matched > 0 && !equal(source[index]!, pattern[matched]!, budget)) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n matched = prefixes[matched - 1]!;\n }\n if (equal(source[index]!, pattern[matched]!, budget)) matched++;\n if (matched === pattern.length) {\n const position = index + 1 - pattern.length;\n budget.collection(result.length + 1);\n bytes += String(position).length + (result.length ? 1 : 0);\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n result.push(position);\n matched = prefixes[matched - 1]!;\n }\n }\n return result;\n}\n", "import { JqError, type Json } from \"./limits.js\";\nimport { isNumber, numberValue } from \"./numbers.js\";\n\nexport function fromDateIso8601(input: Json): number {\n if (typeof input !== \"string\") throw new JqError(\"strptime/1 requires string inputs and arguments\");\n const mismatch = () => new JqError(`date ${JSON.stringify(input)} does not match format \"%Y-%m-%dT%H:%M:%SZ\"`);\n const parts = input.split(\"T\");\n if (parts.length !== 2 || !parts[1]!.endsWith(\"Z\")) throw mismatch();\n const date = parts[0]!.split(\"-\");\n const time = parts[1]!.slice(0, -1).split(\":\");\n const fields = [...date, ...time];\n if (date.length !== 3 || time.length !== 3 || fields.some((field, index) => field.length === 0\n || field.length > (index === 0 ? 4 : 2) || [...field].some(character => !\"0123456789\".includes(character)))) throw mismatch();\n const [year, month, day, hour, minute, second] = fields.map(Number) as [number, number, number, number, number, number];\n if (month < 1 || month > 12 || day > 31 || hour > 23 || minute > 59 || second > 60) throw mismatch();\n if (year < 1900) throw new JqError(\"invalid gmtime representation\");\n // Like jq's mktime, UTC normalizes day overflow and leap seconds.\n return Date.UTC(year, month - 1, day, hour, minute, second) / 1000;\n}\n\nexport function toDateIso8601(input: Json): string {\n if (!isNumber(input)) throw new JqError(\"strftime/1 requires parsed datetime inputs\");\n const date = new Date(Math.trunc(numberValue(input)) * 1000);\n if (!Number.isFinite(date.getTime())) throw new JqError(\"error converting number of seconds since epoch to datetime\");\n const year = String(date.getUTCFullYear()).padStart(4, \"0\");\n const fields = [date.getUTCMonth() + 1, date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()]\n .map(value => String(value).padStart(2, \"0\"));\n return `${year}-${fields[0]}-${fields[1]}T${fields[2]}:${fields[3]}:${fields[4]}Z`;\n}\n", "import { JqError, JqLimitError, object, put, type Budget, type Json } from \"./limits.js\";\nimport { Pattern } from \"safe-bash-regex-engine/text/regex\";\nimport { ProgramError } from \"safe-bash-regex-engine/text/budget\";\nimport { describe } from \"./values.js\";\n\n// Extended mode ignores unescaped whitespace/comments outside character classes.\nasync function extendedPattern(pattern: string, budget: Budget): Promise<string> {\n let result = \"\";\n let characterClass = false;\n for (let index = 0; index < pattern.length; index++) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const character = pattern[index]!;\n if (character === \"\\\\\") {\n const next = pattern[++index];\n result += next === undefined ? \"\\\\\" : next === \" \" || next === \"#\" ? next : `\\\\${next}`;\n } else if (!characterClass && character === \"#\") {\n while (index + 1 < pattern.length && pattern[index + 1] !== \"\\n\") { { const _p = budget.tickSync(); if (_p) await _p; } index++; }\n } else if (characterClass || !\" \\t\\r\\n\\f\\v\".includes(character)) {\n result += character;\n if (character === \"[\") characterClass = true;\n else if (character === \"]\") characterClass = false;\n }\n }\n return result;\n}\n\nexport async function* capture(input: Json, pattern: Json, modifiers: Json, budget: Budget): AsyncGenerator<Json> {\n if (typeof input !== \"string\") throw new JqError(`${describe(input, budget)} cannot be matched, as it is not a string`);\n if (typeof pattern !== \"string\") throw new JqError(`${describe(pattern, budget)} is not a string`);\n if (modifiers !== null && typeof modifiers !== \"string\") throw new JqError(`${describe(modifiers, budget)} is not a string`);\n const flags = modifiers ?? \"\";\n for (const flag of flags) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (!\"gimnpsx\".includes(flag)) throw new JqError(`${flags} is not a valid modifier string`);\n }\n { const _p = budget.tickSync(input.length + pattern.length); if (_p) await _p; }\n const source = flags.includes(\"x\") ? await extendedPattern(pattern, budget) : pattern;\n const work = { step: (count = 1) => budget.step(count), checkpoint: () => budget.tick(0), maxBufferBytes: budget.limits.maxValueBytes };\n try {\n const regex = new Pattern(source, true, flags.includes(\"i\"), \"jq\", flags.includes(\"p\") ? flags + \"m\" : flags);\n let search = 0;\n while (search <= input.length) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const match = await regex.find(input, work, search);\n if (!match) return;\n const result = object();\n for (const [name, index] of regex.groupNames) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n put(result, name, match.groups[index] ?? null);\n }\n budget.value(result);\n yield result;\n if (!flags.includes(\"g\")) return;\n search = match.end > match.start ? match.end : match.end + ((input.codePointAt(match.end) ?? 0) > 0xffff ? 2 : 1);\n }\n } catch (error) {\n if (!(error instanceof ProgramError)) throw error;\n if (error.message.includes(\"buffer limit exceeded\")) throw new JqLimitError(\"maxValueBytes\");\n const diagnostic = error.message === \"unterminated bracket expression\" ? \"premature end of char-class\"\n : error.message === \"unmatched '(' in regular expression\" ? \"end pattern with unmatched parenthesis\" : error.message;\n throw new JqError(`Regex failure: ${diagnostic}`);\n }\n}\n", "import { truth, type Json } from \"./limits.js\";\nimport type { Interpreter } from \"./interpreter.js\";\nimport type { Ast } from \"./parser.js\";\n\n/** Keep child streams suspended so traversal is lazy and depth first. */\nexport async function* recurse(scope: Interpreter, args: readonly Ast[], input: Json): AsyncGenerator<Json> {\n const update: Ast = args[0] ?? { kind: \"optional\", operand: { kind: \"iterate\", base: { kind: \"identity\" } } };\n async function* children(value: Json): AsyncGenerator<Json> {\n for await (const child of scope.run(update, value)) {\n if (args[1]) {\n for await (const condition of scope.run(args[1], child)) if (truth(condition)) yield child;\n } else yield child;\n }\n }\n const stack: AsyncGenerator<Json>[] = [];\n try {\n yield input;\n stack.push(children(input));\n while (stack.length) {\n { const _p = scope.budget.tickSync(); if (_p) await _p; }\n const next = await stack[stack.length - 1]!.next();\n if (next.done) stack.pop();\n else {\n yield next.value;\n scope.budget.collection(stack.length + 1);\n stack.push(children(next.value));\n }\n }\n } finally {\n for (const iterator of stack.reverse()) await iterator.return(undefined);\n }\n}\n", "import { Budget, copyObject, isObject, JqError, JqLimitError, put, remove, type Json } from \"./limits.js\";\nimport { isNumber, numberValue } from \"./numbers.js\";\nimport { indexValue, type } from \"./values.js\";\n\n// Group against the original value so deleting one array element cannot shift\n// any other requested path. An ancestor deletion subsumes its descendants.\nasync function deleteAt(input: Json, paths: Json[][], budget: Budget, depth: number): Promise<Json> {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (depth > budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n if (paths.some(path => path.length === depth)) return null;\n if (input === null || paths.length === 0) return input;\n if (!isObject(input) && !Array.isArray(input)) {\n const path = paths[0]!;\n if (path.length > depth + 1) indexValue(input, path[depth]!);\n throw new JqError(`Cannot delete fields from ${type(input)}`);\n }\n const groups = new Map<string | number, Json[][]>();\n for (const path of paths) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const component = path[depth]!;\n const leaf = path.length === depth + 1;\n if (leaf) {\n if ((isObject(input) && typeof component !== \"string\") || (Array.isArray(input) && !isNumber(component))) {\n throw new JqError(`Cannot delete ${type(component)} ${Array.isArray(input) ? \"element of array\" : \"field of object\"}`);\n }\n } else indexValue(input, component);\n let key: string | number;\n if (typeof component === \"string\") key = component;\n else {\n if (!isNumber(component)) throw new JqError(`Cannot index ${type(input)} with ${type(component)}`);\n key = Math.trunc(numberValue(component));\n if (key < 0 && Array.isArray(input)) key += input.length;\n }\n if (Array.isArray(input) ? typeof key === \"number\" && (key < 0 || key >= input.length) : !Object.hasOwn(input, key)) continue;\n const group = groups.get(key) ?? [];\n budget.collection(group.length + 1);\n group.push(path);\n groups.set(key, group);\n budget.collection(groups.size);\n }\n if (Array.isArray(input)) {\n budget.collection(input.length);\n const result: Json[] = [];\n for (let index = 0; index < input.length; index++) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const group = groups.get(index);\n if (group?.some(path => path.length === depth + 1)) continue;\n result.push(group ? await deleteAt(input[index]!, group, budget, depth + 1) : input[index]!);\n }\n return result;\n }\n const result = copyObject(input);\n for (const [key, group] of groups) {\n if (group.some(path => path.length === depth + 1)) remove(result, String(key));\n else put(result, String(key), await deleteAt(indexValue(input, key), group, budget, depth + 1));\n }\n return result;\n}\n\nexport async function delpaths(input: Json, candidate: Json, budget: Budget): Promise<Json> {\n if (!Array.isArray(candidate)) throw new JqError(\"Paths must be specified as an array\");\n const paths: Json[][] = [];\n for (const path of candidate) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (!Array.isArray(path)) throw new JqError(`Path must be specified as array, not ${type(path)}`);\n budget.collection(paths.length + 1);\n paths.push(path);\n }\n return deleteAt(input, paths, budget, 0);\n}\n", "import { utf8ByteLength } from \"./encoding.js\";\nimport { Pattern } from \"safe-bash-regex-engine/text/regex\";\nimport { Budget, JqError, type Json } from \"./limits.js\";\nimport { regexError } from \"./regex.js\";\nimport { describe } from \"./values.js\";\n\nexport async function* splitRegex(input: Json, source: Json, budget: Budget): AsyncGenerator<string> {\n { const _p = budget.tickSync(); if (_p) await _p; }\n if (typeof input !== \"string\") throw new JqError(`${describe(input, budget)} cannot be matched, as it is not a string`);\n if (typeof source !== \"string\") throw new JqError(`${describe(source, budget)} is not a string`);\n budget.value(input);\n budget.value(source);\n const work = { step: (count = 1) => budget.step(count), checkpoint: () => budget.tick(0), maxBufferBytes: budget.limits.maxValueBytes };\n try {\n const pattern = new Pattern(source, true, false, \"jq\");\n let search = 0;\n let copied = 0;\n while (search <= input.length) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const match = await pattern.find(input, work, search);\n if (!match) break;\n const part = input.slice(copied, match.start);\n budget.value(part);\n yield part;\n copied = match.end;\n search = match.end;\n if (match.start === match.end) {\n const character = String.fromCodePoint(input.codePointAt(search) ?? 0);\n search += character.length;\n const repeats = match.end < input.length ? utf8ByteLength(character) - 1 : 0;\n if (repeats) {\n // jq resumes empty matches at each interior UTF-8 byte. Those byte\n // positions slice at the following Unicode boundary in jq strings.\n const probe = await pattern.find(`${input.slice(0, search)}\\ufffd${input.slice(search)}`, work, search);\n if (probe?.start === search && probe.end === search) {\n for (let index = 0; index < repeats; index++) {\n { const _p = budget.tickSync(); if (_p) await _p; }\n const field = input.slice(copied, search);\n budget.value(field);\n yield field;\n copied = search;\n }\n }\n }\n }\n }\n const tail = input.slice(copied);\n budget.value(tail);\n yield tail;\n } catch (error) { throw regexError(error); }\n}\n", "import { utf8ByteLength } from \"./encoding.js\";\nimport { JqError, JqLimitError, wellFormed, type Budget, type Json } from \"./limits.js\";\nimport { decimalNumber } from \"./numbers.js\";\n\nexport type BindingPattern =\n | { kind: \"variable\"; name: string; pattern?: BindingPattern }\n | { kind: \"fields\"; fields: { key: Ast; pattern: BindingPattern }[] };\n\nexport type Ast =\n | { kind: \"parameter\"; name: string }\n | { kind: \"invoke\"; parameters: Ast[]; args: Ast[]; body: Ast }\n | { kind: \"format\"; name: string }\n | { kind: \"identity\" }\n | { kind: \"literal\"; value: Json }\n | { kind: \"variable\"; name: string }\n | { kind: \"bind\"; source: Ast; name: string; body: Ast }\n | { kind: \"label\"; target: symbol; body: Ast }\n | { kind: \"break\"; target: symbol }\n | { kind: \"destructure\"; source: Ast; patterns: BindingPattern[]; names: string[]; body: Ast }\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 | undefined }[] }\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 walk: [1],\n explode: [0], utf8bytelength: [0],\n while: [2], until: [2], fromdateiso8601: [0], todateiso8601: [0],\n scan: [1], paths: [0, 1], getpath: [1], flatten: [0, 1], del: [1], error: [0, 1], startswith: [1], endswith: [1], ltrimstr: [1], rtrimstr: [1], ascii_downcase: [0], ascii_upcase: [0],\n halt: [0], halt_error: [0, 1], setpath: [2], delpaths: [1], 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], inside: [1], bsearch: [1], sort: [0], sort_by: [1], unique: [0], unique_by: [1], group_by: [1], add: [0],\n not: [0], reverse: [0], transpose: [0], combinations: [0], first: [0, 1], last: [0, 1], limit: [2], range: [1, 2, 3], join: [1], split: [1], splits: [1], gsub: [2, 3],\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 capture: [1, 2], recurse: [0, 1, 2],\n indices: [1],\n});\nfunction tokenize(source: string, budget: Budget): Token[] {\n const tokens: Token[] = [];\n const modes: ({ kind: \"string\"; start: number; segment: number; interpolated: boolean } | { kind: \"expression\"; parentheses: number })[] = [];\n const stringToken = (start: number, end: number): Token => {\n let text = '\"';\n for (let index = start; index < end; index++) {\n const character = source[index]!;\n text += character.charCodeAt(0) < 32 ? `\\\\u${character.charCodeAt(0).toString(16).padStart(4, \"0\")}` : character;\n }\n text += '\"';\n try { if (!wellFormed(JSON.parse(text) as string)) throw new Error(); } catch { throw new JqError(`invalid string at offset ${start - 1}`, 3); }\n return { text, offset: start - 1, kind: \"string\" };\n };\n let offset = 0;\n while (offset < source.length) {\n budget.step();\n const character = source[offset]!;\n const mode = modes.at(-1);\n if (mode?.kind === \"string\") {\n if (character === '\"') {\n tokens.push(stringToken(mode.segment, offset));\n if (mode.interpolated) tokens.push({ text: \"string-end\", offset, kind: \"symbol\" });\n modes.pop(); offset++; continue;\n }\n if (character === \"\\\\\" && source[offset + 1] === \"(\") {\n if (!mode.interpolated) tokens.push({ text: \"string-start\", offset: mode.start, kind: \"symbol\" });\n mode.interpolated = true;\n tokens.push(stringToken(mode.segment, offset), { text: \"interpolation-start\", offset, kind: \"symbol\" });\n modes.push({ kind: \"expression\", parentheses: 0 }); offset += 2;\n if (modes.length > budget.limits.maxAstDepth) throw new JqLimitError(\"maxAstDepth\");\n continue;\n }\n offset += character === \"\\\\\" ? 2 : 1;\n continue;\n }\n if (mode?.kind === \"expression\") {\n if (character === \"(\") mode.parentheses++;\n else if (character === \")\") {\n if (mode.parentheses === 0) {\n tokens.push({ text: \"interpolation-end\", offset, kind: \"symbol\" });\n modes.pop(); offset++;\n const string = modes.at(-1)!;\n if (string.kind === \"string\") string.segment = offset;\n continue;\n }\n mode.parentheses--;\n }\n }\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 modes.push({ kind: \"string\", start, segment: ++offset, interpolated: false });\n if (modes.length > budget.limits.maxAstDepth) throw new JqLimitError(\"maxAstDepth\");\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 (character === \"@\") { tokens.push({ text: \"@\", offset, kind: \"symbol\" }); offset++; continue; }\n if (source.startsWith(\"?//\", offset)) {\n tokens.push({ text: \"?//\", offset, kind: \"symbol\" }); offset += 3; continue;\n }\n if (source.startsWith(\"..\", offset)) {\n tokens.push({ text: \"..\", offset, kind: \"symbol\" }); offset += 2; continue;\n }\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 if (modes.length) throw new JqError(`unterminated string or interpolation at offset ${offset}`, 3);\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\" || node.kind === \"parameter\" || node.kind === \"invoke\" || node.kind === \"descend\") continue;\n if (node.kind === \"index\" || node.kind === \"iterate\" || node.kind === \"slice\") pending.push(node.base);\n else if (node.kind === \"optional\") pending.push(node.operand);\n else if (node.kind === \"bind\") pending.push(node.body);\n else if (node.kind === \"call\" && [\"select\", \"values\", \"strings\", \"numbers\", \"booleans\", \"arrays\", \"objects\", \"nulls\", \"scalars\", \"iterables\", \"empty\"].includes(node.name)) continue;\n else if (node.kind === \"binary\" && (node.operator === \",\" || node.operator === \"|\")) pending.push(node.left, node.right);\n else return false;\n }\n return true;\n}\nexport function moduleProgram(source: string, budget: Budget): { source: string; imports: { name: string; alias?: string }[] } {\n if (utf8ByteLength(source) > budget.limits.maxSourceBytes) throw new JqLimitError(\"maxSourceBytes\");\n const tokens = tokenize(source, budget);\n const imports: { name: string; alias?: string }[] = [];\n let position = 0;\n while (tokens[position]!.text === \"include\" || tokens[position]!.text === \"import\") {\n budget.step();\n const directive = tokens[position++]!.text;\n const name = tokens[position++];\n if (name?.kind !== \"string\") throw new JqError(\"module directive requires a string path\", 3);\n const entry: { name: string; alias?: string } = { name: JSON.parse(name.text) as string };\n if (directive === \"import\") {\n if (tokens[position++]?.text !== \"as\") throw new JqError(\"import requires a namespace\", 3);\n const alias = tokens[position++];\n if (alias?.kind !== \"name\") throw new JqError(\"import requires a namespace\", 3);\n entry.alias = alias.text;\n }\n if (tokens[position++]?.text !== \";\") throw new JqError(\"module directive requires ';'\", 3);\n imports.push(entry);\n budget.collection(imports.length);\n }\n return { source: source.slice(tokens[position]!.offset), imports };\n}\n\nexport function parse(source: string, variables: ReadonlyMap<string, Json>, budget: Budget, definitions: Map<string, Ast> = new Map(), module = false): Ast {\n const limits = budget.limits;\n if (utf8ByteLength(source) > limits.maxSourceBytes) throw new JqLimitError(\"maxSourceBytes\");\n const tokens = tokenize(source, budget);\n let position = 0;\n let nesting = 0;\n let defining = false;\n const unresolved = new Map<Ast, Token>();\n const bindings = new Map<string, number>();\n const labels = new Map<string, symbol>();\n const parameters = new Map<string, Ast>();\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(utf8ByteLength(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 variable = (name: Token): Ast => {\n if (name.kind !== \"name\") fail(\"expected variable name\");\n if (!bindings.has(name.text) && !variables.has(name.text)) fail(`undefined variable $${name.text}`);\n return defining && !bindings.has(name.text) ? literal(variables.get(name.text)!) : { kind: \"variable\", name: name.text };\n };\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 const no: Ast = accept(\"else\") ? expression() : { kind: \"identity\" }; 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 pattern = (names: Set<string>): BindingPattern => {\n if (++nesting > limits.maxAstDepth) throw new JqLimitError(\"maxAstDepth\");\n try {\n if (accept(\"$\")) {\n const name = take(); if (name.kind !== \"name\") fail(\"expected variable name\");\n names.add(name.text);\n return { kind: \"variable\", name: name.text };\n }\n const array = accept(\"[\");\n if (!array) expect(\"{\");\n const fields: { key: Ast; pattern: BindingPattern }[] = [];\n do {\n let key: Ast;\n let value: BindingPattern;\n if (array) {\n key = literal(fields.length);\n value = pattern(names);\n } else if (peek().text === \"$\") {\n value = pattern(names);\n if (value.kind !== \"variable\") return fail(\"expected variable name\");\n key = literal(value.name);\n if (accept(\":\")) value = { ...value, pattern: pattern(names) };\n } else {\n if (accept(\"(\")) { key = expression(); expect(\")\"); }\n else {\n const token = take();\n if (token.kind !== \"name\" && token.kind !== \"string\") fail(\"expected object key\");\n key = literal(token.kind === \"string\" ? JSON.parse(token.text) as string : token.text);\n }\n expect(\":\"); value = pattern(names);\n }\n fields.push({ key, pattern: value });\n } while (accept(\",\"));\n expect(array ? \"]\" : \"}\");\n return { kind: \"fields\", fields };\n } 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 if (operator === \"as\" && minimum <= 3) {\n take();\n const names = new Set<string>();\n const patterns = [pattern(names)];\n while (accept(\"?//\")) patterns.push(pattern(names));\n expect(\"|\");\n const previous = new Map([...names].map(name => [name, bindings.get(name) ?? 0]));\n for (const [name, count] of previous) bindings.set(name, count + 1);\n try {\n const body = expression(0, stopComma);\n const single = patterns[0]!;\n left = patterns.length === 1 && single.kind === \"variable\"\n ? { kind: \"bind\", source: left, name: single.name, body }\n : { kind: \"destructure\", source: left, patterns, names: [...names], body };\n } finally { for (const [name, count] of previous) { if (count) bindings.set(name, count); else bindings.delete(name); } }\n continue;\n }\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 stringExpression = (token: Token, format = \"text\"): Ast => {\n if (token.kind === \"string\") return literal(JSON.parse(token.text) as string);\n let result = stringExpression(take(), format);\n while (accept(\"interpolation-start\")) {\n const value: Ast = { kind: \"format\", name: format };\n const interpolated: Ast = { kind: \"binary\", operator: \"|\", left: expression(), right: value };\n expect(\"interpolation-end\");\n result = { kind: \"binary\", operator: \"+\", left: result, right: interpolated };\n result = { kind: \"binary\", operator: \"+\", left: result, right: stringExpression(take()) };\n }\n expect(\"string-end\");\n return result;\n };\n const primary = (): Ast => {\n const token = take();\n let result: Ast;\n if (token.text === \"@\") {\n const name = take();\n if (name.kind !== \"name\") fail(\"expected format name\");\n result = peek().kind === \"string\" || peek().text === \"string-start\" ? stringExpression(take(), name.text) : { kind: \"format\", name: name.text };\n } else if (token.text === \"..\") result = { kind: \"descend\" };\n else if (token.text === \"label\") {\n expect(\"$\");\n const name = take(); if (name.kind !== \"name\") fail(\"expected label name\");\n expect(\"|\");\n const previous = labels.get(name.text);\n const target = Symbol(name.text);\n labels.set(name.text, target);\n try { result = { kind: \"label\", target, body: expression() }; }\n finally { if (previous) labels.set(name.text, previous); else labels.delete(name.text); }\n } else if (token.text === \"break\") {\n expect(\"$\");\n const name = take(); if (name.kind !== \"name\") fail(\"expected label name\");\n const target = labels.get(name.text);\n if (target === undefined) fail(`undefined label $${name.text}`);\n result = { kind: \"break\", target: target! };\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\" || peek().text === \"string-start\") {\n const key = take(); result = { kind: \"index\", base: result, index: key.kind === \"name\" ? literal(key.text) : stringExpression(key) };\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 | undefined }[] = [];\n while (peek().text !== \"}\") {\n const keyToken = take();\n let key: Ast;\n let shorthand: Ast | undefined;\n if (keyToken.text === \"(\") { key = expression(); expect(\")\"); }\n else if (keyToken.text === \"$\") {\n const name = take();\n shorthand = variable(name);\n key = peek().text === \":\" ? shorthand : literal(name.text);\n }\n else if (keyToken.kind === \"string\" || keyToken.text === \"string-start\") key = stringExpression(keyToken);\n else if (keyToken.kind === \"name\") key = literal(keyToken.text);\n else fail(\"expected object key\");\n const value = accept(\":\") ? expression(0, true) : shorthand ?? (keyToken.text === \"(\" ? fail(\"expected ':'\") : undefined);\n fields.push({ key: key!, value });\n if (!accept(\",\")) break;\n }\n expect(\"}\"); result = { kind: \"object\", fields };\n } else if (token.text === \"$\") {\n result = variable(take());\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\" || token.text === \"string-start\") result = stringExpression(token);\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 let name = token.text;\n if (accept(\"::\")) {\n const member = take();\n if (member.kind !== \"name\") fail(\"expected namespace member\");\n name += `::${member.text}`;\n }\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 const definition = definitions.get(`${name}/${args.length}`);\n const parameter = parameters.get(name);\n if (parameter && !args.length) result = parameter;\n else if (definition?.kind === \"invoke\") result = { ...definition, args };\n else {\n result = { kind: \"call\", name, args };\n if (!Object.hasOwn(functions, name) || !functions[name]!.includes(args.length)) unresolved.set(result, token);\n }\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\" && key.text !== \"string-start\") fail(\"expected property name\");\n result = { kind: \"index\", base: result!, index: key.kind === \"name\" ? literal(key.text) : stringExpression(key) };\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 bodies: Ast[] = [];\n while (definitions && accept(\"def\")) {\n budget.step();\n const name = take();\n if (name.kind !== \"name\") fail(\"expected function name\");\n const formal: Ast[] = [];\n const values: string[] = [];\n if (accept(\"(\")) {\n do {\n const value = accept(\"$\");\n const parameter = take();\n if (parameter.kind !== \"name\" || parameters.has(parameter.text) || parameters.has(`$${parameter.text}`)) fail(\"expected unique parameter name\");\n const node: Ast = { kind: \"parameter\", name: parameter.text };\n parameters.set(value ? `$${parameter.text}` : parameter.text, node);\n formal.push(node);\n values.push(value ? parameter.text : \"\");\n if (value) bindings.set(parameter.text, 1);\n budget.collection(formal.length);\n } while (accept(\";\"));\n expect(\")\");\n }\n expect(\":\");\n defining = true;\n let body: Ast;\n try { body = expression(); } finally { defining = false; }\n expect(\";\");\n for (let index = formal.length - 1; index >= 0; index--) {\n if (values[index]) body = { kind: \"bind\", name: values[index]!, source: formal[index]!, body };\n }\n parameters.clear();\n for (const value of values) if (value) bindings.delete(value);\n definitions.set(`${name.text}/${formal.length}`, { kind: \"invoke\", parameters: formal, args: [], body });\n budget.collection(definitions.size);\n bodies.push(body);\n }\n if (module && peek().kind !== \"end\") fail(\"module must contain only imports and definitions\");\n const ast = module ? { kind: \"identity\" as const } : expression();\n if (peek().kind !== \"end\") syntaxError(peek(), true);\n const pending: { node: Ast; depth: number }[] = [ast, ...bodies].map(node => ({ node, depth: 1 }));\n const errors: string[] = [];\n let errorBytes = 0;\n while (pending.length) {\n budget.step();\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 += utf8ByteLength(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 === \"invoke\") children.push(node.body, ...node.args);\n else if (node.kind === \"label\") children.push(node.body);\n else if (node.kind === \"binary\") children.push(node.left, node.right);\n else if (node.kind === \"bind\") children.push(node.source, node.body);\n else if (node.kind === \"destructure\") {\n children.push(node.source, node.body);\n const patterns = [...node.patterns];\n while (patterns.length) {\n budget.step();\n const entry = patterns.pop()!;\n if (entry.kind === \"fields\") for (const field of entry.fields) { children.push(field.key); patterns.push(field.pattern); }\n else if (entry.pattern) patterns.push(entry.pattern);\n }\n }\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); if (field.value) children.push(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"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["yieldTurn", "pt", "yieldTurn", "pEnd", "text", "bytes", "offset", "hasYieldCheckpoint", "monotonicNow", "yieldTurn", "defaultPerfNow", "Budget", "offset", "anchoredStart", "anchoredEnd", "found", "positionsTried", "len", "initialCheck", "groups", "full", "addedLen", "expanded", "match", "newLen", "out", "expPrefix", "pos", "outPos", "lStart", "index", "result", "leftVal", "res", "result", "remove", "increment", "keyBytes", "source"]
|
|
7
7
|
}
|