@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
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-ITX6SBN6.js";
11
11
  import {
12
12
  yieldTurn
13
- } from "./chunk-YOK5UHA7.js";
13
+ } from "./chunk-XKXFX3RH.js";
14
14
  import {
15
15
  contracts_exports
16
16
  } from "./chunk-J2E3MV3E.js";
@@ -2688,4 +2688,4 @@ export {
2688
2688
  createIconvCommands,
2689
2689
  iconvCommands
2690
2690
  };
2691
- //# sourceMappingURL=chunk-DPHRNHPT.js.map
2691
+ //# sourceMappingURL=chunk-H6KJ4L22.js.map
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  UsageError,
3
3
  pathOf
4
- } from "./chunk-VGJIDLZM.js";
4
+ } from "./chunk-KS5VSJYM.js";
5
5
  import {
6
6
  writeDiagnostic
7
- } from "./chunk-WTZZX4LV.js";
7
+ } from "./chunk-A4MB2KXV.js";
8
8
  import {
9
9
  PublicDiagnostic,
10
10
  publicDiagnosticMessage
11
11
  } from "./chunk-5R3XS7BT.js";
12
12
  import {
13
13
  yieldTurn
14
- } from "./chunk-B6YFFKYG.js";
14
+ } from "./chunk-X4I3RHTC.js";
15
15
  import {
16
16
  dirname,
17
17
  posixPath,
@@ -1338,4 +1338,4 @@ export {
1338
1338
  safeJsNodeCommands,
1339
1339
  createSafeJsNodeCommand
1340
1340
  };
1341
- //# sourceMappingURL=chunk-FLX2BZBF.js.map
1341
+ //# sourceMappingURL=chunk-HGBYIDAK.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  writeDiagnostic
3
- } from "./chunk-WTZZX4LV.js";
3
+ } from "./chunk-A4MB2KXV.js";
4
4
  import {
5
5
  PublicDiagnostic,
6
6
  publicDiagnosticMessage
@@ -158,12 +158,18 @@ var RecordBuffer = class {
158
158
  }
159
159
  }
