@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,352 @@
|
|
|
1
|
+
import { StringBuf } from "./string-buf.js";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// Data chunks - encapsulating incoming data
|
|
4
|
+
class StringChunk {
|
|
5
|
+
constructor(data, encoding) {
|
|
6
|
+
this._data = data;
|
|
7
|
+
this._encoding = encoding;
|
|
8
|
+
}
|
|
9
|
+
get length() {
|
|
10
|
+
return this.toBuffer().length;
|
|
11
|
+
}
|
|
12
|
+
copy(target, targetOffset, offset, length) {
|
|
13
|
+
const buf = this.toBuffer();
|
|
14
|
+
const bytesToCopy = Math.min(length, buf.length - offset);
|
|
15
|
+
target.set(buf.subarray(offset, offset + bytesToCopy), targetOffset);
|
|
16
|
+
return bytesToCopy;
|
|
17
|
+
}
|
|
18
|
+
toBuffer() {
|
|
19
|
+
if (!this._buffer) {
|
|
20
|
+
this._buffer = new TextEncoder().encode(this._data);
|
|
21
|
+
}
|
|
22
|
+
return this._buffer;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
class StringBufChunk {
|
|
26
|
+
constructor(data) {
|
|
27
|
+
this._data = data;
|
|
28
|
+
}
|
|
29
|
+
get length() {
|
|
30
|
+
return this._data.length;
|
|
31
|
+
}
|
|
32
|
+
copy(target, targetOffset, offset, length) {
|
|
33
|
+
const buf = this.toBuffer();
|
|
34
|
+
const bytesToCopy = Math.min(length, buf.length - offset);
|
|
35
|
+
target.set(buf.subarray(offset, offset + bytesToCopy), targetOffset);
|
|
36
|
+
return bytesToCopy;
|
|
37
|
+
}
|
|
38
|
+
toBuffer() {
|
|
39
|
+
return this._data.toBuffer();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
class BufferChunk {
|
|
43
|
+
constructor(data) {
|
|
44
|
+
this._data = data;
|
|
45
|
+
}
|
|
46
|
+
get length() {
|
|
47
|
+
return this._data.length;
|
|
48
|
+
}
|
|
49
|
+
copy(target, targetOffset, offset, length) {
|
|
50
|
+
const bytesToCopy = Math.min(length, this._data.length - offset);
|
|
51
|
+
target.set(this._data.subarray(offset, offset + bytesToCopy), targetOffset);
|
|
52
|
+
}
|
|
53
|
+
toBuffer() {
|
|
54
|
+
return this._data;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// =============================================================================
|
|
58
|
+
// ReadWriteBuf - a single buffer supporting simple read-write
|
|
59
|
+
class ReadWriteBuf {
|
|
60
|
+
constructor(size) {
|
|
61
|
+
this.size = size;
|
|
62
|
+
this.buffer = new Uint8Array(size);
|
|
63
|
+
this.iRead = 0;
|
|
64
|
+
this.iWrite = 0;
|
|
65
|
+
}
|
|
66
|
+
toBuffer() {
|
|
67
|
+
if (this.iRead === 0 && this.iWrite === this.size) {
|
|
68
|
+
return this.buffer;
|
|
69
|
+
}
|
|
70
|
+
return this.buffer.slice(this.iRead, this.iWrite);
|
|
71
|
+
}
|
|
72
|
+
get length() {
|
|
73
|
+
return this.iWrite - this.iRead;
|
|
74
|
+
}
|
|
75
|
+
get eod() {
|
|
76
|
+
return this.iRead === this.iWrite;
|
|
77
|
+
}
|
|
78
|
+
get full() {
|
|
79
|
+
return this.iWrite === this.size;
|
|
80
|
+
}
|
|
81
|
+
read(size) {
|
|
82
|
+
if (size === 0) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
if (size === undefined || size >= this.length) {
|
|
86
|
+
const buf = this.toBuffer();
|
|
87
|
+
this.iRead = this.iWrite;
|
|
88
|
+
return buf;
|
|
89
|
+
}
|
|
90
|
+
const buf = this.buffer.slice(this.iRead, this.iRead + size);
|
|
91
|
+
this.iRead += size;
|
|
92
|
+
return buf;
|
|
93
|
+
}
|
|
94
|
+
write(chunk, offset, length) {
|
|
95
|
+
const size = Math.min(length, this.size - this.iWrite);
|
|
96
|
+
chunk.copy(this.buffer, this.iWrite, offset, offset + size);
|
|
97
|
+
this.iWrite += size;
|
|
98
|
+
return size;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// =============================================================================
|
|
102
|
+
// StreamBuf - Browser version without Node.js stream dependency
|
|
103
|
+
// A simple buffer manager that mimics stream behavior for xlsx writing
|
|
104
|
+
class StreamBuf {
|
|
105
|
+
constructor(options) {
|
|
106
|
+
options = options || {};
|
|
107
|
+
this.bufSize = options.bufSize || 1024 * 1024;
|
|
108
|
+
this.buffers = [];
|
|
109
|
+
this.batch = options.batch || false;
|
|
110
|
+
this.corked = false;
|
|
111
|
+
this.paused = false;
|
|
112
|
+
this.encoding = null;
|
|
113
|
+
this.pipes = [];
|
|
114
|
+
this.events = new Map();
|
|
115
|
+
}
|
|
116
|
+
// Event emitter methods
|
|
117
|
+
on(event, callback) {
|
|
118
|
+
const callbacks = this.events.get(event) || [];
|
|
119
|
+
callbacks.push(callback);
|
|
120
|
+
this.events.set(event, callbacks);
|
|
121
|
+
return this;
|
|
122
|
+
}
|
|
123
|
+
once(event, callback) {
|
|
124
|
+
const onceCallback = (...args) => {
|
|
125
|
+
this.off(event, onceCallback);
|
|
126
|
+
callback(...args);
|
|
127
|
+
};
|
|
128
|
+
return this.on(event, onceCallback);
|
|
129
|
+
}
|
|
130
|
+
off(event, callback) {
|
|
131
|
+
const callbacks = this.events.get(event) || [];
|
|
132
|
+
const index = callbacks.indexOf(callback);
|
|
133
|
+
if (index !== -1) {
|
|
134
|
+
callbacks.splice(index, 1);
|
|
135
|
+
}
|
|
136
|
+
return this;
|
|
137
|
+
}
|
|
138
|
+
emit(event, ...args) {
|
|
139
|
+
const callbacks = this.events.get(event) || [];
|
|
140
|
+
callbacks.forEach(cb => cb(...args));
|
|
141
|
+
return callbacks.length > 0;
|
|
142
|
+
}
|
|
143
|
+
removeListener(event, callback) {
|
|
144
|
+
return this.off(event, callback);
|
|
145
|
+
}
|
|
146
|
+
toBuffer() {
|
|
147
|
+
switch (this.buffers.length) {
|
|
148
|
+
case 0:
|
|
149
|
+
return null;
|
|
150
|
+
case 1:
|
|
151
|
+
return this.buffers[0].toBuffer();
|
|
152
|
+
default: {
|
|
153
|
+
const totalLength = this.buffers.reduce((acc, buf) => acc + buf.length, 0);
|
|
154
|
+
const result = new Uint8Array(totalLength);
|
|
155
|
+
let offset = 0;
|
|
156
|
+
for (const rwBuf of this.buffers) {
|
|
157
|
+
const buf = rwBuf.toBuffer();
|
|
158
|
+
result.set(buf, offset);
|
|
159
|
+
offset += buf.length;
|
|
160
|
+
}
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
_getWritableBuffer() {
|
|
166
|
+
if (this.buffers.length) {
|
|
167
|
+
const last = this.buffers[this.buffers.length - 1];
|
|
168
|
+
if (!last.full) {
|
|
169
|
+
return last;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
const buf = new ReadWriteBuf(this.bufSize);
|
|
173
|
+
this.buffers.push(buf);
|
|
174
|
+
return buf;
|
|
175
|
+
}
|
|
176
|
+
async _pipe(chunk) {
|
|
177
|
+
const write = (pipe) => {
|
|
178
|
+
return new Promise(resolve => {
|
|
179
|
+
pipe.write(chunk.toBuffer(), () => {
|
|
180
|
+
resolve();
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
};
|
|
184
|
+
await Promise.all(this.pipes.map(write));
|
|
185
|
+
}
|
|
186
|
+
_writeToBuffers(chunk) {
|
|
187
|
+
let inPos = 0;
|
|
188
|
+
const inLen = chunk.length;
|
|
189
|
+
while (inPos < inLen) {
|
|
190
|
+
const buffer = this._getWritableBuffer();
|
|
191
|
+
inPos += buffer.write(chunk, inPos, inLen - inPos);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
async write(data, encoding, callback) {
|
|
195
|
+
const nop = () => { };
|
|
196
|
+
if (encoding instanceof Function) {
|
|
197
|
+
callback = encoding;
|
|
198
|
+
encoding = "utf8";
|
|
199
|
+
}
|
|
200
|
+
callback = callback || nop;
|
|
201
|
+
let chunk;
|
|
202
|
+
if (data instanceof StringBuf || (data && data.constructor?.name === "StringBuf")) {
|
|
203
|
+
chunk = new StringBufChunk(data);
|
|
204
|
+
}
|
|
205
|
+
else if (data instanceof Uint8Array) {
|
|
206
|
+
chunk = new BufferChunk(data);
|
|
207
|
+
}
|
|
208
|
+
else if (ArrayBuffer.isView(data)) {
|
|
209
|
+
chunk = new BufferChunk(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));
|
|
210
|
+
}
|
|
211
|
+
else if (data instanceof ArrayBuffer) {
|
|
212
|
+
chunk = new BufferChunk(new Uint8Array(data));
|
|
213
|
+
}
|
|
214
|
+
else if (typeof data === "string" || data instanceof String) {
|
|
215
|
+
chunk = new StringChunk(String(data), encoding);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
throw new Error("Chunk must be one of type String, Uint8Array, ArrayBuffer or StringBuf.");
|
|
219
|
+
}
|
|
220
|
+
if (this.pipes.length) {
|
|
221
|
+
if (this.batch) {
|
|
222
|
+
this._writeToBuffers(chunk);
|
|
223
|
+
while (!this.corked && this.buffers.length > 1) {
|
|
224
|
+
await this._pipe(new BufferChunk(this.buffers.shift().toBuffer()));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
else if (!this.corked) {
|
|
228
|
+
await this._pipe(chunk);
|
|
229
|
+
callback();
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
this._writeToBuffers(chunk);
|
|
233
|
+
queueMicrotask(() => callback());
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
if (!this.paused) {
|
|
238
|
+
this.emit("data", chunk.toBuffer());
|
|
239
|
+
}
|
|
240
|
+
this._writeToBuffers(chunk);
|
|
241
|
+
this.emit("readable");
|
|
242
|
+
}
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
cork() {
|
|
246
|
+
this.corked = true;
|
|
247
|
+
}
|
|
248
|
+
_flush() {
|
|
249
|
+
if (this.pipes.length) {
|
|
250
|
+
while (this.buffers.length) {
|
|
251
|
+
this._pipe(new BufferChunk(this.buffers.shift().toBuffer()));
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
uncork() {
|
|
256
|
+
this.corked = false;
|
|
257
|
+
this._flush();
|
|
258
|
+
}
|
|
259
|
+
end(chunk, encoding, callback) {
|
|
260
|
+
const writeComplete = (error) => {
|
|
261
|
+
if (error) {
|
|
262
|
+
callback?.(error);
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
this._flush();
|
|
266
|
+
this.pipes.forEach((pipe) => {
|
|
267
|
+
pipe.end();
|
|
268
|
+
});
|
|
269
|
+
this.emit("finish");
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
if (chunk) {
|
|
273
|
+
this.write(chunk, encoding, writeComplete);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
writeComplete();
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
read(size) {
|
|
280
|
+
let buffers;
|
|
281
|
+
if (size) {
|
|
282
|
+
buffers = [];
|
|
283
|
+
while (size && this.buffers.length && !this.buffers[0].eod) {
|
|
284
|
+
const first = this.buffers[0];
|
|
285
|
+
const buffer = first.read(size);
|
|
286
|
+
if (buffer) {
|
|
287
|
+
size -= buffer.length;
|
|
288
|
+
buffers.push(buffer);
|
|
289
|
+
}
|
|
290
|
+
if (first.eod && first.full) {
|
|
291
|
+
this.buffers.shift();
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return concatUint8Arrays(buffers);
|
|
295
|
+
}
|
|
296
|
+
buffers = this.buffers.map(buf => buf.toBuffer()).filter(Boolean);
|
|
297
|
+
this.buffers = [];
|
|
298
|
+
return concatUint8Arrays(buffers);
|
|
299
|
+
}
|
|
300
|
+
setEncoding(encoding) {
|
|
301
|
+
this.encoding = encoding;
|
|
302
|
+
}
|
|
303
|
+
pause() {
|
|
304
|
+
this.paused = true;
|
|
305
|
+
}
|
|
306
|
+
resume() {
|
|
307
|
+
this.paused = false;
|
|
308
|
+
}
|
|
309
|
+
isPaused() {
|
|
310
|
+
return this.paused;
|
|
311
|
+
}
|
|
312
|
+
pipe(destination) {
|
|
313
|
+
this.pipes.push(destination);
|
|
314
|
+
if (!this.paused && this.buffers.length) {
|
|
315
|
+
this.end();
|
|
316
|
+
}
|
|
317
|
+
return destination;
|
|
318
|
+
}
|
|
319
|
+
unpipe(destination) {
|
|
320
|
+
this.pipes = this.pipes.filter((pipe) => pipe !== destination);
|
|
321
|
+
}
|
|
322
|
+
unshift() {
|
|
323
|
+
throw new Error("Not Implemented");
|
|
324
|
+
}
|
|
325
|
+
wrap() {
|
|
326
|
+
throw new Error("Not Implemented");
|
|
327
|
+
}
|
|
328
|
+
push(chunk) {
|
|
329
|
+
if (chunk !== null) {
|
|
330
|
+
this.write(chunk);
|
|
331
|
+
}
|
|
332
|
+
return true;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// Helper function to concatenate Uint8Arrays
|
|
336
|
+
function concatUint8Arrays(arrays) {
|
|
337
|
+
if (arrays.length === 0) {
|
|
338
|
+
return new Uint8Array(0);
|
|
339
|
+
}
|
|
340
|
+
if (arrays.length === 1) {
|
|
341
|
+
return arrays[0];
|
|
342
|
+
}
|
|
343
|
+
const totalLength = arrays.reduce((acc, arr) => acc + arr.length, 0);
|
|
344
|
+
const result = new Uint8Array(totalLength);
|
|
345
|
+
let offset = 0;
|
|
346
|
+
for (const arr of arrays) {
|
|
347
|
+
result.set(arr, offset);
|
|
348
|
+
offset += arr.length;
|
|
349
|
+
}
|
|
350
|
+
return result;
|
|
351
|
+
}
|
|
352
|
+
export { StreamBuf };
|
|
@@ -427,6 +427,17 @@ export class ZipParser {
|
|
|
427
427
|
}
|
|
428
428
|
return result;
|
|
429
429
|
}
|
|
430
|
+
/**
|
|
431
|
+
* Extract all files (sync, Node.js only)
|
|
432
|
+
* Returns object with file paths as keys and Uint8Array content as values
|
|
433
|
+
*/
|
|
434
|
+
extractAllSync() {
|
|
435
|
+
const result = {};
|
|
436
|
+
for (const entry of this.entries) {
|
|
437
|
+
result[entry.path] = extractEntryDataSync(this.data, entry);
|
|
438
|
+
}
|
|
439
|
+
return result;
|
|
440
|
+
}
|
|
430
441
|
/**
|
|
431
442
|
* Iterate over entries with async callback
|
|
432
443
|
*/
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base utility functions shared between Node.js and Browser
|
|
3
|
+
* Platform-independent implementations only
|
|
4
|
+
*/
|
|
5
|
+
// =============================================================================
|
|
6
|
+
// Basic utilities
|
|
7
|
+
// =============================================================================
|
|
8
|
+
export function delay(ms) {
|
|
9
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
10
|
+
}
|
|
11
|
+
export function nop() { }
|
|
12
|
+
export const inherits = function (cls, superCtor, statics, prototype) {
|
|
13
|
+
cls.super_ = superCtor;
|
|
14
|
+
if (!prototype) {
|
|
15
|
+
prototype = statics;
|
|
16
|
+
statics = null;
|
|
17
|
+
}
|
|
18
|
+
if (statics) {
|
|
19
|
+
Object.keys(statics).forEach(i => {
|
|
20
|
+
Object.defineProperty(cls, i, Object.getOwnPropertyDescriptor(statics, i));
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
const properties = {
|
|
24
|
+
constructor: {
|
|
25
|
+
value: cls,
|
|
26
|
+
enumerable: false,
|
|
27
|
+
writable: false,
|
|
28
|
+
configurable: true
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
if (prototype) {
|
|
32
|
+
Object.keys(prototype).forEach(i => {
|
|
33
|
+
properties[i] = Object.getOwnPropertyDescriptor(prototype, i);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
cls.prototype = Object.create(superCtor.prototype, properties);
|
|
37
|
+
};
|
|
38
|
+
// =============================================================================
|
|
39
|
+
// Date utilities
|
|
40
|
+
// =============================================================================
|
|
41
|
+
export function dateToExcel(d, date1904) {
|
|
42
|
+
return 25569 + d.getTime() / (24 * 3600 * 1000) - (date1904 ? 1462 : 0);
|
|
43
|
+
}
|
|
44
|
+
export function excelToDate(v, date1904) {
|
|
45
|
+
const millisecondSinceEpoch = Math.round((v - 25569 + (date1904 ? 1462 : 0)) * 24 * 3600 * 1000);
|
|
46
|
+
return new Date(millisecondSinceEpoch);
|
|
47
|
+
}
|
|
48
|
+
export function toIsoDateString(dt) {
|
|
49
|
+
return dt.toISOString().substr(0, 10);
|
|
50
|
+
}
|
|
51
|
+
export function parsePath(filepath) {
|
|
52
|
+
const last = filepath.lastIndexOf("/");
|
|
53
|
+
return {
|
|
54
|
+
path: filepath.substring(0, last),
|
|
55
|
+
name: filepath.substring(last + 1)
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export function getRelsPath(filepath) {
|
|
59
|
+
const path = parsePath(filepath);
|
|
60
|
+
return `${path.path}/_rels/${path.name}.rels`;
|
|
61
|
+
}
|
|
62
|
+
// =============================================================================
|
|
63
|
+
// XML utilities
|
|
64
|
+
// =============================================================================
|
|
65
|
+
const xmlDecodingMap = {
|
|
66
|
+
lt: "<",
|
|
67
|
+
gt: ">",
|
|
68
|
+
amp: "&",
|
|
69
|
+
quot: '"',
|
|
70
|
+
apos: "'"
|
|
71
|
+
};
|
|
72
|
+
export function xmlDecode(text) {
|
|
73
|
+
return text.replace(/&(#\d+|#x[0-9A-Fa-f]+|\w+);/g, (match, entity) => {
|
|
74
|
+
if (entity[0] === "#") {
|
|
75
|
+
// Numeric character reference
|
|
76
|
+
const code = entity[1] === "x" ? parseInt(entity.slice(2), 16) : parseInt(entity.slice(1));
|
|
77
|
+
return String.fromCodePoint(code);
|
|
78
|
+
}
|
|
79
|
+
return xmlDecodingMap[entity] || match;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
// =============================================================================
|
|
83
|
+
// Parsing utilities
|
|
84
|
+
// =============================================================================
|
|
85
|
+
export function validInt(value) {
|
|
86
|
+
const i = typeof value === "number" ? value : parseInt(value, 10);
|
|
87
|
+
return Number.isNaN(i) ? 0 : i;
|
|
88
|
+
}
|
|
89
|
+
export function isDateFmt(fmt) {
|
|
90
|
+
if (!fmt) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
// must not be a string fmt
|
|
94
|
+
if (fmt.indexOf("@") > -1) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
// must remove all chars inside quotes and []
|
|
98
|
+
let cleanFmt = fmt.replace(/\[[^\]]*]/g, "");
|
|
99
|
+
cleanFmt = cleanFmt.replace(/"[^"]*"/g, "");
|
|
100
|
+
// then check for date formatting chars
|
|
101
|
+
return cleanFmt.match(/[ymdhMsb]+/) !== null;
|
|
102
|
+
}
|
|
103
|
+
export function parseBoolean(value) {
|
|
104
|
+
return value === true || value === "true" || value === 1 || value === "1";
|
|
105
|
+
}
|
|
106
|
+
// =============================================================================
|
|
107
|
+
// Collection utilities
|
|
108
|
+
// =============================================================================
|
|
109
|
+
export function* range(start, stop, step = 1) {
|
|
110
|
+
const compareOrder = step > 0 ? (a, b) => a < b : (a, b) => a > b;
|
|
111
|
+
for (let value = start; compareOrder(value, stop); value += step) {
|
|
112
|
+
yield value;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export function toSortedArray(values) {
|
|
116
|
+
const result = Array.from(values);
|
|
117
|
+
// If all numbers, use numeric sort
|
|
118
|
+
if (result.every(item => Number.isFinite(item))) {
|
|
119
|
+
return result.sort((a, b) => a - b);
|
|
120
|
+
}
|
|
121
|
+
return result.sort();
|
|
122
|
+
}
|
|
123
|
+
export function objectFromProps(props, value = null) {
|
|
124
|
+
return props.reduce((result, property) => {
|
|
125
|
+
result[property] = value;
|
|
126
|
+
return result;
|
|
127
|
+
}, {});
|
|
128
|
+
}
|
|
129
|
+
// =============================================================================
|
|
130
|
+
// Buffer utilities (cross-platform)
|
|
131
|
+
// =============================================================================
|
|
132
|
+
const textDecoder = new TextDecoder("utf-8");
|
|
133
|
+
/**
|
|
134
|
+
* Convert a Buffer, ArrayBuffer, or Uint8Array to a UTF-8 string
|
|
135
|
+
* Works in both Node.js and browser environments
|
|
136
|
+
*/
|
|
137
|
+
export function bufferToString(chunk) {
|
|
138
|
+
if (typeof chunk === "string") {
|
|
139
|
+
return chunk;
|
|
140
|
+
}
|
|
141
|
+
return textDecoder.decode(chunk);
|
|
142
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser utility functions
|
|
3
|
+
* Re-exports shared utilities and adds browser-specific implementations
|
|
4
|
+
*/
|
|
5
|
+
// Re-export all shared utilities
|
|
6
|
+
export { delay, nop, inherits, dateToExcel, excelToDate, toIsoDateString, parsePath, getRelsPath, xmlDecode, validInt, isDateFmt, parseBoolean, range, toSortedArray, objectFromProps, bufferToString } from "./utils.base.js";
|
|
7
|
+
// =============================================================================
|
|
8
|
+
// XML encoding (Browser version with full Unicode support)
|
|
9
|
+
// =============================================================================
|
|
10
|
+
const xmlEncodingMap = {
|
|
11
|
+
"<": "<",
|
|
12
|
+
">": ">",
|
|
13
|
+
"&": "&",
|
|
14
|
+
'"': """,
|
|
15
|
+
"'": "'"
|
|
16
|
+
};
|
|
17
|
+
export function xmlEncode(text) {
|
|
18
|
+
// Handles special characters:
|
|
19
|
+
// 1. XML entities: < > & " '
|
|
20
|
+
// 2. Control characters (0x00-0x1F except tab, newline, carriage return)
|
|
21
|
+
// 3. Invalid XML characters: 0xFFFE, 0xFFFF
|
|
22
|
+
// 4. Characters that need escaping in attributes
|
|
23
|
+
// First pass: escape XML entities
|
|
24
|
+
let result = text.replace(/[<>&"']/g, char => xmlEncodingMap[char] || char);
|
|
25
|
+
// Second pass: handle control characters and invalid XML characters
|
|
26
|
+
// Valid XML chars: #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
|
|
27
|
+
// oxlint-disable-next-line no-control-regex
|
|
28
|
+
result = result.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\uFFFE\uFFFF]/g, char => {
|
|
29
|
+
const code = char.charCodeAt(0);
|
|
30
|
+
// For control characters, use numeric character reference
|
|
31
|
+
return `&#x${code.toString(16).toUpperCase()};`;
|
|
32
|
+
});
|
|
33
|
+
// Third pass: handle invalid surrogate pairs
|
|
34
|
+
result = result.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g, () => "\uFFFD" // replacement character
|
|
35
|
+
);
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
// =============================================================================
|
|
39
|
+
// File system utilities (Browser stub - always returns false)
|
|
40
|
+
// =============================================================================
|
|
41
|
+
export function fileExists(_path) {
|
|
42
|
+
return Promise.resolve(false);
|
|
43
|
+
}
|
|
44
|
+
// =============================================================================
|
|
45
|
+
// Legacy export for backward compatibility
|
|
46
|
+
// =============================================================================
|
|
47
|
+
import { nop, inherits, dateToExcel, excelToDate, parsePath, getRelsPath, xmlDecode, validInt, isDateFmt, toIsoDateString, parseBoolean, range, toSortedArray, objectFromProps } from "./utils.base.js";
|
|
48
|
+
/** @deprecated Import functions directly instead of using the utils object */
|
|
49
|
+
export const utils = {
|
|
50
|
+
nop,
|
|
51
|
+
inherits,
|
|
52
|
+
dateToExcel,
|
|
53
|
+
excelToDate,
|
|
54
|
+
parsePath,
|
|
55
|
+
getRelsPath,
|
|
56
|
+
xmlEncode,
|
|
57
|
+
xmlDecode,
|
|
58
|
+
validInt,
|
|
59
|
+
isDateFmt,
|
|
60
|
+
fs: {
|
|
61
|
+
exists: fileExists
|
|
62
|
+
},
|
|
63
|
+
toIsoDateString,
|
|
64
|
+
parseBoolean,
|
|
65
|
+
range,
|
|
66
|
+
toSortedArray,
|
|
67
|
+
objectFromProps
|
|
68
|
+
};
|