@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,264 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Streaming ZIP creator - fflate-compatible API
|
|
4
|
+
*
|
|
5
|
+
* This module provides a streaming ZIP API compatible with fflate's Zip/ZipDeflate,
|
|
6
|
+
* but uses native zlib compression for better performance.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* ```ts
|
|
10
|
+
* const zip = new StreamingZip((err, data, final) => {
|
|
11
|
+
* if (err) handleError(err);
|
|
12
|
+
* else {
|
|
13
|
+
* stream.write(data);
|
|
14
|
+
* if (final) stream.end();
|
|
15
|
+
* }
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* const file = new ZipDeflateFile("path/file.txt", { level: 6 });
|
|
19
|
+
* zip.add(file);
|
|
20
|
+
* file.push(data1);
|
|
21
|
+
* file.push(data2, true); // true = final chunk
|
|
22
|
+
*
|
|
23
|
+
* zip.end();
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.ZipDeflate = exports.Zip = exports.StreamingZip = exports.ZipDeflateFile = void 0;
|
|
28
|
+
const crc32_1 = require("./crc32");
|
|
29
|
+
const compress_1 = require("./compress");
|
|
30
|
+
// ZIP signature constants
|
|
31
|
+
const LOCAL_FILE_HEADER_SIG = 0x04034b50;
|
|
32
|
+
const CENTRAL_DIR_HEADER_SIG = 0x02014b50;
|
|
33
|
+
const END_OF_CENTRAL_DIR_SIG = 0x06054b50;
|
|
34
|
+
// ZIP version constants
|
|
35
|
+
const VERSION_NEEDED = 20; // 2.0 - supports DEFLATE
|
|
36
|
+
const VERSION_MADE_BY = 20; // 2.0
|
|
37
|
+
// Compression methods
|
|
38
|
+
const COMPRESSION_STORE = 0;
|
|
39
|
+
const COMPRESSION_DEFLATE = 8;
|
|
40
|
+
const encoder = new TextEncoder();
|
|
41
|
+
/**
|
|
42
|
+
* Convert Date to DOS time format
|
|
43
|
+
*/
|
|
44
|
+
function dateToDos(date) {
|
|
45
|
+
const dosTime = ((date.getHours() & 0x1f) << 11) |
|
|
46
|
+
((date.getMinutes() & 0x3f) << 5) |
|
|
47
|
+
((date.getSeconds() >> 1) & 0x1f);
|
|
48
|
+
const dosDate = (((date.getFullYear() - 1980) & 0x7f) << 9) |
|
|
49
|
+
(((date.getMonth() + 1) & 0x0f) << 5) |
|
|
50
|
+
(date.getDate() & 0x1f);
|
|
51
|
+
return [dosTime, dosDate];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* ZipDeflate-compatible file stream
|
|
55
|
+
* Collects data chunks, compresses on finalization
|
|
56
|
+
*/
|
|
57
|
+
class ZipDeflateFile {
|
|
58
|
+
constructor(name, options) {
|
|
59
|
+
this.chunks = [];
|
|
60
|
+
this.totalSize = 0;
|
|
61
|
+
this.finalized = false;
|
|
62
|
+
this._ondata = null;
|
|
63
|
+
this.name = name;
|
|
64
|
+
this.level = options?.level ?? 6;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Set data callback (called by StreamingZip)
|
|
68
|
+
*/
|
|
69
|
+
set ondata(cb) {
|
|
70
|
+
this._ondata = cb;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Push data to the file
|
|
74
|
+
* @param data - Data chunk
|
|
75
|
+
* @param final - Whether this is the final chunk
|
|
76
|
+
*/
|
|
77
|
+
push(data, final = false) {
|
|
78
|
+
if (this.finalized) {
|
|
79
|
+
throw new Error("Cannot push to finalized ZipDeflateFile");
|
|
80
|
+
}
|
|
81
|
+
if (data.length > 0) {
|
|
82
|
+
this.chunks.push(data);
|
|
83
|
+
this.totalSize += data.length;
|
|
84
|
+
}
|
|
85
|
+
if (final) {
|
|
86
|
+
this.finalized = true;
|
|
87
|
+
this._flush();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Flush collected data through compression and emit
|
|
92
|
+
*/
|
|
93
|
+
_flush() {
|
|
94
|
+
if (!this._ondata) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Combine chunks
|
|
98
|
+
let uncompressed;
|
|
99
|
+
if (this.chunks.length === 0) {
|
|
100
|
+
uncompressed = new Uint8Array(0);
|
|
101
|
+
}
|
|
102
|
+
else if (this.chunks.length === 1) {
|
|
103
|
+
uncompressed = this.chunks[0];
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
uncompressed = new Uint8Array(this.totalSize);
|
|
107
|
+
let offset = 0;
|
|
108
|
+
for (const chunk of this.chunks) {
|
|
109
|
+
uncompressed.set(chunk, offset);
|
|
110
|
+
offset += chunk.length;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Compress if level > 0 and data is not empty
|
|
114
|
+
const shouldCompress = this.level > 0 && uncompressed.length > 0;
|
|
115
|
+
const compressed = shouldCompress
|
|
116
|
+
? (0, compress_1.compressSync)(uncompressed, { level: this.level })
|
|
117
|
+
: uncompressed;
|
|
118
|
+
// Build local file header + data
|
|
119
|
+
const nameBytes = encoder.encode(this.name);
|
|
120
|
+
const crcValue = (0, crc32_1.crc32)(uncompressed);
|
|
121
|
+
const [dosTime, dosDate] = dateToDos(new Date());
|
|
122
|
+
// Local file header (30 bytes + filename)
|
|
123
|
+
const header = new Uint8Array(30 + nameBytes.length);
|
|
124
|
+
const view = new DataView(header.buffer);
|
|
125
|
+
view.setUint32(0, LOCAL_FILE_HEADER_SIG, true);
|
|
126
|
+
view.setUint16(4, VERSION_NEEDED, true);
|
|
127
|
+
view.setUint16(6, 0x0800, true); // UTF-8 flag
|
|
128
|
+
view.setUint16(8, shouldCompress ? COMPRESSION_DEFLATE : COMPRESSION_STORE, true);
|
|
129
|
+
view.setUint16(10, dosTime, true);
|
|
130
|
+
view.setUint16(12, dosDate, true);
|
|
131
|
+
view.setUint32(14, crcValue, true);
|
|
132
|
+
view.setUint32(18, compressed.length, true);
|
|
133
|
+
view.setUint32(22, uncompressed.length, true);
|
|
134
|
+
view.setUint16(26, nameBytes.length, true);
|
|
135
|
+
view.setUint16(28, 0, true); // Extra field length
|
|
136
|
+
header.set(nameBytes, 30);
|
|
137
|
+
// Store info for central directory BEFORE emitting data
|
|
138
|
+
// (StreamingZip reads this in the final callback)
|
|
139
|
+
this._entryInfo = {
|
|
140
|
+
name: nameBytes,
|
|
141
|
+
crc: crcValue,
|
|
142
|
+
compressedSize: compressed.length,
|
|
143
|
+
uncompressedSize: uncompressed.length,
|
|
144
|
+
compressionMethod: shouldCompress ? COMPRESSION_DEFLATE : COMPRESSION_STORE,
|
|
145
|
+
dosTime,
|
|
146
|
+
dosDate,
|
|
147
|
+
offset: -1 // Will be set by StreamingZip
|
|
148
|
+
};
|
|
149
|
+
// Emit header
|
|
150
|
+
this._ondata(header, false);
|
|
151
|
+
// Emit compressed data (final chunk)
|
|
152
|
+
this._ondata(compressed, true);
|
|
153
|
+
// Clear chunks for GC
|
|
154
|
+
this.chunks.length = 0;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Get entry info (called by StreamingZip after finalization)
|
|
158
|
+
*/
|
|
159
|
+
getEntryInfo() {
|
|
160
|
+
return this._entryInfo || null;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
exports.ZipDeflateFile = ZipDeflateFile;
|
|
164
|
+
exports.ZipDeflate = ZipDeflateFile;
|
|
165
|
+
/**
|
|
166
|
+
* Streaming ZIP - fflate Zip-compatible API
|
|
167
|
+
* Creates ZIP files in a streaming manner
|
|
168
|
+
*/
|
|
169
|
+
class StreamingZip {
|
|
170
|
+
/**
|
|
171
|
+
* Create a streaming ZIP
|
|
172
|
+
* @param callback - Called with (err, data, final) as data becomes available
|
|
173
|
+
*/
|
|
174
|
+
constructor(callback) {
|
|
175
|
+
this.entries = [];
|
|
176
|
+
this.currentOffset = 0;
|
|
177
|
+
this.ended = false;
|
|
178
|
+
this.callback = callback;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Add a file to the ZIP
|
|
182
|
+
* @param file - ZipDeflateFile instance
|
|
183
|
+
*/
|
|
184
|
+
add(file) {
|
|
185
|
+
if (this.ended) {
|
|
186
|
+
throw new Error("Cannot add files after calling end()");
|
|
187
|
+
}
|
|
188
|
+
// Capture offset when first data is written, not when add() is called
|
|
189
|
+
// This is important because streaming files may have data pushed later
|
|
190
|
+
let startOffset = -1;
|
|
191
|
+
file.ondata = (data, final) => {
|
|
192
|
+
// Capture offset on first data chunk
|
|
193
|
+
if (startOffset === -1) {
|
|
194
|
+
startOffset = this.currentOffset;
|
|
195
|
+
}
|
|
196
|
+
this.currentOffset += data.length;
|
|
197
|
+
this.callback(null, data, false);
|
|
198
|
+
if (final) {
|
|
199
|
+
// Get entry info and set offset
|
|
200
|
+
const entryInfo = file.getEntryInfo();
|
|
201
|
+
if (entryInfo) {
|
|
202
|
+
entryInfo.offset = startOffset;
|
|
203
|
+
this.entries.push(entryInfo);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Finalize the ZIP
|
|
210
|
+
* Writes central directory and end-of-central-directory record
|
|
211
|
+
*/
|
|
212
|
+
end() {
|
|
213
|
+
if (this.ended) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
this.ended = true;
|
|
217
|
+
const centralDirOffset = this.currentOffset;
|
|
218
|
+
const centralDirChunks = [];
|
|
219
|
+
// Build central directory headers
|
|
220
|
+
for (const entry of this.entries) {
|
|
221
|
+
const header = new Uint8Array(46 + entry.name.length);
|
|
222
|
+
const view = new DataView(header.buffer);
|
|
223
|
+
view.setUint32(0, CENTRAL_DIR_HEADER_SIG, true);
|
|
224
|
+
view.setUint16(4, VERSION_MADE_BY, true);
|
|
225
|
+
view.setUint16(6, VERSION_NEEDED, true);
|
|
226
|
+
view.setUint16(8, 0x0800, true); // UTF-8 flag
|
|
227
|
+
view.setUint16(10, entry.compressionMethod, true);
|
|
228
|
+
view.setUint16(12, entry.dosTime, true);
|
|
229
|
+
view.setUint16(14, entry.dosDate, true);
|
|
230
|
+
view.setUint32(16, entry.crc, true);
|
|
231
|
+
view.setUint32(20, entry.compressedSize, true);
|
|
232
|
+
view.setUint32(24, entry.uncompressedSize, true);
|
|
233
|
+
view.setUint16(28, entry.name.length, true);
|
|
234
|
+
view.setUint16(30, 0, true); // Extra field length
|
|
235
|
+
view.setUint16(32, 0, true); // Comment length
|
|
236
|
+
view.setUint16(34, 0, true); // Disk number start
|
|
237
|
+
view.setUint16(36, 0, true); // Internal file attributes
|
|
238
|
+
view.setUint32(38, 0, true); // External file attributes
|
|
239
|
+
view.setUint32(42, entry.offset, true);
|
|
240
|
+
header.set(entry.name, 46);
|
|
241
|
+
centralDirChunks.push(header);
|
|
242
|
+
}
|
|
243
|
+
// Emit central directory
|
|
244
|
+
for (const chunk of centralDirChunks) {
|
|
245
|
+
this.callback(null, chunk, false);
|
|
246
|
+
}
|
|
247
|
+
const centralDirSize = centralDirChunks.reduce((sum, c) => sum + c.length, 0);
|
|
248
|
+
// Build end of central directory
|
|
249
|
+
const eocd = new Uint8Array(22);
|
|
250
|
+
const eocdView = new DataView(eocd.buffer);
|
|
251
|
+
eocdView.setUint32(0, END_OF_CENTRAL_DIR_SIG, true);
|
|
252
|
+
eocdView.setUint16(4, 0, true); // Disk number
|
|
253
|
+
eocdView.setUint16(6, 0, true); // Disk with central dir
|
|
254
|
+
eocdView.setUint16(8, this.entries.length, true);
|
|
255
|
+
eocdView.setUint16(10, this.entries.length, true);
|
|
256
|
+
eocdView.setUint32(12, centralDirSize, true);
|
|
257
|
+
eocdView.setUint32(16, centralDirOffset, true);
|
|
258
|
+
eocdView.setUint16(20, 0, true); // Comment length
|
|
259
|
+
// Emit end of central directory (final chunk)
|
|
260
|
+
this.callback(null, eocd, true);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
exports.StreamingZip = StreamingZip;
|
|
264
|
+
exports.Zip = StreamingZip;
|
|
@@ -26,8 +26,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
exports.ZipBuilder = void 0;
|
|
27
27
|
exports.createZip = createZip;
|
|
28
28
|
exports.createZipSync = createZipSync;
|
|
29
|
-
const
|
|
30
|
-
const
|
|
29
|
+
const crc32_1 = require("./crc32");
|
|
30
|
+
const compress_1 = require("./compress");
|
|
31
31
|
// ZIP signature constants
|
|
32
32
|
const LOCAL_FILE_HEADER_SIG = 0x04034b50;
|
|
33
33
|
const CENTRAL_DIR_HEADER_SIG = 0x02014b50;
|
|
@@ -156,12 +156,12 @@ async function createZip(entries, options = {}) {
|
|
|
156
156
|
const [dosTime, dosDate] = dateToDos(modDate);
|
|
157
157
|
// Compress data
|
|
158
158
|
const isCompressed = level > 0 && entry.data.length > 0;
|
|
159
|
-
const compressedData = isCompressed ? await (0,
|
|
159
|
+
const compressedData = isCompressed ? await (0, compress_1.compress)(entry.data, { level }) : entry.data;
|
|
160
160
|
const processedEntry = {
|
|
161
161
|
name: nameBytes,
|
|
162
162
|
data: entry.data,
|
|
163
163
|
compressedData,
|
|
164
|
-
crc: (0,
|
|
164
|
+
crc: (0, crc32_1.crc32)(entry.data),
|
|
165
165
|
compressionMethod: isCompressed ? COMPRESSION_DEFLATE : COMPRESSION_STORE,
|
|
166
166
|
modTime: dosTime,
|
|
167
167
|
modDate: dosDate,
|
|
@@ -221,12 +221,12 @@ function createZipSync(entries, options = {}) {
|
|
|
221
221
|
const [dosTime, dosDate] = dateToDos(modDate);
|
|
222
222
|
// Compress data
|
|
223
223
|
const isCompressed = level > 0 && entry.data.length > 0;
|
|
224
|
-
const compressedData = isCompressed ? (0,
|
|
224
|
+
const compressedData = isCompressed ? (0, compress_1.compressSync)(entry.data, { level }) : entry.data;
|
|
225
225
|
const processedEntry = {
|
|
226
226
|
name: nameBytes,
|
|
227
227
|
data: entry.data,
|
|
228
228
|
compressedData,
|
|
229
|
-
crc: (0,
|
|
229
|
+
crc: (0, crc32_1.crc32)(entry.data),
|
|
230
230
|
compressionMethod: isCompressed ? COMPRESSION_DEFLATE : COMPRESSION_STORE,
|
|
231
231
|
modTime: dosTime,
|
|
232
232
|
modDate: dosDate,
|
|
@@ -294,13 +294,13 @@ class ZipBuilder {
|
|
|
294
294
|
// Compress data
|
|
295
295
|
const isCompressed = this.level > 0 && entry.data.length > 0;
|
|
296
296
|
const compressedData = isCompressed
|
|
297
|
-
? await (0,
|
|
297
|
+
? await (0, compress_1.compress)(entry.data, { level: this.level })
|
|
298
298
|
: entry.data;
|
|
299
299
|
const processedEntry = {
|
|
300
300
|
name: nameBytes,
|
|
301
301
|
data: entry.data,
|
|
302
302
|
compressedData,
|
|
303
|
-
crc: (0,
|
|
303
|
+
crc: (0, crc32_1.crc32)(entry.data),
|
|
304
304
|
compressionMethod: isCompressed ? COMPRESSION_DEFLATE : COMPRESSION_STORE,
|
|
305
305
|
modTime: dosTime,
|
|
306
306
|
modDate: dosDate,
|
|
@@ -326,13 +326,13 @@ class ZipBuilder {
|
|
|
326
326
|
// Compress data
|
|
327
327
|
const isCompressed = this.level > 0 && entry.data.length > 0;
|
|
328
328
|
const compressedData = isCompressed
|
|
329
|
-
? (0,
|
|
329
|
+
? (0, compress_1.compressSync)(entry.data, { level: this.level })
|
|
330
330
|
: entry.data;
|
|
331
331
|
const processedEntry = {
|
|
332
332
|
name: nameBytes,
|
|
333
333
|
data: entry.data,
|
|
334
334
|
compressedData,
|
|
335
|
-
crc: (0,
|
|
335
|
+
crc: (0, crc32_1.crc32)(entry.data),
|
|
336
336
|
compressionMethod: isCompressed ? COMPRESSION_DEFLATE : COMPRESSION_STORE,
|
|
337
337
|
modTime: dosTime,
|
|
338
338
|
modDate: dosDate,
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ZipWriter = void 0;
|
|
4
|
+
const zip_builder_1 = require("./zip/zip-builder");
|
|
5
|
+
const stream_buf_browser_1 = require("./stream-buf.browser");
|
|
6
|
+
// Helper function for base64 decoding in browser
|
|
7
|
+
function base64ToUint8Array(base64) {
|
|
8
|
+
const binaryString = atob(base64);
|
|
9
|
+
const bytes = new Uint8Array(binaryString.length);
|
|
10
|
+
for (let i = 0; i < binaryString.length; i++) {
|
|
11
|
+
bytes[i] = binaryString.charCodeAt(i);
|
|
12
|
+
}
|
|
13
|
+
return bytes;
|
|
14
|
+
}
|
|
15
|
+
// =============================================================================
|
|
16
|
+
// The ZipWriter class - Browser version without Node.js events dependency
|
|
17
|
+
// Packs streamed data into an output zip stream
|
|
18
|
+
class ZipWriter {
|
|
19
|
+
constructor(options) {
|
|
20
|
+
this.finalized = false;
|
|
21
|
+
this.pendingWrites = [];
|
|
22
|
+
this.events = new Map();
|
|
23
|
+
const level = options?.compression === "STORE"
|
|
24
|
+
? 0
|
|
25
|
+
: Math.max(0, Math.min(9, options?.compressionOptions?.level ?? 1));
|
|
26
|
+
this.stream = new stream_buf_browser_1.StreamBuf();
|
|
27
|
+
this.zipBuilder = new zip_builder_1.ZipBuilder({ level });
|
|
28
|
+
}
|
|
29
|
+
// Event emitter methods
|
|
30
|
+
on(event, callback) {
|
|
31
|
+
const callbacks = this.events.get(event) || [];
|
|
32
|
+
callbacks.push(callback);
|
|
33
|
+
this.events.set(event, callbacks);
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
once(event, callback) {
|
|
37
|
+
const onceCallback = (...args) => {
|
|
38
|
+
this.off(event, onceCallback);
|
|
39
|
+
callback(...args);
|
|
40
|
+
};
|
|
41
|
+
return this.on(event, onceCallback);
|
|
42
|
+
}
|
|
43
|
+
off(event, callback) {
|
|
44
|
+
const callbacks = this.events.get(event) || [];
|
|
45
|
+
const index = callbacks.indexOf(callback);
|
|
46
|
+
if (index !== -1) {
|
|
47
|
+
callbacks.splice(index, 1);
|
|
48
|
+
}
|
|
49
|
+
return this;
|
|
50
|
+
}
|
|
51
|
+
emit(event, ...args) {
|
|
52
|
+
const callbacks = this.events.get(event) || [];
|
|
53
|
+
callbacks.forEach(cb => cb(...args));
|
|
54
|
+
return callbacks.length > 0;
|
|
55
|
+
}
|
|
56
|
+
removeListener(event, callback) {
|
|
57
|
+
return this.off(event, callback);
|
|
58
|
+
}
|
|
59
|
+
append(data, options) {
|
|
60
|
+
let buffer;
|
|
61
|
+
if (Object.prototype.hasOwnProperty.call(options, "base64") && options.base64) {
|
|
62
|
+
const base64Data = typeof data === "string" ? data : String(data);
|
|
63
|
+
buffer = base64ToUint8Array(base64Data);
|
|
64
|
+
}
|
|
65
|
+
else if (typeof data === "string") {
|
|
66
|
+
buffer = new TextEncoder().encode(data);
|
|
67
|
+
}
|
|
68
|
+
else if (data instanceof Uint8Array) {
|
|
69
|
+
buffer = data;
|
|
70
|
+
}
|
|
71
|
+
else if (ArrayBuffer.isView(data)) {
|
|
72
|
+
buffer = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
73
|
+
}
|
|
74
|
+
else if (data instanceof ArrayBuffer) {
|
|
75
|
+
buffer = new Uint8Array(data);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
buffer = data;
|
|
79
|
+
}
|
|
80
|
+
const writePromise = this.zipBuilder
|
|
81
|
+
.addFile({ name: options.name, data: buffer })
|
|
82
|
+
.then(chunks => {
|
|
83
|
+
for (const chunk of chunks) {
|
|
84
|
+
this.stream.write(new Uint8Array(chunk));
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
this.pendingWrites.push(writePromise);
|
|
88
|
+
}
|
|
89
|
+
push(chunk) {
|
|
90
|
+
return this.stream.push(chunk);
|
|
91
|
+
}
|
|
92
|
+
async finalize() {
|
|
93
|
+
if (this.finalized) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
this.finalized = true;
|
|
97
|
+
await Promise.all(this.pendingWrites);
|
|
98
|
+
const finalChunks = this.zipBuilder.finalize();
|
|
99
|
+
for (const chunk of finalChunks) {
|
|
100
|
+
this.stream.write(new Uint8Array(chunk));
|
|
101
|
+
}
|
|
102
|
+
this.stream.end();
|
|
103
|
+
this.emit("finish");
|
|
104
|
+
}
|
|
105
|
+
// ==========================================================================
|
|
106
|
+
// Stream.Readable interface
|
|
107
|
+
read(size) {
|
|
108
|
+
return this.stream.read(size);
|
|
109
|
+
}
|
|
110
|
+
setEncoding(encoding) {
|
|
111
|
+
return this.stream.setEncoding(encoding);
|
|
112
|
+
}
|
|
113
|
+
pause() {
|
|
114
|
+
return this.stream.pause();
|
|
115
|
+
}
|
|
116
|
+
resume() {
|
|
117
|
+
return this.stream.resume();
|
|
118
|
+
}
|
|
119
|
+
isPaused() {
|
|
120
|
+
return this.stream.isPaused();
|
|
121
|
+
}
|
|
122
|
+
pipe(destination) {
|
|
123
|
+
return this.stream.pipe(destination);
|
|
124
|
+
}
|
|
125
|
+
unpipe(destination) {
|
|
126
|
+
return this.stream.unpipe(destination);
|
|
127
|
+
}
|
|
128
|
+
unshift() {
|
|
129
|
+
return this.stream.unshift();
|
|
130
|
+
}
|
|
131
|
+
wrap() {
|
|
132
|
+
return this.stream.wrap();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.ZipWriter = ZipWriter;
|
|
@@ -5,8 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.ZipWriter = void 0;
|
|
7
7
|
const events_1 = __importDefault(require("events"));
|
|
8
|
-
const
|
|
9
|
-
const
|
|
8
|
+
const index_1 = require("./zip/index");
|
|
9
|
+
const stream_buf_1 = require("./stream-buf");
|
|
10
10
|
// =============================================================================
|
|
11
11
|
// The ZipWriter class
|
|
12
12
|
// Packs streamed data into an output zip stream
|
|
@@ -22,8 +22,8 @@ class ZipWriter extends events_1.default.EventEmitter {
|
|
|
22
22
|
const level = options?.compression === "STORE"
|
|
23
23
|
? 0
|
|
24
24
|
: Math.max(0, Math.min(9, options?.compressionOptions?.level ?? 1));
|
|
25
|
-
this.stream = new
|
|
26
|
-
this.zipBuilder = new
|
|
25
|
+
this.stream = new stream_buf_1.StreamBuf();
|
|
26
|
+
this.zipBuilder = new index_1.ZipBuilder({ level });
|
|
27
27
|
}
|
|
28
28
|
append(data, options) {
|
|
29
29
|
let buffer;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BaseXform = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
4
|
+
const parse_sax_1 = require("../../utils/parse-sax");
|
|
5
|
+
const xml_stream_1 = require("../../utils/xml-stream");
|
|
6
6
|
// Base class for Xforms
|
|
7
7
|
class BaseXform {
|
|
8
8
|
// ============================================================
|
|
@@ -65,7 +65,7 @@ class BaseXform {
|
|
|
65
65
|
return this.model;
|
|
66
66
|
}
|
|
67
67
|
async parseStream(stream) {
|
|
68
|
-
return this.parse((0,
|
|
68
|
+
return this.parse((0, parse_sax_1.parseSax)(stream));
|
|
69
69
|
}
|
|
70
70
|
get xml() {
|
|
71
71
|
// convenience function to get the xml of this.model
|
|
@@ -73,7 +73,7 @@ class BaseXform {
|
|
|
73
73
|
return this.toXml(this.model);
|
|
74
74
|
}
|
|
75
75
|
toXml(model) {
|
|
76
|
-
const xmlStream = new
|
|
76
|
+
const xmlStream = new xml_stream_1.XmlStream();
|
|
77
77
|
this.render(xmlStream, model);
|
|
78
78
|
return xmlStream.xml;
|
|
79
79
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DefinedNamesXform = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
class DefinedNamesXform extends
|
|
4
|
+
const base_xform_1 = require("../base-xform");
|
|
5
|
+
const col_cache_1 = require("../../../utils/col-cache");
|
|
6
|
+
class DefinedNamesXform extends base_xform_1.BaseXform {
|
|
7
7
|
constructor() {
|
|
8
8
|
super();
|
|
9
9
|
this._parsedText = [];
|
|
@@ -69,7 +69,7 @@ function isValidRange(range) {
|
|
|
69
69
|
return false;
|
|
70
70
|
}
|
|
71
71
|
try {
|
|
72
|
-
const decoded =
|
|
72
|
+
const decoded = col_cache_1.colCache.decodeEx(range);
|
|
73
73
|
// For cell ranges: row/col or top/bottom/left/right should be valid numbers
|
|
74
74
|
// For row ranges ($1:$2): top/bottom are numbers, left/right are null
|
|
75
75
|
// For column ranges ($A:$B): left/right are numbers, top/bottom are null
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WorksheetXform = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
class WorksheetXform extends
|
|
4
|
+
const utils_1 = require("../../../utils/utils");
|
|
5
|
+
const base_xform_1 = require("../base-xform");
|
|
6
|
+
class WorksheetXform extends base_xform_1.BaseXform {
|
|
7
7
|
render(xmlStream, model) {
|
|
8
8
|
xmlStream.leafNode("sheet", {
|
|
9
9
|
sheetId: model.id,
|
|
@@ -15,7 +15,7 @@ class WorksheetXform extends base_xform_js_1.BaseXform {
|
|
|
15
15
|
parseOpen(node) {
|
|
16
16
|
if (node.name === "sheet") {
|
|
17
17
|
this.model = {
|
|
18
|
-
name: (0,
|
|
18
|
+
name: (0, utils_1.xmlDecode)(node.attributes.name),
|
|
19
19
|
id: parseInt(node.attributes.sheetId, 10),
|
|
20
20
|
state: node.attributes.state,
|
|
21
21
|
rId: node.attributes["r:id"]
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WorkbookCalcPropertiesXform = void 0;
|
|
4
|
-
const
|
|
5
|
-
class WorkbookCalcPropertiesXform extends
|
|
4
|
+
const base_xform_1 = require("../base-xform");
|
|
5
|
+
class WorkbookCalcPropertiesXform extends base_xform_1.BaseXform {
|
|
6
6
|
render(xmlStream, model) {
|
|
7
7
|
xmlStream.leafNode("calcPr", {
|
|
8
8
|
calcId: 171027,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WorkbookPivotCacheXform = void 0;
|
|
4
|
-
const
|
|
5
|
-
class WorkbookPivotCacheXform extends
|
|
4
|
+
const base_xform_1 = require("../base-xform");
|
|
5
|
+
class WorkbookPivotCacheXform extends base_xform_1.BaseXform {
|
|
6
6
|
render(xmlStream, model) {
|
|
7
7
|
xmlStream.leafNode("pivotCache", {
|
|
8
8
|
cacheId: model.cacheId,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WorkbookPropertiesXform = void 0;
|
|
4
|
-
const
|
|
5
|
-
class WorkbookPropertiesXform extends
|
|
4
|
+
const base_xform_1 = require("../base-xform");
|
|
5
|
+
class WorkbookPropertiesXform extends base_xform_1.BaseXform {
|
|
6
6
|
render(xmlStream, model) {
|
|
7
7
|
xmlStream.leafNode("workbookPr", {
|
|
8
8
|
date1904: model.date1904 ? 1 : undefined,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WorkbookViewXform = void 0;
|
|
4
|
-
const
|
|
5
|
-
class WorkbookViewXform extends
|
|
4
|
+
const base_xform_1 = require("../base-xform");
|
|
5
|
+
class WorkbookViewXform extends base_xform_1.BaseXform {
|
|
6
6
|
render(xmlStream, model) {
|
|
7
7
|
const attributes = {
|
|
8
8
|
xWindow: model.x || 0,
|