@cj-tech-master/excelts 1.6.3 → 2.0.0-canary.20251228013952.4f2c3c6
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/README.md +139 -24
- package/README_zh.md +140 -26
- package/dist/browser/excelts.esm.js +18468 -0
- package/dist/browser/excelts.esm.js.map +1 -0
- package/dist/browser/excelts.esm.min.js +125 -0
- package/dist/browser/excelts.iife.js +13107 -47146
- package/dist/browser/excelts.iife.js.map +1 -1
- package/dist/browser/excelts.iife.min.js +24 -106
- package/dist/cjs/csv/csv-core.js +701 -0
- package/dist/cjs/csv/csv-stream.js +646 -0
- package/dist/cjs/csv/csv.base.js +137 -0
- package/dist/cjs/csv/csv.browser.js +68 -0
- package/dist/cjs/csv/csv.js +218 -162
- package/dist/cjs/doc/anchor.js +2 -2
- package/dist/cjs/doc/cell.js +22 -22
- package/dist/cjs/doc/column.js +28 -7
- package/dist/cjs/doc/data-validations.js +3 -3
- package/dist/cjs/doc/defined-names.js +13 -13
- package/dist/cjs/doc/image.js +7 -7
- package/dist/cjs/doc/modelcontainer.js +2 -2
- package/dist/cjs/doc/note.js +2 -2
- package/dist/cjs/doc/pivot-table.js +5 -5
- package/dist/cjs/doc/range.js +11 -11
- package/dist/cjs/doc/row.js +16 -16
- package/dist/cjs/doc/table.js +5 -5
- package/dist/cjs/doc/workbook.base.js +211 -0
- package/dist/cjs/doc/workbook.browser.js +62 -0
- package/dist/cjs/doc/workbook.js +68 -179
- package/dist/cjs/doc/worksheet.js +45 -41
- package/dist/cjs/index.js +49 -32
- package/dist/cjs/stream/xlsx/hyperlink-reader.js +6 -6
- package/dist/cjs/stream/xlsx/sheet-comments-writer.js +12 -12
- package/dist/cjs/stream/xlsx/sheet-rels-writer.js +4 -4
- package/dist/cjs/stream/xlsx/workbook-reader.js +22 -22
- package/dist/cjs/stream/xlsx/workbook-writer.js +38 -38
- package/dist/cjs/stream/xlsx/worksheet-reader.js +17 -17
- package/dist/cjs/stream/xlsx/worksheet-writer.js +67 -60
- package/dist/cjs/utils/browser-buffer.js +75 -0
- package/dist/cjs/utils/cell-format.js +2 -2
- package/dist/cjs/utils/cell-matrix.js +5 -5
- package/dist/cjs/utils/datetime.js +499 -0
- package/dist/cjs/utils/encryptor.browser.js +240 -0
- package/dist/cjs/utils/parse-sax.js +1191 -13
- package/dist/cjs/utils/shared-formula.js +5 -5
- package/dist/cjs/utils/sheet-utils.js +13 -13
- package/dist/cjs/utils/stream-buf.browser.js +355 -0
- package/dist/cjs/utils/stream-buf.js +5 -5
- package/dist/cjs/utils/unzip/extract.js +11 -11
- package/dist/cjs/utils/unzip/index.js +21 -21
- package/dist/cjs/utils/unzip/parse-extra-field.js +3 -3
- package/dist/cjs/utils/unzip/parse.js +16 -16
- package/dist/cjs/utils/unzip/zip-parser.js +14 -3
- package/dist/cjs/utils/utils.base.js +161 -0
- package/dist/cjs/utils/utils.browser.js +89 -0
- package/dist/cjs/utils/utils.js +46 -154
- package/dist/cjs/utils/xml-stream.js +3 -3
- package/dist/cjs/utils/zip/compress.base.js +88 -0
- package/dist/cjs/utils/zip/compress.browser.js +127 -0
- package/dist/cjs/utils/zip/compress.js +18 -198
- package/dist/cjs/utils/zip/crc32.browser.js +88 -0
- package/dist/cjs/utils/zip/deflate-fallback.js +575 -0
- package/dist/cjs/utils/zip/index.js +17 -17
- package/dist/cjs/utils/zip/streaming-zip.js +264 -0
- package/dist/cjs/utils/zip/zip-builder.js +10 -10
- package/dist/cjs/utils/zip-stream.browser.js +135 -0
- package/dist/cjs/utils/zip-stream.js +4 -4
- package/dist/cjs/xlsx/xform/base-xform.js +4 -4
- package/dist/cjs/xlsx/xform/book/defined-name-xform.js +4 -4
- package/dist/cjs/xlsx/xform/book/sheet-xform.js +4 -4
- package/dist/cjs/xlsx/xform/book/workbook-calc-properties-xform.js +2 -2
- package/dist/cjs/xlsx/xform/book/workbook-pivot-cache-xform.js +2 -2
- package/dist/cjs/xlsx/xform/book/workbook-properties-xform.js +2 -2
- package/dist/cjs/xlsx/xform/book/workbook-view-xform.js +2 -2
- package/dist/cjs/xlsx/xform/book/workbook-xform.js +24 -24
- package/dist/cjs/xlsx/xform/comment/comment-xform.js +4 -4
- package/dist/cjs/xlsx/xform/comment/comments-xform.js +6 -6
- package/dist/cjs/xlsx/xform/comment/style/vml-position-xform.js +2 -2
- package/dist/cjs/xlsx/xform/comment/style/vml-protection-xform.js +2 -2
- package/dist/cjs/xlsx/xform/comment/vml-anchor-xform.js +2 -2
- package/dist/cjs/xlsx/xform/comment/vml-client-data-xform.js +10 -10
- package/dist/cjs/xlsx/xform/comment/vml-notes-xform.js +6 -6
- package/dist/cjs/xlsx/xform/comment/vml-shape-xform.js +6 -6
- package/dist/cjs/xlsx/xform/comment/vml-textbox-xform.js +2 -2
- package/dist/cjs/xlsx/xform/composite-xform.js +2 -2
- package/dist/cjs/xlsx/xform/core/app-heading-pairs-xform.js +2 -2
- package/dist/cjs/xlsx/xform/core/app-titles-of-parts-xform.js +2 -2
- package/dist/cjs/xlsx/xform/core/app-xform.js +11 -11
- package/dist/cjs/xlsx/xform/core/content-types-xform.js +4 -4
- package/dist/cjs/xlsx/xform/core/core-xform.js +23 -23
- package/dist/cjs/xlsx/xform/core/relationship-xform.js +2 -2
- package/dist/cjs/xlsx/xform/core/relationships-xform.js +6 -6
- package/dist/cjs/xlsx/xform/drawing/base-cell-anchor-xform.js +2 -2
- package/dist/cjs/xlsx/xform/drawing/blip-fill-xform.js +4 -4
- package/dist/cjs/xlsx/xform/drawing/blip-xform.js +2 -2
- package/dist/cjs/xlsx/xform/drawing/c-nv-pic-pr-xform.js +2 -2
- package/dist/cjs/xlsx/xform/drawing/c-nv-pr-xform.js +6 -6
- package/dist/cjs/xlsx/xform/drawing/cell-position-xform.js +7 -7
- package/dist/cjs/xlsx/xform/drawing/drawing-xform.js +10 -10
- package/dist/cjs/xlsx/xform/drawing/ext-lst-xform.js +2 -2
- package/dist/cjs/xlsx/xform/drawing/ext-xform.js +2 -2
- package/dist/cjs/xlsx/xform/drawing/hlink-click-xform.js +2 -2
- package/dist/cjs/xlsx/xform/drawing/nv-pic-pr-xform.js +6 -6
- package/dist/cjs/xlsx/xform/drawing/one-cell-anchor-xform.js +10 -10
- package/dist/cjs/xlsx/xform/drawing/pic-xform.js +9 -9
- package/dist/cjs/xlsx/xform/drawing/two-cell-anchor-xform.js +9 -9
- package/dist/cjs/xlsx/xform/list-xform.js +2 -2
- package/dist/cjs/xlsx/xform/pivot-table/cache-field-xform.js +5 -5
- package/dist/cjs/xlsx/xform/pivot-table/cache-field.js +3 -3
- package/dist/cjs/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +10 -10
- package/dist/cjs/xlsx/xform/pivot-table/pivot-cache-records-xform.js +9 -9
- package/dist/cjs/xlsx/xform/pivot-table/pivot-table-xform.js +10 -11
- package/dist/cjs/xlsx/xform/sheet/auto-filter-xform.js +4 -4
- package/dist/cjs/xlsx/xform/sheet/cell-xform.js +65 -65
- package/dist/cjs/xlsx/xform/sheet/cf/cf-rule-xform.js +27 -27
- package/dist/cjs/xlsx/xform/sheet/cf/cfvo-xform.js +3 -3
- package/dist/cjs/xlsx/xform/sheet/cf/color-scale-xform.js +6 -6
- package/dist/cjs/xlsx/xform/sheet/cf/conditional-formatting-xform.js +6 -6
- package/dist/cjs/xlsx/xform/sheet/cf/conditional-formattings-xform.js +4 -4
- package/dist/cjs/xlsx/xform/sheet/cf/databar-xform.js +6 -6
- package/dist/cjs/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +5 -5
- package/dist/cjs/xlsx/xform/sheet/cf/formula-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/cf/icon-set-xform.js +11 -11
- package/dist/cjs/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +3 -3
- package/dist/cjs/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +11 -12
- package/dist/cjs/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +4 -4
- package/dist/cjs/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +8 -8
- package/dist/cjs/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +6 -6
- package/dist/cjs/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +26 -26
- package/dist/cjs/xlsx/xform/sheet/cf-ext/f-ext-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +14 -14
- package/dist/cjs/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/col-breaks-xform.js +38 -0
- package/dist/cjs/xlsx/xform/sheet/col-xform.js +6 -6
- package/dist/cjs/xlsx/xform/sheet/data-validations-xform.js +18 -18
- package/dist/cjs/xlsx/xform/sheet/dimension-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/drawing-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/ext-lst-xform.js +5 -5
- package/dist/cjs/xlsx/xform/sheet/header-footer-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/hyperlink-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/merge-cell-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/merges.js +8 -8
- package/dist/cjs/xlsx/xform/sheet/outline-properties-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/page-breaks-xform.js +15 -3
- package/dist/cjs/xlsx/xform/sheet/page-margins-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/page-setup-properties-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/page-setup-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/picture-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/print-options-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/row-breaks-xform.js +15 -17
- package/dist/cjs/xlsx/xform/sheet/row-xform.js +11 -11
- package/dist/cjs/xlsx/xform/sheet/sheet-format-properties-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/sheet-properties-xform.js +8 -8
- package/dist/cjs/xlsx/xform/sheet/sheet-protection-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/sheet-view-xform.js +4 -4
- package/dist/cjs/xlsx/xform/sheet/table-part-xform.js +2 -2
- package/dist/cjs/xlsx/xform/sheet/worksheet-xform.js +75 -70
- package/dist/cjs/xlsx/xform/simple/boolean-xform.js +2 -2
- package/dist/cjs/xlsx/xform/simple/date-xform.js +2 -2
- package/dist/cjs/xlsx/xform/simple/float-xform.js +2 -2
- package/dist/cjs/xlsx/xform/simple/integer-xform.js +2 -2
- package/dist/cjs/xlsx/xform/simple/string-xform.js +2 -2
- package/dist/cjs/xlsx/xform/static-xform.js +4 -4
- package/dist/cjs/xlsx/xform/strings/phonetic-text-xform.js +6 -6
- package/dist/cjs/xlsx/xform/strings/rich-text-xform.js +6 -6
- package/dist/cjs/xlsx/xform/strings/shared-string-xform.js +8 -8
- package/dist/cjs/xlsx/xform/strings/shared-strings-xform.js +6 -6
- package/dist/cjs/xlsx/xform/strings/text-xform.js +2 -2
- package/dist/cjs/xlsx/xform/style/alignment-xform.js +8 -8
- package/dist/cjs/xlsx/xform/style/border-xform.js +8 -8
- package/dist/cjs/xlsx/xform/style/color-xform.js +2 -2
- package/dist/cjs/xlsx/xform/style/dxf-xform.js +14 -14
- package/dist/cjs/xlsx/xform/style/fill-xform.js +9 -9
- package/dist/cjs/xlsx/xform/style/font-xform.js +22 -22
- package/dist/cjs/xlsx/xform/style/numfmt-xform.js +5 -5
- package/dist/cjs/xlsx/xform/style/protection-xform.js +2 -2
- package/dist/cjs/xlsx/xform/style/style-xform.js +6 -6
- package/dist/cjs/xlsx/xform/style/styles-xform.js +39 -39
- package/dist/cjs/xlsx/xform/style/underline-xform.js +2 -2
- package/dist/cjs/xlsx/xform/table/auto-filter-xform.js +4 -4
- package/dist/cjs/xlsx/xform/table/custom-filter-xform.js +2 -2
- package/dist/cjs/xlsx/xform/table/filter-column-xform.js +9 -9
- package/dist/cjs/xlsx/xform/table/filter-xform.js +2 -2
- package/dist/cjs/xlsx/xform/table/table-column-xform.js +2 -2
- package/dist/cjs/xlsx/xform/table/table-style-info-xform.js +2 -2
- package/dist/cjs/xlsx/xform/table/table-xform.js +12 -12
- package/dist/cjs/xlsx/xlsx.base.js +742 -0
- package/dist/cjs/xlsx/xlsx.browser.js +162 -0
- package/dist/cjs/xlsx/xlsx.js +118 -892
- package/dist/esm/csv/csv-core.js +694 -0
- package/dist/esm/csv/csv-stream.js +638 -0
- package/dist/esm/csv/csv.base.js +127 -0
- package/dist/esm/csv/csv.browser.js +65 -0
- package/dist/esm/csv/csv.js +181 -159
- package/dist/esm/doc/column.js +21 -0
- package/dist/esm/doc/workbook.base.js +207 -0
- package/dist/esm/doc/workbook.browser.js +59 -0
- package/dist/esm/doc/workbook.js +64 -175
- package/dist/esm/doc/worksheet.js +4 -0
- package/dist/esm/index.browser.js +33 -1
- package/dist/esm/index.js +23 -8
- package/dist/esm/local.js +0 -1
- package/dist/esm/stream/xlsx/workbook-writer.js +1 -1
- package/dist/esm/stream/xlsx/worksheet-writer.js +8 -1
- package/dist/esm/utils/browser-buffer.js +67 -0
- package/dist/esm/utils/datetime.js +493 -0
- package/dist/esm/utils/encryptor.browser.js +237 -0
- package/dist/esm/utils/parse-sax.js +1188 -12
- package/dist/esm/utils/stream-buf.browser.js +352 -0
- package/dist/esm/utils/unzip/zip-parser.js +11 -0
- package/dist/esm/utils/utils.base.js +142 -0
- package/dist/esm/utils/utils.browser.js +68 -0
- package/dist/esm/utils/utils.js +15 -123
- package/dist/esm/utils/zip/compress.base.js +83 -0
- package/dist/esm/utils/zip/compress.browser.js +121 -0
- package/dist/esm/utils/zip/compress.js +16 -164
- package/dist/esm/utils/zip/crc32.browser.js +82 -0
- package/dist/esm/utils/zip/deflate-fallback.js +570 -0
- package/dist/esm/utils/zip/streaming-zip.js +259 -0
- package/dist/esm/utils/zip-stream.browser.js +132 -0
- package/dist/esm/xlsx/xform/pivot-table/pivot-table-xform.js +2 -3
- package/dist/esm/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +2 -3
- package/dist/esm/xlsx/xform/sheet/col-breaks-xform.js +35 -0
- package/dist/esm/xlsx/xform/sheet/page-breaks-xform.js +13 -1
- package/dist/esm/xlsx/xform/sheet/row-breaks-xform.js +11 -13
- package/dist/esm/xlsx/xform/sheet/worksheet-xform.js +7 -2
- package/dist/esm/xlsx/xlsx.base.js +739 -0
- package/dist/esm/xlsx/xlsx.browser.js +159 -0
- package/dist/esm/xlsx/xlsx.js +114 -888
- package/dist/types/csv/csv-core.d.ts +207 -0
- package/dist/types/csv/csv-stream.d.ts +114 -0
- package/dist/types/csv/csv.base.d.ts +62 -0
- package/dist/types/csv/csv.browser.d.ts +33 -0
- package/dist/types/csv/csv.d.ts +97 -71
- package/dist/types/doc/anchor.d.ts +1 -1
- package/dist/types/doc/cell.d.ts +7 -7
- package/dist/types/doc/column.d.ts +9 -3
- package/dist/types/doc/defined-names.d.ts +4 -4
- package/dist/types/doc/image.d.ts +2 -2
- package/dist/types/doc/modelcontainer.d.ts +1 -1
- package/dist/types/doc/pivot-table.d.ts +1 -1
- package/dist/types/doc/range.d.ts +1 -1
- package/dist/types/doc/row.d.ts +3 -3
- package/dist/types/doc/table.d.ts +2 -2
- package/dist/types/doc/workbook.base.d.ts +111 -0
- package/dist/types/doc/workbook.browser.d.ts +38 -0
- package/dist/types/doc/workbook.d.ts +62 -92
- package/dist/types/doc/worksheet.d.ts +12 -10
- package/dist/types/index.browser.d.ts +19 -5
- package/dist/types/index.d.ts +24 -23
- package/dist/types/local.d.ts +0 -1
- package/dist/types/stream/xlsx/hyperlink-reader.d.ts +1 -1
- package/dist/types/stream/xlsx/workbook-reader.d.ts +4 -4
- package/dist/types/stream/xlsx/workbook-writer.d.ts +7 -7
- package/dist/types/stream/xlsx/worksheet-reader.d.ts +5 -5
- package/dist/types/stream/xlsx/worksheet-writer.d.ts +11 -9
- package/dist/types/types.d.ts +6 -0
- package/dist/types/utils/browser-buffer.d.ts +28 -0
- package/dist/types/utils/col-cache.d.ts +1 -1
- package/dist/types/utils/datetime.d.ts +56 -0
- package/dist/types/utils/encryptor.browser.d.ts +28 -0
- package/dist/types/utils/parse-sax.d.ts +108 -1
- package/dist/types/utils/sheet-utils.d.ts +3 -3
- package/dist/types/utils/stream-buf.browser.d.ts +41 -0
- package/dist/types/utils/unzip/extract.d.ts +6 -6
- package/dist/types/utils/unzip/index.d.ts +8 -8
- package/dist/types/utils/unzip/parse.d.ts +3 -3
- package/dist/types/utils/unzip/zip-parser.d.ts +5 -0
- package/dist/types/utils/utils.base.d.ts +29 -0
- package/dist/types/utils/utils.browser.d.ts +29 -0
- package/dist/types/utils/utils.d.ts +6 -25
- package/dist/types/utils/zip/compress.base.d.ts +45 -0
- package/dist/types/utils/zip/compress.browser.d.ts +63 -0
- package/dist/types/utils/zip/compress.d.ts +13 -45
- package/dist/types/utils/zip/crc32.browser.d.ts +52 -0
- package/dist/types/utils/zip/deflate-fallback.d.ts +39 -0
- package/dist/types/utils/zip/index.d.ts +5 -5
- package/dist/types/utils/zip/streaming-zip.d.ts +96 -0
- package/dist/types/utils/zip/zip-builder.d.ts +1 -1
- package/dist/types/utils/zip-stream.browser.d.ts +39 -0
- package/dist/types/xlsx/xform/base-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/book/defined-name-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/book/sheet-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/book/workbook-calc-properties-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/book/workbook-pivot-cache-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/book/workbook-properties-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/book/workbook-view-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/book/workbook-xform.d.ts +2 -2
- package/dist/types/xlsx/xform/comment/comment-xform.d.ts +2 -2
- package/dist/types/xlsx/xform/comment/comments-xform.d.ts +2 -2
- package/dist/types/xlsx/xform/comment/style/vml-position-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/comment/style/vml-protection-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/comment/vml-anchor-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/comment/vml-client-data-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/comment/vml-notes-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/comment/vml-shape-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/comment/vml-textbox-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/composite-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/core/app-heading-pairs-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/core/app-titles-of-parts-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/core/app-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/core/content-types-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/core/core-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/core/relationship-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/core/relationships-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/drawing/base-cell-anchor-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/drawing/blip-fill-xform.d.ts +2 -2
- package/dist/types/xlsx/xform/drawing/blip-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/drawing/c-nv-pic-pr-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/drawing/c-nv-pr-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/drawing/cell-position-xform.d.ts +2 -2
- package/dist/types/xlsx/xform/drawing/drawing-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/drawing/ext-lst-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/drawing/ext-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/drawing/hlink-click-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/drawing/nv-pic-pr-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/drawing/one-cell-anchor-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/drawing/pic-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/drawing/two-cell-anchor-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/list-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/pivot-table/cache-field-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/pivot-table/pivot-cache-definition-xform.d.ts +3 -3
- package/dist/types/xlsx/xform/pivot-table/pivot-cache-records-xform.d.ts +2 -2
- package/dist/types/xlsx/xform/pivot-table/pivot-table-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/auto-filter-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/cell-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/cf/cf-rule-xform.d.ts +6 -6
- package/dist/types/xlsx/xform/sheet/cf/cfvo-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/cf/color-scale-xform.d.ts +3 -3
- package/dist/types/xlsx/xform/sheet/cf/conditional-formatting-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/cf/conditional-formattings-xform.d.ts +2 -2
- package/dist/types/xlsx/xform/sheet/cf/databar-xform.d.ts +3 -3
- package/dist/types/xlsx/xform/sheet/cf/ext-lst-ref-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/cf/formula-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/cf/icon-set-xform.d.ts +2 -2
- package/dist/types/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.d.ts +3 -3
- package/dist/types/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.d.ts +2 -2
- package/dist/types/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.d.ts +3 -3
- package/dist/types/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.d.ts +2 -2
- package/dist/types/xlsx/xform/sheet/cf-ext/databar-ext-xform.d.ts +3 -3
- package/dist/types/xlsx/xform/sheet/cf-ext/f-ext-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.d.ts +3 -3
- package/dist/types/xlsx/xform/sheet/cf-ext/sqref-ext-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/col-breaks-xform.d.ts +16 -0
- package/dist/types/xlsx/xform/sheet/col-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/data-validations-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/dimension-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/drawing-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/ext-lst-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/header-footer-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/hyperlink-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/merge-cell-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/outline-properties-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/page-breaks-xform.d.ts +5 -1
- package/dist/types/xlsx/xform/sheet/page-margins-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/page-setup-properties-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/page-setup-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/picture-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/print-options-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/row-breaks-xform.d.ts +5 -1
- package/dist/types/xlsx/xform/sheet/row-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/sheet-format-properties-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/sheet-properties-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/sheet-protection-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/sheet-view-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/table-part-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/sheet/worksheet-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/simple/boolean-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/simple/date-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/simple/float-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/simple/integer-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/simple/string-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/static-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/strings/phonetic-text-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/strings/rich-text-xform.d.ts +3 -3
- package/dist/types/xlsx/xform/strings/shared-string-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/strings/shared-strings-xform.d.ts +2 -2
- package/dist/types/xlsx/xform/strings/text-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/style/alignment-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/style/border-xform.d.ts +2 -2
- package/dist/types/xlsx/xform/style/color-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/style/dxf-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/style/fill-xform.d.ts +2 -2
- package/dist/types/xlsx/xform/style/font-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/style/numfmt-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/style/protection-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/style/style-xform.d.ts +3 -3
- package/dist/types/xlsx/xform/style/styles-xform.d.ts +2 -2
- package/dist/types/xlsx/xform/style/underline-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/table/auto-filter-xform.d.ts +2 -2
- package/dist/types/xlsx/xform/table/custom-filter-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/table/filter-column-xform.d.ts +2 -2
- package/dist/types/xlsx/xform/table/filter-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/table/table-column-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/table/table-style-info-xform.d.ts +1 -1
- package/dist/types/xlsx/xform/table/table-xform.d.ts +1 -1
- package/dist/types/xlsx/xlsx.base.d.ts +134 -0
- package/dist/types/xlsx/xlsx.browser.d.ts +31 -0
- package/dist/types/xlsx/xlsx.d.ts +20 -80
- package/package.json +16 -39
|
@@ -0,0 +1,575 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Pure JavaScript DEFLATE implementation for browsers without CompressionStream support
|
|
4
|
+
*
|
|
5
|
+
* This fallback supports:
|
|
6
|
+
* - Decompression: Full DEFLATE decompression (RFC 1951)
|
|
7
|
+
* - Compression: STORE mode only (no compression, but valid DEFLATE format)
|
|
8
|
+
*
|
|
9
|
+
* Used automatically when CompressionStream with "deflate-raw" is unavailable:
|
|
10
|
+
* - Firefox < 113
|
|
11
|
+
* - Safari < 16.4
|
|
12
|
+
* - Chrome < 103
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.inflateRaw = inflateRaw;
|
|
16
|
+
exports.deflateRawStore = deflateRawStore;
|
|
17
|
+
exports.deflateRawCompressed = deflateRawCompressed;
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// DEFLATE Decompression (Full implementation)
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Fixed Huffman code lengths for literals/lengths (RFC 1951)
|
|
22
|
+
const FIXED_LITERAL_LENGTHS = new Uint8Array(288);
|
|
23
|
+
for (let i = 0; i <= 143; i++) {
|
|
24
|
+
FIXED_LITERAL_LENGTHS[i] = 8;
|
|
25
|
+
}
|
|
26
|
+
for (let i = 144; i <= 255; i++) {
|
|
27
|
+
FIXED_LITERAL_LENGTHS[i] = 9;
|
|
28
|
+
}
|
|
29
|
+
for (let i = 256; i <= 279; i++) {
|
|
30
|
+
FIXED_LITERAL_LENGTHS[i] = 7;
|
|
31
|
+
}
|
|
32
|
+
for (let i = 280; i <= 287; i++) {
|
|
33
|
+
FIXED_LITERAL_LENGTHS[i] = 8;
|
|
34
|
+
}
|
|
35
|
+
// Fixed Huffman code lengths for distances
|
|
36
|
+
const FIXED_DISTANCE_LENGTHS = new Uint8Array(32).fill(5);
|
|
37
|
+
// Length base values and extra bits (codes 257-285)
|
|
38
|
+
const LENGTH_BASE = [
|
|
39
|
+
3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131,
|
|
40
|
+
163, 195, 227, 258
|
|
41
|
+
];
|
|
42
|
+
const LENGTH_EXTRA = [
|
|
43
|
+
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0
|
|
44
|
+
];
|
|
45
|
+
// Distance base values and extra bits (codes 0-29)
|
|
46
|
+
const DISTANCE_BASE = [
|
|
47
|
+
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049,
|
|
48
|
+
3073, 4097, 6145, 8193, 12289, 16385, 24577
|
|
49
|
+
];
|
|
50
|
+
const DISTANCE_EXTRA = [
|
|
51
|
+
0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13
|
|
52
|
+
];
|
|
53
|
+
// Code length order for dynamic Huffman tables
|
|
54
|
+
const CODE_LENGTH_ORDER = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
|
|
55
|
+
/**
|
|
56
|
+
* Build Huffman tree from code lengths
|
|
57
|
+
*/
|
|
58
|
+
function buildHuffmanTree(lengths, maxSymbol) {
|
|
59
|
+
// Count codes of each length
|
|
60
|
+
const blCount = new Uint16Array(16);
|
|
61
|
+
for (let i = 0; i < maxSymbol; i++) {
|
|
62
|
+
if (lengths[i] > 0) {
|
|
63
|
+
blCount[lengths[i]]++;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Find first code value for each length
|
|
67
|
+
const nextCode = new Uint16Array(16);
|
|
68
|
+
let code = 0;
|
|
69
|
+
for (let bits = 1; bits <= 15; bits++) {
|
|
70
|
+
code = (code + blCount[bits - 1]) << 1;
|
|
71
|
+
nextCode[bits] = code;
|
|
72
|
+
}
|
|
73
|
+
// Build tree
|
|
74
|
+
const root = {};
|
|
75
|
+
for (let symbol = 0; symbol < maxSymbol; symbol++) {
|
|
76
|
+
const len = lengths[symbol];
|
|
77
|
+
if (len === 0) {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
code = nextCode[len]++;
|
|
81
|
+
let node = root;
|
|
82
|
+
for (let bit = len - 1; bit >= 0; bit--) {
|
|
83
|
+
const b = (code >> bit) & 1;
|
|
84
|
+
if (b === 0) {
|
|
85
|
+
if (!node.left) {
|
|
86
|
+
node.left = {};
|
|
87
|
+
}
|
|
88
|
+
node = node.left;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
if (!node.right) {
|
|
92
|
+
node.right = {};
|
|
93
|
+
}
|
|
94
|
+
node = node.right;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
node.symbol = symbol;
|
|
98
|
+
}
|
|
99
|
+
return root;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Bit reader for DEFLATE streams
|
|
103
|
+
*/
|
|
104
|
+
class BitReader {
|
|
105
|
+
constructor(data) {
|
|
106
|
+
this.data = data;
|
|
107
|
+
this.pos = 0;
|
|
108
|
+
this.bitBuf = 0;
|
|
109
|
+
this.bitCount = 0;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Read n bits (LSB first)
|
|
113
|
+
*/
|
|
114
|
+
readBits(n) {
|
|
115
|
+
while (this.bitCount < n) {
|
|
116
|
+
if (this.pos >= this.data.length) {
|
|
117
|
+
throw new Error("Unexpected end of DEFLATE data");
|
|
118
|
+
}
|
|
119
|
+
this.bitBuf |= this.data[this.pos++] << this.bitCount;
|
|
120
|
+
this.bitCount += 8;
|
|
121
|
+
}
|
|
122
|
+
const result = this.bitBuf & ((1 << n) - 1);
|
|
123
|
+
this.bitBuf >>= n;
|
|
124
|
+
this.bitCount -= n;
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Decode a symbol using Huffman tree
|
|
129
|
+
*/
|
|
130
|
+
decodeSymbol(tree) {
|
|
131
|
+
let node = tree;
|
|
132
|
+
while (node.symbol === undefined) {
|
|
133
|
+
const bit = this.readBits(1);
|
|
134
|
+
node = bit === 0 ? node.left : node.right;
|
|
135
|
+
if (!node) {
|
|
136
|
+
throw new Error("Invalid Huffman code");
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return node.symbol;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Align to byte boundary
|
|
143
|
+
*/
|
|
144
|
+
alignToByte() {
|
|
145
|
+
this.bitBuf = 0;
|
|
146
|
+
this.bitCount = 0;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Read a byte directly (must be aligned)
|
|
150
|
+
*/
|
|
151
|
+
readByte() {
|
|
152
|
+
if (this.pos >= this.data.length) {
|
|
153
|
+
throw new Error("Unexpected end of data");
|
|
154
|
+
}
|
|
155
|
+
return this.data[this.pos++];
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Read 16-bit little-endian value (must be aligned)
|
|
159
|
+
*/
|
|
160
|
+
readUint16() {
|
|
161
|
+
return this.readByte() | (this.readByte() << 8);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Decompress DEFLATE data (raw format, no zlib header)
|
|
166
|
+
*
|
|
167
|
+
* @param data - Compressed data in deflate-raw format
|
|
168
|
+
* @returns Decompressed data
|
|
169
|
+
*/
|
|
170
|
+
function inflateRaw(data) {
|
|
171
|
+
const reader = new BitReader(data);
|
|
172
|
+
const output = [];
|
|
173
|
+
let isFinal = false;
|
|
174
|
+
while (!isFinal) {
|
|
175
|
+
isFinal = reader.readBits(1) === 1;
|
|
176
|
+
const blockType = reader.readBits(2);
|
|
177
|
+
if (blockType === 0) {
|
|
178
|
+
// Stored block (no compression)
|
|
179
|
+
reader.alignToByte();
|
|
180
|
+
const len = reader.readUint16();
|
|
181
|
+
const nlen = reader.readUint16();
|
|
182
|
+
if ((len ^ nlen) !== 0xffff) {
|
|
183
|
+
throw new Error("Invalid stored block length");
|
|
184
|
+
}
|
|
185
|
+
for (let i = 0; i < len; i++) {
|
|
186
|
+
output.push(reader.readByte());
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
else if (blockType === 1 || blockType === 2) {
|
|
190
|
+
// Compressed block
|
|
191
|
+
let literalTree;
|
|
192
|
+
let distanceTree;
|
|
193
|
+
if (blockType === 1) {
|
|
194
|
+
// Fixed Huffman codes
|
|
195
|
+
literalTree = buildHuffmanTree(FIXED_LITERAL_LENGTHS, 288);
|
|
196
|
+
distanceTree = buildHuffmanTree(FIXED_DISTANCE_LENGTHS, 32);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
// Dynamic Huffman codes
|
|
200
|
+
const hlit = reader.readBits(5) + 257;
|
|
201
|
+
const hdist = reader.readBits(5) + 1;
|
|
202
|
+
const hclen = reader.readBits(4) + 4;
|
|
203
|
+
// Read code length code lengths
|
|
204
|
+
const codeLengthLengths = new Uint8Array(19);
|
|
205
|
+
for (let i = 0; i < hclen; i++) {
|
|
206
|
+
codeLengthLengths[CODE_LENGTH_ORDER[i]] = reader.readBits(3);
|
|
207
|
+
}
|
|
208
|
+
const codeLengthTree = buildHuffmanTree(codeLengthLengths, 19);
|
|
209
|
+
// Decode literal/length and distance code lengths
|
|
210
|
+
const allLengths = new Uint8Array(hlit + hdist);
|
|
211
|
+
let i = 0;
|
|
212
|
+
while (i < hlit + hdist) {
|
|
213
|
+
const symbol = reader.decodeSymbol(codeLengthTree);
|
|
214
|
+
if (symbol < 16) {
|
|
215
|
+
allLengths[i++] = symbol;
|
|
216
|
+
}
|
|
217
|
+
else if (symbol === 16) {
|
|
218
|
+
// Copy previous length 3-6 times
|
|
219
|
+
const repeat = reader.readBits(2) + 3;
|
|
220
|
+
const prev = allLengths[i - 1];
|
|
221
|
+
for (let j = 0; j < repeat; j++) {
|
|
222
|
+
allLengths[i++] = prev;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
else if (symbol === 17) {
|
|
226
|
+
// Repeat 0 for 3-10 times
|
|
227
|
+
const repeat = reader.readBits(3) + 3;
|
|
228
|
+
for (let j = 0; j < repeat; j++) {
|
|
229
|
+
allLengths[i++] = 0;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
else if (symbol === 18) {
|
|
233
|
+
// Repeat 0 for 11-138 times
|
|
234
|
+
const repeat = reader.readBits(7) + 11;
|
|
235
|
+
for (let j = 0; j < repeat; j++) {
|
|
236
|
+
allLengths[i++] = 0;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
literalTree = buildHuffmanTree(allLengths.subarray(0, hlit), hlit);
|
|
241
|
+
distanceTree = buildHuffmanTree(allLengths.subarray(hlit), hdist);
|
|
242
|
+
}
|
|
243
|
+
// Decode compressed data
|
|
244
|
+
while (true) {
|
|
245
|
+
const symbol = reader.decodeSymbol(literalTree);
|
|
246
|
+
if (symbol < 256) {
|
|
247
|
+
// Literal byte
|
|
248
|
+
output.push(symbol);
|
|
249
|
+
}
|
|
250
|
+
else if (symbol === 256) {
|
|
251
|
+
// End of block
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
// Length/distance pair
|
|
256
|
+
const lengthCode = symbol - 257;
|
|
257
|
+
const length = LENGTH_BASE[lengthCode] + reader.readBits(LENGTH_EXTRA[lengthCode]);
|
|
258
|
+
const distCode = reader.decodeSymbol(distanceTree);
|
|
259
|
+
const distance = DISTANCE_BASE[distCode] + reader.readBits(DISTANCE_EXTRA[distCode]);
|
|
260
|
+
// Copy from output buffer
|
|
261
|
+
const start = output.length - distance;
|
|
262
|
+
for (let i = 0; i < length; i++) {
|
|
263
|
+
output.push(output[start + i]);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
throw new Error("Invalid DEFLATE block type: " + blockType);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return new Uint8Array(output);
|
|
273
|
+
}
|
|
274
|
+
// ============================================================================
|
|
275
|
+
// DEFLATE Compression (STORE mode only - no actual compression)
|
|
276
|
+
// ============================================================================
|
|
277
|
+
/**
|
|
278
|
+
* Compress data using DEFLATE STORE mode (no compression)
|
|
279
|
+
*
|
|
280
|
+
* This creates valid DEFLATE data but without actual compression.
|
|
281
|
+
* Files will be larger but this works on all browsers.
|
|
282
|
+
*
|
|
283
|
+
* @param data - Data to "compress"
|
|
284
|
+
* @returns DEFLATE-formatted data (stored, not compressed)
|
|
285
|
+
*/
|
|
286
|
+
function deflateRawStore(data) {
|
|
287
|
+
// Maximum stored block size is 65535 bytes
|
|
288
|
+
const MAX_BLOCK_SIZE = 65535;
|
|
289
|
+
const numBlocks = Math.ceil(data.length / MAX_BLOCK_SIZE) || 1;
|
|
290
|
+
// Calculate output size: 5 bytes header per block + data
|
|
291
|
+
const outputSize = numBlocks * 5 + data.length;
|
|
292
|
+
const output = new Uint8Array(outputSize);
|
|
293
|
+
let outPos = 0;
|
|
294
|
+
let inPos = 0;
|
|
295
|
+
for (let block = 0; block < numBlocks; block++) {
|
|
296
|
+
const isLast = block === numBlocks - 1;
|
|
297
|
+
const blockSize = Math.min(MAX_BLOCK_SIZE, data.length - inPos);
|
|
298
|
+
// Block header: BFINAL (1 bit) + BTYPE=00 (2 bits) = stored block
|
|
299
|
+
// Then align to byte boundary (5 bits padding)
|
|
300
|
+
output[outPos++] = isLast ? 0x01 : 0x00;
|
|
301
|
+
// LEN (16-bit little-endian)
|
|
302
|
+
output[outPos++] = blockSize & 0xff;
|
|
303
|
+
output[outPos++] = (blockSize >> 8) & 0xff;
|
|
304
|
+
// NLEN (one's complement of LEN)
|
|
305
|
+
output[outPos++] = ~blockSize & 0xff;
|
|
306
|
+
output[outPos++] = (~blockSize >> 8) & 0xff;
|
|
307
|
+
// Data
|
|
308
|
+
output.set(data.subarray(inPos, inPos + blockSize), outPos);
|
|
309
|
+
outPos += blockSize;
|
|
310
|
+
inPos += blockSize;
|
|
311
|
+
}
|
|
312
|
+
return output.subarray(0, outPos);
|
|
313
|
+
}
|
|
314
|
+
// ============================================================================
|
|
315
|
+
// LZ77 + Huffman Compression (Basic implementation)
|
|
316
|
+
// ============================================================================
|
|
317
|
+
/**
|
|
318
|
+
* Compress data using DEFLATE with fixed Huffman codes
|
|
319
|
+
*
|
|
320
|
+
* This provides real compression using LZ77 + fixed Huffman codes.
|
|
321
|
+
* Not as efficient as full DEFLATE but much better than STORE mode.
|
|
322
|
+
*
|
|
323
|
+
* @param data - Data to compress
|
|
324
|
+
* @returns Compressed data in deflate-raw format
|
|
325
|
+
*/
|
|
326
|
+
function deflateRawCompressed(data) {
|
|
327
|
+
if (data.length === 0) {
|
|
328
|
+
// Empty input: single final block with just end-of-block symbol
|
|
329
|
+
return new Uint8Array([0x03, 0x00]);
|
|
330
|
+
}
|
|
331
|
+
// For small data, use STORE mode
|
|
332
|
+
if (data.length < 100) {
|
|
333
|
+
return deflateRawStore(data);
|
|
334
|
+
}
|
|
335
|
+
const output = new BitWriter();
|
|
336
|
+
// Write final block header with fixed Huffman (BFINAL=1, BTYPE=01)
|
|
337
|
+
output.writeBits(1, 1); // BFINAL
|
|
338
|
+
output.writeBits(1, 2); // BTYPE = 01 (fixed Huffman)
|
|
339
|
+
// LZ77 compression with hash table
|
|
340
|
+
const hashTable = new Map();
|
|
341
|
+
let pos = 0;
|
|
342
|
+
while (pos < data.length) {
|
|
343
|
+
// Try to find a match
|
|
344
|
+
let bestLen = 0;
|
|
345
|
+
let bestDist = 0;
|
|
346
|
+
if (pos + 2 < data.length) {
|
|
347
|
+
const hash = (data[pos] << 16) | (data[pos + 1] << 8) | data[pos + 2];
|
|
348
|
+
const matchPos = hashTable.get(hash);
|
|
349
|
+
if (matchPos !== undefined && pos - matchPos <= 32768) {
|
|
350
|
+
const dist = pos - matchPos;
|
|
351
|
+
let len = 0;
|
|
352
|
+
const maxLen = Math.min(258, data.length - pos);
|
|
353
|
+
while (len < maxLen && data[matchPos + len] === data[pos + len]) {
|
|
354
|
+
len++;
|
|
355
|
+
}
|
|
356
|
+
if (len >= 3) {
|
|
357
|
+
bestLen = len;
|
|
358
|
+
bestDist = dist;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
// Update hash table
|
|
362
|
+
hashTable.set(hash, pos);
|
|
363
|
+
}
|
|
364
|
+
if (bestLen >= 3) {
|
|
365
|
+
// Write length/distance pair
|
|
366
|
+
writeLengthCode(output, bestLen);
|
|
367
|
+
writeDistanceCode(output, bestDist);
|
|
368
|
+
pos += bestLen;
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
// Write literal
|
|
372
|
+
writeLiteralCode(output, data[pos]);
|
|
373
|
+
pos++;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
// Write end-of-block symbol (256)
|
|
377
|
+
writeLiteralCode(output, 256);
|
|
378
|
+
return output.finish();
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Bit writer for DEFLATE output
|
|
382
|
+
*/
|
|
383
|
+
class BitWriter {
|
|
384
|
+
constructor() {
|
|
385
|
+
this.chunks = [];
|
|
386
|
+
this.buffer = [];
|
|
387
|
+
this.bitBuf = 0;
|
|
388
|
+
this.bitCount = 0;
|
|
389
|
+
}
|
|
390
|
+
writeBits(value, count) {
|
|
391
|
+
this.bitBuf |= value << this.bitCount;
|
|
392
|
+
this.bitCount += count;
|
|
393
|
+
while (this.bitCount >= 8) {
|
|
394
|
+
this.buffer.push(this.bitBuf & 0xff);
|
|
395
|
+
this.bitBuf >>= 8;
|
|
396
|
+
this.bitCount -= 8;
|
|
397
|
+
if (this.buffer.length >= 65536) {
|
|
398
|
+
this.chunks.push(new Uint8Array(this.buffer));
|
|
399
|
+
this.buffer = [];
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
writeBitsReverse(value, count) {
|
|
404
|
+
// Write bits in reverse order (MSB first, used for Huffman codes)
|
|
405
|
+
let reversed = 0;
|
|
406
|
+
for (let i = 0; i < count; i++) {
|
|
407
|
+
reversed = (reversed << 1) | ((value >> i) & 1);
|
|
408
|
+
}
|
|
409
|
+
this.writeBits(reversed, count);
|
|
410
|
+
}
|
|
411
|
+
finish() {
|
|
412
|
+
// Flush remaining bits
|
|
413
|
+
if (this.bitCount > 0) {
|
|
414
|
+
this.buffer.push(this.bitBuf & 0xff);
|
|
415
|
+
}
|
|
416
|
+
if (this.chunks.length === 0) {
|
|
417
|
+
return new Uint8Array(this.buffer);
|
|
418
|
+
}
|
|
419
|
+
this.chunks.push(new Uint8Array(this.buffer));
|
|
420
|
+
const totalLength = this.chunks.reduce((sum, chunk) => sum + chunk.length, 0);
|
|
421
|
+
const result = new Uint8Array(totalLength);
|
|
422
|
+
let offset = 0;
|
|
423
|
+
for (const chunk of this.chunks) {
|
|
424
|
+
result.set(chunk, offset);
|
|
425
|
+
offset += chunk.length;
|
|
426
|
+
}
|
|
427
|
+
return result;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
// Fixed Huffman code tables
|
|
431
|
+
const LITERAL_CODES = [];
|
|
432
|
+
const LITERAL_LENGTHS_TABLE = [];
|
|
433
|
+
// Build fixed literal/length Huffman codes
|
|
434
|
+
for (let i = 0; i <= 287; i++) {
|
|
435
|
+
let code;
|
|
436
|
+
let len;
|
|
437
|
+
if (i <= 143) {
|
|
438
|
+
// 00110000 - 10111111 (8 bits)
|
|
439
|
+
code = 0x30 + i;
|
|
440
|
+
len = 8;
|
|
441
|
+
}
|
|
442
|
+
else if (i <= 255) {
|
|
443
|
+
// 110010000 - 111111111 (9 bits)
|
|
444
|
+
code = 0x190 + (i - 144);
|
|
445
|
+
len = 9;
|
|
446
|
+
}
|
|
447
|
+
else if (i <= 279) {
|
|
448
|
+
// 0000000 - 0010111 (7 bits)
|
|
449
|
+
code = i - 256;
|
|
450
|
+
len = 7;
|
|
451
|
+
}
|
|
452
|
+
else {
|
|
453
|
+
// 11000000 - 11000111 (8 bits)
|
|
454
|
+
code = 0xc0 + (i - 280);
|
|
455
|
+
len = 8;
|
|
456
|
+
}
|
|
457
|
+
LITERAL_CODES[i] = [code, len];
|
|
458
|
+
LITERAL_LENGTHS_TABLE[i] = len;
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Write a literal or end-of-block symbol using fixed Huffman codes
|
|
462
|
+
*/
|
|
463
|
+
function writeLiteralCode(output, symbol) {
|
|
464
|
+
const [code, len] = LITERAL_CODES[symbol];
|
|
465
|
+
output.writeBitsReverse(code, len);
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Write a length code (257-285)
|
|
469
|
+
*/
|
|
470
|
+
function writeLengthCode(output, length) {
|
|
471
|
+
let code;
|
|
472
|
+
let extraBits;
|
|
473
|
+
let extraValue;
|
|
474
|
+
if (length <= 10) {
|
|
475
|
+
code = 257 + length - 3;
|
|
476
|
+
extraBits = 0;
|
|
477
|
+
extraValue = 0;
|
|
478
|
+
}
|
|
479
|
+
else if (length <= 18) {
|
|
480
|
+
const base = length - 11;
|
|
481
|
+
code = 265 + Math.floor(base / 2);
|
|
482
|
+
extraBits = 1;
|
|
483
|
+
extraValue = base % 2;
|
|
484
|
+
}
|
|
485
|
+
else if (length <= 34) {
|
|
486
|
+
const base = length - 19;
|
|
487
|
+
code = 269 + Math.floor(base / 4);
|
|
488
|
+
extraBits = 2;
|
|
489
|
+
extraValue = base % 4;
|
|
490
|
+
}
|
|
491
|
+
else if (length <= 66) {
|
|
492
|
+
const base = length - 35;
|
|
493
|
+
code = 273 + Math.floor(base / 8);
|
|
494
|
+
extraBits = 3;
|
|
495
|
+
extraValue = base % 8;
|
|
496
|
+
}
|
|
497
|
+
else if (length <= 130) {
|
|
498
|
+
const base = length - 67;
|
|
499
|
+
code = 277 + Math.floor(base / 16);
|
|
500
|
+
extraBits = 4;
|
|
501
|
+
extraValue = base % 16;
|
|
502
|
+
}
|
|
503
|
+
else if (length <= 257) {
|
|
504
|
+
const base = length - 131;
|
|
505
|
+
code = 281 + Math.floor(base / 32);
|
|
506
|
+
extraBits = 5;
|
|
507
|
+
extraValue = base % 32;
|
|
508
|
+
}
|
|
509
|
+
else {
|
|
510
|
+
code = 285;
|
|
511
|
+
extraBits = 0;
|
|
512
|
+
extraValue = 0;
|
|
513
|
+
}
|
|
514
|
+
writeLiteralCode(output, code);
|
|
515
|
+
if (extraBits > 0) {
|
|
516
|
+
output.writeBits(extraValue, extraBits);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* Write a distance code
|
|
521
|
+
*/
|
|
522
|
+
function writeDistanceCode(output, distance) {
|
|
523
|
+
// Distance code table from RFC 1951
|
|
524
|
+
// Each entry: [maxDistance, code, extraBits]
|
|
525
|
+
const DIST_TABLE = [
|
|
526
|
+
[1, 0, 0],
|
|
527
|
+
[2, 1, 0],
|
|
528
|
+
[3, 2, 0],
|
|
529
|
+
[4, 3, 0],
|
|
530
|
+
[6, 4, 1],
|
|
531
|
+
[8, 5, 1],
|
|
532
|
+
[12, 6, 2],
|
|
533
|
+
[16, 7, 2],
|
|
534
|
+
[24, 8, 3],
|
|
535
|
+
[32, 9, 3],
|
|
536
|
+
[48, 10, 4],
|
|
537
|
+
[64, 11, 4],
|
|
538
|
+
[96, 12, 5],
|
|
539
|
+
[128, 13, 5],
|
|
540
|
+
[192, 14, 6],
|
|
541
|
+
[256, 15, 6],
|
|
542
|
+
[384, 16, 7],
|
|
543
|
+
[512, 17, 7],
|
|
544
|
+
[768, 18, 8],
|
|
545
|
+
[1024, 19, 8],
|
|
546
|
+
[1536, 20, 9],
|
|
547
|
+
[2048, 21, 9],
|
|
548
|
+
[3072, 22, 10],
|
|
549
|
+
[4096, 23, 10],
|
|
550
|
+
[6144, 24, 11],
|
|
551
|
+
[8192, 25, 11],
|
|
552
|
+
[12288, 26, 12],
|
|
553
|
+
[16384, 27, 12],
|
|
554
|
+
[24576, 28, 13],
|
|
555
|
+
[32768, 29, 13]
|
|
556
|
+
];
|
|
557
|
+
// Find the appropriate distance code
|
|
558
|
+
let code = 0;
|
|
559
|
+
let extraBits = 0;
|
|
560
|
+
let baseDistance = 1;
|
|
561
|
+
for (const [maxDist, c, extra] of DIST_TABLE) {
|
|
562
|
+
if (distance <= maxDist) {
|
|
563
|
+
code = c;
|
|
564
|
+
extraBits = extra;
|
|
565
|
+
break;
|
|
566
|
+
}
|
|
567
|
+
baseDistance = maxDist + 1;
|
|
568
|
+
}
|
|
569
|
+
const extraValue = distance - baseDistance;
|
|
570
|
+
// Distance codes use 5-bit fixed code (reversed for Huffman)
|
|
571
|
+
output.writeBitsReverse(code, 5);
|
|
572
|
+
if (extraBits > 0) {
|
|
573
|
+
output.writeBits(extraValue, extraBits);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
*
|
|
18
18
|
* @example Basic usage
|
|
19
19
|
* ```ts
|
|
20
|
-
* import { createZip } from "./utils/zip/index
|
|
20
|
+
* import { createZip } from "./utils/zip/index";
|
|
21
21
|
*
|
|
22
22
|
* const zipData = await createZip([
|
|
23
23
|
* { name: "hello.txt", data: new TextEncoder().encode("Hello!") },
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
*
|
|
31
31
|
* @example Streaming usage
|
|
32
32
|
* ```ts
|
|
33
|
-
* import { ZipBuilder } from "./utils/zip/index
|
|
33
|
+
* import { ZipBuilder } from "./utils/zip/index";
|
|
34
34
|
*
|
|
35
35
|
* const builder = new ZipBuilder({ level: 1 });
|
|
36
36
|
*
|
|
@@ -51,20 +51,20 @@
|
|
|
51
51
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
52
|
exports.ZipBuilder = exports.createZipSync = exports.createZip = exports.hasCompressionStream = exports.hasNativeZlib = exports.decompressSync = exports.decompress = exports.compressSync = exports.compress = exports.crc32Finalize = exports.crc32Update = exports.crc32 = void 0;
|
|
53
53
|
// CRC32 utilities
|
|
54
|
-
var
|
|
55
|
-
Object.defineProperty(exports, "crc32", { enumerable: true, get: function () { return
|
|
56
|
-
Object.defineProperty(exports, "crc32Update", { enumerable: true, get: function () { return
|
|
57
|
-
Object.defineProperty(exports, "crc32Finalize", { enumerable: true, get: function () { return
|
|
54
|
+
var crc32_1 = require("./crc32");
|
|
55
|
+
Object.defineProperty(exports, "crc32", { enumerable: true, get: function () { return crc32_1.crc32; } });
|
|
56
|
+
Object.defineProperty(exports, "crc32Update", { enumerable: true, get: function () { return crc32_1.crc32Update; } });
|
|
57
|
+
Object.defineProperty(exports, "crc32Finalize", { enumerable: true, get: function () { return crc32_1.crc32Finalize; } });
|
|
58
58
|
// Compression utilities
|
|
59
|
-
var
|
|
60
|
-
Object.defineProperty(exports, "compress", { enumerable: true, get: function () { return
|
|
61
|
-
Object.defineProperty(exports, "compressSync", { enumerable: true, get: function () { return
|
|
62
|
-
Object.defineProperty(exports, "decompress", { enumerable: true, get: function () { return
|
|
63
|
-
Object.defineProperty(exports, "decompressSync", { enumerable: true, get: function () { return
|
|
64
|
-
Object.defineProperty(exports, "hasNativeZlib", { enumerable: true, get: function () { return
|
|
65
|
-
Object.defineProperty(exports, "hasCompressionStream", { enumerable: true, get: function () { return
|
|
59
|
+
var compress_1 = require("./compress");
|
|
60
|
+
Object.defineProperty(exports, "compress", { enumerable: true, get: function () { return compress_1.compress; } });
|
|
61
|
+
Object.defineProperty(exports, "compressSync", { enumerable: true, get: function () { return compress_1.compressSync; } });
|
|
62
|
+
Object.defineProperty(exports, "decompress", { enumerable: true, get: function () { return compress_1.decompress; } });
|
|
63
|
+
Object.defineProperty(exports, "decompressSync", { enumerable: true, get: function () { return compress_1.decompressSync; } });
|
|
64
|
+
Object.defineProperty(exports, "hasNativeZlib", { enumerable: true, get: function () { return compress_1.hasNativeZlib; } });
|
|
65
|
+
Object.defineProperty(exports, "hasCompressionStream", { enumerable: true, get: function () { return compress_1.hasCompressionStream; } });
|
|
66
66
|
// ZIP builder
|
|
67
|
-
var
|
|
68
|
-
Object.defineProperty(exports, "createZip", { enumerable: true, get: function () { return
|
|
69
|
-
Object.defineProperty(exports, "createZipSync", { enumerable: true, get: function () { return
|
|
70
|
-
Object.defineProperty(exports, "ZipBuilder", { enumerable: true, get: function () { return
|
|
67
|
+
var zip_builder_1 = require("./zip-builder");
|
|
68
|
+
Object.defineProperty(exports, "createZip", { enumerable: true, get: function () { return zip_builder_1.createZip; } });
|
|
69
|
+
Object.defineProperty(exports, "createZipSync", { enumerable: true, get: function () { return zip_builder_1.createZipSync; } });
|
|
70
|
+
Object.defineProperty(exports, "ZipBuilder", { enumerable: true, get: function () { return zip_builder_1.ZipBuilder; } });
|