@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.
- package/dist/image-ast/index.browser.js +147 -80
- package/dist/image-ast/index.js +147 -80
- package/dist/mp4-ast/mp4.d.ts +2 -0
- package/dist/pdf-ast/cos/parser.d.ts +1 -0
- package/dist/pdf-ast/cos/security.d.ts +2 -0
- package/dist/pdf-ast/cos/writer.d.ts +1 -0
- package/dist/pdf-ast/document.d.ts +3 -0
- package/dist/pdf-ast/edit/forms.d.ts +1 -0
- package/dist/pdf-ast/index.js +171 -82
- package/dist/safe-bash/chunks/{chunk-L5QQLNTO.js → chunk-22PI65AH.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-KHJGUF2W.js → chunk-2TAGYMPK.js} +43 -42
- package/dist/safe-bash/chunks/{chunk-D4PHJK4T.js → chunk-2W4HTMEK.js} +52 -48
- package/dist/safe-bash/chunks/{chunk-FFZXP6ZC.js → chunk-3M7L7XU2.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-XNODZRVD.js → chunk-3QAO6UYS.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-YPETOVQU.js → chunk-3VKFK3NF.js} +2 -2
- package/dist/safe-bash/chunks/chunk-5OST7NOX.js +42 -0
- package/dist/safe-bash/chunks/{chunk-KEBSX2AX.js → chunk-6HLURHVU.js} +2 -2
- package/dist/safe-bash/chunks/chunk-DYEUZE6Z.js +19 -0
- package/dist/safe-bash/chunks/{chunk-T2TGCHKE.js → chunk-FM3WBSZT.js} +2 -2
- package/dist/safe-bash/chunks/chunk-GAYRKQM6.js +22 -0
- package/dist/safe-bash/chunks/{chunk-Q45QCA4J.js → chunk-I3KSESCR.js} +0 -7
- package/dist/safe-bash/chunks/{chunk-OSKDIBQS.js → chunk-JLIMK5TD.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-2AYZCT5X.js → chunk-JQ2FAJJT.js} +27 -23
- package/dist/safe-bash/chunks/{chunk-QA3NVP43.js → chunk-JRE6Z3T7.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-DC5EHLKS.js → chunk-NDIL6T7Y.js} +5 -5
- package/dist/safe-bash/chunks/{chunk-747G42FY.js → chunk-OPR4UAIT.js} +2 -2
- package/dist/safe-bash/chunks/chunk-OSMQCYSP.js +19 -0
- package/dist/safe-bash/chunks/chunk-OYB332PQ.js +17 -0
- package/dist/safe-bash/chunks/{chunk-X5ZCECM6.js → chunk-QTIH2AFE.js} +77 -69
- package/dist/safe-bash/chunks/{chunk-CTUHLNJM.js → chunk-SBESXWT2.js} +43 -44
- package/dist/safe-bash/chunks/{chunk-4FDQJUFW.js → chunk-SDEPGTOF.js} +1 -1
- package/dist/safe-bash/chunks/chunk-UZU5BIJI.js +32 -0
- package/dist/safe-bash/chunks/{chunk-BI6JV62X.js → chunk-VCCMROTL.js} +7 -10
- package/dist/safe-bash/chunks/chunk-W47GHRRF.js +13 -0
- package/dist/safe-bash/chunks/{chunk-NPMQWZUZ.js → chunk-WS7KZIUM.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-3PZYHMGM.js → chunk-YYAERCWS.js} +7 -7
- package/dist/safe-bash/chunks/{chunk-5U7JECDB.js → chunk-ZPGVEUKF.js} +8 -7
- package/dist/safe-bash/chunks/{csvkit-K55OYAQC.js → csvkit-USUJG62I.js} +65 -11
- package/dist/safe-bash/chunks/{ffmpeg-BEFTQ6DZ.js → ffmpeg-KRGG5DLH.js} +21 -10
- package/dist/safe-bash/chunks/{gh-HQWOWLWE.js → gh-UCFDUZCX.js} +16 -8
- package/dist/safe-bash/chunks/{git-HO7WDPHZ.js → git-LPAF6KDG.js} +7 -9
- package/dist/safe-bash/chunks/{imagemagick-53BMHH6D.js → imagemagick-KGREKK4G.js} +38 -7
- package/dist/safe-bash/chunks/{implementation-QUTAAYMT.js → implementation-FXDRYS5A.js} +34 -8
- package/dist/safe-bash/chunks/{pdfimages-4OYI6FLG.js → pdfimages-UADCF4G4.js} +12 -8
- package/dist/safe-bash/chunks/{pdfinfo-I7U6TQPP.js → pdfinfo-O7UWPF4W.js} +38 -13
- package/dist/safe-bash/chunks/{pdftk-SUA6FMHI.js → pdftk-AERXIJTN.js} +13 -8
- package/dist/safe-bash/chunks/{pdftoppm-4C5DGEWX.js → pdftoppm-L466JQKI.js} +17 -10
- package/dist/safe-bash/chunks/{pdftotext-Y4WI225Y.js → pdftotext-SUSI4WXS.js} +19 -9
- package/dist/safe-bash/chunks/{qpdf-IORB4RV5.js → qpdf-YL24KVRH.js} +14 -8
- package/dist/safe-bash/chunks/{sips-WHAMJFEU.js → sips-QXEQZERX.js} +14 -7
- package/dist/safe-bash/chunks/{soffice-SYEK6WJS.js → soffice-TBITRML3.js} +16 -8
- package/dist/safe-bash/chunks/{wkhtmltopdf-ZIICWJLF.js → wkhtmltopdf-NJA2THRC.js} +27 -7
- package/dist/safe-bash/command-chunks/chunk-2C5BEBPY.js +1388 -0
- package/dist/safe-bash/command-chunks/{chunk-2VTMZTV3.js → chunk-2EXV2ZLV.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-UJOO6DKY.js → chunk-6EASC5EC.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-ZF3ZVGQC.js → chunk-7JRITHKW.js} +150 -80
- package/dist/safe-bash/{chunks/chunk-LD76P7AG.js → command-chunks/chunk-AKDMCNX4.js} +74 -39
- package/dist/safe-bash/command-chunks/{chunk-6F7QJMJ3.js → chunk-CBDVLMJB.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-H4LWTITX.js +169 -0
- package/dist/safe-bash/command-chunks/chunk-I2MQNBGR.js +145 -0
- package/dist/safe-bash/command-chunks/{chunk-5GRLAARV.js → chunk-IOXI5ZAJ.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-XNHSCU6I.js → chunk-MDPIOQUD.js} +6 -6
- package/dist/safe-bash/command-chunks/chunk-QI4MGIN6.js +6 -0
- package/dist/safe-bash/command-chunks/chunk-QTYZAWSB.js +91 -0
- package/dist/safe-bash/command-chunks/chunk-SNK7K3XW.js +90 -0
- package/dist/safe-bash/command-chunks/chunk-T5OLGM43.js +314 -0
- package/dist/safe-bash/command-chunks/chunk-TB7IFMUZ.js +802 -0
- package/dist/safe-bash/command-chunks/{chunk-AT6ZSOE6.js → chunk-TPPBPIWL.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-VMK4XVKO.js +82 -0
- package/dist/safe-bash/command-chunks/chunk-VNSJKXDU.js +130 -0
- package/dist/safe-bash/command-chunks/chunk-YFNTMH6Z.js +6 -0
- package/dist/safe-bash/commands/csplit/index.browser.js +2 -2
- package/dist/safe-bash/commands/docx/index.browser.js +2 -2
- package/dist/safe-bash/commands/factor/index.browser.js +2 -2
- package/dist/safe-bash/commands/getopt/index.browser.js +2 -2
- package/dist/safe-bash/commands/hexdump/index.browser.js +2 -2
- package/dist/safe-bash/commands/iconv/index.browser.js +2 -2
- package/dist/safe-bash/commands/line-endings/index.browser.js +2 -2
- package/dist/safe-bash/commands/llm/command.d.ts +1 -4
- package/dist/safe-bash/commands/llm/command.js +1 -248
- package/dist/safe-bash/commands/llm/elevenlabs-stream.d.ts +1 -2
- package/dist/safe-bash/commands/llm/elevenlabs-stream.js +1 -117
- package/dist/safe-bash/commands/llm/elevenlabs.d.ts +1 -15
- package/dist/safe-bash/commands/llm/elevenlabs.js +1 -123
- package/dist/safe-bash/commands/llm/index.browser.js +20 -15
- package/dist/safe-bash/commands/llm/index.d.ts +1 -6
- package/dist/safe-bash/commands/llm/index.js +1 -4
- package/dist/safe-bash/commands/llm/mime.d.ts +1 -2
- package/dist/safe-bash/commands/llm/mime.js +1 -136
- package/dist/safe-bash/commands/llm/openai-http.d.ts +1 -8
- package/dist/safe-bash/commands/llm/openai-http.js +1 -143
- package/dist/safe-bash/commands/llm/openai-sse.d.ts +1 -3
- package/dist/safe-bash/commands/llm/openai-sse.js +1 -78
- package/dist/safe-bash/commands/llm/openai.d.ts +1 -14
- package/dist/safe-bash/commands/llm/openai.js +1 -288
- package/dist/safe-bash/commands/llm/providers/elevenlabs.d.ts +1 -1
- package/dist/safe-bash/commands/llm/providers/elevenlabs.js +1 -1
- package/dist/safe-bash/commands/llm/providers/index.browser.js +6 -6
- package/dist/safe-bash/commands/llm/providers/index.d.ts +1 -3
- package/dist/safe-bash/commands/llm/providers/index.js +1 -2
- package/dist/safe-bash/commands/llm/providers/openai.d.ts +1 -1
- package/dist/safe-bash/commands/llm/providers/openai.js +1 -1
- package/dist/safe-bash/commands/llm/providers/shared.d.ts +1 -23
- package/dist/safe-bash/commands/llm/providers/shared.js +1 -65
- package/dist/safe-bash/commands/llm/service.d.ts +1 -37
- package/dist/safe-bash/commands/llm/service.js +1 -151
- package/dist/safe-bash/commands/llm/types.d.ts +1 -52
- package/dist/safe-bash/commands/llm/types.js +1 -1
- package/dist/safe-bash/commands/mdq/index.browser.js +3 -3
- package/dist/safe-bash/commands/media/index.browser.js +1 -1
- package/dist/safe-bash/commands/network/index.browser.js +9 -9
- package/dist/safe-bash/commands/network/types.d.ts +2 -40
- package/dist/safe-bash/commands/node/index.browser.js +6 -8
- package/dist/safe-bash/commands/op/index.browser.js +3 -3
- package/dist/safe-bash/commands/op/index.js +12 -28
- package/dist/safe-bash/commands/pr/index.browser.js +2 -2
- package/dist/safe-bash/commands/python/index.browser.js +8 -8
- package/dist/safe-bash/commands/python/worker.browser.js +2 -2
- package/dist/safe-bash/commands/tsort/index.browser.js +2 -2
- package/dist/safe-bash/commands/xml/index.browser.js +2 -2
- package/dist/safe-bash/commands/yq/index.browser.js +3 -3
- package/dist/safe-bash/core.browser.js +9775 -10975
- package/dist/safe-bash/core.d.ts +0 -1
- package/dist/safe-bash/core.js +0 -1
- package/dist/safe-bash/jobs.browser.js +5 -4
- package/dist/safe-bash/optional-host.browser.js +61 -88
- package/dist/safe-bash/shell/runtime.js +34 -12
- package/dist/safe-bash/yq-browser/index.js +1 -1
- package/dist/safe-bash-command-ffmpeg/index.js +8130 -8011
- package/dist/safe-bash-command-git/git_rust.wasm +0 -0
- package/dist/safe-bash-command-git/wasm.generated.js +1 -1
- package/dist/safe-bash-command-imagemagick/index.js +2 -2
- package/dist/safe-bash-command-llm/LICENSE +21 -0
- package/dist/safe-bash-command-llm/command.d.ts +5 -0
- package/dist/safe-bash-command-llm/command.js +14 -0
- package/dist/safe-bash-command-llm/configuration.d.ts +18 -0
- package/dist/safe-bash-command-llm/elevenlabs-stream.d.ts +2 -0
- package/dist/safe-bash-command-llm/elevenlabs-stream.js +7 -0
- package/dist/safe-bash-command-llm/elevenlabs.d.ts +15 -0
- package/dist/safe-bash-command-llm/elevenlabs.js +10 -0
- package/dist/safe-bash-command-llm/index.d.ts +10 -0
- package/dist/safe-bash-command-llm/index.js +46 -0
- package/dist/safe-bash-command-llm/mime.d.ts +2 -0
- package/dist/safe-bash-command-llm/mime.js +9 -0
- package/dist/safe-bash-command-llm/model-options.d.ts +3 -0
- package/dist/safe-bash-command-llm/openai-http.d.ts +8 -0
- package/dist/safe-bash-command-llm/openai-http.js +17 -0
- package/dist/safe-bash-command-llm/openai-sse.d.ts +3 -0
- package/dist/safe-bash-command-llm/openai-sse.js +8 -0
- package/dist/safe-bash-command-llm/openai.d.ts +14 -0
- package/dist/safe-bash-command-llm/openai.js +12 -0
- package/dist/safe-bash-command-llm/providers/elevenlabs.d.ts +1 -0
- package/dist/safe-bash-command-llm/providers/elevenlabs.js +11 -0
- package/dist/safe-bash-command-llm/providers/index.d.ts +3 -0
- package/dist/safe-bash-command-llm/providers/index.js +24 -0
- package/dist/safe-bash-command-llm/providers/openai.d.ts +1 -0
- package/dist/safe-bash-command-llm/providers/openai.js +13 -0
- package/dist/safe-bash-command-llm/providers/shared.d.ts +23 -0
- package/dist/safe-bash-command-llm/providers/shared.js +13 -0
- package/dist/safe-bash-command-llm/schemas.d.ts +2 -0
- package/dist/safe-bash-command-llm/service.d.ts +42 -0
- package/dist/safe-bash-command-llm/service.js +9 -0
- package/dist/safe-bash-command-llm/templates.d.ts +27 -0
- package/dist/safe-bash-command-llm/types.d.ts +87 -0
- package/dist/safe-bash-command-llm/types.js +6 -0
- package/dist/safe-bash-command-mmdc/command.d.ts +4 -0
- package/dist/safe-bash-command-mmdc/index.d.ts +1 -1
- package/dist/safe-bash-command-mmdc/index.js +7084 -6687
- package/dist/safe-bash-command-mmdc/layout.d.ts +1 -0
- package/dist/safe-bash-command-mmdc/parser.d.ts +1 -0
- package/dist/safe-bash-command-mmdc/png.d.ts +3 -0
- package/dist/safe-bash-command-mmdc/raster.d.ts +1 -0
- package/dist/safe-bash-command-pandoc/command.js +3 -3
- package/dist/safe-bash-command-pandoc/index.js +3 -3
- package/dist/safe-bash-command-pdfimages/index.js +147 -80
- package/dist/safe-bash-command-pdfinfo/index.js +147 -80
- package/dist/safe-bash-command-pdftk/index.js +147 -80
- package/dist/safe-bash-command-pdftoppm/index.js +147 -80
- package/dist/safe-bash-command-pdftotext/index.js +147 -80
- package/dist/safe-bash-command-qpdf/index.js +174 -101
- package/dist/safe-bash-command-sips/index.js +2 -2
- package/dist/safe-bash-command-soffice/index.js +1 -1
- package/dist/safe-bash-command-ssconvert/index.js +147 -80
- package/dist/safe-bash-command-wkhtmltopdf/index.js +147 -80
- package/dist/safe-bash-contracts/default-executor.d.ts +5 -0
- package/dist/safe-bash-contracts/default-executor.js +37 -0
- package/dist/safe-bash-contracts/http.d.ts +41 -0
- package/dist/safe-bash-contracts/http.js +6 -0
- package/dist/safe-bash-io-engine/commands/search/requirements.js +3 -3
- package/dist/safe-bash-io-engine/commands/text-programs/shared.js +3 -3
- package/dist/safe-bash-io-engine/gnu-information.d.ts +1 -1
- package/dist/safe-bash-io-engine/gnu-information.js +1 -1
- package/dist/safe-bash-io-engine/internal.js +2 -2
- package/dist/safe-bash-query-engine/index.js +3 -3
- package/dist/safe-bash-query-engine/interpreter.js +2 -2
- package/dist/safe-bash-query-engine/query-core.js +3 -3
- package/package.json +2 -2
- package/dist/safe-bash/chunks/chunk-2G2T5MEM.js +0 -14
- package/dist/safe-bash/chunks/chunk-2MUJ7RLZ.js +0 -409
- package/dist/safe-bash/chunks/chunk-GJWUEOT6.js +0 -14
- package/dist/safe-bash/chunks/chunk-H7MMJS26.js +0 -37
- package/dist/safe-bash/chunks/chunk-LAPF2XE6.js +0 -14
- package/dist/safe-bash/chunks/chunk-S2LSZFZ6.js +0 -758
- package/dist/safe-bash/chunks/chunk-T3VDYWKZ.js +0 -21
- package/dist/safe-bash/chunks/chunk-VUVKC6HV.js +0 -81
- package/dist/safe-bash/chunks/chunk-VYW4Q6KF.js +0 -12
- package/dist/safe-bash/command-chunks/{chunk-BJ6DGYJA.js → chunk-KNI4GRXF.js} +3 -3
|
@@ -27102,6 +27102,11 @@ function tokenizeCos(bytes, start = 0, end = bytes.length) {
|
|
|
27102
27102
|
}
|
|
27103
27103
|
return tokens;
|
|
27104
27104
|
}
|
|
27105
|
+
function drainWork(work) {
|
|
27106
|
+
let step = work.next();
|
|
27107
|
+
while (!step.done) step = work.next();
|
|
27108
|
+
return step.value;
|
|
27109
|
+
}
|
|
27105
27110
|
function bytesToString3(bytes) {
|
|
27106
27111
|
if (typeof bytes !== "object" || bytes?.length === void 0) {
|
|
27107
27112
|
throw new Error("Invalid argument for bytesToString");
|
|
@@ -27697,7 +27702,9 @@ function concatByteArrays(chunks) {
|
|
|
27697
27702
|
}
|
|
27698
27703
|
return out;
|
|
27699
27704
|
}
|
|
27700
|
-
function
|
|
27705
|
+
function* serializeCosDocumentSteps(options) {
|
|
27706
|
+
yield;
|
|
27707
|
+
let work = 0;
|
|
27701
27708
|
const maxOutputBytes = options.maxOutputBytes ?? Infinity;
|
|
27702
27709
|
const maxObjects = options.maxObjects ?? Infinity;
|
|
27703
27710
|
const sorted = [...options.objects].sort((a, b) => a.objectNumber - b.objectNumber);
|
|
@@ -27720,6 +27727,7 @@ function serializeCosDocument(options) {
|
|
|
27720
27727
|
const packable = [];
|
|
27721
27728
|
const direct = [];
|
|
27722
27729
|
for (const obj of sorted) {
|
|
27730
|
+
if (++work % 16 === 0) yield;
|
|
27723
27731
|
const isLinearized = obj.value.kind === "dict" && dictGet(obj.value, "Linearized") !== void 0;
|
|
27724
27732
|
if (obj.value.kind !== "stream" && obj.generationNumber === 0 && !isLinearized) {
|
|
27725
27733
|
packable.push(obj);
|
|
@@ -27734,6 +27742,7 @@ function serializeCosDocument(options) {
|
|
|
27734
27742
|
const headerPairs = [];
|
|
27735
27743
|
let relOffset = 0;
|
|
27736
27744
|
for (const pObj of packable) {
|
|
27745
|
+
if (++work % 16 === 0) yield;
|
|
27737
27746
|
headerPairs.push(`${pObj.objectNumber} ${relOffset}`);
|
|
27738
27747
|
const bBytes = serializeCosNodeBytes(pObj.value);
|
|
27739
27748
|
const nl = textEncoder2.encode("\n");
|
|
@@ -27759,6 +27768,7 @@ function serializeCosDocument(options) {
|
|
|
27759
27768
|
];
|
|
27760
27769
|
const directOffsets = /* @__PURE__ */ new Map();
|
|
27761
27770
|
for (const dObj of allDirect) {
|
|
27771
|
+
if (++work % 16 === 0) yield;
|
|
27762
27772
|
directOffsets.set(dObj.objectNumber, { offset, generation: dObj.generationNumber });
|
|
27763
27773
|
const prefix = textEncoder2.encode(`${dObj.objectNumber} ${dObj.generationNumber} obj
|
|
27764
27774
|
`);
|
|
@@ -27769,6 +27779,7 @@ function serializeCosDocument(options) {
|
|
|
27769
27779
|
}
|
|
27770
27780
|
const compressedMap = /* @__PURE__ */ new Map();
|
|
27771
27781
|
for (let idx = 0; idx < packable.length; idx++) {
|
|
27782
|
+
if (++work % 16 === 0) yield;
|
|
27772
27783
|
compressedMap.set(packable[idx].objectNumber, idx);
|
|
27773
27784
|
}
|
|
27774
27785
|
const xrefOffset2 = offset;
|
|
@@ -27786,6 +27797,7 @@ function serializeCosDocument(options) {
|
|
|
27786
27797
|
};
|
|
27787
27798
|
writeEntry7(0, 0, 0, 65535);
|
|
27788
27799
|
for (let i = 1; i < size2; i++) {
|
|
27800
|
+
if (++work % 16 === 0) yield;
|
|
27789
27801
|
if (i === xrefStmNum) {
|
|
27790
27802
|
writeEntry7(i, 1, xrefOffset2, 0);
|
|
27791
27803
|
} else if (compressedMap.has(i)) {
|
|
@@ -27866,6 +27878,7 @@ ${xrefOffset2}
|
|
|
27866
27878
|
let pageCount = 0;
|
|
27867
27879
|
let firstPageObjNum = options.rootRef.objectNumber;
|
|
27868
27880
|
for (const o of sorted) {
|
|
27881
|
+
if (++work % 16 === 0) yield;
|
|
27869
27882
|
if (o.value.kind === "dict") {
|
|
27870
27883
|
const t = dictGet(o.value, "Type");
|
|
27871
27884
|
if (t?.kind === "name" && t.decoded === "Page") {
|
|
@@ -27913,6 +27926,7 @@ ${xrefOffset2}
|
|
|
27913
27926
|
}
|
|
27914
27927
|
const objectOffsets = /* @__PURE__ */ new Map();
|
|
27915
27928
|
for (const obj of sorted) {
|
|
27929
|
+
if (++work % 16 === 0) yield;
|
|
27916
27930
|
objectOffsets.set(obj.objectNumber, { offset, generation: obj.generationNumber });
|
|
27917
27931
|
let value = obj.value;
|
|
27918
27932
|
if (options.normalizeContent && value.kind === "stream" && value.decodedBytes) {
|
|
@@ -27944,6 +27958,7 @@ ${xrefOffset2}
|
|
|
27944
27958
|
0000000000 65535 f
|
|
27945
27959
|
`;
|
|
27946
27960
|
for (let i = 1; i < size; i++) {
|
|
27961
|
+
if (++work % 16 === 0) yield;
|
|
27947
27962
|
const entry = objectOffsets.get(i);
|
|
27948
27963
|
if (entry) {
|
|
27949
27964
|
xrefText += `${String(entry.offset).padStart(10, "0")} ${String(entry.generation).padStart(5, "0")} n
|
|
@@ -27990,6 +28005,7 @@ ${xrefOffset}
|
|
|
27990
28005
|
let endFirstPage = xrefOffset;
|
|
27991
28006
|
const sortedOffsets = [...objectOffsets.entries()].sort((a, b) => a[1].offset - b[1].offset);
|
|
27992
28007
|
for (let i = 0; i < sortedOffsets.length; i++) {
|
|
28008
|
+
if (++work % 16 === 0) yield;
|
|
27993
28009
|
const [objNum, info3] = sortedOffsets[i];
|
|
27994
28010
|
const nextOff = sortedOffsets[i + 1]?.[1].offset ?? xrefOffset;
|
|
27995
28011
|
if (objNum === hintObjAfter.objectNumber) {
|
|
@@ -28023,6 +28039,9 @@ ${xrefOffset}
|
|
|
28023
28039
|
}
|
|
28024
28040
|
return fullBytes;
|
|
28025
28041
|
}
|
|
28042
|
+
function serializeCosDocument(options) {
|
|
28043
|
+
return drainWork(serializeCosDocumentSteps(options));
|
|
28044
|
+
}
|
|
28026
28045
|
function appendIncrementalRevision(originalBytes, doc, updatedObjects) {
|
|
28027
28046
|
const chunks = [originalBytes, textEncoder2.encode("\n")];
|
|
28028
28047
|
let offset = originalBytes.length + 1;
|
|
@@ -28296,48 +28315,30 @@ function encryptPdfBuffer(state, objectNumber, generationNumber, plaintext) {
|
|
|
28296
28315
|
const objKey = md5Bytes([state.fileKey, suffix]).subarray(0, Math.min(16, state.fileKey.length + 5));
|
|
28297
28316
|
return rc4Transform(objKey, plaintext);
|
|
28298
28317
|
}
|
|
28299
|
-
function
|
|
28318
|
+
function* transformNodeStringsAndStreamsSteps(node, transform, transformStream) {
|
|
28319
|
+
yield;
|
|
28300
28320
|
switch (node.kind) {
|
|
28301
28321
|
case "string":
|
|
28302
|
-
return {
|
|
28303
|
-
|
|
28304
|
-
|
|
28305
|
-
|
|
28306
|
-
};
|
|
28307
|
-
|
|
28308
|
-
return {
|
|
28309
|
-
kind: "array",
|
|
28310
|
-
items: node.items.map((item) => transformNodeStringsAndStreams(item, transform, transformStream))
|
|
28311
|
-
};
|
|
28322
|
+
return { kind: "string", format: "hex", bytes: transform(node.bytes) };
|
|
28323
|
+
case "array": {
|
|
28324
|
+
const items = [];
|
|
28325
|
+
for (const item of node.items) items.push(yield* transformNodeStringsAndStreamsSteps(item, transform, transformStream));
|
|
28326
|
+
return { kind: "array", items };
|
|
28327
|
+
}
|
|
28312
28328
|
case "dict": {
|
|
28313
|
-
const type = dictGet(node, "Type");
|
|
28314
|
-
const fieldType = dictGet(node, "FT");
|
|
28315
|
-
const byteRange = dictGet(node, "ByteRange");
|
|
28329
|
+
const type = dictGet(node, "Type"), fieldType = dictGet(node, "FT"), byteRange = dictGet(node, "ByteRange");
|
|
28316
28330
|
const signature = type?.kind === "name" && type.decoded === "Sig" || fieldType?.kind === "name" && fieldType.decoded === "Sig" || byteRange?.kind === "array" && dictGet(node, "Filter")?.kind === "name";
|
|
28317
|
-
|
|
28318
|
-
|
|
28319
|
-
|
|
28320
|
-
key: e.key,
|
|
28321
|
-
value: signature && e.key.decoded === "Contents" ? e.value : transformNodeStringsAndStreams(e.value, transform, transformStream)
|
|
28322
|
-
}))
|
|
28323
|
-
};
|
|
28331
|
+
const entries = [];
|
|
28332
|
+
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) });
|
|
28333
|
+
return { kind: "dict", entries };
|
|
28324
28334
|
}
|
|
28325
28335
|
case "stream": {
|
|
28326
28336
|
const type = dictGet(node.dict, "Type");
|
|
28327
28337
|
if (type?.kind === "name" && type.decoded === "XRef") return node;
|
|
28328
28338
|
const stream = transformStream ? transformStream(node) : { ...node, rawBytes: transform(node.rawBytes) };
|
|
28329
|
-
const
|
|
28330
|
-
|
|
28331
|
-
|
|
28332
|
-
key: e.key,
|
|
28333
|
-
value: e.key.decoded === "Length" ? cosNumber(stream.rawBytes.length) : transformNodeStringsAndStreams(e.value, transform, transformStream)
|
|
28334
|
-
}))
|
|
28335
|
-
};
|
|
28336
|
-
return {
|
|
28337
|
-
kind: "stream",
|
|
28338
|
-
dict: updatedDict,
|
|
28339
|
-
rawBytes: stream.rawBytes
|
|
28340
|
-
};
|
|
28339
|
+
const entries = [];
|
|
28340
|
+
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) });
|
|
28341
|
+
return { kind: "stream", dict: { kind: "dict", entries }, rawBytes: stream.rawBytes };
|
|
28341
28342
|
}
|
|
28342
28343
|
default:
|
|
28343
28344
|
return node;
|
|
@@ -28406,7 +28407,8 @@ function createR6Encryption(userPassword, ownerPassword, pMask) {
|
|
|
28406
28407
|
StrF: cosName("StdCF")
|
|
28407
28408
|
}) };
|
|
28408
28409
|
}
|
|
28409
|
-
function
|
|
28410
|
+
function* encryptCosDocumentSteps(doc, options = {}) {
|
|
28411
|
+
yield;
|
|
28410
28412
|
const userPassword = options.userPassword ?? "";
|
|
28411
28413
|
const ownerPassword = options.ownerPassword ?? userPassword;
|
|
28412
28414
|
const revision = options.revision ?? 6;
|
|
@@ -28428,14 +28430,15 @@ function encryptCosDocument(doc, options = {}) {
|
|
|
28428
28430
|
const encryptObjNum = maxObjNum + 1;
|
|
28429
28431
|
const encryptedObjects = [];
|
|
28430
28432
|
for (const obj of doc.objects.values()) {
|
|
28431
|
-
|
|
28433
|
+
yield;
|
|
28434
|
+
const transformed = yield* transformNodeStringsAndStreamsSteps(
|
|
28432
28435
|
obj.value,
|
|
28433
28436
|
(plain) => encryptPdfBuffer(state, obj.objectNumber, obj.generationNumber, plain)
|
|
28434
28437
|
);
|
|
28435
28438
|
encryptedObjects.push({ objectNumber: obj.objectNumber, generationNumber: obj.generationNumber, value: transformed });
|
|
28436
28439
|
}
|
|
28437
28440
|
encryptedObjects.push({ objectNumber: encryptObjNum, generationNumber: 0, value: encryptDict });
|
|
28438
|
-
return
|
|
28441
|
+
return yield* serializeCosDocumentSteps({
|
|
28439
28442
|
objects: encryptedObjects,
|
|
28440
28443
|
rootRef: doc.rootRef,
|
|
28441
28444
|
infoRef: doc.infoRef,
|
|
@@ -28485,17 +28488,19 @@ function decryptStream(doc, stream, transform) {
|
|
|
28485
28488
|
}
|
|
28486
28489
|
return { kind: "stream", dict, rawBytes: bytes };
|
|
28487
28490
|
}
|
|
28488
|
-
function
|
|
28491
|
+
function* decryptCosDocumentSteps(doc, state) {
|
|
28492
|
+
yield;
|
|
28489
28493
|
const encryptObjNum = doc.encryptRef?.objectNumber;
|
|
28490
28494
|
const handler = securityHandlers.get(state);
|
|
28491
28495
|
for (const [num, obj] of doc.objects.entries()) {
|
|
28496
|
+
yield;
|
|
28492
28497
|
if (num === encryptObjNum || handler?.plaintextObjects.has(num)) continue;
|
|
28493
28498
|
if (obj.value.kind === "stream") {
|
|
28494
28499
|
const type = doc.resolve(dictGet(obj.value.dict, "Type"));
|
|
28495
28500
|
if (type?.kind === "name" && (type.decoded === "XRef" || type.decoded === "Metadata" && !state.encryptMetadata)) continue;
|
|
28496
28501
|
}
|
|
28497
28502
|
const transform = handler?.factory.createCipherTransform(obj.objectNumber, obj.generationNumber);
|
|
28498
|
-
const decrypted =
|
|
28503
|
+
const decrypted = yield* transformNodeStringsAndStreamsSteps(
|
|
28499
28504
|
obj.value,
|
|
28500
28505
|
(cipher) => decryptPdfBuffer(state, obj.objectNumber, obj.generationNumber, cipher),
|
|
28501
28506
|
transform ? (stream) => decryptStream(doc, stream, transform) : void 0
|
|
@@ -28609,9 +28614,12 @@ var ParsedCosDocument = class {
|
|
|
28609
28614
|
return void 0;
|
|
28610
28615
|
}
|
|
28611
28616
|
};
|
|
28612
|
-
function
|
|
28617
|
+
function* parseNodeFromLexerSteps(lexer, bytes, maxDepth, repair = false) {
|
|
28618
|
+
yield;
|
|
28619
|
+
let work = 0;
|
|
28613
28620
|
const stack = [];
|
|
28614
28621
|
while (true) {
|
|
28622
|
+
if (++work % 16 === 0) yield;
|
|
28615
28623
|
const tok = lexer.nextToken();
|
|
28616
28624
|
const parent = stack.at(-1);
|
|
28617
28625
|
if (!tok) {
|
|
@@ -28807,7 +28815,8 @@ function parseHeaderVersion(bytes) {
|
|
|
28807
28815
|
}
|
|
28808
28816
|
return head.slice(idx + 5, idx + 8);
|
|
28809
28817
|
}
|
|
28810
|
-
function
|
|
28818
|
+
function* parseObjectAtOffsetSteps(bytes, offset, maxRecursionDepth, repair = false) {
|
|
28819
|
+
yield;
|
|
28811
28820
|
const lexer = new CosByteLexer(bytes, offset);
|
|
28812
28821
|
const objNumTok = lexer.nextToken();
|
|
28813
28822
|
const genNumTok = lexer.nextToken();
|
|
@@ -28815,7 +28824,7 @@ function parseObjectAtOffset(bytes, offset, maxRecursionDepth, repair = false) {
|
|
|
28815
28824
|
if (objNumTok?.kind !== "number" || genNumTok?.kind !== "number" || objKwTok?.kind !== "keyword" || objKwTok.value !== "obj") {
|
|
28816
28825
|
throw new PdfError("E_PARSE", `Malformed indirect object header at byte offset ${offset}`);
|
|
28817
28826
|
}
|
|
28818
|
-
const value =
|
|
28827
|
+
const value = yield* parseNodeFromLexerSteps(lexer, bytes, maxRecursionDepth, repair);
|
|
28819
28828
|
if (!value) {
|
|
28820
28829
|
throw new PdfError("E_PARSE", `Empty indirect object ${objNumTok.value} at offset ${offset}`);
|
|
28821
28830
|
}
|
|
@@ -28826,7 +28835,9 @@ function parseObjectAtOffset(bytes, offset, maxRecursionDepth, repair = false) {
|
|
|
28826
28835
|
span: { start: objNumTok.span.start, end: lexer.offset }
|
|
28827
28836
|
};
|
|
28828
28837
|
}
|
|
28829
|
-
function
|
|
28838
|
+
function* parseXrefRevisionAtSteps(bytes, xrefOffset, maxDecompressedBytes, maxRecursionDepth, maxObjects) {
|
|
28839
|
+
yield;
|
|
28840
|
+
let work = 0;
|
|
28830
28841
|
if (xrefOffset < 0 || xrefOffset >= bytes.length) {
|
|
28831
28842
|
throw new PdfError("E_PARSE", `Invalid xref offset: ${xrefOffset}`);
|
|
28832
28843
|
}
|
|
@@ -28838,6 +28849,7 @@ function parseXrefRevisionAt(bytes, xrefOffset, maxDecompressedBytes, maxRecursi
|
|
|
28838
28849
|
if (firstTok.kind === "keyword" && firstTok.value === "xref") {
|
|
28839
28850
|
const entries2 = /* @__PURE__ */ new Map();
|
|
28840
28851
|
while (true) {
|
|
28852
|
+
if (++work % 16 === 0) yield;
|
|
28841
28853
|
const saved = lexer.offset;
|
|
28842
28854
|
const tok = lexer.nextToken();
|
|
28843
28855
|
if (!tok) {
|
|
@@ -28861,6 +28873,7 @@ function parseXrefRevisionAt(bytes, xrefOffset, maxDecompressedBytes, maxRecursi
|
|
|
28861
28873
|
}
|
|
28862
28874
|
if (count > maxObjects + 1) throw new PdfError("E_LIMIT", "PDF object count limit exceeded while reading xref entries");
|
|
28863
28875
|
for (let i = 0; i < count; i++) {
|
|
28876
|
+
if (++work % 16 === 0) yield;
|
|
28864
28877
|
const offTok = lexer.nextToken();
|
|
28865
28878
|
const genTok = lexer.nextToken();
|
|
28866
28879
|
const flagTok = lexer.nextToken();
|
|
@@ -28886,7 +28899,7 @@ function parseXrefRevisionAt(bytes, xrefOffset, maxDecompressedBytes, maxRecursi
|
|
|
28886
28899
|
if (entries2.size > maxObjects + 1) throw new PdfError("E_LIMIT", "PDF object count limit exceeded while reading xref entries");
|
|
28887
28900
|
}
|
|
28888
28901
|
}
|
|
28889
|
-
const trailerNode =
|
|
28902
|
+
const trailerNode = yield* parseNodeFromLexerSteps(lexer, bytes, maxRecursionDepth);
|
|
28890
28903
|
if (!trailerNode || trailerNode.kind !== "dict") {
|
|
28891
28904
|
throw new PdfError("E_PARSE", "Missing trailer dictionary after xref table");
|
|
28892
28905
|
}
|
|
@@ -28898,7 +28911,7 @@ function parseXrefRevisionAt(bytes, xrefOffset, maxDecompressedBytes, maxRecursi
|
|
|
28898
28911
|
previousXrefOffset: prevNode2?.kind === "number" ? prevNode2.value : void 0
|
|
28899
28912
|
};
|
|
28900
28913
|
}
|
|
28901
|
-
const xrefObj =
|
|
28914
|
+
const xrefObj = yield* parseObjectAtOffsetSteps(bytes, xrefOffset, maxRecursionDepth);
|
|
28902
28915
|
if (xrefObj.value.kind !== "stream") {
|
|
28903
28916
|
throw new PdfError("E_PARSE", `Expected xref table or XRef stream at offset ${xrefOffset}`);
|
|
28904
28917
|
}
|
|
@@ -28919,6 +28932,7 @@ function parseXrefRevisionAt(bytes, xrefOffset, maxDecompressedBytes, maxRecursi
|
|
|
28919
28932
|
if (indexArray) {
|
|
28920
28933
|
if (indexArray.kind !== "array" || indexArray.items.length % 2 !== 0) throw new PdfError("E_PARSE", "Invalid XRef range fields");
|
|
28921
28934
|
for (let i = 0; i < indexArray.items.length; i += 2) {
|
|
28935
|
+
if (++work % 16 === 0) yield;
|
|
28922
28936
|
const first = indexArray.items[i];
|
|
28923
28937
|
const count = indexArray.items[i + 1];
|
|
28924
28938
|
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)) {
|
|
@@ -28941,9 +28955,11 @@ function parseXrefRevisionAt(bytes, xrefOffset, maxDecompressedBytes, maxRecursi
|
|
|
28941
28955
|
return v;
|
|
28942
28956
|
};
|
|
28943
28957
|
for (const [startObj, count] of subsections) {
|
|
28958
|
+
if (++work % 16 === 0) yield;
|
|
28944
28959
|
if (count > (decoded.length - pos) / stride) throw new PdfError("E_PARSE", "Truncated XRef stream");
|
|
28945
28960
|
if (count > maxObjects + 1) throw new PdfError("E_LIMIT", "PDF object count limit exceeded while reading xref entries");
|
|
28946
28961
|
for (let i = 0; i < count; i++) {
|
|
28962
|
+
if (++work % 16 === 0) yield;
|
|
28947
28963
|
const objNum = startObj + i;
|
|
28948
28964
|
const field0 = w0 > 0 ? readInt(w0) : 1;
|
|
28949
28965
|
const field1 = readInt(w1);
|
|
@@ -28989,12 +29005,16 @@ function isAsciiWhitespace(ch3) {
|
|
|
28989
29005
|
function isAsciiDigit(ch3) {
|
|
28990
29006
|
return ch3 >= 48 && ch3 <= 57;
|
|
28991
29007
|
}
|
|
28992
|
-
function
|
|
29008
|
+
function* repairScanCosDocumentSteps(bytes, maxObjects, maxRecursionDepth) {
|
|
29009
|
+
yield;
|
|
29010
|
+
let work = 0;
|
|
28993
29011
|
const objects = /* @__PURE__ */ new Map();
|
|
28994
29012
|
const trailers = [];
|
|
28995
29013
|
let pos = 0;
|
|
28996
29014
|
while (pos < bytes.length) {
|
|
29015
|
+
if (++work % 16 === 0) yield;
|
|
28997
29016
|
while (pos < bytes.length && !isAsciiDigit(bytes[pos])) {
|
|
29017
|
+
if (++work % 16 === 0) yield;
|
|
28998
29018
|
if (bytes[pos] === 37) {
|
|
28999
29019
|
while (pos < bytes.length && bytes[pos] !== 10 && bytes[pos] !== 13) pos++;
|
|
29000
29020
|
continue;
|
|
@@ -29004,7 +29024,7 @@ function repairScanCosDocument(bytes, maxObjects, maxRecursionDepth) {
|
|
|
29004
29024
|
try {
|
|
29005
29025
|
const token = lexer.nextToken();
|
|
29006
29026
|
if (token?.kind === "keyword" && token.value === "trailer") {
|
|
29007
|
-
const trailer =
|
|
29027
|
+
const trailer = yield* parseNodeFromLexerSteps(lexer, bytes, maxRecursionDepth, true);
|
|
29008
29028
|
if (trailer?.kind === "dict") trailers.push(trailer);
|
|
29009
29029
|
pos = lexer.offset;
|
|
29010
29030
|
continue;
|
|
@@ -29037,7 +29057,7 @@ function repairScanCosDocument(bytes, maxObjects, maxRecursionDepth) {
|
|
|
29037
29057
|
bytes[pos + 3] === 40)) {
|
|
29038
29058
|
pos += 3;
|
|
29039
29059
|
try {
|
|
29040
|
-
const parsed =
|
|
29060
|
+
const parsed = yield* parseObjectAtOffsetSteps(bytes, headerStart, maxRecursionDepth, true);
|
|
29041
29061
|
objects.set(parsed.objectNumber, parsed);
|
|
29042
29062
|
if (parsed.value.kind === "stream") {
|
|
29043
29063
|
const type = dictGet(parsed.value.dict, "Type");
|
|
@@ -29054,13 +29074,17 @@ function repairScanCosDocument(bytes, maxObjects, maxRecursionDepth) {
|
|
|
29054
29074
|
}
|
|
29055
29075
|
return { objects, trailers };
|
|
29056
29076
|
}
|
|
29057
|
-
function
|
|
29077
|
+
function* unpackRecoveredObjectsSteps(objects, maxObjects, maxDecompressedBytes, maxRecursionDepth) {
|
|
29078
|
+
yield;
|
|
29079
|
+
let work = 0;
|
|
29058
29080
|
for (const obj of [...objects.values()]) {
|
|
29081
|
+
if (++work % 16 === 0) yield;
|
|
29059
29082
|
if (obj.value.kind === "stream") {
|
|
29060
29083
|
const t = dictGet(obj.value.dict, "Type");
|
|
29061
29084
|
if (t?.kind === "name" && t.decoded === "ObjStm") {
|
|
29062
29085
|
try {
|
|
29063
|
-
for (const [unpackedNum, unpackedVal] of
|
|
29086
|
+
for (const [unpackedNum, unpackedVal] of (yield* unpackObjectStreamSteps(obj.value, maxDecompressedBytes, maxRecursionDepth, true)).entries()) {
|
|
29087
|
+
if (++work % 16 === 0) yield;
|
|
29064
29088
|
if (!objects.has(unpackedNum)) {
|
|
29065
29089
|
objects.set(unpackedNum, {
|
|
29066
29090
|
objectNumber: unpackedNum,
|
|
@@ -29096,7 +29120,9 @@ function recoveredReferences(objects) {
|
|
|
29096
29120
|
}
|
|
29097
29121
|
return { ...rootRef ? { rootRef } : {}, ...infoRef ? { infoRef } : {} };
|
|
29098
29122
|
}
|
|
29099
|
-
function
|
|
29123
|
+
function* unpackObjectStreamSteps(streamObj, maxDecompressedBytes, maxRecursionDepth, repair = false) {
|
|
29124
|
+
yield;
|
|
29125
|
+
let work = 0;
|
|
29100
29126
|
const nNode = dictGet(streamObj.dict, "N");
|
|
29101
29127
|
const firstNode = dictGet(streamObj.dict, "First");
|
|
29102
29128
|
if (nNode?.kind !== "number" || firstNode?.kind !== "number") {
|
|
@@ -29106,6 +29132,7 @@ function unpackObjectStream(streamObj, maxDecompressedBytes, maxRecursionDepth,
|
|
|
29106
29132
|
const headerLexer = new CosByteLexer(decoded, 0);
|
|
29107
29133
|
const pairs = [];
|
|
29108
29134
|
for (let i = 0; i < nNode.value; i++) {
|
|
29135
|
+
if (++work % 16 === 0) yield;
|
|
29109
29136
|
const numTok = headerLexer.nextToken();
|
|
29110
29137
|
const offTok = headerLexer.nextToken();
|
|
29111
29138
|
if (numTok?.kind === "number" && offTok?.kind === "number") {
|
|
@@ -29114,9 +29141,10 @@ function unpackObjectStream(streamObj, maxDecompressedBytes, maxRecursionDepth,
|
|
|
29114
29141
|
}
|
|
29115
29142
|
const result = /* @__PURE__ */ new Map();
|
|
29116
29143
|
for (const pair of pairs) {
|
|
29144
|
+
if (++work % 16 === 0) yield;
|
|
29117
29145
|
try {
|
|
29118
29146
|
const valLexer = new CosByteLexer(decoded, firstNode.value + pair.relativeOffset);
|
|
29119
|
-
const node =
|
|
29147
|
+
const node = yield* parseNodeFromLexerSteps(valLexer, decoded, maxRecursionDepth, repair);
|
|
29120
29148
|
if (node) {
|
|
29121
29149
|
result.set(pair.objectNumber, node);
|
|
29122
29150
|
}
|
|
@@ -29126,7 +29154,9 @@ function unpackObjectStream(streamObj, maxDecompressedBytes, maxRecursionDepth,
|
|
|
29126
29154
|
}
|
|
29127
29155
|
return result;
|
|
29128
29156
|
}
|
|
29129
|
-
function
|
|
29157
|
+
function* parseCosDocumentSteps(bytes, options = {}) {
|
|
29158
|
+
yield;
|
|
29159
|
+
let work = 0;
|
|
29130
29160
|
const version = parseHeaderVersion(bytes);
|
|
29131
29161
|
const recovery = options.recovery ?? "strict";
|
|
29132
29162
|
const maxObjects = options.maxObjects ?? Infinity;
|
|
@@ -29161,10 +29191,12 @@ function parseCosDocument(bytes, options = {}) {
|
|
|
29161
29191
|
let currentXrefOffset = offsetTok.value;
|
|
29162
29192
|
const visitedOffsets = /* @__PURE__ */ new Set();
|
|
29163
29193
|
while (currentXrefOffset !== void 0 && !visitedOffsets.has(currentXrefOffset)) {
|
|
29194
|
+
if (++work % 16 === 0) yield;
|
|
29164
29195
|
visitedOffsets.add(currentXrefOffset);
|
|
29165
|
-
const rev =
|
|
29196
|
+
const rev = yield* parseXrefRevisionAtSteps(bytes, currentXrefOffset, maxDecompressedBytes, maxRecursionDepth, maxObjects);
|
|
29166
29197
|
revisions.push(rev);
|
|
29167
29198
|
for (const [num, entry] of rev.entries.entries()) {
|
|
29199
|
+
if (++work % 16 === 0) yield;
|
|
29168
29200
|
if (!mergedXref.has(num)) {
|
|
29169
29201
|
mergedXref.set(num, entry);
|
|
29170
29202
|
if (mergedXref.size > maxObjects + 1) throw new PdfError("E_LIMIT", "PDF object count limit exceeded while reading xref entries");
|
|
@@ -29197,8 +29229,9 @@ function parseCosDocument(bytes, options = {}) {
|
|
|
29197
29229
|
if (!useRepair && rootRef) {
|
|
29198
29230
|
try {
|
|
29199
29231
|
for (const [objNum, entry] of mergedXref.entries()) {
|
|
29232
|
+
if (++work % 16 === 0) yield;
|
|
29200
29233
|
if (entry.type !== "uncompressed") continue;
|
|
29201
|
-
const parsed =
|
|
29234
|
+
const parsed = yield* parseObjectAtOffsetSteps(bytes, entry.offset ?? 0, maxRecursionDepth, recovery === "repair");
|
|
29202
29235
|
if (parsed.objectNumber !== objNum || parsed.generationNumber !== (entry.generationNumber ?? 0)) {
|
|
29203
29236
|
throw new PdfError("E_PARSE", `Bad uncompressed XRef entry for object ${objNum}`);
|
|
29204
29237
|
}
|
|
@@ -29216,7 +29249,7 @@ function parseCosDocument(bytes, options = {}) {
|
|
|
29216
29249
|
throw new PdfError("E_PARSE", "PDF trailer missing /Root reference");
|
|
29217
29250
|
}
|
|
29218
29251
|
useRepair = true;
|
|
29219
|
-
const scanned =
|
|
29252
|
+
const scanned = yield* repairScanCosDocumentSteps(bytes, maxObjects, maxRecursionDepth);
|
|
29220
29253
|
objects = scanned.objects;
|
|
29221
29254
|
revisions.length = 0;
|
|
29222
29255
|
mergedXref.clear();
|
|
@@ -29251,7 +29284,7 @@ function parseCosDocument(bytes, options = {}) {
|
|
|
29251
29284
|
encryptNode = encrypt?.kind === "ref" || encrypt?.kind === "dict" ? encrypt : void 0;
|
|
29252
29285
|
encryptRef = encrypt?.kind === "ref" ? encrypt : void 0;
|
|
29253
29286
|
idArray = id?.kind === "array" ? id : void 0;
|
|
29254
|
-
if (!rootRef && !encryptNode)
|
|
29287
|
+
if (!rootRef && !encryptNode) yield* unpackRecoveredObjectsSteps(objects, maxObjects, maxDecompressedBytes, maxRecursionDepth);
|
|
29255
29288
|
const fallback = recoveredReferences(objects);
|
|
29256
29289
|
rootRef ??= fallback.rootRef;
|
|
29257
29290
|
infoRef ??= fallback.infoRef;
|
|
@@ -29286,20 +29319,21 @@ function parseCosDocument(bytes, options = {}) {
|
|
|
29286
29319
|
maxRecursionDepth
|
|
29287
29320
|
});
|
|
29288
29321
|
doc.encryption = encState;
|
|
29289
|
-
|
|
29322
|
+
yield* decryptCosDocumentSteps(doc, encState);
|
|
29290
29323
|
}
|
|
29291
29324
|
if (useRepair) {
|
|
29292
|
-
|
|
29325
|
+
yield* unpackRecoveredObjectsSteps(objects, maxObjects, maxDecompressedBytes, maxRecursionDepth);
|
|
29293
29326
|
doc.infoRef ??= recoveredReferences(objects).infoRef;
|
|
29294
29327
|
}
|
|
29295
29328
|
const objStmCache = /* @__PURE__ */ new Map();
|
|
29296
29329
|
for (const [objNum, entry] of mergedXref.entries()) {
|
|
29330
|
+
if (++work % 16 === 0) yield;
|
|
29297
29331
|
if (entry.type === "compressed" && entry.objectStreamNumber !== void 0) {
|
|
29298
29332
|
let unpacked = objStmCache.get(entry.objectStreamNumber);
|
|
29299
29333
|
if (!unpacked) {
|
|
29300
29334
|
const stmObj = objects.get(entry.objectStreamNumber)?.value;
|
|
29301
29335
|
if (stmObj?.kind === "stream") {
|
|
29302
|
-
unpacked =
|
|
29336
|
+
unpacked = yield* unpackObjectStreamSteps(stmObj, maxDecompressedBytes, maxRecursionDepth, recovery === "repair");
|
|
29303
29337
|
objStmCache.set(entry.objectStreamNumber, unpacked);
|
|
29304
29338
|
}
|
|
29305
29339
|
}
|
|
@@ -29316,6 +29350,9 @@ function parseCosDocument(bytes, options = {}) {
|
|
|
29316
29350
|
}
|
|
29317
29351
|
return doc;
|
|
29318
29352
|
}
|
|
29353
|
+
function parseCosDocument(bytes, options = {}) {
|
|
29354
|
+
return drainWork(parseCosDocumentSteps(bytes, options));
|
|
29355
|
+
}
|
|
29319
29356
|
var WIN_ANSI_HIGH_BYTES = {
|
|
29320
29357
|
128: 8364,
|
|
29321
29358
|
130: 8218,
|
|
@@ -40691,7 +40728,8 @@ function resolveInheritedFieldEntry(doc, dict, key) {
|
|
|
40691
40728
|
}
|
|
40692
40729
|
return void 0;
|
|
40693
40730
|
}
|
|
40694
|
-
function
|
|
40731
|
+
function* collectFieldDictsSteps(doc, node, prefix = "", out = [], parentFt = "", parentFf = 0, parentQ = 0, parentMaxLen, yieldState = { work: 0 }) {
|
|
40732
|
+
if (++yieldState.work % 256 === 0) yield;
|
|
40695
40733
|
const dict = doc.resolveDict(node);
|
|
40696
40734
|
if (!dict) return out;
|
|
40697
40735
|
const tNode = doc.resolve(dictGet(dict, "T"));
|
|
@@ -40724,7 +40762,8 @@ function collectFieldDicts(doc, node, prefix = "", out = [], parentFt = "", pare
|
|
|
40724
40762
|
return out;
|
|
40725
40763
|
}
|
|
40726
40764
|
for (const kid of kidsArr.items) {
|
|
40727
|
-
|
|
40765
|
+
if (++yieldState.work % 16 === 0) yield;
|
|
40766
|
+
yield* collectFieldDictsSteps(doc, kid, fullName, out, currentFt, currentFf, currentQ, currentMaxLen, yieldState);
|
|
40728
40767
|
}
|
|
40729
40768
|
} else if (fullName) {
|
|
40730
40769
|
out.push({
|
|
@@ -41165,6 +41204,9 @@ function escapePdfLiteralString(str) {
|
|
|
41165
41204
|
}
|
|
41166
41205
|
return out;
|
|
41167
41206
|
}
|
|
41207
|
+
function collectFieldDicts(doc, node, prefix = "", out = [], parentFt = "", parentFf = 0, parentQ = 0, parentMaxLen) {
|
|
41208
|
+
drainWork(collectFieldDictsSteps(doc, node, prefix, out, parentFt, parentFf, parentQ, parentMaxLen));
|
|
41209
|
+
}
|
|
41168
41210
|
var PdfPage = class {
|
|
41169
41211
|
cosDoc;
|
|
41170
41212
|
pageRef;
|
|
@@ -43772,14 +43814,18 @@ var PdfDocument = class _PdfDocument {
|
|
|
43772
43814
|
});
|
|
43773
43815
|
return new _PdfDocument(parseCosDocument(rawBytes));
|
|
43774
43816
|
}
|
|
43775
|
-
static
|
|
43817
|
+
static *loadSteps(bytes, options) {
|
|
43818
|
+
yield;
|
|
43776
43819
|
return new _PdfDocument(
|
|
43777
|
-
|
|
43820
|
+
yield* parseCosDocumentSteps(bytes, {
|
|
43778
43821
|
...options,
|
|
43779
43822
|
recovery: options?.recovery ?? "repair"
|
|
43780
43823
|
})
|
|
43781
43824
|
);
|
|
43782
43825
|
}
|
|
43826
|
+
static load(bytes, options) {
|
|
43827
|
+
return drainWork(_PdfDocument.loadSteps(bytes, options));
|
|
43828
|
+
}
|
|
43783
43829
|
rebuildPagesList() {
|
|
43784
43830
|
const catalog = this.cos.resolveDict(this.cos.rootRef);
|
|
43785
43831
|
const pagesNode = catalog ? dictGet(catalog, "Pages") : void 0;
|
|
@@ -43861,20 +43907,30 @@ var PdfDocument = class _PdfDocument {
|
|
|
43861
43907
|
this.pages.splice(index, 1);
|
|
43862
43908
|
this.syncPageTree();
|
|
43863
43909
|
}
|
|
43864
|
-
|
|
43910
|
+
*copyPagesFromSteps(sourceDoc, indices) {
|
|
43911
|
+
function* cloneItems(items) {
|
|
43912
|
+
const result = [];
|
|
43913
|
+
for (const item of items) result.push(yield* cloneNode(item));
|
|
43914
|
+
return result;
|
|
43915
|
+
}
|
|
43916
|
+
yield;
|
|
43917
|
+
let work = 0;
|
|
43865
43918
|
const memo = /* @__PURE__ */ new Map();
|
|
43866
43919
|
const sourcePageObjNums = /* @__PURE__ */ new Set();
|
|
43867
43920
|
for (let i = 0; i < sourceDoc.getPageCount(); i++) {
|
|
43921
|
+
if (++work % 16 === 0) yield;
|
|
43868
43922
|
sourcePageObjNums.add(sourceDoc.getPage(i).ref.objectNumber);
|
|
43869
43923
|
}
|
|
43870
43924
|
const targetPageRefs = [];
|
|
43871
43925
|
for (const idx of indices) {
|
|
43926
|
+
if (++work % 16 === 0) yield;
|
|
43872
43927
|
const srcPage = sourceDoc.getPage(idx);
|
|
43873
43928
|
const pageRef = this.cos.allocateObject({ kind: "null" });
|
|
43874
43929
|
targetPageRefs.push(pageRef);
|
|
43875
43930
|
memo.set(srcPage.ref.objectNumber, pageRef);
|
|
43876
43931
|
}
|
|
43877
|
-
const cloneNode = (node)
|
|
43932
|
+
const cloneNode = function* (node) {
|
|
43933
|
+
if (++work % 16 === 0) yield;
|
|
43878
43934
|
if (node.kind === "ref") {
|
|
43879
43935
|
const existing = memo.get(node.objectNumber);
|
|
43880
43936
|
if (existing) return existing;
|
|
@@ -43885,12 +43941,12 @@ var PdfDocument = class _PdfDocument {
|
|
|
43885
43941
|
if (!target) return cosRef(0);
|
|
43886
43942
|
const placeholderRef = this.cos.allocateObject({ kind: "null" });
|
|
43887
43943
|
memo.set(node.objectNumber, placeholderRef);
|
|
43888
|
-
const clonedTarget = cloneNode(target);
|
|
43944
|
+
const clonedTarget = yield* cloneNode(target);
|
|
43889
43945
|
this.cos.setObject(placeholderRef.objectNumber, clonedTarget, 0);
|
|
43890
43946
|
return placeholderRef;
|
|
43891
43947
|
}
|
|
43892
43948
|
if (node.kind === "array") {
|
|
43893
|
-
return cosArray(node.items
|
|
43949
|
+
return cosArray(yield* cloneItems(node.items));
|
|
43894
43950
|
}
|
|
43895
43951
|
if (node.kind === "dict") {
|
|
43896
43952
|
const typeEntry = dictGet(node, "Type");
|
|
@@ -43900,13 +43956,13 @@ var PdfDocument = class _PdfDocument {
|
|
|
43900
43956
|
if (isPageTreeNode && entry.key.decoded === "Parent") continue;
|
|
43901
43957
|
newEntries.push({
|
|
43902
43958
|
key: { ...entry.key },
|
|
43903
|
-
value: cloneNode(entry.value)
|
|
43959
|
+
value: yield* cloneNode(entry.value)
|
|
43904
43960
|
});
|
|
43905
43961
|
}
|
|
43906
43962
|
return { kind: "dict", entries: newEntries };
|
|
43907
43963
|
}
|
|
43908
43964
|
if (node.kind === "stream") {
|
|
43909
|
-
const clonedDict = cloneNode(node.dict);
|
|
43965
|
+
const clonedDict = yield* cloneNode(node.dict);
|
|
43910
43966
|
return {
|
|
43911
43967
|
kind: "stream",
|
|
43912
43968
|
dict: clonedDict,
|
|
@@ -43915,11 +43971,12 @@ var PdfDocument = class _PdfDocument {
|
|
|
43915
43971
|
};
|
|
43916
43972
|
}
|
|
43917
43973
|
return node;
|
|
43918
|
-
};
|
|
43974
|
+
}.bind(this);
|
|
43919
43975
|
const copiedPages = [];
|
|
43920
43976
|
for (const [position, idx] of indices.entries()) {
|
|
43977
|
+
if (++work % 16 === 0) yield;
|
|
43921
43978
|
const srcPage = sourceDoc.getPage(idx);
|
|
43922
|
-
const clonedPageDict = cloneNode(srcPage.pageDict);
|
|
43979
|
+
const clonedPageDict = yield* cloneNode(srcPage.pageDict);
|
|
43923
43980
|
const size = srcPage.getSize();
|
|
43924
43981
|
if (!dictGet(clonedPageDict, "MediaBox")) {
|
|
43925
43982
|
dictSet(
|
|
@@ -43929,13 +43986,14 @@ var PdfDocument = class _PdfDocument {
|
|
|
43929
43986
|
);
|
|
43930
43987
|
}
|
|
43931
43988
|
if (!dictGet(clonedPageDict, "Resources")) {
|
|
43932
|
-
dictSet(clonedPageDict, "Resources", cloneNode(srcPage.getResourcesDict()));
|
|
43989
|
+
dictSet(clonedPageDict, "Resources", yield* cloneNode(srcPage.getResourcesDict()));
|
|
43933
43990
|
}
|
|
43934
43991
|
if (!dictGet(clonedPageDict, "Rotate") && srcPage.getRotation() !== 0) {
|
|
43935
43992
|
dictSet(clonedPageDict, "Rotate", cosNumber(srcPage.getRotation()));
|
|
43936
43993
|
}
|
|
43937
43994
|
const inheritedBoxKeys = ["CropBox", "BleedBox", "TrimBox", "ArtBox"];
|
|
43938
43995
|
for (const boxKey of inheritedBoxKeys) {
|
|
43996
|
+
if (++work % 16 === 0) yield;
|
|
43939
43997
|
if (!dictGet(clonedPageDict, boxKey)) {
|
|
43940
43998
|
const boxVal = boxKey === "CropBox" ? srcPage.getCropBox() : boxKey === "BleedBox" ? srcPage.getBleedBox() : boxKey === "TrimBox" ? srcPage.getTrimBox() : srcPage.getArtBox();
|
|
43941
43999
|
if (boxVal[0] !== 0 || boxVal[1] !== 0 || boxVal[2] !== size.width || boxVal[3] !== size.height) {
|
|
@@ -43977,8 +44035,9 @@ var PdfDocument = class _PdfDocument {
|
|
|
43977
44035
|
};
|
|
43978
44036
|
const clonedRootFieldRefs = [];
|
|
43979
44037
|
for (const item of srcFieldsArr.items) {
|
|
44038
|
+
if (++work % 16 === 0) yield;
|
|
43980
44039
|
if (!hasClonedDescendant(item)) continue;
|
|
43981
|
-
const cloned = cloneNode(item);
|
|
44040
|
+
const cloned = yield* cloneNode(item);
|
|
43982
44041
|
if (cloned.kind === "ref") {
|
|
43983
44042
|
const clonedDict = this.cos.resolveDict(cloned);
|
|
43984
44043
|
const kidsArr = clonedDict ? this.cos.resolveArray(dictGet(clonedDict, "Kids")) : void 0;
|
|
@@ -44012,6 +44071,7 @@ var PdfDocument = class _PdfDocument {
|
|
|
44012
44071
|
dstFields.items.filter((x) => x.kind === "ref").map((x) => x.objectNumber)
|
|
44013
44072
|
);
|
|
44014
44073
|
for (const fRef of clonedRootFieldRefs) {
|
|
44074
|
+
if (++work % 16 === 0) yield;
|
|
44015
44075
|
if (!existingNums.has(fRef.objectNumber)) {
|
|
44016
44076
|
dstFields.items.push(fRef);
|
|
44017
44077
|
existingNums.add(fRef.objectNumber);
|
|
@@ -44019,11 +44079,11 @@ var PdfDocument = class _PdfDocument {
|
|
|
44019
44079
|
}
|
|
44020
44080
|
const srcDr = dictGet(srcAcroForm, "DR");
|
|
44021
44081
|
if (srcDr && !dictGet(dstAcroForm, "DR")) {
|
|
44022
|
-
dictSet(dstAcroForm, "DR", cloneNode(srcDr));
|
|
44082
|
+
dictSet(dstAcroForm, "DR", yield* cloneNode(srcDr));
|
|
44023
44083
|
}
|
|
44024
44084
|
const srcDa = dictGet(srcAcroForm, "DA");
|
|
44025
44085
|
if (srcDa && !dictGet(dstAcroForm, "DA")) {
|
|
44026
|
-
dictSet(dstAcroForm, "DA", cloneNode(srcDa));
|
|
44086
|
+
dictSet(dstAcroForm, "DA", yield* cloneNode(srcDa));
|
|
44027
44087
|
}
|
|
44028
44088
|
}
|
|
44029
44089
|
}
|
|
@@ -44032,12 +44092,15 @@ var PdfDocument = class _PdfDocument {
|
|
|
44032
44092
|
if (srcOcProps) {
|
|
44033
44093
|
const dstCatalog = this.cos.resolveDict(this.cos.rootRef);
|
|
44034
44094
|
if (dstCatalog && !dictGet(dstCatalog, "OCProperties")) {
|
|
44035
|
-
dictSet(dstCatalog, "OCProperties", cloneNode(srcOcProps));
|
|
44095
|
+
dictSet(dstCatalog, "OCProperties", yield* cloneNode(srcOcProps));
|
|
44036
44096
|
}
|
|
44037
44097
|
}
|
|
44038
44098
|
this.syncPageTree();
|
|
44039
44099
|
return copiedPages;
|
|
44040
44100
|
}
|
|
44101
|
+
copyPagesFrom(sourceDoc, indices) {
|
|
44102
|
+
return drainWork(this.copyPagesFromSteps(sourceDoc, indices));
|
|
44103
|
+
}
|
|
44041
44104
|
embedStandardFont(fontName) {
|
|
44042
44105
|
return createStandardFontHandle(fontName);
|
|
44043
44106
|
}
|
|
@@ -44237,14 +44300,15 @@ var PdfDocument = class _PdfDocument {
|
|
|
44237
44300
|
});
|
|
44238
44301
|
return buildSemanticAstFromPages(extractedPages, tablesByPage, displayLists);
|
|
44239
44302
|
}
|
|
44240
|
-
|
|
44303
|
+
*saveSteps(options = {}) {
|
|
44304
|
+
yield;
|
|
44241
44305
|
this.syncPageTree();
|
|
44242
44306
|
if (this.cos.requiresFullRewrite) {
|
|
44243
44307
|
pruneUnusedXObjects(this.cos, this.pages);
|
|
44244
44308
|
discardUnreachableObjects(this.cos);
|
|
44245
44309
|
}
|
|
44246
44310
|
if (options.encrypt) {
|
|
44247
|
-
return
|
|
44311
|
+
return yield* encryptCosDocumentSteps(this.cos, options.encrypt);
|
|
44248
44312
|
}
|
|
44249
44313
|
const allObjects = [...this.cos.objects.values()].sort(
|
|
44250
44314
|
(a, b) => a.objectNumber - b.objectNumber
|
|
@@ -44252,7 +44316,7 @@ var PdfDocument = class _PdfDocument {
|
|
|
44252
44316
|
if (options.incremental && !this.cos.requiresFullRewrite && this.cos.bytes.length > 0) {
|
|
44253
44317
|
return appendIncrementalRevision(this.cos.bytes, this.cos, allObjects);
|
|
44254
44318
|
}
|
|
44255
|
-
return
|
|
44319
|
+
return yield* serializeCosDocumentSteps({
|
|
44256
44320
|
objects: allObjects,
|
|
44257
44321
|
rootRef: this.cos.rootRef,
|
|
44258
44322
|
infoRef: this.cos.infoRef,
|
|
@@ -44263,6 +44327,9 @@ var PdfDocument = class _PdfDocument {
|
|
|
44263
44327
|
linearize: options.linearize
|
|
44264
44328
|
});
|
|
44265
44329
|
}
|
|
44330
|
+
save(options = {}) {
|
|
44331
|
+
return drainWork(this.saveSteps(options));
|
|
44332
|
+
}
|
|
44266
44333
|
};
|
|
44267
44334
|
function formatPopplerSize(byteLength) {
|
|
44268
44335
|
if (byteLength >= 1024 * 1024) {
|