@poe-platform/safe-bash 0.1.787 → 0.1.789

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 (199) hide show
  1. package/README.md +1 -1
  2. package/dist/safe-bash/chunks/{chunk-WHURJBET.js → chunk-2MUJ7RLZ.js} +1 -1
  3. package/dist/safe-bash/chunks/{chunk-PYTLIUST.js → chunk-CTUHLNJM.js} +2 -2
  4. package/dist/safe-bash/chunks/{chunk-Z3HX3ZBA.js → chunk-D4PHJK4T.js} +1 -1
  5. package/dist/safe-bash/chunks/{chunk-O6356Z27.js → chunk-H7MMJS26.js} +2 -2
  6. package/dist/safe-bash/chunks/{chunk-Q3E6C3DX.js → chunk-KHJGUF2W.js} +14 -0
  7. package/dist/safe-bash/chunks/{chunk-FJZNUUOQ.js → chunk-VUVKC6HV.js} +1 -1
  8. package/dist/safe-bash/chunks/{chunk-ZMYVCRAF.js → chunk-X5ZCECM6.js} +2 -2
  9. package/dist/safe-bash/chunks/{git-UFNPAOYZ.js → git-HO7WDPHZ.js} +2 -2
  10. package/dist/safe-bash/command-chunks/{chunk-PFBJR2PY.js → chunk-2KRKKW5S.js} +2 -2
  11. package/dist/safe-bash/command-chunks/{chunk-4DSJDVBM.js → chunk-32F3RBUW.js} +10 -749
  12. package/dist/safe-bash/command-chunks/{chunk-WVWWRMFD.js → chunk-3KROFHBT.js} +1 -1
  13. package/dist/safe-bash/command-chunks/{chunk-L3MLMXL4.js → chunk-3ZK5F23O.js} +1 -1
  14. package/dist/safe-bash/command-chunks/{chunk-4QX6XCDD.js → chunk-4RNIZ3RT.js} +79 -0
  15. package/dist/safe-bash/command-chunks/{chunk-IFUNAM4D.js → chunk-5L62A5RO.js} +1 -1
  16. package/dist/safe-bash/command-chunks/{chunk-D7TADAYG.js → chunk-64LG3EVJ.js} +17 -0
  17. package/dist/safe-bash/command-chunks/{chunk-JUDOV5MJ.js → chunk-6F7QJMJ3.js} +1 -1
  18. package/dist/safe-bash/command-chunks/{chunk-IJ3FXP4Q.js → chunk-A3ZX6SCY.js} +1 -1
  19. package/dist/safe-bash/command-chunks/{chunk-DREUDEQG.js → chunk-AT6ZSOE6.js} +3 -3
  20. package/dist/safe-bash/command-chunks/{chunk-BUKYQBXO.js → chunk-BJ6DGYJA.js} +12 -12
  21. package/dist/safe-bash/command-chunks/{chunk-KSIGF4AG.js → chunk-BK4CMEE6.js} +1 -1
  22. package/dist/safe-bash/command-chunks/{chunk-NSEUBSOD.js → chunk-CXMOCPPH.js} +2 -2
  23. package/dist/safe-bash/command-chunks/{chunk-XGMWWUHV.js → chunk-CZ5DAK4K.js} +1 -1
  24. package/dist/safe-bash/command-chunks/{chunk-Z57TV6TC.js → chunk-EZ2DTOLI.js} +4 -2
  25. package/dist/safe-bash/command-chunks/{chunk-ADCGH6A7.js → chunk-FH3D75FC.js} +1 -1
  26. package/dist/safe-bash/command-chunks/{chunk-WYJTWJZ5.js → chunk-G3G6W5ZE.js} +1 -1
  27. package/dist/safe-bash/command-chunks/{chunk-3HDIDEUJ.js → chunk-GF54KE2M.js} +1 -1
  28. package/dist/safe-bash/command-chunks/{chunk-3JS4FOLB.js → chunk-HETU7MYN.js} +1 -1
  29. package/dist/safe-bash/command-chunks/{chunk-Z7TYZG3A.js → chunk-IHHTTQX6.js} +5 -3
  30. package/dist/safe-bash/command-chunks/{chunk-INDIFLBW.js → chunk-JTAGNROA.js} +4 -0
  31. package/dist/safe-bash/command-chunks/{chunk-Z47EO74H.js → chunk-MYKK3Q5G.js} +1 -1
  32. package/dist/safe-bash/command-chunks/{chunk-GZOUGVVV.js → chunk-OYZ534IK.js} +1 -1
  33. package/dist/safe-bash/command-chunks/chunk-PGEYORBZ.js +25 -0
  34. package/dist/safe-bash/command-chunks/chunk-QM4UZF3C.js +753 -0
  35. package/dist/safe-bash/command-chunks/{chunk-TOSM3T3A.js → chunk-UJOO6DKY.js} +20 -9
  36. package/dist/safe-bash/command-chunks/{chunk-TFZEYNMX.js → chunk-VQLFJCG7.js} +1 -1
  37. package/dist/safe-bash/command-chunks/{chunk-BIXN77VL.js → chunk-VUG324ER.js} +10 -0
  38. package/dist/safe-bash/command-chunks/{chunk-2LP3VMPA.js → chunk-WFDW4XXD.js} +1 -17
  39. package/dist/safe-bash/command-chunks/chunk-WR37IS4O.js +318 -0
  40. package/dist/safe-bash/command-chunks/{chunk-Y5IHIAY3.js → chunk-XNHSCU6I.js} +7 -3
  41. package/dist/safe-bash/commands/basic.js +148 -48
  42. package/dist/safe-bash/commands/bytes/compression/index.js +5 -6
  43. package/dist/safe-bash/commands/cmp.d.ts +2 -3
  44. package/dist/safe-bash/commands/cmp.js +2 -689
  45. package/dist/safe-bash/commands/docx/index.browser.js +3 -46
  46. package/dist/safe-bash/commands/docx/index.d.ts +2 -24
  47. package/dist/safe-bash/commands/docx/index.js +2 -41
  48. package/dist/safe-bash/commands/docx/io.d.ts +1 -14
  49. package/dist/safe-bash/commands/docx/io.js +1 -15
  50. package/dist/safe-bash/commands/llm/index.browser.js +3 -3
  51. package/dist/safe-bash/commands/network/index.browser.js +3 -3
  52. package/dist/safe-bash/commands/node/index.browser.js +3 -3
  53. package/dist/safe-bash/commands/pptx/index.d.ts +2 -28
  54. package/dist/safe-bash/commands/pptx/index.js +2 -152
  55. package/dist/safe-bash/commands/printf-float.d.ts +1 -0
  56. package/dist/safe-bash/commands/printf-float.js +48 -38
  57. package/dist/safe-bash/commands/printf-format.js +9 -6
  58. package/dist/safe-bash/commands/printf-quote.d.ts +3 -0
  59. package/dist/safe-bash/commands/printf-quote.js +62 -0
  60. package/dist/safe-bash/commands/printf-wide.d.ts +5 -0
  61. package/dist/safe-bash/commands/printf-wide.js +41 -0
  62. package/dist/safe-bash/commands/python/index.browser.js +2 -2
  63. package/dist/safe-bash/commands/truncate.d.ts +2 -3
  64. package/dist/safe-bash/commands/truncate.js +2 -686
  65. package/dist/safe-bash/contracts/diagnostics.d.ts +2 -0
  66. package/dist/safe-bash/contracts/diagnostics.js +2 -0
  67. package/dist/safe-bash/contracts/runtime-control.d.ts +2 -0
  68. package/dist/safe-bash/contracts/runtime-control.js +2 -0
  69. package/dist/safe-bash/core.browser.d.ts +1 -1
  70. package/dist/safe-bash/core.browser.js +2651 -4871
  71. package/dist/safe-bash/core.d.ts +10 -0
  72. package/dist/safe-bash/opt-in/commands/cmp/index.d.ts +6 -2
  73. package/dist/safe-bash/opt-in/commands/cmp/index.js +776 -79
  74. package/dist/safe-bash/opt-in/commands/cmp/options.d.ts +0 -12
  75. package/dist/safe-bash/opt-in/commands/cmp/options.js +0 -153
  76. package/dist/safe-bash/opt-in/commands/truncate/index.d.ts +8 -3
  77. package/dist/safe-bash/opt-in/commands/truncate/index.js +790 -272
  78. package/dist/safe-bash/opt-in/commands/truncate/sync.d.ts +1 -0
  79. package/dist/safe-bash/opt-in/commands/truncate/sync.js +60 -0
  80. package/dist/safe-bash/optional-host.browser.js +9 -1
  81. package/dist/safe-bash/optional-host.d.ts +3 -1
  82. package/dist/safe-bash/optional-host.js +3 -1
  83. package/dist/safe-bash/shell/runtime.js +10 -6
  84. package/dist/safe-bash-checksum-engine/index.d.ts +1 -1
  85. package/dist/safe-bash-checksum-engine/index.js +14 -2
  86. package/dist/safe-bash-command-bzip2/index.js +2 -1
  87. package/dist/safe-bash-command-cmp/index.d.ts +10 -0
  88. package/dist/safe-bash-command-cmp/index.js +796 -0
  89. package/dist/safe-bash-command-cmp/options.d.ts +12 -0
  90. package/dist/safe-bash-command-cmp/options.js +42 -0
  91. package/dist/safe-bash-command-csvcut/index.js +11 -8
  92. package/dist/safe-bash-command-csvgrep/index.js +35 -7
  93. package/dist/safe-bash-command-csvkit/codecs/python.js +4 -3
  94. package/dist/safe-bash-command-csvkit/codecs/utf8.js +3 -2
  95. package/dist/safe-bash-command-csvkit/index.js +80 -324
  96. package/dist/safe-bash-command-csvkit/python-regex.d.ts +5 -0
  97. package/dist/safe-bash-command-csvkit/python-regex.js +14 -0
  98. package/dist/safe-bash-command-csvkit/runtime.d.ts +1 -0
  99. package/dist/safe-bash-command-csvkit/sync-support.js +4 -2
  100. package/dist/safe-bash-command-diff3/index.js +3 -0
  101. package/dist/safe-bash-command-docx/LICENSE +21 -0
  102. package/dist/safe-bash-command-docx/index.d.ts +30 -0
  103. package/dist/safe-bash-command-docx/index.js +67 -0
  104. package/dist/safe-bash-command-docx/io.d.ts +14 -0
  105. package/dist/safe-bash-command-docx/io.js +26 -0
  106. package/dist/safe-bash-command-envsubst/index.js +34 -3
  107. package/dist/safe-bash-command-exiftool/index.js +3 -0
  108. package/dist/safe-bash-command-ffmpeg/index.js +1102 -1088
  109. package/dist/safe-bash-command-fold/family.js +1 -1
  110. package/dist/safe-bash-command-fold/index.js +1 -1
  111. package/dist/safe-bash-command-htmlq/index.js +5 -0
  112. package/dist/safe-bash-command-imagemagick/index.d.ts +25 -21
  113. package/dist/safe-bash-command-imagemagick/index.js +669 -271
  114. package/dist/safe-bash-command-mmdc/index.js +48 -10
  115. package/dist/safe-bash-command-mmdc/svg.d.ts +1 -0
  116. package/dist/safe-bash-command-op/index.js +19 -14
  117. package/dist/safe-bash-command-pandoc/command.js +1 -1
  118. package/dist/safe-bash-command-pandoc/index.js +1 -1
  119. package/dist/safe-bash-command-pdfimages/index.d.ts +7 -1
  120. package/dist/safe-bash-command-pdfimages/index.js +63 -33
  121. package/dist/safe-bash-command-pdfinfo/index.d.ts +24 -20
  122. package/dist/safe-bash-command-pdfinfo/index.js +370 -161
  123. package/dist/safe-bash-command-pdftk/index.d.ts +7 -3
  124. package/dist/safe-bash-command-pdftk/index.js +114 -45
  125. package/dist/safe-bash-command-pdftoppm/index.d.ts +15 -7
  126. package/dist/safe-bash-command-pdftoppm/index.js +179 -109
  127. package/dist/safe-bash-command-pdftotext/index.d.ts +9 -5
  128. package/dist/safe-bash-command-pdftotext/index.js +90 -27
  129. package/dist/safe-bash-command-pptx/LICENSE +21 -0
  130. package/dist/safe-bash-command-pptx/index.d.ts +33 -0
  131. package/dist/safe-bash-command-pptx/index.js +168 -0
  132. package/dist/safe-bash-command-qpdf/index.d.ts +9 -3
  133. package/dist/safe-bash-command-qpdf/index.js +80 -29
  134. package/dist/safe-bash-command-sha512sum/index.js +12 -475
  135. package/dist/safe-bash-command-sips/index.d.ts +9 -5
  136. package/dist/safe-bash-command-sips/index.js +63 -44
  137. package/dist/safe-bash-command-soffice/index.d.ts +9 -3
  138. package/dist/safe-bash-command-soffice/index.js +65 -24
  139. package/dist/safe-bash-command-sqlite3/engine.d.ts +9 -0
  140. package/dist/safe-bash-command-sqlite3/index.d.ts +1 -0
  141. package/dist/safe-bash-command-sqlite3/index.js +851 -352
  142. package/dist/safe-bash-command-ssconvert/formats/xls.js +3 -3
  143. package/dist/safe-bash-command-timeout/index.js +3 -3
  144. package/dist/safe-bash-command-truncate/index.d.ts +8 -3
  145. package/dist/safe-bash-command-truncate/index.js +790 -272
  146. package/dist/safe-bash-command-truncate/sync.d.ts +1 -0
  147. package/dist/safe-bash-command-truncate/sync.js +60 -0
  148. package/dist/safe-bash-command-wkhtmltopdf/index.js +92 -38
  149. package/dist/safe-bash-command-wkhtmltopdf/pdf-renderer.d.ts +1 -1
  150. package/dist/safe-bash-command-xxd/index.js +78 -20
  151. package/dist/safe-bash-command-xz/command.d.ts +4 -0
  152. package/dist/safe-bash-command-xz/index.d.ts +1 -1
  153. package/dist/safe-bash-command-xz/index.js +1 -1
  154. package/dist/safe-bash-compression-engine/bounded-codec.js +3 -3
  155. package/dist/safe-bash-compression-engine/codec-loader.js +2 -2
  156. package/dist/safe-bash-compression-engine/files.js +6 -6
  157. package/dist/safe-bash-compression-engine/index.js +5 -5
  158. package/dist/safe-bash-compression-engine/operand.js +6 -6
  159. package/dist/safe-bash-compression-engine/stream.js +5 -5
  160. package/dist/safe-bash-compression-engine/zstd-decode.js +4 -4
  161. package/dist/safe-bash-contracts/command.js +3 -3
  162. package/dist/safe-bash-contracts/diagnostics.js +3 -3
  163. package/dist/safe-bash-contracts/escaping.js +9 -9
  164. package/dist/safe-bash-contracts/filesystem-descriptor.js +3 -3
  165. package/dist/safe-bash-contracts/filesystem-output.js +8 -8
  166. package/dist/safe-bash-contracts/index.js +21 -19
  167. package/dist/safe-bash-contracts/io.d.ts +12 -0
  168. package/dist/safe-bash-contracts/io.js +4 -1
  169. package/dist/safe-bash-contracts/output.js +3 -2
  170. package/dist/safe-bash-contracts/runtime-control.js +2 -2
  171. package/dist/safe-bash-contracts/signals.js +1 -1
  172. package/dist/safe-bash-contracts/yield.d.ts +1 -0
  173. package/dist/safe-bash-contracts/yield.js +3 -1
  174. package/dist/safe-bash-csv-engine/index.d.ts +10 -1
  175. package/dist/safe-bash-csv-engine/index.js +78 -6
  176. package/dist/safe-bash-io-engine/commands/search/requirements.js +3 -3
  177. package/dist/safe-bash-io-engine/commands/text-programs/shared.js +3 -3
  178. package/dist/safe-bash-io-engine/gnu-information.js +1 -1
  179. package/dist/safe-bash-io-engine/internal.d.ts +1 -1
  180. package/dist/safe-bash-io-engine/internal.js +2 -2
  181. package/dist/safe-bash-mcp/index.browser.d.ts +875 -0
  182. package/dist/safe-bash-mcp/index.browser.js +8740 -0
  183. package/dist/safe-bash-mcp/index.js +32 -31
  184. package/dist/safe-bash-query-engine/capture.js +3 -3
  185. package/dist/safe-bash-query-engine/delpaths.js +3 -3
  186. package/dist/safe-bash-query-engine/formats.js +2 -2
  187. package/dist/safe-bash-query-engine/index.js +12 -12
  188. package/dist/safe-bash-query-engine/indices.js +3 -3
  189. package/dist/safe-bash-query-engine/input.js +1 -1
  190. package/dist/safe-bash-query-engine/interpreter.js +10 -10
  191. package/dist/safe-bash-query-engine/query-core.js +12 -12
  192. package/dist/safe-bash-query-engine/regex.js +3 -3
  193. package/dist/safe-bash-query-engine/splits.js +4 -4
  194. package/dist/safe-bash-query-engine/values.js +2 -2
  195. package/package.json +9 -3
  196. package/dist/safe-bash/opt-in/commands/cmp/compare.js +0 -95
  197. package/dist/safe-bash/opt-in/commands/cmp/io.js +0 -218
  198. package/dist/safe-bash/command-chunks/{chunk-FXYWQ6S4.js → chunk-2VTMZTV3.js} +0 -0
  199. package/dist/safe-bash/command-chunks/{chunk-DEH3CMGL.js → chunk-QJ3ONEBI.js} +3 -3
