@poe-platform/safe-bash 0.1.789 → 0.1.790

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/image-ast/index.browser.js +147 -80
  2. package/dist/image-ast/index.js +147 -80
  3. package/dist/mp4-ast/mp4.d.ts +2 -0
  4. package/dist/pdf-ast/cos/parser.d.ts +1 -0
  5. package/dist/pdf-ast/cos/security.d.ts +2 -0
  6. package/dist/pdf-ast/cos/writer.d.ts +1 -0
  7. package/dist/pdf-ast/document.d.ts +3 -0
  8. package/dist/pdf-ast/edit/forms.d.ts +1 -0
  9. package/dist/pdf-ast/index.js +171 -82
  10. package/dist/safe-bash/chunks/{chunk-L5QQLNTO.js → chunk-22PI65AH.js} +2 -2
  11. package/dist/safe-bash/chunks/{chunk-KHJGUF2W.js → chunk-2TAGYMPK.js} +43 -42
  12. package/dist/safe-bash/chunks/{chunk-D4PHJK4T.js → chunk-2W4HTMEK.js} +52 -48
  13. package/dist/safe-bash/chunks/{chunk-FFZXP6ZC.js → chunk-3M7L7XU2.js} +2 -2
  14. package/dist/safe-bash/chunks/{chunk-XNODZRVD.js → chunk-3QAO6UYS.js} +2 -2
  15. package/dist/safe-bash/chunks/{chunk-YPETOVQU.js → chunk-3VKFK3NF.js} +2 -2
  16. package/dist/safe-bash/chunks/chunk-5OST7NOX.js +42 -0
  17. package/dist/safe-bash/chunks/{chunk-KEBSX2AX.js → chunk-6HLURHVU.js} +2 -2
  18. package/dist/safe-bash/chunks/chunk-DYEUZE6Z.js +19 -0
  19. package/dist/safe-bash/chunks/{chunk-T2TGCHKE.js → chunk-FM3WBSZT.js} +2 -2
  20. package/dist/safe-bash/chunks/chunk-GAYRKQM6.js +22 -0
  21. package/dist/safe-bash/chunks/{chunk-Q45QCA4J.js → chunk-I3KSESCR.js} +0 -7
  22. package/dist/safe-bash/chunks/{chunk-OSKDIBQS.js → chunk-JLIMK5TD.js} +1 -1
  23. package/dist/safe-bash/chunks/{chunk-2AYZCT5X.js → chunk-JQ2FAJJT.js} +27 -23
  24. package/dist/safe-bash/chunks/{chunk-QA3NVP43.js → chunk-JRE6Z3T7.js} +2 -2
  25. package/dist/safe-bash/chunks/{chunk-DC5EHLKS.js → chunk-NDIL6T7Y.js} +5 -5
  26. package/dist/safe-bash/chunks/{chunk-747G42FY.js → chunk-OPR4UAIT.js} +2 -2
  27. package/dist/safe-bash/chunks/chunk-OSMQCYSP.js +19 -0
  28. package/dist/safe-bash/chunks/chunk-OYB332PQ.js +17 -0
  29. package/dist/safe-bash/chunks/{chunk-X5ZCECM6.js → chunk-QTIH2AFE.js} +77 -69
  30. package/dist/safe-bash/chunks/{chunk-CTUHLNJM.js → chunk-SBESXWT2.js} +43 -44
  31. package/dist/safe-bash/chunks/{chunk-4FDQJUFW.js → chunk-SDEPGTOF.js} +1 -1
  32. package/dist/safe-bash/chunks/chunk-UZU5BIJI.js +32 -0
  33. package/dist/safe-bash/chunks/{chunk-BI6JV62X.js → chunk-VCCMROTL.js} +7 -10
  34. package/dist/safe-bash/chunks/chunk-W47GHRRF.js +13 -0
  35. package/dist/safe-bash/chunks/{chunk-NPMQWZUZ.js → chunk-WS7KZIUM.js} +2 -2
  36. package/dist/safe-bash/chunks/{chunk-3PZYHMGM.js → chunk-YYAERCWS.js} +7 -7
  37. package/dist/safe-bash/chunks/{chunk-5U7JECDB.js → chunk-ZPGVEUKF.js} +8 -7
  38. package/dist/safe-bash/chunks/{csvkit-K55OYAQC.js → csvkit-USUJG62I.js} +65 -11
  39. package/dist/safe-bash/chunks/{ffmpeg-BEFTQ6DZ.js → ffmpeg-KRGG5DLH.js} +21 -10
  40. package/dist/safe-bash/chunks/{gh-HQWOWLWE.js → gh-UCFDUZCX.js} +16 -8
  41. package/dist/safe-bash/chunks/{git-HO7WDPHZ.js → git-LPAF6KDG.js} +7 -9
  42. package/dist/safe-bash/chunks/{imagemagick-53BMHH6D.js → imagemagick-KGREKK4G.js} +38 -7
  43. package/dist/safe-bash/chunks/{implementation-QUTAAYMT.js → implementation-FXDRYS5A.js} +34 -8
  44. package/dist/safe-bash/chunks/{pdfimages-4OYI6FLG.js → pdfimages-UADCF4G4.js} +12 -8
  45. package/dist/safe-bash/chunks/{pdfinfo-I7U6TQPP.js → pdfinfo-O7UWPF4W.js} +38 -13
  46. package/dist/safe-bash/chunks/{pdftk-SUA6FMHI.js → pdftk-AERXIJTN.js} +13 -8
  47. package/dist/safe-bash/chunks/{pdftoppm-4C5DGEWX.js → pdftoppm-L466JQKI.js} +17 -10
  48. package/dist/safe-bash/chunks/{pdftotext-Y4WI225Y.js → pdftotext-SUSI4WXS.js} +19 -9
  49. package/dist/safe-bash/chunks/{qpdf-IORB4RV5.js → qpdf-YL24KVRH.js} +14 -8
  50. package/dist/safe-bash/chunks/{sips-WHAMJFEU.js → sips-QXEQZERX.js} +14 -7
  51. package/dist/safe-bash/chunks/{soffice-SYEK6WJS.js → soffice-TBITRML3.js} +16 -8
  52. package/dist/safe-bash/chunks/{wkhtmltopdf-ZIICWJLF.js → wkhtmltopdf-NJA2THRC.js} +27 -7
  53. package/dist/safe-bash/command-chunks/chunk-2C5BEBPY.js +1388 -0
  54. package/dist/safe-bash/command-chunks/{chunk-2VTMZTV3.js → chunk-2EXV2ZLV.js} +2 -2
  55. package/dist/safe-bash/command-chunks/{chunk-UJOO6DKY.js → chunk-6EASC5EC.js} +1 -1
  56. package/dist/safe-bash/command-chunks/{chunk-ZF3ZVGQC.js → chunk-7JRITHKW.js} +150 -80
  57. package/dist/safe-bash/{chunks/chunk-LD76P7AG.js → command-chunks/chunk-AKDMCNX4.js} +74 -39
  58. package/dist/safe-bash/command-chunks/{chunk-6F7QJMJ3.js → chunk-CBDVLMJB.js} +1 -1
  59. package/dist/safe-bash/command-chunks/chunk-H4LWTITX.js +169 -0
  60. package/dist/safe-bash/command-chunks/chunk-I2MQNBGR.js +145 -0
  61. package/dist/safe-bash/command-chunks/{chunk-5GRLAARV.js → chunk-IOXI5ZAJ.js} +1 -1
  62. package/dist/safe-bash/command-chunks/{chunk-XNHSCU6I.js → chunk-MDPIOQUD.js} +6 -6
  63. package/dist/safe-bash/command-chunks/chunk-QI4MGIN6.js +6 -0
  64. package/dist/safe-bash/command-chunks/chunk-QTYZAWSB.js +91 -0
  65. package/dist/safe-bash/command-chunks/chunk-SNK7K3XW.js +90 -0
  66. package/dist/safe-bash/command-chunks/chunk-T5OLGM43.js +314 -0
  67. package/dist/safe-bash/command-chunks/chunk-TB7IFMUZ.js +802 -0
  68. package/dist/safe-bash/command-chunks/{chunk-AT6ZSOE6.js → chunk-TPPBPIWL.js} +1 -1
  69. package/dist/safe-bash/command-chunks/chunk-VMK4XVKO.js +82 -0
  70. package/dist/safe-bash/command-chunks/chunk-VNSJKXDU.js +130 -0
  71. package/dist/safe-bash/command-chunks/chunk-YFNTMH6Z.js +6 -0
  72. package/dist/safe-bash/commands/csplit/index.browser.js +2 -2
  73. package/dist/safe-bash/commands/docx/index.browser.js +2 -2
  74. package/dist/safe-bash/commands/factor/index.browser.js +2 -2
  75. package/dist/safe-bash/commands/getopt/index.browser.js +2 -2
  76. package/dist/safe-bash/commands/hexdump/index.browser.js +2 -2
  77. package/dist/safe-bash/commands/iconv/index.browser.js +2 -2
  78. package/dist/safe-bash/commands/line-endings/index.browser.js +2 -2
  79. package/dist/safe-bash/commands/llm/command.d.ts +1 -4
  80. package/dist/safe-bash/commands/llm/command.js +1 -248
  81. package/dist/safe-bash/commands/llm/elevenlabs-stream.d.ts +1 -2
  82. package/dist/safe-bash/commands/llm/elevenlabs-stream.js +1 -117
  83. package/dist/safe-bash/commands/llm/elevenlabs.d.ts +1 -15
  84. package/dist/safe-bash/commands/llm/elevenlabs.js +1 -123
  85. package/dist/safe-bash/commands/llm/index.browser.js +20 -15
  86. package/dist/safe-bash/commands/llm/index.d.ts +1 -6
  87. package/dist/safe-bash/commands/llm/index.js +1 -4
  88. package/dist/safe-bash/commands/llm/mime.d.ts +1 -2
  89. package/dist/safe-bash/commands/llm/mime.js +1 -136
  90. package/dist/safe-bash/commands/llm/openai-http.d.ts +1 -8
  91. package/dist/safe-bash/commands/llm/openai-http.js +1 -143
  92. package/dist/safe-bash/commands/llm/openai-sse.d.ts +1 -3
  93. package/dist/safe-bash/commands/llm/openai-sse.js +1 -78
  94. package/dist/safe-bash/commands/llm/openai.d.ts +1 -14
  95. package/dist/safe-bash/commands/llm/openai.js +1 -288
  96. package/dist/safe-bash/commands/llm/providers/elevenlabs.d.ts +1 -1
  97. package/dist/safe-bash/commands/llm/providers/elevenlabs.js +1 -1
  98. package/dist/safe-bash/commands/llm/providers/index.browser.js +6 -6
  99. package/dist/safe-bash/commands/llm/providers/index.d.ts +1 -3
  100. package/dist/safe-bash/commands/llm/providers/index.js +1 -2
  101. package/dist/safe-bash/commands/llm/providers/openai.d.ts +1 -1
  102. package/dist/safe-bash/commands/llm/providers/openai.js +1 -1
  103. package/dist/safe-bash/commands/llm/providers/shared.d.ts +1 -23
  104. package/dist/safe-bash/commands/llm/providers/shared.js +1 -65
  105. package/dist/safe-bash/commands/llm/service.d.ts +1 -37
  106. package/dist/safe-bash/commands/llm/service.js +1 -151
  107. package/dist/safe-bash/commands/llm/types.d.ts +1 -52
  108. package/dist/safe-bash/commands/llm/types.js +1 -1
  109. package/dist/safe-bash/commands/mdq/index.browser.js +3 -3
  110. package/dist/safe-bash/commands/media/index.browser.js +1 -1
  111. package/dist/safe-bash/commands/network/index.browser.js +9 -9
  112. package/dist/safe-bash/commands/network/types.d.ts +2 -40
  113. package/dist/safe-bash/commands/node/index.browser.js +6 -8
  114. package/dist/safe-bash/commands/op/index.browser.js +3 -3
  115. package/dist/safe-bash/commands/op/index.js +12 -28
  116. package/dist/safe-bash/commands/pr/index.browser.js +2 -2
  117. package/dist/safe-bash/commands/python/index.browser.js +8 -8
  118. package/dist/safe-bash/commands/python/worker.browser.js +2 -2
  119. package/dist/safe-bash/commands/tsort/index.browser.js +2 -2
  120. package/dist/safe-bash/commands/xml/index.browser.js +2 -2
  121. package/dist/safe-bash/commands/yq/index.browser.js +3 -3
  122. package/dist/safe-bash/core.browser.js +9775 -10975
  123. package/dist/safe-bash/core.d.ts +0 -1
  124. package/dist/safe-bash/core.js +0 -1
  125. package/dist/safe-bash/jobs.browser.js +5 -4
  126. package/dist/safe-bash/optional-host.browser.js +61 -88
  127. package/dist/safe-bash/shell/runtime.js +34 -12
  128. package/dist/safe-bash/yq-browser/index.js +1 -1
  129. package/dist/safe-bash-command-ffmpeg/index.js +8130 -8011
  130. package/dist/safe-bash-command-git/git_rust.wasm +0 -0
  131. package/dist/safe-bash-command-git/wasm.generated.js +1 -1
  132. package/dist/safe-bash-command-imagemagick/index.js +2 -2
  133. package/dist/safe-bash-command-llm/LICENSE +21 -0
  134. package/dist/safe-bash-command-llm/command.d.ts +5 -0
  135. package/dist/safe-bash-command-llm/command.js +14 -0
  136. package/dist/safe-bash-command-llm/configuration.d.ts +18 -0
  137. package/dist/safe-bash-command-llm/elevenlabs-stream.d.ts +2 -0
  138. package/dist/safe-bash-command-llm/elevenlabs-stream.js +7 -0
  139. package/dist/safe-bash-command-llm/elevenlabs.d.ts +15 -0
  140. package/dist/safe-bash-command-llm/elevenlabs.js +10 -0
  141. package/dist/safe-bash-command-llm/index.d.ts +10 -0
  142. package/dist/safe-bash-command-llm/index.js +46 -0
  143. package/dist/safe-bash-command-llm/mime.d.ts +2 -0
  144. package/dist/safe-bash-command-llm/mime.js +9 -0
  145. package/dist/safe-bash-command-llm/model-options.d.ts +3 -0
  146. package/dist/safe-bash-command-llm/openai-http.d.ts +8 -0
  147. package/dist/safe-bash-command-llm/openai-http.js +17 -0
  148. package/dist/safe-bash-command-llm/openai-sse.d.ts +3 -0
  149. package/dist/safe-bash-command-llm/openai-sse.js +8 -0
  150. package/dist/safe-bash-command-llm/openai.d.ts +14 -0
  151. package/dist/safe-bash-command-llm/openai.js +12 -0
  152. package/dist/safe-bash-command-llm/providers/elevenlabs.d.ts +1 -0
  153. package/dist/safe-bash-command-llm/providers/elevenlabs.js +11 -0
  154. package/dist/safe-bash-command-llm/providers/index.d.ts +3 -0
  155. package/dist/safe-bash-command-llm/providers/index.js +24 -0
  156. package/dist/safe-bash-command-llm/providers/openai.d.ts +1 -0
  157. package/dist/safe-bash-command-llm/providers/openai.js +13 -0
  158. package/dist/safe-bash-command-llm/providers/shared.d.ts +23 -0
  159. package/dist/safe-bash-command-llm/providers/shared.js +13 -0
  160. package/dist/safe-bash-command-llm/schemas.d.ts +2 -0
  161. package/dist/safe-bash-command-llm/service.d.ts +42 -0
  162. package/dist/safe-bash-command-llm/service.js +9 -0
  163. package/dist/safe-bash-command-llm/templates.d.ts +27 -0
  164. package/dist/safe-bash-command-llm/types.d.ts +87 -0
  165. package/dist/safe-bash-command-llm/types.js +6 -0
  166. package/dist/safe-bash-command-mmdc/command.d.ts +4 -0
  167. package/dist/safe-bash-command-mmdc/index.d.ts +1 -1
  168. package/dist/safe-bash-command-mmdc/index.js +7084 -6687
  169. package/dist/safe-bash-command-mmdc/layout.d.ts +1 -0
  170. package/dist/safe-bash-command-mmdc/parser.d.ts +1 -0
  171. package/dist/safe-bash-command-mmdc/png.d.ts +3 -0
  172. package/dist/safe-bash-command-mmdc/raster.d.ts +1 -0
  173. package/dist/safe-bash-command-pandoc/command.js +3 -3
  174. package/dist/safe-bash-command-pandoc/index.js +3 -3
  175. package/dist/safe-bash-command-pdfimages/index.js +147 -80
  176. package/dist/safe-bash-command-pdfinfo/index.js +147 -80
  177. package/dist/safe-bash-command-pdftk/index.js +147 -80
  178. package/dist/safe-bash-command-pdftoppm/index.js +147 -80
  179. package/dist/safe-bash-command-pdftotext/index.js +147 -80
  180. package/dist/safe-bash-command-qpdf/index.js +174 -101
  181. package/dist/safe-bash-command-sips/index.js +2 -2
  182. package/dist/safe-bash-command-soffice/index.js +1 -1
  183. package/dist/safe-bash-command-ssconvert/index.js +147 -80
  184. package/dist/safe-bash-command-wkhtmltopdf/index.js +147 -80
  185. package/dist/safe-bash-contracts/default-executor.d.ts +5 -0
  186. package/dist/safe-bash-contracts/default-executor.js +37 -0
  187. package/dist/safe-bash-contracts/http.d.ts +41 -0
  188. package/dist/safe-bash-contracts/http.js +6 -0
  189. package/dist/safe-bash-io-engine/commands/search/requirements.js +3 -3
  190. package/dist/safe-bash-io-engine/commands/text-programs/shared.js +3 -3
  191. package/dist/safe-bash-io-engine/gnu-information.d.ts +1 -1
  192. package/dist/safe-bash-io-engine/gnu-information.js +1 -1
  193. package/dist/safe-bash-io-engine/internal.js +2 -2
  194. package/dist/safe-bash-query-engine/index.js +3 -3
  195. package/dist/safe-bash-query-engine/interpreter.js +2 -2
  196. package/dist/safe-bash-query-engine/query-core.js +3 -3
  197. package/package.json +2 -2
  198. package/dist/safe-bash/chunks/chunk-2G2T5MEM.js +0 -14
  199. package/dist/safe-bash/chunks/chunk-2MUJ7RLZ.js +0 -409
  200. package/dist/safe-bash/chunks/chunk-GJWUEOT6.js +0 -14
  201. package/dist/safe-bash/chunks/chunk-H7MMJS26.js +0 -37
  202. package/dist/safe-bash/chunks/chunk-LAPF2XE6.js +0 -14
  203. package/dist/safe-bash/chunks/chunk-S2LSZFZ6.js +0 -758
  204. package/dist/safe-bash/chunks/chunk-T3VDYWKZ.js +0 -21
  205. package/dist/safe-bash/chunks/chunk-VUVKC6HV.js +0 -81
  206. package/dist/safe-bash/chunks/chunk-VYW4Q6KF.js +0 -12
  207. package/dist/safe-bash/command-chunks/{chunk-BJ6DGYJA.js → chunk-KNI4GRXF.js} +3 -3
