@cj-tech-master/excelts 4.2.1 → 4.2.2-canary.20260115044841.88820eb
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 +8 -0
- package/dist/browser/modules/archive/io/archive-sink.js +45 -0
- package/dist/browser/modules/archive/io/archive-source.d.ts +6 -0
- package/dist/browser/modules/archive/io/archive-source.js +100 -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/utils/ooxml-validator.d.ts +48 -0
- package/dist/browser/modules/excel/utils/ooxml-validator.js +469 -0
- package/dist/browser/modules/excel/utils/parse-sax.d.ts +3 -0
- package/dist/browser/modules/excel/utils/parse-sax.js +32 -13
- package/dist/browser/modules/excel/worksheet.js +5 -2
- package/dist/browser/modules/excel/xlsx/xform/core/app-xform.js +3 -3
- package/dist/browser/modules/excel/xlsx/xform/core/core-xform.js +56 -68
- package/dist/browser/modules/excel/xlsx/xform/drawing/ctrl-prop-xform.d.ts +1 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/ctrl-prop-xform.js +13 -1
- package/dist/browser/modules/excel/xlsx/xform/drawing/sp-xform.d.ts +18 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/sp-xform.js +112 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.d.ts +6 -1
- package/dist/browser/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +30 -2
- package/dist/browser/modules/excel/xlsx/xform/drawing/vml-drawing-xform.js +11 -0
- package/dist/browser/modules/excel/xlsx/xform/list-xform.js +8 -10
- package/dist/browser/modules/excel/xlsx/xform/sheet/page-setup-xform.d.ts +1 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/page-setup-xform.js +16 -2
- package/dist/browser/modules/excel/xlsx/xform/sheet/worksheet-xform.js +110 -12
- package/dist/browser/modules/excel/xlsx/xform/strings/shared-string-xform.js +2 -3
- package/dist/browser/modules/excel/xlsx/xform/strings/text-xform.js +5 -7
- package/dist/browser/modules/excel/xlsx/xlsx.browser.js +11 -10
- package/dist/browser/modules/excel/xlsx/xlsx.js +1 -1
- package/dist/browser/modules/stream/base-transform.d.ts +3 -0
- package/dist/browser/modules/stream/base-transform.js +34 -20
- package/dist/browser/modules/stream/buffered-stream.d.ts +2 -12
- package/dist/browser/modules/stream/chunked-builder.js +4 -4
- package/dist/browser/modules/stream/index.browser.d.ts +13 -19
- package/dist/browser/modules/stream/index.browser.js +10 -22
- package/dist/browser/modules/stream/index.d.ts +18 -41
- package/dist/browser/modules/stream/index.js +15 -44
- package/dist/browser/modules/stream/internal/event-utils.d.ts +17 -0
- package/dist/browser/modules/stream/internal/event-utils.js +40 -0
- package/dist/browser/modules/stream/internal/type-guards.d.ts +9 -0
- package/dist/browser/modules/stream/internal/type-guards.js +24 -0
- package/dist/browser/modules/stream/pull-stream.d.ts +5 -6
- package/dist/browser/modules/stream/pull-stream.js +107 -43
- package/dist/browser/modules/stream/shared.d.ts +1 -1
- package/dist/browser/modules/stream/shared.js +7 -4
- package/dist/browser/modules/stream/streams.browser.d.ts +32 -44
- package/dist/browser/modules/stream/streams.browser.js +921 -836
- package/dist/browser/modules/stream/streams.d.ts +4 -20
- package/dist/browser/modules/stream/streams.js +146 -95
- package/dist/browser/modules/stream/utils.js +5 -38
- 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 +49 -0
- package/dist/cjs/modules/archive/io/archive-source.js +105 -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/utils/ooxml-validator.js +475 -0
- package/dist/cjs/modules/excel/utils/parse-sax.js +32 -13
- package/dist/cjs/modules/excel/worksheet.js +5 -2
- package/dist/cjs/modules/excel/xlsx/xform/core/app-xform.js +3 -3
- package/dist/cjs/modules/excel/xlsx/xform/core/core-xform.js +56 -68
- package/dist/cjs/modules/excel/xlsx/xform/drawing/ctrl-prop-xform.js +13 -1
- package/dist/cjs/modules/excel/xlsx/xform/drawing/sp-xform.js +115 -0
- package/dist/cjs/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +30 -2
- package/dist/cjs/modules/excel/xlsx/xform/drawing/vml-drawing-xform.js +11 -0
- package/dist/cjs/modules/excel/xlsx/xform/list-xform.js +8 -10
- package/dist/cjs/modules/excel/xlsx/xform/sheet/page-setup-xform.js +16 -2
- package/dist/cjs/modules/excel/xlsx/xform/sheet/worksheet-xform.js +110 -12
- package/dist/cjs/modules/excel/xlsx/xform/strings/shared-string-xform.js +2 -3
- package/dist/cjs/modules/excel/xlsx/xform/strings/text-xform.js +5 -7
- package/dist/cjs/modules/excel/xlsx/xlsx.browser.js +14 -13
- package/dist/cjs/modules/excel/xlsx/xlsx.js +2 -2
- package/dist/cjs/modules/stream/base-transform.js +34 -20
- package/dist/cjs/modules/stream/chunked-builder.js +4 -4
- package/dist/cjs/modules/stream/index.browser.js +10 -17
- package/dist/cjs/modules/stream/index.js +15 -39
- package/dist/cjs/modules/stream/internal/event-utils.js +43 -0
- package/dist/cjs/modules/stream/internal/type-guards.js +30 -0
- package/dist/cjs/modules/stream/pull-stream.js +107 -43
- package/dist/cjs/modules/stream/shared.js +7 -4
- package/dist/cjs/modules/stream/streams.browser.js +927 -847
- package/dist/cjs/modules/stream/streams.js +156 -107
- package/dist/cjs/modules/stream/utils.js +3 -36
- 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 +45 -0
- package/dist/esm/modules/archive/io/archive-source.js +100 -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/utils/ooxml-validator.js +469 -0
- package/dist/esm/modules/excel/utils/parse-sax.js +32 -13
- package/dist/esm/modules/excel/worksheet.js +5 -2
- package/dist/esm/modules/excel/xlsx/xform/core/app-xform.js +3 -3
- package/dist/esm/modules/excel/xlsx/xform/core/core-xform.js +56 -68
- package/dist/esm/modules/excel/xlsx/xform/drawing/ctrl-prop-xform.js +13 -1
- package/dist/esm/modules/excel/xlsx/xform/drawing/sp-xform.js +112 -0
- package/dist/esm/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +30 -2
- package/dist/esm/modules/excel/xlsx/xform/drawing/vml-drawing-xform.js +11 -0
- package/dist/esm/modules/excel/xlsx/xform/list-xform.js +8 -10
- package/dist/esm/modules/excel/xlsx/xform/sheet/page-setup-xform.js +16 -2
- package/dist/esm/modules/excel/xlsx/xform/sheet/worksheet-xform.js +110 -12
- package/dist/esm/modules/excel/xlsx/xform/strings/shared-string-xform.js +2 -3
- package/dist/esm/modules/excel/xlsx/xform/strings/text-xform.js +5 -7
- package/dist/esm/modules/excel/xlsx/xlsx.browser.js +11 -10
- package/dist/esm/modules/excel/xlsx/xlsx.js +1 -1
- package/dist/esm/modules/stream/base-transform.js +34 -20
- package/dist/esm/modules/stream/chunked-builder.js +4 -4
- package/dist/esm/modules/stream/index.browser.js +10 -22
- package/dist/esm/modules/stream/index.js +15 -44
- package/dist/esm/modules/stream/internal/event-utils.js +40 -0
- package/dist/esm/modules/stream/internal/type-guards.js +24 -0
- package/dist/esm/modules/stream/pull-stream.js +107 -43
- package/dist/esm/modules/stream/shared.js +7 -4
- package/dist/esm/modules/stream/streams.browser.js +921 -836
- package/dist/esm/modules/stream/streams.js +146 -95
- package/dist/esm/modules/stream/utils.js +5 -38
- package/dist/iife/THIRD_PARTY_NOTICES.md +0 -31
- package/dist/iife/excelts.iife.js +6592 -4537
- 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 +8 -0
- package/dist/types/modules/archive/io/archive-source.d.ts +6 -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/excel/utils/ooxml-validator.d.ts +48 -0
- package/dist/types/modules/excel/utils/parse-sax.d.ts +3 -0
- package/dist/types/modules/excel/xlsx/xform/drawing/ctrl-prop-xform.d.ts +1 -0
- package/dist/types/modules/excel/xlsx/xform/drawing/sp-xform.d.ts +18 -0
- package/dist/types/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.d.ts +6 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/page-setup-xform.d.ts +1 -0
- package/dist/types/modules/stream/base-transform.d.ts +3 -0
- package/dist/types/modules/stream/buffered-stream.d.ts +2 -12
- package/dist/types/modules/stream/index.browser.d.ts +13 -19
- package/dist/types/modules/stream/index.d.ts +18 -41
- package/dist/types/modules/stream/internal/event-utils.d.ts +17 -0
- package/dist/types/modules/stream/internal/type-guards.d.ts +9 -0
- package/dist/types/modules/stream/pull-stream.d.ts +5 -6
- package/dist/types/modules/stream/shared.d.ts +1 -1
- package/dist/types/modules/stream/streams.browser.d.ts +32 -44
- package/dist/types/modules/stream/streams.d.ts +4 -20
- package/package.json +14 -10
- 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
|
@@ -10,14 +10,13 @@ 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
|
|
20
|
-
const compress_base_1 = require("./compress.base.js");
|
|
13
|
+
const _stream_1 = require("../../stream/index.js");
|
|
14
|
+
const stream_base_1 = require("./stream.base.js");
|
|
15
|
+
const pattern_scanner_1 = require("../utils/pattern-scanner.js");
|
|
16
|
+
const deflate_fallback_1 = require("../compression/deflate-fallback.js");
|
|
17
|
+
const byte_queue_1 = require("../internal/byte-queue.js");
|
|
18
|
+
const compress_base_1 = require("../compression/compress.base.js");
|
|
19
|
+
const DEFAULT_UNZIP_STREAM_HIGH_WATER_MARK = 256 * 1024;
|
|
21
20
|
// =============================================================================
|
|
22
21
|
// Browser InflateRaw using DecompressionStream
|
|
23
22
|
// =============================================================================
|
|
@@ -34,6 +33,9 @@ class BrowserInflateRaw extends _stream_1.Duplex {
|
|
|
34
33
|
// Pass write handler to Duplex so pipe() calls our write method
|
|
35
34
|
// Also pass final handler to close the DecompressionStream when _writable ends
|
|
36
35
|
super({
|
|
36
|
+
// Keep the internal buffer bounded; this stream is used in tight parse loops.
|
|
37
|
+
writableHighWaterMark: 512 * 1024,
|
|
38
|
+
readableHighWaterMark: 512 * 1024,
|
|
37
39
|
write: (chunk, _encoding, callback) => {
|
|
38
40
|
this._doWrite(chunk, callback);
|
|
39
41
|
},
|
|
@@ -142,47 +144,6 @@ class BrowserInflateRaw extends _stream_1.Duplex {
|
|
|
142
144
|
this.push(null);
|
|
143
145
|
}
|
|
144
146
|
}
|
|
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
|
-
}
|
|
186
147
|
_closeWriter(callback) {
|
|
187
148
|
if (this.writeClosed) {
|
|
188
149
|
this._readingDonePromise.then(() => {
|
|
@@ -210,7 +171,6 @@ class BrowserInflateRaw extends _stream_1.Duplex {
|
|
|
210
171
|
if (callback) {
|
|
211
172
|
callback();
|
|
212
173
|
}
|
|
213
|
-
this.emit("finish");
|
|
214
174
|
});
|
|
215
175
|
});
|
|
216
176
|
}
|
|
@@ -223,6 +183,225 @@ class BrowserInflateRaw extends _stream_1.Duplex {
|
|
|
223
183
|
}
|
|
224
184
|
}
|
|
225
185
|
// =============================================================================
|
|
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
|
+
// =============================================================================
|
|
226
405
|
// Fallback InflateRaw for browsers without DecompressionStream
|
|
227
406
|
// =============================================================================
|
|
228
407
|
/**
|
|
@@ -282,7 +461,7 @@ function createInflateRaw() {
|
|
|
282
461
|
// =============================================================================
|
|
283
462
|
// Utilities
|
|
284
463
|
// =============================================================================
|
|
285
|
-
const dataDescriptorSignature =
|
|
464
|
+
const dataDescriptorSignature = stream_base_1.DATA_DESCRIPTOR_SIGNATURE_BYTES;
|
|
286
465
|
function createParseClass(createInflateRawFn) {
|
|
287
466
|
/**
|
|
288
467
|
* ZIP Stream Parser for browsers.
|
|
@@ -296,11 +475,11 @@ function createParseClass(createInflateRawFn) {
|
|
|
296
475
|
super({
|
|
297
476
|
objectMode: true,
|
|
298
477
|
write: (chunk, _encoding, callback) => {
|
|
299
|
-
this._handleWrite(chunk);
|
|
300
|
-
callback();
|
|
478
|
+
this._handleWrite(chunk, callback);
|
|
301
479
|
},
|
|
302
480
|
final: (callback) => {
|
|
303
481
|
this.finished = true;
|
|
482
|
+
this._maybeReleaseWriteCallback();
|
|
304
483
|
this._wakeUp();
|
|
305
484
|
this.emit("data-available");
|
|
306
485
|
this.emit("chunk", false);
|
|
@@ -312,6 +491,12 @@ function createParseClass(createInflateRawFn) {
|
|
|
312
491
|
this._driverState = {};
|
|
313
492
|
this._parsingDone = Promise.resolve();
|
|
314
493
|
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);
|
|
315
500
|
const io = {
|
|
316
501
|
pull: (length) => this.pull(length),
|
|
317
502
|
pullUntil: (pattern, includeEof) => this.pullUntil(pattern, includeEof),
|
|
@@ -339,6 +524,12 @@ function createParseClass(createInflateRawFn) {
|
|
|
339
524
|
},
|
|
340
525
|
emitError: (err) => {
|
|
341
526
|
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
|
+
}
|
|
342
533
|
this.emit("error", err);
|
|
343
534
|
},
|
|
344
535
|
emitClose: () => {
|
|
@@ -349,7 +540,22 @@ function createParseClass(createInflateRawFn) {
|
|
|
349
540
|
// NOTE: We intentionally do NOT pass inflateRawSync to runParseLoop in browser.
|
|
350
541
|
// Browser's native DecompressionStream is faster than our pure-JS fallback,
|
|
351
542
|
// so we always use the streaming path for decompression in browsers.
|
|
352
|
-
|
|
543
|
+
const inflateFactory = () => {
|
|
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
|
|
353
559
|
// No inflateRawSync - always use streaming DecompressionStream in browser
|
|
354
560
|
);
|
|
355
561
|
this._parsingDone.catch((e) => {
|
|
@@ -361,8 +567,16 @@ function createParseClass(createInflateRawFn) {
|
|
|
361
567
|
});
|
|
362
568
|
});
|
|
363
569
|
}
|
|
364
|
-
_handleWrite(chunk) {
|
|
570
|
+
_handleWrite(chunk, callback) {
|
|
365
571
|
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
|
+
}
|
|
366
580
|
this._wakeUp();
|
|
367
581
|
this.emit("data-available");
|
|
368
582
|
this.emit("chunk");
|
|
@@ -373,13 +587,6 @@ function createParseClass(createInflateRawFn) {
|
|
|
373
587
|
set buffer(value) {
|
|
374
588
|
this._buffer.reset(value);
|
|
375
589
|
}
|
|
376
|
-
_maybeReleaseWriteCallback() {
|
|
377
|
-
if (typeof this.cb === "function") {
|
|
378
|
-
const callback = this.cb;
|
|
379
|
-
this.cb = undefined;
|
|
380
|
-
callback();
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
590
|
_wakeUp() {
|
|
384
591
|
if (this._pendingResolve) {
|
|
385
592
|
const resolve = this._pendingResolve;
|
|
@@ -387,6 +594,17 @@ function createParseClass(createInflateRawFn) {
|
|
|
387
594
|
resolve();
|
|
388
595
|
}
|
|
389
596
|
}
|
|
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
|
+
}
|
|
390
608
|
_waitForData() {
|
|
391
609
|
return new Promise(resolve => {
|
|
392
610
|
this._pendingResolve = resolve;
|
|
@@ -400,60 +618,76 @@ function createParseClass(createInflateRawFn) {
|
|
|
400
618
|
if (this.finished) {
|
|
401
619
|
if (this._buffer.length > 0) {
|
|
402
620
|
const data = this._buffer.read(this._buffer.length);
|
|
621
|
+
this._maybeReleaseWriteCallback();
|
|
403
622
|
return data;
|
|
404
623
|
}
|
|
405
624
|
throw new Error("FILE_ENDED");
|
|
406
625
|
}
|
|
407
626
|
await this._waitForData();
|
|
408
627
|
}
|
|
409
|
-
|
|
628
|
+
const out = this._buffer.read(length);
|
|
629
|
+
this._maybeReleaseWriteCallback();
|
|
630
|
+
return out;
|
|
410
631
|
}
|
|
411
632
|
async _pullUntilInternal(pattern, includeEof = false) {
|
|
412
633
|
const chunks = [];
|
|
413
|
-
|
|
414
|
-
const overlap = Math.max(0, pattern.length - 1);
|
|
634
|
+
const scanner = new pattern_scanner_1.PatternScanner(pattern);
|
|
415
635
|
while (true) {
|
|
416
|
-
const
|
|
417
|
-
const match = (
|
|
636
|
+
const bufLen = this._buffer.length;
|
|
637
|
+
const match = scanner.find(this._buffer);
|
|
418
638
|
if (match !== -1) {
|
|
419
639
|
this.match = match;
|
|
420
640
|
const toRead = match + (includeEof ? pattern.length : 0);
|
|
421
641
|
if (toRead > 0) {
|
|
422
642
|
chunks.push(this._buffer.read(toRead));
|
|
643
|
+
this._maybeReleaseWriteCallback();
|
|
423
644
|
}
|
|
424
|
-
return (0, _stream_1.concatUint8Arrays)(chunks);
|
|
645
|
+
return chunks.length === 1 ? chunks[0] : (0, _stream_1.concatUint8Arrays)(chunks);
|
|
425
646
|
}
|
|
426
647
|
// No match yet. Avoid rescanning bytes that can't start a match.
|
|
427
|
-
|
|
648
|
+
scanner.onNoMatch(bufLen);
|
|
428
649
|
if (this.finished) {
|
|
429
650
|
throw new Error("FILE_ENDED");
|
|
430
651
|
}
|
|
431
652
|
const safeLen = Math.max(0, this._buffer.length - pattern.length);
|
|
432
653
|
if (safeLen > 0) {
|
|
433
654
|
chunks.push(this._buffer.read(safeLen));
|
|
434
|
-
|
|
655
|
+
scanner.onConsume(safeLen);
|
|
656
|
+
this._maybeReleaseWriteCallback();
|
|
435
657
|
}
|
|
436
658
|
await this._waitForData();
|
|
437
659
|
}
|
|
438
660
|
}
|
|
439
661
|
_streamFixedLength(length) {
|
|
440
|
-
const output = new _stream_1.PassThrough();
|
|
662
|
+
const output = new _stream_1.PassThrough({ highWaterMark: DEFAULT_UNZIP_STREAM_HIGH_WATER_MARK });
|
|
441
663
|
let remaining = length;
|
|
442
664
|
let done = false;
|
|
665
|
+
let waitingDrain = false;
|
|
443
666
|
const pull = () => {
|
|
444
667
|
if (done) {
|
|
445
668
|
return;
|
|
446
669
|
}
|
|
670
|
+
if (waitingDrain) {
|
|
671
|
+
return;
|
|
672
|
+
}
|
|
447
673
|
while (remaining > 0 && this._buffer.length > 0) {
|
|
448
674
|
const toRead = Math.min(remaining, this._buffer.length);
|
|
449
675
|
const chunk = this._buffer.read(toRead);
|
|
450
676
|
remaining -= toRead;
|
|
451
|
-
output.write(chunk);
|
|
677
|
+
const ok = output.write(chunk);
|
|
678
|
+
this._maybeReleaseWriteCallback();
|
|
679
|
+
if (!ok) {
|
|
680
|
+
waitingDrain = true;
|
|
681
|
+
output.once("drain", () => {
|
|
682
|
+
waitingDrain = false;
|
|
683
|
+
pull();
|
|
684
|
+
});
|
|
685
|
+
return;
|
|
686
|
+
}
|
|
452
687
|
}
|
|
453
688
|
if (remaining === 0) {
|
|
454
689
|
done = true;
|
|
455
690
|
this.removeListener("data-available", pull);
|
|
456
|
-
this._maybeReleaseWriteCallback();
|
|
457
691
|
output.end();
|
|
458
692
|
}
|
|
459
693
|
else if (this.finished) {
|
|
@@ -467,42 +701,69 @@ function createParseClass(createInflateRawFn) {
|
|
|
467
701
|
return output;
|
|
468
702
|
}
|
|
469
703
|
_streamUntilPattern(pattern, includeEof = false) {
|
|
470
|
-
const output = new _stream_1.PassThrough();
|
|
704
|
+
const output = new _stream_1.PassThrough({ highWaterMark: DEFAULT_UNZIP_STREAM_HIGH_WATER_MARK });
|
|
471
705
|
let done = false;
|
|
472
|
-
|
|
473
|
-
const
|
|
706
|
+
const patternLen = pattern.length;
|
|
707
|
+
const scanner = new pattern_scanner_1.PatternScanner(pattern);
|
|
708
|
+
let waitingDrain = false;
|
|
474
709
|
const pull = () => {
|
|
475
|
-
if (done) {
|
|
710
|
+
if (done || waitingDrain) {
|
|
476
711
|
return;
|
|
477
712
|
}
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
this.match = match;
|
|
482
|
-
const endIndex = includeEof ? match + pattern.length : match;
|
|
483
|
-
if (endIndex > 0) {
|
|
484
|
-
output.write(this._buffer.read(endIndex));
|
|
713
|
+
while (true) {
|
|
714
|
+
if (this._buffer.length <= 0) {
|
|
715
|
+
break;
|
|
485
716
|
}
|
|
486
|
-
|
|
487
|
-
this.
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
717
|
+
const bufLen = this._buffer.length;
|
|
718
|
+
const match = scanner.find(this._buffer);
|
|
719
|
+
if (match !== -1) {
|
|
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;
|
|
755
|
+
}
|
|
756
|
+
const ok = output.write(this._buffer.read(safeLen));
|
|
757
|
+
scanner.onConsume(safeLen);
|
|
505
758
|
this._maybeReleaseWriteCallback();
|
|
759
|
+
if (!ok) {
|
|
760
|
+
waitingDrain = true;
|
|
761
|
+
output.once("drain", () => {
|
|
762
|
+
waitingDrain = false;
|
|
763
|
+
pull();
|
|
764
|
+
});
|
|
765
|
+
return;
|
|
766
|
+
}
|
|
506
767
|
}
|
|
507
768
|
};
|
|
508
769
|
this.on("data-available", pull);
|
|
@@ -525,11 +786,7 @@ function createParseClass(createInflateRawFn) {
|
|
|
525
786
|
return Promise.reject(new Error("FILE_ENDED"));
|
|
526
787
|
}
|
|
527
788
|
if (this._buffer.length >= eof) {
|
|
528
|
-
|
|
529
|
-
if (this._buffer.length === 0) {
|
|
530
|
-
this._maybeReleaseWriteCallback();
|
|
531
|
-
}
|
|
532
|
-
return Promise.resolve(data);
|
|
789
|
+
return Promise.resolve(this._buffer.read(eof));
|
|
533
790
|
}
|
|
534
791
|
return this._pullInternal(eof);
|
|
535
792
|
}
|
|
@@ -543,16 +800,20 @@ function createParseClass(createInflateRawFn) {
|
|
|
543
800
|
return this.pull(pattern, includeEof);
|
|
544
801
|
}
|
|
545
802
|
_streamUntilDataDescriptor() {
|
|
546
|
-
return (0,
|
|
803
|
+
return (0, stream_base_1.streamUntilValidatedDataDescriptor)({
|
|
547
804
|
source: {
|
|
548
|
-
getView: () => this._buffer.view(),
|
|
549
805
|
getLength: () => this._buffer.length,
|
|
550
806
|
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),
|
|
551
811
|
isFinished: () => this.finished,
|
|
552
812
|
onDataAvailable: (cb) => {
|
|
553
813
|
this.on("data-available", cb);
|
|
554
814
|
return () => this.removeListener("data-available", cb);
|
|
555
|
-
}
|
|
815
|
+
},
|
|
816
|
+
maybeReleaseWriteCallback: () => this._maybeReleaseWriteCallback()
|
|
556
817
|
},
|
|
557
818
|
dataDescriptorSignature
|
|
558
819
|
});
|