@@ -0,0 +1,67 @@
1
+ import {
2
+ init_buffer
3
+ } from "../safe-bash/command-chunks/chunk-HX3SHTCE.js";
4
+
5
+ // packages/safe-bash-command-docx/dist/index.js
6
+ init_buffer();
7
+ import { shellValueByteLength } from "../safe-bash-contracts/value.js";
8
+ import { FsError, getCommandArguments } from "../safe-bash-contracts/index.js";
9
+ import { validateExitCode } from "../safe-bash-contracts/command.js";
10
+ function createDocxCommand(options) {
11
+ if (!options?.engine || typeof options.engine.execute !== "function")
12
+ throw new TypeError("An explicit docx command engine is required.");
13
+ if (options.replace !== void 0 && typeof options.replace !== "boolean")
14
+ throw new TypeError("docx replace must be boolean.");
15
+ const maxArgumentBytes = options.limits?.maxArgumentBytes ?? Infinity;
16
+ if (maxArgumentBytes !== Infinity && (!Number.isSafeInteger(maxArgumentBytes) || maxArgumentBytes < 0)) {
17
+ throw new RangeError("maxArgumentBytes must be a nonnegative safe integer or Infinity");
18
+ }
19
+ const engine = options.engine;
20
+ return {
21
+ name: "docx",
22
+ async execute(context) {
23
+ context.signal.throwIfAborted();
24
+ const arguments_ = getCommandArguments(context);
25
+ let argumentBytes = 0;
26
+ for (let index = 0; index < arguments_.args.length; index++) {
27
+ const bytes = shellValueByteLength(arguments_.values[index]);
28
+ if (bytes > maxArgumentBytes - argumentBytes)
29
+ throw new FsError("EFBIG", { message: "document argument limit exceeded" });
30
+ argumentBytes += bytes;
31
+ }
32
+ const result = await engine.execute({
33
+ args: Object.freeze(arguments_.args.map((_, index) => arguments_.bytes(index))),
34
+ cwd: context.cwd,
35
+ filesystem: context.fs,
36
+ stdin: context.stdin,
37
+ ...context.stdinIsDefault === void 0 ? {} : { stdinIsDefault: context.stdinIsDefault },
38
+ stdout: context.stdout,
39
+ stderr: context.stderr,
40
+ signal: context.signal,
41
+ ...context.registerCleanup === void 0 ? {} : { registerCleanup: context.registerCleanup }
42
+ });
43
+ context.signal.throwIfAborted();
44
+ return { exitCode: validateExitCode(result.exitCode) };
45
+ }
46
+ };
47
+ }
48
+ function createDocxCommands(options) {
49
+ return [createDocxCommand(options)];
50
+ }
51
+ function docxCommands(options) {
52
+ const command = createDocxCommand(options);
53
+ const replace = options.replace ?? false;
54
+ return {
55
+ name: "docx-commands",
56
+ setup(host) {
57
+ if (!replace && host.commands.has(command.name))
58
+ throw new Error("Command already registered: docx");
59
+ host.commands.register(command, { replace });
60
+ }
61
+ };
62
+ }
63
+ export {
64
+ createDocxCommand,
65
+ createDocxCommands,
66
+ docxCommands
67
+ };
@@ -0,0 +1,14 @@
1
+ import { type ByteSink, type ByteSource } from "../safe-bash-contracts/io.js";
2
+ import type { CommandContext } from "../safe-bash-contracts/command.js";
3
+ export declare function documentByteSource(source: ByteSource): {
4
+ open(signal: AbortSignal): AsyncIterable<Uint8Array>;
5
+ };
6
+ export declare function documentByteSink(sink: ByteSink): {
7
+ write(bytes: Uint8Array, signal: AbortSignal): Promise<void>;
8
+ };
9
+ export declare function createDocumentOutput(context: Pick<CommandContext, "signal" | "registerCleanup">, destination: ByteSink): {
10
+ readonly sink: {
11
+ write(bytes: Uint8Array, signal: AbortSignal): Promise<void>;
12
+ };
13
+ readonly cleanup: () => Promise<void>;
14
+ };
@@ -0,0 +1,26 @@
1
+ import {
2
+ init_buffer
3
+ } from "../safe-bash/command-chunks/chunk-HX3SHTCE.js";
4
+
5
+ // packages/safe-bash-command-docx/dist/io.js
6
+ init_buffer();
7
+ import { readBytes, writeBytes } from "../safe-bash-contracts/io.js";
8
+ import { createOutputOperation } from "../safe-bash-contracts/output.js";
9
+ function documentByteSource(source) {
10
+ return { open: (signal) => readBytes(source, signal) };
11
+ }
12
+ function documentByteSink(sink) {
13
+ return { write: (bytes, signal) => writeBytes(sink, bytes, signal) };
14
+ }
15
+ function createDocumentOutput(context, destination) {
16
+ const operation = createOutputOperation(context, destination);
17
+ return {
18
+ sink: documentByteSink(operation.output),
19
+ cleanup: operation.close
20
+ };
21
+ }
22
+ export {
23
+ createDocumentOutput,
24
+ documentByteSink,
25
+ documentByteSource
26
+ };
@@ -4,6 +4,7 @@ import {
4
4
 
5
5
  // packages/safe-bash-command-envsubst/dist/index.js
6
6
  init_buffer();
7
+ import { yieldTurn } from "../safe-bash-contracts/yield.js";
7
8
  import { collectBytes, commandRuntimeIdentity, writeBytes, writeText } from "../safe-bash-contracts/index.js";
8
9
  function settings(options = {}) {
9
10
  const limits = {
@@ -87,6 +88,13 @@ function extractVariablesFromBytes(bytes) {
87
88
  return vars;
88
89
  }
89
90
  function substituteBytes(input, env, allowedVars, maxOutputBytes) {
91
+ const steps = substituteSteps(input, env, allowedVars, maxOutputBytes);
92
+ let step = steps.next();
93
+ while (!step.done)
94
+ step = steps.next();
95
+ return step.value;
96
+ }
97
+ function* substituteSteps(input, env, allowedVars, maxOutputBytes) {
90
98
  const chunks = [];
91
99
  let totalOut = 0;
92
100
  const pushChunk = (chunk) => {
@@ -100,7 +108,12 @@ function substituteBytes(input, env, allowedVars, maxOutputBytes) {
100
108
  };
101
109
  let segStart = 0;
102
110
  let i = 0;
111
+ let nextTurn = 4096;
103
112
  while (i < input.byteLength) {
113
+ if (i >= nextTurn) {
114
+ yield;
115
+ nextTurn = i + 4096;
116
+ }
104
117
  if (input[i] !== 36) {
105
118
  i++;
106
119
  continue;
@@ -116,8 +129,13 @@ function substituteBytes(input, env, allowedVars, maxOutputBytes) {
116
129
  let j = i + 2;
117
130
  if (j < input.byteLength && isIdentStart(input[j])) {
118
131
  j++;
119
- while (j < input.byteLength && isIdentPart(input[j]))
132
+ while (j < input.byteLength && isIdentPart(input[j])) {
133
+ if (j >= nextTurn) {
134
+ yield;
135
+ nextTurn = j + 4096;
136
+ }
120
137
  j++;
138
+ }
121
139
  if (j < input.byteLength && input[j] === 125) {
122
140
  varName = sharedDecoder.decode(input.subarray(i + 2, j));
123
141
  endIdx = j + 1;
@@ -125,8 +143,13 @@ function substituteBytes(input, env, allowedVars, maxOutputBytes) {
125
143
  }
126
144
  } else if (isIdentStart(next)) {
127
145
  let j = i + 2;
128
- while (j < input.byteLength && isIdentPart(input[j]))
146
+ while (j < input.byteLength && isIdentPart(input[j])) {
147
+ if (j >= nextTurn) {
148
+ yield;
149
+ nextTurn = j + 4096;
150
+ }
129
151
  j++;
152
+ }
130
153
  varName = sharedDecoder.decode(input.subarray(i + 1, j));
131
154
  endIdx = j;
132
155
  }
@@ -218,12 +241,20 @@ function createEnvsubstCommand(options = {}) {
218
241
  return { exitCode: 1 };
219
242
  }
220
243
  try {
221
- const output = substituteBytes(input, context.env, allowedVars, limits.maxOutputBytes);
244
+ const steps = substituteSteps(input, context.env, allowedVars, limits.maxOutputBytes);
245
+ let step = steps.next();
246
+ while (!step.done) {
247
+ await yieldTurn(context.signal);
248
+ context.signal.throwIfAborted();
249
+ step = steps.next();
250
+ }
251
+ const output = step.value;
222
252
  if (output.byteLength > 0) {
223
253
  await writeBytes(context.stdout, output);
224
254
  }
225
255
  return { exitCode: 0 };
226
256
  } catch (err) {
257
+ context.signal.throwIfAborted();
227
258
  await writeText(context.stderr, `${err instanceof Error ? err.message : "envsubst: error"}
228
259
  `);
229
260
  return { exitCode: 1 };
@@ -7,6 +7,7 @@ init_buffer();
7
7
 
8
8
  // packages/safe-bash-command-exiftool/dist/command.js
9
9
  init_buffer();
10
+ import { yieldTurn } from "../safe-bash-contracts/yield.js";
10
11
  import { commandRuntimeIdentity, getCommandArguments } from "../safe-bash-contracts/command.js";
11
12
  import { FsError as FsError2 } from "../safe-bash-contracts/errors.js";
12
13
  import { readBytes as readBytes2, writeBytes } from "../safe-bash-contracts/io.js";
@@ -2083,6 +2084,8 @@ function createExiftoolCommand(options = {}) {
2083
2084
  };
2084
2085
  let errors = 0, updated = 0, created = 0, unchanged = 0, read = 0;
2085
2086
  for (const file of invocation.files) {
2087
+ await yieldTurn(context.signal);
2088
+ context.signal.throwIfAborted();
2086
2089
  let tags = [];
2087
2090
  try {
2088
2091
  const { path, original, bytes } = await acquire(file);