@cj-tech-master/excelts 4.2.0 → 4.2.1-canary.20260112134913.a3cecdd
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/{types/modules/archive → browser/modules/archive/compression}/compress.base.d.ts +1 -0
- package/dist/browser/modules/archive/{compress.base.js → compression/compress.base.js} +2 -1
- package/dist/{types/modules/archive → browser/modules/archive/compression}/compress.browser.d.ts +10 -8
- package/dist/{esm/modules/archive → browser/modules/archive/compression}/compress.browser.js +18 -19
- package/dist/browser/modules/archive/{compress.d.ts → compression/compress.d.ts} +2 -2
- package/dist/browser/modules/archive/{compress.js → 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} +58 -3
- 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} +376 -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} +7 -6
- package/dist/{types/modules/archive → browser/modules/archive/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/form-control.d.ts +2 -0
- package/dist/browser/modules/excel/form-control.js +54 -16
- 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/worksheet.js +5 -2
- 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/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 +117 -5
- package/dist/browser/modules/excel/xlsx/xlsx.browser.js +3 -6
- package/dist/browser/modules/excel/xlsx/xlsx.js +1 -1
- package/dist/browser/modules/stream/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 -42
- package/dist/browser/modules/stream/streams.browser.js +941 -823
- 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} +2 -1
- package/dist/cjs/modules/archive/{compress.browser.js → compression/compress.browser.js} +18 -19
- 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} +377 -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/form-control.js +54 -16
- 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/worksheet.js +5 -2
- 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/sheet/page-setup-xform.js +16 -2
- package/dist/cjs/modules/excel/xlsx/xform/sheet/worksheet-xform.js +117 -5
- package/dist/cjs/modules/excel/xlsx/xlsx.browser.js +6 -9
- package/dist/cjs/modules/excel/xlsx/xlsx.js +2 -2
- package/dist/cjs/modules/stream/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 +947 -834
- 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/esm/modules/archive/{compress.base.js → compression/compress.base.js} +2 -1
- package/dist/{browser/modules/archive → esm/modules/archive/compression}/compress.browser.js +18 -19
- package/dist/esm/modules/archive/{compress.js → 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} +376 -110
- package/dist/{browser/modules/archive/parse.js → esm/modules/archive/unzip/stream.js} +7 -6
- 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/form-control.js +54 -16
- 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/worksheet.js +5 -2
- 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/sheet/page-setup-xform.js +16 -2
- package/dist/esm/modules/excel/xlsx/xform/sheet/worksheet-xform.js +117 -5
- package/dist/esm/modules/excel/xlsx/xlsx.browser.js +3 -6
- package/dist/esm/modules/excel/xlsx/xlsx.js +1 -1
- package/dist/esm/modules/stream/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 +941 -823
- 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 +81 -0
- package/dist/iife/excelts.iife.js +4979 -2800
- 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.base.d.ts +1 -0
- package/dist/{browser/modules/archive → types/modules/archive/compression}/compress.browser.d.ts +10 -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} +60 -5
- 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/{browser/modules/archive → types/modules/archive/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/form-control.d.ts +2 -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/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 -42
- package/dist/types/modules/stream/streams.d.ts +4 -20
- package/package.json +19 -15
- 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 -610
- 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 -632
- 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 -610
- 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/{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/{LICENSE → iife/LICENSE} +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: () => {
|
|
@@ -346,7 +537,27 @@ function createParseClass(createInflateRawFn) {
|
|
|
346
537
|
}
|
|
347
538
|
};
|
|
348
539
|
queueMicrotask(() => {
|
|
349
|
-
|
|
540
|
+
// NOTE: We intentionally do NOT pass inflateRawSync to runParseLoop in browser.
|
|
541
|
+
// Browser's native DecompressionStream is faster than our pure-JS fallback,
|
|
542
|
+
// so we always use the streaming path for decompression in browsers.
|
|
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
|
|
559
|
+
// No inflateRawSync - always use streaming DecompressionStream in browser
|
|
560
|
+
);
|
|
350
561
|
this._parsingDone.catch((e) => {
|
|
351
562
|
if (!this.__emittedError || this.__emittedError !== e) {
|
|
352
563
|
this.__emittedError = e;
|
|
@@ -356,8 +567,16 @@ function createParseClass(createInflateRawFn) {
|
|
|
356
567
|
});
|
|
357
568
|
});
|
|
358
569
|
}
|
|
359
|
-
_handleWrite(chunk) {
|
|
570
|
+
_handleWrite(chunk, callback) {
|
|
360
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
|
+
}
|
|
361
580
|
this._wakeUp();
|
|
362
581
|
this.emit("data-available");
|
|
363
582
|
this.emit("chunk");
|
|
@@ -368,13 +587,6 @@ function createParseClass(createInflateRawFn) {
|
|
|
368
587
|
set buffer(value) {
|
|
369
588
|
this._buffer.reset(value);
|
|
370
589
|
}
|
|
371
|
-
_maybeReleaseWriteCallback() {
|
|
372
|
-
if (typeof this.cb === "function") {
|
|
373
|
-
const callback = this.cb;
|
|
374
|
-
this.cb = undefined;
|
|
375
|
-
callback();
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
590
|
_wakeUp() {
|
|
379
591
|
if (this._pendingResolve) {
|
|
380
592
|
const resolve = this._pendingResolve;
|
|
@@ -382,6 +594,17 @@ function createParseClass(createInflateRawFn) {
|
|
|
382
594
|
resolve();
|
|
383
595
|
}
|
|
384
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
|
+
}
|
|
385
608
|
_waitForData() {
|
|
386
609
|
return new Promise(resolve => {
|
|
387
610
|
this._pendingResolve = resolve;
|
|
@@ -395,60 +618,76 @@ function createParseClass(createInflateRawFn) {
|
|
|
395
618
|
if (this.finished) {
|
|
396
619
|
if (this._buffer.length > 0) {
|
|
397
620
|
const data = this._buffer.read(this._buffer.length);
|
|
621
|
+
this._maybeReleaseWriteCallback();
|
|
398
622
|
return data;
|
|
399
623
|
}
|
|
400
624
|
throw new Error("FILE_ENDED");
|
|
401
625
|
}
|
|
402
626
|
await this._waitForData();
|
|
403
627
|
}
|
|
404
|
-
|
|
628
|
+
const out = this._buffer.read(length);
|
|
629
|
+
this._maybeReleaseWriteCallback();
|
|
630
|
+
return out;
|
|
405
631
|
}
|
|
406
632
|
async _pullUntilInternal(pattern, includeEof = false) {
|
|
407
633
|
const chunks = [];
|
|
408
|
-
|
|
409
|
-
const overlap = Math.max(0, pattern.length - 1);
|
|
634
|
+
const scanner = new pattern_scanner_1.PatternScanner(pattern);
|
|
410
635
|
while (true) {
|
|
411
|
-
const
|
|
412
|
-
const match = (
|
|
636
|
+
const bufLen = this._buffer.length;
|
|
637
|
+
const match = scanner.find(this._buffer);
|
|
413
638
|
if (match !== -1) {
|
|
414
639
|
this.match = match;
|
|
415
640
|
const toRead = match + (includeEof ? pattern.length : 0);
|
|
416
641
|
if (toRead > 0) {
|
|
417
642
|
chunks.push(this._buffer.read(toRead));
|
|
643
|
+
this._maybeReleaseWriteCallback();
|
|
418
644
|
}
|
|
419
|
-
return (0, _stream_1.concatUint8Arrays)(chunks);
|
|
645
|
+
return chunks.length === 1 ? chunks[0] : (0, _stream_1.concatUint8Arrays)(chunks);
|
|
420
646
|
}
|
|
421
647
|
// No match yet. Avoid rescanning bytes that can't start a match.
|
|
422
|
-
|
|
648
|
+
scanner.onNoMatch(bufLen);
|
|
423
649
|
if (this.finished) {
|
|
424
650
|
throw new Error("FILE_ENDED");
|
|
425
651
|
}
|
|
426
652
|
const safeLen = Math.max(0, this._buffer.length - pattern.length);
|
|
427
653
|
if (safeLen > 0) {
|
|
428
654
|
chunks.push(this._buffer.read(safeLen));
|
|
429
|
-
|
|
655
|
+
scanner.onConsume(safeLen);
|
|
656
|
+
this._maybeReleaseWriteCallback();
|
|
430
657
|
}
|
|
431
658
|
await this._waitForData();
|
|
432
659
|
}
|
|
433
660
|
}
|
|
434
661
|
_streamFixedLength(length) {
|
|
435
|
-
const output = new _stream_1.PassThrough();
|
|
662
|
+
const output = new _stream_1.PassThrough({ highWaterMark: DEFAULT_UNZIP_STREAM_HIGH_WATER_MARK });
|
|
436
663
|
let remaining = length;
|
|
437
664
|
let done = false;
|
|
665
|
+
let waitingDrain = false;
|
|
438
666
|
const pull = () => {
|
|
439
667
|
if (done) {
|
|
440
668
|
return;
|
|
441
669
|
}
|
|
670
|
+
if (waitingDrain) {
|
|
671
|
+
return;
|
|
672
|
+
}
|
|
442
673
|
while (remaining > 0 && this._buffer.length > 0) {
|
|
443
674
|
const toRead = Math.min(remaining, this._buffer.length);
|
|
444
675
|
const chunk = this._buffer.read(toRead);
|
|
445
676
|
remaining -= toRead;
|
|
446
|
-
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
|
+
}
|
|
447
687
|
}
|
|
448
688
|
if (remaining === 0) {
|
|
449
689
|
done = true;
|
|
450
690
|
this.removeListener("data-available", pull);
|
|
451
|
-
this._maybeReleaseWriteCallback();
|
|
452
691
|
output.end();
|
|
453
692
|
}
|
|
454
693
|
else if (this.finished) {
|
|
@@ -462,42 +701,69 @@ function createParseClass(createInflateRawFn) {
|
|
|
462
701
|
return output;
|
|
463
702
|
}
|
|
464
703
|
_streamUntilPattern(pattern, includeEof = false) {
|
|
465
|
-
const output = new _stream_1.PassThrough();
|
|
704
|
+
const output = new _stream_1.PassThrough({ highWaterMark: DEFAULT_UNZIP_STREAM_HIGH_WATER_MARK });
|
|
466
705
|
let done = false;
|
|
467
|
-
|
|
468
|
-
const
|
|
706
|
+
const patternLen = pattern.length;
|
|
707
|
+
const scanner = new pattern_scanner_1.PatternScanner(pattern);
|
|
708
|
+
let waitingDrain = false;
|
|
469
709
|
const pull = () => {
|
|
470
|
-
if (done) {
|
|
710
|
+
if (done || waitingDrain) {
|
|
471
711
|
return;
|
|
472
712
|
}
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
this.match = match;
|
|
477
|
-
const endIndex = includeEof ? match + pattern.length : match;
|
|
478
|
-
if (endIndex > 0) {
|
|
479
|
-
output.write(this._buffer.read(endIndex));
|
|
713
|
+
while (true) {
|
|
714
|
+
if (this._buffer.length <= 0) {
|
|
715
|
+
break;
|
|
480
716
|
}
|
|
481
|
-
|
|
482
|
-
this.
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
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);
|
|
500
758
|
this._maybeReleaseWriteCallback();
|
|
759
|
+
if (!ok) {
|
|
760
|
+
waitingDrain = true;
|
|
761
|
+
output.once("drain", () => {
|
|
762
|
+
waitingDrain = false;
|
|
763
|
+
pull();
|
|
764
|
+
});
|
|
765
|
+
return;
|
|
766
|
+
}
|
|
501
767
|
}
|
|
502
768
|
};
|
|
503
769
|
this.on("data-available", pull);
|
|
@@ -520,11 +786,7 @@ function createParseClass(createInflateRawFn) {
|
|
|
520
786
|
return Promise.reject(new Error("FILE_ENDED"));
|
|
521
787
|
}
|
|
522
788
|
if (this._buffer.length >= eof) {
|
|
523
|
-
|
|
524
|
-
if (this._buffer.length === 0) {
|
|
525
|
-
this._maybeReleaseWriteCallback();
|
|
526
|
-
}
|
|
527
|
-
return Promise.resolve(data);
|
|
789
|
+
return Promise.resolve(this._buffer.read(eof));
|
|
528
790
|
}
|
|
529
791
|
return this._pullInternal(eof);
|
|
530
792
|
}
|
|
@@ -538,16 +800,20 @@ function createParseClass(createInflateRawFn) {
|
|
|
538
800
|
return this.pull(pattern, includeEof);
|
|
539
801
|
}
|
|
540
802
|
_streamUntilDataDescriptor() {
|
|
541
|
-
return (0,
|
|
803
|
+
return (0, stream_base_1.streamUntilValidatedDataDescriptor)({
|
|
542
804
|
source: {
|
|
543
|
-
getView: () => this._buffer.view(),
|
|
544
805
|
getLength: () => this._buffer.length,
|
|
545
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),
|
|
546
811
|
isFinished: () => this.finished,
|
|
547
812
|
onDataAvailable: (cb) => {
|
|
548
813
|
this.on("data-available", cb);
|
|
549
814
|
return () => this.removeListener("data-available", cb);
|
|
550
|
-
}
|
|
815
|
+
},
|
|
816
|
+
maybeReleaseWriteCallback: () => this._maybeReleaseWriteCallback()
|
|
551
817
|
},
|
|
552
818
|
dataDescriptorSignature
|
|
553
819
|
});
|