@cj-tech-master/excelts 1.6.2-canary.20251224015244.0b06ae9 → 1.6.3-canary.20251224124621.73c5d94
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 +31 -18
- package/README_zh.md +31 -19
- package/dist/browser/excelts.esm.js +19115 -0
- package/dist/browser/excelts.esm.js.map +1 -0
- package/dist/browser/excelts.esm.min.js +127 -0
- package/dist/browser/excelts.iife.js +13576 -46968
- package/dist/browser/excelts.iife.js.map +1 -1
- package/dist/browser/excelts.iife.min.js +25 -105
- 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 +154 -0
- package/dist/cjs/csv/csv.browser.js +68 -0
- package/dist/cjs/csv/csv.js +226 -162
- package/dist/cjs/doc/anchor.js +2 -2
- package/dist/cjs/doc/cell.js +22 -22
- package/dist/cjs/doc/column.js +7 -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 +41 -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 +34 -34
- package/dist/cjs/stream/xlsx/worksheet-reader.js +17 -17
- package/dist/cjs/stream/xlsx/worksheet-writer.js +60 -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/encryptor.browser.js +240 -0
- package/dist/cjs/utils/parse-sax.js +2 -2
- 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 +3 -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 +85 -0
- package/dist/cjs/utils/zip/compress.browser.js +83 -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/index.js +17 -17
- 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-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 +2 -2
- 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 +4 -4
- 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 +68 -68
- 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 +205 -0
- package/dist/cjs/xlsx/xlsx.js +91 -833
- 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 +141 -0
- package/dist/esm/csv/csv.browser.js +65 -0
- package/dist/esm/csv/csv.js +189 -159
- 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/index.browser.js +33 -1
- package/dist/esm/index.js +23 -8
- package/dist/esm/local.js +0 -1
- package/dist/esm/utils/browser-buffer.js +67 -0
- package/dist/esm/utils/encryptor.browser.js +237 -0
- package/dist/esm/utils/stream-buf.browser.js +352 -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 +80 -0
- package/dist/esm/utils/zip/compress.browser.js +76 -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-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/xlsx.base.js +739 -0
- package/dist/esm/xlsx/xlsx.browser.js +202 -0
- package/dist/esm/xlsx/xlsx.js +87 -829
- 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 +61 -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 +3 -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 +10 -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 +6 -6
- package/dist/types/stream/xlsx/worksheet-reader.d.ts +5 -5
- package/dist/types/stream/xlsx/worksheet-writer.d.ts +9 -9
- package/dist/types/utils/browser-buffer.d.ts +28 -0
- package/dist/types/utils/col-cache.d.ts +1 -1
- package/dist/types/utils/encryptor.browser.d.ts +28 -0
- 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/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 +42 -0
- package/dist/types/utils/zip/compress.browser.d.ts +54 -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/index.d.ts +5 -5
- 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-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 +1 -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 +1 -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 +13 -15
|
@@ -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
|
+
};
|
package/dist/esm/utils/utils.js
CHANGED
|
@@ -1,53 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js utility functions
|
|
3
|
+
* Re-exports shared utilities and adds Node.js-specific implementations
|
|
4
|
+
*/
|
|
1
5
|
import fs from "fs";
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
//
|
|
7
|
-
export const inherits = function (cls, superCtor, statics, prototype) {
|
|
8
|
-
cls.super_ = superCtor;
|
|
9
|
-
if (!prototype) {
|
|
10
|
-
prototype = statics;
|
|
11
|
-
statics = null;
|
|
12
|
-
}
|
|
13
|
-
if (statics) {
|
|
14
|
-
Object.keys(statics).forEach(i => {
|
|
15
|
-
Object.defineProperty(cls, i, Object.getOwnPropertyDescriptor(statics, i));
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
const properties = {
|
|
19
|
-
constructor: {
|
|
20
|
-
value: cls,
|
|
21
|
-
enumerable: false,
|
|
22
|
-
writable: false,
|
|
23
|
-
configurable: true
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
if (prototype) {
|
|
27
|
-
Object.keys(prototype).forEach(i => {
|
|
28
|
-
properties[i] = Object.getOwnPropertyDescriptor(prototype, i);
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
cls.prototype = Object.create(superCtor.prototype, properties);
|
|
32
|
-
};
|
|
33
|
-
export function dateToExcel(d, date1904) {
|
|
34
|
-
return 25569 + d.getTime() / (24 * 3600 * 1000) - (date1904 ? 1462 : 0);
|
|
35
|
-
}
|
|
36
|
-
export function excelToDate(v, date1904) {
|
|
37
|
-
const millisecondSinceEpoch = Math.round((v - 25569 + (date1904 ? 1462 : 0)) * 24 * 3600 * 1000);
|
|
38
|
-
return new Date(millisecondSinceEpoch);
|
|
39
|
-
}
|
|
40
|
-
export function parsePath(filepath) {
|
|
41
|
-
const last = filepath.lastIndexOf("/");
|
|
42
|
-
return {
|
|
43
|
-
path: filepath.substring(0, last),
|
|
44
|
-
name: filepath.substring(last + 1)
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
export function getRelsPath(filepath) {
|
|
48
|
-
const path = parsePath(filepath);
|
|
49
|
-
return `${path.path}/_rels/${path.name}.rels`;
|
|
50
|
-
}
|
|
6
|
+
// Re-export all shared utilities
|
|
7
|
+
export { delay, nop, inherits, dateToExcel, excelToDate, toIsoDateString, parsePath, getRelsPath, xmlDecode, validInt, isDateFmt, parseBoolean, range, toSortedArray, objectFromProps, bufferToString } from "./utils.base.js";
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// XML encoding (Node.js optimized version)
|
|
10
|
+
// =============================================================================
|
|
51
11
|
// oxlint-disable-next-line no-control-regex -- Control characters are intentionally matched for XML encoding
|
|
52
12
|
const xmlDecodeRegex = /[<>&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/;
|
|
53
13
|
export function xmlEncode(text) {
|
|
@@ -101,39 +61,9 @@ export function xmlEncode(text) {
|
|
|
101
61
|
}
|
|
102
62
|
return result;
|
|
103
63
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
case "<":
|
|
108
|
-
return "<";
|
|
109
|
-
case ">":
|
|
110
|
-
return ">";
|
|
111
|
-
case "&":
|
|
112
|
-
return "&";
|
|
113
|
-
case "'":
|
|
114
|
-
return "'";
|
|
115
|
-
case """:
|
|
116
|
-
return '"';
|
|
117
|
-
default:
|
|
118
|
-
return c;
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
export function validInt(value) {
|
|
123
|
-
const i = parseInt(value, 10);
|
|
124
|
-
return !Number.isNaN(i) ? i : 0;
|
|
125
|
-
}
|
|
126
|
-
export function isDateFmt(fmt) {
|
|
127
|
-
if (!fmt) {
|
|
128
|
-
return false;
|
|
129
|
-
}
|
|
130
|
-
// must remove all chars inside quotes and []
|
|
131
|
-
fmt = fmt.replace(/\[[^\]]*]/g, "");
|
|
132
|
-
fmt = fmt.replace(/"[^"]*"/g, "");
|
|
133
|
-
// then check for date formatting chars
|
|
134
|
-
const result = fmt.match(/[ymdhMsb]+/) !== null;
|
|
135
|
-
return result;
|
|
136
|
-
}
|
|
64
|
+
// =============================================================================
|
|
65
|
+
// File system utilities (Node.js only)
|
|
66
|
+
// =============================================================================
|
|
137
67
|
export function fileExists(path) {
|
|
138
68
|
return new Promise(resolve => {
|
|
139
69
|
fs.access(path, fs.constants.F_OK, err => {
|
|
@@ -141,36 +71,10 @@ export function fileExists(path) {
|
|
|
141
71
|
});
|
|
142
72
|
});
|
|
143
73
|
}
|
|
144
|
-
|
|
145
|
-
return dt.toISOString().substr(0, 10);
|
|
146
|
-
}
|
|
147
|
-
export function parseBoolean(value) {
|
|
148
|
-
return value === true || value === "true" || value === 1 || value === "1";
|
|
149
|
-
}
|
|
150
|
-
export function* range(start, stop, step = 1) {
|
|
151
|
-
const compareOrder = step > 0 ? (a, b) => a < b : (a, b) => a > b;
|
|
152
|
-
for (let value = start; compareOrder(value, stop); value += step) {
|
|
153
|
-
yield value;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
export function toSortedArray(values) {
|
|
157
|
-
const result = Array.from(values);
|
|
158
|
-
// Note: per default, `Array.prototype.sort()` converts values
|
|
159
|
-
// to strings when comparing. Here, if we have numbers, we use
|
|
160
|
-
// numeric sort.
|
|
161
|
-
if (result.every(item => Number.isFinite(item))) {
|
|
162
|
-
const compareNumbers = (a, b) => a - b;
|
|
163
|
-
return result.sort(compareNumbers);
|
|
164
|
-
}
|
|
165
|
-
return result.sort();
|
|
166
|
-
}
|
|
167
|
-
export function objectFromProps(props, value = null) {
|
|
168
|
-
return props.reduce((result, property) => {
|
|
169
|
-
result[property] = value;
|
|
170
|
-
return result;
|
|
171
|
-
}, {});
|
|
172
|
-
}
|
|
74
|
+
// =============================================================================
|
|
173
75
|
// Legacy export for backward compatibility
|
|
76
|
+
// =============================================================================
|
|
77
|
+
import { nop, inherits, dateToExcel, excelToDate, parsePath, getRelsPath, xmlDecode, validInt, isDateFmt, toIsoDateString, parseBoolean, range, toSortedArray, objectFromProps } from "./utils.base.js";
|
|
174
78
|
/** @deprecated Import functions directly instead of using the utils object */
|
|
175
79
|
export const utils = {
|
|
176
80
|
nop,
|
|
@@ -192,15 +96,3 @@ export const utils = {
|
|
|
192
96
|
toSortedArray,
|
|
193
97
|
objectFromProps
|
|
194
98
|
};
|
|
195
|
-
// TextDecoder is available in ES2020+ and all modern browsers/Node.js
|
|
196
|
-
const textDecoder = new TextDecoder("utf-8");
|
|
197
|
-
/**
|
|
198
|
-
* Convert a Buffer or ArrayBuffer to a UTF-8 string
|
|
199
|
-
* Works in both Node.js and browser environments
|
|
200
|
-
*/
|
|
201
|
-
export function bufferToString(chunk) {
|
|
202
|
-
if (typeof chunk === "string") {
|
|
203
|
-
return chunk;
|
|
204
|
-
}
|
|
205
|
-
return textDecoder.decode(chunk);
|
|
206
|
-
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base compression utilities using Web Streams API
|
|
3
|
+
* Shared between Node.js and Browser implementations
|
|
4
|
+
*
|
|
5
|
+
* Uses CompressionStream/DecompressionStream API with "deflate-raw" format
|
|
6
|
+
* (raw DEFLATE without zlib header/trailer, required for ZIP files)
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Check if CompressionStream is available
|
|
10
|
+
*/
|
|
11
|
+
export function hasCompressionStream() {
|
|
12
|
+
return typeof CompressionStream !== "undefined";
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Compress using CompressionStream API
|
|
16
|
+
* Uses "deflate-raw" format (required for ZIP files)
|
|
17
|
+
*
|
|
18
|
+
* @param data - Data to compress
|
|
19
|
+
* @returns Compressed data
|
|
20
|
+
*/
|
|
21
|
+
export async function compressWithStream(data) {
|
|
22
|
+
const cs = new CompressionStream("deflate-raw");
|
|
23
|
+
const writer = cs.writable.getWriter();
|
|
24
|
+
const reader = cs.readable.getReader();
|
|
25
|
+
// Write data and close
|
|
26
|
+
writer.write(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));
|
|
27
|
+
writer.close();
|
|
28
|
+
// Read all compressed chunks
|
|
29
|
+
const chunks = [];
|
|
30
|
+
let totalLength = 0;
|
|
31
|
+
while (true) {
|
|
32
|
+
const { done, value } = await reader.read();
|
|
33
|
+
if (done) {
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
chunks.push(value);
|
|
37
|
+
totalLength += value.length;
|
|
38
|
+
}
|
|
39
|
+
// Combine chunks into single array
|
|
40
|
+
const result = new Uint8Array(totalLength);
|
|
41
|
+
let offset = 0;
|
|
42
|
+
for (const chunk of chunks) {
|
|
43
|
+
result.set(chunk, offset);
|
|
44
|
+
offset += chunk.length;
|
|
45
|
+
}
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Decompress using DecompressionStream API
|
|
50
|
+
*
|
|
51
|
+
* @param data - Compressed data (deflate-raw format)
|
|
52
|
+
* @returns Decompressed data
|
|
53
|
+
*/
|
|
54
|
+
export async function decompressWithStream(data) {
|
|
55
|
+
const ds = new DecompressionStream("deflate-raw");
|
|
56
|
+
const writer = ds.writable.getWriter();
|
|
57
|
+
const reader = ds.readable.getReader();
|
|
58
|
+
// Write data and close
|
|
59
|
+
writer.write(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));
|
|
60
|
+
writer.close();
|
|
61
|
+
// Read all decompressed chunks
|
|
62
|
+
const chunks = [];
|
|
63
|
+
let totalLength = 0;
|
|
64
|
+
while (true) {
|
|
65
|
+
const { done, value } = await reader.read();
|
|
66
|
+
if (done) {
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
chunks.push(value);
|
|
70
|
+
totalLength += value.length;
|
|
71
|
+
}
|
|
72
|
+
// Combine chunks into single array
|
|
73
|
+
const result = new Uint8Array(totalLength);
|
|
74
|
+
let offset = 0;
|
|
75
|
+
for (const chunk of chunks) {
|
|
76
|
+
result.set(chunk, offset);
|
|
77
|
+
offset += chunk.length;
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser compression utilities using Web Streams API
|
|
3
|
+
*
|
|
4
|
+
* Uses CompressionStream API (Chrome 80+, Firefox 113+, Safari 16.4+)
|
|
5
|
+
* with "deflate-raw" format (required for ZIP files)
|
|
6
|
+
*/
|
|
7
|
+
import { hasCompressionStream, compressWithStream, decompressWithStream } from "./compress.base.js";
|
|
8
|
+
// Re-export shared types and utilities
|
|
9
|
+
export { hasCompressionStream };
|
|
10
|
+
/**
|
|
11
|
+
* Check if native zlib is available (always false in browser)
|
|
12
|
+
*/
|
|
13
|
+
export function hasNativeZlib() {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Compress data using browser's native CompressionStream
|
|
18
|
+
*
|
|
19
|
+
* @param data - Data to compress
|
|
20
|
+
* @param options - Compression options
|
|
21
|
+
* @returns Compressed data
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* const data = new TextEncoder().encode("Hello, World!");
|
|
26
|
+
* const compressed = await compress(data, { level: 6 });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export async function compress(data, options = {}) {
|
|
30
|
+
const level = options.level ?? 6;
|
|
31
|
+
// Level 0 means no compression
|
|
32
|
+
if (level === 0) {
|
|
33
|
+
return data;
|
|
34
|
+
}
|
|
35
|
+
// Use CompressionStream
|
|
36
|
+
if (typeof CompressionStream !== "undefined") {
|
|
37
|
+
return compressWithStream(data);
|
|
38
|
+
}
|
|
39
|
+
// No compression available - return original data
|
|
40
|
+
console.warn("No native compression available, returning uncompressed data");
|
|
41
|
+
return data;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Compress data synchronously
|
|
45
|
+
* Not available in browser - throws error
|
|
46
|
+
*
|
|
47
|
+
* @param _data - Data to compress
|
|
48
|
+
* @param _options - Compression options
|
|
49
|
+
* @throws Error always - sync compression not available in browser
|
|
50
|
+
*/
|
|
51
|
+
export function compressSync(_data, _options = {}) {
|
|
52
|
+
throw new Error("Synchronous compression is not available in browser environment");
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Decompress data using browser's native DecompressionStream
|
|
56
|
+
*
|
|
57
|
+
* @param data - Compressed data (deflate-raw format)
|
|
58
|
+
* @returns Decompressed data
|
|
59
|
+
*/
|
|
60
|
+
export async function decompress(data) {
|
|
61
|
+
// Use DecompressionStream
|
|
62
|
+
if (typeof DecompressionStream !== "undefined") {
|
|
63
|
+
return decompressWithStream(data);
|
|
64
|
+
}
|
|
65
|
+
throw new Error("No native decompression available in browser");
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Decompress data synchronously
|
|
69
|
+
* Not available in browser - throws error
|
|
70
|
+
*
|
|
71
|
+
* @param _data - Compressed data
|
|
72
|
+
* @throws Error always - sync decompression not available in browser
|
|
73
|
+
*/
|
|
74
|
+
export function decompressSync(_data) {
|
|
75
|
+
throw new Error("Synchronous decompression is not available in browser environment");
|
|
76
|
+
}
|