160
160
  finish(admit, bytes, start = 0, end = bytes?.length ?? 0) {
161
- this.#admit(end - start);
162
- const size = this.#size + end - start;
161
+ const tailLength = end - start;
162
+ this.#admit(tailLength);
163
+ const size = this.#size + tailLength;
163
164
  admit?.(size);
164
165
  if (size > this.finalizationCapacity - this.#allocated) {
165
166
  throw new FsError("EFBIG", { message: "line finalization buffer limit exceeded" });
166
167
  }
168
+ if (this.#size === 0) {
169
+ const result2 = new Uint8Array(tailLength);
170
+ if (bytes && tailLength > 0) result2.set(bytes.subarray(start, end));
171
+ return result2;
172
+ }
167
173
  const result = new Uint8Array(size);
168
174
  let offset = 0;
169
175
  for (const segment of this.#segments) {
@@ -171,12 +177,12 @@ var RecordBuffer = class {
171
177
  result.set(segment.subarray(0, length), offset);
172
178
  offset += length;
173
179
  }
174
- if (bytes && end > start) result.set(bytes.subarray(start, end), offset);
180
+ if (bytes && tailLength > 0) result.set(bytes.subarray(start, end), offset);
175
181
  this.clear();
176
182
  return result;
177
183
  }
178
184
  clear() {
179
- this.#segments = [];
185
+ if (this.#segments.length) this.#segments.length = 0;
180
186
  this.#size = 0;
181
187
  this.#allocated = 0;
182
188
  }
@@ -468,8 +474,9 @@ async function* lines(source, separator = 10, admit) {
468
474
  try {
469
475
  for await (const chunk of source) {
470
476
  let start = 0;
471
- for (let offset = 0; offset < chunk.length; offset++) {
472
- if (chunk[offset] !== separator) continue;
477
+ while (start < chunk.length) {
478
+ const offset = chunk.indexOf(separator, start);
479
+ if (offset < 0) break;
473
480
  yield { bytes: pending.finish(admit, chunk, start, offset), terminated: true };
474
481
  start = offset + 1;
475
482
  }
@@ -652,4 +659,4 @@ export {
652
659
  replaceArgument,
653
660
  escapeBytes
654
661
  };
655
- //# sourceMappingURL=chunk-VGJIDLZM.js.map
662
+ //# sourceMappingURL=chunk-KS5VSJYM.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../safe-bash-contracts/src/command-requirements.ts", "../../src/commands/internal.ts", "../../src/commands/portable-requirements.ts", "../../src/commands/record-buffer.ts", "../../src/commands/gnu-information.ts"],
4
+ "sourcesContent": ["import type { CommandContext, CommandDefinition } from \"./command.js\";\nimport type { FileSystemCapabilities } from \"./filesystem.js\";\nimport { FsError } from \"./errors.js\";\n\nexport interface CommandFileSystemRequirement {\n readonly id: string;\n readonly description: string;\n readonly capabilities: readonly string[];\n readonly anyOf?: readonly (readonly string[])[];\n readonly mutates?: boolean;\n}\n\nexport interface CommandModeSupport extends CommandFileSystemRequirement {\n readonly status: \"supported\" | \"unsupported\" | \"unknown\";\n readonly missing: readonly string[];\n readonly unknown: readonly string[];\n}\n\nexport interface CommandSupport {\n readonly status: \"supported\" | \"partial\" | \"unsupported\";\n readonly declared: boolean;\n readonly modes: readonly CommandModeSupport[];\n}\n\nfunction evaluateMode(requirement: CommandFileSystemRequirement, capabilities: FileSystemCapabilities): CommandModeSupport {\n const missing = requirement.capabilities.filter(name => capabilities[name] === false);\n const unknown = requirement.capabilities.filter(name => capabilities[name] === undefined);\n if (requirement.mutates && capabilities.readOnly === true) missing.push(\"readOnly\");\n const alternatives = requirement.anyOf;\n if (alternatives && !alternatives.some(group => group.every(name => capabilities[name] === true))) {\n if (alternatives.every(group => group.some(name => capabilities[name] === false))) {\n missing.push(...alternatives.flatMap(group => group.filter(name => capabilities[name] === false)));\n } else {\n unknown.push(...alternatives.filter(group => !group.some(name => capabilities[name] === false))\n .flatMap(group => group.filter(name => capabilities[name] === undefined)));\n }\n }\n return {\n ...requirement,\n status: missing.length ? \"unsupported\" : unknown.length ? \"unknown\" : \"supported\",\n missing: [...new Set(missing)], unknown: [...new Set(unknown)],\n };\n}\n\nexport function evaluateCommandSupport(\n command: Pick<CommandDefinition, \"filesystemRequirements\"> | CommandDefinition,\n capabilities: FileSystemCapabilities,\n): CommandSupport {\n const modes = (command.filesystemRequirements ?? []).map(requirement => evaluateMode(requirement, capabilities));\n return {\n declared: command.filesystemRequirements !== undefined,\n status: command.filesystemRequirements !== undefined && modes.every(mode => mode.status === \"supported\") ? \"supported\"\n : modes.length && modes.every(mode => mode.status === \"unsupported\") ? \"unsupported\" : \"partial\",\n modes,\n };\n}\n\nfunction isModeUnsupported(requirement: CommandFileSystemRequirement, capabilities: FileSystemCapabilities): boolean {\n if (requirement.mutates && capabilities.readOnly === true) return true;\n for (let i = 0; i < requirement.capabilities.length; i++) {\n if (capabilities[requirement.capabilities[i]!] === false) return true;\n }\n const alternatives = requirement.anyOf;\n if (alternatives) {\n let anyGroupPossible = false;\n for (let g = 0; g < alternatives.length; g++) {\n const group = alternatives[g]!;\n let groupFailed = false;\n for (let i = 0; i < group.length; i++) {\n if (capabilities[group[i]!] === false) {\n groupFailed = true;\n break;\n }\n }\n if (!groupFailed) {\n anyGroupPossible = true;\n break;\n }\n }\n if (!anyGroupPossible) return true;\n }\n return false;\n}\n\nexport function assertCommandRequirements(\n context: Pick<CommandContext, \"fs\" | \"command\" | \"signal\">,\n requirements: readonly CommandFileSystemRequirement[],\n selected: readonly string[],\n capabilities: FileSystemCapabilities = context.fs.capabilities,\n): void {\n context.signal.throwIfAborted();\n for (let i = 0; i < selected.length; i++) {\n const id = selected[i]!;\n let requirement: CommandFileSystemRequirement | undefined;\n for (let r = 0; r < requirements.length; r++) {\n if (requirements[r]!.id === id) {\n requirement = requirements[r]!;\n break;\n }\n }\n if (!requirement) throw new TypeError(`Unknown filesystem requirement mode: ${id}`);\n if (isModeUnsupported(requirement, capabilities)) {\n const support = evaluateMode(requirement, capabilities);\n throw new FsError(support.missing.includes(\"readOnly\") ? \"EROFS\" : \"ENOTSUP\", {\n syscall: context.command,\n message: `${requirement.description} requires unavailable filesystem capabilities: ${support.missing.join(\", \")}`,\n });\n }\n }\n}\n", "import { PublicDiagnostic, publicDiagnosticMessage } from \"../diagnostics.js\";\nimport { assertCommandRequirements } from \"../contracts/command-requirements.js\";\nimport { writeDiagnostic } from \"../escaping.js\";\nimport { inputRequirements } from \"./portable-requirements.js\";\nimport { RecordBuffer } from \"./record-buffer.js\";\nimport { gnuInformation } from \"./gnu-information.js\";\nimport {\n FsError, isAbsolutePath, readBytes, toByteSource, validatePath, writeBytes,\n type ByteSource, type CommandContext, type CommandDefinition, type CommandHandler,\n} from \"../contracts/index.js\";\n\nexport const encoder = new TextEncoder();\nexport const decoder = new TextDecoder();\nexport const bufferLimit = 32 * 1024 * 1024;\n\nexport class UsageError extends PublicDiagnostic {}\n\nexport interface ParsedOptions {\n readonly flags: Set<string>;\n readonly values: Map<string, string[]>;\n readonly operands: string[];\n}\n\nexport function options(\n args: readonly string[], short: string, long: Readonly<Record<string, string | false>> = {},\n stopAtOperand = false, onOperand?: (index: number) => void,\n onValue?: (key: string, index: number, offset: number) => void,\n onOption?: (key: string, value: string | undefined) => void,\n): ParsedOptions {\n const flags = new Set<string>();\n const values = new Map<string, string[]>();\n const operands: string[] = [];\n const specifications = new Map<string, boolean>();\n for (let index = 0; index < short.length; index++) {\n const key = short[index]!;\n specifications.set(key, short[index + 1] === \":\");\n if (short[index + 1] === \":\") index++;\n }\n let ended = false;\n for (let index = 0; index < args.length; index++) {\n const argument = args[index]!;\n if (ended || argument === \"-\" || !argument.startsWith(\"-\")) {\n operands.push(argument);\n onOperand?.(index);\n if (stopAtOperand) ended = true;\n continue;\n }\n if (argument === \"--\") { ended = true; continue; }\n if (argument.startsWith(\"--\")) {\n const equals = argument.indexOf(\"=\");\n const name = argument.slice(2, equals < 0 ? undefined : equals);\n const alias = long[name];\n const longValue = typeof alias === \"string\" && alias.endsWith(\":\");\n const key = alias === false ? name : longValue ? alias.slice(0, -1) : alias;\n if (!key || (alias !== false && !longValue && !specifications.has(key))) throw new UsageError(`unrecognized option '${argument}'`);\n if (longValue || specifications.get(key)) {\n const value = equals >= 0 ? argument.slice(equals + 1) : args[++index];\n if (value === undefined) throw new UsageError(`option '--${name}' requires an argument`);\n onValue?.(key, index, equals >= 0 ? equals + 1 : 0);\n values.set(key, [...values.get(key) ?? [], value]);\n } else if (equals >= 0) throw new UsageError(`option '--${name}' does not take an argument`);\n flags.add(key);\n onOption?.(key, values.get(key)?.at(-1));\n continue;\n }\n for (let offset = 1; offset < argument.length; offset++) {\n const key = argument[offset]!;\n if (!specifications.has(key)) throw new UsageError(`invalid option -- '${key}'`);\n if (specifications.get(key)) {\n const value = argument.slice(offset + 1) || args[++index];\n if (value === undefined) throw new UsageError(`option requires an argument -- '${key}'`);\n onValue?.(key, index, offset + 1 < argument.length ? offset + 1 : 0);\n values.set(key, [...values.get(key) ?? [], value]);\n offset = argument.length;\n }\n flags.add(key);\n onOption?.(key, values.get(key)?.at(-1));\n }\n }\n return { flags, values, operands };\n}\n\nexport function value(parsed: ParsedOptions, key: string): string | undefined {\n return parsed.values.get(key)?.at(-1);\n}\n\nexport function integer(text: string, minimum = 0): number {\n if (!/^[+]?[0-9]+$/u.test(text)) throw new UsageError(`invalid number '${text}'`);\n const number = Number(text);\n if (!Number.isSafeInteger(number) || number < minimum) throw new UsageError(`invalid number '${text}'`);\n return number;\n}\n\nexport function requireOperands(operands: readonly string[], minimum = 1, maximum = Infinity): void {\n if (operands.length < minimum) throw new UsageError(\"missing operand\");\n if (operands.length > maximum) throw new UsageError(`extra operand '${operands[maximum]}'`);\n}\n\nexport function pathOf(context: Pick<CommandContext, \"cwd\">, path: string): string {\n if (!path) throw new FsError(\"ENOENT\", { path });\n validatePath(path);\n validatePath(context.cwd);\n if (!isAbsolutePath(context.cwd)) throw new FsError(\"EINVAL\", { path: context.cwd, message: \"cwd must be absolute\" });\n return isAbsolutePath(path) ? path : `${context.cwd.replace(/\\/$/u, \"\")}/${path}`;\n}\n\nexport function codeOf(error: unknown): string | undefined {\n return error instanceof Error && \"code\" in error ? String(error.code) : undefined;\n}\n\nexport async function output(context: CommandContext, text: string | Uint8Array): Promise<void> {\n context.signal.throwIfAborted();\n await writeBytes(context.stdout, typeof text === \"string\" ? encoder.encode(text) : text, context.signal);\n}\n\nexport async function diagnostic(context: CommandContext, error: unknown): Promise<void> {\n context.signal.throwIfAborted();\n await writeDiagnostic(context.stderr, `${context.command}: ${publicDiagnosticMessage(error, context.onInternalError)}\\n`, context.signal);\n}\n\nexport function define(name: string, handler: CommandHandler, failureCode = 1): CommandDefinition {\n return {\n name,\n async execute(context) {\n context.signal.throwIfAborted();\n try { return await gnuInformation(name, context) ?? await handler(context); }\n catch (error) {\n context.signal.throwIfAborted();\n await diagnostic(context, error);\n return { exitCode: error instanceof UsageError ? 2 : failureCode };\n }\n },\n };\n}\n\nexport async function eachOperand(\n context: CommandContext, operands: readonly string[], operation: (operand: string) => Promise<void>,\n): Promise<{ exitCode: number }> {\n let exitCode = 0;\n for (const operand of operands) {\n context.signal.throwIfAborted();\n try { await operation(operand); }\n catch (error) { await diagnostic(context, error); exitCode = 1; }\n }\n return { exitCode };\n}\n\nexport async function* input(context: CommandContext, name = \"-\"): ByteSource {\n context.signal.throwIfAborted();\n if (name === \"-\") {\n yield* readBytes(context.stdin, context.signal);\n } else {\n await assertInputRequirements(context, [name]);\n const path = pathOf(context, name);\n const capabilities = await context.fs.capabilitiesFor?.(path, { signal: context.signal }) ?? context.fs.capabilities;\n if (context.fs.readStream && 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) throw new FsError(\"ENOTSUP\", { syscall: \"readFile\", path });\n yield* readBytes({\n async *[Symbol.asyncIterator]() {\n const bytes = await context.fs.readFile(path, { signal: context.signal, maxBytes: bufferLimit });\n context.signal.throwIfAborted();\n if (bytes.byteLength > bufferLimit) throw new FsError(\"EFBIG\", { syscall: \"readFile\", path });\n yield bytes;\n },\n }, context.signal);\n }\n}\n\nexport async function assertInputRequirements(context: CommandContext, names: readonly string[]): Promise<void> {\n const files = names.filter(name => name !== \"-\");\n assertCommandRequirements(context, inputRequirements, [files.length ? \"file\" : \"stdin\"]);\n if (!context.fs.capabilitiesFor) return;\n for (const name of files) {\n try {\n const capabilities = await context.fs.capabilitiesFor(pathOf(context, name), { signal: context.signal });\n assertCommandRequirements(context, inputRequirements, [\"file\"], capabilities);\n } catch (error) {\n context.signal.throwIfAborted();\n if (codeOf(error) === \"ENOTSUP\" || codeOf(error) === \"EROFS\") throw error;\n }\n }\n}\n\nexport function concatenate(chunks: readonly Uint8Array[], size = chunks.reduce((sum, chunk) => sum + chunk.length, 0)): Uint8Array {\n const result = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) { result.set(chunk, offset); offset += chunk.length; }\n return result;\n}\n\nexport async function collect(source: ByteSource, signal: AbortSignal, limit = bufferLimit): Promise<Uint8Array> {\n const chunks: Uint8Array[] = [];\n let size = 0;\n for await (const chunk of source) {\n signal.throwIfAborted();\n size += chunk.length;\n if (size > limit) throw new FsError(\"EFBIG\", { message: `buffer limit exceeded (${limit} bytes)` });\n chunks.push(new Uint8Array(chunk));\n }\n return concatenate(chunks, size);\n}\n\nexport interface Line { readonly bytes: Uint8Array; readonly terminated: boolean }\n\nexport async function* lines(source: ByteSource, separator = 10, admit?: (size: number) => void): AsyncGenerator<Line> {\n const pending = new RecordBuffer(bufferLimit);\n try {\n for await (const chunk of source) {\n let start = 0;\n while (start < chunk.length) {\n const offset = chunk.indexOf(separator, start);\n if (offset < 0) break;\n yield { bytes: pending.finish(admit, chunk, start, offset), terminated: true };\n start = offset + 1;\n }\n pending.append(chunk, start);\n }\n if (pending.size) yield { bytes: pending.finish(admit), terminated: false };\n } finally { pending.clear(); }\n}\n\nexport function emptyInput(): ByteSource { return toByteSource(\"\"); }\n\nexport function replaceArgument(source: string | Uint8Array, pattern: string, replacement: string): string | Uint8Array {\n if (typeof source === \"string\") return source.split(pattern).join(replacement);\n const needle = encoder.encode(pattern);\n if (!needle.length) throw new UsageError(\"replacement string cannot be empty\");\n const substituted = encoder.encode(replacement);\n const chunks: Uint8Array[] = [];\n let start = 0;\n for (let offset = 0; offset <= source.length - needle.length;) {\n if (needle.every((byte, index) => source[offset + index] === byte)) {\n chunks.push(source.subarray(start, offset), substituted);\n offset += needle.length;\n start = offset;\n } else offset++;\n }\n chunks.push(source.subarray(start));\n return concatenate(chunks);\n}\n\nexport function escapeBytes(text: string | Uint8Array, zeroOctal = false, bareOctal = false,\n unicode?: { utf8: boolean; missingDigit: (escape: string) => void }): { bytes: Uint8Array; stop: boolean } {\n if (unicode && typeof text === \"string\") text = encoder.encode(text);\n if (typeof text === \"string\") {\n const chunks: Uint8Array[] = [];\n const control: Record<string, number> = { a: 7, b: 8, e: 27, E: 27, f: 12, n: 10, r: 13, t: 9, v: 11, \"\\\\\": 92 };\n for (let index = 0; index < text.length;) {\n if (text[index] !== \"\\\\\" || index + 1 === text.length) {\n const character = String.fromCodePoint(text.codePointAt(index)!);\n chunks.push(encoder.encode(character)); index += character.length; continue;\n }\n const next = text[index + 1]!;\n if (next === \"c\") return { bytes: concatenate(chunks), stop: true };\n if (control[next] !== undefined) { chunks.push(Uint8Array.of(control[next])); index += 2; continue; }\n const rest = text.slice(index + 1);\n const octal = zeroOctal ? (bareOctal ? /^(?:0([0-7]{0,3})|([1-7][0-7]{0,2}))/u : /^0([0-7]{0,3})/u).exec(rest) : /^([0-7]{1,3})/u.exec(rest);\n if (octal) { chunks.push(Uint8Array.of(parseInt(octal[1] || octal[2] || \"0\", 8) & 255)); index += 1 + octal[0].length; continue; }\n const hexadecimal = /^x([0-9a-fA-F]{1,2})/u.exec(rest);\n if (hexadecimal) { chunks.push(Uint8Array.of(parseInt(hexadecimal[1]!, 16))); index += 1 + hexadecimal[0].length; continue; }\n chunks.push(encoder.encode(`\\\\${next}`)); index += 2;\n }\n return { bytes: concatenate(chunks), stop: false };\n }\n const source = text;\n // C-locale fallback normalizes short escapes to four/eight uppercase digits.\n const bytes = new Uint8Array(source.length * (unicode && !unicode.utf8 ? 3 : 1));\n const control: Record<number, number> = { 97: 7, 98: 8, 101: 27, 69: 27, 102: 12, 110: 10, 114: 13, 116: 9, 118: 11, 92: 92 };\n let size = 0;\n for (let index = 0; index < source.length;) {\n if (source[index] !== 92 || index + 1 === source.length) { bytes[size++] = source[index++]!; continue; }\n const next = source[index + 1]!;\n if (next === 99) return { bytes: bytes.subarray(0, size), stop: true };\n if (control[next] !== undefined) { bytes[size++] = control[next]; index += 2; continue; }\n if (zeroOctal ? next === 48 || bareOctal && next >= 49 && next <= 55 : next >= 48 && next <= 55) {\n let offset = index + (zeroOctal && next === 48 ? 2 : 1);\n const end = Math.min(source.length, offset + 3);\n let value = 0;\n while (offset < end && source[offset]! >= 48 && source[offset]! <= 55) value = value * 8 + source[offset++]! - 48;\n bytes[size++] = value & 255;\n index = offset;\n continue;\n }\n if (unicode && (next === 117 || next === 85)) {\n const digits = next === 117 ? 4 : 8;\n let offset = index + 2;\n const end = Math.min(source.length, offset + digits);\n let value = 0;\n while (offset < end) {\n const digit = source[offset]!;\n const number = digit >= 48 && digit <= 57 ? digit - 48 : digit >= 65 && digit <= 70 ? digit - 55 : digit >= 97 && digit <= 102 ? digit - 87 : -1;\n if (number < 0) break;\n value = value * 16 + number;\n offset++;\n }\n if (offset === index + 2) unicode.missingDigit(String.fromCharCode(next));\n else {\n // Bash discards values outside its signed 32-bit wide-character range.\n if (value < 0x80000000) {\n if (!unicode.utf8 && value > 127) {\n const literal = encoder.encode(`\\\\${value <= 0xffff ? \"u\" : \"U\"}${value.toString(16).toUpperCase().padStart(value <= 0xffff ? 4 : 8, \"0\")}`);\n bytes.set(literal, size);\n size += literal.length;\n } else if (value < 128) bytes[size++] = value;\n else {\n // Match Bash's byte encoding, including surrogate and extended values.\n const length = value < 0x800 ? 2 : value < 0x10000 ? 3 : value < 0x200000 ? 4 : value < 0x4000000 ? 5 : 6;\n for (let position = length - 1; position > 0; position--) {\n bytes[size + position] = 0x80 | value & 0x3f;\n value = Math.floor(value / 64);\n }\n bytes[size] = (0xff << (8 - length) & 0xff) | value;\n size += length;\n }\n }\n index = offset;\n continue;\n }\n }\n if (next === 120) {\n let offset = index + 2;\n const end = Math.min(source.length, offset + 2);\n let value = 0;\n while (offset < end) {\n const digit = source[offset]!;\n const number = digit >= 48 && digit <= 57 ? digit - 48 : digit >= 65 && digit <= 70 ? digit - 55 : digit >= 97 && digit <= 102 ? digit - 87 : -1;\n if (number < 0) break;\n value = value * 16 + number;\n offset++;\n }\n if (offset > index + 2) { bytes[size++] = value; index = offset; continue; }\n unicode?.missingDigit(\"x\");\n }\n bytes[size++] = 92;\n bytes[size++] = next;\n index += 2;\n }\n return { bytes: bytes.subarray(0, size), stop: false };\n}\n", "import type { CommandFileSystemRequirement } from \"../contracts/command-requirements.js\";\n\nexport const inputRequirements: readonly CommandFileSystemRequirement[] = [\n { id: \"stdin\", description: \"Read standard input\", capabilities: [] },\n { id: \"file\", description: \"Read file operands\", capabilities: [], anyOf: [[\"streamingRead\"], [\"read\"]] },\n];\n\nexport const textOutputRequirements: readonly CommandFileSystemRequirement[] = [\n ...inputRequirements,\n { id: \"output\", description: \"Write or truncate an output file\", capabilities: [], anyOf: [[\"streamingWrite\"], [\"write\"]], mutates: true },\n];\n\nexport const pwdRequirements: readonly CommandFileSystemRequirement[] = [\n { id: \"logical\", description: \"Print the logical working directory\", capabilities: [] },\n { id: \"physical\", description: \"Resolve the physical working directory (-P)\", capabilities: [\"realpath\"] },\n];\n\nexport const predicateRequirements: readonly CommandFileSystemRequirement[] = [\n { id: \"expression\", description: \"Evaluate strings and integers\", capabilities: [] },\n { id: \"metadata\", description: \"Inspect file metadata\", capabilities: [\"stat\"] },\n { id: \"access\", description: \"Inspect path access permissions\", capabilities: [\"access\"] },\n];\n", "import { FsError } from \"../contracts/index.js\";\n\nconst segmentSize = 4096;\n\nexport class RecordBuffer {\n #segments: Uint8Array[] = [];\n #size = 0;\n #allocated = 0;\n\n constructor(readonly capacity: number, readonly finalizationCapacity = capacity * 2) {}\n\n get size(): number { return this.#size; }\n\n #admit(length: number): void {\n if (length > this.capacity - this.#size) {\n throw new FsError(\"EFBIG\", { message: \"line buffer limit exceeded\" });\n }\n }\n\n append(bytes: Uint8Array, start = 0, end = bytes.length): void {\n this.#admit(end - start);\n let offset = start;\n while (offset < end) {\n let segment = this.#segments.at(-1);\n const used = this.#size % segmentSize;\n if (!segment || used === 0) {\n segment = new Uint8Array(Math.min(segmentSize, this.capacity - this.#allocated));\n this.#segments.push(segment);\n this.#allocated += segment.length;\n }\n const length = Math.min(end - offset, segment.length - used);\n segment.set(bytes.subarray(offset, offset + length), used);\n this.#size += length;\n offset += length;\n }\n }\n\n finish(admit?: (size: number) => void, bytes?: Uint8Array, start = 0, end = bytes?.length ?? 0): Uint8Array {\n const tailLength = end - start;\n this.#admit(tailLength);\n const size = this.#size + tailLength;\n admit?.(size);\n if (size > this.finalizationCapacity - this.#allocated) {\n throw new FsError(\"EFBIG\", { message: \"line finalization buffer limit exceeded\" });\n }\n if (this.#size === 0) {\n const result = new Uint8Array(tailLength);\n if (bytes && tailLength > 0) result.set(bytes.subarray(start, end));\n return result;\n }\n const result = new Uint8Array(size);\n let offset = 0;\n for (const segment of this.#segments) {\n const length = Math.min(segment.length, this.#size - offset);\n result.set(segment.subarray(0, length), offset);\n offset += length;\n }\n if (bytes && tailLength > 0) result.set(bytes.subarray(start, end), offset);\n this.clear();\n return result;\n }\n\n clear(): void {\n if (this.#segments.length) this.#segments.length = 0;\n this.#size = 0;\n this.#allocated = 0;\n }\n}\n", "import { writeBytes, type CommandContext, type CommandResult } from \"../contracts/index.js\";\n\ninterface Information {\n readonly usage: string;\n readonly description: string;\n readonly options: readonly string[];\n readonly stopAtOperand?: boolean;\n readonly versionOnly?: boolean;\n}\n\n// These describe the virtual implementations, not the complete GNU option set.\nconst information: Readonly<Record<string, Information>> = {\n cat: { usage: \"[OPTION]... [FILE]...\", description: \"Concatenate input files.\", options: [\"-n, --number\", \"-b, --number-nonblank\", \"-s, --squeeze-blank\", \"-E, --show-ends\", \"-T, --show-tabs\", \"-v, --show-nonprinting\", \"-A, --show-all\"], versionOnly: true },\n du: { usage: \"[OPTION]... [FILE]...\", description: \"Report virtual file allocation.\", options: [\"-a, --all\", \"-s, --summarize\", \"-c, --total\", \"-h, --human-readable\", \"-B, --block-size=SIZE\", \"-b, --bytes\", \"--apparent-size\", \"-d, --max-depth=NUM\", \"-X, --exclude-from=FILE\", \"--exclude=PATTERN\", \"-t, --threshold=SIZE\"], versionOnly: true },\n base32: { usage: \"[OPTION]... [FILE]\", description: \"Encode or decode Base32 data.\", options: [\"-d, --decode\", \"-i, --ignore-garbage\", \"-w, --wrap=COLS\"] },\n base64: { usage: \"[OPTION]... [FILE]\", description: \"Encode or decode Base64 data.\", options: [\"-d, --decode\", \"-i, --ignore-garbage\", \"-w, --wrap=COLS\"] },\n basename: { usage: \"[OPTION]... NAME... [SUFFIX]\", description: \"Remove directory components and an optional suffix from names.\", options: [\"-a, --multiple\", \"-s, --suffix=SUFFIX\", \"-z, --zero\"] },\n dirname: { usage: \"[OPTION]... NAME...\", description: \"Print the directory component of each name.\", options: [\"-z, --zero\"] },\n chmod: { usage: \"[OPTION]... MODE FILE...\", description: \"Change virtual file permissions, subject to filesystem capabilities.\", options: [\"-R, --recursive\", \"-v, --verbose\", \"-c, --changes\", \"-f, --silent, --quiet\", \"--reference=FILE\"] },\n cksum: { usage: \"[OPTION]... [FILE]...\", description: \"Compute checksums of files or standard input.\", options: [\"-a, --algorithm=TYPE\", \"-b, --binary\", \"-z, --zero\", \"--tag\", \"--untagged\", \"--raw\", \"--base64\"] },\n comm: { usage: \"[OPTION]... FILE1 FILE2\", description: \"Compare sorted files in the C/POSIX byte locale.\", options: [\"-1\", \"-2\", \"-3\", \"--output-delimiter=STR\", \"--check-order\", \"--nocheck-order\"] },\n cp: { usage: \"[OPTION]... SOURCE... DEST\", description: \"Copy virtual files, subject to filesystem capabilities.\", options: [\"-a, --archive\", \"-r, -R, --recursive\", \"-f, --force\", \"-i, --interactive\", \"-n, --no-clobber\", \"-v, --verbose\", \"-t, --target-directory=DIR\", \"-T, --no-target-directory\", \"-S, --suffix=SUFFIX\"] },\n cut: { usage: \"[OPTION]... [FILE]...\", description: \"Select bytes, characters or fields from each input line.\", options: [\"-b, --bytes=LIST\", \"-c, --characters=LIST\", \"-f, --fields=LIST\", \"-d, --delimiter=CHAR\", \"-s, --only-delimited\", \"-z, --zero-terminated\", \"--output-delimiter=STR\", \"--complement\"] },\n env: { usage: \"[OPTION]... [NAME=VALUE]... [COMMAND [ARG]...]\", description: \"Print the environment or run a registered command with a modified environment.\", options: [\"-i, --ignore-environment\", \"-u, --unset=NAME\", \"-C, --chdir=DIR\", \"-S, --split-string=STR\", \"-0, --null\"], stopAtOperand: true },\n expand: { usage: \"[OPTION]... [FILE]...\", description: \"Convert tabs to spaces.\", options: [\"-i, --initial\", \"-t, --tabs=LIST\"] },\n fold: { usage: \"[OPTION]... [FILE]...\", description: \"Wrap input lines to a selected width.\", options: [\"-b, --bytes\", \"-s, --spaces\", \"-w, --width=COLS\"] },\n head: { usage: \"[OPTION]... [FILE]...\", description: \"Print the first ten lines by default, or a selected line/byte count.\", options: [\"-n, --lines=NUM\", \"-c, --bytes=NUM\", \"-q, --quiet, --silent\", \"-v, --verbose\", \"-z, --zero-terminated\"] },\n tail: { usage: \"[OPTION]... [FILE]...\", description: \"Print the last ten lines by default, or a selected line/byte count.\", options: [\"-n, --lines=NUM\", \"-c, --bytes=NUM\", \"-q, --quiet, --silent\", \"-v, --verbose\", \"-z, --zero-terminated\"] },\n join: { usage: \"[OPTION]... FILE1 FILE2\", description: \"Join sorted files on a common field in the C/POSIX byte locale.\", options: [\"-1=FIELD\", \"-2=FIELD\", \"-j=FIELD\", \"-t=CHAR\", \"-a=FILENUM\", \"-v=FILENUM\", \"-e=STR\", \"-o=FORMAT\", \"-i\", \"--check-order\", \"--nocheck-order\"] },\n ln: { usage: \"[OPTION]... TARGET... LINK_NAME\", description: \"Create virtual hard or symbolic links when supported by the filesystem.\", options: [\"-s, --symbolic\", \"-r, --relative\", \"-f, --force\", \"-i, --interactive\", \"-n, --no-dereference\", \"-v, --verbose\", \"-t, --target-directory=DIR\", \"-T, --no-target-directory\", \"-S, --suffix=SUFFIX\"] },\n ls: { usage: \"[OPTION]... [FILE]...\", description: \"List virtual directory entries.\", options: [\"-a, --all\", \"-A, --almost-all\", \"-l\", \"-1\", \"-d, --directory\", \"-F, --classify\", \"-r, --reverse\", \"-R, --recursive\", \"-L, --dereference\", \"-h, --human-readable\"] },\n mkdir: { usage: \"[OPTION]... DIRECTORY...\", description: \"Create virtual directories.\", options: [\"-p, --parents\", \"-m, --mode=MODE\", \"-v, --verbose\"] },\n mktemp: { usage: \"[OPTION]... [TEMPLATE]\", description: \"Create a temporary virtual file or directory.\", options: [\"-d, --directory\", \"-q, --quiet\", \"-u, --dry-run\", \"-p=DIR\", \"--tmpdir[=DIR]\", \"--suffix=SUFFIX\"] },\n mv: { usage: \"[OPTION]... SOURCE... DEST\", description: \"Move virtual files, subject to filesystem capabilities.\", options: [\"-f, --force\", \"-i, --interactive\", \"-n, --no-clobber\", \"-u, --update\", \"-v, --verbose\", \"-t, --target-directory=DIR\", \"-T, --no-target-directory\", \"-S, --suffix=SUFFIX\"] },\n nl: { usage: \"[OPTION]... [FILE]...\", description: \"Number input lines by section and numbering style.\", options: [\"-b, --body-numbering=STYLE\", \"-h, --header-numbering=STYLE\", \"-f, --footer-numbering=STYLE\", \"-v, --starting-line-number=NUM\", \"-i, --line-increment=NUM\", \"-s, --number-separator=STR\", \"-w, --number-width=NUM\", \"-n, --number-format=FORMAT\", \"-d, --section-delimiter=STR\", \"-l, --join-blank-lines=NUM\", \"-p, --no-renumber\"] },\n od: { usage: \"[OPTION]... [FILE]...\", description: \"Print input bytes in selected numeric formats.\", options: [\"-A, --address-radix=RADIX\", \"-j, --skip-bytes=NUM\", \"-N, --read-bytes=NUM\", \"-t, --format=TYPE, --type=TYPE\", \"-w, --width=NUM\", \"--endian=ORDER\", \"-v, --output-duplicates\"] },\n paste: { usage: \"[OPTION]... [FILE]...\", description: \"Merge corresponding or serial input lines.\", options: [\"-s, --serial\", \"-d, --delimiters=LIST\", \"-z, --zero-terminated\"] },\n readlink: { usage: \"[OPTION]... FILE...\", description: \"Print symbolic link targets or canonical virtual paths.\", options: [\"-f, --canonicalize\", \"-e, --canonicalize-existing\", \"-m, --canonicalize-missing\", \"-n, --no-newline\", \"-z, --zero\"] },\n realpath: { usage: \"[OPTION]... FILE...\", description: \"Print canonical virtual paths.\", options: [\"-e, --canonicalize-existing\", \"-m, --canonicalize-missing\", \"-s, --strip, --no-symlinks\", \"-z, --zero\"] },\n rm: { usage: \"[OPTION]... FILE...\", description: \"Remove virtual files and directories.\", options: [\"-r, -R, --recursive\", \"-f, --force\", \"-d, --dir\", \"-v, --verbose\", \"-i\", \"-I\"] },\n rmdir: { usage: \"[OPTION]... DIRECTORY...\", description: \"Remove empty virtual directories.\", options: [\"-p, --parents\", \"-v, --verbose\", \"--ignore-fail-on-non-empty\"] },\n seq: { usage: \"[OPTION]... [FIRST [INCREMENT]] LAST\", description: \"Print a numeric sequence.\", options: [\"-s, --separator=STR\", \"-f, --format=FORMAT\", \"-w, --equal-width\"] },\n sort: { usage: \"[OPTION]... [FILE]...\", description: \"Sort input records using the supported byte-oriented ordering modes.\", options: [\"-n, --numeric-sort\", \"-g, --general-numeric-sort\", \"-h, --human-numeric-sort\", \"-V, --version-sort\", \"-r, --reverse\", \"-f, --ignore-case\", \"-u, --unique\", \"-s, --stable\", \"-m, --merge\", \"-k, --key=KEY\", \"-t, --field-separator=CHAR\", \"-o, --output=FILE\", \"--sort=MODE\", \"-z, --zero-terminated\"] },\n split: { usage: \"[OPTION]... [FILE [PREFIX]]\", description: \"Split input into virtual output files.\", options: [\"-l, --lines=NUM\", \"-b, --bytes=SIZE\", \"-C, --line-bytes=SIZE\", \"-a, --suffix-length=NUM\", \"--additional-suffix=SUFFIX\"] },\n stat: { usage: \"[OPTION]... FILE...\", description: \"Display virtual file metadata supplied by the filesystem.\", options: [\"-L, --dereference\", \"-c, --format=FORMAT\", \"--printf=FORMAT\", \"-t, --terse\"] },\n tac: { usage: \"[OPTION]... [FILE]...\", description: \"Print input records in reverse order.\", options: [\"-b, --before\", \"-r, --regex\", \"-s, --separator=STR\"] },\n tee: { usage: \"[OPTION]... [FILE]...\", description: \"Copy standard input to standard output and virtual files.\", options: [\"-a, --append\", \"-i, --ignore-interrupts\", \"--output-error=MODE\"] },\n touch: { usage: \"[OPTION]... FILE...\", description: \"Update virtual file timestamps, creating missing files by default.\", options: [\"-a\", \"-m\", \"-c, --no-create\", \"-h, --no-dereference\", \"-r, --reference=FILE\", \"-d, --date=STR\", \"-t=STAMP\"] },\n tr: { usage: \"[OPTION]... STRING1 [STRING2]\", description: \"Translate, delete or squeeze input bytes.\", options: [\"-d, --delete\", \"-s, --squeeze-repeats\", \"-c, -C, --complement\", \"-t, --truncate-set1\"] },\n unexpand: { usage: \"[OPTION]... [FILE]...\", description: \"Convert spaces to tabs.\", options: [\"-a, --all\", \"-t, --tabs=LIST\", \"--first-only\"] },\n uniq: { usage: \"[OPTION]... [INPUT [OUTPUT]]\", description: \"Filter adjacent repeated input records.\", options: [\"-c, --count\", \"-d, --repeated\", \"-u, --unique\", \"-i, --ignore-case\", \"-f, --skip-fields=NUM\", \"-s, --skip-chars=NUM\", \"-w, --check-chars=NUM\", \"-z, --zero-terminated\"] },\n wc: { usage: \"[OPTION]... [FILE]...\", description: \"Count input lines, words, bytes, characters or display width.\", options: [\"-l, --lines\", \"-w, --words\", \"-c, --bytes\", \"-m, --chars\", \"-L, --max-line-length\"] },\n};\n\nconst checksumInformation: Information = {\n usage: \"[OPTION]... [FILE]...\", description: \"Compute or verify file digests.\",\n options: [\"-b, --binary\", \"-c, --check\", \"-t, --text\", \"-z, --zero\", \"--tag\", \"--quiet\", \"--status\", \"--strict\", \"--warn\", \"--ignore-missing\"],\n};\n\nexport async function gnuInformation(name: string, context: CommandContext): Promise<CommandResult | undefined> {\n if (!context.args.includes(\"--help\") && !context.args.includes(\"--version\")) return undefined;\n const info = information[name] ?? ([\"md5sum\", \"sha1sum\", \"sha224sum\", \"sha256sum\", \"sha384sum\", \"sha512sum\"].includes(name) ? checksumInformation : undefined);\n if (!info) return undefined;\n const flags = new Map<string, \"none\" | \"required\" | \"optional\">();\n for (const option of info.options) {\n const takesValue = option.includes(\"[=\") ? \"optional\" : option.includes(\"=\") ? \"required\" : \"none\";\n for (const spelling of option.split(\", \")) flags.set(spelling.split(\"=\")[0]!.split(\"[\")[0]!, takesValue);\n }\n for (let index = 0; index < context.args.length; index++) {\n const arg = context.args[index]!;\n if (arg === \"--\") break;\n if (arg === \"--help\" || arg === \"--version\") {\n if (arg === \"--help\" && info.versionOnly) return undefined;\n const text = arg === \"--version\"\n ? `${name} (safe-bash virtual implementation)\\n`\n : `Usage: ${name} ${info.usage}\\n${info.description}\\n\\nCommon supported options (additional behavior is documented in the package):\\n${info.options.map(option => ` ${option.split(\", \").map(spelling => spelling.startsWith(\"--\") ? spelling : spelling.replace(\"=\", \" \")).join(\", \")}`).join(\"\\n\")}\\n --help display this help and exit\\n --version display implementation information and exit\\n\\nThis is the safe-bash virtual implementation; filesystem operations require backend capabilities.\\n`;\n await writeBytes(context.stdout, new TextEncoder().encode(text), context.signal);\n return { exitCode: 0 };\n }\n if (!arg.startsWith(\"-\") || arg === \"-\") {\n if (info.stopAtOperand) break;\n continue;\n }\n if (arg.startsWith(\"--\")) {\n const equal = arg.indexOf(\"=\");\n const spelling = equal < 0 ? arg : arg.slice(0, equal);\n if (!flags.has(spelling)) return undefined;\n if (flags.get(spelling) === \"required\" && equal < 0) index++;\n else if (flags.get(spelling) === \"none\" && equal >= 0) return undefined;\n } else {\n for (let offset = 1; offset < arg.length; offset++) {\n const spelling = `-${arg[offset]}`;\n if (!flags.has(spelling)) return undefined;\n if (flags.get(spelling) === \"required\") {\n if (offset + 1 === arg.length) index++;\n break;\n }\n }\n }\n }\n return undefined;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["result", "value", "control", "value"]
7
+ }
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  UsageError,
3
3
  pathOf
4
- } from "./chunk-OTM5RCWZ.js";
4
+ } from "./chunk-QNEDWYC2.js";
5
5
  import {
6
6
  writeDiagnostic
7
- } from "./chunk-ZZ7JQBPX.js";
7
+ } from "./chunk-4A2OLEML.js";
8
8
  import {
9
9
  PublicDiagnostic,
10
10
  publicDiagnosticMessage
11
11
  } from "./chunk-ITX6SBN6.js";
12
12
  import {
13
13
  yieldTurn
14
- } from "./chunk-YOK5UHA7.js";
14
+ } from "./chunk-XKXFX3RH.js";
15
15
  import {
16
16
  contracts_exports
17
17
  } from "./chunk-J2E3MV3E.js";
@@ -1336,4 +1336,4 @@ export {
1336
1336
  safeJsNodeCommands,
1337
1337
  createSafeJsNodeCommand
1338
1338
  };
1339
- //# sourceMappingURL=chunk-PO3Z7W3A.js.map
1339
+ //# sourceMappingURL=chunk-MUHYGUFD.js.map
@@ -9,8 +9,9 @@ import {
9
9
  publicDiagnosticMessage
10
10
  } from "./chunk-5R3XS7BT.js";
11
11
  import {
12
+ hasYieldCheckpoint,
12
13
  yieldTurn
13
- } from "./chunk-B6YFFKYG.js";
14
+ } from "./chunk-X4I3RHTC.js";
14
15
  import {
15
16
  getCommandArguments,
16
17
  shellValueBytes
@@ -67,6 +68,8 @@ var RegexExecutionError = class extends PublicDiagnostic {
67
68
  };
68
69
  var matchRangeLimits = Object.freeze({ perRow: Infinity, perReply: Infinity });
69
70
  var trustedWorkerRequests = /* @__PURE__ */ new WeakSet();
71
+ var trustedWorkerReplies = /* @__PURE__ */ new WeakSet();
72
+ var trustedInputRows = /* @__PURE__ */ new WeakSet();
70
73
  var exprMatchCeilings = Object.freeze({
71
74
  maxPatternBytes: Infinity,
72
75
  maxSubjectBytes: Infinity,
@@ -229,6 +232,30 @@ function validateReply(value, id, rows, signal) {
229
232
  throw new RegexExecutionError("MATCH", reply.error);
230
233
  }
231
234
  if (!("results" in reply) || !Array.isArray(reply.results) || reply.results.length !== rows.length) throw new RegexExecutionError("PROTOCOL", "invalid reply rows");
235
+ if (trustedWorkerReplies.has(reply)) {
236
+ const resultCount2 = reply.results.length;
237
+ const results2 = new Array(resultCount2);
238
+ let total2 = 0;
239
+ for (let index = 0; index < resultCount2; index++) {
240
+ const ranges = reply.results[index];
241
+ const length = ranges.length;
242
+ if (length === 0) {
243
+ results2[index] = emptyMatches;
244
+ continue;
245
+ }
246
+ const count = length >> 1;
247
+ if (count > matchRangeLimits.perRow || count > matchRangeLimits.perReply - total2) {
248
+ throw new RegexExecutionError("PROTOCOL", "match range limit exceeded");
249
+ }
250
+ total2 += count;
251
+ const result = new Array(count);
252
+ for (let offset = 0, out = 0; offset < length; offset += 2, out++) {
253
+ result[out] = { start: ranges[offset], end: ranges[offset + 1] };
254
+ }
255
+ results2[index] = result;
256
+ }
257
+ return results2;
258
+ }
232
259
  let total = 0;
233
260
  const resultCount = reply.results.length;
234
261
  const lengths = new Array(resultCount);
@@ -8442,9 +8469,10 @@ var EreLedger = class {
8442
8469
  }
8443
8470
  this.#usage.work += amount;
8444
8471
  }
8445
- workAllowanceUntilCheckpoint() {
8472
+ workAllowanceUntilCheckpoint(signal) {
8446
8473
  const untilLimit = this.limits.work - this.#usage.work;
8447
- const untilYield = 256 - (this.#usage.work - this.#lastYield);
8474
+ const interval = hasYieldCheckpoint(signal) ? 256 : 16384;
8475
+ const untilYield = interval - (this.#usage.work - this.#lastYield);
8448
8476
  const min = untilLimit < untilYield ? untilLimit : untilYield;
8449
8477
  return min > 0 ? min : 0;
8450
8478
  }
@@ -8456,7 +8484,8 @@ var EreLedger = class {
8456
8484
  }
8457
8485
  checkpoint(signal) {
8458
8486
  this.check(signal);
8459
- if (this.#usage.work - this.#lastYield >= 256) {
8487
+ const interval = hasYieldCheckpoint(signal) ? 256 : 16384;
8488
+ if (this.#usage.work - this.#lastYield >= interval) {
8460
8489
  this.#lastYield = this.#usage.work;
8461
8490
  return yieldTurn(signal).then(() => {
8462
8491
  this.check(signal);
@@ -8751,10 +8780,34 @@ init_platform();
8751
8780
  function invalidUtf8() {
8752
8781
  throw new PublicDiagnostic("bounded regex unsupported: literal patterns and subjects require valid non-NUL UTF-8 bytes");
8753
8782
  }
8754
- async function validateUtf8(input, ledger, signal) {
8783
+ function validateUtf8(input, ledger, signal) {
8784
+ if (typeof input !== "string") {
8785
+ const len = input.length;
8786
+ if (len === 0) {
8787
+ ledger.check(signal);
8788
+ return void 0;
8789
+ }
8790
+ if (ledger.workAllowanceUntilCheckpoint(signal) >= len) {
8791
+ let ascii = true;
8792
+ for (let i = 0; i < len; i++) {
8793
+ const b = input[i];
8794
+ if (b === 0 || b >= 128) {
8795
+ ascii = false;
8796
+ break;
8797
+ }
8798
+ }
8799
+ if (ascii) {
8800
+ ledger.chargeWork(len, signal);
8801
+ return ledger.checkpoint(signal);
8802
+ }
8803
+ }
8804
+ }
8805
+ return validateUtf8Async(input, ledger, signal);
8806
+ }
8807
+ async function validateUtf8Async(input, ledger, signal) {
8755
8808
  for (let index = 0; index < input.length; ) {
8756
8809
  if (typeof input !== "string") {
8757
- const allowance = ledger.workAllowanceUntilCheckpoint();
8810
+ const allowance = ledger.workAllowanceUntilCheckpoint(signal);
8758
8811
  if (allowance > 1) {
8759
8812
  const maxRun = Math.min(input.length, index + allowance);
8760
8813
  let scan = index;
@@ -9297,7 +9350,20 @@ function options(input) {
9297
9350
  }
9298
9351
  return Object.freeze(result);
9299
9352
  }
9300
- function descriptor(value, limits) {
9353
+ function descriptor(value, limits, trusted = false) {
9354
+ if (trusted && value !== null && typeof value === "object") {
9355
+ const d = value;
9356
+ if (d.kind === "rg" || d.kind === "grep") {
9357
+ if (d.patterns.length > limits.maxPatterns) fail("limit", "pattern count limit exceeded");
9358
+ let bytes3 = 0;
9359
+ for (let index = 0; index < d.patterns.length; index++) {
9360
+ const pattern = d.patterns[index];
9361
+ if (pattern.length > limits.maxPatternBytes - bytes3) fail("limit", "aggregate pattern byte limit exceeded");
9362
+ bytes3 += pattern.length;
9363
+ }
9364
+ return d;
9365
+ }
9366
+ }
9301
9367
  if (value === null || typeof value !== "object") fail("protocol", "invalid descriptor");
9302
9368
  const kind = Object.getOwnPropertyDescriptor(value, "kind");
9303
9369
  if (!kind || !("value" in kind)) fail("protocol", "invalid descriptor kind");
@@ -9336,7 +9402,7 @@ function descriptor(value, limits) {
9336
9402
  function admit(input, limits, signal) {
9337
9403
  const trusted = trustedWorkerRequests.has(input);
9338
9404
  if (!trusted) record(input, ["id", "descriptor", "rows"]);
9339
- const selected = descriptor(input.descriptor, limits);
9405
+ const selected = descriptor(input.descriptor, limits, trusted);
9340
9406
  if (trusted && Array.isArray(input.rows)) {
9341
9407
  if (input.rows.length > limits.maxRows) fail("limit", "row count limit exceeded");
9342
9408
  } else {
@@ -9555,7 +9621,43 @@ async function compileLiteral(bytes2, ledger, signal, insensitive2 = false) {
9555
9621
  }
9556
9622
  return { bytes: bytes2, fallback, insensitive: insensitive2 };
9557
9623
  }
9558
- async function literalStart(program, subject, whole, word, ledger, signal, from = 0) {
9624
+ function literalStart(program, subject, whole, word, ledger, signal, from = 0) {
9625
+ const { bytes: bytes2, fallback } = program;
9626
+ const patLen = bytes2.length;
9627
+ const subLen = subject.length;
9628
+ if (!program.insensitive && patLen > 0 && ledger.workAllowanceUntilCheckpoint(signal) >= (subLen - from) * 2 + 2) {
9629
+ ledger.chargeWork(1, signal);
9630
+ if (whole && (from !== 0 || patLen !== subLen) || patLen > subLen - from) return -1;
9631
+ const firstByte = bytes2[0];
9632
+ for (let index = from, prefix = 0; index < subLen; ) {
9633
+ if (prefix === 0) {
9634
+ let scan = index;
9635
+ while (scan < subLen && subject[scan] !== firstByte) scan++;
9636
+ if (scan > index) {
9637
+ ledger.chargeWork(scan - index, signal);
9638
+ index = scan;
9639
+ if (index >= subLen) break;
9640
+ }
9641
+ }
9642
+ ledger.chargeWork(1, signal);
9643
+ if (subject[index] === bytes2[prefix]) {
9644
+ index++;
9645
+ if (++prefix === patLen) {
9646
+ const start = index - prefix;
9647
+ if (!word || !isAsciiWord(subject[start - 1] ?? -1) && !isAsciiWord(subject[index] ?? -1)) return start;
9648
+ prefix = fallback[prefix - 1];
9649
+ }
9650
+ } else if (prefix > 0) {
9651
+ prefix = fallback[prefix - 1];
9652
+ } else {
9653
+ index++;
9654
+ }
9655
+ }
9656
+ return -1;
9657
+ }
9658
+ return literalStartAsync(program, subject, whole, word, ledger, signal, from);
9659
+ }
9660
+ async function literalStartAsync(program, subject, whole, word, ledger, signal, from = 0) {
9559
9661
  const { bytes: bytes2, fallback } = program;
9560
9662
  ledger.charge("work", 1, signal);
9561
9663
  await ledger.checkpoint(signal);
@@ -9570,7 +9672,7 @@ async function literalStart(program, subject, whole, word, ledger, signal, from
9570
9672
  }
9571
9673
  for (let index = from, prefix = 0; index < subject.length; ) {
9572
9674
  if (prefix === 0 && !program.insensitive) {
9573
- const allowance = ledger.workAllowanceUntilCheckpoint();
9675
+ const allowance = ledger.workAllowanceUntilCheckpoint(signal);
9574
9676
  if (allowance > 1) {
9575
9677
  const firstByte = bytes2[0];
9576
9678
  const maxRun = Math.min(subject.length, index + allowance);
@@ -9659,8 +9761,12 @@ async function executeLiteral(input, signal, fold) {
9659
9761
  const results = [];
9660
9762
  const usage = { count: 0 };
9661
9763
  for (const row of rows) {
9662
- if (selected.kind === "rg") await validateUtf8(row.bytes, ledger, signal);
9663
- else {
9764
+ if (selected.kind === "rg") {
9765
+ const pendingUtf8 = validateUtf8(row.bytes, ledger, signal);
9766
+ if (pendingUtf8) await pendingUtf8;
9767
+ } else if (ledger.workAllowanceUntilCheckpoint(signal) >= row.bytes.length) {
9768
+ ledger.charge("work", row.bytes.length, signal);
9769
+ } else {
9664
9770
  for (let index = 0; index < row.bytes.length; index++) {
9665
9771
  ledger.charge("work", 1, signal);
9666
9772
  await ledger.checkpoint(signal);
@@ -9681,7 +9787,8 @@ async function executeLiteral(input, signal, fold) {
9681
9787
  let start = -1;
9682
9788
  let end = -1;
9683
9789
  for (const program of programs2) {
9684
- const candidate = await literalStart(program, row.bytes, selected.whole, selected.word, ledger, signal);
9790
+ const candidateOrPromise = literalStart(program, row.bytes, selected.whole, selected.word, ledger, signal);
9791
+ const candidate = typeof candidateOrPromise === "number" ? candidateOrPromise : await candidateOrPromise;
9685
9792
  if (candidate < 0) continue;
9686
9793
  if (start < 0 || candidate < start) {
9687
9794
  start = candidate;
@@ -9826,6 +9933,9 @@ var CooperativeWorker = class {
9826
9933
  try {
9827
9934
  this.#controller.signal.throwIfAborted();
9828
9935
  reply = owned ? "subject" in owned ? await executeExpr(owned, this.#controller.signal) : owned.descriptor.kind === "glob" ? await executeBoundedGlobs(owned, this.#controller.signal) : await execute(owned, this.#controller.signal) : { id, error: failure };
9936
+ if (owned && !("subject" in owned) && !("error" in reply)) {
9937
+ trustedWorkerReplies.add(reply);
9938
+ }
9829
9939
  } catch (error) {
9830
9940
  if (!(error instanceof ExprMatchError || error instanceof PublicDiagnostic || error instanceof EreSyntaxError || error instanceof EreUnsupportedError || error instanceof EreProfileLimitError || error instanceof EreUsageUnknownError)) {
9831
9941
  owned = void 0;
@@ -10045,7 +10155,7 @@ var RegexExecutor = class {
10045
10155
  });
10046
10156
  Object.assign(ownedDescriptor, { globOptions });
10047
10157
  }
10048
- const ownedRows = rows.map((row) => {
10158
+ const ownedRows = trustedInputRows.has(rows) ? rows : rows.map((row) => {
10049
10159
  signal.throwIfAborted();
10050
10160
  return { ...row, bytes: new Uint8Array(row.bytes) };
10051
10161
  });
@@ -10196,48 +10306,6 @@ var RegexSession = class {
10196
10306
  });
10197
10307
  }
10198
10308
  };
10199
- var AvailableRecords = class {
10200
- constructor(delimiter, maxLineBytes, extraDelimiter = -1) {
10201
- this.delimiter = delimiter;
10202
- this.maxLineBytes = maxLineBytes;
10203
- this.extraDelimiter = extraDelimiter;
10204
- }
10205
- delimiter;
10206
- maxLineBytes;
10207
- extraDelimiter;
10208
- chunk = new Uint8Array(0);
10209
- offset = 0;
10210
- async *source(source) {
10211
- for await (const chunk of source) {
10212
- this.chunk = Uint8Array.from(chunk);
10213
- this.offset = 0;
10214
- yield this.chunk;
10215
- }
10216
- }
10217
- end() {
10218
- for (let offset = this.offset; offset < this.chunk.length; offset++) {
10219
- if (this.chunk[offset] === this.delimiter || this.chunk[offset] === this.extraDelimiter) return offset;
10220
- }
10221
- return -1;
10222
- }
10223
- async *batches(source, size, maxRecords = () => 128) {
10224
- let batch = [];
10225
- let bytes2 = 0;
10226
- for await (const line of source) {
10227
- const end = this.end();
10228
- this.offset = end < 0 ? this.chunk.length : end + 1;
10229
- batch.push(line);
10230
- bytes2 += size(line);
10231
- const next = this.end();
10232
- if (batch.length >= maxRecords() || bytes2 >= 64 * 1024 || next < 0 || bytes2 + next - this.offset > 64 * 1024 || next - this.offset > this.maxLineBytes) {
10233
- yield batch;
10234
- batch = [];
10235
- bytes2 = 0;
10236
- }
10237
- }
10238
- if (batch.length) yield batch;
10239
- }
10240
- };
10241
10309
 
10242
10310
  // packages/safe-bash/src/commands/csplit/command.ts
10243
10311
  init_platform();
@@ -12491,12 +12559,12 @@ function csplitCommands(options2 = {}) {
12491
12559
 
12492
12560
  export {
12493
12561
  RegexExecutionError,
12562
+ trustedInputRows,
12494
12563
  exprMatchCeilings,
12495
12564
  ExprMatchError,
12496
12565
  withRegexSession,
12497
12566
  RegexExecutor,
12498
12567
  RegexSession,
12499
- AvailableRecords,
12500
12568
  reverseEmacsSteps,
12501
12569
  EreSyntaxError,
12502
12570
  EreUnsupportedError,
@@ -12511,4 +12579,4 @@ export {
12511
12579
  createCsplitCommands,
12512
12580
  csplitCommands
12513
12581
  };
12514
- //# sourceMappingURL=chunk-5DLGYPGJ.js.map
12582
+ //# sourceMappingURL=chunk-PDSTXORC.js.map