@poe-platform/safe-bash 0.1.726 → 0.1.727

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/dist/safe-bash/chunks/{chunk-6VZX7ESE.js → chunk-26N7BLXE.js} +3 -3
  2. package/dist/safe-bash/chunks/{chunk-ZZ7JQBPX.js → chunk-4A2OLEML.js} +2 -2
  3. package/dist/safe-bash/chunks/{chunk-LTREB3HX.js → chunk-54MC6XF5.js} +4 -4
  4. package/dist/safe-bash/chunks/{chunk-Z3CCN6Y2.js → chunk-6J5FUESH.js} +2 -2
  5. package/dist/safe-bash/chunks/{chunk-YR5RZBWS.js → chunk-6TBFZ5JE.js} +2 -2
  6. package/dist/safe-bash/chunks/{chunk-6HJNJ625.js → chunk-7MMYQG3P.js} +2 -2
  7. package/dist/safe-bash/chunks/{chunk-WTZZX4LV.js → chunk-A4MB2KXV.js} +2 -2
  8. package/dist/safe-bash/chunks/{chunk-EM2JW7ZH.js → chunk-ATYJKRBZ.js} +2 -2
  9. package/dist/safe-bash/chunks/{chunk-VV24PRPB.js → chunk-AZQOEGP3.js} +1050 -101
  10. package/dist/safe-bash/chunks/chunk-AZQOEGP3.js.map +7 -0
  11. package/dist/safe-bash/chunks/{chunk-EFMXWUYE.js → chunk-B6JEJ6AT.js} +2 -2
  12. package/dist/safe-bash/chunks/{chunk-JFGGQUYP.js → chunk-BFXGHT3R.js} +2 -2
  13. package/dist/safe-bash/chunks/{chunk-RP5IZOOR.js → chunk-BJYV5J65.js} +1050 -101
  14. package/dist/safe-bash/chunks/chunk-BJYV5J65.js.map +7 -0
  15. package/dist/safe-bash/chunks/{chunk-HNHOPD3P.js → chunk-DIEFWGXO.js} +46 -26
  16. package/dist/safe-bash/chunks/{chunk-HNHOPD3P.js.map → chunk-DIEFWGXO.js.map} +2 -2
  17. package/dist/safe-bash/chunks/{chunk-SME47P4B.js → chunk-DV6EZOKM.js} +46 -26
  18. package/dist/safe-bash/chunks/{chunk-SME47P4B.js.map → chunk-DV6EZOKM.js.map} +2 -2
  19. package/dist/safe-bash/chunks/{chunk-646RTREQ.js → chunk-EEDOYIPC.js} +2 -2
  20. package/dist/safe-bash/chunks/{chunk-OFAAHWL5.js → chunk-GCQ5A2T2.js} +2 -2
  21. package/dist/safe-bash/chunks/{chunk-MJW4KSKV.js → chunk-GLPJEDLY.js} +2 -2
  22. package/dist/safe-bash/chunks/{chunk-FOOJWH7J.js → chunk-GO5OKPBO.js} +4 -4
  23. package/dist/safe-bash/chunks/{chunk-5JANWFJ3.js → chunk-GWYXCCGO.js} +4 -4
  24. package/dist/safe-bash/chunks/{chunk-DPHRNHPT.js → chunk-H6KJ4L22.js} +2 -2
  25. package/dist/safe-bash/chunks/{chunk-FLX2BZBF.js → chunk-HGBYIDAK.js} +4 -4
  26. package/dist/safe-bash/chunks/{chunk-VGJIDLZM.js → chunk-KS5VSJYM.js} +15 -8
  27. package/dist/safe-bash/chunks/chunk-KS5VSJYM.js.map +7 -0
  28. package/dist/safe-bash/chunks/{chunk-PO3Z7W3A.js → chunk-MUHYGUFD.js} +4 -4
  29. package/dist/safe-bash/chunks/{chunk-5DLGYPGJ.js → chunk-PDSTXORC.js} +126 -58
  30. package/dist/safe-bash/chunks/chunk-PDSTXORC.js.map +7 -0
  31. package/dist/safe-bash/chunks/{chunk-TIHMU25L.js → chunk-PQ37GDJF.js} +3 -3
  32. package/dist/safe-bash/chunks/{chunk-OTM5RCWZ.js → chunk-QNEDWYC2.js} +15 -8
  33. package/dist/safe-bash/chunks/chunk-QNEDWYC2.js.map +7 -0
  34. package/dist/safe-bash/chunks/{chunk-LZ7FUN6K.js → chunk-RHHDOA67.js} +5 -5
  35. package/dist/safe-bash/chunks/{chunk-DSCL3VA2.js → chunk-SJ3B26XV.js} +4 -4
  36. package/dist/safe-bash/chunks/{chunk-6JBTVWHH.js → chunk-SWACYEIT.js} +5 -5
  37. package/dist/safe-bash/chunks/{chunk-7UJW7TYR.js → chunk-TD6NWAUK.js} +126 -58
  38. package/dist/safe-bash/chunks/chunk-TD6NWAUK.js.map +7 -0
  39. package/dist/safe-bash/chunks/{chunk-Q4I754TV.js → chunk-THOBFD5C.js} +2 -2
  40. package/dist/safe-bash/chunks/{chunk-XELW5O3R.js → chunk-U2STHT7S.js} +2 -2
  41. package/dist/safe-bash/chunks/{chunk-5X4SOSTT.js → chunk-UJHE5PTK.js} +2 -2
  42. package/dist/safe-bash/chunks/{chunk-B6YFFKYG.js → chunk-X4I3RHTC.js} +5 -1
  43. package/dist/safe-bash/chunks/chunk-X4I3RHTC.js.map +7 -0
  44. package/dist/safe-bash/chunks/{chunk-YOK5UHA7.js → chunk-XKXFX3RH.js} +5 -1
  45. package/dist/safe-bash/chunks/chunk-XKXFX3RH.js.map +7 -0
  46. package/dist/safe-bash/chunks/{chunk-PLCYP2E5.js → chunk-XV4K3UUF.js} +2 -2
  47. package/dist/safe-bash/commands/csplit/index.browser.js +2 -2
  48. package/dist/safe-bash/commands/factor/index.browser.js +2 -2
  49. package/dist/safe-bash/commands/getopt/index.browser.js +2 -2
  50. package/dist/safe-bash/commands/hexdump/index.browser.js +2 -2
  51. package/dist/safe-bash/commands/iconv/index.browser.js +2 -2
  52. package/dist/safe-bash/commands/internal.d.ts.map +1 -1
  53. package/dist/safe-bash/commands/internal.js +4 -3
  54. package/dist/safe-bash/commands/internal.js.map +1 -1
  55. package/dist/safe-bash/commands/line-endings/index.browser.js +2 -2
  56. package/dist/safe-bash/commands/llm/index.browser.js +4 -4
  57. package/dist/safe-bash/commands/network/index.browser.js +4 -4
  58. package/dist/safe-bash/commands/node/index.browser.js +4 -4
  59. package/dist/safe-bash/commands/pandoc/index.js.map +1 -1
  60. package/dist/safe-bash/commands/pr/index.browser.js +3 -3
  61. package/dist/safe-bash/commands/python/index.browser.js +2 -2
  62. package/dist/safe-bash/commands/record-buffer.d.ts.map +1 -1
  63. package/dist/safe-bash/commands/record-buffer.js +12 -4
  64. package/dist/safe-bash/commands/record-buffer.js.map +1 -1
  65. package/dist/safe-bash/commands/regex-execution/bounded-provider.d.ts.map +1 -1
  66. package/dist/safe-bash/commands/regex-execution/bounded-provider.js +75 -8
  67. package/dist/safe-bash/commands/regex-execution/bounded-provider.js.map +1 -1
  68. package/dist/safe-bash/commands/regex-execution/ere/limits.d.ts +1 -1
  69. package/dist/safe-bash/commands/regex-execution/ere/limits.d.ts.map +1 -1
  70. package/dist/safe-bash/commands/regex-execution/ere/limits.js +6 -4
  71. package/dist/safe-bash/commands/regex-execution/ere/limits.js.map +1 -1
  72. package/dist/safe-bash/commands/regex-execution/portable.d.ts.map +1 -1
  73. package/dist/safe-bash/commands/regex-execution/portable.js +7 -2
  74. package/dist/safe-bash/commands/regex-execution/portable.js.map +1 -1
  75. package/dist/safe-bash/commands/regex-execution/protocol.d.ts +2 -0
  76. package/dist/safe-bash/commands/regex-execution/protocol.d.ts.map +1 -1
  77. package/dist/safe-bash/commands/regex-execution/protocol.js +26 -0
  78. package/dist/safe-bash/commands/regex-execution/protocol.js.map +1 -1
  79. package/dist/safe-bash/commands/regex-execution/utf8.d.ts +1 -1
  80. package/dist/safe-bash/commands/regex-execution/utf8.d.ts.map +1 -1
  81. package/dist/safe-bash/commands/regex-execution/utf8.js +26 -2
  82. package/dist/safe-bash/commands/regex-execution/utf8.js.map +1 -1
  83. package/dist/safe-bash/commands/search/grep.d.ts.map +1 -1
  84. package/dist/safe-bash/commands/search/grep.js +109 -15
  85. package/dist/safe-bash/commands/search/grep.js.map +1 -1
  86. package/dist/safe-bash/commands/search/matcher.d.ts +1 -1
  87. package/dist/safe-bash/commands/search/matcher.d.ts.map +1 -1
  88. package/dist/safe-bash/commands/search/matcher.js +2 -0
  89. package/dist/safe-bash/commands/search/matcher.js.map +1 -1
  90. package/dist/safe-bash/commands/search/shared.d.ts.map +1 -1
  91. package/dist/safe-bash/commands/search/shared.js +23 -12
  92. package/dist/safe-bash/commands/search/shared.js.map +1 -1
  93. package/dist/safe-bash/commands/standard.d.ts.map +1 -1
  94. package/dist/safe-bash/commands/standard.js +22 -0
  95. package/dist/safe-bash/commands/standard.js.map +1 -1
  96. package/dist/safe-bash/commands/streams.d.ts.map +1 -1
  97. package/dist/safe-bash/commands/streams.js +54 -10
  98. package/dist/safe-bash/commands/streams.js.map +1 -1
  99. package/dist/safe-bash/commands/structured/input.d.ts.map +1 -1
  100. package/dist/safe-bash/commands/structured/input.js +484 -55
  101. package/dist/safe-bash/commands/structured/input.js.map +1 -1
  102. package/dist/safe-bash/commands/structured/interpreter.d.ts +3 -0
  103. package/dist/safe-bash/commands/structured/interpreter.d.ts.map +1 -1
  104. package/dist/safe-bash/commands/structured/interpreter.js +157 -1
  105. package/dist/safe-bash/commands/structured/interpreter.js.map +1 -1
  106. package/dist/safe-bash/commands/structured/jq.d.ts.map +1 -1
  107. package/dist/safe-bash/commands/structured/jq.js +50 -24
  108. package/dist/safe-bash/commands/structured/jq.js.map +1 -1
  109. package/dist/safe-bash/commands/structured/limits.d.ts +5 -0
  110. package/dist/safe-bash/commands/structured/limits.d.ts.map +1 -1
  111. package/dist/safe-bash/commands/structured/limits.js +51 -36
  112. package/dist/safe-bash/commands/structured/limits.js.map +1 -1
  113. package/dist/safe-bash/commands/structured/numbers.d.ts +1 -0
  114. package/dist/safe-bash/commands/structured/numbers.d.ts.map +1 -1
  115. package/dist/safe-bash/commands/structured/numbers.js +32 -0
  116. package/dist/safe-bash/commands/structured/numbers.js.map +1 -1
  117. package/dist/safe-bash/commands/text-programs/awk-reader.d.ts +1 -0
  118. package/dist/safe-bash/commands/text-programs/awk-reader.d.ts.map +1 -1
  119. package/dist/safe-bash/commands/text-programs/awk-reader.js +41 -5
  120. package/dist/safe-bash/commands/text-programs/awk-reader.js.map +1 -1
  121. package/dist/safe-bash/commands/text-programs/awk-retention.d.ts +1 -0
  122. package/dist/safe-bash/commands/text-programs/awk-retention.d.ts.map +1 -1
  123. package/dist/safe-bash/commands/text-programs/awk-retention.js +9 -0
  124. package/dist/safe-bash/commands/text-programs/awk-retention.js.map +1 -1
  125. package/dist/safe-bash/commands/text-programs/awk-runtime.d.ts +13 -0
  126. package/dist/safe-bash/commands/text-programs/awk-runtime.d.ts.map +1 -1
  127. package/dist/safe-bash/commands/text-programs/awk-runtime.js +421 -83
  128. package/dist/safe-bash/commands/text-programs/awk-runtime.js.map +1 -1
  129. package/dist/safe-bash/commands/text-programs/awk-values.d.ts.map +1 -1
  130. package/dist/safe-bash/commands/text-programs/awk-values.js +21 -0
  131. package/dist/safe-bash/commands/text-programs/awk-values.js.map +1 -1
  132. package/dist/safe-bash/commands/text-programs/regex.d.ts +15 -2
  133. package/dist/safe-bash/commands/text-programs/regex.d.ts.map +1 -1
  134. package/dist/safe-bash/commands/text-programs/regex.js +501 -13
  135. package/dist/safe-bash/commands/text-programs/regex.js.map +1 -1
  136. package/dist/safe-bash/commands/text-programs/sed.d.ts.map +1 -1
  137. package/dist/safe-bash/commands/text-programs/sed.js +242 -102
  138. package/dist/safe-bash/commands/text-programs/sed.js.map +1 -1
  139. package/dist/safe-bash/commands/text-programs/shared.d.ts +2 -0
  140. package/dist/safe-bash/commands/text-programs/shared.d.ts.map +1 -1
  141. package/dist/safe-bash/commands/text-programs/shared.js +36 -0
  142. package/dist/safe-bash/commands/text-programs/shared.js.map +1 -1
  143. package/dist/safe-bash/commands/text.d.ts.map +1 -1
  144. package/dist/safe-bash/commands/text.js +136 -19
  145. package/dist/safe-bash/commands/text.js.map +1 -1
  146. package/dist/safe-bash/commands/tsort/index.browser.js +2 -2
  147. package/dist/safe-bash/commands/xml/index.browser.js +5 -5
  148. package/dist/safe-bash/commands/yq/index.browser.js +5 -5
  149. package/dist/safe-bash/contracts/yield.d.ts +1 -0
  150. package/dist/safe-bash/contracts/yield.d.ts.map +1 -1
  151. package/dist/safe-bash/contracts/yield.js +3 -0
  152. package/dist/safe-bash/contracts/yield.js.map +1 -1
  153. package/dist/safe-bash/core.browser.js +1052 -256
  154. package/dist/safe-bash/core.browser.js.map +3 -3
  155. package/dist/safe-bash/plugins/composition.d.ts +1 -0
  156. package/dist/safe-bash/plugins/composition.d.ts.map +1 -1
  157. package/dist/safe-bash/plugins/composition.js +80 -2
  158. package/dist/safe-bash/plugins/composition.js.map +1 -1
  159. package/dist/safe-bash/plugins/index.d.ts.map +1 -1
  160. package/dist/safe-bash/plugins/index.js +2 -2
  161. package/dist/safe-bash/plugins/index.js.map +1 -1
  162. package/dist/safe-bash-command-fold/arguments.d.ts +1 -1
  163. package/dist/safe-bash-command-fold/contracts.d.ts +2 -1
  164. package/dist/safe-bash-command-fold/engine.d.ts +1 -1
  165. package/dist/safe-bash-command-fold/index.js +10 -8
  166. package/dist/safe-bash-command-fold/index.js.map +2 -2
  167. package/dist/safe-bash-command-sips/index.js +231 -67
  168. package/dist/safe-bash-command-sips/index.js.map +2 -2
  169. package/dist/safe-bash-command-unrtf/contracts.d.ts +5 -2
  170. package/dist/safe-bash-command-unrtf/index.js +6 -5
  171. package/dist/safe-bash-command-unrtf/index.js.map +2 -2
  172. package/dist/safe-playwright-cloudflare/browser-run-code.js +22 -6
  173. package/package.json +2 -2
  174. package/dist/safe-bash/chunks/chunk-5DLGYPGJ.js.map +0 -7
  175. package/dist/safe-bash/chunks/chunk-7UJW7TYR.js.map +0 -7
  176. package/dist/safe-bash/chunks/chunk-B6YFFKYG.js.map +0 -7
  177. package/dist/safe-bash/chunks/chunk-OTM5RCWZ.js.map +0 -7
  178. package/dist/safe-bash/chunks/chunk-RP5IZOOR.js.map +0 -7
  179. package/dist/safe-bash/chunks/chunk-VGJIDLZM.js.map +0 -7
  180. package/dist/safe-bash/chunks/chunk-VV24PRPB.js.map +0 -7
  181. package/dist/safe-bash/chunks/chunk-YOK5UHA7.js.map +0 -7
  182. /package/dist/safe-bash/chunks/{chunk-6VZX7ESE.js.map → chunk-26N7BLXE.js.map} +0 -0
  183. /package/dist/safe-bash/chunks/{chunk-ZZ7JQBPX.js.map → chunk-4A2OLEML.js.map} +0 -0
  184. /package/dist/safe-bash/chunks/{chunk-LTREB3HX.js.map → chunk-54MC6XF5.js.map} +0 -0
  185. /package/dist/safe-bash/chunks/{chunk-Z3CCN6Y2.js.map → chunk-6J5FUESH.js.map} +0 -0
  186. /package/dist/safe-bash/chunks/{chunk-YR5RZBWS.js.map → chunk-6TBFZ5JE.js.map} +0 -0
  187. /package/dist/safe-bash/chunks/{chunk-6HJNJ625.js.map → chunk-7MMYQG3P.js.map} +0 -0
  188. /package/dist/safe-bash/chunks/{chunk-WTZZX4LV.js.map → chunk-A4MB2KXV.js.map} +0 -0
  189. /package/dist/safe-bash/chunks/{chunk-EM2JW7ZH.js.map → chunk-ATYJKRBZ.js.map} +0 -0
  190. /package/dist/safe-bash/chunks/{chunk-EFMXWUYE.js.map → chunk-B6JEJ6AT.js.map} +0 -0
  191. /package/dist/safe-bash/chunks/{chunk-JFGGQUYP.js.map → chunk-BFXGHT3R.js.map} +0 -0
  192. /package/dist/safe-bash/chunks/{chunk-646RTREQ.js.map → chunk-EEDOYIPC.js.map} +0 -0
  193. /package/dist/safe-bash/chunks/{chunk-OFAAHWL5.js.map → chunk-GCQ5A2T2.js.map} +0 -0
  194. /package/dist/safe-bash/chunks/{chunk-MJW4KSKV.js.map → chunk-GLPJEDLY.js.map} +0 -0
  195. /package/dist/safe-bash/chunks/{chunk-FOOJWH7J.js.map → chunk-GO5OKPBO.js.map} +0 -0
  196. /package/dist/safe-bash/chunks/{chunk-5JANWFJ3.js.map → chunk-GWYXCCGO.js.map} +0 -0
  197. /package/dist/safe-bash/chunks/{chunk-DPHRNHPT.js.map → chunk-H6KJ4L22.js.map} +0 -0
  198. /package/dist/safe-bash/chunks/{chunk-FLX2BZBF.js.map → chunk-HGBYIDAK.js.map} +0 -0
  199. /package/dist/safe-bash/chunks/{chunk-PO3Z7W3A.js.map → chunk-MUHYGUFD.js.map} +0 -0
  200. /package/dist/safe-bash/chunks/{chunk-TIHMU25L.js.map → chunk-PQ37GDJF.js.map} +0 -0
  201. /package/dist/safe-bash/chunks/{chunk-LZ7FUN6K.js.map → chunk-RHHDOA67.js.map} +0 -0
  202. /package/dist/safe-bash/chunks/{chunk-DSCL3VA2.js.map → chunk-SJ3B26XV.js.map} +0 -0
  203. /package/dist/safe-bash/chunks/{chunk-6JBTVWHH.js.map → chunk-SWACYEIT.js.map} +0 -0
  204. /package/dist/safe-bash/chunks/{chunk-Q4I754TV.js.map → chunk-THOBFD5C.js.map} +0 -0
  205. /package/dist/safe-bash/chunks/{chunk-XELW5O3R.js.map → chunk-U2STHT7S.js.map} +0 -0
  206. /package/dist/safe-bash/chunks/{chunk-5X4SOSTT.js.map → chunk-UJHE5PTK.js.map} +0 -0
  207. /package/dist/safe-bash/chunks/{chunk-PLCYP2E5.js.map → chunk-XV4K3UUF.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/commands/structured/limits.ts", "../../src/commands/structured/numbers.ts", "../../src/commands/structured/input.ts", "../../src/commands/structured/values.ts", "../../src/commands/structured/split.ts", "../../src/commands/structured/interpreter.ts", "../../src/commands/structured/formats.ts", "../../src/commands/structured/regex.ts", "../../src/commands/text-programs/regex.ts", "../../src/commands/text-programs/shared.ts", "../../src/commands/search/requirements.ts", "../../src/commands/text-programs/replacement-buffer.ts", "../../src/commands/structured/indices.ts", "../../src/commands/structured/dates.ts", "../../src/commands/structured/capture.ts", "../../src/commands/structured/recurse.ts", "../../src/commands/structured/delpaths.ts", "../../src/commands/structured/splits.ts", "../../src/commands/structured/parser.ts"],
4
- "sourcesContent": ["import { monotonicNow, yieldTurn } from \"../../contracts/yield.js\";\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 nextYield = 1024;\n private lastYield = monotonicNow();\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 step(count = 1): void {\n this.signal.throwIfAborted();\n this.steps += count;\n if (this.steps > this.limits.maxSteps) throw new JqLimitError(\"maxSteps\");\n }\n async tick(count = 1): Promise<void> {\n this.step(count);\n if (this.steps >= this.nextYield || monotonicNow() - this.lastYield >= 25) {\n await yieldTurn(this.signal);\n this.signal.throwIfAborted();\n this.nextYield = this.steps + 1024;\n this.lastYield = monotonicNow();\n }\n }\n collection(size: number): void {\n if (size > this.limits.maxCollectionSize) throw new JqLimitError(\"maxCollectionSize\");\n }\n text(text: string): void {\n if (text.length > this.limits.maxValueBytes || (text.length * 3 > this.limits.maxValueBytes && Buffer.byteLength(text) > this.limits.maxValueBytes)) throw new JqLimitError(\"maxValueBytes\");\n }\n value(value: Json): number {\n let bytes = 0;\n const visit = (current: Json, depth: number): void => {\n this.step();\n if (depth > this.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n if (current !== null && typeof current === \"object\" && !(current instanceof Decimal)) {\n if (depth + 1 > this.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n if (Array.isArray(current)) {\n this.collection(current.length);\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 visit(current[index]!, depth + 1);\n }\n } else {\n const keys = keyOrders.get(current) ?? Object.keys(current);\n this.collection(keys.length);\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 visit(current[key]!, depth + 1);\n }\n }\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 };\n visit(value, 0);\n return bytes;\n }\n}\nconst keyOrders = new WeakMap<Record<string, Json>, string[]>();\nexport function object(): Record<string, Json> {\n const result = Object.create(null) as Record<string, Json>;\n keyOrders.set(result, []);\n return result;\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 if (!Object.hasOwn(value, key)) keyOrders.get(value)?.push(key);\n value[key] = item;\n}\nexport function remove(value: Record<string, Json>, key: string): void {\n delete value[key];\n const keys = keyOrders.get(value);\n if (keys) { const index = keys.indexOf(key); 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) : Buffer.byteLength(scalarJson(value, budget));\n }\n if (value instanceof Decimal) {\n budget.step(Math.ceil(value.text.length / 32));\n return Buffer.byteLength(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 Buffer.byteLength(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", "import type { Budget } from \"./limits.js\";\n\nexport class Decimal {\n constructor(readonly digits: string, readonly exponent: number, readonly negative: boolean, readonly text: string, readonly double: number) {\n Object.freeze(this);\n }\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 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 (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 { readBytes, type ByteSource } from \"../../contracts/index.js\";\nimport { Budget, JqError, JqLimitError, object, objectKeyIterator, objectSize, put, scalarJson, type Json } from \"./limits.js\";\nimport { numericToken, isNumber } from \"./numbers.js\";\n\nexport class JqParseError extends JqError {\n constructor(readonly detail: string, readonly offset: number, readonly line = 1, readonly column = offset, readonly located = true) { super(detail); }\n diagnostic(): string { return this.located ? `${this.detail} at line ${this.line}, column ${this.column}` : this.detail; }\n}\nexport function decodeUtf8(bytes: string, budget: Budget): string {\n 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}\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 readonly counts = new WeakMap<object, number>();\n private readonly closed = new WeakSet<object>();\n private readonly lastKey = new WeakMap<object, string>();\n constructor(private readonly budget: Budget, private readonly stream = false, line = 1, column = 0) {\n this.line = line; this.column = column;\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 this.budget.collection(parent.length + 1);\n parent.push(this.next!);\n } else if (typeof parent === \"string\") {\n const container = this.stack.at(-2) as Record<string, Json>;\n if (!Object.hasOwn(container, parent)) this.budget.collection(objectSize(container) + 1);\n put(container, parent, this.next!);\n this.stack.pop();\n } else this.fail(\"Objects must consist of key:value pairs\");\n this.next = undefined;\n }\n private structure(character: string): void {\n const parent = this.stack.at(-1);\n 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 if (objectSize(parent!) || closingCount) 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 = \"[]{}:,\".includes(character);\n const endsScalar = !this.quoted && !this.stack.length && this.token !== \"\" && (space || structure || character === '\"');\n if (!endsScalar && (this.bytes || !space)) {\n if (++this.bytes > this.budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n }\n if (this.quoted) {\n if (character === '\"' && !this.escaped) {\n this.accept(this.string());\n this.token = \"\";\n this.quoted = false;\n return this.done();\n }\n this.token += character;\n this.escaped = character === \"\\\\\" && !this.escaped;\n return undefined;\n }\n if (!space && !structure && character !== '\"') { this.token += character; return undefined; }\n this.literal();\n const output = this.done();\n if (character === '\"') this.quoted = true;\n else if (structure) this.structure(character);\n if (output !== undefined && (this.quoted || this.stack.length)) this.bytes = 1;\n return this.done() ?? output;\n }\n finish(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 : Buffer.from(input).toString(\"latin1\");\n if (text.length > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n const parser = new JsonParser(budget);\n let value: Json | undefined;\n const accept = (next: Json | undefined): void => {\n if (next === undefined) return;\n if (value !== undefined) throw new JqParseError(\"Unexpected extra JSON values\", 0, 1, 0, false);\n value = next;\n };\n for (let index = 0; index < text.length; index++) {\n if (index % 1024 === 0) budget.step();\n accept(parser.feed(text[index]!));\n }\n accept(parser.finish());\n if (value === undefined) throw new JqParseError(\"Expected JSON value\", 0, 1, 0, false);\n return value;\n}\nexport async function* readChunks(source: ByteSource, budget: Budget): AsyncGenerator<Uint8Array> {\n for await (const chunk of readBytes(source, budget.signal)) {\n await budget.tick();\n budget.inputBytes += chunk.byteLength;\n if (budget.inputBytes > budget.limits.maxInputBytes) throw new JqLimitError(\"maxInputBytes\");\n let offset = 0;\n while (offset < chunk.length) {\n if (budget.inputLocation.complete) budget.inputLocation = { ...budget.inputLocation, complete: false };\n const newline = chunk.indexOf(10, offset);\n const end = Math.min(newline < 0 ? chunk.length : newline + 1, offset + 16384);\n budget.step(Math.ceil((end - offset) / 1024));\n await budget.tick();\n if (newline >= 0 && end === newline + 1) { budget.inputLocation.line++; budget.inputLocation.complete = true; }\n yield chunk.subarray(offset, end);\n offset = end;\n }\n }\n budget.inputLocation.complete = true;\n}\nexport interface JsonInputOptions {\n readonly stream?: boolean;\n readonly streamErrors?: boolean;\n readonly sequence?: boolean;\n readonly warning?: (message: string) => Promise<void>;\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 error;\n failed = true;\n };\n let scanned = 0;\n let line = 1;\n let column = 0;\n let nulTail: string | undefined;\n async function* scan(text: string, completeLine = false): AsyncGenerator<Json> {\n for (const character of text) {\n if (++scanned % 1024 === 0) await budget.tick();\n if (!completeLine && character === \"\\0\" && nulTail === undefined) nulTail = \"\";\n if (nulTail !== undefined) {\n nulTail += character;\n if (nulTail.length > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (character === \"\\n\") { const tail = nulTail; nulTail = undefined; yield* scan(tail, true); }\n continue;\n }\n 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 { yield* values(parser.feed(character)); } 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 }\n try {\n for await (const chunk of readChunks(source, budget)) yield* scan(Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength).toString(\"latin1\"));\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 } catch (error) {\n if (!(error instanceof JqParseError)) throw error;\n throw new JqError(`parse error: ${error.diagnostic()}`);\n }\n}\n\nexport async function* rawValues(sources: AsyncIterable<ByteSource>, budget: Budget, slurp: boolean): AsyncGenerator<string> {\n let buffer = \"\";\n let bytes = 2;\n const append = (text: string): void => {\n bytes += Buffer.byteLength(JSON.stringify(text)) - 2;\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n buffer += text;\n };\n for await (const source of sources) {\n let pending = \"\";\n for await (const chunk of readChunks(source, budget)) {\n await budget.tick();\n pending += Buffer.from(chunk).toString(\"latin1\");\n if (pending.length + bytes - (!slurp && pending.endsWith(\"\\n\") ? 1 : 0) > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (pending.endsWith(\"\\n\")) {\n append(decodeUtf8(slurp ? pending : pending.slice(0, -1), budget));\n pending = \"\";\n if (!slurp) { budget.value(buffer); yield buffer; buffer = \"\"; bytes = 2; }\n }\n }\n append(decodeUtf8(pending, budget));\n }\n if (slurp || buffer) { budget.value(buffer); yield buffer; }\n}\n\nexport 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 await budget.tick(0);\n let bytes = 0;\n for (const fragment of jsonFragments(value, budget, false, depth)) {\n await budget.tick(0);\n bytes += fragment.bytes;\n if (bytes > maxBytes) throw new JqLimitError(\"maxValueBytes\");\n }\n return bytes;\n}\n\nexport async function stringify(value: Json, budget: Budget, format: boolean | JsonFormat = false, maxBytes = budget.limits.maxValueBytes, limitName: \"maxValueBytes\" | \"maxOutputBytes\" = \"maxValueBytes\", asStringValue = false): Promise<string> {\n await budget.tick(0);\n const parts: string[] = [];\n let bytes = 0;\n let units = 0;\n let stringBytes = 2;\n for (const fragment of jsonFragments(value, budget, format)) {\n await budget.tick(0);\n bytes += fragment.bytes;\n if (bytes > maxBytes) throw new JqLimitError(limitName);\n const text = renderJsonFragment(fragment, budget);\n if (asStringValue) {\n for (const encoded of quotedFragments(text, budget)) stringBytes += encoded.bytes;\n stringBytes -= 2;\n if (stringBytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n }\n budget.step();\n units += text.length;\n parts.push(text);\n }\n await budget.tick(units);\n return parts.join(\"\");\n}\n", "import { Budget, 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 = Buffer.from(text);\n const retained = Math.min(15 - length, bytes.length);\n parts.push(bytes.subarray(0, retained));\n length += retained;\n if (length === 15) break;\n }\n const bytes = Buffer.concat(parts, length);\n const text = length < 15 ? bytes.toString() : `${bytes.subarray(0, 11).toString()}...`;\n return `${type(value)} (${text})`;\n}\nexport async function stringCompare(left: string, right: string, budget: Budget): Promise<number> {\n await budget.tick(1 + Math.ceil(Math.min(left.length, right.length) / 32));\n let leftOffset = 0;\n let rightOffset = 0;\n let points = 0;\n while (leftOffset < left.length && rightOffset < right.length) {\n if (points++ % 32 === 0) await budget.tick(0);\n const leftPoint = left.codePointAt(leftOffset)!;\n const rightPoint = right.codePointAt(rightOffset)!;\n if (leftPoint !== rightPoint) return leftPoint < rightPoint ? -1 : 1;\n leftOffset += leftPoint > 0xffff ? 2 : 1;\n rightOffset += rightPoint > 0xffff ? 2 : 1;\n }\n return leftOffset < left.length ? 1 : rightOffset < right.length ? -1 : 0;\n}\nexport async function stableSort<Item>(items: Item[], budget: Budget, comparator: (left: Item, right: Item) => Promise<number>): Promise<void> {\n await budget.tick(0);\n budget.collection(items.length);\n if (items.length < 2) return;\n await budget.tick(items.length);\n const scratch = new Array<Item>(items.length);\n let source = items;\n let target = scratch;\n for (let width = 1; width < items.length; width *= 2) {\n for (let start = 0; start < items.length; start += width * 2) {\n const middle = Math.min(start + width, items.length);\n const end = Math.min(start + width * 2, items.length);\n let left = start;\n let right = middle;\n for (let index = start; index < end; index++) {\n await budget.tick();\n if (left < middle && (right >= end || await comparator(source[left]!, source[right]!) <= 0)) target[index] = source[left++]!;\n else target[index] = source[right++]!;\n }\n }\n const previous = source;\n source = target;\n target = previous;\n }\n if (source !== items) for (let index = 0; index < items.length; index++) {\n await budget.tick();\n items[index] = source[index]!;\n }\n}\nexport async function sortedKeys(value: Record<string, Json>, budget: Budget): Promise<string[]> {\n await budget.tick(0);\n const keys: string[] = [];\n for (const key of objectKeyIterator(value)) {\n await budget.tick();\n budget.collection(keys.length + 1);\n keys.push(key);\n }\n await stableSort(keys, budget, (left, right) => stringCompare(left, right, budget));\n return keys;\n}\nexport async function sortObjectKeys(value: Json, budget: Budget): Promise<Json> {\n await budget.tick();\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 async function compare(left: Json, right: Json, budget: Budget): Promise<number> {\n await budget.tick();\n const rank = (value: Json): number => value === null ? 0 : value === false ? 1 : value === true ? 2 : isNumber(value) ? 3 : typeof value === \"string\" ? 4 : Array.isArray(value) ? 5 : 6;\n const difference = rank(left) - rank(right);\n if (difference) return Math.sign(difference);\n if (isNumber(left) && isNumber(right)) return compareNumbers(left, right, budget);\n if (typeof left === \"string\" && typeof right === \"string\") return stringCompare(left, right, budget);\n if (left === right && !Array.isArray(left) && !isObject(left)) return 0;\n if (Array.isArray(left) && Array.isArray(right)) {\n for (let index = 0; index < Math.min(left.length, right.length); index++) {\n const result = await compare(left[index]!, right[index]!, budget); if (result) return result;\n }\n return Math.sign(left.length - right.length);\n }\n if (isObject(left) && isObject(right)) {\n const keys = await sortedKeys(left, budget);\n const otherKeys = await sortedKeys(right, budget);\n const keyDifference = await compare(keys, otherKeys, budget);\n if (keyDifference) return keyDifference;\n for (const key of keys) { const result = await compare(left[key]!, right[key]!, budget); if (result) return result; }\n }\n return 0;\n}\nexport function equal(left: Json, right: Json, budget: Budget): boolean {\n budget.step();\n if (left === right) return true;\n if (isNumber(left) && isNumber(right)) return compareNumbers(left, right, budget) === 0;\n if (Array.isArray(left) && Array.isArray(right)) return left.length === right.length && left.every((value, index) => equal(value, right[index]!, budget));\n if (isObject(left) && isObject(right)) {\n const keys = objectKeys(left);\n return keys.length === objectKeys(right).length && keys.every(key => Object.hasOwn(right, key) && equal(left[key]!, right[key]!, budget));\n }\n return false;\n}\nexport async function* entries(value: Json, budget: Budget): AsyncGenerator<[string | number, Json]> {\n budget.signal.throwIfAborted();\n if (Array.isArray(value)) {\n budget.collection(value.length);\n for (let index = 0; index < value.length; index++) {\n await budget.tick(2);\n yield [index, value[index]!];\n }\n return;\n }\n if (isObject(value)) {\n let count = 0;\n for (const key of objectKeyIterator(value)) {\n await budget.tick(2);\n budget.collection(++count);\n yield [key, value[key]!];\n }\n return;\n }\n throw new JqError(`Cannot iterate over ${describe(value, budget)}`);\n}\nexport function indexValue(value: Json, index: Json): Json {\n if (typeof index === \"string\") {\n if (value === null) return null;\n if (isObject(value)) return Object.hasOwn(value, index) ? value[index]! : null;\n } else if (isNumber(index) && Number.isFinite(numberValue(index))) {\n if (value === null) return null;\n const integer = Math.trunc(numberValue(index));\n if (Array.isArray(value)) return value[integer < 0 ? value.length + integer : integer] ?? null;\n }\n throw new JqError(`Cannot index ${type(value)} with ${type(index)}${typeof index === \"string\" && Buffer.byteLength(index) < 30 ? ` ${JSON.stringify(index)}` : \"\"}`);\n}\nexport async function sliceValue(value: Json, start: Json, end: Json, budget: Budget): Promise<Json> {\n if (start !== null && (!isNumber(start) || !Number.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 await budget.tick();\n offset += value.codePointAt(offset)! > 0xffff ? 2 : 1;\n }\n if (first < 0) first = Math.max(0, length + first);\n if (last !== undefined && last < 0) last = Math.max(0, length + last);\n if (last !== undefined && first >= last) return \"\";\n }\n let firstOffset = first === 0 ? 0 : value.length;\n let offset = 0;\n const stop = last ?? first;\n for (let point = 0; point < stop && offset < value.length;) {\n await budget.tick();\n offset += value.codePointAt(offset)! > 0xffff ? 2 : 1;\n if (++point === first) firstOffset = offset;\n }\n return value.slice(firstOffset, last === undefined ? undefined : offset);\n}\nexport function contains(value: Json, sought: Json, budget: Budget): boolean {\n budget.step();\n if (typeof value === \"string\" && typeof sought === \"string\") return value.includes(sought);\n if (Array.isArray(value) && Array.isArray(sought)) return sought.every(item => value.some(candidate => contains(candidate, item, budget)));\n if (isObject(value) && isObject(sought)) return objectKeys(sought).every(key => Object.hasOwn(value, key) && contains(value[key]!, sought[key]!, budget));\n return type(value) === type(sought) && equal(value, sought, budget);\n}\nexport async function binary(operator: string, left: Json, right: Json, budget: Budget): Promise<Json> {\n budget.step();\n if ([\"==\", \"!=\", \"<\", \"<=\", \">\", \">=\"].includes(operator)) {\n if (operator === \"==\") return equal(left, right, budget);\n if (operator === \"!=\") return !equal(left, right, budget);\n const order = await compare(left, right, budget);\n switch (operator) {\n case \"<\": return order < 0;\n case \"<=\": return order <= 0;\n case \">\": return order > 0;\n default: return order >= 0;\n }\n }\n if (operator === \"+\") {\n if (left === null) return right;\n if (right === null) return left;\n if (isNumber(left) && isNumber(right)) return numberValue(left) + numberValue(right);\n if (typeof left === \"string\" && typeof right === \"string\") {\n budget.step(left.length + right.length);\n const result = left + right;\n budget.text(result); return result;\n }\n if (Array.isArray(left) && Array.isArray(right)) { budget.collection(left.length + right.length); return [...left, ...right]; }\n if (isObject(left) && isObject(right)) { const result = copyObject(left, right); budget.collection(objectKeys(result).length); return result; }\n }\n if (operator === \"-\" && Array.isArray(left) && Array.isArray(right)) return left.filter(item => !right.some(other => equal(item, other, budget)));\n if (operator === \"*\" && isObject(left) && isObject(right)) {\n const result = copyObject(left);\n for (const key of objectKeys(right)) {\n const value = right[key]!;\n put(result, key, Object.hasOwn(left, key) && isObject(left[key]!) && isObject(value) ? await binary(\"*\", left[key]!, value, budget) : value);\n }\n budget.collection(objectKeys(result).length); return result;\n }\n if (operator === \"*\" && ((typeof left === \"string\" && isNumber(right)) || (typeof right === \"string\" && isNumber(left)))) {\n const text = typeof left === \"string\" ? left : right as string;\n const count = numberValue(isNumber(left) ? left : right as Numeric);\n if (count < 0) return null;\n if (text === \"\") return \"\";\n if (!Number.isFinite(count) || Buffer.byteLength(text) * Math.floor(count) > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n const result = text.repeat(Math.floor(count)); budget.text(result); return result;\n }\n if (operator === \"/\" && typeof left === \"string\" && typeof right === \"string\") {\n 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 await budget.tick();\n if (typeof input !== \"string\" || typeof separator !== \"string\") {\n throw new JqError(\"split input and separator must be strings\");\n }\n const guaranteedFitUnits = Math.floor((budget.limits.maxValueBytes - 2) / 6);\n for (const operand of [input, separator]) {\n if (operand.length <= guaranteedFitUnits) budget.step();\n else budget.value(operand);\n }\n const result: string[] = [];\n let bytes = 2;\n const append = (start: number, end: number): void => {\n budget.collection(result.length + 1);\n const part = input.slice(start, end);\n bytes += budget.value(part) + (result.length ? 1 : 0);\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n result.push(part);\n };\n if (separator.length === 0) {\n let offset = 0;\n for (const character of input) {\n await budget.tick();\n append(offset, offset + character.length);\n offset += character.length;\n }\n } else if (input.length !== 0) {\n if (separator.length > input.length) append(0, input.length);\n else {\n const prefixes = new Int32Array(separator.length);\n let matched = 0;\n for (let index = 1; index < separator.length; index++) {\n await budget.tick();\n while (matched > 0 && separator[index] !== separator[matched]) {\n await budget.tick();\n matched = prefixes[matched - 1]!;\n }\n if (separator[index] === separator[matched]) matched++;\n prefixes[index] = matched;\n }\n matched = 0;\n let start = 0;\n for (let index = 0; index < input.length; index++) {\n await budget.tick();\n while (matched > 0 && input[index] !== separator[matched]) {\n await budget.tick();\n matched = prefixes[matched - 1]!;\n }\n if (input[index] === separator[matched]) matched++;\n if (matched === separator.length) {\n append(start, index + 1 - separator.length);\n start = index + 1;\n matched = 0;\n }\n }\n append(start, input.length);\n }\n }\n budget.value(result);\n return result;\n}\n", "import { Budget, copyObject, isObject, JqHalt, JqError, JqLimitError, object, objectKeyIterator, objectKeys, put, remove as removeKey, truth, type Json } from \"./limits.js\";\nimport { isNumber, numberValue, type Numeric } from \"./numbers.js\";\nimport { JqParseError, measureValue, parseJson, stringify } from \"./input.js\";\nimport type { Ast, 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, 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\");\nclass UserError extends JqError {\n constructor(readonly value: Json, message: string) { super(message); }\n}\nexport class Interpreter {\n private filters = new Map<Ast, { ast: Ast; scope: Interpreter }>();\n private labels = new Map<symbol, number>();\n private labelSequence = { next: 0 };\n constructor(readonly budget: Budget, readonly variables: ReadonlyMap<string, Json>, private readonly frame?: Frame) {}\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 await this.budget.tick();\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 result: Json[] = [];\n let bytes = 2;\n for await (const value of this.run(ast, input)) {\n this.budget.collection(result.length + 1);\n bytes += this.budget.value(value) + (result.length ? 1 : 0);\n if (bytes > this.budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n result.push(value);\n }\n this.budget.value(result);\n return result;\n }\n async *run(ast: Ast, input: Json): AsyncGenerator<Json> {\n await this.budget.tick();\n switch (ast.kind) {\n case \"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 });\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 await this.budget.tick();\n if (frame.name === ast.name) { yield frame.value; return; }\n }\n yield this.variables.get(ast.name)!; return;\n }\n case \"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 await this.budget.tick();\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 await this.budget.tick();\n accumulator = updated;\n if (ast.kind === \"foreach\") {\n if (ast.extract) yield* scope.run(ast.extract, updated);\n else yield updated;\n }\n }\n }\n if (ast.kind === \"reduce\") { sourceInput = null; yield accumulator; }\n }\n return;\n }\n case \"unary\":\n for await (const value of this.run(ast.operand, input)) {\n if (!isNumber(value)) throw new JqError(\"negation requires a number\");\n yield -numberValue(value);\n }\n return;\n case \"optional\":\n try { yield* this.run(ast.operand, input); }\n catch (error) { if (!(error instanceof JqError) || error instanceof JqLimitError || this.budget.signal.aborted) throw error; }\n return;\n case \"index\":\n for await (const index of this.run(ast.index, input)) for await (const base of this.run(ast.base, input)) yield indexValue(base, index);\n return;\n case \"slice\":\n for await (const start of ast.start ? this.run(ast.start, input) : [null])\n for await (const end of ast.end ? this.run(ast.end, input) : [null])\n for await (const base of this.run(ast.base, input)) { await this.budget.tick(); yield await sliceValue(base, start, end, this.budget); }\n return;\n case \"iterate\":\n for await (const base of this.run(ast.base, input)) for await (const [, value] of entries(base, this.budget)) { await this.budget.tick(); yield value; }\n return;\n case \"array\": yield ast.body ? await this.collect(ast.body, input) : []; return;\n case \"object\": {\n if (!ast.fields.length) { yield object(); return; }\n const stack = [this.field(ast.fields[0]!, object(), input)];\n try {\n while (stack.length) {\n const next = await stack[stack.length - 1]!.next();\n if (next.done) { stack.pop(); continue; }\n if (stack.length === ast.fields.length) yield next.value;\n else stack.push(this.field(ast.fields[stack.length]!, next.value, input));\n }\n } finally { for (const iterator of stack.reverse()) await iterator.return(undefined); }\n return;\n }\n case \"if\":\n for await (const condition of this.run(ast.condition, input)) yield* this.run(truth(condition) ? ast.yes : ast.no, input);\n return;\n case \"binary\": {\n const operator = ast.operator;\n if (operator === \"|\") { for await (const value of this.run(ast.left, input)) yield* this.run(ast.right, value); return; }\n if (operator === \",\") { yield* this.run(ast.left, input); yield* this.run(ast.right, input); return; }\n if (operator === \"//\") {\n let found = false;\n for await (const value of this.run(ast.left, input)) if (truth(value)) { found = true; yield value; }\n if (!found) yield* this.run(ast.right, input);\n return;\n }\n if ([\"=\", \"|=\", \"+=\", \"-=\", \"*=\", \"/=\", \"%=\", \"//=\"].includes(operator)) { yield* this.assign(ast.left, ast.right, operator, input); return; }\n if (operator === \"and\" || operator === \"or\") {\n for await (const left of this.run(ast.left, input)) {\n if (operator === \"and\" && !truth(left)) { yield false; continue; }\n if (operator === \"or\" && truth(left)) { yield true; continue; }\n for await (const right of this.run(ast.right, input)) yield truth(right);\n }\n return;\n }\n for await (const right of this.run(ast.right, input)) {\n for await (const left of this.run(ast.left, input)) {\n const result = await binary(operator, left, right, this.budget);\n this.budget.value(result); yield result;\n }\n }\n return;\n }\n case \"call\": yield* this.call(ast.name, ast.args, input); return;\n }\n }\n async *descend(input: Json, depth = 0): AsyncGenerator<Json> {\n await this.budget.tick();\n if (depth > this.budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n yield input;\n if (Array.isArray(input)) {\n if (depth + 1 > this.budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n this.budget.collection(input.length);\n for (const value of input) yield* this.descend(value, depth + 1);\n } else if (isObject(input)) {\n if (depth + 1 > this.budget.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n const keys = objectKeys(input);\n this.budget.collection(keys.length);\n for (const key of keys) yield* this.descend(input[key]!, depth + 1);\n }\n }\n async *field(field: { key: Ast; value: Ast | 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 });\n return scope;\n }\n async read(input: Json, path: Path): Promise<Json> {\n for (const key of path) {\n await this.budget.tick();\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 await this.budget.tick();\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, start, 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 ? 0 : Math.floor(numberValue(start as Numeric));\n let last = end === null ? 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)) { await this.budget.tick(); 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) { await this.budget.tick(); result.push(item); }\n if (remove) { if (key < result.length) result.splice(key, 1); }\n else {\n while (result.length <= key) { await this.budget.tick(); 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 await budget.tick();\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 await budget.tick();\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 await budget.tick();\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 await budget.tick();\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 await budget.tick();\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 await budget.tick();\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 + Buffer.byteLength(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 await budget.tick(input.length + value.length);\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 await budget.tick();\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 await budget.tick(input.length);\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 await budget.tick();\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 await budget.tick();\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 await budget.tick();\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 await budget.tick(input.length);\n let length = 0;\n for (let offset = 0; offset < input.length; length++) {\n if (length % 32 === 0) await budget.tick(0);\n offset += input.codePointAt(offset)! > 0xffff ? 2 : 1;\n }\n yield length;\n }\n else if (Array.isArray(input)) yield input.length;\n else if (isObject(input)) {\n let length = 0;\n for (const key of objectKeyIterator(input)) { await budget.tick(); void key; length++; }\n yield length;\n }\n else throw new JqError(`${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 await budget.tick(input.length);\n result = [];\n let bytes = 2;\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n for (let index = 0; index < input.length; index++) {\n await budget.tick();\n bytes += String(index).length + (index ? 1 : 0);\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n result.push(index);\n }\n } else if (isObject(input)) {\n let bytes = 2;\n let count = 0;\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n for (const key of objectKeyIterator(input)) {\n await budget.tick();\n budget.collection(++count);\n const separator = count > 1 ? 1 : 0;\n bytes += separator + await measureValue(key, budget, 1, budget.limits.maxValueBytes - bytes - separator);\n }\n if (name === \"keys\") result = await sortedKeys(input, budget);\n else {\n result = [];\n for (const key of objectKeyIterator(input)) {\n await budget.tick();\n budget.collection(result.length + 1);\n result.push(key);\n }\n }\n } else throw new JqError(\"keys requires an object or array\");\n yield result; return;\n }\n if (name === \"map\" || name === \"map_values\") {\n const result: Json = name === \"map_values\" && isObject(input) ? object() : [];\n let bytes = 2;\n for await (const [key, value] of entries(input, budget)) for await (const mapped of this.run(args[0]!, value)) {\n bytes += budget.value(mapped) + 1 + (Array.isArray(result) ? 0 : Buffer.byteLength(JSON.stringify(String(key))) + 1);\n if (bytes - 1 > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n if (Array.isArray(result)) { budget.collection(result.length + 1); result.push(mapped); }\n else put(result, String(key), mapped);\n if (name === \"map_values\") break;\n }\n budget.value(result); yield result; return;\n }\n if (name === \"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 await budget.tick();\n if (!first && separator !== null) {\n if (typeof separator !== \"string\") await binary(\"+\", result, separator, budget);\n if (typeof separator !== \"string\") throw new JqError(\"join separator must be a string or null when used\");\n append(separator, separatorBytes);\n }\n first = false;\n if (isObject(item) || Array.isArray(item)) await binary(\"+\", result, item, budget);\n const text = item === null ? \"\" : typeof item === \"string\" ? item : await stringify(item, budget);\n append(text, budget.value(text));\n }\n budget.value(result); yield result;\n }\n return;\n }\n if (name === \"first\" || name === \"last\") {\n if (!args.length) {\n if (!Array.isArray(input) && input !== null) throw new JqError(`${name} requires an array`);\n yield input === null ? null : input[name === \"first\" ? 0 : input.length - 1] ?? null; return;\n }\n let last: Json | undefined;\n for await (const value of this.run(args[0]!, input)) { if (name === \"first\") { yield value; return; } last = value; }\n if (name === \"last\") yield last ?? null; return;\n }\n if (name === \"limit\") {\n for await (const argument of this.run(args[0]!, input)) {\n if (!isNumber(argument) || !Number.isSafeInteger(numberValue(argument)) || numberValue(argument) < 0) throw new JqError(\"limit requires a nonnegative integer\");\n const count = numberValue(argument);\n if (count === 0) continue;\n let emitted = 0;\n for await (const value of this.run(args[1]!, input)) { yield value; if (++emitted >= count) break; }\n }\n return;\n }\n if (name === \"range\") {\n for await (const start of args.length === 1 ? [0] : this.run(args[0]!, input))\n for await (const end of this.run(args[args.length === 1 ? 0 : 1]!, input))\n for await (const increment of args[2] ? this.run(args[2], input) : [1]) {\n if (!isNumber(start) || !isNumber(end) || !isNumber(increment)) throw new JqError(\"range requires numbers\");\n const step = numberValue(increment);\n const stop = numberValue(end);\n if (step === 0) continue;\n for (let value: Numeric = start; step > 0 ? numberValue(value) < stop : numberValue(value) > stop;) {\n await budget.tick(); yield value;\n const next = numberValue(value) + step;\n if (!Number.isFinite(next)) throw new JqError(\"nonfinite range increment\");\n if (next === numberValue(value)) throw new JqError(\"range increment makes no progress\"); value = next;\n }\n }\n return;\n }\n if (name === \"tostring\" || name === \"tojson\") {\n if (typeof input === \"string\" && name === \"tostring\") { await measureValue(input, budget); yield input; }\n else yield await stringify(input, budget, false, budget.limits.maxValueBytes, \"maxValueBytes\", true);\n return;\n }\n if (name === \"tonumber\" || name === \"fromjson\") {\n if (name === \"tonumber\" && isNumber(input)) { yield input; return; }\n if (typeof input !== \"string\") throw new JqError(name === \"fromjson\" ? `${describe(input, budget)} only strings can be parsed` : `${describe(input, budget)} cannot be parsed as a number`);\n let result: Json;\n try { result = parseJson(input, budget); }\n catch (error) {\n if (!(error instanceof JqParseError)) throw error;\n throw new JqError(`${error.diagnostic()} (while parsing '${input.split(\"\\0\", 1)[0]}')`);\n }\n if (name === \"tonumber\" && !isNumber(result)) throw new JqError(`${describe(input, budget)} cannot be parsed as a number`);\n yield result; return;\n }\n if (name === \"to_entries\") {\n if (Array.isArray(input)) await budget.tick(input.length);\n const result: Json[] = [];\n let bytes = 2;\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n for await (const [key, value] of entries(input, budget)) {\n budget.collection(result.length + 1);\n budget.collection(2);\n const overhead = 17 + (result.length ? 1 : 0);\n const keyBytes = await measureValue(key, budget, 2, budget.limits.maxValueBytes - bytes - overhead);\n const valueBytes = await measureValue(value, budget, 2, budget.limits.maxValueBytes - bytes - overhead - keyBytes);\n await budget.tick(4);\n bytes += overhead + keyBytes + valueBytes;\n const entry = object();\n put(entry, \"key\", key); put(entry, \"value\", value);\n result.push(entry);\n }\n yield result; return;\n }\n if (name === \"from_entries\" || name === \"with_entries\") {\n let values = input;\n if (name === \"with_entries\") {\n values = [];\n let bytes = 2;\n for await (const [key, value] of entries(input, budget)) for await (const mapped of this.run(args[0]!, copyObject({ key, value }))) {\n budget.collection(values.length + 1); bytes += budget.value(mapped) + (values.length ? 1 : 0);\n if (bytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n values.push(mapped);\n }\n }\n const result = object();\n for await (const [, entry] of entries(values, budget)) {\n await budget.tick();\n if (!isObject(entry)) throw new JqError(`Cannot index ${type(entry)} with string \"key\"`);\n const key = [\"key\", \"Key\", \"name\", \"Name\"].find(candidate => Object.hasOwn(entry, candidate) && truth(entry[candidate]!));\n const value = [\"value\", \"Value\"].find(candidate => Object.hasOwn(entry, candidate));\n if (key === undefined || typeof entry[key] !== \"string\") throw new JqError(\"from_entries requires string keys\");\n put(result, entry[key] as string, value === undefined ? null : entry[value]!);\n }\n budget.value(result); yield result; return;\n }\n if (name === \"any\" || name === \"all\") {\n const generator: Ast = args.length === 2 ? args[0]! : { kind: \"iterate\", base: { kind: \"identity\" } };\n const condition: Ast = args[args.length === 2 ? 1 : 0] ?? { kind: \"identity\" };\n for await (const item of this.run(generator, input)) {\n for await (const value of this.run(condition, item)) {\n await budget.tick();\n if (truth(value) === (name === \"any\")) { yield name === \"any\"; return; }\n }\n }\n yield name === \"all\"; return;\n }\n if (!Array.isArray(input)) {\n if (name === \"unique\" && !isObject(input)) throw new JqError(`Cannot iterate over ${describe(input, budget)}`);\n if (name === \"sort\") throw new JqError(`${describe(input, budget)} cannot be sorted, as it is not an array`);\n throw new JqError(`${name} requires an array`);\n }\n if (name === \"reverse\") {\n await budget.tick(input.length);\n await measureValue(input, budget);\n const result: Json[] = [];\n for (let index = input.length - 1; index >= 0; index--) { await budget.tick(0); result.push(input[index]!); }\n yield result; return;\n }\n if (name === \"add\") {\n let result: Json = null;\n for (const item of input) { await budget.tick(); result = await binary(\"+\", result, item, budget); budget.value(result); }\n yield result; return;\n }\n const keyed: { key: Json; value: Json }[] = [];\n let keyBytes = 0;\n for (const value of input) {\n await budget.tick(); const key = args[0] ? await this.collect(args[0], value) : value;\n keyBytes += budget.value(key);\n if (keyBytes > budget.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n keyed.push({ value, key });\n }\n await stableSort(keyed, budget, (left, right) => compare(left.key, right.key, budget));\n if (name === \"min\" || name === \"min_by\" || name === \"max\" || name === \"max_by\") { yield keyed[name.startsWith(\"min\") ? 0 : keyed.length - 1]?.value ?? null; return; }\n if (name === \"sort\" || name === \"sort_by\") { yield keyed.map(item => item.value); return; }\n if (name === \"unique\" || name === \"unique_by\") { yield keyed.filter((item, index) => index === 0 || !equal(item.key, keyed[index - 1]!.key, budget)).map(item => item.value); return; }\n if (name === \"group_by\") {\n const groups: Json[][] = [];\n let previous: Json | undefined;\n for (const item of keyed) {\n if (previous === undefined || !equal(previous, item.key, budget)) groups.push([]);\n groups[groups.length - 1]!.push(item.value); previous = item.key;\n }\n budget.value(groups); yield groups; return;\n }\n throw new JqError(`unsupported function ${name}`);\n }\n}\n", "import { 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 await budget.tick(text.length);\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 = Buffer.from(text).toString(\"base64\"); 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 = Buffer.from(input, \"base64\").toString(); break;\n }\n case \"uri\": {\n result = \"\";\n for (const byte of Buffer.from(text)) {\n await budget.tick();\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>> = { \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", \"'\": \"&apos;\", '\"': \"&quot;\" };\n result = \"\";\n for (const character of text) { await budget.tick(); 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 await budget.tick();\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) { await budget.tick(); 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 { Pattern } from \"../text-programs/regex.js\";\nimport { ProgramError } from \"../text-programs/shared.js\";\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 await budget.tick();\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 = Buffer.byteLength(prefix) + Buffer.byteLength(fragment) + Buffer.byteLength(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 (Buffer.byteLength(prefix) + Buffer.byteLength(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 = Buffer.byteLength(input) + 1;\n for (let index = 0; index < boundaries; index++) { await budget.tick(); 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 \"./shared.js\";\nimport { ReplacementBuffer } from \"./replacement-buffer.js\";\n\ntype Node = { type: \"empty\" | \"begin\" | \"end\" }\n | { type: \"backreference\"; index: number }\n | { type: \"assertion\"; node: Node; positive: boolean; behind: boolean }\n | { type: \"character\"; 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\"; accepts: (character: string) => boolean }\n | { kind: \"backreference\"; index: number; ignoreCase: boolean }\n | { kind: \"assertion\"; first: number; next: number; positive: boolean; behind: boolean }\n | { kind: \"begin\" | \"end\" | \"match\" }\n | { kind: \"save\"; slot: number }\n | { kind: \"jump\"; target: number }\n | { kind: \"split\"; first: number; second: number };\n\n// Host-owned bounds cover both the parsed tree and expanded instruction storage.\nconst maxPatternInstructions = 16384;\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, maxPatternInstructions + 1);\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 for (let offset = 0; offset < source.length; offset++) {\n const character = source[offset]!;\n if (character === \"\\\\\" && offset + 1 < source.length) {\n const next = source[++offset]!;\n result += !bracket && \"()|+?{}\".includes(next) ? next : `\\\\${next}`;\n } else {\n if (character === \"[\") bracket = true;\n if (character === \"]\") bracket = false;\n result += !bracket && \"()|+?{}\".includes(character) ? `\\\\${character}` : character;\n }\n }\n return result;\n}\n\nexport interface Match { readonly start: number; readonly end: number; readonly groups: readonly (string | undefined)[] }\n\nclass NfaStorage {\n private used = 0;\n constructor(private readonly budget: Pick<Budget, \"step\" | \"checkpoint\" | \"maxBufferBytes\">) {}\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 parsed: { root: Node; counts: Map<Node, number> } | undefined;\n private readonly anchored: boolean;\n private linear = false;\n private backreferences = false;\n\n constructor(source: string, extended = true, private readonly ignoreCase = false, private readonly dialect: \"sed\" | \"awk\" | \"jq\" = \"sed\", private readonly modifiers = \"\") {\n const prefix = dialect === \"jq\" ? \"jq \" : \"\";\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 => ({ type: \"character\", accepts: candidate => ignoreCase ? candidate.toLowerCase() === character.toLowerCase() : candidate === character });\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 start = source[offset++] === \"\\\\\" ? escaped() : source[offset - 1]!;\n if (source[offset] === \"-\" && source[offset + 1] !== \"]\" && source[offset + 1] !== undefined) {\n offset++;\n const end = source[offset++] === \"\\\\\" ? escaped() : source[offset - 1]!;\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 (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 (dialect === \"jq\" && 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 (counts.get(root)! + 1 > maxPatternInstructions) throw new ProgramError(`${prefix}regular expression program limit exceeded`);\n this.parsed = { root, counts };\n }\n\n async prepare(budget: Pick<Budget, \"step\" | \"checkpoint\">): Promise<void> {\n if (!this.parsed) return;\n const { root, counts } = this.parsed;\n budget.step(counts.get(root)! + 1);\n await 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\", 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 === \"sequence\") { for (const child of node.nodes) yield* compile(child); return; }\n if (node.type === \"group\") { emit({ kind: \"save\", slot: node.index * 2 }); yield* compile(node.node); emit({ kind: \"save\", slot: node.index * 2 + 1 }); return; }\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.checkpoint(); budget.step(0); }\n }\n emit({ kind: \"match\" });\n await budget.checkpoint();\n budget.step(0);\n this.linear = code.every(instruction => instruction.kind === \"character\" || instruction.kind === \"begin\" || instruction.kind === \"end\" || instruction.kind === \"match\");\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: Pick<Budget, \"step\" | \"checkpoint\" | \"maxBufferBytes\">, 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.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]; 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 === \"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 async find(text: string, budget: Pick<Budget, \"step\" | \"checkpoint\" | \"maxBufferBytes\">, from = 0): Promise<Match | undefined> {\n if (!this.code.length) await this.prepare(budget);\n if (this.dialect === \"jq\") return (await this.findJq(text, budget, from))?.match;\n await budget.checkpoint();\n let units = 0;\n const work = (count = 1): Promise<void> | undefined => {\n budget.step(count);\n units += count;\n if (units < 64) return undefined;\n units %= 64;\n return 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.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): 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 ? captures : [...captures];\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);\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.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.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.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\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 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.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", "import { PublicDiagnostic, publicDiagnosticMessage } from \"../../diagnostics.js\";\nimport { writeDiagnostic } from \"../../escaping.js\";\nimport { monotonicNow, yieldTurn } from \"../../contracts/yield.js\";\nimport { FsError, readBytes, writeBytes, type ByteSource, type CommandContext, type CommandDefinition } from \"../../contracts/index.js\";\nimport { inputRequirements } from \"../portable-requirements.js\";\nimport { requiredFileInput } from \"../search/requirements.js\";\n\nexport interface TextProgramOptions {\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 readonly maxBufferBytes: number;\n private remaining: number;\n private checkpoints = 0;\n private lastYield = monotonicNow();\n constructor(readonly context: CommandContext, readonly options: TextProgramOptions) {\n this.remaining = options.maxSteps ?? Infinity;\n this.maxBufferBytes = options.maxBufferBytes ?? Infinity;\n for (const value of Object.entries(options).filter(([key]) => key.startsWith(\"max\")).map(([, value]) => value)) {\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 }\n step(count = 1): void {\n this.context.signal.throwIfAborted();\n this.remaining -= count;\n if (this.remaining < 0) throw new ProgramError(\"execution step limit exceeded\");\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 this.context.signal.throwIfAborted();\n if ((++this.checkpoints & 255) === 0 || monotonicNow() - this.lastYield >= 25) {\n await yieldTurn(this.context.signal);\n this.lastYield = monotonicNow();\n }\n this.context.signal.throwIfAborted();\n }\n}\n\nexport function byteString(text: string): string { return Buffer.from(text, \"utf8\").toString(\"latin1\"); }\nexport function bytes(text: string): Uint8Array { return Buffer.from(text, \"latin1\"); }\n\nexport function virtualPath(context: CommandContext, path: string): string {\n if (!path) throw new FsError(\"ENOENT\", { path });\n if (path.includes(\"\\0\")) throw new FsError(\"EINVAL\", { path });\n return path.startsWith(\"/\") ? path : `${context.cwd.replace(/\\/$/u, \"\")}/${path}`;\n}\n\nexport async function write(context: CommandContext, text: string): Promise<void> {\n context.signal.throwIfAborted();\n await writeBytes(context.stdout, bytes(text), context.signal);\n}\n\nexport async function* input(context: CommandContext, file = \"-\"): ByteSource {\n context.signal.throwIfAborted();\n if (file === \"-\") yield* readBytes(context.stdin, context.signal);\n else {\n yield* requiredFileInput(context, inputRequirements, \"file\", file, Infinity);\n }\n}\n\nexport async function readProgram(context: CommandContext, file: string): Promise<string> {\n const contents = await context.fs.readFile(virtualPath(context, file), { signal: context.signal });\n return Buffer.from(contents).toString(\"latin1\");\n}\n\nexport interface RecordLine { readonly text: string; readonly terminated: boolean; readonly file: string; readonly fileIndex: number }\n\nexport async function* lineRecords(context: CommandContext, files: readonly string[], budget: Budget): AsyncGenerator<RecordLine> {\n const names = files.length ? files : [\"-\"];\n for (let fileIndex = 0; fileIndex < names.length; fileIndex++) {\n const file = names[fileIndex]!;\n let pending = \"\";\n for await (const chunk of input(context, file)) {\n budget.step();\n const text = Buffer.from(chunk).toString(\"latin1\");\n let start = 0;\n let end: number;\n while ((end = text.indexOf(\"\\n\", start)) >= 0) {\n yield { text: budget.check(pending + text.slice(start, end)), terminated: true, file, fileIndex };\n pending = \"\"; start = end + 1;\n }\n pending = budget.check(pending + text.slice(start));\n }\n if (pending) yield { text: pending, terminated: false, file, fileIndex };\n }\n}\n\nexport function command(name: string, run: (context: CommandContext) => Promise<number>): CommandDefinition {\n return {\n name,\n async execute(context) {\n context.signal.throwIfAborted();\n try { return { exitCode: await run(context) }; }\n catch (error) {\n context.signal.throwIfAborted();\n await writeDiagnostic(context.stderr, `${name}: ${publicDiagnosticMessage(error, context.onInternalError)}\\n`, context.signal);\n return { exitCode: error instanceof ProgramError ? 2 : 1 };\n }\n },\n };\n}\n", "import type { CommandContext } from \"../../contracts/command.js\";\nimport { FsError } from \"../../contracts/errors.js\";\nimport { readBytes, type ByteSource } from \"../../contracts/io.js\";\nimport { assertCommandRequirements, type CommandFileSystemRequirement } from \"../../contracts/command-requirements.js\";\nimport { pathOf } from \"../internal.js\";\nimport { inputRequirements } from \"../portable-requirements.js\";\n\nexport const grepRequirements: readonly CommandFileSystemRequirement[] = [\n ...inputRequirements,\n { id: \"metadata\", description: \"Inspect recursive grep operands\", capabilities: [\"stat\"] },\n { id: \"directory\", description: \"Walk grep directories\", capabilities: [\"readdir\", \"realpath\"] },\n { id: \"pattern-file\", description: \"Read grep pattern files (-f)\", capabilities: [], anyOf: [[\"streamingRead\"], [\"read\"]] },\n];\n\nexport const searchRequirements: readonly CommandFileSystemRequirement[] = [\n ...inputRequirements,\n { id: \"metadata\", description: \"Inspect named search operands\", capabilities: [\"stat\"] },\n { id: \"pattern-file\", description: \"Read rg pattern files (-f)\", capabilities: [\"read\"] },\n { id: \"directory\", description: \"Walk directories, including --files\", capabilities: [\"stat\", \"readdir\", \"realpath\"] },\n { id: \"canonical\", description: \"Resolve followed directory links for loop detection\", capabilities: [\"realpath\"] },\n { id: \"ignore-file\", description: \"Read directory ignore files unless disabled\", capabilities: [\"read\"] },\n];\n\nexport const sedRequirements: readonly CommandFileSystemRequirement[] = [\n ...inputRequirements,\n { id: \"script-file\", description: \"Read sed program files (-f)\", capabilities: [\"read\"] },\n { id: \"script-read\", description: \"Read files referenced by sed r instructions\", capabilities: [], anyOf: [[\"streamingRead\"], [\"read\"]] },\n { id: \"script-output\", description: \"Truncate and append files referenced by sed w instructions\", capabilities: [\"write\", \"append\"], mutates: true },\n { id: \"in-place\", description: \"Inspect and conditionally rewrite retained files (-i)\", capabilities: [\"stat\", \"write\", \"retainedRead\", \"atomicFileMutation\"], mutates: true },\n { id: \"backup\", description: \"Conditionally write retained original bytes to backups (-iSUFFIX)\", capabilities: [\"write\", \"atomicFileMutation\"], mutates: true },\n];\n\nexport async function assertPathRequirements(\n context: CommandContext, requirements: readonly CommandFileSystemRequirement[], modes: readonly string[], paths: readonly string[],\n): Promise<void> {\n if (!paths.length) return;\n assertCommandRequirements(context, requirements, modes);\n if (!context.fs.capabilitiesFor) return;\n for (const path of new Set(paths)) {\n try {\n const capabilities = await context.fs.capabilitiesFor(pathOf(context, path), { signal: context.signal });\n assertCommandRequirements(context, requirements, modes, capabilities);\n } catch (error) {\n context.signal.throwIfAborted();\n if (![\"ENOENT\", \"ENOTDIR\"].includes((error as { code?: string }).code ?? \"\")) throw error;\n }\n }\n}\n\nexport async function* requiredFileInput(\n context: CommandContext, requirements: readonly CommandFileSystemRequirement[], mode: string, file: string, maxBytes: number,\n): ByteSource {\n assertCommandRequirements(context, requirements, [mode]);\n const path = pathOf(context, file);\n let capabilities = context.fs.capabilities;\n if (context.fs.capabilitiesFor) {\n capabilities = await context.fs.capabilitiesFor(path, { signal: context.signal });\n assertCommandRequirements(context, requirements, [mode], capabilities);\n }\n if (context.fs.readStream && capabilities.streamingRead !== false && context.fs.capabilities.streamingRead !== false) {\n let emitted = false;\n let reading = true;\n try {\n for await (const chunk of readBytes(context.fs.readStream(path, { signal: context.signal }), context.signal)) {\n reading = false;\n if (chunk.byteLength) emitted = true;\n yield chunk;\n reading = true;\n }\n return;\n } catch (error) {\n context.signal.throwIfAborted();\n if (!reading || emitted || !(error instanceof FsError) || error.code !== \"ENOTSUP\") throw error;\n }\n }\n if (capabilities.read === false || context.fs.capabilities.read === false) throw new FsError(\"ENOTSUP\", { syscall: \"readFile\", path });\n yield await context.fs.readFile(path, { signal: context.signal, ...(Number.isFinite(maxBytes) ? { maxBytes } : {}) });\n}\n", "import { Budget, ProgramError } from \"./shared.js\";\n\nexport class ReplacementBuffer {\n #segments: Buffer[] = [];\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 = Buffer.allocUnsafeSlow(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 = this.#segments[0]!.toString(\"latin1\", 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 result = Buffer.allocUnsafeSlow(this.#size);\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 result.set(segment.subarray(0, length), offset);\n offset += length;\n }\n this.clear();\n await this.budget.checkpoint();\n this.budget.step(0);\n return result.toString(\"latin1\");\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 { 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 await budget.tick(input.length + sought.length);\n // jq's string search returns UTF-8 byte offsets, including overlapping matches.\n source = Buffer.from(input);\n pattern = Buffer.from(sought);\n } else if (Array.isArray(input)) {\n source = input;\n pattern = Array.isArray(sought) ? sought : [sought];\n } else if (isObject(sought) && (input === null || 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))))\n || (end !== null && (!isNumber(end) || !Number.isFinite(numberValue(end))))) {\n throw new JqError(\"Array/string slice indices must be integers\");\n }\n return sliceValue(input, start, end, budget);\n } else return indexValue(input, sought);\n\n const result: number[] = [];\n if (!pattern.length || pattern.length > source.length) return result;\n await budget.tick(pattern.length);\n const prefixes = new Uint32Array(pattern.length);\n let matched = 0;\n for (let index = 1; index < pattern.length; index++) {\n await budget.tick();\n while (matched > 0 && !equal(pattern[index]!, pattern[matched]!, budget)) {\n await budget.tick();\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 await budget.tick();\n while (matched > 0 && !equal(source[index]!, pattern[matched]!, budget)) {\n await budget.tick();\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 \"../text-programs/regex.js\";\nimport { ProgramError } from \"../text-programs/shared.js\";\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 await budget.tick();\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\") { await budget.tick(); 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 await budget.tick();\n if (!\"gimnpsx\".includes(flag)) throw new JqError(`${flags} is not a valid modifier string`);\n }\n await budget.tick(input.length + pattern.length);\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 await budget.tick();\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 await budget.tick();\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 await scope.budget.tick();\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 await budget.tick();\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 await budget.tick();\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 await budget.tick();\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 await budget.tick();\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 { Pattern } from \"../text-programs/regex.js\";\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 await budget.tick();\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 await budget.tick();\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 ? Buffer.byteLength(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 await budget.tick();\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 { 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 (Buffer.byteLength(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 (Buffer.byteLength(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(Buffer.byteLength(prefix.slice(start)))}`;\n };\n const syntaxError = (token: Token, expectEnd = false): never => {\n const name = token.kind === \"end\" ? \"end of file\" : token.kind === \"name\" ? \"IDENT\" : token.kind === \"number\" || token.kind === \"string\" ? \"LITERAL\" : `'${token.text}'`;\n const location = token.kind === \"end\" ? tokens[Math.max(0, position - 1)]! : token;\n throw new JqError(`${diagnostic(location, `syntax error, unexpected ${name}${expectEnd ? \", expecting end of file\" : \"\"} (Unix shell quoting issues?)`)}\\njq: 1 compile error`, 3);\n };\n const expect = (text: string): void => { if (!accept(text)) fail(`expected '${text}'`); };\n const literal = (value: Json): Ast => ({ kind: \"literal\", value });\n const 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 += Buffer.byteLength(message) + 5;\n if (errorBytes > limits.maxOutputBytes) throw new JqLimitError(\"maxOutputBytes\");\n errors.push(message);\n continue;\n }\n const children: Ast[] = [];\n if (node.kind === \"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
- "names": ["bytes", "bytes", "input", "input", "bytes", "text", "bytes", "offset", "input", "Budget", "value", "offset", "bytes", "input", "index", "bytes", "input", "bytes", "input", "input", "input", "input", "result", "input", "input", "bytes", "remove", "result", "increment", "keyBytes", "source"]
7
- }