@cj-tech-master/excelts 4.2.0-canary.20260110111632.c88c61c → 4.2.1-canary.20260111102127.f808a37
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/THIRD_PARTY_NOTICES.md +0 -31
- package/dist/browser/index.browser.d.ts +1 -0
- package/dist/browser/index.browser.js +12 -0
- package/dist/{esm/modules/archive → browser/modules/archive/compression}/compress.base.js +1 -1
- package/dist/{types/modules/archive → browser/modules/archive/compression}/compress.browser.d.ts +2 -8
- package/dist/browser/modules/archive/{compress.browser.js → compression/compress.browser.js} +3 -11
- package/dist/browser/modules/archive/{compress.d.ts → compression/compress.d.ts} +2 -2
- package/dist/{esm/modules/archive → browser/modules/archive/compression}/compress.js +1 -1
- package/dist/browser/modules/archive/{crc32.browser.d.ts → compression/crc32.browser.d.ts} +1 -1
- package/dist/browser/modules/archive/{crc32.d.ts → compression/crc32.d.ts} +1 -1
- package/dist/browser/modules/archive/{crc32.js → compression/crc32.js} +1 -1
- package/dist/browser/modules/archive/{deflate-fallback.js → compression/deflate-fallback.js} +1 -1
- package/dist/browser/modules/archive/{streaming-compress.browser.d.ts → compression/streaming-compress.browser.d.ts} +2 -2
- package/dist/browser/modules/archive/{streaming-compress.browser.js → compression/streaming-compress.browser.js} +3 -3
- package/dist/browser/modules/archive/{streaming-compress.d.ts → compression/streaming-compress.d.ts} +2 -2
- package/dist/browser/modules/archive/{streaming-compress.js → compression/streaming-compress.js} +2 -2
- package/dist/browser/modules/archive/defaults.d.ts +1 -0
- package/dist/browser/modules/archive/defaults.js +6 -3
- package/dist/browser/modules/archive/index.base.d.ts +4 -4
- package/dist/browser/modules/archive/index.base.js +3 -6
- package/dist/browser/modules/archive/index.browser.d.ts +3 -4
- package/dist/browser/modules/archive/index.browser.js +3 -7
- package/dist/browser/modules/archive/index.d.ts +3 -4
- package/dist/browser/modules/archive/index.js +3 -5
- package/dist/browser/modules/archive/internal/byte-queue.d.ts +33 -0
- package/dist/browser/modules/archive/internal/byte-queue.js +407 -0
- package/dist/browser/modules/archive/io/archive-sink.d.ts +9 -0
- package/dist/browser/modules/archive/io/archive-sink.js +77 -0
- package/dist/browser/modules/archive/io/archive-source.d.ts +8 -0
- package/dist/browser/modules/archive/io/archive-source.js +107 -0
- package/dist/browser/modules/archive/{extract.d.ts → unzip/extract.d.ts} +2 -2
- package/dist/browser/modules/archive/unzip/index.d.ts +40 -0
- package/dist/browser/modules/archive/unzip/index.js +164 -0
- package/dist/browser/modules/archive/{parse.base.d.ts → unzip/stream.base.d.ts} +36 -2
- package/dist/browser/modules/archive/unzip/stream.base.js +1022 -0
- package/dist/browser/modules/archive/{parse.browser.d.ts → unzip/stream.browser.d.ts} +1 -1
- package/dist/browser/modules/archive/{parse.browser.js → unzip/stream.browser.js} +371 -110
- package/dist/browser/modules/archive/{parse.d.ts → unzip/stream.d.ts} +2 -2
- package/dist/{esm/modules/archive/parse.js → browser/modules/archive/unzip/stream.js} +6 -5
- package/dist/browser/modules/archive/{zip-parser.d.ts → unzip/zip-parser.d.ts} +1 -1
- package/dist/{esm/modules/archive → browser/modules/archive/unzip}/zip-parser.js +38 -24
- package/dist/browser/modules/archive/utils/async-queue.d.ts +7 -0
- package/dist/browser/modules/archive/utils/async-queue.js +103 -0
- package/dist/browser/modules/archive/utils/bytes.js +16 -16
- package/dist/browser/modules/archive/utils/compressibility.d.ts +10 -0
- package/dist/browser/modules/archive/utils/compressibility.js +57 -0
- package/dist/browser/modules/archive/utils/parse-buffer.js +21 -23
- package/dist/browser/modules/archive/utils/pattern-scanner.d.ts +21 -0
- package/dist/browser/modules/archive/utils/pattern-scanner.js +27 -0
- package/dist/browser/modules/archive/utils/timestamps.js +62 -1
- package/dist/browser/modules/archive/utils/zip-extra-fields.d.ts +1 -1
- package/dist/browser/modules/archive/utils/zip-extra-fields.js +26 -14
- package/dist/browser/modules/archive/zip/index.d.ts +42 -0
- package/dist/browser/modules/archive/zip/index.js +157 -0
- package/dist/browser/modules/archive/{streaming-zip.d.ts → zip/stream.d.ts} +28 -5
- package/dist/browser/modules/archive/{streaming-zip.js → zip/stream.js} +192 -48
- package/dist/browser/modules/archive/zip/zip-bytes.d.ts +73 -0
- package/dist/browser/modules/archive/zip/zip-bytes.js +239 -0
- package/dist/{esm/modules/archive → browser/modules/archive/zip}/zip-entry-metadata.js +3 -3
- package/dist/browser/modules/archive/{zip-records.d.ts → zip-spec/zip-records.d.ts} +20 -0
- package/dist/browser/modules/archive/zip-spec/zip-records.js +126 -0
- package/dist/browser/modules/excel/stream/workbook-reader.browser.js +1 -1
- package/dist/browser/modules/excel/stream/workbook-writer.browser.d.ts +1 -1
- package/dist/browser/modules/excel/stream/workbook-writer.browser.js +1 -1
- package/dist/browser/modules/excel/xlsx/xlsx.browser.js +3 -6
- package/dist/browser/modules/excel/xlsx/xlsx.js +1 -1
- package/dist/browser/modules/stream/streams.browser.d.ts +28 -30
- package/dist/browser/modules/stream/streams.browser.js +830 -710
- package/dist/browser/modules/stream/streams.js +140 -58
- package/dist/cjs/modules/archive/{compress.base.js → compression/compress.base.js} +1 -1
- package/dist/cjs/modules/archive/{compress.browser.js → compression/compress.browser.js} +3 -11
- package/dist/cjs/modules/archive/{compress.js → compression/compress.js} +1 -1
- package/dist/cjs/modules/archive/{crc32.js → compression/crc32.js} +1 -1
- package/dist/cjs/modules/archive/{deflate-fallback.js → compression/deflate-fallback.js} +1 -1
- package/dist/cjs/modules/archive/{streaming-compress.browser.js → compression/streaming-compress.browser.js} +3 -3
- package/dist/cjs/modules/archive/{streaming-compress.js → compression/streaming-compress.js} +2 -2
- package/dist/cjs/modules/archive/defaults.js +7 -4
- package/dist/cjs/modules/archive/index.base.js +9 -19
- package/dist/cjs/modules/archive/index.browser.js +4 -10
- package/dist/cjs/modules/archive/index.js +4 -8
- package/dist/cjs/modules/archive/internal/byte-queue.js +411 -0
- package/dist/cjs/modules/archive/io/archive-sink.js +82 -0
- package/dist/cjs/modules/archive/io/archive-source.js +114 -0
- package/dist/cjs/modules/archive/unzip/index.js +170 -0
- package/dist/cjs/modules/archive/unzip/stream.base.js +1044 -0
- package/dist/cjs/modules/archive/{parse.browser.js → unzip/stream.browser.js} +372 -111
- package/dist/cjs/modules/archive/{parse.js → unzip/stream.js} +9 -8
- package/dist/cjs/modules/archive/{zip-parser.js → unzip/zip-parser.js} +47 -33
- package/dist/cjs/modules/archive/utils/async-queue.js +106 -0
- package/dist/cjs/modules/archive/utils/bytes.js +16 -16
- package/dist/cjs/modules/archive/utils/compressibility.js +60 -0
- package/dist/cjs/modules/archive/utils/parse-buffer.js +21 -23
- package/dist/cjs/modules/archive/utils/pattern-scanner.js +31 -0
- package/dist/cjs/modules/archive/utils/timestamps.js +64 -3
- package/dist/cjs/modules/archive/utils/zip-extra-fields.js +26 -14
- package/dist/cjs/modules/archive/zip/index.js +162 -0
- package/dist/cjs/modules/archive/{streaming-zip.js → zip/stream.js} +194 -50
- package/dist/cjs/modules/archive/zip/zip-bytes.js +242 -0
- package/dist/cjs/modules/archive/{zip-entry-metadata.js → zip/zip-entry-metadata.js} +5 -5
- package/dist/cjs/modules/archive/zip-spec/zip-records.js +136 -0
- package/dist/cjs/modules/excel/stream/workbook-reader.browser.js +2 -2
- package/dist/cjs/modules/excel/stream/workbook-writer.browser.js +4 -4
- package/dist/cjs/modules/excel/xlsx/xlsx.browser.js +6 -9
- package/dist/cjs/modules/excel/xlsx/xlsx.js +2 -2
- package/dist/cjs/modules/stream/streams.browser.js +830 -710
- package/dist/cjs/modules/stream/streams.js +140 -58
- package/dist/esm/index.browser.js +12 -0
- package/dist/{browser/modules/archive → esm/modules/archive/compression}/compress.base.js +1 -1
- package/dist/esm/modules/archive/{compress.browser.js → compression/compress.browser.js} +3 -11
- package/dist/{browser/modules/archive → esm/modules/archive/compression}/compress.js +1 -1
- package/dist/esm/modules/archive/{crc32.js → compression/crc32.js} +1 -1
- package/dist/esm/modules/archive/{deflate-fallback.js → compression/deflate-fallback.js} +1 -1
- package/dist/esm/modules/archive/{streaming-compress.browser.js → compression/streaming-compress.browser.js} +3 -3
- package/dist/esm/modules/archive/{streaming-compress.js → compression/streaming-compress.js} +2 -2
- package/dist/esm/modules/archive/defaults.js +6 -3
- package/dist/esm/modules/archive/index.base.js +3 -6
- package/dist/esm/modules/archive/index.browser.js +3 -7
- package/dist/esm/modules/archive/index.js +3 -5
- package/dist/esm/modules/archive/internal/byte-queue.js +407 -0
- package/dist/esm/modules/archive/io/archive-sink.js +77 -0
- package/dist/esm/modules/archive/io/archive-source.js +107 -0
- package/dist/esm/modules/archive/unzip/index.js +164 -0
- package/dist/esm/modules/archive/unzip/stream.base.js +1022 -0
- package/dist/esm/modules/archive/{parse.browser.js → unzip/stream.browser.js} +371 -110
- package/dist/{browser/modules/archive/parse.js → esm/modules/archive/unzip/stream.js} +6 -5
- package/dist/{browser/modules/archive → esm/modules/archive/unzip}/zip-parser.js +38 -24
- package/dist/esm/modules/archive/utils/async-queue.js +103 -0
- package/dist/esm/modules/archive/utils/bytes.js +16 -16
- package/dist/esm/modules/archive/utils/compressibility.js +57 -0
- package/dist/esm/modules/archive/utils/parse-buffer.js +21 -23
- package/dist/esm/modules/archive/utils/pattern-scanner.js +27 -0
- package/dist/esm/modules/archive/utils/timestamps.js +62 -1
- package/dist/esm/modules/archive/utils/zip-extra-fields.js +26 -14
- package/dist/esm/modules/archive/zip/index.js +157 -0
- package/dist/esm/modules/archive/{streaming-zip.js → zip/stream.js} +192 -48
- package/dist/esm/modules/archive/zip/zip-bytes.js +239 -0
- package/dist/{browser/modules/archive → esm/modules/archive/zip}/zip-entry-metadata.js +3 -3
- package/dist/esm/modules/archive/zip-spec/zip-records.js +126 -0
- package/dist/esm/modules/excel/stream/workbook-reader.browser.js +1 -1
- package/dist/esm/modules/excel/stream/workbook-writer.browser.js +1 -1
- package/dist/esm/modules/excel/xlsx/xlsx.browser.js +3 -6
- package/dist/esm/modules/excel/xlsx/xlsx.js +1 -1
- package/dist/esm/modules/stream/streams.browser.js +830 -710
- package/dist/esm/modules/stream/streams.js +140 -58
- package/dist/iife/THIRD_PARTY_NOTICES.md +0 -31
- package/dist/iife/excelts.iife.js +6190 -4400
- package/dist/iife/excelts.iife.js.map +1 -1
- package/dist/iife/excelts.iife.min.js +103 -31
- package/dist/types/index.browser.d.ts +1 -0
- package/dist/{browser/modules/archive → types/modules/archive/compression}/compress.browser.d.ts +2 -8
- package/dist/types/modules/archive/{streaming-compress.browser.d.ts → compression/streaming-compress.browser.d.ts} +1 -1
- package/dist/types/modules/archive/defaults.d.ts +1 -0
- package/dist/types/modules/archive/index.base.d.ts +4 -4
- package/dist/types/modules/archive/index.browser.d.ts +3 -4
- package/dist/types/modules/archive/index.d.ts +3 -4
- package/dist/types/modules/archive/internal/byte-queue.d.ts +33 -0
- package/dist/types/modules/archive/io/archive-sink.d.ts +9 -0
- package/dist/types/modules/archive/io/archive-source.d.ts +8 -0
- package/dist/types/modules/archive/unzip/index.d.ts +40 -0
- package/dist/types/modules/archive/{parse.base.d.ts → unzip/stream.base.d.ts} +38 -4
- package/dist/types/modules/archive/{parse.browser.d.ts → unzip/stream.browser.d.ts} +2 -2
- package/dist/types/modules/archive/{parse.d.ts → unzip/stream.d.ts} +3 -3
- package/dist/types/modules/archive/{zip-parser.d.ts → unzip/zip-parser.d.ts} +1 -1
- package/dist/types/modules/archive/utils/async-queue.d.ts +7 -0
- package/dist/types/modules/archive/utils/compressibility.d.ts +10 -0
- package/dist/types/modules/archive/utils/pattern-scanner.d.ts +21 -0
- package/dist/types/modules/archive/utils/zip-extra-fields.d.ts +1 -1
- package/dist/types/modules/archive/zip/index.d.ts +42 -0
- package/dist/types/modules/archive/{streaming-zip.d.ts → zip/stream.d.ts} +29 -6
- package/dist/types/modules/archive/zip/zip-bytes.d.ts +73 -0
- package/dist/types/modules/archive/{zip-entry-metadata.d.ts → zip/zip-entry-metadata.d.ts} +1 -1
- package/dist/types/modules/archive/{zip-records.d.ts → zip-spec/zip-records.d.ts} +20 -0
- package/dist/types/modules/excel/stream/workbook-writer.browser.d.ts +1 -1
- package/dist/types/modules/stream/streams.browser.d.ts +28 -30
- package/package.json +5 -1
- package/dist/browser/modules/archive/byte-queue.d.ts +0 -18
- package/dist/browser/modules/archive/byte-queue.js +0 -125
- package/dist/browser/modules/archive/parse.base.js +0 -644
- package/dist/browser/modules/archive/utils/zip-extra.d.ts +0 -18
- package/dist/browser/modules/archive/utils/zip-extra.js +0 -68
- package/dist/browser/modules/archive/zip-builder.d.ts +0 -117
- package/dist/browser/modules/archive/zip-builder.js +0 -292
- package/dist/browser/modules/archive/zip-constants.d.ts +0 -18
- package/dist/browser/modules/archive/zip-constants.js +0 -23
- package/dist/browser/modules/archive/zip-records.js +0 -84
- package/dist/cjs/modules/archive/byte-queue.js +0 -129
- package/dist/cjs/modules/archive/parse.base.js +0 -666
- package/dist/cjs/modules/archive/utils/zip-extra.js +0 -74
- package/dist/cjs/modules/archive/zip-builder.js +0 -297
- package/dist/cjs/modules/archive/zip-constants.js +0 -26
- package/dist/cjs/modules/archive/zip-records.js +0 -90
- package/dist/esm/modules/archive/byte-queue.js +0 -125
- package/dist/esm/modules/archive/parse.base.js +0 -644
- package/dist/esm/modules/archive/utils/zip-extra.js +0 -68
- package/dist/esm/modules/archive/zip-builder.js +0 -292
- package/dist/esm/modules/archive/zip-constants.js +0 -23
- package/dist/esm/modules/archive/zip-records.js +0 -84
- package/dist/types/modules/archive/byte-queue.d.ts +0 -18
- package/dist/types/modules/archive/utils/zip-extra.d.ts +0 -18
- package/dist/types/modules/archive/zip-builder.d.ts +0 -117
- package/dist/types/modules/archive/zip-constants.d.ts +0 -18
- /package/dist/browser/modules/archive/{compress.base.d.ts → compression/compress.base.d.ts} +0 -0
- /package/dist/browser/modules/archive/{crc32.base.d.ts → compression/crc32.base.d.ts} +0 -0
- /package/dist/browser/modules/archive/{crc32.base.js → compression/crc32.base.js} +0 -0
- /package/dist/browser/modules/archive/{crc32.browser.js → compression/crc32.browser.js} +0 -0
- /package/dist/browser/modules/archive/{deflate-fallback.d.ts → compression/deflate-fallback.d.ts} +0 -0
- /package/dist/browser/modules/archive/{streaming-compress.base.d.ts → compression/streaming-compress.base.d.ts} +0 -0
- /package/dist/browser/modules/archive/{streaming-compress.base.js → compression/streaming-compress.base.js} +0 -0
- /package/dist/browser/modules/archive/{extract.js → unzip/extract.js} +0 -0
- /package/dist/browser/modules/archive/{zip-entry-metadata.d.ts → zip/zip-entry-metadata.d.ts} +0 -0
- /package/dist/browser/modules/archive/{zip-entry-info.d.ts → zip-spec/zip-entry-info.d.ts} +0 -0
- /package/dist/browser/modules/archive/{zip-entry-info.js → zip-spec/zip-entry-info.js} +0 -0
- /package/dist/cjs/modules/archive/{crc32.base.js → compression/crc32.base.js} +0 -0
- /package/dist/cjs/modules/archive/{crc32.browser.js → compression/crc32.browser.js} +0 -0
- /package/dist/cjs/modules/archive/{streaming-compress.base.js → compression/streaming-compress.base.js} +0 -0
- /package/dist/cjs/modules/archive/{extract.js → unzip/extract.js} +0 -0
- /package/dist/cjs/modules/archive/{zip-entry-info.js → zip-spec/zip-entry-info.js} +0 -0
- /package/dist/esm/modules/archive/{crc32.base.js → compression/crc32.base.js} +0 -0
- /package/dist/esm/modules/archive/{crc32.browser.js → compression/crc32.browser.js} +0 -0
- /package/dist/esm/modules/archive/{streaming-compress.base.js → compression/streaming-compress.base.js} +0 -0
- /package/dist/esm/modules/archive/{extract.js → unzip/extract.js} +0 -0
- /package/dist/esm/modules/archive/{zip-entry-info.js → zip-spec/zip-entry-info.js} +0 -0
- /package/dist/types/modules/archive/{compress.base.d.ts → compression/compress.base.d.ts} +0 -0
- /package/dist/types/modules/archive/{compress.d.ts → compression/compress.d.ts} +0 -0
- /package/dist/types/modules/archive/{crc32.base.d.ts → compression/crc32.base.d.ts} +0 -0
- /package/dist/types/modules/archive/{crc32.browser.d.ts → compression/crc32.browser.d.ts} +0 -0
- /package/dist/types/modules/archive/{crc32.d.ts → compression/crc32.d.ts} +0 -0
- /package/dist/types/modules/archive/{deflate-fallback.d.ts → compression/deflate-fallback.d.ts} +0 -0
- /package/dist/types/modules/archive/{streaming-compress.base.d.ts → compression/streaming-compress.base.d.ts} +0 -0
- /package/dist/types/modules/archive/{streaming-compress.d.ts → compression/streaming-compress.d.ts} +0 -0
- /package/dist/types/modules/archive/{extract.d.ts → unzip/extract.d.ts} +0 -0
- /package/dist/types/modules/archive/{zip-entry-info.d.ts → zip-spec/zip-entry-info.d.ts} +0 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ZIP file format encoder (single-buffer output)
|
|
4
|
+
*
|
|
5
|
+
* Implements ZIP file structure according to PKWARE's APPNOTE.TXT specification
|
|
6
|
+
* https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT
|
|
7
|
+
*
|
|
8
|
+
* This module focuses on producing a complete ZIP as a single Uint8Array.
|
|
9
|
+
* For true streaming (push chunks while reading sources), use `zip()` / `ZipArchive.stream()`.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.createZip = createZip;
|
|
13
|
+
exports.createZipSync = createZipSync;
|
|
14
|
+
const compress_1 = require("../compression/compress.js");
|
|
15
|
+
const crc32_1 = require("../compression/crc32.js");
|
|
16
|
+
const defaults_1 = require("../defaults.js");
|
|
17
|
+
const compressibility_1 = require("../utils/compressibility.js");
|
|
18
|
+
const text_1 = require("../utils/text.js");
|
|
19
|
+
const zip_entry_metadata_1 = require("./zip-entry-metadata.js");
|
|
20
|
+
const zip_records_1 = require("../zip-spec/zip-records.js");
|
|
21
|
+
const REPRODUCIBLE_ZIP_MOD_TIME = new Date(1980, 0, 1, 0, 0, 0);
|
|
22
|
+
function encodeZipComment(comment) {
|
|
23
|
+
// Keep empty comment as empty bytes (no encoding surprises).
|
|
24
|
+
return comment ? (0, text_1.encodeUtf8)(comment) : new Uint8Array(0);
|
|
25
|
+
}
|
|
26
|
+
function shouldDeflate(level, data) {
|
|
27
|
+
return level > 0 && data.length > 0;
|
|
28
|
+
}
|
|
29
|
+
async function compressEntryMaybe(entry, level, compressOptions, smartStore) {
|
|
30
|
+
if (!shouldDeflate(level, entry.data)) {
|
|
31
|
+
return { compressedData: entry.data, deflate: false };
|
|
32
|
+
}
|
|
33
|
+
if (!smartStore) {
|
|
34
|
+
const compressed = await (0, compress_1.compress)(entry.data, compressOptions);
|
|
35
|
+
return { compressedData: compressed, deflate: true };
|
|
36
|
+
}
|
|
37
|
+
// Heuristic: skip deflate for high-entropy inputs.
|
|
38
|
+
if ((0, compressibility_1.isProbablyIncompressible)(entry.data)) {
|
|
39
|
+
return { compressedData: entry.data, deflate: false };
|
|
40
|
+
}
|
|
41
|
+
const compressed = await (0, compress_1.compress)(entry.data, compressOptions);
|
|
42
|
+
if (compressed.length >= entry.data.length) {
|
|
43
|
+
return { compressedData: entry.data, deflate: false };
|
|
44
|
+
}
|
|
45
|
+
return { compressedData: compressed, deflate: true };
|
|
46
|
+
}
|
|
47
|
+
function compressEntryMaybeSync(entry, level, compressOptions, smartStore) {
|
|
48
|
+
if (!shouldDeflate(level, entry.data)) {
|
|
49
|
+
return { compressedData: entry.data, deflate: false };
|
|
50
|
+
}
|
|
51
|
+
if (!smartStore) {
|
|
52
|
+
const compressed = (0, compress_1.compressSync)(entry.data, compressOptions);
|
|
53
|
+
return { compressedData: compressed, deflate: true };
|
|
54
|
+
}
|
|
55
|
+
if ((0, compressibility_1.isProbablyIncompressible)(entry.data)) {
|
|
56
|
+
return { compressedData: entry.data, deflate: false };
|
|
57
|
+
}
|
|
58
|
+
const compressed = (0, compress_1.compressSync)(entry.data, compressOptions);
|
|
59
|
+
if (compressed.length >= entry.data.length) {
|
|
60
|
+
return { compressedData: entry.data, deflate: false };
|
|
61
|
+
}
|
|
62
|
+
return { compressedData: compressed, deflate: true };
|
|
63
|
+
}
|
|
64
|
+
function computeLocalRecordSize(entry) {
|
|
65
|
+
return (zip_records_1.ZIP_LOCAL_FILE_HEADER_FIXED_SIZE +
|
|
66
|
+
entry.name.length +
|
|
67
|
+
entry.extraField.length +
|
|
68
|
+
entry.compressedData.length);
|
|
69
|
+
}
|
|
70
|
+
function computeCentralDirHeaderSize(entry) {
|
|
71
|
+
return (zip_records_1.ZIP_CENTRAL_DIR_HEADER_FIXED_SIZE +
|
|
72
|
+
entry.name.length +
|
|
73
|
+
entry.extraField.length +
|
|
74
|
+
entry.comment.length);
|
|
75
|
+
}
|
|
76
|
+
function buildProcessedEntry(entry, offset, settings, compressedData, deflate) {
|
|
77
|
+
const modDate = entry.modTime ?? settings.defaultModTime;
|
|
78
|
+
const metadata = (0, zip_entry_metadata_1.buildZipEntryMetadata)({
|
|
79
|
+
name: entry.name,
|
|
80
|
+
comment: entry.comment,
|
|
81
|
+
modTime: modDate,
|
|
82
|
+
timestamps: settings.timestamps,
|
|
83
|
+
useDataDescriptor: false,
|
|
84
|
+
deflate
|
|
85
|
+
});
|
|
86
|
+
return {
|
|
87
|
+
name: metadata.nameBytes,
|
|
88
|
+
uncompressedSize: entry.data.length,
|
|
89
|
+
compressedData,
|
|
90
|
+
crc: (0, crc32_1.crc32)(entry.data),
|
|
91
|
+
compressionMethod: (0, zip_entry_metadata_1.resolveZipCompressionMethod)(deflate),
|
|
92
|
+
modTime: metadata.dosTime,
|
|
93
|
+
modDate: metadata.dosDate,
|
|
94
|
+
extraField: metadata.extraField,
|
|
95
|
+
comment: metadata.commentBytes,
|
|
96
|
+
offset
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function appendProcessedEntry(processedEntries, entry, compressedData, deflate, currentOffset, settings) {
|
|
100
|
+
const processedEntry = buildProcessedEntry(entry, currentOffset, settings, compressedData, deflate);
|
|
101
|
+
processedEntries.push(processedEntry);
|
|
102
|
+
return {
|
|
103
|
+
processedEntry,
|
|
104
|
+
nextOffset: currentOffset + computeLocalRecordSize(processedEntry)
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function finalizeZip(processedEntries, zipComment) {
|
|
108
|
+
// Assemble ZIP into a single buffer to reduce allocations and copying.
|
|
109
|
+
let localSectionSize = 0;
|
|
110
|
+
let centralDirSize = 0;
|
|
111
|
+
for (const entry of processedEntries) {
|
|
112
|
+
localSectionSize += computeLocalRecordSize(entry);
|
|
113
|
+
centralDirSize += computeCentralDirHeaderSize(entry);
|
|
114
|
+
}
|
|
115
|
+
// The central directory should start immediately after local section.
|
|
116
|
+
const centralDirOffset = localSectionSize;
|
|
117
|
+
const totalSize = localSectionSize + centralDirSize + zip_records_1.ZIP_END_OF_CENTRAL_DIR_FIXED_SIZE + zipComment.length;
|
|
118
|
+
const out = new Uint8Array(totalSize);
|
|
119
|
+
const view = new DataView(out.buffer, out.byteOffset, out.byteLength);
|
|
120
|
+
let offset = 0;
|
|
121
|
+
// Local file headers and data
|
|
122
|
+
for (const entry of processedEntries) {
|
|
123
|
+
offset += (0, zip_records_1.writeLocalFileHeaderInto)(out, view, offset, {
|
|
124
|
+
fileName: entry.name,
|
|
125
|
+
extraField: entry.extraField,
|
|
126
|
+
flags: zip_records_1.FLAG_UTF8,
|
|
127
|
+
compressionMethod: entry.compressionMethod,
|
|
128
|
+
dosTime: entry.modTime,
|
|
129
|
+
dosDate: entry.modDate,
|
|
130
|
+
crc32: entry.crc,
|
|
131
|
+
compressedSize: entry.compressedData.length,
|
|
132
|
+
uncompressedSize: entry.uncompressedSize
|
|
133
|
+
});
|
|
134
|
+
out.set(entry.compressedData, offset);
|
|
135
|
+
offset += entry.compressedData.length;
|
|
136
|
+
}
|
|
137
|
+
// Central directory headers
|
|
138
|
+
for (const entry of processedEntries) {
|
|
139
|
+
offset += (0, zip_records_1.writeCentralDirectoryHeaderInto)(out, view, offset, {
|
|
140
|
+
fileName: entry.name,
|
|
141
|
+
extraField: entry.extraField,
|
|
142
|
+
comment: entry.comment,
|
|
143
|
+
flags: zip_records_1.FLAG_UTF8,
|
|
144
|
+
compressionMethod: entry.compressionMethod,
|
|
145
|
+
dosTime: entry.modTime,
|
|
146
|
+
dosDate: entry.modDate,
|
|
147
|
+
crc32: entry.crc,
|
|
148
|
+
compressedSize: entry.compressedData.length,
|
|
149
|
+
uncompressedSize: entry.uncompressedSize,
|
|
150
|
+
localHeaderOffset: entry.offset
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
// End of central directory
|
|
154
|
+
(0, zip_records_1.writeEndOfCentralDirectoryInto)(out, view, offset, {
|
|
155
|
+
entryCount: processedEntries.length,
|
|
156
|
+
centralDirSize,
|
|
157
|
+
centralDirOffset,
|
|
158
|
+
comment: zipComment
|
|
159
|
+
});
|
|
160
|
+
return out;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Create a ZIP file from entries (async)
|
|
164
|
+
*/
|
|
165
|
+
async function createZip(entries, options = {}) {
|
|
166
|
+
const reproducible = options.reproducible ?? false;
|
|
167
|
+
const level = options.level ?? defaults_1.DEFAULT_ZIP_LEVEL;
|
|
168
|
+
const smartStore = options.smartStore ?? true;
|
|
169
|
+
const concurrency = options.concurrency ?? 4;
|
|
170
|
+
const timestamps = options.timestamps ?? (reproducible ? "dos" : defaults_1.DEFAULT_ZIP_TIMESTAMPS);
|
|
171
|
+
const zipComment = encodeZipComment(options.comment);
|
|
172
|
+
const defaultModTime = options.modTime ?? (reproducible ? REPRODUCIBLE_ZIP_MOD_TIME : new Date());
|
|
173
|
+
const settings = {
|
|
174
|
+
level,
|
|
175
|
+
timestamps,
|
|
176
|
+
defaultModTime
|
|
177
|
+
};
|
|
178
|
+
const thresholdBytes = options.thresholdBytes;
|
|
179
|
+
const limit = Math.max(1, Math.floor(concurrency));
|
|
180
|
+
const processedEntries = new Array(entries.length);
|
|
181
|
+
if (entries.length > 0) {
|
|
182
|
+
let nextIndex = 0;
|
|
183
|
+
const workerCount = Math.min(limit, entries.length);
|
|
184
|
+
const workers = Array.from({ length: workerCount }, async () => {
|
|
185
|
+
while (true) {
|
|
186
|
+
const idx = nextIndex++;
|
|
187
|
+
if (idx >= entries.length) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
const entry = entries[idx];
|
|
191
|
+
const entryLevel = entry.level ?? level;
|
|
192
|
+
const compressOptions = {
|
|
193
|
+
level: entryLevel,
|
|
194
|
+
thresholdBytes
|
|
195
|
+
};
|
|
196
|
+
const { compressedData, deflate } = await compressEntryMaybe(entry, entryLevel, compressOptions, smartStore);
|
|
197
|
+
processedEntries[idx] = buildProcessedEntry(entry, 0, settings, compressedData, deflate);
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
await Promise.all(workers);
|
|
201
|
+
}
|
|
202
|
+
// Compute offsets in original order.
|
|
203
|
+
let currentOffset = 0;
|
|
204
|
+
for (let i = 0; i < processedEntries.length; i++) {
|
|
205
|
+
const processedEntry = processedEntries[i];
|
|
206
|
+
processedEntry.offset = currentOffset;
|
|
207
|
+
currentOffset += computeLocalRecordSize(processedEntry);
|
|
208
|
+
}
|
|
209
|
+
return finalizeZip(processedEntries, zipComment);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Create a ZIP file from entries (sync)
|
|
213
|
+
*
|
|
214
|
+
* This is supported in both Node.js and browser builds.
|
|
215
|
+
*/
|
|
216
|
+
function createZipSync(entries, options = {}) {
|
|
217
|
+
const reproducible = options.reproducible ?? false;
|
|
218
|
+
const level = options.level ?? defaults_1.DEFAULT_ZIP_LEVEL;
|
|
219
|
+
const smartStore = options.smartStore ?? true;
|
|
220
|
+
const timestamps = options.timestamps ?? (reproducible ? "dos" : defaults_1.DEFAULT_ZIP_TIMESTAMPS);
|
|
221
|
+
const zipComment = encodeZipComment(options.comment);
|
|
222
|
+
const defaultModTime = options.modTime ?? (reproducible ? REPRODUCIBLE_ZIP_MOD_TIME : new Date());
|
|
223
|
+
const settings = {
|
|
224
|
+
level,
|
|
225
|
+
timestamps,
|
|
226
|
+
defaultModTime
|
|
227
|
+
};
|
|
228
|
+
const thresholdBytes = options.thresholdBytes;
|
|
229
|
+
const processedEntries = [];
|
|
230
|
+
let currentOffset = 0;
|
|
231
|
+
for (const entry of entries) {
|
|
232
|
+
const entryLevel = entry.level ?? level;
|
|
233
|
+
const compressOptions = {
|
|
234
|
+
level: entryLevel,
|
|
235
|
+
thresholdBytes
|
|
236
|
+
};
|
|
237
|
+
const { compressedData, deflate } = compressEntryMaybeSync(entry, entryLevel, compressOptions, smartStore);
|
|
238
|
+
const result = appendProcessedEntry(processedEntries, entry, compressedData, deflate, currentOffset, settings);
|
|
239
|
+
currentOffset = result.nextOffset;
|
|
240
|
+
}
|
|
241
|
+
return finalizeZip(processedEntries, zipComment);
|
|
242
|
+
}
|
|
@@ -3,14 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.resolveZipCompressionMethod = resolveZipCompressionMethod;
|
|
4
4
|
exports.resolveZipFlags = resolveZipFlags;
|
|
5
5
|
exports.buildZipEntryMetadata = buildZipEntryMetadata;
|
|
6
|
-
const text_1 = require("
|
|
7
|
-
const timestamps_1 = require("
|
|
8
|
-
const
|
|
6
|
+
const text_1 = require("../utils/text.js");
|
|
7
|
+
const timestamps_1 = require("../utils/timestamps.js");
|
|
8
|
+
const zip_records_1 = require("../zip-spec/zip-records.js");
|
|
9
9
|
function resolveZipCompressionMethod(deflate) {
|
|
10
|
-
return deflate ?
|
|
10
|
+
return deflate ? zip_records_1.COMPRESSION_DEFLATE : zip_records_1.COMPRESSION_STORE;
|
|
11
11
|
}
|
|
12
12
|
function resolveZipFlags(useDataDescriptor) {
|
|
13
|
-
return useDataDescriptor ?
|
|
13
|
+
return useDataDescriptor ? zip_records_1.FLAG_UTF8 | zip_records_1.FLAG_DATA_DESCRIPTOR : zip_records_1.FLAG_UTF8;
|
|
14
14
|
}
|
|
15
15
|
function buildZipEntryMetadata(input) {
|
|
16
16
|
const nameBytes = (0, text_1.encodeUtf8)(input.name);
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ZIP record builders (PKWARE APPNOTE)
|
|
4
|
+
*
|
|
5
|
+
* Shared by streaming zip writer and buffer zip builder.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.ZIP_END_OF_CENTRAL_DIR_FIXED_SIZE = exports.ZIP_CENTRAL_DIR_HEADER_FIXED_SIZE = exports.ZIP_LOCAL_FILE_HEADER_FIXED_SIZE = exports.UINT32_MAX = exports.UINT16_MAX = exports.FLAG_DATA_DESCRIPTOR = exports.FLAG_UTF8 = exports.COMPRESSION_DEFLATE = exports.COMPRESSION_STORE = exports.VERSION_MADE_BY = exports.VERSION_NEEDED = exports.ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG = exports.ZIP64_END_OF_CENTRAL_DIR_SIG = exports.DATA_DESCRIPTOR_SIG = exports.END_OF_CENTRAL_DIR_SIG = exports.CENTRAL_DIR_HEADER_SIG = exports.LOCAL_FILE_HEADER_SIG = void 0;
|
|
9
|
+
exports.writeLocalFileHeaderInto = writeLocalFileHeaderInto;
|
|
10
|
+
exports.buildLocalFileHeader = buildLocalFileHeader;
|
|
11
|
+
exports.writeCentralDirectoryHeaderInto = writeCentralDirectoryHeaderInto;
|
|
12
|
+
exports.buildCentralDirectoryHeader = buildCentralDirectoryHeader;
|
|
13
|
+
exports.writeEndOfCentralDirectoryInto = writeEndOfCentralDirectoryInto;
|
|
14
|
+
exports.buildEndOfCentralDirectory = buildEndOfCentralDirectory;
|
|
15
|
+
exports.buildDataDescriptor = buildDataDescriptor;
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// ZIP format constants (PKWARE APPNOTE)
|
|
18
|
+
// =============================================================================
|
|
19
|
+
// Signatures
|
|
20
|
+
exports.LOCAL_FILE_HEADER_SIG = 0x04034b50;
|
|
21
|
+
exports.CENTRAL_DIR_HEADER_SIG = 0x02014b50;
|
|
22
|
+
exports.END_OF_CENTRAL_DIR_SIG = 0x06054b50;
|
|
23
|
+
exports.DATA_DESCRIPTOR_SIG = 0x08074b50;
|
|
24
|
+
exports.ZIP64_END_OF_CENTRAL_DIR_SIG = 0x06064b50;
|
|
25
|
+
exports.ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG = 0x07064b50;
|
|
26
|
+
// Versions
|
|
27
|
+
exports.VERSION_NEEDED = 20; // 2.0 - supports DEFLATE
|
|
28
|
+
exports.VERSION_MADE_BY = 20; // 2.0
|
|
29
|
+
// Compression methods
|
|
30
|
+
exports.COMPRESSION_STORE = 0;
|
|
31
|
+
exports.COMPRESSION_DEFLATE = 8;
|
|
32
|
+
// General purpose bit flags
|
|
33
|
+
exports.FLAG_UTF8 = 0x0800;
|
|
34
|
+
exports.FLAG_DATA_DESCRIPTOR = 0x0008;
|
|
35
|
+
// ZIP64 / sentinel sizes
|
|
36
|
+
exports.UINT16_MAX = 0xffff;
|
|
37
|
+
exports.UINT32_MAX = 0xffffffff;
|
|
38
|
+
exports.ZIP_LOCAL_FILE_HEADER_FIXED_SIZE = 30;
|
|
39
|
+
exports.ZIP_CENTRAL_DIR_HEADER_FIXED_SIZE = 46;
|
|
40
|
+
exports.ZIP_END_OF_CENTRAL_DIR_FIXED_SIZE = 22;
|
|
41
|
+
function writeLocalFileHeaderInto(out, view, offset, input) {
|
|
42
|
+
const versionNeeded = input.versionNeeded ?? exports.VERSION_NEEDED;
|
|
43
|
+
view.setUint32(offset + 0, exports.LOCAL_FILE_HEADER_SIG, true);
|
|
44
|
+
view.setUint16(offset + 4, versionNeeded, true);
|
|
45
|
+
view.setUint16(offset + 6, input.flags, true);
|
|
46
|
+
view.setUint16(offset + 8, input.compressionMethod, true);
|
|
47
|
+
view.setUint16(offset + 10, input.dosTime, true);
|
|
48
|
+
view.setUint16(offset + 12, input.dosDate, true);
|
|
49
|
+
view.setUint32(offset + 14, input.crc32, true);
|
|
50
|
+
view.setUint32(offset + 18, input.compressedSize, true);
|
|
51
|
+
view.setUint32(offset + 22, input.uncompressedSize, true);
|
|
52
|
+
view.setUint16(offset + 26, input.fileName.length, true);
|
|
53
|
+
view.setUint16(offset + 28, input.extraField.length, true);
|
|
54
|
+
out.set(input.fileName, offset + exports.ZIP_LOCAL_FILE_HEADER_FIXED_SIZE);
|
|
55
|
+
if (input.extraField.length > 0) {
|
|
56
|
+
out.set(input.extraField, offset + exports.ZIP_LOCAL_FILE_HEADER_FIXED_SIZE + input.fileName.length);
|
|
57
|
+
}
|
|
58
|
+
return exports.ZIP_LOCAL_FILE_HEADER_FIXED_SIZE + input.fileName.length + input.extraField.length;
|
|
59
|
+
}
|
|
60
|
+
function buildLocalFileHeader(input) {
|
|
61
|
+
const header = new Uint8Array(exports.ZIP_LOCAL_FILE_HEADER_FIXED_SIZE + input.fileName.length + input.extraField.length);
|
|
62
|
+
const view = new DataView(header.buffer, header.byteOffset, header.byteLength);
|
|
63
|
+
writeLocalFileHeaderInto(header, view, 0, input);
|
|
64
|
+
return header;
|
|
65
|
+
}
|
|
66
|
+
function writeCentralDirectoryHeaderInto(out, view, offset, input) {
|
|
67
|
+
const versionMadeBy = input.versionMadeBy ?? exports.VERSION_MADE_BY;
|
|
68
|
+
const versionNeeded = input.versionNeeded ?? exports.VERSION_NEEDED;
|
|
69
|
+
const externalAttributes = input.externalAttributes ?? 0;
|
|
70
|
+
view.setUint32(offset + 0, exports.CENTRAL_DIR_HEADER_SIG, true);
|
|
71
|
+
view.setUint16(offset + 4, versionMadeBy, true);
|
|
72
|
+
view.setUint16(offset + 6, versionNeeded, true);
|
|
73
|
+
view.setUint16(offset + 8, input.flags, true);
|
|
74
|
+
view.setUint16(offset + 10, input.compressionMethod, true);
|
|
75
|
+
view.setUint16(offset + 12, input.dosTime, true);
|
|
76
|
+
view.setUint16(offset + 14, input.dosDate, true);
|
|
77
|
+
view.setUint32(offset + 16, input.crc32, true);
|
|
78
|
+
view.setUint32(offset + 20, input.compressedSize, true);
|
|
79
|
+
view.setUint32(offset + 24, input.uncompressedSize, true);
|
|
80
|
+
view.setUint16(offset + 28, input.fileName.length, true);
|
|
81
|
+
view.setUint16(offset + 30, input.extraField.length, true);
|
|
82
|
+
view.setUint16(offset + 32, input.comment.length, true);
|
|
83
|
+
view.setUint16(offset + 34, 0, true); // disk number start
|
|
84
|
+
view.setUint16(offset + 36, 0, true); // internal file attributes
|
|
85
|
+
view.setUint32(offset + 38, externalAttributes, true);
|
|
86
|
+
view.setUint32(offset + 42, input.localHeaderOffset, true);
|
|
87
|
+
out.set(input.fileName, offset + exports.ZIP_CENTRAL_DIR_HEADER_FIXED_SIZE);
|
|
88
|
+
if (input.extraField.length > 0) {
|
|
89
|
+
out.set(input.extraField, offset + exports.ZIP_CENTRAL_DIR_HEADER_FIXED_SIZE + input.fileName.length);
|
|
90
|
+
}
|
|
91
|
+
if (input.comment.length > 0) {
|
|
92
|
+
out.set(input.comment, offset + exports.ZIP_CENTRAL_DIR_HEADER_FIXED_SIZE + input.fileName.length + input.extraField.length);
|
|
93
|
+
}
|
|
94
|
+
return (exports.ZIP_CENTRAL_DIR_HEADER_FIXED_SIZE +
|
|
95
|
+
input.fileName.length +
|
|
96
|
+
input.extraField.length +
|
|
97
|
+
input.comment.length);
|
|
98
|
+
}
|
|
99
|
+
function buildCentralDirectoryHeader(input) {
|
|
100
|
+
const header = new Uint8Array(exports.ZIP_CENTRAL_DIR_HEADER_FIXED_SIZE +
|
|
101
|
+
input.fileName.length +
|
|
102
|
+
input.extraField.length +
|
|
103
|
+
input.comment.length);
|
|
104
|
+
const view = new DataView(header.buffer, header.byteOffset, header.byteLength);
|
|
105
|
+
writeCentralDirectoryHeaderInto(header, view, 0, input);
|
|
106
|
+
return header;
|
|
107
|
+
}
|
|
108
|
+
function writeEndOfCentralDirectoryInto(out, view, offset, input) {
|
|
109
|
+
view.setUint32(offset + 0, exports.END_OF_CENTRAL_DIR_SIG, true);
|
|
110
|
+
view.setUint16(offset + 4, 0, true);
|
|
111
|
+
view.setUint16(offset + 6, 0, true);
|
|
112
|
+
view.setUint16(offset + 8, input.entryCount, true);
|
|
113
|
+
view.setUint16(offset + 10, input.entryCount, true);
|
|
114
|
+
view.setUint32(offset + 12, input.centralDirSize, true);
|
|
115
|
+
view.setUint32(offset + 16, input.centralDirOffset, true);
|
|
116
|
+
view.setUint16(offset + 20, input.comment.length, true);
|
|
117
|
+
if (input.comment.length > 0) {
|
|
118
|
+
out.set(input.comment, offset + exports.ZIP_END_OF_CENTRAL_DIR_FIXED_SIZE);
|
|
119
|
+
}
|
|
120
|
+
return exports.ZIP_END_OF_CENTRAL_DIR_FIXED_SIZE + input.comment.length;
|
|
121
|
+
}
|
|
122
|
+
function buildEndOfCentralDirectory(input) {
|
|
123
|
+
const record = new Uint8Array(exports.ZIP_END_OF_CENTRAL_DIR_FIXED_SIZE + input.comment.length);
|
|
124
|
+
const view = new DataView(record.buffer, record.byteOffset, record.byteLength);
|
|
125
|
+
writeEndOfCentralDirectoryInto(record, view, 0, input);
|
|
126
|
+
return record;
|
|
127
|
+
}
|
|
128
|
+
function buildDataDescriptor(crc32, compressedSize, uncompressedSize) {
|
|
129
|
+
const descriptor = new Uint8Array(16);
|
|
130
|
+
const view = new DataView(descriptor.buffer);
|
|
131
|
+
view.setUint32(0, exports.DATA_DESCRIPTOR_SIG, true);
|
|
132
|
+
view.setUint32(4, crc32, true);
|
|
133
|
+
view.setUint32(8, compressedSize, true);
|
|
134
|
+
view.setUint32(12, uncompressedSize, true);
|
|
135
|
+
return descriptor;
|
|
136
|
+
}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.WorkbookReader = exports.WorkbookReaderOptionsSchema = exports.WorkbookReaderBase = void 0;
|
|
14
14
|
const _stream_1 = require("../../stream/index.js");
|
|
15
|
-
const
|
|
15
|
+
const stream_1 = require("../../archive/unzip/stream.js");
|
|
16
16
|
const iterate_stream_1 = require("../utils/iterate-stream.js");
|
|
17
17
|
const ooxml_paths_1 = require("../utils/ooxml-paths.js");
|
|
18
18
|
const parse_sax_1 = require("../utils/parse-sax.js");
|
|
@@ -359,7 +359,7 @@ class WorkbookReaderBase extends _stream_1.EventEmitter {
|
|
|
359
359
|
}
|
|
360
360
|
}
|
|
361
361
|
async *_parseEntries(stream) {
|
|
362
|
-
const zip = (0,
|
|
362
|
+
const zip = (0, stream_1.createParse)({ forceStream: true });
|
|
363
363
|
stream.on("error", (err) => zip.emit("error", err));
|
|
364
364
|
stream.pipe(zip);
|
|
365
365
|
for await (const entry of (0, iterate_stream_1.iterateStream)(zip)) {
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.WorkbookWriter = exports.WorkbookWriterOptionsSchema = exports.WorkbookWriterBase = void 0;
|
|
13
|
-
const
|
|
13
|
+
const stream_1 = require("../../archive/zip/stream.js");
|
|
14
14
|
const stream_buf_1 = require("../utils/stream-buf.js");
|
|
15
15
|
const utils_1 = require("../../../utils/utils.js");
|
|
16
16
|
const rel_type_1 = require("../xlsx/rel-type.js");
|
|
@@ -54,7 +54,7 @@ class WorkbookWriterBase {
|
|
|
54
54
|
this.commentRefs = [];
|
|
55
55
|
this._trueStreaming = options.trueStreaming ?? false;
|
|
56
56
|
// Create Zip instance
|
|
57
|
-
this.zip = new
|
|
57
|
+
this.zip = new stream_1.Zip((err, data, final) => {
|
|
58
58
|
if (err) {
|
|
59
59
|
this.stream.emit("error", err);
|
|
60
60
|
}
|
|
@@ -88,7 +88,7 @@ class WorkbookWriterBase {
|
|
|
88
88
|
bufSize: this._trueStreaming ? 4096 : 65536,
|
|
89
89
|
batch: !this._trueStreaming
|
|
90
90
|
});
|
|
91
|
-
const zipFile = new
|
|
91
|
+
const zipFile = new stream_1.ZipDeflate(path, { level: this.compressionLevel });
|
|
92
92
|
this.zip.add(zipFile);
|
|
93
93
|
const onData = (chunk) => zipFile.push(chunk);
|
|
94
94
|
stream.on("data", onData);
|
|
@@ -100,7 +100,7 @@ class WorkbookWriterBase {
|
|
|
100
100
|
return stream;
|
|
101
101
|
}
|
|
102
102
|
_addFile(data, name, base64) {
|
|
103
|
-
const zipFile = new
|
|
103
|
+
const zipFile = new stream_1.ZipDeflate(name, { level: this.compressionLevel });
|
|
104
104
|
this.zip.add(zipFile);
|
|
105
105
|
let buffer;
|
|
106
106
|
if (base64) {
|
|
@@ -33,8 +33,8 @@ const theme1_1 = require("./xml/theme1.js");
|
|
|
33
33
|
const rel_type_1 = require("./rel-type.js");
|
|
34
34
|
const stream_buf_1 = require("../utils/stream-buf.js");
|
|
35
35
|
const utils_1 = require("../../../utils/utils.js");
|
|
36
|
-
const
|
|
37
|
-
const
|
|
36
|
+
const stream_1 = require("../../archive/zip/stream.js");
|
|
37
|
+
const zip_parser_1 = require("../../archive/unzip/zip-parser.js");
|
|
38
38
|
const _stream_1 = require("../../stream/index.js");
|
|
39
39
|
const ooxml_paths_1 = require("../utils/ooxml-paths.js");
|
|
40
40
|
class StreamingZipWriterAdapter {
|
|
@@ -45,7 +45,7 @@ class StreamingZipWriterAdapter {
|
|
|
45
45
|
this.level = options?.level ?? 6;
|
|
46
46
|
this.modTime = options?.modTime;
|
|
47
47
|
this.timestamps = options?.timestamps;
|
|
48
|
-
this.zip = new
|
|
48
|
+
this.zip = new stream_1.StreamingZip((err, data, final) => {
|
|
49
49
|
if (err) {
|
|
50
50
|
this._emit("error", err);
|
|
51
51
|
return;
|
|
@@ -123,16 +123,13 @@ class StreamingZipWriterAdapter {
|
|
|
123
123
|
else {
|
|
124
124
|
buffer = data;
|
|
125
125
|
}
|
|
126
|
-
const file = new
|
|
126
|
+
const file = new stream_1.ZipDeflateFile(options.name, {
|
|
127
127
|
level: this.level,
|
|
128
128
|
modTime: this.modTime,
|
|
129
129
|
timestamps: this.timestamps
|
|
130
130
|
});
|
|
131
131
|
this.zip.add(file);
|
|
132
|
-
|
|
133
|
-
if (pushResult && typeof pushResult.catch === "function") {
|
|
134
|
-
pushResult.catch((err) => this._emit("error", err));
|
|
135
|
-
}
|
|
132
|
+
file.push(buffer, true);
|
|
136
133
|
}
|
|
137
134
|
finalize() {
|
|
138
135
|
if (this.finalized) {
|
|
@@ -291,7 +288,7 @@ class XLSX {
|
|
|
291
288
|
* Internal: Load from Uint8Array buffer
|
|
292
289
|
*/
|
|
293
290
|
async loadBuffer(buffer, options) {
|
|
294
|
-
const parser = new
|
|
291
|
+
const parser = new zip_parser_1.ZipParser(buffer);
|
|
295
292
|
const filesMap = await parser.extractAll();
|
|
296
293
|
// Convert Map to Record for loadFromFiles
|
|
297
294
|
const allFiles = {};
|
|
@@ -22,7 +22,7 @@ exports.XLSX = void 0;
|
|
|
22
22
|
const fs_1 = __importDefault(require("fs"));
|
|
23
23
|
const utils_1 = require("../../../utils/utils.js");
|
|
24
24
|
const xlsx_browser_1 = require("./xlsx.browser.js");
|
|
25
|
-
const
|
|
25
|
+
const stream_1 = require("../../archive/unzip/stream.js");
|
|
26
26
|
const _stream_1 = require("../../stream/index.js");
|
|
27
27
|
class XLSX extends xlsx_browser_1.XLSX {
|
|
28
28
|
constructor(workbook) {
|
|
@@ -78,7 +78,7 @@ class XLSX extends xlsx_browser_1.XLSX {
|
|
|
78
78
|
// Node.js specific: TRUE streaming read
|
|
79
79
|
// ==========================================================================
|
|
80
80
|
async read(stream, options) {
|
|
81
|
-
const parser = new
|
|
81
|
+
const parser = new stream_1.Parse();
|
|
82
82
|
const swallowError = () => {
|
|
83
83
|
// Prevent unhandled 'error' events from crashing the process.
|
|
84
84
|
// Errors are surfaced via rejected promises.
|