@cj-tech-master/excelts 4.2.1-canary.20260111102127.f808a37 → 4.2.1
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 +31 -0
- package/dist/browser/index.browser.d.ts +0 -1
- package/dist/browser/index.browser.js +0 -12
- package/dist/browser/modules/archive/byte-queue.d.ts +18 -0
- package/dist/browser/modules/archive/byte-queue.js +125 -0
- package/dist/browser/modules/archive/{compression/compress.base.js → compress.base.js} +1 -1
- package/dist/browser/modules/archive/{compression/compress.browser.d.ts → compress.browser.d.ts} +8 -2
- package/dist/{esm/modules/archive/compression → browser/modules/archive}/compress.browser.js +11 -3
- package/dist/browser/modules/archive/{compression/compress.d.ts → compress.d.ts} +2 -2
- package/dist/{esm/modules/archive/compression → browser/modules/archive}/compress.js +1 -1
- package/dist/browser/modules/archive/{compression/crc32.browser.d.ts → crc32.browser.d.ts} +1 -1
- package/dist/browser/modules/archive/{compression/crc32.d.ts → crc32.d.ts} +1 -1
- package/dist/browser/modules/archive/{compression/crc32.js → crc32.js} +1 -1
- package/dist/browser/modules/archive/defaults.d.ts +0 -1
- package/dist/browser/modules/archive/defaults.js +3 -6
- package/dist/browser/modules/archive/{compression/deflate-fallback.js → deflate-fallback.js} +1 -1
- package/dist/browser/modules/archive/{unzip/extract.d.ts → extract.d.ts} +2 -2
- package/dist/browser/modules/archive/index.base.d.ts +4 -4
- package/dist/browser/modules/archive/index.base.js +6 -3
- package/dist/browser/modules/archive/index.browser.d.ts +4 -3
- package/dist/browser/modules/archive/index.browser.js +7 -3
- package/dist/browser/modules/archive/index.d.ts +4 -3
- package/dist/browser/modules/archive/index.js +5 -3
- package/dist/browser/modules/archive/{unzip/stream.base.d.ts → parse.base.d.ts} +2 -36
- package/dist/browser/modules/archive/parse.base.js +644 -0
- package/dist/browser/modules/archive/{unzip/stream.browser.d.ts → parse.browser.d.ts} +1 -1
- package/dist/{esm/modules/archive/unzip/stream.browser.js → browser/modules/archive/parse.browser.js} +110 -371
- package/dist/browser/modules/archive/{unzip/stream.d.ts → parse.d.ts} +2 -2
- package/dist/{esm/modules/archive/unzip/stream.js → browser/modules/archive/parse.js} +5 -6
- package/dist/browser/modules/archive/{compression/streaming-compress.browser.d.ts → streaming-compress.browser.d.ts} +2 -2
- package/dist/browser/modules/archive/{compression/streaming-compress.browser.js → streaming-compress.browser.js} +3 -3
- package/dist/browser/modules/archive/{compression/streaming-compress.d.ts → streaming-compress.d.ts} +2 -2
- package/dist/browser/modules/archive/{compression/streaming-compress.js → streaming-compress.js} +2 -2
- package/dist/browser/modules/archive/{zip/stream.d.ts → streaming-zip.d.ts} +5 -28
- package/dist/{esm/modules/archive/zip/stream.js → browser/modules/archive/streaming-zip.js} +48 -192
- package/dist/browser/modules/archive/utils/bytes.js +16 -16
- package/dist/browser/modules/archive/utils/parse-buffer.js +23 -21
- package/dist/browser/modules/archive/utils/timestamps.js +1 -62
- package/dist/browser/modules/archive/utils/zip-extra-fields.d.ts +1 -1
- package/dist/browser/modules/archive/utils/zip-extra-fields.js +14 -26
- package/dist/browser/modules/archive/utils/zip-extra.d.ts +18 -0
- package/dist/browser/modules/archive/utils/zip-extra.js +68 -0
- package/dist/browser/modules/archive/zip-builder.d.ts +117 -0
- package/dist/browser/modules/archive/zip-builder.js +292 -0
- package/dist/browser/modules/archive/zip-constants.d.ts +18 -0
- package/dist/browser/modules/archive/zip-constants.js +23 -0
- package/dist/{esm/modules/archive/zip → browser/modules/archive}/zip-entry-metadata.js +3 -3
- package/dist/{types/modules/archive/unzip → browser/modules/archive}/zip-parser.d.ts +1 -1
- package/dist/{esm/modules/archive/unzip → browser/modules/archive}/zip-parser.js +24 -38
- package/dist/browser/modules/archive/{zip-spec/zip-records.d.ts → zip-records.d.ts} +0 -20
- package/dist/browser/modules/archive/zip-records.js +84 -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 +6 -3
- package/dist/browser/modules/excel/xlsx/xlsx.js +1 -1
- package/dist/browser/modules/stream/streams.browser.d.ts +30 -28
- package/dist/browser/modules/stream/streams.browser.js +710 -830
- package/dist/browser/modules/stream/streams.js +58 -140
- package/dist/cjs/modules/archive/byte-queue.js +129 -0
- package/dist/cjs/modules/archive/{compression/compress.base.js → compress.base.js} +1 -1
- package/dist/cjs/modules/archive/{compression/compress.browser.js → compress.browser.js} +11 -3
- package/dist/cjs/modules/archive/{compression/compress.js → compress.js} +1 -1
- package/dist/cjs/modules/archive/{compression/crc32.js → crc32.js} +1 -1
- package/dist/cjs/modules/archive/defaults.js +4 -7
- package/dist/cjs/modules/archive/{compression/deflate-fallback.js → deflate-fallback.js} +1 -1
- package/dist/cjs/modules/archive/index.base.js +19 -9
- package/dist/cjs/modules/archive/index.browser.js +10 -4
- package/dist/cjs/modules/archive/index.js +8 -4
- package/dist/cjs/modules/archive/parse.base.js +666 -0
- package/dist/cjs/modules/archive/{unzip/stream.browser.js → parse.browser.js} +111 -372
- package/dist/cjs/modules/archive/{unzip/stream.js → parse.js} +8 -9
- package/dist/cjs/modules/archive/{compression/streaming-compress.browser.js → streaming-compress.browser.js} +3 -3
- package/dist/cjs/modules/archive/{compression/streaming-compress.js → streaming-compress.js} +2 -2
- package/dist/cjs/modules/archive/{zip/stream.js → streaming-zip.js} +50 -194
- package/dist/cjs/modules/archive/utils/bytes.js +16 -16
- package/dist/cjs/modules/archive/utils/parse-buffer.js +23 -21
- package/dist/cjs/modules/archive/utils/timestamps.js +3 -64
- package/dist/cjs/modules/archive/utils/zip-extra-fields.js +14 -26
- package/dist/cjs/modules/archive/utils/zip-extra.js +74 -0
- package/dist/cjs/modules/archive/zip-builder.js +297 -0
- package/dist/cjs/modules/archive/zip-constants.js +26 -0
- package/dist/cjs/modules/archive/{zip/zip-entry-metadata.js → zip-entry-metadata.js} +5 -5
- package/dist/cjs/modules/archive/{unzip/zip-parser.js → zip-parser.js} +33 -47
- package/dist/cjs/modules/archive/zip-records.js +90 -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 +9 -6
- package/dist/cjs/modules/excel/xlsx/xlsx.js +2 -2
- package/dist/cjs/modules/stream/streams.browser.js +710 -830
- package/dist/cjs/modules/stream/streams.js +58 -140
- package/dist/esm/index.browser.js +0 -12
- package/dist/esm/modules/archive/byte-queue.js +125 -0
- package/dist/esm/modules/archive/{compression/compress.base.js → compress.base.js} +1 -1
- package/dist/{browser/modules/archive/compression → esm/modules/archive}/compress.browser.js +11 -3
- package/dist/{browser/modules/archive/compression → esm/modules/archive}/compress.js +1 -1
- package/dist/esm/modules/archive/{compression/crc32.js → crc32.js} +1 -1
- package/dist/esm/modules/archive/defaults.js +3 -6
- package/dist/esm/modules/archive/{compression/deflate-fallback.js → deflate-fallback.js} +1 -1
- package/dist/esm/modules/archive/index.base.js +6 -3
- package/dist/esm/modules/archive/index.browser.js +7 -3
- package/dist/esm/modules/archive/index.js +5 -3
- package/dist/esm/modules/archive/parse.base.js +644 -0
- package/dist/{browser/modules/archive/unzip/stream.browser.js → esm/modules/archive/parse.browser.js} +110 -371
- package/dist/{browser/modules/archive/unzip/stream.js → esm/modules/archive/parse.js} +5 -6
- package/dist/esm/modules/archive/{compression/streaming-compress.browser.js → streaming-compress.browser.js} +3 -3
- package/dist/esm/modules/archive/{compression/streaming-compress.js → streaming-compress.js} +2 -2
- package/dist/{browser/modules/archive/zip/stream.js → esm/modules/archive/streaming-zip.js} +48 -192
- package/dist/esm/modules/archive/utils/bytes.js +16 -16
- package/dist/esm/modules/archive/utils/parse-buffer.js +23 -21
- package/dist/esm/modules/archive/utils/timestamps.js +1 -62
- package/dist/esm/modules/archive/utils/zip-extra-fields.js +14 -26
- package/dist/esm/modules/archive/utils/zip-extra.js +68 -0
- package/dist/esm/modules/archive/zip-builder.js +292 -0
- package/dist/esm/modules/archive/zip-constants.js +23 -0
- package/dist/{browser/modules/archive/zip → esm/modules/archive}/zip-entry-metadata.js +3 -3
- package/dist/{browser/modules/archive/unzip → esm/modules/archive}/zip-parser.js +24 -38
- package/dist/esm/modules/archive/zip-records.js +84 -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 +6 -3
- package/dist/esm/modules/excel/xlsx/xlsx.js +1 -1
- package/dist/esm/modules/stream/streams.browser.js +710 -830
- package/dist/esm/modules/stream/streams.js +58 -140
- package/dist/iife/THIRD_PARTY_NOTICES.md +31 -0
- package/dist/iife/excelts.iife.js +4425 -6215
- package/dist/iife/excelts.iife.js.map +1 -1
- package/dist/iife/excelts.iife.min.js +31 -103
- package/dist/types/index.browser.d.ts +0 -1
- package/dist/types/modules/archive/byte-queue.d.ts +18 -0
- package/dist/types/modules/archive/{compression/compress.browser.d.ts → compress.browser.d.ts} +8 -2
- package/dist/types/modules/archive/defaults.d.ts +0 -1
- package/dist/types/modules/archive/index.base.d.ts +4 -4
- package/dist/types/modules/archive/index.browser.d.ts +4 -3
- package/dist/types/modules/archive/index.d.ts +4 -3
- package/dist/types/modules/archive/{unzip/stream.base.d.ts → parse.base.d.ts} +4 -38
- package/dist/types/modules/archive/{unzip/stream.browser.d.ts → parse.browser.d.ts} +2 -2
- package/dist/types/modules/archive/{unzip/stream.d.ts → parse.d.ts} +3 -3
- package/dist/types/modules/archive/{compression/streaming-compress.browser.d.ts → streaming-compress.browser.d.ts} +1 -1
- package/dist/types/modules/archive/{zip/stream.d.ts → streaming-zip.d.ts} +6 -29
- package/dist/types/modules/archive/utils/zip-extra-fields.d.ts +1 -1
- package/dist/types/modules/archive/utils/zip-extra.d.ts +18 -0
- package/dist/types/modules/archive/zip-builder.d.ts +117 -0
- package/dist/types/modules/archive/zip-constants.d.ts +18 -0
- package/dist/types/modules/archive/{zip/zip-entry-metadata.d.ts → zip-entry-metadata.d.ts} +1 -1
- package/dist/{browser/modules/archive/unzip → types/modules/archive}/zip-parser.d.ts +1 -1
- package/dist/types/modules/archive/{zip-spec/zip-records.d.ts → zip-records.d.ts} +0 -20
- package/dist/types/modules/excel/stream/workbook-writer.browser.d.ts +1 -1
- package/dist/types/modules/stream/streams.browser.d.ts +30 -28
- package/package.json +1 -5
- package/dist/browser/modules/archive/internal/byte-queue.d.ts +0 -33
- package/dist/browser/modules/archive/internal/byte-queue.js +0 -407
- package/dist/browser/modules/archive/io/archive-sink.d.ts +0 -9
- package/dist/browser/modules/archive/io/archive-sink.js +0 -77
- package/dist/browser/modules/archive/io/archive-source.d.ts +0 -8
- package/dist/browser/modules/archive/io/archive-source.js +0 -107
- package/dist/browser/modules/archive/unzip/index.d.ts +0 -40
- package/dist/browser/modules/archive/unzip/index.js +0 -164
- package/dist/browser/modules/archive/unzip/stream.base.js +0 -1022
- package/dist/browser/modules/archive/utils/async-queue.d.ts +0 -7
- package/dist/browser/modules/archive/utils/async-queue.js +0 -103
- package/dist/browser/modules/archive/utils/compressibility.d.ts +0 -10
- package/dist/browser/modules/archive/utils/compressibility.js +0 -57
- package/dist/browser/modules/archive/utils/pattern-scanner.d.ts +0 -21
- package/dist/browser/modules/archive/utils/pattern-scanner.js +0 -27
- package/dist/browser/modules/archive/zip/index.d.ts +0 -42
- package/dist/browser/modules/archive/zip/index.js +0 -157
- package/dist/browser/modules/archive/zip/zip-bytes.d.ts +0 -73
- package/dist/browser/modules/archive/zip/zip-bytes.js +0 -239
- package/dist/browser/modules/archive/zip-spec/zip-records.js +0 -126
- package/dist/cjs/modules/archive/internal/byte-queue.js +0 -411
- package/dist/cjs/modules/archive/io/archive-sink.js +0 -82
- package/dist/cjs/modules/archive/io/archive-source.js +0 -114
- package/dist/cjs/modules/archive/unzip/index.js +0 -170
- package/dist/cjs/modules/archive/unzip/stream.base.js +0 -1044
- package/dist/cjs/modules/archive/utils/async-queue.js +0 -106
- package/dist/cjs/modules/archive/utils/compressibility.js +0 -60
- package/dist/cjs/modules/archive/utils/pattern-scanner.js +0 -31
- package/dist/cjs/modules/archive/zip/index.js +0 -162
- package/dist/cjs/modules/archive/zip/zip-bytes.js +0 -242
- package/dist/cjs/modules/archive/zip-spec/zip-records.js +0 -136
- package/dist/esm/modules/archive/internal/byte-queue.js +0 -407
- package/dist/esm/modules/archive/io/archive-sink.js +0 -77
- package/dist/esm/modules/archive/io/archive-source.js +0 -107
- package/dist/esm/modules/archive/unzip/index.js +0 -164
- package/dist/esm/modules/archive/unzip/stream.base.js +0 -1022
- package/dist/esm/modules/archive/utils/async-queue.js +0 -103
- package/dist/esm/modules/archive/utils/compressibility.js +0 -57
- package/dist/esm/modules/archive/utils/pattern-scanner.js +0 -27
- package/dist/esm/modules/archive/zip/index.js +0 -157
- package/dist/esm/modules/archive/zip/zip-bytes.js +0 -239
- package/dist/esm/modules/archive/zip-spec/zip-records.js +0 -126
- package/dist/types/modules/archive/internal/byte-queue.d.ts +0 -33
- package/dist/types/modules/archive/io/archive-sink.d.ts +0 -9
- package/dist/types/modules/archive/io/archive-source.d.ts +0 -8
- package/dist/types/modules/archive/unzip/index.d.ts +0 -40
- package/dist/types/modules/archive/utils/async-queue.d.ts +0 -7
- package/dist/types/modules/archive/utils/compressibility.d.ts +0 -10
- package/dist/types/modules/archive/utils/pattern-scanner.d.ts +0 -21
- package/dist/types/modules/archive/zip/index.d.ts +0 -42
- package/dist/types/modules/archive/zip/zip-bytes.d.ts +0 -73
- /package/dist/browser/modules/archive/{compression/compress.base.d.ts → compress.base.d.ts} +0 -0
- /package/dist/browser/modules/archive/{compression/crc32.base.d.ts → crc32.base.d.ts} +0 -0
- /package/dist/browser/modules/archive/{compression/crc32.base.js → crc32.base.js} +0 -0
- /package/dist/browser/modules/archive/{compression/crc32.browser.js → crc32.browser.js} +0 -0
- /package/dist/browser/modules/archive/{compression/deflate-fallback.d.ts → deflate-fallback.d.ts} +0 -0
- /package/dist/browser/modules/archive/{unzip/extract.js → extract.js} +0 -0
- /package/dist/browser/modules/archive/{compression/streaming-compress.base.d.ts → streaming-compress.base.d.ts} +0 -0
- /package/dist/browser/modules/archive/{compression/streaming-compress.base.js → streaming-compress.base.js} +0 -0
- /package/dist/browser/modules/archive/{zip-spec/zip-entry-info.d.ts → zip-entry-info.d.ts} +0 -0
- /package/dist/browser/modules/archive/{zip-spec/zip-entry-info.js → zip-entry-info.js} +0 -0
- /package/dist/browser/modules/archive/{zip/zip-entry-metadata.d.ts → zip-entry-metadata.d.ts} +0 -0
- /package/dist/cjs/modules/archive/{compression/crc32.base.js → crc32.base.js} +0 -0
- /package/dist/cjs/modules/archive/{compression/crc32.browser.js → crc32.browser.js} +0 -0
- /package/dist/cjs/modules/archive/{unzip/extract.js → extract.js} +0 -0
- /package/dist/cjs/modules/archive/{compression/streaming-compress.base.js → streaming-compress.base.js} +0 -0
- /package/dist/cjs/modules/archive/{zip-spec/zip-entry-info.js → zip-entry-info.js} +0 -0
- /package/dist/esm/modules/archive/{compression/crc32.base.js → crc32.base.js} +0 -0
- /package/dist/esm/modules/archive/{compression/crc32.browser.js → crc32.browser.js} +0 -0
- /package/dist/esm/modules/archive/{unzip/extract.js → extract.js} +0 -0
- /package/dist/esm/modules/archive/{compression/streaming-compress.base.js → streaming-compress.base.js} +0 -0
- /package/dist/esm/modules/archive/{zip-spec/zip-entry-info.js → zip-entry-info.js} +0 -0
- /package/dist/types/modules/archive/{compression/compress.base.d.ts → compress.base.d.ts} +0 -0
- /package/dist/types/modules/archive/{compression/compress.d.ts → compress.d.ts} +0 -0
- /package/dist/types/modules/archive/{compression/crc32.base.d.ts → crc32.base.d.ts} +0 -0
- /package/dist/types/modules/archive/{compression/crc32.browser.d.ts → crc32.browser.d.ts} +0 -0
- /package/dist/types/modules/archive/{compression/crc32.d.ts → crc32.d.ts} +0 -0
- /package/dist/types/modules/archive/{compression/deflate-fallback.d.ts → deflate-fallback.d.ts} +0 -0
- /package/dist/types/modules/archive/{unzip/extract.d.ts → extract.d.ts} +0 -0
- /package/dist/types/modules/archive/{compression/streaming-compress.base.d.ts → streaming-compress.base.d.ts} +0 -0
- /package/dist/types/modules/archive/{compression/streaming-compress.d.ts → streaming-compress.d.ts} +0 -0
- /package/dist/types/modules/archive/{zip-spec/zip-entry-info.d.ts → zip-entry-info.d.ts} +0 -0
|
@@ -10,13 +10,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
10
10
|
exports.Parse = void 0;
|
|
11
11
|
exports.createParseClass = createParseClass;
|
|
12
12
|
exports.createParse = createParse;
|
|
13
|
-
const _stream_1 = require("
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
13
|
+
const _stream_1 = require("../stream/index.js");
|
|
14
|
+
const binary_1 = require("./utils/binary.js");
|
|
15
|
+
const bytes_1 = require("./utils/bytes.js");
|
|
16
|
+
const parse_base_1 = require("./parse.base.js");
|
|
17
|
+
const deflate_fallback_1 = require("./deflate-fallback.js");
|
|
18
|
+
const byte_queue_1 = require("./byte-queue.js");
|
|
19
|
+
const zip_constants_1 = require("./zip-constants.js");
|
|
20
|
+
const compress_base_1 = require("./compress.base.js");
|
|
20
21
|
// =============================================================================
|
|
21
22
|
// Browser InflateRaw using DecompressionStream
|
|
22
23
|
// =============================================================================
|
|
@@ -33,9 +34,6 @@ class BrowserInflateRaw extends _stream_1.Duplex {
|
|
|
33
34
|
// Pass write handler to Duplex so pipe() calls our write method
|
|
34
35
|
// Also pass final handler to close the DecompressionStream when _writable ends
|
|
35
36
|
super({
|
|
36
|
-
// Keep the internal buffer bounded; this stream is used in tight parse loops.
|
|
37
|
-
writableHighWaterMark: 512 * 1024,
|
|
38
|
-
readableHighWaterMark: 512 * 1024,
|
|
39
37
|
write: (chunk, _encoding, callback) => {
|
|
40
38
|
this._doWrite(chunk, callback);
|
|
41
39
|
},
|
|
@@ -144,6 +142,47 @@ class BrowserInflateRaw extends _stream_1.Duplex {
|
|
|
144
142
|
this.push(null);
|
|
145
143
|
}
|
|
146
144
|
}
|
|
145
|
+
// Override write to feed data into DecompressionStream
|
|
146
|
+
write(chunk, encodingOrCallback, callback) {
|
|
147
|
+
// Handle overload
|
|
148
|
+
let cb;
|
|
149
|
+
if (typeof encodingOrCallback === "function") {
|
|
150
|
+
cb = encodingOrCallback;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
cb = callback;
|
|
154
|
+
}
|
|
155
|
+
this._doWrite(chunk, cb);
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
// Override end to close the DecompressionStream writer
|
|
159
|
+
end(chunkOrCallback, encodingOrCallback, callback) {
|
|
160
|
+
// Handle overloads
|
|
161
|
+
let chunk;
|
|
162
|
+
let cb;
|
|
163
|
+
if (typeof chunkOrCallback === "function") {
|
|
164
|
+
cb = chunkOrCallback;
|
|
165
|
+
}
|
|
166
|
+
else if (chunkOrCallback !== undefined) {
|
|
167
|
+
chunk = chunkOrCallback;
|
|
168
|
+
if (typeof encodingOrCallback === "function") {
|
|
169
|
+
cb = encodingOrCallback;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
cb = callback;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Write final chunk if provided
|
|
176
|
+
if (chunk) {
|
|
177
|
+
this.write(chunk, () => {
|
|
178
|
+
this._closeWriter(cb);
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
this._closeWriter(cb);
|
|
183
|
+
}
|
|
184
|
+
return this;
|
|
185
|
+
}
|
|
147
186
|
_closeWriter(callback) {
|
|
148
187
|
if (this.writeClosed) {
|
|
149
188
|
this._readingDonePromise.then(() => {
|
|
@@ -171,6 +210,7 @@ class BrowserInflateRaw extends _stream_1.Duplex {
|
|
|
171
210
|
if (callback) {
|
|
172
211
|
callback();
|
|
173
212
|
}
|
|
213
|
+
this.emit("finish");
|
|
174
214
|
});
|
|
175
215
|
});
|
|
176
216
|
}
|
|
@@ -183,225 +223,6 @@ class BrowserInflateRaw extends _stream_1.Duplex {
|
|
|
183
223
|
}
|
|
184
224
|
}
|
|
185
225
|
// =============================================================================
|
|
186
|
-
// Worker-based InflateRaw (optional)
|
|
187
|
-
// =============================================================================
|
|
188
|
-
let _inflateWorkerUrl = null;
|
|
189
|
-
function getInflateWorkerUrl(customUrl) {
|
|
190
|
-
if (typeof customUrl === "string" && customUrl.length > 0) {
|
|
191
|
-
return customUrl;
|
|
192
|
-
}
|
|
193
|
-
if (_inflateWorkerUrl) {
|
|
194
|
-
return _inflateWorkerUrl;
|
|
195
|
-
}
|
|
196
|
-
// Inline worker to avoid bundler-specific worker loaders.
|
|
197
|
-
// It streams deflate-raw through DecompressionStream and posts decompressed chunks back.
|
|
198
|
-
const code = `
|
|
199
|
-
let ds;
|
|
200
|
-
let writer;
|
|
201
|
-
let reader;
|
|
202
|
-
let junkError = false;
|
|
203
|
-
let pendingWrites = 0;
|
|
204
|
-
|
|
205
|
-
function isJunkErrorMessage(msg) {
|
|
206
|
-
return typeof msg === 'string' && (msg.includes('Junk') || msg.includes('junk'));
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
async function ensureStarted() {
|
|
210
|
-
if (ds) return;
|
|
211
|
-
ds = new DecompressionStream('deflate-raw');
|
|
212
|
-
writer = ds.writable.getWriter();
|
|
213
|
-
reader = ds.readable.getReader();
|
|
214
|
-
|
|
215
|
-
(async () => {
|
|
216
|
-
try {
|
|
217
|
-
while (true) {
|
|
218
|
-
const r = await reader.read();
|
|
219
|
-
if (r.done) break;
|
|
220
|
-
const chunk = r.value;
|
|
221
|
-
postMessage({ t: 'data', chunk }, [chunk.buffer]);
|
|
222
|
-
}
|
|
223
|
-
postMessage({ t: 'end' });
|
|
224
|
-
} catch (e) {
|
|
225
|
-
const msg = e && e.message ? e.message : String(e);
|
|
226
|
-
if (isJunkErrorMessage(msg)) {
|
|
227
|
-
junkError = true;
|
|
228
|
-
postMessage({ t: 'end' });
|
|
229
|
-
} else {
|
|
230
|
-
postMessage({ t: 'error', message: msg });
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
})();
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
onmessage = async (ev) => {
|
|
237
|
-
const msg = ev.data;
|
|
238
|
-
try {
|
|
239
|
-
await ensureStarted();
|
|
240
|
-
if (msg.t === 'write') {
|
|
241
|
-
if (junkError) {
|
|
242
|
-
postMessage({ t: 'ack', id: msg.id });
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
pendingWrites++;
|
|
246
|
-
await writer.write(msg.chunk);
|
|
247
|
-
pendingWrites--;
|
|
248
|
-
postMessage({ t: 'ack', id: msg.id });
|
|
249
|
-
return;
|
|
250
|
-
}
|
|
251
|
-
if (msg.t === 'close') {
|
|
252
|
-
// Wait for in-flight writes to finish (best-effort).
|
|
253
|
-
while (pendingWrites > 0) {
|
|
254
|
-
await new Promise(r => setTimeout(r, 0));
|
|
255
|
-
}
|
|
256
|
-
try { await writer.close(); } catch (_) {}
|
|
257
|
-
postMessage({ t: 'closed' });
|
|
258
|
-
return;
|
|
259
|
-
}
|
|
260
|
-
if (msg.t === 'abort') {
|
|
261
|
-
try { await writer.abort(); } catch (_) {}
|
|
262
|
-
postMessage({ t: 'aborted' });
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
265
|
-
} catch (e) {
|
|
266
|
-
const m = e && e.message ? e.message : String(e);
|
|
267
|
-
postMessage({ t: 'error', message: m, id: msg && msg.id });
|
|
268
|
-
}
|
|
269
|
-
};
|
|
270
|
-
`;
|
|
271
|
-
const blob = new Blob([code], { type: "text/javascript" });
|
|
272
|
-
_inflateWorkerUrl = URL.createObjectURL(blob);
|
|
273
|
-
return _inflateWorkerUrl;
|
|
274
|
-
}
|
|
275
|
-
class WorkerInflateRaw extends _stream_1.Duplex {
|
|
276
|
-
constructor(workerUrl) {
|
|
277
|
-
super({
|
|
278
|
-
write: (chunk, _encoding, callback) => {
|
|
279
|
-
this._doWrite(chunk, callback);
|
|
280
|
-
},
|
|
281
|
-
final: (callback) => {
|
|
282
|
-
this._doClose(callback);
|
|
283
|
-
}
|
|
284
|
-
});
|
|
285
|
-
this._nextId = 1;
|
|
286
|
-
this._pendingAcks = new Map();
|
|
287
|
-
this._closed = false;
|
|
288
|
-
this._junkError = false;
|
|
289
|
-
this._terminated = false;
|
|
290
|
-
const url = getInflateWorkerUrl(workerUrl);
|
|
291
|
-
this.worker = new Worker(url);
|
|
292
|
-
this.worker.onmessage = (ev) => {
|
|
293
|
-
const msg = ev.data;
|
|
294
|
-
if (!msg || typeof msg.t !== "string") {
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
if (msg.t === "data") {
|
|
298
|
-
const chunk = msg.chunk;
|
|
299
|
-
this.push(chunk);
|
|
300
|
-
return;
|
|
301
|
-
}
|
|
302
|
-
if (msg.t === "end") {
|
|
303
|
-
this.push(null);
|
|
304
|
-
this._terminateWorker();
|
|
305
|
-
return;
|
|
306
|
-
}
|
|
307
|
-
if (msg.t === "aborted") {
|
|
308
|
-
this._terminateWorker();
|
|
309
|
-
return;
|
|
310
|
-
}
|
|
311
|
-
if (msg.t === "ack") {
|
|
312
|
-
const id = msg.id;
|
|
313
|
-
const cb = this._pendingAcks.get(id);
|
|
314
|
-
if (cb) {
|
|
315
|
-
this._pendingAcks.delete(id);
|
|
316
|
-
cb();
|
|
317
|
-
}
|
|
318
|
-
return;
|
|
319
|
-
}
|
|
320
|
-
if (msg.t === "error") {
|
|
321
|
-
const message = typeof msg.message === "string" ? msg.message : "Worker inflate error";
|
|
322
|
-
if (message.includes("Junk") || message.includes("junk")) {
|
|
323
|
-
this._junkError = true;
|
|
324
|
-
// Treat as end-of-stream.
|
|
325
|
-
this.push(null);
|
|
326
|
-
this._terminateWorker();
|
|
327
|
-
// Resolve any pending writes.
|
|
328
|
-
for (const cb of this._pendingAcks.values()) {
|
|
329
|
-
cb();
|
|
330
|
-
}
|
|
331
|
-
this._pendingAcks.clear();
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
const err = new Error(message);
|
|
335
|
-
// Fail any pending writes.
|
|
336
|
-
for (const cb of this._pendingAcks.values()) {
|
|
337
|
-
cb(err);
|
|
338
|
-
}
|
|
339
|
-
this._pendingAcks.clear();
|
|
340
|
-
this.emit("error", err);
|
|
341
|
-
this._terminateWorker();
|
|
342
|
-
return;
|
|
343
|
-
}
|
|
344
|
-
};
|
|
345
|
-
this.worker.onerror = (e) => {
|
|
346
|
-
const err = new Error(e.message || "Worker error");
|
|
347
|
-
for (const cb of this._pendingAcks.values()) {
|
|
348
|
-
cb(err);
|
|
349
|
-
}
|
|
350
|
-
this._pendingAcks.clear();
|
|
351
|
-
this.emit("error", err);
|
|
352
|
-
this._terminateWorker();
|
|
353
|
-
};
|
|
354
|
-
}
|
|
355
|
-
_terminateWorker() {
|
|
356
|
-
if (this._terminated) {
|
|
357
|
-
return;
|
|
358
|
-
}
|
|
359
|
-
this._terminated = true;
|
|
360
|
-
try {
|
|
361
|
-
this.worker.terminate();
|
|
362
|
-
}
|
|
363
|
-
catch {
|
|
364
|
-
// ignore
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
_doWrite(chunk, callback) {
|
|
368
|
-
if (this._closed || this._junkError) {
|
|
369
|
-
callback();
|
|
370
|
-
return;
|
|
371
|
-
}
|
|
372
|
-
const id = this._nextId++;
|
|
373
|
-
this._pendingAcks.set(id, callback);
|
|
374
|
-
// Transfer the underlying ArrayBuffer to reduce copies.
|
|
375
|
-
// If chunk is a view into a larger buffer, slice to avoid transferring unrelated bytes.
|
|
376
|
-
const transferable = chunk.byteOffset === 0 && chunk.byteLength === chunk.buffer.byteLength
|
|
377
|
-
? chunk
|
|
378
|
-
: chunk.slice();
|
|
379
|
-
this.worker.postMessage({ t: "write", id, chunk: transferable }, [transferable.buffer]);
|
|
380
|
-
}
|
|
381
|
-
_doClose(callback) {
|
|
382
|
-
if (this._closed) {
|
|
383
|
-
callback();
|
|
384
|
-
return;
|
|
385
|
-
}
|
|
386
|
-
this._closed = true;
|
|
387
|
-
this.worker.postMessage({ t: "close" });
|
|
388
|
-
callback();
|
|
389
|
-
}
|
|
390
|
-
destroy(error) {
|
|
391
|
-
if (!this._closed) {
|
|
392
|
-
this._closed = true;
|
|
393
|
-
try {
|
|
394
|
-
this.worker.postMessage({ t: "abort" });
|
|
395
|
-
}
|
|
396
|
-
catch {
|
|
397
|
-
// ignore
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
this._terminateWorker();
|
|
401
|
-
return super.destroy(error);
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
// =============================================================================
|
|
405
226
|
// Fallback InflateRaw for browsers without DecompressionStream
|
|
406
227
|
// =============================================================================
|
|
407
228
|
/**
|
|
@@ -461,7 +282,7 @@ function createInflateRaw() {
|
|
|
461
282
|
// =============================================================================
|
|
462
283
|
// Utilities
|
|
463
284
|
// =============================================================================
|
|
464
|
-
const dataDescriptorSignature =
|
|
285
|
+
const dataDescriptorSignature = (0, binary_1.writeUint32LE)(zip_constants_1.DATA_DESCRIPTOR_SIG);
|
|
465
286
|
function createParseClass(createInflateRawFn) {
|
|
466
287
|
/**
|
|
467
288
|
* ZIP Stream Parser for browsers.
|
|
@@ -475,11 +296,11 @@ function createParseClass(createInflateRawFn) {
|
|
|
475
296
|
super({
|
|
476
297
|
objectMode: true,
|
|
477
298
|
write: (chunk, _encoding, callback) => {
|
|
478
|
-
this._handleWrite(chunk
|
|
299
|
+
this._handleWrite(chunk);
|
|
300
|
+
callback();
|
|
479
301
|
},
|
|
480
302
|
final: (callback) => {
|
|
481
303
|
this.finished = true;
|
|
482
|
-
this._maybeReleaseWriteCallback();
|
|
483
304
|
this._wakeUp();
|
|
484
305
|
this.emit("data-available");
|
|
485
306
|
this.emit("chunk", false);
|
|
@@ -491,12 +312,6 @@ function createParseClass(createInflateRawFn) {
|
|
|
491
312
|
this._driverState = {};
|
|
492
313
|
this._parsingDone = Promise.resolve();
|
|
493
314
|
this._opts = opts;
|
|
494
|
-
// Default values are intentionally conservative to avoid memory spikes
|
|
495
|
-
// when parsing large archives under slow consumers.
|
|
496
|
-
const hi = Math.max(64 * 1024, opts.inputHighWaterMarkBytes ?? 2 * 1024 * 1024);
|
|
497
|
-
const lo = Math.max(32 * 1024, opts.inputLowWaterMarkBytes ?? Math.floor(hi / 4));
|
|
498
|
-
this._inputHighWaterMarkBytes = hi;
|
|
499
|
-
this._inputLowWaterMarkBytes = Math.min(lo, hi);
|
|
500
315
|
const io = {
|
|
501
316
|
pull: (length) => this.pull(length),
|
|
502
317
|
pullUntil: (pattern, includeEof) => this.pullUntil(pattern, includeEof),
|
|
@@ -524,12 +339,6 @@ function createParseClass(createInflateRawFn) {
|
|
|
524
339
|
},
|
|
525
340
|
emitError: (err) => {
|
|
526
341
|
this.__emittedError = err;
|
|
527
|
-
// Ensure upstream writers don't hang waiting for a deferred write callback.
|
|
528
|
-
if (this._writeCb) {
|
|
529
|
-
const cb = this._writeCb;
|
|
530
|
-
this._writeCb = undefined;
|
|
531
|
-
cb(err);
|
|
532
|
-
}
|
|
533
342
|
this.emit("error", err);
|
|
534
343
|
},
|
|
535
344
|
emitClose: () => {
|
|
@@ -540,22 +349,7 @@ function createParseClass(createInflateRawFn) {
|
|
|
540
349
|
// NOTE: We intentionally do NOT pass inflateRawSync to runParseLoop in browser.
|
|
541
350
|
// Browser's native DecompressionStream is faster than our pure-JS fallback,
|
|
542
351
|
// so we always use the streaming path for decompression in browsers.
|
|
543
|
-
|
|
544
|
-
if (this._opts.useWorkerInflate && typeof Worker !== "undefined") {
|
|
545
|
-
// Worker path requires DecompressionStream support.
|
|
546
|
-
if ((0, compress_base_1.hasDeflateRawDecompressionStream)()) {
|
|
547
|
-
try {
|
|
548
|
-
return new WorkerInflateRaw(this._opts.workerInflateUrl);
|
|
549
|
-
}
|
|
550
|
-
catch {
|
|
551
|
-
// If Worker construction fails (e.g. CSP/CORS), fall back.
|
|
552
|
-
return createInflateRawFn();
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
return createInflateRawFn();
|
|
557
|
-
};
|
|
558
|
-
this._parsingDone = (0, stream_base_1.runParseLoop)(this._opts, io, emitter, inflateFactory, this._driverState
|
|
352
|
+
this._parsingDone = (0, parse_base_1.runParseLoop)(this._opts, io, emitter, () => createInflateRawFn(), this._driverState
|
|
559
353
|
// No inflateRawSync - always use streaming DecompressionStream in browser
|
|
560
354
|
);
|
|
561
355
|
this._parsingDone.catch((e) => {
|
|
@@ -567,16 +361,8 @@ function createParseClass(createInflateRawFn) {
|
|
|
567
361
|
});
|
|
568
362
|
});
|
|
569
363
|
}
|
|
570
|
-
_handleWrite(chunk
|
|
364
|
+
_handleWrite(chunk) {
|
|
571
365
|
this._buffer.append(chunk);
|
|
572
|
-
// Apply writable backpressure by deferring the callback when the input buffer is large.
|
|
573
|
-
// The callback will be released once the parser drains the buffer.
|
|
574
|
-
if (this._buffer.length >= this._inputHighWaterMarkBytes) {
|
|
575
|
-
this._writeCb = callback;
|
|
576
|
-
}
|
|
577
|
-
else {
|
|
578
|
-
callback();
|
|
579
|
-
}
|
|
580
366
|
this._wakeUp();
|
|
581
367
|
this.emit("data-available");
|
|
582
368
|
this.emit("chunk");
|
|
@@ -587,6 +373,13 @@ function createParseClass(createInflateRawFn) {
|
|
|
587
373
|
set buffer(value) {
|
|
588
374
|
this._buffer.reset(value);
|
|
589
375
|
}
|
|
376
|
+
_maybeReleaseWriteCallback() {
|
|
377
|
+
if (typeof this.cb === "function") {
|
|
378
|
+
const callback = this.cb;
|
|
379
|
+
this.cb = undefined;
|
|
380
|
+
callback();
|
|
381
|
+
}
|
|
382
|
+
}
|
|
590
383
|
_wakeUp() {
|
|
591
384
|
if (this._pendingResolve) {
|
|
592
385
|
const resolve = this._pendingResolve;
|
|
@@ -594,17 +387,6 @@ function createParseClass(createInflateRawFn) {
|
|
|
594
387
|
resolve();
|
|
595
388
|
}
|
|
596
389
|
}
|
|
597
|
-
_maybeReleaseWriteCallback() {
|
|
598
|
-
if (!this._writeCb) {
|
|
599
|
-
return;
|
|
600
|
-
}
|
|
601
|
-
if (this._buffer.length > this._inputLowWaterMarkBytes) {
|
|
602
|
-
return;
|
|
603
|
-
}
|
|
604
|
-
const cb = this._writeCb;
|
|
605
|
-
this._writeCb = undefined;
|
|
606
|
-
cb();
|
|
607
|
-
}
|
|
608
390
|
_waitForData() {
|
|
609
391
|
return new Promise(resolve => {
|
|
610
392
|
this._pendingResolve = resolve;
|
|
@@ -618,76 +400,60 @@ function createParseClass(createInflateRawFn) {
|
|
|
618
400
|
if (this.finished) {
|
|
619
401
|
if (this._buffer.length > 0) {
|
|
620
402
|
const data = this._buffer.read(this._buffer.length);
|
|
621
|
-
this._maybeReleaseWriteCallback();
|
|
622
403
|
return data;
|
|
623
404
|
}
|
|
624
405
|
throw new Error("FILE_ENDED");
|
|
625
406
|
}
|
|
626
407
|
await this._waitForData();
|
|
627
408
|
}
|
|
628
|
-
|
|
629
|
-
this._maybeReleaseWriteCallback();
|
|
630
|
-
return out;
|
|
409
|
+
return this._buffer.read(length);
|
|
631
410
|
}
|
|
632
411
|
async _pullUntilInternal(pattern, includeEof = false) {
|
|
633
412
|
const chunks = [];
|
|
634
|
-
|
|
413
|
+
let searchFrom = 0;
|
|
414
|
+
const overlap = Math.max(0, pattern.length - 1);
|
|
635
415
|
while (true) {
|
|
636
|
-
const
|
|
637
|
-
const match =
|
|
416
|
+
const view = this._buffer.view();
|
|
417
|
+
const match = (0, bytes_1.indexOfUint8ArrayPattern)(view, pattern, searchFrom);
|
|
638
418
|
if (match !== -1) {
|
|
639
419
|
this.match = match;
|
|
640
420
|
const toRead = match + (includeEof ? pattern.length : 0);
|
|
641
421
|
if (toRead > 0) {
|
|
642
422
|
chunks.push(this._buffer.read(toRead));
|
|
643
|
-
this._maybeReleaseWriteCallback();
|
|
644
423
|
}
|
|
645
|
-
return
|
|
424
|
+
return (0, _stream_1.concatUint8Arrays)(chunks);
|
|
646
425
|
}
|
|
647
426
|
// No match yet. Avoid rescanning bytes that can't start a match.
|
|
648
|
-
|
|
427
|
+
searchFrom = Math.max(searchFrom, Math.max(0, view.length - overlap));
|
|
649
428
|
if (this.finished) {
|
|
650
429
|
throw new Error("FILE_ENDED");
|
|
651
430
|
}
|
|
652
431
|
const safeLen = Math.max(0, this._buffer.length - pattern.length);
|
|
653
432
|
if (safeLen > 0) {
|
|
654
433
|
chunks.push(this._buffer.read(safeLen));
|
|
655
|
-
|
|
656
|
-
this._maybeReleaseWriteCallback();
|
|
434
|
+
searchFrom = Math.max(0, searchFrom - safeLen);
|
|
657
435
|
}
|
|
658
436
|
await this._waitForData();
|
|
659
437
|
}
|
|
660
438
|
}
|
|
661
439
|
_streamFixedLength(length) {
|
|
662
|
-
const output = new _stream_1.PassThrough(
|
|
440
|
+
const output = new _stream_1.PassThrough();
|
|
663
441
|
let remaining = length;
|
|
664
442
|
let done = false;
|
|
665
|
-
let waitingDrain = false;
|
|
666
443
|
const pull = () => {
|
|
667
444
|
if (done) {
|
|
668
445
|
return;
|
|
669
446
|
}
|
|
670
|
-
if (waitingDrain) {
|
|
671
|
-
return;
|
|
672
|
-
}
|
|
673
447
|
while (remaining > 0 && this._buffer.length > 0) {
|
|
674
448
|
const toRead = Math.min(remaining, this._buffer.length);
|
|
675
449
|
const chunk = this._buffer.read(toRead);
|
|
676
450
|
remaining -= toRead;
|
|
677
|
-
|
|
678
|
-
this._maybeReleaseWriteCallback();
|
|
679
|
-
if (!ok) {
|
|
680
|
-
waitingDrain = true;
|
|
681
|
-
output.once("drain", () => {
|
|
682
|
-
waitingDrain = false;
|
|
683
|
-
pull();
|
|
684
|
-
});
|
|
685
|
-
return;
|
|
686
|
-
}
|
|
451
|
+
output.write(chunk);
|
|
687
452
|
}
|
|
688
453
|
if (remaining === 0) {
|
|
689
454
|
done = true;
|
|
690
455
|
this.removeListener("data-available", pull);
|
|
456
|
+
this._maybeReleaseWriteCallback();
|
|
691
457
|
output.end();
|
|
692
458
|
}
|
|
693
459
|
else if (this.finished) {
|
|
@@ -701,69 +467,42 @@ function createParseClass(createInflateRawFn) {
|
|
|
701
467
|
return output;
|
|
702
468
|
}
|
|
703
469
|
_streamUntilPattern(pattern, includeEof = false) {
|
|
704
|
-
const output = new _stream_1.PassThrough(
|
|
470
|
+
const output = new _stream_1.PassThrough();
|
|
705
471
|
let done = false;
|
|
706
|
-
|
|
707
|
-
const
|
|
708
|
-
let waitingDrain = false;
|
|
472
|
+
let searchFrom = 0;
|
|
473
|
+
const overlap = Math.max(0, pattern.length - 1);
|
|
709
474
|
const pull = () => {
|
|
710
|
-
if (done
|
|
475
|
+
if (done) {
|
|
711
476
|
return;
|
|
712
477
|
}
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
const
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
this.match = match;
|
|
721
|
-
const endIndex = includeEof ? match + patternLen : match;
|
|
722
|
-
if (endIndex > 0) {
|
|
723
|
-
const ok = output.write(this._buffer.read(endIndex));
|
|
724
|
-
scanner.onConsume(endIndex);
|
|
725
|
-
this._maybeReleaseWriteCallback();
|
|
726
|
-
if (!ok) {
|
|
727
|
-
waitingDrain = true;
|
|
728
|
-
output.once("drain", () => {
|
|
729
|
-
waitingDrain = false;
|
|
730
|
-
pull();
|
|
731
|
-
});
|
|
732
|
-
return;
|
|
733
|
-
}
|
|
734
|
-
}
|
|
735
|
-
done = true;
|
|
736
|
-
this.removeListener("data-available", pull);
|
|
737
|
-
output.end();
|
|
738
|
-
return;
|
|
739
|
-
}
|
|
740
|
-
// No match yet. Avoid rescanning bytes that can't start a match.
|
|
741
|
-
scanner.onNoMatch(bufLen);
|
|
742
|
-
if (this.finished) {
|
|
743
|
-
done = true;
|
|
744
|
-
this.removeListener("data-available", pull);
|
|
745
|
-
output.destroy(new Error("FILE_ENDED"));
|
|
746
|
-
return;
|
|
747
|
-
}
|
|
748
|
-
const safeLen = bufLen - patternLen;
|
|
749
|
-
if (safeLen <= 0) {
|
|
750
|
-
// Keep enough bytes to detect a split signature.
|
|
751
|
-
if (this._buffer.length <= patternLen) {
|
|
752
|
-
this._maybeReleaseWriteCallback();
|
|
753
|
-
}
|
|
754
|
-
break;
|
|
478
|
+
const view = this._buffer.view();
|
|
479
|
+
const match = (0, bytes_1.indexOfUint8ArrayPattern)(view, pattern, searchFrom);
|
|
480
|
+
if (match !== -1) {
|
|
481
|
+
this.match = match;
|
|
482
|
+
const endIndex = includeEof ? match + pattern.length : match;
|
|
483
|
+
if (endIndex > 0) {
|
|
484
|
+
output.write(this._buffer.read(endIndex));
|
|
755
485
|
}
|
|
756
|
-
|
|
757
|
-
|
|
486
|
+
done = true;
|
|
487
|
+
this.removeListener("data-available", pull);
|
|
488
|
+
this._maybeReleaseWriteCallback();
|
|
489
|
+
output.end();
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
// No match yet. Avoid rescanning bytes that can't start a match.
|
|
493
|
+
searchFrom = Math.max(searchFrom, Math.max(0, view.length - overlap));
|
|
494
|
+
if (this.finished) {
|
|
495
|
+
done = true;
|
|
496
|
+
this.removeListener("data-available", pull);
|
|
497
|
+
this._maybeReleaseWriteCallback();
|
|
498
|
+
output.destroy(new Error("FILE_ENDED"));
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
const safeLen = Math.max(0, this._buffer.length - pattern.length);
|
|
502
|
+
if (safeLen > 0) {
|
|
503
|
+
output.write(this._buffer.read(safeLen));
|
|
504
|
+
searchFrom = Math.max(0, searchFrom - safeLen);
|
|
758
505
|
this._maybeReleaseWriteCallback();
|
|
759
|
-
if (!ok) {
|
|
760
|
-
waitingDrain = true;
|
|
761
|
-
output.once("drain", () => {
|
|
762
|
-
waitingDrain = false;
|
|
763
|
-
pull();
|
|
764
|
-
});
|
|
765
|
-
return;
|
|
766
|
-
}
|
|
767
506
|
}
|
|
768
507
|
};
|
|
769
508
|
this.on("data-available", pull);
|
|
@@ -786,7 +525,11 @@ function createParseClass(createInflateRawFn) {
|
|
|
786
525
|
return Promise.reject(new Error("FILE_ENDED"));
|
|
787
526
|
}
|
|
788
527
|
if (this._buffer.length >= eof) {
|
|
789
|
-
|
|
528
|
+
const data = this._buffer.read(eof);
|
|
529
|
+
if (this._buffer.length === 0) {
|
|
530
|
+
this._maybeReleaseWriteCallback();
|
|
531
|
+
}
|
|
532
|
+
return Promise.resolve(data);
|
|
790
533
|
}
|
|
791
534
|
return this._pullInternal(eof);
|
|
792
535
|
}
|
|
@@ -800,20 +543,16 @@ function createParseClass(createInflateRawFn) {
|
|
|
800
543
|
return this.pull(pattern, includeEof);
|
|
801
544
|
}
|
|
802
545
|
_streamUntilDataDescriptor() {
|
|
803
|
-
return (0,
|
|
546
|
+
return (0, parse_base_1.streamUntilValidatedDataDescriptor)({
|
|
804
547
|
source: {
|
|
548
|
+
getView: () => this._buffer.view(),
|
|
805
549
|
getLength: () => this._buffer.length,
|
|
806
550
|
read: (length) => this._buffer.read(length),
|
|
807
|
-
peekChunks: (length) => this._buffer.peekChunks(length),
|
|
808
|
-
discard: (length) => this._buffer.discard(length),
|
|
809
|
-
indexOfPattern: (pattern, startIndex) => this._buffer.indexOfPattern(pattern, startIndex),
|
|
810
|
-
peekUint32LE: (offset) => this._buffer.peekUint32LE(offset),
|
|
811
551
|
isFinished: () => this.finished,
|
|
812
552
|
onDataAvailable: (cb) => {
|
|
813
553
|
this.on("data-available", cb);
|
|
814
554
|
return () => this.removeListener("data-available", cb);
|
|
815
|
-
}
|
|
816
|
-
maybeReleaseWriteCallback: () => this._maybeReleaseWriteCallback()
|
|
555
|
+
}
|
|
817
556
|
},
|
|
818
557
|
dataDescriptorSignature
|
|
819
558
|
});
|