@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,164 @@
|
|
|
1
|
+
import { ZipParser } from "./zip-parser.js";
|
|
2
|
+
import { createParse } from "./stream.browser.js";
|
|
3
|
+
import { pipeIterableToSink } from "../io/archive-sink.js";
|
|
4
|
+
import { toAsyncIterable, toUint8Array } from "../io/archive-source.js";
|
|
5
|
+
const textDecoderCache = new Map();
|
|
6
|
+
function getTextDecoder(encoding) {
|
|
7
|
+
const key = encoding ?? "utf-8";
|
|
8
|
+
const cached = textDecoderCache.get(key);
|
|
9
|
+
if (cached) {
|
|
10
|
+
return cached;
|
|
11
|
+
}
|
|
12
|
+
const decoder = new TextDecoder(key);
|
|
13
|
+
textDecoderCache.set(key, decoder);
|
|
14
|
+
return decoder;
|
|
15
|
+
}
|
|
16
|
+
export class UnzipEntry {
|
|
17
|
+
constructor(args) {
|
|
18
|
+
if (args.kind === "buffer") {
|
|
19
|
+
this._parser = args.parser;
|
|
20
|
+
this._info = args.info;
|
|
21
|
+
this.path = args.info.path;
|
|
22
|
+
this.isDirectory = args.info.isDirectory;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
this._parseEntry = args.entry;
|
|
26
|
+
this.path = args.entry.path;
|
|
27
|
+
this.isDirectory = args.entry.type === "Directory";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async bytes() {
|
|
31
|
+
if (this._parser && this._info) {
|
|
32
|
+
const out = await this._parser.extract(this._info.path);
|
|
33
|
+
return out ?? new Uint8Array(0);
|
|
34
|
+
}
|
|
35
|
+
if (this._parseEntry) {
|
|
36
|
+
const data = await this._parseEntry.buffer();
|
|
37
|
+
// In Node.js, `entry.buffer()` may return a Buffer, which causes
|
|
38
|
+
// deep-equality mismatches against Uint8Array in tests.
|
|
39
|
+
if (typeof Buffer !== "undefined" && data instanceof Buffer) {
|
|
40
|
+
return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
41
|
+
}
|
|
42
|
+
return data;
|
|
43
|
+
}
|
|
44
|
+
return new Uint8Array(0);
|
|
45
|
+
}
|
|
46
|
+
async *stream() {
|
|
47
|
+
if (this._parser && this._info) {
|
|
48
|
+
const data = await this.bytes();
|
|
49
|
+
if (data.length) {
|
|
50
|
+
yield data;
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (this._parseEntry) {
|
|
55
|
+
for await (const chunk of this._parseEntry) {
|
|
56
|
+
yield chunk;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async pipeTo(sink) {
|
|
61
|
+
await pipeIterableToSink(this.stream(), sink);
|
|
62
|
+
}
|
|
63
|
+
async text(encoding) {
|
|
64
|
+
const bytes = await this.bytes();
|
|
65
|
+
return getTextDecoder(encoding).decode(bytes);
|
|
66
|
+
}
|
|
67
|
+
discard() {
|
|
68
|
+
if (this._parseEntry) {
|
|
69
|
+
this._parseEntry.autodrain();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export class ZipReader {
|
|
74
|
+
constructor(source, options = {}) {
|
|
75
|
+
this._bufferParser = null;
|
|
76
|
+
this._source = source;
|
|
77
|
+
this._options = options;
|
|
78
|
+
}
|
|
79
|
+
async _ensureBufferParser() {
|
|
80
|
+
if (this._bufferParser) {
|
|
81
|
+
return this._bufferParser;
|
|
82
|
+
}
|
|
83
|
+
if (this._source instanceof Uint8Array ||
|
|
84
|
+
this._source instanceof ArrayBuffer ||
|
|
85
|
+
typeof this._source === "string" ||
|
|
86
|
+
(typeof Blob !== "undefined" && this._source instanceof Blob)) {
|
|
87
|
+
const bytes = await toUint8Array(this._source);
|
|
88
|
+
this._bufferParser = new ZipParser(bytes, {
|
|
89
|
+
decodeStrings: this._options.decodeStrings
|
|
90
|
+
});
|
|
91
|
+
return this._bufferParser;
|
|
92
|
+
}
|
|
93
|
+
throw new Error("This ZIP source is streaming; random access is not available");
|
|
94
|
+
}
|
|
95
|
+
async get(path) {
|
|
96
|
+
const parser = await this._ensureBufferParser();
|
|
97
|
+
const info = parser.getEntry(path);
|
|
98
|
+
if (!info) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
return new UnzipEntry({ kind: "buffer", parser, info });
|
|
102
|
+
}
|
|
103
|
+
async *entries() {
|
|
104
|
+
// Buffer mode
|
|
105
|
+
if (this._source instanceof Uint8Array ||
|
|
106
|
+
this._source instanceof ArrayBuffer ||
|
|
107
|
+
typeof this._source === "string" ||
|
|
108
|
+
(typeof Blob !== "undefined" && this._source instanceof Blob)) {
|
|
109
|
+
const parser = await this._ensureBufferParser();
|
|
110
|
+
for (const info of parser.getEntries()) {
|
|
111
|
+
yield new UnzipEntry({ kind: "buffer", parser, info });
|
|
112
|
+
}
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
// Streaming mode
|
|
116
|
+
// Always prefer forceStream mode for backpressure and bounded buffering.
|
|
117
|
+
const parse = createParse({ ...(this._options.parse ?? {}), forceStream: true });
|
|
118
|
+
const feedPromise = (async () => {
|
|
119
|
+
try {
|
|
120
|
+
for await (const chunk of toAsyncIterable(this._source)) {
|
|
121
|
+
await new Promise((resolve, reject) => {
|
|
122
|
+
parse.write(chunk, (err) => {
|
|
123
|
+
if (err) {
|
|
124
|
+
reject(err);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
resolve();
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
parse.end();
|
|
133
|
+
await parse.promise();
|
|
134
|
+
}
|
|
135
|
+
catch (e) {
|
|
136
|
+
parse.destroy(e instanceof Error ? e : new Error(String(e)));
|
|
137
|
+
throw e;
|
|
138
|
+
}
|
|
139
|
+
})();
|
|
140
|
+
try {
|
|
141
|
+
for await (const entry of parse) {
|
|
142
|
+
yield new UnzipEntry({ kind: "stream", entry });
|
|
143
|
+
}
|
|
144
|
+
await feedPromise;
|
|
145
|
+
}
|
|
146
|
+
finally {
|
|
147
|
+
// Ensure the feed task does not get stranded.
|
|
148
|
+
await feedPromise.catch(() => { });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async bytes(path) {
|
|
152
|
+
const entry = await this.get(path);
|
|
153
|
+
if (!entry) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
return entry.bytes();
|
|
157
|
+
}
|
|
158
|
+
async close() {
|
|
159
|
+
// No persistent resources in buffer mode.
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
export function unzip(source, options) {
|
|
163
|
+
return new ZipReader(source, options);
|
|
164
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Duplex, PassThrough, Transform, type Readable } from "@stream";
|
|
2
|
-
import { ByteQueue } from "@archive/byte-queue";
|
|
2
|
+
import { ByteQueue } from "@archive/internal/byte-queue";
|
|
3
3
|
import { parseZipExtraFields, type ZipExtraFields, type ZipVars } from "@archive/utils/zip-extra-fields";
|
|
4
|
+
export declare const DATA_DESCRIPTOR_SIGNATURE_BYTES: Uint8Array<ArrayBufferLike>;
|
|
4
5
|
export declare const CRX_HEADER_FORMAT: [string, number][];
|
|
5
6
|
export declare const LOCAL_FILE_HEADER_FORMAT: [string, number][];
|
|
6
7
|
export declare const DATA_DESCRIPTOR_FORMAT: [string, number][];
|
|
@@ -119,9 +120,14 @@ export interface ValidatedDataDescriptorScanResult {
|
|
|
119
120
|
*/
|
|
120
121
|
export declare function scanValidatedDataDescriptor(view: Uint8Array, dataDescriptorSignature: Uint8Array, bytesEmitted: number, startIndex?: number, out?: ValidatedDataDescriptorScanResult): ValidatedDataDescriptorScanResult;
|
|
121
122
|
export interface StreamUntilValidatedDataDescriptorSource {
|
|
122
|
-
getView(): Uint8Array;
|
|
123
123
|
getLength(): number;
|
|
124
124
|
read(length: number): Uint8Array;
|
|
125
|
+
/** Optional: zero-copy chunk views for streaming writes. */
|
|
126
|
+
peekChunks?(length: number): Uint8Array[];
|
|
127
|
+
/** Optional: consume bytes previously written from peekChunks(). */
|
|
128
|
+
discard?(length: number): void;
|
|
129
|
+
indexOfPattern(pattern: Uint8Array, startIndex: number): number;
|
|
130
|
+
peekUint32LE(offset: number): number | null;
|
|
125
131
|
isFinished(): boolean;
|
|
126
132
|
onDataAvailable(cb: () => void): () => void;
|
|
127
133
|
maybeReleaseWriteCallback?: () => void;
|
|
@@ -142,6 +148,34 @@ export declare function streamUntilValidatedDataDescriptor(options: StreamUntilV
|
|
|
142
148
|
export interface ParseOptions {
|
|
143
149
|
verbose?: boolean;
|
|
144
150
|
forceStream?: boolean;
|
|
151
|
+
/**
|
|
152
|
+
* Browser-only: use a Web Worker to run inflate off the main thread.
|
|
153
|
+
* Defaults to false.
|
|
154
|
+
*/
|
|
155
|
+
useWorkerInflate?: boolean;
|
|
156
|
+
/**
|
|
157
|
+
* Browser-only: provide an explicit Worker script URL.
|
|
158
|
+
*
|
|
159
|
+
* Useful under strict CSP that blocks `blob:` workers. When set, the browser
|
|
160
|
+
* parser will try to construct `new Worker(workerInflateUrl)`.
|
|
161
|
+
*/
|
|
162
|
+
workerInflateUrl?: string;
|
|
163
|
+
/**
|
|
164
|
+
* Input backpressure high-water mark (bytes).
|
|
165
|
+
*
|
|
166
|
+
* When provided, implementations may delay the writable callback until the
|
|
167
|
+
* internal input buffer drops below `inputLowWaterMarkBytes`.
|
|
168
|
+
*
|
|
169
|
+
* This is primarily used by the browser parser, because its writable side
|
|
170
|
+
* otherwise tends to accept unlimited data and can cause large memory spikes.
|
|
171
|
+
*/
|
|
172
|
+
inputHighWaterMarkBytes?: number;
|
|
173
|
+
/**
|
|
174
|
+
* Input backpressure low-water mark (bytes).
|
|
175
|
+
* When the internal buffer drops to (or below) this value, a delayed writable
|
|
176
|
+
* callback may be released.
|
|
177
|
+
*/
|
|
178
|
+
inputLowWaterMarkBytes?: number;
|
|
145
179
|
/**
|
|
146
180
|
* Threshold (in bytes) for small file optimization.
|
|
147
181
|
* Files smaller than this will use sync decompression (no stream overhead).
|