@@ -27296,6 +27296,11 @@ function tokenizeCos(bytes, start = 0, end = bytes.length) {
27296
27296
  }
27297
27297
  return tokens;
27298
27298
  }
27299
+ function drainWork(work) {
27300
+ let step = work.next();
27301
+ while (!step.done) step = work.next();
27302
+ return step.value;
27303
+ }
27299
27304
  function bytesToString3(bytes) {
27300
27305
  if (typeof bytes !== "object" || bytes?.length === void 0) {
27301
27306
  throw new Error("Invalid argument for bytesToString");
@@ -27891,7 +27896,9 @@ function concatByteArrays(chunks) {
27891
27896
  }
27892
27897
  return out;
27893
27898
  }
27894
- function serializeCosDocument(options) {
27899
+ function* serializeCosDocumentSteps(options) {
27900
+ yield;
27901
+ let work = 0;
27895
27902
  const maxOutputBytes = options.maxOutputBytes ?? Infinity;
27896
27903
  const maxObjects = options.maxObjects ?? Infinity;
27897
27904
  const sorted = [...options.objects].sort((a, b) => a.objectNumber - b.objectNumber);
@@ -27914,6 +27921,7 @@ function serializeCosDocument(options) {
27914
27921
  const packable = [];
27915
27922
  const direct = [];
27916
27923
  for (const obj of sorted) {
27924
+ if (++work % 16 === 0) yield;
27917
27925
  const isLinearized = obj.value.kind === "dict" && dictGet(obj.value, "Linearized") !== void 0;
27918
27926
  if (obj.value.kind !== "stream" && obj.generationNumber === 0 && !isLinearized) {
27919
27927
  packable.push(obj);
@@ -27928,6 +27936,7 @@ function serializeCosDocument(options) {
27928
27936
  const headerPairs = [];
27929
27937
  let relOffset = 0;
27930
27938
  for (const pObj of packable) {
27939
+ if (++work % 16 === 0) yield;
27931
27940
  headerPairs.push(`${pObj.objectNumber} ${relOffset}`);
27932
27941
  const bBytes = serializeCosNodeBytes(pObj.value);
27933
27942
  const nl = textEncoder2.encode("\n");
@@ -27953,6 +27962,7 @@ function serializeCosDocument(options) {
27953
27962
  ];
27954
27963
  const directOffsets = /* @__PURE__ */ new Map();
27955
27964
  for (const dObj of allDirect) {
27965
+ if (++work % 16 === 0) yield;
27956
27966
  directOffsets.set(dObj.objectNumber, { offset, generation: dObj.generationNumber });
27957
27967
  const prefix = textEncoder2.encode(`${dObj.objectNumber} ${dObj.generationNumber} obj
27958
27968
  `);
@@ -27963,6 +27973,7 @@ function serializeCosDocument(options) {
27963
27973
  }
27964
27974
  const compressedMap = /* @__PURE__ */ new Map();
27965
27975
  for (let idx = 0; idx < packable.length; idx++) {
27976
+ if (++work % 16 === 0) yield;
27966
27977
  compressedMap.set(packable[idx].objectNumber, idx);
27967
27978
  }
27968
27979
  const xrefOffset2 = offset;
@@ -27980,6 +27991,7 @@ function serializeCosDocument(options) {
27980
27991
  };
27981
27992
  writeEntry7(0, 0, 0, 65535);
27982
27993
  for (let i = 1; i < size2; i++) {
27994
+ if (++work % 16 === 0) yield;
27983
27995
  if (i === xrefStmNum) {
27984
27996
  writeEntry7(i, 1, xrefOffset2, 0);
27985
27997
  } else if (compressedMap.has(i)) {
@@ -28060,6 +28072,7 @@ ${xrefOffset2}
28060
28072
  let pageCount = 0;
28061
28073
  let firstPageObjNum = options.rootRef.objectNumber;
28062
28074
  for (const o of sorted) {
28075
+ if (++work % 16 === 0) yield;
28063
28076
  if (o.value.kind === "dict") {
28064
28077
  const t = dictGet(o.value, "Type");
28065
28078
  if (t?.kind === "name" && t.decoded === "Page") {
@@ -28107,6 +28120,7 @@ ${xrefOffset2}
28107
28120
  }
28108
28121
  const objectOffsets = /* @__PURE__ */ new Map();
28109
28122
  for (const obj of sorted) {
28123
+ if (++work % 16 === 0) yield;
28110
28124
  objectOffsets.set(obj.objectNumber, { offset, generation: obj.generationNumber });
28111
28125
  let value = obj.value;
28112
28126
  if (options.normalizeContent && value.kind === "stream" && value.decodedBytes) {
@@ -28138,6 +28152,7 @@ ${xrefOffset2}
28138
28152
  0000000000 65535 f
28139
28153
  `;
28140
28154
  for (let i = 1; i < size; i++) {
28155
+ if (++work % 16 === 0) yield;
28141
28156
  const entry = objectOffsets.get(i);
28142
28157
  if (entry) {
28143
28158
  xrefText += `${String(entry.offset).padStart(10, "0")} ${String(entry.generation).padStart(5, "0")} n
@@ -28184,6 +28199,7 @@ ${xrefOffset}
28184
28199
  let endFirstPage = xrefOffset;
28185
28200
  const sortedOffsets = [...objectOffsets.entries()].sort((a, b) => a[1].offset - b[1].offset);
28186
28201
  for (let i = 0; i < sortedOffsets.length; i++) {
28202
+ if (++work % 16 === 0) yield;
28187
28203
  const [objNum, info3] = sortedOffsets[i];
28188
28204
  const nextOff = sortedOffsets[i + 1]?.[1].offset ?? xrefOffset;
28189
28205
  if (objNum === hintObjAfter.objectNumber) {
@@ -28217,6 +28233,9 @@ ${xrefOffset}
28217
28233
  }
28218
28234
  return fullBytes;
28219
28235
  }
28236
+ function serializeCosDocument(options) {
28237
+ return drainWork(serializeCosDocumentSteps(options));
28238
+ }
28220
28239
  function appendIncrementalRevision(originalBytes, doc, updatedObjects) {
28221
28240
  const chunks = [originalBytes, textEncoder2.encode("\n")];
28222
28241
  let offset = originalBytes.length + 1;
@@ -28490,48 +28509,30 @@ function encryptPdfBuffer(state, objectNumber, generationNumber, plaintext) {
28490
28509
  const objKey = md5Bytes([state.fileKey, suffix]).subarray(0, Math.min(16, state.fileKey.length + 5));
28491
28510
  return rc4Transform(objKey, plaintext);
28492
28511
  }
28493
- function transformNodeStringsAndStreams(node, transform, transformStream) {
28512
+ function* transformNodeStringsAndStreamsSteps(node, transform, transformStream) {
28513
+ yield;
28494
28514
  switch (node.kind) {
28495
28515
  case "string":
28496
- return {
28497
- kind: "string",
28498
- format: "hex",
28499
- bytes: transform(node.bytes)
28500
- };
28501
- case "array":
28502
- return {
28503
- kind: "array",
28504
- items: node.items.map((item) => transformNodeStringsAndStreams(item, transform, transformStream))
28505
- };
28516
+ return { kind: "string", format: "hex", bytes: transform(node.bytes) };
28517
+ case "array": {
28518
+ const items = [];
28519
+ for (const item of node.items) items.push(yield* transformNodeStringsAndStreamsSteps(item, transform, transformStream));
28520
+ return { kind: "array", items };
28521
+ }
28506
28522
  case "dict": {
28507
- const type = dictGet(node, "Type");
28508
- const fieldType = dictGet(node, "FT");
28509
- const byteRange = dictGet(node, "ByteRange");
28523
+ const type = dictGet(node, "Type"), fieldType = dictGet(node, "FT"), byteRange = dictGet(node, "ByteRange");
28510
28524
  const signature = type?.kind === "name" && type.decoded === "Sig" || fieldType?.kind === "name" && fieldType.decoded === "Sig" || byteRange?.kind === "array" && dictGet(node, "Filter")?.kind === "name";
28511
- return {
28512
- kind: "dict",
28513
- entries: node.entries.map((e) => ({
28514
- key: e.key,
28515
- value: signature && e.key.decoded === "Contents" ? e.value : transformNodeStringsAndStreams(e.value, transform, transformStream)
28516
- }))
28517
- };
28525
+ const entries = [];
28526
+ for (const e of node.entries) entries.push({ key: e.key, value: signature && e.key.decoded === "Contents" ? e.value : yield* transformNodeStringsAndStreamsSteps(e.value, transform, transformStream) });
28527
+ return { kind: "dict", entries };
28518
28528
  }
28519
28529
  case "stream": {
28520
28530
  const type = dictGet(node.dict, "Type");
28521
28531
  if (type?.kind === "name" && type.decoded === "XRef") return node;
28522
28532
  const stream = transformStream ? transformStream(node) : { ...node, rawBytes: transform(node.rawBytes) };
28523
- const updatedDict = {
28524
- kind: "dict",
28525
- entries: stream.dict.entries.map((e) => ({
28526
- key: e.key,
28527
- value: e.key.decoded === "Length" ? cosNumber(stream.rawBytes.length) : transformNodeStringsAndStreams(e.value, transform, transformStream)
28528
- }))
28529
- };
28530
- return {
28531
- kind: "stream",
28532
- dict: updatedDict,
28533
- rawBytes: stream.rawBytes
28534
- };
28533
+ const entries = [];
28534
+ for (const e of stream.dict.entries) entries.push({ key: e.key, value: e.key.decoded === "Length" ? cosNumber(stream.rawBytes.length) : yield* transformNodeStringsAndStreamsSteps(e.value, transform, transformStream) });
28535
+ return { kind: "stream", dict: { kind: "dict", entries }, rawBytes: stream.rawBytes };
28535
28536
  }
28536
28537
  default:
28537
28538
  return node;
@@ -28600,7 +28601,8 @@ function createR6Encryption(userPassword, ownerPassword, pMask) {
28600
28601
  StrF: cosName("StdCF")
28601
28602
  }) };
28602
28603
  }
28603
- function encryptCosDocument(doc, options = {}) {
28604
+ function* encryptCosDocumentSteps(doc, options = {}) {
28605
+ yield;
28604
28606
  const userPassword = options.userPassword ?? "";
28605
28607
  const ownerPassword = options.ownerPassword ?? userPassword;
28606
28608
  const revision = options.revision ?? 6;
@@ -28622,14 +28624,15 @@ function encryptCosDocument(doc, options = {}) {
28622
28624
  const encryptObjNum = maxObjNum + 1;
28623
28625
  const encryptedObjects = [];
28624
28626
  for (const obj of doc.objects.values()) {
28625
- const transformed = transformNodeStringsAndStreams(
28627
+ yield;
28628
+ const transformed = yield* transformNodeStringsAndStreamsSteps(
28626
28629
  obj.value,
28627
28630
  (plain) => encryptPdfBuffer(state, obj.objectNumber, obj.generationNumber, plain)
28628
28631
  );
28629
28632
  encryptedObjects.push({ objectNumber: obj.objectNumber, generationNumber: obj.generationNumber, value: transformed });
28630
28633
  }
28631
28634
  encryptedObjects.push({ objectNumber: encryptObjNum, generationNumber: 0, value: encryptDict });
28632
- return serializeCosDocument({
28635
+ return yield* serializeCosDocumentSteps({
28633
28636
  objects: encryptedObjects,
28634
28637
  rootRef: doc.rootRef,
28635
28638
  infoRef: doc.infoRef,
@@ -28679,17 +28682,19 @@ function decryptStream(doc, stream, transform) {
28679
28682
  }
28680
28683
  return { kind: "stream", dict, rawBytes: bytes };
28681
28684
  }
28682
- function decryptCosDocument(doc, state) {
28685
+ function* decryptCosDocumentSteps(doc, state) {
28686
+ yield;
28683
28687
  const encryptObjNum = doc.encryptRef?.objectNumber;
28684
28688
  const handler = securityHandlers.get(state);
28685
28689
  for (const [num, obj] of doc.objects.entries()) {
28690
+ yield;
28686
28691
  if (num === encryptObjNum || handler?.plaintextObjects.has(num)) continue;
28687
28692
  if (obj.value.kind === "stream") {
28688
28693
  const type = doc.resolve(dictGet(obj.value.dict, "Type"));
28689
28694
  if (type?.kind === "name" && (type.decoded === "XRef" || type.decoded === "Metadata" && !state.encryptMetadata)) continue;
28690
28695
  }
28691
28696
  const transform = handler?.factory.createCipherTransform(obj.objectNumber, obj.generationNumber);
28692
- const decrypted = transformNodeStringsAndStreams(
28697
+ const decrypted = yield* transformNodeStringsAndStreamsSteps(
28693
28698
  obj.value,
28694
28699
  (cipher) => decryptPdfBuffer(state, obj.objectNumber, obj.generationNumber, cipher),
28695
28700
  transform ? (stream) => decryptStream(doc, stream, transform) : void 0
@@ -28803,9 +28808,12 @@ var ParsedCosDocument = class {
28803
28808
  return void 0;
28804
28809
  }
28805
28810
  };
28806
- function parseNodeFromLexer(lexer, bytes, maxDepth, repair = false) {
28811
+ function* parseNodeFromLexerSteps(lexer, bytes, maxDepth, repair = false) {
28812
+ yield;
28813
+ let work = 0;
28807
28814
  const stack = [];
28808
28815
  while (true) {
28816
+ if (++work % 16 === 0) yield;
28809
28817
  const tok = lexer.nextToken();
28810
28818
  const parent = stack.at(-1);
28811
28819
  if (!tok) {
@@ -29001,7 +29009,8 @@ function parseHeaderVersion(bytes) {
29001
29009
  }
29002
29010
  return head.slice(idx + 5, idx + 8);
29003
29011
  }
29004
- function parseObjectAtOffset(bytes, offset, maxRecursionDepth, repair = false) {
29012
+ function* parseObjectAtOffsetSteps(bytes, offset, maxRecursionDepth, repair = false) {
29013
+ yield;
29005
29014
  const lexer = new CosByteLexer(bytes, offset);
29006
29015
  const objNumTok = lexer.nextToken();
29007
29016
  const genNumTok = lexer.nextToken();
@@ -29009,7 +29018,7 @@ function parseObjectAtOffset(bytes, offset, maxRecursionDepth, repair = false) {
29009
29018
  if (objNumTok?.kind !== "number" || genNumTok?.kind !== "number" || objKwTok?.kind !== "keyword" || objKwTok.value !== "obj") {
29010
29019
  throw new PdfError("E_PARSE", `Malformed indirect object header at byte offset ${offset}`);
29011
29020
  }
29012
- const value = parseNodeFromLexer(lexer, bytes, maxRecursionDepth, repair);
29021
+ const value = yield* parseNodeFromLexerSteps(lexer, bytes, maxRecursionDepth, repair);
29013
29022
  if (!value) {
29014
29023
  throw new PdfError("E_PARSE", `Empty indirect object ${objNumTok.value} at offset ${offset}`);
29015
29024
  }
@@ -29020,7 +29029,9 @@ function parseObjectAtOffset(bytes, offset, maxRecursionDepth, repair = false) {
29020
29029
  span: { start: objNumTok.span.start, end: lexer.offset }
29021
29030
  };
29022
29031
  }
29023
- function parseXrefRevisionAt(bytes, xrefOffset, maxDecompressedBytes, maxRecursionDepth, maxObjects) {
29032
+ function* parseXrefRevisionAtSteps(bytes, xrefOffset, maxDecompressedBytes, maxRecursionDepth, maxObjects) {
29033
+ yield;
29034
+ let work = 0;
29024
29035
  if (xrefOffset < 0 || xrefOffset >= bytes.length) {
29025
29036
  throw new PdfError("E_PARSE", `Invalid xref offset: ${xrefOffset}`);
29026
29037
  }
@@ -29032,6 +29043,7 @@ function parseXrefRevisionAt(bytes, xrefOffset, maxDecompressedBytes, maxRecursi
29032
29043
  if (firstTok.kind === "keyword" && firstTok.value === "xref") {
29033
29044
  const entries2 = /* @__PURE__ */ new Map();
29034
29045
  while (true) {
29046
+ if (++work % 16 === 0) yield;
29035
29047
  const saved = lexer.offset;
29036
29048
  const tok = lexer.nextToken();
29037
29049
  if (!tok) {
@@ -29055,6 +29067,7 @@ function parseXrefRevisionAt(bytes, xrefOffset, maxDecompressedBytes, maxRecursi
29055
29067
  }
29056
29068
  if (count > maxObjects + 1) throw new PdfError("E_LIMIT", "PDF object count limit exceeded while reading xref entries");
29057
29069
  for (let i = 0; i < count; i++) {
29070
+ if (++work % 16 === 0) yield;
29058
29071
  const offTok = lexer.nextToken();
29059
29072
  const genTok = lexer.nextToken();
29060
29073
  const flagTok = lexer.nextToken();
@@ -29080,7 +29093,7 @@ function parseXrefRevisionAt(bytes, xrefOffset, maxDecompressedBytes, maxRecursi
29080
29093
  if (entries2.size > maxObjects + 1) throw new PdfError("E_LIMIT", "PDF object count limit exceeded while reading xref entries");
29081
29094
  }
29082
29095
  }
29083
- const trailerNode = parseNodeFromLexer(lexer, bytes, maxRecursionDepth);
29096
+ const trailerNode = yield* parseNodeFromLexerSteps(lexer, bytes, maxRecursionDepth);
29084
29097
  if (!trailerNode || trailerNode.kind !== "dict") {
29085
29098
  throw new PdfError("E_PARSE", "Missing trailer dictionary after xref table");
29086
29099
  }
@@ -29092,7 +29105,7 @@ function parseXrefRevisionAt(bytes, xrefOffset, maxDecompressedBytes, maxRecursi
29092
29105
  previousXrefOffset: prevNode2?.kind === "number" ? prevNode2.value : void 0
29093
29106
  };
29094
29107
  }
29095
- const xrefObj = parseObjectAtOffset(bytes, xrefOffset, maxRecursionDepth);
29108
+ const xrefObj = yield* parseObjectAtOffsetSteps(bytes, xrefOffset, maxRecursionDepth);
29096
29109
  if (xrefObj.value.kind !== "stream") {
29097
29110
  throw new PdfError("E_PARSE", `Expected xref table or XRef stream at offset ${xrefOffset}`);
29098
29111
  }
@@ -29113,6 +29126,7 @@ function parseXrefRevisionAt(bytes, xrefOffset, maxDecompressedBytes, maxRecursi
29113
29126
  if (indexArray) {
29114
29127
  if (indexArray.kind !== "array" || indexArray.items.length % 2 !== 0) throw new PdfError("E_PARSE", "Invalid XRef range fields");
29115
29128
  for (let i = 0; i < indexArray.items.length; i += 2) {
29129
+ if (++work % 16 === 0) yield;
29116
29130
  const first = indexArray.items[i];
29117
29131
  const count = indexArray.items[i + 1];
29118
29132
  if (first?.kind !== "number" || count?.kind !== "number" || !Number.isSafeInteger(first.value) || first.value < 0 || !Number.isSafeInteger(count.value) || count.value < 0 || !Number.isSafeInteger(first.value + count.value)) {
@@ -29135,9 +29149,11 @@ function parseXrefRevisionAt(bytes, xrefOffset, maxDecompressedBytes, maxRecursi
29135
29149
  return v;
29136
29150
  };
29137
29151
  for (const [startObj, count] of subsections) {
29152
+ if (++work % 16 === 0) yield;
29138
29153
  if (count > (decoded.length - pos) / stride) throw new PdfError("E_PARSE", "Truncated XRef stream");
29139
29154
  if (count > maxObjects + 1) throw new PdfError("E_LIMIT", "PDF object count limit exceeded while reading xref entries");
29140
29155
  for (let i = 0; i < count; i++) {
29156
+ if (++work % 16 === 0) yield;
29141
29157
  const objNum = startObj + i;
29142
29158
  const field0 = w0 > 0 ? readInt(w0) : 1;
29143
29159
  const field1 = readInt(w1);
@@ -29183,12 +29199,16 @@ function isAsciiWhitespace(ch3) {
29183
29199
  function isAsciiDigit(ch3) {
29184
29200
  return ch3 >= 48 && ch3 <= 57;
29185
29201
  }
29186
- function repairScanCosDocument(bytes, maxObjects, maxRecursionDepth) {
29202
+ function* repairScanCosDocumentSteps(bytes, maxObjects, maxRecursionDepth) {
29203
+ yield;
29204
+ let work = 0;
29187
29205
  const objects = /* @__PURE__ */ new Map();
29188
29206
  const trailers = [];
29189
29207
  let pos = 0;
29190
29208
  while (pos < bytes.length) {
29209
+ if (++work % 16 === 0) yield;
29191
29210
  while (pos < bytes.length && !isAsciiDigit(bytes[pos])) {
29211
+ if (++work % 16 === 0) yield;
29192
29212
  if (bytes[pos] === 37) {
29193
29213
  while (pos < bytes.length && bytes[pos] !== 10 && bytes[pos] !== 13) pos++;
29194
29214
  continue;
@@ -29198,7 +29218,7 @@ function repairScanCosDocument(bytes, maxObjects, maxRecursionDepth) {
29198
29218
  try {
29199
29219
  const token = lexer.nextToken();
29200
29220
  if (token?.kind === "keyword" && token.value === "trailer") {
29201
- const trailer = parseNodeFromLexer(lexer, bytes, maxRecursionDepth, true);
29221
+ const trailer = yield* parseNodeFromLexerSteps(lexer, bytes, maxRecursionDepth, true);
29202
29222
  if (trailer?.kind === "dict") trailers.push(trailer);
29203
29223
  pos = lexer.offset;
29204
29224
  continue;
@@ -29231,7 +29251,7 @@ function repairScanCosDocument(bytes, maxObjects, maxRecursionDepth) {
29231
29251
  bytes[pos + 3] === 40)) {
29232
29252
  pos += 3;
29233
29253
  try {
29234
- const parsed = parseObjectAtOffset(bytes, headerStart, maxRecursionDepth, true);
29254
+ const parsed = yield* parseObjectAtOffsetSteps(bytes, headerStart, maxRecursionDepth, true);
29235
29255
  objects.set(parsed.objectNumber, parsed);
29236
29256
  if (parsed.value.kind === "stream") {
29237
29257
  const type = dictGet(parsed.value.dict, "Type");
@@ -29248,13 +29268,17 @@ function repairScanCosDocument(bytes, maxObjects, maxRecursionDepth) {
29248
29268
  }
29249
29269
  return { objects, trailers };
29250
29270
  }
29251
- function unpackRecoveredObjects(objects, maxObjects, maxDecompressedBytes, maxRecursionDepth) {
29271
+ function* unpackRecoveredObjectsSteps(objects, maxObjects, maxDecompressedBytes, maxRecursionDepth) {
29272
+ yield;
29273
+ let work = 0;
29252
29274
  for (const obj of [...objects.values()]) {
29275
+ if (++work % 16 === 0) yield;
29253
29276
  if (obj.value.kind === "stream") {
29254
29277
  const t = dictGet(obj.value.dict, "Type");
29255
29278
  if (t?.kind === "name" && t.decoded === "ObjStm") {
29256
29279
  try {
29257
- for (const [unpackedNum, unpackedVal] of unpackObjectStream(obj.value, maxDecompressedBytes, maxRecursionDepth, true).entries()) {
29280
+ for (const [unpackedNum, unpackedVal] of (yield* unpackObjectStreamSteps(obj.value, maxDecompressedBytes, maxRecursionDepth, true)).entries()) {
29281
+ if (++work % 16 === 0) yield;
29258
29282
  if (!objects.has(unpackedNum)) {
29259
29283
  objects.set(unpackedNum, {
29260
29284
  objectNumber: unpackedNum,
@@ -29290,7 +29314,9 @@ function recoveredReferences(objects) {
29290
29314
  }
29291
29315
  return { ...rootRef ? { rootRef } : {}, ...infoRef ? { infoRef } : {} };
29292
29316
  }
29293
- function unpackObjectStream(streamObj, maxDecompressedBytes, maxRecursionDepth, repair = false) {
29317
+ function* unpackObjectStreamSteps(streamObj, maxDecompressedBytes, maxRecursionDepth, repair = false) {
29318
+ yield;
29319
+ let work = 0;
29294
29320
  const nNode = dictGet(streamObj.dict, "N");
29295
29321
  const firstNode = dictGet(streamObj.dict, "First");
29296
29322
  if (nNode?.kind !== "number" || firstNode?.kind !== "number") {
@@ -29300,6 +29326,7 @@ function unpackObjectStream(streamObj, maxDecompressedBytes, maxRecursionDepth,
29300
29326
  const headerLexer = new CosByteLexer(decoded, 0);
29301
29327
  const pairs = [];
29302
29328
  for (let i = 0; i < nNode.value; i++) {
29329
+ if (++work % 16 === 0) yield;
29303
29330
  const numTok = headerLexer.nextToken();
29304
29331
  const offTok = headerLexer.nextToken();
29305
29332
  if (numTok?.kind === "number" && offTok?.kind === "number") {
@@ -29308,9 +29335,10 @@ function unpackObjectStream(streamObj, maxDecompressedBytes, maxRecursionDepth,
29308
29335
  }
29309
29336
  const result = /* @__PURE__ */ new Map();
29310
29337
  for (const pair of pairs) {
29338
+ if (++work % 16 === 0) yield;
29311
29339
  try {
29312
29340
  const valLexer = new CosByteLexer(decoded, firstNode.value + pair.relativeOffset);
29313
- const node = parseNodeFromLexer(valLexer, decoded, maxRecursionDepth, repair);
29341
+ const node = yield* parseNodeFromLexerSteps(valLexer, decoded, maxRecursionDepth, repair);
29314
29342
  if (node) {
29315
29343
  result.set(pair.objectNumber, node);
29316
29344
  }
@@ -29320,7 +29348,9 @@ function unpackObjectStream(streamObj, maxDecompressedBytes, maxRecursionDepth,
29320
29348
  }
29321
29349
  return result;
29322
29350
  }
29323
- function parseCosDocument(bytes, options = {}) {
29351
+ function* parseCosDocumentSteps(bytes, options = {}) {
29352
+ yield;
29353
+ let work = 0;
29324
29354
  const version = parseHeaderVersion(bytes);
29325
29355
  const recovery = options.recovery ?? "strict";
29326
29356
  const maxObjects = options.maxObjects ?? Infinity;
@@ -29355,10 +29385,12 @@ function parseCosDocument(bytes, options = {}) {
29355
29385
  let currentXrefOffset = offsetTok.value;
29356
29386
  const visitedOffsets = /* @__PURE__ */ new Set();
29357
29387
  while (currentXrefOffset !== void 0 && !visitedOffsets.has(currentXrefOffset)) {
29388
+ if (++work % 16 === 0) yield;
29358
29389
  visitedOffsets.add(currentXrefOffset);
29359
- const rev = parseXrefRevisionAt(bytes, currentXrefOffset, maxDecompressedBytes, maxRecursionDepth, maxObjects);
29390
+ const rev = yield* parseXrefRevisionAtSteps(bytes, currentXrefOffset, maxDecompressedBytes, maxRecursionDepth, maxObjects);
29360
29391
  revisions.push(rev);
29361
29392
  for (const [num, entry] of rev.entries.entries()) {
29393
+ if (++work % 16 === 0) yield;
29362
29394
  if (!mergedXref.has(num)) {
29363
29395
  mergedXref.set(num, entry);
29364
29396
  if (mergedXref.size > maxObjects + 1) throw new PdfError("E_LIMIT", "PDF object count limit exceeded while reading xref entries");
@@ -29391,8 +29423,9 @@ function parseCosDocument(bytes, options = {}) {
29391
29423
  if (!useRepair && rootRef) {
29392
29424
  try {
29393
29425
  for (const [objNum, entry] of mergedXref.entries()) {
29426
+ if (++work % 16 === 0) yield;
29394
29427
  if (entry.type !== "uncompressed") continue;
29395
- const parsed = parseObjectAtOffset(bytes, entry.offset ?? 0, maxRecursionDepth, recovery === "repair");
29428
+ const parsed = yield* parseObjectAtOffsetSteps(bytes, entry.offset ?? 0, maxRecursionDepth, recovery === "repair");
29396
29429
  if (parsed.objectNumber !== objNum || parsed.generationNumber !== (entry.generationNumber ?? 0)) {
29397
29430
  throw new PdfError("E_PARSE", `Bad uncompressed XRef entry for object ${objNum}`);
29398
29431
  }
@@ -29410,7 +29443,7 @@ function parseCosDocument(bytes, options = {}) {
29410
29443
  throw new PdfError("E_PARSE", "PDF trailer missing /Root reference");
29411
29444
  }
29412
29445
  useRepair = true;
29413
- const scanned = repairScanCosDocument(bytes, maxObjects, maxRecursionDepth);
29446
+ const scanned = yield* repairScanCosDocumentSteps(bytes, maxObjects, maxRecursionDepth);
29414
29447
  objects = scanned.objects;
29415
29448
  revisions.length = 0;
29416
29449
  mergedXref.clear();
@@ -29445,7 +29478,7 @@ function parseCosDocument(bytes, options = {}) {
29445
29478
  encryptNode = encrypt?.kind === "ref" || encrypt?.kind === "dict" ? encrypt : void 0;
29446
29479
  encryptRef = encrypt?.kind === "ref" ? encrypt : void 0;
29447
29480
  idArray = id?.kind === "array" ? id : void 0;
29448
- if (!rootRef && !encryptNode) unpackRecoveredObjects(objects, maxObjects, maxDecompressedBytes, maxRecursionDepth);
29481
+ if (!rootRef && !encryptNode) yield* unpackRecoveredObjectsSteps(objects, maxObjects, maxDecompressedBytes, maxRecursionDepth);
29449
29482
  const fallback = recoveredReferences(objects);
29450
29483
  rootRef ??= fallback.rootRef;
29451
29484
  infoRef ??= fallback.infoRef;
@@ -29480,20 +29513,21 @@ function parseCosDocument(bytes, options = {}) {
29480
29513
  maxRecursionDepth
29481
29514
  });
29482
29515
  doc.encryption = encState;
29483
- decryptCosDocument(doc, encState);
29516
+ yield* decryptCosDocumentSteps(doc, encState);
29484
29517
  }
29485
29518
  if (useRepair) {
29486
- unpackRecoveredObjects(objects, maxObjects, maxDecompressedBytes, maxRecursionDepth);
29519
+ yield* unpackRecoveredObjectsSteps(objects, maxObjects, maxDecompressedBytes, maxRecursionDepth);
29487
29520
  doc.infoRef ??= recoveredReferences(objects).infoRef;
29488
29521
  }
29489
29522
  const objStmCache = /* @__PURE__ */ new Map();
29490
29523
  for (const [objNum, entry] of mergedXref.entries()) {
29524
+ if (++work % 16 === 0) yield;
29491
29525
  if (entry.type === "compressed" && entry.objectStreamNumber !== void 0) {
29492
29526
  let unpacked = objStmCache.get(entry.objectStreamNumber);
29493
29527
  if (!unpacked) {
29494
29528
  const stmObj = objects.get(entry.objectStreamNumber)?.value;
29495
29529
  if (stmObj?.kind === "stream") {
29496
- unpacked = unpackObjectStream(stmObj, maxDecompressedBytes, maxRecursionDepth, recovery === "repair");
29530
+ unpacked = yield* unpackObjectStreamSteps(stmObj, maxDecompressedBytes, maxRecursionDepth, recovery === "repair");
29497
29531
  objStmCache.set(entry.objectStreamNumber, unpacked);
29498
29532
  }
29499
29533
  }
@@ -29510,6 +29544,9 @@ function parseCosDocument(bytes, options = {}) {
29510
29544
  }
29511
29545
  return doc;
29512
29546
  }
29547
+ function parseCosDocument(bytes, options = {}) {
29548
+ return drainWork(parseCosDocumentSteps(bytes, options));
29549
+ }
29513
29550
  var WIN_ANSI_HIGH_BYTES = {
29514
29551
  128: 8364,
29515
29552
  130: 8218,
@@ -40540,7 +40577,8 @@ function resolveInheritedFieldEntry(doc, dict, key) {
40540
40577
  }
40541
40578
  return void 0;
40542
40579
  }
40543
- function collectFieldDicts(doc, node, prefix = "", out = [], parentFt = "", parentFf = 0, parentQ = 0, parentMaxLen) {
40580
+ function* collectFieldDictsSteps(doc, node, prefix = "", out = [], parentFt = "", parentFf = 0, parentQ = 0, parentMaxLen, yieldState = { work: 0 }) {
40581
+ if (++yieldState.work % 256 === 0) yield;
40544
40582
  const dict = doc.resolveDict(node);
40545
40583
  if (!dict) return out;
40546
40584
  const tNode = doc.resolve(dictGet(dict, "T"));
@@ -40573,7 +40611,8 @@ function collectFieldDicts(doc, node, prefix = "", out = [], parentFt = "", pare
40573
40611
  return out;
40574
40612
  }
40575
40613
  for (const kid of kidsArr.items) {
40576
- collectFieldDicts(doc, kid, fullName, out, currentFt, currentFf, currentQ, currentMaxLen);
40614
+ if (++yieldState.work % 16 === 0) yield;
40615
+ yield* collectFieldDictsSteps(doc, kid, fullName, out, currentFt, currentFf, currentQ, currentMaxLen, yieldState);
40577
40616
  }
40578
40617
  } else if (fullName) {
40579
40618
  out.push({
@@ -41014,6 +41053,9 @@ function escapePdfLiteralString(str) {
41014
41053
  }
41015
41054
  return out;
41016
41055
  }
41056
+ function collectFieldDicts(doc, node, prefix = "", out = [], parentFt = "", parentFf = 0, parentQ = 0, parentMaxLen) {
41057
+ drainWork(collectFieldDictsSteps(doc, node, prefix, out, parentFt, parentFf, parentQ, parentMaxLen));
41058
+ }
41017
41059
  var PdfPage = class {
41018
41060
  cosDoc;
41019
41061
  pageRef;
@@ -44063,14 +44105,18 @@ var PdfDocument = class _PdfDocument {
44063
44105
  });
44064
44106
  return new _PdfDocument(parseCosDocument(rawBytes));
44065
44107
  }
44066
- static load(bytes, options) {
44108
+ static *loadSteps(bytes, options) {
44109
+ yield;
44067
44110
  return new _PdfDocument(
44068
- parseCosDocument(bytes, {
44111
+ yield* parseCosDocumentSteps(bytes, {
44069
44112
  ...options,
44070
44113
  recovery: options?.recovery ?? "repair"
44071
44114
  })
44072
44115
  );
44073
44116
  }
44117
+ static load(bytes, options) {
44118
+ return drainWork(_PdfDocument.loadSteps(bytes, options));
44119
+ }
44074
44120
  rebuildPagesList() {
44075
44121
  const catalog = this.cos.resolveDict(this.cos.rootRef);
44076
44122
  const pagesNode = catalog ? dictGet(catalog, "Pages") : void 0;
@@ -44152,20 +44198,30 @@ var PdfDocument = class _PdfDocument {
44152
44198
  this.pages.splice(index, 1);
44153
44199
  this.syncPageTree();
44154
44200
  }
44155
- copyPagesFrom(sourceDoc, indices) {
44201
+ *copyPagesFromSteps(sourceDoc, indices) {
44202
+ function* cloneItems(items) {
44203
+ const result = [];
44204
+ for (const item of items) result.push(yield* cloneNode(item));
44205
+ return result;
44206
+ }
44207
+ yield;
44208
+ let work = 0;
44156
44209
  const memo = /* @__PURE__ */ new Map();
44157
44210
  const sourcePageObjNums = /* @__PURE__ */ new Set();
44158
44211
  for (let i = 0; i < sourceDoc.getPageCount(); i++) {
44212
+ if (++work % 16 === 0) yield;
44159
44213
  sourcePageObjNums.add(sourceDoc.getPage(i).ref.objectNumber);
44160
44214
  }
44161
44215
  const targetPageRefs = [];
44162
44216
  for (const idx of indices) {
44217
+ if (++work % 16 === 0) yield;
44163
44218
  const srcPage = sourceDoc.getPage(idx);
44164
44219
  const pageRef = this.cos.allocateObject({ kind: "null" });
44165
44220
  targetPageRefs.push(pageRef);
44166
44221
  memo.set(srcPage.ref.objectNumber, pageRef);
44167
44222
  }
44168
- const cloneNode = (node) => {
44223
+ const cloneNode = function* (node) {
44224
+ if (++work % 16 === 0) yield;
44169
44225
  if (node.kind === "ref") {
44170
44226
  const existing = memo.get(node.objectNumber);
44171
44227
  if (existing) return existing;
@@ -44176,12 +44232,12 @@ var PdfDocument = class _PdfDocument {
44176
44232
  if (!target) return cosRef(0);
44177
44233
  const placeholderRef = this.cos.allocateObject({ kind: "null" });
44178
44234
  memo.set(node.objectNumber, placeholderRef);
44179
- const clonedTarget = cloneNode(target);
44235
+ const clonedTarget = yield* cloneNode(target);
44180
44236
  this.cos.setObject(placeholderRef.objectNumber, clonedTarget, 0);
44181
44237
  return placeholderRef;
44182
44238
  }
44183
44239
  if (node.kind === "array") {
44184
- return cosArray(node.items.map(cloneNode));
44240
+ return cosArray(yield* cloneItems(node.items));
44185
44241
  }
44186
44242
  if (node.kind === "dict") {
44187
44243
  const typeEntry = dictGet(node, "Type");
@@ -44191,13 +44247,13 @@ var PdfDocument = class _PdfDocument {
44191
44247
  if (isPageTreeNode && entry.key.decoded === "Parent") continue;
44192
44248
  newEntries.push({
44193
44249
  key: { ...entry.key },
44194
- value: cloneNode(entry.value)
44250
+ value: yield* cloneNode(entry.value)
44195
44251
  });
44196
44252
  }
44197
44253
  return { kind: "dict", entries: newEntries };
44198
44254
  }
44199
44255
  if (node.kind === "stream") {
44200
- const clonedDict = cloneNode(node.dict);
44256
+ const clonedDict = yield* cloneNode(node.dict);
44201
44257
  return {
44202
44258
  kind: "stream",
44203
44259
  dict: clonedDict,
@@ -44206,11 +44262,12 @@ var PdfDocument = class _PdfDocument {
44206
44262
  };
44207
44263
  }
44208
44264
  return node;
44209
- };
44265
+ }.bind(this);
44210
44266
  const copiedPages = [];
44211
44267
  for (const [position, idx] of indices.entries()) {
44268
+ if (++work % 16 === 0) yield;
44212
44269
  const srcPage = sourceDoc.getPage(idx);
44213
- const clonedPageDict = cloneNode(srcPage.pageDict);
44270
+ const clonedPageDict = yield* cloneNode(srcPage.pageDict);
44214
44271
  const size = srcPage.getSize();
44215
44272
  if (!dictGet(clonedPageDict, "MediaBox")) {
44216
44273
  dictSet(
@@ -44220,13 +44277,14 @@ var PdfDocument = class _PdfDocument {
44220
44277
  );
44221
44278
  }
44222
44279
  if (!dictGet(clonedPageDict, "Resources")) {
44223
- dictSet(clonedPageDict, "Resources", cloneNode(srcPage.getResourcesDict()));
44280
+ dictSet(clonedPageDict, "Resources", yield* cloneNode(srcPage.getResourcesDict()));
44224
44281
  }
44225
44282
  if (!dictGet(clonedPageDict, "Rotate") && srcPage.getRotation() !== 0) {
44226
44283
  dictSet(clonedPageDict, "Rotate", cosNumber(srcPage.getRotation()));
44227
44284
  }
44228
44285
  const inheritedBoxKeys = ["CropBox", "BleedBox", "TrimBox", "ArtBox"];
44229
44286
  for (const boxKey of inheritedBoxKeys) {
44287
+ if (++work % 16 === 0) yield;
44230
44288
  if (!dictGet(clonedPageDict, boxKey)) {
44231
44289
  const boxVal = boxKey === "CropBox" ? srcPage.getCropBox() : boxKey === "BleedBox" ? srcPage.getBleedBox() : boxKey === "TrimBox" ? srcPage.getTrimBox() : srcPage.getArtBox();
44232
44290
  if (boxVal[0] !== 0 || boxVal[1] !== 0 || boxVal[2] !== size.width || boxVal[3] !== size.height) {
@@ -44268,8 +44326,9 @@ var PdfDocument = class _PdfDocument {
44268
44326
  };
44269
44327
  const clonedRootFieldRefs = [];
44270
44328
  for (const item of srcFieldsArr.items) {
44329
+ if (++work % 16 === 0) yield;
44271
44330
  if (!hasClonedDescendant(item)) continue;
44272
- const cloned = cloneNode(item);
44331
+ const cloned = yield* cloneNode(item);
44273
44332
  if (cloned.kind === "ref") {
44274
44333
  const clonedDict = this.cos.resolveDict(cloned);
44275
44334
  const kidsArr = clonedDict ? this.cos.resolveArray(dictGet(clonedDict, "Kids")) : void 0;
@@ -44303,6 +44362,7 @@ var PdfDocument = class _PdfDocument {
44303
44362
  dstFields.items.filter((x) => x.kind === "ref").map((x) => x.objectNumber)
44304
44363
  );
44305
44364
  for (const fRef of clonedRootFieldRefs) {
44365
+ if (++work % 16 === 0) yield;
44306
44366
  if (!existingNums.has(fRef.objectNumber)) {
44307
44367
  dstFields.items.push(fRef);
44308
44368
  existingNums.add(fRef.objectNumber);
@@ -44310,11 +44370,11 @@ var PdfDocument = class _PdfDocument {
44310
44370
  }
44311
44371
  const srcDr = dictGet(srcAcroForm, "DR");
44312
44372
  if (srcDr && !dictGet(dstAcroForm, "DR")) {
44313
- dictSet(dstAcroForm, "DR", cloneNode(srcDr));
44373
+ dictSet(dstAcroForm, "DR", yield* cloneNode(srcDr));
44314
44374
  }
44315
44375
  const srcDa = dictGet(srcAcroForm, "DA");
44316
44376
  if (srcDa && !dictGet(dstAcroForm, "DA")) {
44317
- dictSet(dstAcroForm, "DA", cloneNode(srcDa));
44377
+ dictSet(dstAcroForm, "DA", yield* cloneNode(srcDa));
44318
44378
  }
44319
44379
  }
44320
44380
  }
@@ -44323,12 +44383,15 @@ var PdfDocument = class _PdfDocument {
44323
44383
  if (srcOcProps) {
44324
44384
  const dstCatalog = this.cos.resolveDict(this.cos.rootRef);
44325
44385
  if (dstCatalog && !dictGet(dstCatalog, "OCProperties")) {
44326
- dictSet(dstCatalog, "OCProperties", cloneNode(srcOcProps));
44386
+ dictSet(dstCatalog, "OCProperties", yield* cloneNode(srcOcProps));
44327
44387
  }
44328
44388
  }
44329
44389
  this.syncPageTree();
44330
44390
  return copiedPages;
44331
44391
  }
44392
+ copyPagesFrom(sourceDoc, indices) {
44393
+ return drainWork(this.copyPagesFromSteps(sourceDoc, indices));
44394
+ }
44332
44395
  embedStandardFont(fontName) {
44333
44396
  return createStandardFontHandle(fontName);
44334
44397
  }
@@ -44528,14 +44591,15 @@ var PdfDocument = class _PdfDocument {
44528
44591
  });
44529
44592
  return buildSemanticAstFromPages(extractedPages, tablesByPage, displayLists);
44530
44593
  }
44531
- save(options = {}) {
44594
+ *saveSteps(options = {}) {
44595
+ yield;
44532
44596
  this.syncPageTree();
44533
44597
  if (this.cos.requiresFullRewrite) {
44534
44598
  pruneUnusedXObjects(this.cos, this.pages);
44535
44599
  discardUnreachableObjects(this.cos);
44536
44600
  }
44537
44601
  if (options.encrypt) {
44538
- return encryptCosDocument(this.cos, options.encrypt);
44602
+ return yield* encryptCosDocumentSteps(this.cos, options.encrypt);
44539
44603
  }
44540
44604
  const allObjects = [...this.cos.objects.values()].sort(
44541
44605
  (a, b) => a.objectNumber - b.objectNumber
@@ -44543,7 +44607,7 @@ var PdfDocument = class _PdfDocument {
44543
44607
  if (options.incremental && !this.cos.requiresFullRewrite && this.cos.bytes.length > 0) {
44544
44608
  return appendIncrementalRevision(this.cos.bytes, this.cos, allObjects);
44545
44609
  }
44546
- return serializeCosDocument({
44610
+ return yield* serializeCosDocumentSteps({
44547
44611
  objects: allObjects,
44548
44612
  rootRef: this.cos.rootRef,
44549
44613
  infoRef: this.cos.infoRef,
@@ -44554,6 +44618,9 @@ var PdfDocument = class _PdfDocument {
44554
44618
  linearize: options.linearize
44555
44619
  });
44556
44620
  }
44621
+ save(options = {}) {
44622
+ return drainWork(this.saveSteps(options));
44623
+ }
44557
44624
  };
44558
44625
  var VALUE_FLAGS = /* @__PURE__ */ new Set([
44559
44626
  "-r",