ooxml-core 1.20.0 → 1.22.0
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 +35 -0
- package/dist/{PptxHandler-TEKISCJO.cjs → PptxHandler-DNSXWTQV.cjs} +3 -3
- package/dist/{PptxHandler-FYD7IYXT.mjs → PptxHandler-FSKKPZZC.mjs} +3 -3
- package/dist/PptxHandler-H7MEWJJJ.mjs +4 -0
- package/dist/{PresentationBuilder-IMB4DVRN.mjs → PresentationBuilder-7TSENZTX.mjs} +2 -2
- package/dist/{PresentationBuilder-NCKASKXU.cjs → PresentationBuilder-A5NI35VN.cjs} +5 -5
- package/dist/{PresentationBuilder-EYI6Z2JP.mjs → PresentationBuilder-RIJWQSEU.mjs} +3 -3
- package/dist/automation/docx-forms.d.ts +26 -0
- package/dist/automation/docx-forms.d.ts.map +1 -0
- package/dist/automation/index.cjs +39159 -14352
- package/dist/automation/index.d.ts +5 -0
- package/dist/automation/index.d.ts.map +1 -1
- package/dist/automation/index.mjs +39145 -14353
- package/dist/automation/node.cjs +37 -0
- package/dist/automation/node.d.ts +32 -1
- package/dist/automation/node.d.ts.map +1 -1
- package/dist/automation/node.mjs +36 -1
- package/dist/automation/proposal.d.ts +25 -0
- package/dist/automation/proposal.d.ts.map +1 -0
- package/dist/automation/tools/define.d.ts +27 -0
- package/dist/automation/tools/define.d.ts.map +1 -0
- package/dist/automation/tools/docx-tools.d.ts +4 -0
- package/dist/automation/tools/docx-tools.d.ts.map +1 -0
- package/dist/automation/tools/index.d.ts +16 -0
- package/dist/automation/tools/index.d.ts.map +1 -0
- package/dist/automation/tools/types.d.ts +52 -0
- package/dist/automation/tools/types.d.ts.map +1 -0
- package/dist/automation/tools/visio-tools.d.ts +4 -0
- package/dist/automation/tools/visio-tools.d.ts.map +1 -0
- package/dist/automation/tools/xlsx-tools.d.ts +8 -0
- package/dist/automation/tools/xlsx-tools.d.ts.map +1 -0
- package/dist/automation/xlsx-edits.d.ts +88 -0
- package/dist/automation/xlsx-edits.d.ts.map +1 -0
- package/dist/automation/xlsx-proposal.d.ts +34 -0
- package/dist/automation/xlsx-proposal.d.ts.map +1 -0
- package/dist/automation/xlsx.d.ts +10 -5
- package/dist/automation/xlsx.d.ts.map +1 -1
- package/dist/chart/axis-range.d.ts.map +1 -1
- package/dist/chart/bubble-radius.d.ts +0 -5
- package/dist/chart/bubble-radius.d.ts.map +1 -1
- package/dist/chart/extent.d.ts +9 -0
- package/dist/chart/extent.d.ts.map +1 -0
- package/dist/chart/histogram-binning.d.ts.map +1 -1
- package/dist/chart/index.cjs +56 -18
- package/dist/chart/index.mjs +56 -18
- package/dist/chart/render/chart-svg-cartesian.d.ts.map +1 -1
- package/dist/chart/render/chart-svg-legend.d.ts.map +1 -1
- package/dist/chart/render/chart-view-ex.d.ts.map +1 -1
- package/dist/chart/render/chart-view.d.ts.map +1 -1
- package/dist/chart/trendline-fit.d.ts.map +1 -1
- package/dist/{chunk-3IENHIFD.cjs → chunk-4LZIUJI3.cjs} +52 -12
- package/dist/{chunk-LEV2SVMK.mjs → chunk-4QPOJCJG.mjs} +45 -8
- package/dist/{chunk-CC5UNZOO.mjs → chunk-6IIMI5RS.mjs} +52 -12
- package/dist/{chunk-MN27HKHM.mjs → chunk-BA7Z6ATM.mjs} +5 -5
- package/dist/{chunk-LVM3IZJ2.mjs → chunk-DLFMCZZT.mjs} +1 -1
- package/dist/{chunk-M4XLF4R7.mjs → chunk-GBKBR4CX.mjs} +20 -8
- package/dist/{chunk-NXKATFM5.cjs → chunk-HL3FBJ6X.cjs} +1065 -1016
- package/dist/{chunk-WXY5EDGT.mjs → chunk-LF5E5ZOH.mjs} +51 -2
- package/dist/chunk-MHNETXQB.mjs +1 -0
- package/dist/{chunk-MNXKRXFB.mjs → chunk-Q5PKBQXH.mjs} +52 -3
- package/dist/{chunk-GQYQQ3GA.mjs → chunk-VQF6HQEE.mjs} +1 -1
- package/dist/collab/embedding.d.ts +108 -0
- package/dist/collab/embedding.d.ts.map +1 -0
- package/dist/collab/index.cjs +423 -293
- package/dist/collab/index.d.ts +2 -0
- package/dist/collab/index.d.ts.map +1 -1
- package/dist/collab/index.mjs +415 -294
- package/dist/collab/webrtc-provider.d.ts +21 -0
- package/dist/collab/webrtc-provider.d.ts.map +1 -0
- package/dist/color/theme-palette.d.ts +5 -1
- package/dist/color/theme-palette.d.ts.map +1 -1
- package/dist/crypto/index.cjs +27 -2
- package/dist/crypto/index.mjs +27 -2
- package/dist/diagram/index.cjs +31 -3
- package/dist/diagram/index.mjs +31 -3
- package/dist/docx/block-parser.d.ts.map +1 -1
- package/dist/docx/cell-blocks.d.ts +7 -1
- package/dist/docx/cell-blocks.d.ts.map +1 -1
- package/dist/docx/content-control-edit.d.ts +14 -0
- package/dist/docx/content-control-edit.d.ts.map +1 -1
- package/dist/docx/content-control-model.d.ts +8 -0
- package/dist/docx/content-control-model.d.ts.map +1 -1
- package/dist/docx/content-control-values.d.ts +20 -0
- package/dist/docx/content-control-values.d.ts.map +1 -0
- package/dist/docx/content-control.d.ts +7 -1
- package/dist/docx/content-control.d.ts.map +1 -1
- package/dist/docx/element-order.d.ts +10 -5
- package/dist/docx/element-order.d.ts.map +1 -1
- package/dist/docx/embedded.cjs +3861 -1379
- package/dist/docx/embedded.mjs +3861 -1379
- package/dist/docx/field-instruction.d.ts +22 -0
- package/dist/docx/field-instruction.d.ts.map +1 -0
- package/dist/docx/form-field-model.d.ts +48 -0
- package/dist/docx/form-field-model.d.ts.map +1 -0
- package/dist/docx/form-fields.d.ts +31 -0
- package/dist/docx/form-fields.d.ts.map +1 -0
- package/dist/docx/form-fill-fields.d.ts +61 -0
- package/dist/docx/form-fill-fields.d.ts.map +1 -0
- package/dist/docx/form-fill-labels.d.ts +8 -0
- package/dist/docx/form-fill-labels.d.ts.map +1 -0
- package/dist/docx/form-fill-sites.d.ts +59 -0
- package/dist/docx/form-fill-sites.d.ts.map +1 -0
- package/dist/docx/form-fill-values.d.ts +28 -0
- package/dist/docx/form-fill-values.d.ts.map +1 -0
- package/dist/docx/form-fill-write.d.ts +26 -0
- package/dist/docx/form-fill-write.d.ts.map +1 -0
- package/dist/docx/glossary.d.ts +15 -0
- package/dist/docx/glossary.d.ts.map +1 -0
- package/dist/docx/index.cjs +5929 -3153
- package/dist/docx/index.d.ts +7 -0
- package/dist/docx/index.d.ts.map +1 -1
- package/dist/docx/index.mjs +5913 -3154
- package/dist/docx/inline-annotations.d.ts +21 -0
- package/dist/docx/inline-annotations.d.ts.map +1 -0
- package/dist/docx/inline-container-markers.d.ts +14 -0
- package/dist/docx/inline-container-markers.d.ts.map +1 -0
- package/dist/docx/inline-containers.d.ts +54 -0
- package/dist/docx/inline-containers.d.ts.map +1 -0
- package/dist/docx/inline-form-field-bookmarks.d.ts +15 -0
- package/dist/docx/inline-form-field-bookmarks.d.ts.map +1 -0
- package/dist/docx/inline-marker-positions.d.ts +15 -0
- package/dist/docx/inline-marker-positions.d.ts.map +1 -0
- package/dist/docx/inline-markers.d.ts +63 -0
- package/dist/docx/inline-markers.d.ts.map +1 -0
- package/dist/docx/inline-slots.d.ts +24 -0
- package/dist/docx/inline-slots.d.ts.map +1 -0
- package/dist/docx/layout/adapter.d.ts.map +1 -1
- package/dist/docx/layout/index.cjs +1176 -563
- package/dist/docx/layout/index.d.ts +2 -1
- package/dist/docx/layout/index.d.ts.map +1 -1
- package/dist/docx/layout/index.mjs +1175 -564
- package/dist/docx/layout/input.d.ts +5 -1
- package/dist/docx/layout/input.d.ts.map +1 -1
- package/dist/docx/layout/page-style-refs.d.ts +21 -0
- package/dist/docx/layout/page-style-refs.d.ts.map +1 -0
- package/dist/docx/layout/paragraph-fragments.d.ts.map +1 -1
- package/dist/docx/layout/result.d.ts +1 -0
- package/dist/docx/layout/result.d.ts.map +1 -1
- package/dist/docx/layout/tab-stops.d.ts +8 -1
- package/dist/docx/layout/tab-stops.d.ts.map +1 -1
- package/dist/docx/load/index.cjs +3969 -1487
- package/dist/docx/load/index.mjs +3969 -1487
- package/dist/docx/model-run.d.ts +24 -2
- package/dist/docx/model-run.d.ts.map +1 -1
- package/dist/docx/model.d.ts +5 -0
- package/dist/docx/model.d.ts.map +1 -1
- package/dist/docx/numbering-format.d.ts.map +1 -1
- package/dist/docx/parse-warnings.d.ts.map +1 -1
- package/dist/docx/parse.d.ts.map +1 -1
- package/dist/docx/run-segmentation.d.ts +11 -0
- package/dist/docx/run-segmentation.d.ts.map +1 -0
- package/dist/docx/save.d.ts.map +1 -1
- package/dist/docx/section-model.d.ts +5 -0
- package/dist/docx/section-model.d.ts.map +1 -1
- package/dist/docx/sections.d.ts +4 -2
- package/dist/docx/sections.d.ts.map +1 -1
- package/dist/docx/settings.d.ts +9 -0
- package/dist/docx/settings.d.ts.map +1 -1
- package/dist/docx/special-characters.d.ts +34 -0
- package/dist/docx/special-characters.d.ts.map +1 -0
- package/dist/docx/style-ref-fields.d.ts +40 -0
- package/dist/docx/style-ref-fields.d.ts.map +1 -0
- package/dist/docx/style-ref.d.ts +85 -0
- package/dist/docx/style-ref.d.ts.map +1 -0
- package/dist/docx/table-model.d.ts +2 -2
- package/dist/docx/table-model.d.ts.map +1 -1
- package/dist/docx/ui/break-note-schema.d.ts.map +1 -1
- package/dist/docx/ui/content-control-commands.d.ts +20 -8
- package/dist/docx/ui/content-control-commands.d.ts.map +1 -1
- package/dist/docx/ui/content-control-guard.d.ts +4 -1
- package/dist/docx/ui/content-control-guard.d.ts.map +1 -1
- package/dist/docx/ui/content-control-paste.d.ts +23 -0
- package/dist/docx/ui/content-control-paste.d.ts.map +1 -0
- package/dist/docx/ui/content-control-rows.d.ts +15 -0
- package/dist/docx/ui/content-control-rows.d.ts.map +1 -0
- package/dist/docx/ui/content-control-sources.d.ts +12 -0
- package/dist/docx/ui/content-control-sources.d.ts.map +1 -0
- package/dist/docx/ui/content-control-spans.d.ts +29 -6
- package/dist/docx/ui/content-control-spans.d.ts.map +1 -1
- package/dist/docx/ui/content-control-temporary.d.ts +10 -0
- package/dist/docx/ui/content-control-temporary.d.ts.map +1 -0
- package/dist/docx/ui/form-field-commands.d.ts +41 -0
- package/dist/docx/ui/form-field-commands.d.ts.map +1 -0
- package/dist/docx/ui/form-field-guard.d.ts +24 -0
- package/dist/docx/ui/form-field-guard.d.ts.map +1 -0
- package/dist/docx/ui/form-text-blank.d.ts +18 -0
- package/dist/docx/ui/form-text-blank.d.ts.map +1 -0
- package/dist/docx/ui/index.cjs +9276 -7132
- package/dist/docx/ui/index.d.ts +5 -0
- package/dist/docx/ui/index.d.ts.map +1 -1
- package/dist/docx/ui/index.mjs +9259 -7137
- package/dist/docx/ui/positional-tab-input.d.ts +7 -0
- package/dist/docx/ui/positional-tab-input.d.ts.map +1 -0
- package/dist/docx/ui/run-compare.d.ts.map +1 -1
- package/dist/docx/ui/run-extra-mark.d.ts +1 -1
- package/dist/docx/ui/run-extra-mark.d.ts.map +1 -1
- package/dist/docx/ui/schema-marks.d.ts +1 -1
- package/dist/docx/ui/schema-marks.d.ts.map +1 -1
- package/dist/docx/ui/symbol-font.d.ts +4 -0
- package/dist/docx/ui/symbol-font.d.ts.map +1 -0
- package/dist/docx/ui/yjs-collaboration.d.ts +12 -1
- package/dist/docx/ui/yjs-collaboration.d.ts.map +1 -1
- package/dist/docx/write-block-placement.d.ts +7 -0
- package/dist/docx/write-block-placement.d.ts.map +1 -1
- package/dist/docx/write-content-control.d.ts +6 -0
- package/dist/docx/write-content-control.d.ts.map +1 -1
- package/dist/docx/write-header-footer.d.ts +6 -2
- package/dist/docx/write-header-footer.d.ts.map +1 -1
- package/dist/docx/write-inline.d.ts +12 -16
- package/dist/docx/write-inline.d.ts.map +1 -1
- package/dist/docx/write-paragraph.d.ts.map +1 -1
- package/dist/docx/write-revisions.d.ts.map +1 -1
- package/dist/docx/write-run.d.ts.map +1 -1
- package/dist/docx/write-section-properties.d.ts +5 -0
- package/dist/docx/write-section-properties.d.ts.map +1 -0
- package/dist/docx/write-sections.d.ts.map +1 -1
- package/dist/docx/write-table-controls.d.ts +15 -0
- package/dist/docx/write-table-controls.d.ts.map +1 -0
- package/dist/docx/write-table-properties.d.ts.map +1 -1
- package/dist/docx/write-table.d.ts.map +1 -1
- package/dist/docx/write.d.ts.map +1 -1
- package/dist/docx/xml.d.ts +6 -0
- package/dist/docx/xml.d.ts.map +1 -1
- package/dist/drawingml/index.cjs +31 -3
- package/dist/drawingml/index.mjs +31 -3
- package/dist/index.cjs +77 -26
- package/dist/index.mjs +77 -26
- package/dist/math/index.cjs +27 -2
- package/dist/math/index.mjs +27 -2
- package/dist/opc/index.cjs +51 -11
- package/dist/opc/index.mjs +51 -11
- package/dist/opc/zip-folders.d.ts +11 -0
- package/dist/opc/zip-folders.d.ts.map +1 -0
- package/dist/opc/zip-limits.d.ts +9 -0
- package/dist/opc/zip-limits.d.ts.map +1 -1
- package/dist/pptx/automation/index.cjs +28818 -7388
- package/dist/pptx/automation/index.d.ts +93 -3
- package/dist/pptx/automation/index.d.ts.map +1 -1
- package/dist/pptx/automation/index.mjs +740 -63
- package/dist/pptx/automation/schemas/chart-formatting-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/chart-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/chart-user-shape-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/element-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/export-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/geometry-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/hyperlink-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/index.mjs +1 -0
- package/dist/pptx/automation/schemas/json-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/layout-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/lock-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/metadata-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/ole-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/presentation-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/section-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/slide-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/smartart-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/table-style-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/template-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/theme-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/validation-schemas.d.ts +1 -1
- package/dist/pptx/chunks/{index-CgFX0T7b.d.ts → index-CPhsd7Df.d.ts} +9 -1
- package/dist/pptx/chunks/{index-CgFX0T7b.d.ts.map → index-CPhsd7Df.d.ts.map} +1 -1
- package/dist/pptx/chunks/{index-qwVYoFn6.d.ts → index-Q5mM8kIR.d.ts} +2 -2
- package/dist/pptx/chunks/{index-qwVYoFn6.d.ts.map → index-Q5mM8kIR.d.ts.map} +1 -1
- package/dist/pptx/chunks/{schemas-CWr181Wx.d.ts → schemas-fuDGetRe.d.ts} +2 -2
- package/dist/pptx/chunks/{schemas-CWr181Wx.d.ts.map → schemas-fuDGetRe.d.ts.map} +1 -1
- package/dist/pptx/cli/index.cjs +116 -17
- package/dist/pptx/cli/index.mjs +5 -5
- package/dist/pptx/converter/index.cjs +12 -3
- package/dist/pptx/converter/index.d.ts +1 -1
- package/dist/pptx/converter/index.mjs +3 -3
- package/dist/pptx/editor/render/find-replace.cjs +14 -14
- package/dist/pptx/editor/render/find-replace.d.ts +1 -1
- package/dist/pptx/editor/render/find-replace.mjs +1 -1
- package/dist/pptx/editor/render/slide-operations.cjs +8 -8
- package/dist/pptx/editor/render/slide-operations.mjs +2 -2
- package/dist/pptx/index.cjs +116 -17
- package/dist/pptx/index.d.ts +2 -2
- package/dist/pptx/index.mjs +6 -6
- package/dist/pptx/signature-node/index.cjs +20 -8
- package/dist/pptx/signature-node/index.mjs +2 -2
- package/dist/teams/index.cjs +105 -70
- package/dist/teams/index.mjs +105 -70
- package/dist/text/text-diff.d.ts +15 -0
- package/dist/text/text-diff.d.ts.map +1 -0
- package/dist/visio/collab/bind.d.ts +44 -0
- package/dist/visio/collab/bind.d.ts.map +1 -0
- package/dist/visio/collab/compose.d.ts +15 -0
- package/dist/visio/collab/compose.d.ts.map +1 -0
- package/dist/visio/collab/index.cjs +1194 -0
- package/dist/visio/collab/index.d.ts +8 -0
- package/dist/visio/collab/index.d.ts.map +1 -0
- package/dist/visio/collab/index.mjs +1152 -0
- package/dist/visio/collab/keys.d.ts +22 -0
- package/dist/visio/collab/keys.d.ts.map +1 -0
- package/dist/visio/collab/order.d.ts +11 -0
- package/dist/visio/collab/order.d.ts.map +1 -0
- package/dist/visio/collab/package.d.ts +37 -0
- package/dist/visio/collab/package.d.ts.map +1 -0
- package/dist/visio/collab/read.d.ts +41 -0
- package/dist/visio/collab/read.d.ts.map +1 -0
- package/dist/visio/collab/scan.d.ts +28 -0
- package/dist/visio/collab/scan.d.ts.map +1 -0
- package/dist/visio/collab/schema.d.ts +70 -0
- package/dist/visio/collab/schema.d.ts.map +1 -0
- package/dist/visio/collab/snapshot.d.ts +61 -0
- package/dist/visio/collab/snapshot.d.ts.map +1 -0
- package/dist/visio/collab/write.d.ts +20 -0
- package/dist/visio/collab/write.d.ts.map +1 -0
- package/dist/visio/index.cjs +159 -39
- package/dist/visio/index.mjs +159 -39
- package/dist/visio/ui/collab-options.d.ts +24 -0
- package/dist/visio/ui/collab-options.d.ts.map +1 -0
- package/dist/visio/ui/collab-presence.d.ts +31 -0
- package/dist/visio/ui/collab-presence.d.ts.map +1 -0
- package/dist/visio/ui/contract.d.ts +9 -3
- package/dist/visio/ui/contract.d.ts.map +1 -1
- package/dist/visio/ui/document-history.d.ts +3 -1
- package/dist/visio/ui/document-history.d.ts.map +1 -1
- package/dist/visio/ui/index.cjs +284 -95
- package/dist/visio/ui/index.d.ts +2 -0
- package/dist/visio/ui/index.d.ts.map +1 -1
- package/dist/visio/ui/index.mjs +278 -95
- package/dist/xlsx/collab/index.cjs +8 -3
- package/dist/xlsx/collab/index.mjs +8 -3
- package/dist/xlsx/compare/cells.d.ts +22 -0
- package/dist/xlsx/compare/cells.d.ts.map +1 -0
- package/dist/xlsx/compare/compare.d.ts +12 -0
- package/dist/xlsx/compare/compare.d.ts.map +1 -0
- package/dist/xlsx/compare/conditional.d.ts +7 -0
- package/dist/xlsx/compare/conditional.d.ts.map +1 -0
- package/dist/xlsx/compare/format-key.d.ts +34 -0
- package/dist/xlsx/compare/format-key.d.ts.map +1 -0
- package/dist/xlsx/compare/group.d.ts +8 -0
- package/dist/xlsx/compare/group.d.ts.map +1 -0
- package/dist/xlsx/compare/index.d.ts +5 -0
- package/dist/xlsx/compare/index.d.ts.map +1 -0
- package/dist/xlsx/compare/rich-text.d.ts +7 -0
- package/dist/xlsx/compare/rich-text.d.ts.map +1 -0
- package/dist/xlsx/compare/sheets.d.ts +22 -0
- package/dist/xlsx/compare/sheets.d.ts.map +1 -0
- package/dist/xlsx/compare/structure.d.ts +11 -0
- package/dist/xlsx/compare/structure.d.ts.map +1 -0
- package/dist/xlsx/compare/text.d.ts +8 -0
- package/dist/xlsx/compare/text.d.ts.map +1 -0
- package/dist/xlsx/compare/types.d.ts +173 -0
- package/dist/xlsx/compare/types.d.ts.map +1 -0
- package/dist/xlsx/edit/cell-values.d.ts.map +1 -1
- package/dist/xlsx/edit/clipboard-html.d.ts.map +1 -1
- package/dist/xlsx/edit/clipboard-text.d.ts.map +1 -1
- package/dist/xlsx/edit/clipboard.d.ts.map +1 -1
- package/dist/xlsx/edit/clone-cell.d.ts +9 -0
- package/dist/xlsx/edit/clone-cell.d.ts.map +1 -0
- package/dist/xlsx/edit/history.d.ts +8 -3
- package/dist/xlsx/edit/history.d.ts.map +1 -1
- package/dist/xlsx/edit/timelines.d.ts.map +1 -1
- package/dist/xlsx/formula/change-areas.d.ts +9 -0
- package/dist/xlsx/formula/change-areas.d.ts.map +1 -0
- package/dist/xlsx/formula/engine-prepare.d.ts +8 -0
- package/dist/xlsx/formula/engine-prepare.d.ts.map +1 -1
- package/dist/xlsx/formula/engine.d.ts.map +1 -1
- package/dist/xlsx/formula/spill.d.ts +5 -1
- package/dist/xlsx/formula/spill.d.ts.map +1 -1
- package/dist/xlsx/index.cjs +2461 -1192
- package/dist/xlsx/index.d.ts +1 -0
- package/dist/xlsx/index.d.ts.map +1 -1
- package/dist/xlsx/index.mjs +2454 -1193
- package/dist/xlsx/layout/cell-view.d.ts.map +1 -1
- package/dist/xlsx/layout/navigate.d.ts.map +1 -1
- package/dist/xlsx/layout/style-view.d.ts +5 -0
- package/dist/xlsx/layout/style-view.d.ts.map +1 -1
- package/dist/xlsx/load/csv-dates.d.ts +22 -0
- package/dist/xlsx/load/csv-dates.d.ts.map +1 -0
- package/dist/xlsx/load/csv-import.d.ts +64 -0
- package/dist/xlsx/load/csv-import.d.ts.map +1 -0
- package/dist/xlsx/load/csv-separators.d.ts +13 -0
- package/dist/xlsx/load/csv-separators.d.ts.map +1 -0
- package/dist/xlsx/load/csv-traits.d.ts +20 -0
- package/dist/xlsx/load/csv-traits.d.ts.map +1 -0
- package/dist/xlsx/load/csv.d.ts +8 -4
- package/dist/xlsx/load/csv.d.ts.map +1 -1
- package/dist/xlsx/load/detect.d.ts +13 -0
- package/dist/xlsx/load/detect.d.ts.map +1 -1
- package/dist/xlsx/load/errors.d.ts +1 -0
- package/dist/xlsx/load/errors.d.ts.map +1 -1
- package/dist/xlsx/load/index.cjs +537 -91
- package/dist/xlsx/load/index.d.ts +3 -1
- package/dist/xlsx/load/index.d.ts.map +1 -1
- package/dist/xlsx/load/index.mjs +536 -92
- package/dist/xlsx/numfmt/input-date.d.ts +2 -0
- package/dist/xlsx/numfmt/input-date.d.ts.map +1 -1
- package/dist/xlsx/pivot/cache-xml.d.ts.map +1 -1
- package/dist/xlsx/pivot/groups.d.ts.map +1 -1
- package/dist/xlsx/read/index.d.ts +2 -1
- package/dist/xlsx/read/index.d.ts.map +1 -1
- package/dist/xlsx/read/limits.d.ts +50 -0
- package/dist/xlsx/read/limits.d.ts.map +1 -0
- package/dist/xlsx/read/load.d.ts +11 -1
- package/dist/xlsx/read/load.d.ts.map +1 -1
- package/dist/xlsx/read/package.d.ts +5 -23
- package/dist/xlsx/read/package.d.ts.map +1 -1
- package/dist/xlsx/read/shared-strings.d.ts +2 -2
- package/dist/xlsx/read/shared-strings.d.ts.map +1 -1
- package/dist/xlsx/read/worksheet.d.ts +2 -0
- package/dist/xlsx/read/worksheet.d.ts.map +1 -1
- package/dist/xlsx/stable-key.d.ts +3 -0
- package/dist/xlsx/stable-key.d.ts.map +1 -0
- package/dist/xlsx/styles.d.ts.map +1 -1
- package/dist/xlsx/ui/index.cjs +662 -372
- package/dist/xlsx/ui/index.mjs +662 -372
- package/dist/xlsx/ui/locales/de/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/en/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/es/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/fr/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/zh-CN/shell.d.ts.map +1 -1
- package/dist/xlsx/write/sheet-props.d.ts.map +1 -1
- package/dist/xml/index.cjs +32 -3
- package/dist/xml/index.mjs +32 -4
- package/dist/xml/xml.d.ts +11 -1
- package/dist/xml/xml.d.ts.map +1 -1
- package/package.json +6 -1
- package/dist/PptxHandler-SITN3K3F.mjs +0 -4
package/dist/xlsx/load/index.cjs
CHANGED
|
@@ -3254,6 +3254,19 @@ var DEFAULT_XML_LIMITS = {
|
|
|
3254
3254
|
maxDepth: 512,
|
|
3255
3255
|
maxNodes: 5e6
|
|
3256
3256
|
};
|
|
3257
|
+
var XmlLimitError = class extends Error {
|
|
3258
|
+
code = "xml-limit";
|
|
3259
|
+
/** The limit that was exceeded. */
|
|
3260
|
+
limit;
|
|
3261
|
+
/** Its value: the largest depth or element count allowed. */
|
|
3262
|
+
maximum;
|
|
3263
|
+
constructor(message, limit2, maximum) {
|
|
3264
|
+
super(message);
|
|
3265
|
+
this.name = "XmlLimitError";
|
|
3266
|
+
this.limit = limit2;
|
|
3267
|
+
this.maximum = maximum;
|
|
3268
|
+
}
|
|
3269
|
+
};
|
|
3257
3270
|
var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
|
|
3258
3271
|
var MARKUP_SKIPS = [
|
|
3259
3272
|
["<!--", "-->"],
|
|
@@ -3287,11 +3300,22 @@ function checkXmlLimits(xml, label2, limits = {}) {
|
|
|
3287
3300
|
continue;
|
|
3288
3301
|
}
|
|
3289
3302
|
nodes++;
|
|
3290
|
-
if (nodes > maxNodes)
|
|
3303
|
+
if (nodes > maxNodes)
|
|
3304
|
+
throw new XmlLimitError(
|
|
3305
|
+
`${label2} XML exceeds the limit of ${maxNodes} elements`,
|
|
3306
|
+
"maxNodes",
|
|
3307
|
+
maxNodes
|
|
3308
|
+
);
|
|
3291
3309
|
if (!selfClosing && ++depth > maxDepth)
|
|
3292
|
-
throw new
|
|
3310
|
+
throw new XmlLimitError(
|
|
3311
|
+
`${label2} XML exceeds the nesting depth limit of ${maxDepth}`,
|
|
3312
|
+
"maxDepth",
|
|
3313
|
+
maxDepth
|
|
3314
|
+
);
|
|
3293
3315
|
}
|
|
3294
3316
|
}
|
|
3317
|
+
var CRLF_DECLARATION = /^<\?xml[^>]*\?>\r\n/;
|
|
3318
|
+
var crlfDeclarations = /* @__PURE__ */ new WeakSet();
|
|
3295
3319
|
function parseXml(xml, options = {}) {
|
|
3296
3320
|
const label2 = options.label ?? "OOXML";
|
|
3297
3321
|
if (/<!DOCTYPE|<!ENTITY/i.test(xml))
|
|
@@ -3313,9 +3337,13 @@ function parseXml(xml, options = {}) {
|
|
|
3313
3337
|
}
|
|
3314
3338
|
if (parseError || !parsed.documentElement)
|
|
3315
3339
|
throw new Error(`Invalid ${label2} XML: ${parseError || "missing root element"}`);
|
|
3340
|
+
if (CRLF_DECLARATION.test(xml)) crlfDeclarations.add(parsed);
|
|
3316
3341
|
return parsed;
|
|
3317
3342
|
}
|
|
3318
|
-
var buildXml = (node2) =>
|
|
3343
|
+
var buildXml = (node2) => {
|
|
3344
|
+
const xml = new xmldom.XMLSerializer().serializeToString(node2);
|
|
3345
|
+
return crlfDeclarations.has(node2) ? xml.replace(/^(<\?xml[^>]*\?>)\n/, "$1\r\n") : xml;
|
|
3346
|
+
};
|
|
3319
3347
|
var isElement = (node2) => node2.nodeType === 1;
|
|
3320
3348
|
var elements = (parent) => Array.from(parent.childNodes).filter(isElement);
|
|
3321
3349
|
function named(element2, local, ns, lenient = true) {
|
|
@@ -3827,10 +3855,13 @@ var DEFAULT_ZIP_LIMITS = {
|
|
|
3827
3855
|
var ZipLimitError = class extends Error {
|
|
3828
3856
|
code = "ZIP_BOMB";
|
|
3829
3857
|
limit;
|
|
3858
|
+
/** The check that failed (absent when the error was built without one). */
|
|
3859
|
+
kind;
|
|
3830
3860
|
constructor(message, details) {
|
|
3831
3861
|
super(message);
|
|
3832
3862
|
this.name = "ZipLimitError";
|
|
3833
3863
|
this.limit = details.limit;
|
|
3864
|
+
this.kind = details.kind;
|
|
3834
3865
|
}
|
|
3835
3866
|
};
|
|
3836
3867
|
var mib = (bytes) => Math.round(bytes / 1048576);
|
|
@@ -3853,7 +3884,7 @@ function resolveLimits(limits) {
|
|
|
3853
3884
|
maxEntryBytes: limits.maxEntryBytes ?? DEFAULT_ZIP_LIMITS.maxEntryBytes,
|
|
3854
3885
|
maxTotalBytes: limits.maxTotalBytes ?? DEFAULT_ZIP_LIMITS.maxTotalBytes,
|
|
3855
3886
|
label: limits.label ?? "ZIP",
|
|
3856
|
-
fail: (message, limit2) => create ? create(message, { limit: limit2 }) : new ZipLimitError(message, { limit: limit2 })
|
|
3887
|
+
fail: (message, limit2, kind) => create ? create(message, { limit: limit2, kind }) : new ZipLimitError(message, { limit: limit2, kind })
|
|
3857
3888
|
};
|
|
3858
3889
|
}
|
|
3859
3890
|
function inflateEntryGuarded(entry3, alreadyRead, limits) {
|
|
@@ -3876,13 +3907,18 @@ function inflateEntryGuarded(entry3, alreadyRead, limits) {
|
|
|
3876
3907
|
size += chunk.byteLength;
|
|
3877
3908
|
if (size > declared || size > r.maxEntryBytes)
|
|
3878
3909
|
return abort(
|
|
3879
|
-
r.fail(
|
|
3910
|
+
r.fail(
|
|
3911
|
+
`${r.label} part ${entry3.name} inflates past its declared size`,
|
|
3912
|
+
r.maxEntryBytes,
|
|
3913
|
+
size > declared ? "declaredSize" : "maxEntryBytes"
|
|
3914
|
+
)
|
|
3880
3915
|
);
|
|
3881
3916
|
if (alreadyRead + size > r.maxTotalBytes)
|
|
3882
3917
|
return abort(
|
|
3883
3918
|
r.fail(
|
|
3884
3919
|
`${r.label} package exceeds the ${mib(r.maxTotalBytes)} MiB uncompressed content limit`,
|
|
3885
|
-
r.maxTotalBytes
|
|
3920
|
+
r.maxTotalBytes,
|
|
3921
|
+
"maxTotalBytes"
|
|
3886
3922
|
)
|
|
3887
3923
|
);
|
|
3888
3924
|
chunks.push(chunk);
|
|
@@ -3915,26 +3951,29 @@ function guardZip(zip, limits = {}) {
|
|
|
3915
3951
|
if (entries.length > r.maxEntries)
|
|
3916
3952
|
throw r.fail(
|
|
3917
3953
|
`${r.label} package exceeds the ${r.maxEntries.toLocaleString("en-US")} part limit`,
|
|
3918
|
-
r.maxEntries
|
|
3954
|
+
r.maxEntries,
|
|
3955
|
+
"maxEntries"
|
|
3919
3956
|
);
|
|
3920
3957
|
let declared = 0;
|
|
3921
3958
|
for (const entry3 of entries) {
|
|
3922
3959
|
const original = entry3.unsafeOriginalName;
|
|
3923
3960
|
if (!isSafePartName(entry3.name) || original !== void 0 && !isSafePartName(original))
|
|
3924
|
-
throw r.fail(`${r.label} package has an unsafe part name`, r.maxEntries);
|
|
3961
|
+
throw r.fail(`${r.label} package has an unsafe part name`, r.maxEntries, "partName");
|
|
3925
3962
|
if (entry3.dir) continue;
|
|
3926
3963
|
const size = declaredEntrySize(entry3);
|
|
3927
3964
|
if (size > r.maxEntryBytes)
|
|
3928
3965
|
throw r.fail(
|
|
3929
3966
|
`${r.label} part ${entry3.name} exceeds the uncompressed part size limit`,
|
|
3930
|
-
r.maxEntryBytes
|
|
3967
|
+
r.maxEntryBytes,
|
|
3968
|
+
"maxEntryBytes"
|
|
3931
3969
|
);
|
|
3932
3970
|
declared += size;
|
|
3933
3971
|
}
|
|
3934
3972
|
if (declared > r.maxTotalBytes)
|
|
3935
3973
|
throw r.fail(
|
|
3936
3974
|
`${r.label} package exceeds the ${mib(r.maxTotalBytes)} MiB uncompressed content limit`,
|
|
3937
|
-
r.maxTotalBytes
|
|
3975
|
+
r.maxTotalBytes,
|
|
3976
|
+
"maxTotalBytes"
|
|
3938
3977
|
);
|
|
3939
3978
|
const produced = /* @__PURE__ */ new Map();
|
|
3940
3979
|
let total2 = 0;
|
|
@@ -5624,6 +5663,9 @@ function formatValue(value2, format, options = {}) {
|
|
|
5624
5663
|
if (options.width !== void 0) return fitNumber(value2, format, options);
|
|
5625
5664
|
return formatNumber(value2, format, options.date1904 ?? false);
|
|
5626
5665
|
}
|
|
5666
|
+
function isDateFormat(format) {
|
|
5667
|
+
return compileFormat(format).isDate;
|
|
5668
|
+
}
|
|
5627
5669
|
|
|
5628
5670
|
// xlsx/numfmt/input-date.ts
|
|
5629
5671
|
var MONTH_NAMES = [
|
|
@@ -5846,9 +5888,9 @@ function parseCellInput(text2, options = {}) {
|
|
|
5846
5888
|
return parsed.numFmt ? { value: parsed.value, numFmt: parsed.numFmt } : { value: parsed.value };
|
|
5847
5889
|
}
|
|
5848
5890
|
|
|
5849
|
-
// xlsx/
|
|
5850
|
-
function
|
|
5851
|
-
return JSON.stringify(sortKeys(
|
|
5891
|
+
// xlsx/stable-key.ts
|
|
5892
|
+
function stableKey(value2) {
|
|
5893
|
+
return JSON.stringify(sortKeys(value2));
|
|
5852
5894
|
}
|
|
5853
5895
|
function sortKeys(value2) {
|
|
5854
5896
|
if (Array.isArray(value2)) return value2.map(sortKeys);
|
|
@@ -5862,6 +5904,11 @@ function sortKeys(value2) {
|
|
|
5862
5904
|
}
|
|
5863
5905
|
return value2;
|
|
5864
5906
|
}
|
|
5907
|
+
|
|
5908
|
+
// xlsx/styles.ts
|
|
5909
|
+
function styleKey(style2) {
|
|
5910
|
+
return stableKey(style2);
|
|
5911
|
+
}
|
|
5865
5912
|
function styleAt(workbook, styleId) {
|
|
5866
5913
|
const style2 = workbook.styles[styleId ?? 0] ?? workbook.styles[0];
|
|
5867
5914
|
if (!style2) throw new Error("Workbook has no default cell style");
|
|
@@ -9314,10 +9361,72 @@ function mergeComments(legacy, threaded) {
|
|
|
9314
9361
|
(a2, b) => a2.address.row - b.address.row || a2.address.col - b.address.col
|
|
9315
9362
|
);
|
|
9316
9363
|
}
|
|
9317
|
-
|
|
9318
|
-
|
|
9319
|
-
var
|
|
9320
|
-
|
|
9364
|
+
|
|
9365
|
+
// xlsx/read/limits.ts
|
|
9366
|
+
var DEFAULT_XLSX_LOAD_LIMITS = {
|
|
9367
|
+
maxInputBytes: 50 * 1024 * 1024,
|
|
9368
|
+
maxParts: 1e4,
|
|
9369
|
+
maxPartBytes: 200 * 1024 * 1024,
|
|
9370
|
+
maxTotalBytes: 300 * 1024 * 1024,
|
|
9371
|
+
maxXmlElements: 5e6
|
|
9372
|
+
};
|
|
9373
|
+
var WorkbookTooLargeError = class extends Error {
|
|
9374
|
+
code = "workbook-too-large";
|
|
9375
|
+
/** The limit that was exceeded, as named in {@link XlsxLoadLimits}. */
|
|
9376
|
+
limit;
|
|
9377
|
+
/** The value of that limit when the load failed. */
|
|
9378
|
+
maximum;
|
|
9379
|
+
constructor(message, limit2, maximum, options) {
|
|
9380
|
+
super(message, options);
|
|
9381
|
+
this.name = "WorkbookTooLargeError";
|
|
9382
|
+
this.limit = limit2;
|
|
9383
|
+
this.maximum = maximum;
|
|
9384
|
+
}
|
|
9385
|
+
};
|
|
9386
|
+
function isWorkbookTooLargeError(error) {
|
|
9387
|
+
return error instanceof Error && error.code === "workbook-too-large";
|
|
9388
|
+
}
|
|
9389
|
+
function resolveLoadLimits(limits = {}) {
|
|
9390
|
+
const resolved = { ...DEFAULT_XLSX_LOAD_LIMITS };
|
|
9391
|
+
for (const name of Object.keys(resolved)) {
|
|
9392
|
+
const value2 = limits[name];
|
|
9393
|
+
if (value2 === void 0) continue;
|
|
9394
|
+
if (!Number.isFinite(value2) || value2 <= 0)
|
|
9395
|
+
throw new RangeError(`limits.${name} must be a positive finite number`);
|
|
9396
|
+
resolved[name] = value2;
|
|
9397
|
+
}
|
|
9398
|
+
return resolved;
|
|
9399
|
+
}
|
|
9400
|
+
var ZIP_LIMIT_NAMES = {
|
|
9401
|
+
maxInputBytes: "maxInputBytes",
|
|
9402
|
+
maxEntries: "maxParts",
|
|
9403
|
+
maxEntryBytes: "maxPartBytes",
|
|
9404
|
+
maxTotalBytes: "maxTotalBytes"
|
|
9405
|
+
};
|
|
9406
|
+
function zipLimitsFor(limits) {
|
|
9407
|
+
return {
|
|
9408
|
+
maxInputBytes: limits.maxInputBytes,
|
|
9409
|
+
maxEntries: limits.maxParts,
|
|
9410
|
+
maxEntryBytes: limits.maxPartBytes,
|
|
9411
|
+
maxTotalBytes: limits.maxTotalBytes,
|
|
9412
|
+
label: "XLSX",
|
|
9413
|
+
createError: (message, { limit: limit2, kind }) => {
|
|
9414
|
+
const name = ZIP_LIMIT_NAMES[kind];
|
|
9415
|
+
return name ? new WorkbookTooLargeError(message, name, limit2) : new ZipLimitError(message, { limit: limit2, kind });
|
|
9416
|
+
}
|
|
9417
|
+
};
|
|
9418
|
+
}
|
|
9419
|
+
function parseDataXml(xml, label2, maxXmlElements = DEFAULT_XLSX_LOAD_LIMITS.maxXmlElements) {
|
|
9420
|
+
try {
|
|
9421
|
+
return parseXml(xml, { label: label2, limits: { maxNodes: maxXmlElements } });
|
|
9422
|
+
} catch (error) {
|
|
9423
|
+
if (error instanceof XmlLimitError && error.limit === "maxNodes")
|
|
9424
|
+
throw new WorkbookTooLargeError(error.message, "maxXmlElements", error.maximum, {
|
|
9425
|
+
cause: error
|
|
9426
|
+
});
|
|
9427
|
+
throw error;
|
|
9428
|
+
}
|
|
9429
|
+
}
|
|
9321
9430
|
var CONTENT_TYPES = {
|
|
9322
9431
|
workbook: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
|
|
9323
9432
|
workbookMacro: "application/vnd.ms-excel.sheet.macroEnabled.main+xml",
|
|
@@ -9407,16 +9516,15 @@ var SourceIndex = class {
|
|
|
9407
9516
|
};
|
|
9408
9517
|
var mib2 = (bytes) => Math.round(bytes / 1048576);
|
|
9409
9518
|
async function readZipParts(input, limits = {}) {
|
|
9410
|
-
const
|
|
9411
|
-
const
|
|
9412
|
-
maxEntries: limits.maxParts ?? MAX_PARTS,
|
|
9413
|
-
maxEntryBytes: limits.maxPartBytes ?? MAX_PART_BYTES,
|
|
9414
|
-
maxTotalBytes: limits.maxTotalBytes ?? MAX_UNCOMPRESSED_BYTES,
|
|
9415
|
-
label: "XLSX"
|
|
9416
|
-
};
|
|
9519
|
+
const resolved = resolveLoadLimits(limits);
|
|
9520
|
+
const maxInput = resolved.maxInputBytes;
|
|
9417
9521
|
const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);
|
|
9418
9522
|
if (bytes.byteLength > maxInput)
|
|
9419
|
-
throw new
|
|
9523
|
+
throw new WorkbookTooLargeError(
|
|
9524
|
+
`XLSX package exceeds the ${mib2(maxInput)} MiB compressed input limit`,
|
|
9525
|
+
"maxInputBytes",
|
|
9526
|
+
maxInput
|
|
9527
|
+
);
|
|
9420
9528
|
let loaded;
|
|
9421
9529
|
try {
|
|
9422
9530
|
loaded = await JSZip2__default.default.loadAsync(bytes);
|
|
@@ -9426,7 +9534,7 @@ async function readZipParts(input, limits = {}) {
|
|
|
9426
9534
|
{ cause: error }
|
|
9427
9535
|
);
|
|
9428
9536
|
}
|
|
9429
|
-
const zip = guardZip(loaded,
|
|
9537
|
+
const zip = guardZip(loaded, zipLimitsFor(resolved));
|
|
9430
9538
|
const parts = /* @__PURE__ */ new Map();
|
|
9431
9539
|
for (const entry3 of Object.values(zip.files)) {
|
|
9432
9540
|
if (entry3.dir) continue;
|
|
@@ -9633,9 +9741,9 @@ function parseRichString(element2, palette) {
|
|
|
9633
9741
|
const text2 = parsed.map((run2) => run2.text).join("");
|
|
9634
9742
|
return { text: text2, runs: parsed };
|
|
9635
9743
|
}
|
|
9636
|
-
function parseSharedStrings(xml, palette) {
|
|
9744
|
+
function parseSharedStrings(xml, palette, maxXmlElements) {
|
|
9637
9745
|
if (!xml) return [];
|
|
9638
|
-
const root =
|
|
9746
|
+
const root = parseDataXml(xml, "XLSX shared strings", maxXmlElements).documentElement;
|
|
9639
9747
|
return xChildren(root, "si").map((si) => parseRichString(si, palette));
|
|
9640
9748
|
}
|
|
9641
9749
|
|
|
@@ -14275,7 +14383,11 @@ function parseWorksheet(ctx, partName, name, sheetId) {
|
|
|
14275
14383
|
return sheet;
|
|
14276
14384
|
}
|
|
14277
14385
|
const split = splitSheetData(xml);
|
|
14278
|
-
const root =
|
|
14386
|
+
const root = parseDataXml(
|
|
14387
|
+
split?.xml ?? xml,
|
|
14388
|
+
"XLSX worksheet",
|
|
14389
|
+
ctx.maxXmlElements
|
|
14390
|
+
).documentElement;
|
|
14279
14391
|
const byName = /* @__PURE__ */ new Map();
|
|
14280
14392
|
const cfBlocks = [];
|
|
14281
14393
|
for (const node2 of elements(root)) {
|
|
@@ -14349,8 +14461,9 @@ function liftPrintAreas(workbook) {
|
|
|
14349
14461
|
return false;
|
|
14350
14462
|
});
|
|
14351
14463
|
}
|
|
14352
|
-
async function loadXlsx(input) {
|
|
14353
|
-
const
|
|
14464
|
+
async function loadXlsx(input, options = {}) {
|
|
14465
|
+
const limits = resolveLoadLimits(options.limits);
|
|
14466
|
+
const parts = await readZipParts(input, limits);
|
|
14354
14467
|
const source2 = new SourceIndex(parts);
|
|
14355
14468
|
const workbookPart = source2.workbookPart();
|
|
14356
14469
|
if (!workbookPart) throw new Error("XLSX package has no workbook part (xl/workbook.xml)");
|
|
@@ -14371,7 +14484,8 @@ async function loadXlsx(input) {
|
|
|
14371
14484
|
source: source2,
|
|
14372
14485
|
sharedStrings: parseSharedStrings(
|
|
14373
14486
|
stringsPart ? source2.text(stringsPart) : void 0,
|
|
14374
|
-
styles.palette
|
|
14487
|
+
styles.palette,
|
|
14488
|
+
limits.maxXmlElements
|
|
14375
14489
|
),
|
|
14376
14490
|
xfMap: styles.xfMap,
|
|
14377
14491
|
date1904: book.date1904,
|
|
@@ -14379,7 +14493,8 @@ async function loadXlsx(input) {
|
|
|
14379
14493
|
dxfs: styles.dxfs,
|
|
14380
14494
|
persons: parsePersons(personsPart ? source2.text(personsPart) : void 0),
|
|
14381
14495
|
dynamicCells: parseDynamicArrayMetadata(metadataPart ? source2.text(metadataPart) : void 0),
|
|
14382
|
-
warn
|
|
14496
|
+
warn,
|
|
14497
|
+
maxXmlElements: limits.maxXmlElements
|
|
14383
14498
|
};
|
|
14384
14499
|
const rels = source2.rels(workbookPart);
|
|
14385
14500
|
const sheets = book.sheets.map((entry3) => {
|
|
@@ -16596,6 +16711,52 @@ function finite(value2) {
|
|
|
16596
16711
|
return value2;
|
|
16597
16712
|
}
|
|
16598
16713
|
|
|
16714
|
+
// xlsx/formula/operators.ts
|
|
16715
|
+
function power(base, exponent) {
|
|
16716
|
+
if (base === 0 && exponent === 0) throw new ErrorSignal(ERR.NUM);
|
|
16717
|
+
if (base === 0 && exponent < 0) throw new ErrorSignal(ERR.DIV0);
|
|
16718
|
+
if (base < 0 && !Number.isInteger(exponent)) {
|
|
16719
|
+
const inverse = 1 / exponent;
|
|
16720
|
+
const odd = Math.round(inverse);
|
|
16721
|
+
if (Math.abs(inverse - odd) < 1e-10 && Math.abs(odd) % 2 === 1) {
|
|
16722
|
+
return -Math.pow(-base, exponent);
|
|
16723
|
+
}
|
|
16724
|
+
throw new ErrorSignal(ERR.NUM);
|
|
16725
|
+
}
|
|
16726
|
+
return Math.pow(base, exponent);
|
|
16727
|
+
}
|
|
16728
|
+
function pick(m, row2, col) {
|
|
16729
|
+
const r = m.rows === 1 ? 0 : row2;
|
|
16730
|
+
const c2 = m.cols === 1 ? 0 : col;
|
|
16731
|
+
if (r >= m.rows || c2 >= m.cols) return ERR.NA;
|
|
16732
|
+
return m.get(r, c2);
|
|
16733
|
+
}
|
|
16734
|
+
function broadcastShape(operands, at) {
|
|
16735
|
+
let rows = 1;
|
|
16736
|
+
let cols = 1;
|
|
16737
|
+
for (const m of operands) {
|
|
16738
|
+
rows = Math.max(rows, m.rows);
|
|
16739
|
+
cols = Math.max(cols, m.cols);
|
|
16740
|
+
}
|
|
16741
|
+
if (!operands.some((m) => m.isPadded)) return Matrix.build(rows, cols, at);
|
|
16742
|
+
let blockRows = 1;
|
|
16743
|
+
let blockCols = 1;
|
|
16744
|
+
for (const m of operands) {
|
|
16745
|
+
blockRows = Math.max(blockRows, m.isPadded ? m.blockRows : m.rows);
|
|
16746
|
+
blockCols = Math.max(blockCols, m.isPadded ? m.blockCols : m.cols);
|
|
16747
|
+
}
|
|
16748
|
+
blockRows = Math.min(blockRows, rows);
|
|
16749
|
+
blockCols = Math.min(blockCols, cols);
|
|
16750
|
+
const varies = operands.some(
|
|
16751
|
+
(m) => blockRows < rows && m.rows === 1 && m.cols > 1 || blockCols < cols && m.cols === 1 && m.rows > 1
|
|
16752
|
+
);
|
|
16753
|
+
if (varies) return Matrix.build(rows, cols, at);
|
|
16754
|
+
return Matrix.padded(Matrix.build(blockRows, blockCols, at), rows, cols, at(rows - 1, cols - 1));
|
|
16755
|
+
}
|
|
16756
|
+
|
|
16757
|
+
// xlsx/formula/spill.ts
|
|
16758
|
+
var isSpilledCell = (cell) => cell !== void 0 && "spillAnchor" in cell;
|
|
16759
|
+
|
|
16599
16760
|
// xlsx/formula/functions/wildcard.ts
|
|
16600
16761
|
var lower = (ch) => (ch ?? "").toLowerCase();
|
|
16601
16762
|
var fold = (text2) => Array.from({ length: text2.length }, (_, i2) => lower(text2[i2]));
|
|
@@ -19880,49 +20041,6 @@ var INFO_FUNCTIONS = [
|
|
|
19880
20041
|
)
|
|
19881
20042
|
];
|
|
19882
20043
|
|
|
19883
|
-
// xlsx/formula/operators.ts
|
|
19884
|
-
function power(base, exponent) {
|
|
19885
|
-
if (base === 0 && exponent === 0) throw new ErrorSignal(ERR.NUM);
|
|
19886
|
-
if (base === 0 && exponent < 0) throw new ErrorSignal(ERR.DIV0);
|
|
19887
|
-
if (base < 0 && !Number.isInteger(exponent)) {
|
|
19888
|
-
const inverse = 1 / exponent;
|
|
19889
|
-
const odd = Math.round(inverse);
|
|
19890
|
-
if (Math.abs(inverse - odd) < 1e-10 && Math.abs(odd) % 2 === 1) {
|
|
19891
|
-
return -Math.pow(-base, exponent);
|
|
19892
|
-
}
|
|
19893
|
-
throw new ErrorSignal(ERR.NUM);
|
|
19894
|
-
}
|
|
19895
|
-
return Math.pow(base, exponent);
|
|
19896
|
-
}
|
|
19897
|
-
function pick(m, row2, col) {
|
|
19898
|
-
const r = m.rows === 1 ? 0 : row2;
|
|
19899
|
-
const c2 = m.cols === 1 ? 0 : col;
|
|
19900
|
-
if (r >= m.rows || c2 >= m.cols) return ERR.NA;
|
|
19901
|
-
return m.get(r, c2);
|
|
19902
|
-
}
|
|
19903
|
-
function broadcastShape(operands, at) {
|
|
19904
|
-
let rows = 1;
|
|
19905
|
-
let cols = 1;
|
|
19906
|
-
for (const m of operands) {
|
|
19907
|
-
rows = Math.max(rows, m.rows);
|
|
19908
|
-
cols = Math.max(cols, m.cols);
|
|
19909
|
-
}
|
|
19910
|
-
if (!operands.some((m) => m.isPadded)) return Matrix.build(rows, cols, at);
|
|
19911
|
-
let blockRows = 1;
|
|
19912
|
-
let blockCols = 1;
|
|
19913
|
-
for (const m of operands) {
|
|
19914
|
-
blockRows = Math.max(blockRows, m.isPadded ? m.blockRows : m.rows);
|
|
19915
|
-
blockCols = Math.max(blockCols, m.isPadded ? m.blockCols : m.cols);
|
|
19916
|
-
}
|
|
19917
|
-
blockRows = Math.min(blockRows, rows);
|
|
19918
|
-
blockCols = Math.min(blockCols, cols);
|
|
19919
|
-
const varies = operands.some(
|
|
19920
|
-
(m) => blockRows < rows && m.rows === 1 && m.cols > 1 || blockCols < cols && m.cols === 1 && m.rows > 1
|
|
19921
|
-
);
|
|
19922
|
-
if (varies) return Matrix.build(rows, cols, at);
|
|
19923
|
-
return Matrix.padded(Matrix.build(blockRows, blockCols, at), rows, cols, at(rows - 1, cols - 1));
|
|
19924
|
-
}
|
|
19925
|
-
|
|
19926
20044
|
// xlsx/formula/functions/lambda.ts
|
|
19927
20045
|
var C17 = "Logical";
|
|
19928
20046
|
function lambdaArg(value2) {
|
|
@@ -25182,9 +25300,6 @@ var paramKind = (spec2, index3) => {
|
|
|
25182
25300
|
return params[Math.min(index3, params.length - 1)] ?? "value";
|
|
25183
25301
|
};
|
|
25184
25302
|
|
|
25185
|
-
// xlsx/formula/spill.ts
|
|
25186
|
-
var isSpilledCell = (cell) => cell !== void 0 && "spillAnchor" in cell;
|
|
25187
|
-
|
|
25188
25303
|
// xlsx/formula/move.ts
|
|
25189
25304
|
var same3 = (a2, b) => a2.toLowerCase() === b.toLowerCase();
|
|
25190
25305
|
function deleteSheetInFormula(formula, sheetName, tableNames = []) {
|
|
@@ -27213,10 +27328,8 @@ function sheetFormatXml(sheet) {
|
|
|
27213
27328
|
const current = { defaultRowHeight: sheet.defaultRowHeight };
|
|
27214
27329
|
if (sheet.defaultColWidth !== void 0) current.defaultColWidth = sheet.defaultColWidth;
|
|
27215
27330
|
if (sheet.format && Object.keys(sheet.format).length) current.format = sheet.format;
|
|
27216
|
-
|
|
27217
|
-
|
|
27218
|
-
...[...sheet.rowInfo.values()].map((info) => info.outlineLevel ?? 0)
|
|
27219
|
-
);
|
|
27331
|
+
let rowLevel = 0;
|
|
27332
|
+
for (const info of sheet.rowInfo.values()) rowLevel = Math.max(rowLevel, info.outlineLevel ?? 0);
|
|
27220
27333
|
const colLevel = Math.max(0, ...sheet.columns.map((col) => col.outlineLevel ?? 0));
|
|
27221
27334
|
if (source2 && sameModel(readSheetFormat(source2), current) && Number(source2.getAttribute("outlineLevelRow") ?? 0) === rowLevel && Number(source2.getAttribute("outlineLevelCol") ?? 0) === colLevel)
|
|
27222
27335
|
return snapshotXml(sheet, "sheetFormatPr") ?? "";
|
|
@@ -27518,11 +27631,10 @@ function pivotCacheDefinitionXml(pivot, workbook, data, recordRel) {
|
|
|
27518
27631
|
const items = data.items[index3];
|
|
27519
27632
|
if (pivot.dateFields?.includes(name) && items.every((v) => typeof v === "number")) {
|
|
27520
27633
|
const serials = items;
|
|
27521
|
-
const
|
|
27522
|
-
const maxDate = Number.isInteger(latest) ? latest + 1 : latest;
|
|
27634
|
+
const range = dateGroupRange({}, serials);
|
|
27523
27635
|
const parent = derived.filter((entry3) => entry3.group.field === name).at(-1);
|
|
27524
27636
|
const link = parent ? `<fieldGroup par="${parent.index}"/>` : "";
|
|
27525
|
-
return `<cacheField${attrs({ name: encodeEscapes(name), numFmtId: 14 })}><sharedItems${attrs({ containsSemiMixedTypes: false, containsNonDate: false, containsDate: true, containsString: false, minDate: iso(
|
|
27637
|
+
return `<cacheField${attrs({ name: encodeEscapes(name), numFmtId: 14 })}><sharedItems${attrs({ containsSemiMixedTypes: false, containsNonDate: false, containsDate: true, containsString: false, minDate: iso(range.start), maxDate: iso(range.end), count: serials.length })}>${serials.map((serial) => `<d v="${iso(serial)}"/>`).join("")}</sharedItems>${link}</cacheField>`;
|
|
27526
27638
|
}
|
|
27527
27639
|
const types = new Set(
|
|
27528
27640
|
items.map((value2) => value2 === null || value2 === "" ? "blank" : typeof value2)
|
|
@@ -28393,6 +28505,332 @@ async function saveXlsx(workbook) {
|
|
|
28393
28505
|
return writer.build();
|
|
28394
28506
|
}
|
|
28395
28507
|
|
|
28508
|
+
// xlsx/load/csv-dates.ts
|
|
28509
|
+
var DAY_RE = /^(\d{1,4})([-/. ])(\d{1,4})\2(\d{1,4})$/;
|
|
28510
|
+
var COMPACT_RE = /^\d{8}$/;
|
|
28511
|
+
var PAIR_RE = /^(\d{1,2})\/(\d{1,2})$/;
|
|
28512
|
+
var FRACTION_RE = /\.(\d+)/;
|
|
28513
|
+
var TIME_RE3 = /^(\d{1,2}:\d{1,2}(?::\d{1,2}(?:\.\d+)?)?(?:\s*[ap]m?)?)\s*(Z|[+-]\d{2}(?::?\d{2})?)?$/i;
|
|
28514
|
+
var SPACE_RE = /\s/;
|
|
28515
|
+
var MAX_DATE_TEXT = 64;
|
|
28516
|
+
function splitTime(text2) {
|
|
28517
|
+
const colon = text2.indexOf(":");
|
|
28518
|
+
if (colon < 0) return [text2, void 0];
|
|
28519
|
+
let start = colon;
|
|
28520
|
+
while (start > 0 && colon - start < 2) {
|
|
28521
|
+
const code = text2.charCodeAt(start - 1);
|
|
28522
|
+
if (code < 48 || code > 57) break;
|
|
28523
|
+
start--;
|
|
28524
|
+
}
|
|
28525
|
+
const before = text2[start - 1] ?? "";
|
|
28526
|
+
if (start === colon || !before) return void 0;
|
|
28527
|
+
if (before === "T" || before === "t") return [text2.slice(0, start - 1), text2.slice(start)];
|
|
28528
|
+
return SPACE_RE.test(before) ? [text2.slice(0, start).trimEnd(), text2.slice(start)] : void 0;
|
|
28529
|
+
}
|
|
28530
|
+
function compactParts(text2, order) {
|
|
28531
|
+
const parts = [];
|
|
28532
|
+
let at = 0;
|
|
28533
|
+
for (const kind of order) {
|
|
28534
|
+
const size = kind === "Y" ? 4 : 2;
|
|
28535
|
+
parts.push(text2.slice(at, at + size));
|
|
28536
|
+
at += size;
|
|
28537
|
+
}
|
|
28538
|
+
return parts;
|
|
28539
|
+
}
|
|
28540
|
+
function pairParts(pair, order) {
|
|
28541
|
+
let next = 0;
|
|
28542
|
+
return [...order].map(
|
|
28543
|
+
(kind) => kind === "Y" ? String((/* @__PURE__ */ new Date()).getFullYear()) : pair[next++] ?? ""
|
|
28544
|
+
);
|
|
28545
|
+
}
|
|
28546
|
+
function dayParts(text2, order) {
|
|
28547
|
+
const match2 = DAY_RE.exec(text2);
|
|
28548
|
+
if (match2) return [match2[1] ?? "", match2[3] ?? "", match2[4] ?? ""];
|
|
28549
|
+
if (COMPACT_RE.test(text2)) return compactParts(text2, order);
|
|
28550
|
+
const pair = PAIR_RE.exec(text2);
|
|
28551
|
+
return pair ? pairParts([pair[1] ?? "", pair[2] ?? ""], order) : void 0;
|
|
28552
|
+
}
|
|
28553
|
+
function inOrder(parts, order) {
|
|
28554
|
+
const date = [0, 0, 0];
|
|
28555
|
+
for (let i2 = 0; i2 < 3; i2++) {
|
|
28556
|
+
const part = parts[i2] ?? "";
|
|
28557
|
+
const kind = order[i2];
|
|
28558
|
+
if (kind === "Y") {
|
|
28559
|
+
if (part.length === 3 || part.length > 4) return void 0;
|
|
28560
|
+
date[0] = fullYear(part);
|
|
28561
|
+
} else if (part.length > 2) return void 0;
|
|
28562
|
+
else date[kind === "M" ? 1 : 2] = Number(part);
|
|
28563
|
+
}
|
|
28564
|
+
return date;
|
|
28565
|
+
}
|
|
28566
|
+
function offsetMinutes(zone) {
|
|
28567
|
+
if (zone === "Z" || zone === "z") return 0;
|
|
28568
|
+
const hours = Number(zone.slice(1, 3));
|
|
28569
|
+
const minutes = zone.length > 3 ? Number(zone.slice(-2)) : 0;
|
|
28570
|
+
if (hours > 23 || minutes > 59) return void 0;
|
|
28571
|
+
return (zone.startsWith("-") ? -1 : 1) * (hours * 60 + minutes);
|
|
28572
|
+
}
|
|
28573
|
+
function parseOrderedDate(text2, order, date1904, decimal = ".") {
|
|
28574
|
+
if (text2.length > MAX_DATE_TEXT) return void 0;
|
|
28575
|
+
const split = splitTime(text2);
|
|
28576
|
+
if (!split) return void 0;
|
|
28577
|
+
let clock = split[1];
|
|
28578
|
+
if (clock !== void 0 && decimal !== ".")
|
|
28579
|
+
clock = clock.includes(".") ? "" : clock.replace(decimal, ".");
|
|
28580
|
+
const tail = clock === void 0 ? void 0 : TIME_RE3.exec(clock);
|
|
28581
|
+
if (clock !== void 0 && !tail) return void 0;
|
|
28582
|
+
const parts = dayParts(split[0], order);
|
|
28583
|
+
const date = parts && inOrder(parts, order);
|
|
28584
|
+
if (!date) return void 0;
|
|
28585
|
+
const serial = serialOf(date[0], date[1], date[2], date1904);
|
|
28586
|
+
if (serial === void 0) return void 0;
|
|
28587
|
+
if (!tail) return { value: serial, numFmt: "yyyy-mm-dd", zoned: false };
|
|
28588
|
+
const time = parseTime(tail[1] ?? "");
|
|
28589
|
+
if (!time || time.fraction >= 1) return void 0;
|
|
28590
|
+
const zone = tail[2];
|
|
28591
|
+
const offset2 = zone === void 0 ? 0 : offsetMinutes(zone);
|
|
28592
|
+
if (offset2 === void 0) return void 0;
|
|
28593
|
+
const value2 = serial + time.fraction - offset2 / 1440;
|
|
28594
|
+
if (value2 < (date1904 ? 0 : 1)) return void 0;
|
|
28595
|
+
const digits2 = Math.min(3, FRACTION_RE.exec(tail[1] ?? "")?.[1]?.length ?? 0);
|
|
28596
|
+
const format = digits2 ? `h:mm:ss.${"0".repeat(digits2)}` : time.format;
|
|
28597
|
+
return { value: value2, numFmt: `yyyy-mm-dd ${format}`, zoned: zone !== void 0 };
|
|
28598
|
+
}
|
|
28599
|
+
|
|
28600
|
+
// xlsx/load/csv-separators.ts
|
|
28601
|
+
function separatorsOf(decimal = ".", thousands = decimal === "," ? "." : ",") {
|
|
28602
|
+
for (const separator of [decimal, thousands])
|
|
28603
|
+
if (separator.length !== 1 || /[\d+-]/.test(separator))
|
|
28604
|
+
throw new RangeError(`"${separator}" cannot be a decimal or thousands separator.`);
|
|
28605
|
+
if (decimal === thousands)
|
|
28606
|
+
throw new RangeError("The decimal and thousands separators must differ.");
|
|
28607
|
+
return { decimal, thousands };
|
|
28608
|
+
}
|
|
28609
|
+
function separatorNormalizer({
|
|
28610
|
+
decimal,
|
|
28611
|
+
thousands
|
|
28612
|
+
}) {
|
|
28613
|
+
if (decimal === "." && thousands === ",") return void 0;
|
|
28614
|
+
const escape2 = (char) => char.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&");
|
|
28615
|
+
const pattern = new RegExp(`(${escape2(decimal)})|(\\d)${escape2(thousands)}(?=\\d)|[.,]`, "g");
|
|
28616
|
+
const swap = (_, point, digit) => {
|
|
28617
|
+
if (point !== void 0) return ".";
|
|
28618
|
+
if (digit !== void 0) return `${digit},`;
|
|
28619
|
+
return "";
|
|
28620
|
+
};
|
|
28621
|
+
return (text2) => text2.replace(pattern, swap);
|
|
28622
|
+
}
|
|
28623
|
+
|
|
28624
|
+
// xlsx/load/csv-traits.ts
|
|
28625
|
+
var LEADING_ZEROS = 1;
|
|
28626
|
+
var LONG_NUMBER = 2;
|
|
28627
|
+
var SCIENTIFIC = 4;
|
|
28628
|
+
var LETTER_DATE = 8;
|
|
28629
|
+
var TIME_ZONE = 16;
|
|
28630
|
+
var DATE_FALLBACK = 32;
|
|
28631
|
+
var isDigit4 = (code) => code >= 48 && code <= 57;
|
|
28632
|
+
var isLetter2 = (code) => (code | 32) >= 97 && (code | 32) <= 122;
|
|
28633
|
+
function numberTraits(text2, decimal, thousands) {
|
|
28634
|
+
let traits = 0;
|
|
28635
|
+
let digits2 = 0;
|
|
28636
|
+
let first2 = true;
|
|
28637
|
+
for (let i2 = 0; i2 < text2.length; i2++) {
|
|
28638
|
+
const code = text2.charCodeAt(i2);
|
|
28639
|
+
if (isDigit4(code)) {
|
|
28640
|
+
if (first2 && code === 48) {
|
|
28641
|
+
const next = text2.charCodeAt(i2 + 1);
|
|
28642
|
+
if (isDigit4(next) || next === thousands && isDigit4(text2.charCodeAt(i2 + 2)))
|
|
28643
|
+
traits |= LEADING_ZEROS;
|
|
28644
|
+
}
|
|
28645
|
+
first2 = false;
|
|
28646
|
+
if (digits2 > 0 || code !== 48) digits2++;
|
|
28647
|
+
} else if (code === decimal) first2 = false;
|
|
28648
|
+
else if (code === 69 || code === 101) {
|
|
28649
|
+
traits |= SCIENTIFIC;
|
|
28650
|
+
break;
|
|
28651
|
+
}
|
|
28652
|
+
}
|
|
28653
|
+
return digits2 > 15 ? traits | LONG_NUMBER : traits;
|
|
28654
|
+
}
|
|
28655
|
+
function significantDigits(text2) {
|
|
28656
|
+
let digits2 = "";
|
|
28657
|
+
for (const char of text2) {
|
|
28658
|
+
if (char === "e" || char === "E") break;
|
|
28659
|
+
if (char >= "0" && char <= "9" && (digits2 !== "" || char !== "0")) digits2 += char;
|
|
28660
|
+
}
|
|
28661
|
+
let end = digits2.length;
|
|
28662
|
+
while (end > 0 && digits2[end - 1] === "0") end--;
|
|
28663
|
+
return digits2.slice(0, end);
|
|
28664
|
+
}
|
|
28665
|
+
var keepsDigits = (field, value2) => significantDigits(field) === significantDigits(String(Math.abs(value2)));
|
|
28666
|
+
function dateTraits(field) {
|
|
28667
|
+
const text2 = field.trimStart();
|
|
28668
|
+
let i2 = 0;
|
|
28669
|
+
while (isLetter2(text2.charCodeAt(i2))) i2++;
|
|
28670
|
+
return i2 > 0 && isDigit4(text2.charCodeAt(i2)) ? LETTER_DATE : 0;
|
|
28671
|
+
}
|
|
28672
|
+
|
|
28673
|
+
// xlsx/load/csv-import.ts
|
|
28674
|
+
var KINDS2 = [
|
|
28675
|
+
{
|
|
28676
|
+
conversion: "leadingZeros",
|
|
28677
|
+
one: "value lost its leading zeros when converted to a number",
|
|
28678
|
+
many: "values lost their leading zeros when converted to numbers"
|
|
28679
|
+
},
|
|
28680
|
+
{
|
|
28681
|
+
conversion: "longNumbers",
|
|
28682
|
+
one: "value with more than 15 digits lost digits when converted to a number",
|
|
28683
|
+
many: "values with more than 15 digits lost digits when converted to numbers"
|
|
28684
|
+
},
|
|
28685
|
+
{
|
|
28686
|
+
conversion: "scientific",
|
|
28687
|
+
one: "value with the letter E lost digits when converted to a number",
|
|
28688
|
+
many: "values with the letter E lost digits when converted to numbers"
|
|
28689
|
+
},
|
|
28690
|
+
{
|
|
28691
|
+
conversion: "letterDates",
|
|
28692
|
+
one: "value of letters and digits such as JAN1 was converted to a date",
|
|
28693
|
+
many: "values of letters and digits such as JAN1 were converted to dates"
|
|
28694
|
+
},
|
|
28695
|
+
{
|
|
28696
|
+
conversion: void 0,
|
|
28697
|
+
one: "date-time with a time zone was converted to UTC",
|
|
28698
|
+
many: "date-times with a time zone were converted to UTC"
|
|
28699
|
+
},
|
|
28700
|
+
{
|
|
28701
|
+
conversion: void 0,
|
|
28702
|
+
one: "value could not be read as a date in {order} order and was read as General",
|
|
28703
|
+
many: "values could not be read as dates in {order} order and were read as General"
|
|
28704
|
+
}
|
|
28705
|
+
];
|
|
28706
|
+
var FORMATS = /* @__PURE__ */ new Set(["general", "text", "skip", "MDY", "DMY", "YMD", "MYD", "DYM", "YDM"]);
|
|
28707
|
+
var DAY_FIRST = /* @__PURE__ */ new Set(["DMY", "DYM", "YDM"]);
|
|
28708
|
+
var MONTH_FIRST_RE = /^\d{1,2}[-/]\d{1,2}(?:[-/]\d{1,4})?(?:$|[\sT])/;
|
|
28709
|
+
var FRACTION_FORMATS = /* @__PURE__ */ new Set(["# ?/?", "# ??/??"]);
|
|
28710
|
+
var EN_US_SEPARATORS_RE = /[.,]/;
|
|
28711
|
+
var SIGNED_RE = /^\s*(?:[$€£]\s*)?[-+(]/;
|
|
28712
|
+
function columnFormats(columns) {
|
|
28713
|
+
const formats = [];
|
|
28714
|
+
for (const [key, format] of Object.entries(columns ?? {})) {
|
|
28715
|
+
const col = Number(key);
|
|
28716
|
+
if (!Number.isInteger(col) || col < 0 || col > MAX_COL)
|
|
28717
|
+
throw new RangeError(`CSV column ${key} is not a zero-based column index.`);
|
|
28718
|
+
if (!FORMATS.has(format))
|
|
28719
|
+
throw new RangeError(`Unknown CSV column format "${String(format)}" for column ${col}.`);
|
|
28720
|
+
formats[col] = format;
|
|
28721
|
+
}
|
|
28722
|
+
return formats;
|
|
28723
|
+
}
|
|
28724
|
+
function createFieldReader(options, date1904) {
|
|
28725
|
+
const formats = columnFormats(options.columns);
|
|
28726
|
+
const targets = [];
|
|
28727
|
+
let skipped = 0;
|
|
28728
|
+
for (let col = 0; col < formats.length; col++) {
|
|
28729
|
+
if (formats[col] === "skip") {
|
|
28730
|
+
targets.push(-1);
|
|
28731
|
+
skipped++;
|
|
28732
|
+
} else targets.push(col - skipped);
|
|
28733
|
+
}
|
|
28734
|
+
const target = (col) => col < targets.length ? targets[col] ?? -1 : col - skipped;
|
|
28735
|
+
let keepText = 0;
|
|
28736
|
+
KINDS2.forEach(({ conversion }, kind) => {
|
|
28737
|
+
if (conversion && options.conversions?.[conversion] === false) keepText |= 1 << kind;
|
|
28738
|
+
});
|
|
28739
|
+
const separators = separatorsOf(options.decimalSeparator, options.thousandsSeparator);
|
|
28740
|
+
const normalize = separatorNormalizer(separators);
|
|
28741
|
+
const decimal = separators.decimal.charCodeAt(0);
|
|
28742
|
+
const thousands = separators.thousands.charCodeAt(0);
|
|
28743
|
+
const { formulas = false, trailingMinus = false } = options;
|
|
28744
|
+
const counts = [];
|
|
28745
|
+
const firstRows = [];
|
|
28746
|
+
const report = (traits, row2, col) => {
|
|
28747
|
+
if (options.reportConversions === false) return;
|
|
28748
|
+
for (let kind = 0; kind < KINDS2.length; kind++) {
|
|
28749
|
+
if (!(traits & 1 << kind)) continue;
|
|
28750
|
+
const key = col * KINDS2.length + kind;
|
|
28751
|
+
const count2 = counts[key];
|
|
28752
|
+
if (count2 === void 0) firstRows[key] = row2;
|
|
28753
|
+
counts[key] = (count2 ?? 0) + 1;
|
|
28754
|
+
}
|
|
28755
|
+
};
|
|
28756
|
+
const dateFormats = /* @__PURE__ */ new Map();
|
|
28757
|
+
const isDate = (numFmt) => {
|
|
28758
|
+
if (numFmt === void 0) return false;
|
|
28759
|
+
let known = dateFormats.get(numFmt);
|
|
28760
|
+
if (known === void 0) {
|
|
28761
|
+
known = isDateFormat(numFmt);
|
|
28762
|
+
dateFormats.set(numFmt, known);
|
|
28763
|
+
}
|
|
28764
|
+
return known;
|
|
28765
|
+
};
|
|
28766
|
+
const isNumber = (parsed) => typeof parsed.value === "number" && parsed.formula === void 0 && !isDate(parsed.numFmt);
|
|
28767
|
+
const localized = (text2, normalized) => {
|
|
28768
|
+
const parsed = parseCellInput(normalized);
|
|
28769
|
+
if (normalized === text2 || isNumber(parsed)) return parsed;
|
|
28770
|
+
const plain3 = parseCellInput(text2);
|
|
28771
|
+
if (isNumber(plain3) && EN_US_SEPARATORS_RE.test(text2)) return { value: text2 };
|
|
28772
|
+
const dated = typeof parsed.value === "number" && parsed.formula === void 0;
|
|
28773
|
+
return dated && typeof plain3.value === "string" ? parsed : plain3;
|
|
28774
|
+
};
|
|
28775
|
+
const type = normalize ? (text2) => localized(text2, normalize(text2)) : (text2) => parseCellInput(text2);
|
|
28776
|
+
const negative = (field) => {
|
|
28777
|
+
const text2 = field.trimEnd();
|
|
28778
|
+
if (text2.length < 2 || !text2.endsWith("-")) return void 0;
|
|
28779
|
+
const body = text2.slice(0, -1);
|
|
28780
|
+
if (SIGNED_RE.test(body)) return void 0;
|
|
28781
|
+
const parsed = type(body);
|
|
28782
|
+
if (!isNumber(parsed)) return void 0;
|
|
28783
|
+
return { ...parsed, value: parsed.value === 0 ? 0 : -parsed.value };
|
|
28784
|
+
};
|
|
28785
|
+
const general = (field, row2, col) => {
|
|
28786
|
+
if (!formulas && field.startsWith("=")) return { value: field };
|
|
28787
|
+
const parsed = (trailingMinus ? negative(field) : void 0) ?? type(field);
|
|
28788
|
+
if (typeof parsed.value !== "number" || parsed.formula !== void 0) return parsed;
|
|
28789
|
+
const grouping = FRACTION_FORMATS.has(parsed.numFmt ?? "") ? -1 : thousands;
|
|
28790
|
+
const traits = isDate(parsed.numFmt) ? dateTraits(field) : numberTraits(field, decimal, grouping);
|
|
28791
|
+
if (traits === 0) return parsed;
|
|
28792
|
+
if (traits & keepText) return { value: field };
|
|
28793
|
+
let lost = traits;
|
|
28794
|
+
if (traits & (LONG_NUMBER | SCIENTIFIC)) {
|
|
28795
|
+
if (keepsDigits(field, parsed.value)) lost &= -7;
|
|
28796
|
+
else if (traits & LONG_NUMBER) lost &= ~SCIENTIFIC;
|
|
28797
|
+
}
|
|
28798
|
+
if (lost) report(lost, row2, col);
|
|
28799
|
+
return parsed;
|
|
28800
|
+
};
|
|
28801
|
+
return {
|
|
28802
|
+
target,
|
|
28803
|
+
read(field, row2, col) {
|
|
28804
|
+
const format = col < formats.length ? formats[col] : void 0;
|
|
28805
|
+
if (format === void 0 || format === "general") return general(field, row2, col);
|
|
28806
|
+
if (format === "text") return { value: field, numFmt: "@" };
|
|
28807
|
+
if (format === "skip") return { value: null };
|
|
28808
|
+
const date = parseOrderedDate(field.trim(), format, date1904, separators.decimal);
|
|
28809
|
+
if (!date) {
|
|
28810
|
+
const parsed = general(field, row2, col);
|
|
28811
|
+
const dated = typeof parsed.value === "number" && isDate(parsed.numFmt);
|
|
28812
|
+
if (dated && DAY_FIRST.has(format) && MONTH_FIRST_RE.test(field.trim()))
|
|
28813
|
+
report(DATE_FALLBACK, row2, col);
|
|
28814
|
+
return parsed;
|
|
28815
|
+
}
|
|
28816
|
+
if (date.zoned) report(TIME_ZONE, row2, col);
|
|
28817
|
+
return { value: date.value, numFmt: date.numFmt };
|
|
28818
|
+
},
|
|
28819
|
+
warnings() {
|
|
28820
|
+
const warnings = [];
|
|
28821
|
+
counts.forEach((count2, key) => {
|
|
28822
|
+
const kind = KINDS2[key % KINDS2.length];
|
|
28823
|
+
const col = Math.floor(key / KINDS2.length);
|
|
28824
|
+
const label2 = columnLabel(target(col));
|
|
28825
|
+
const what = (count2 === 1 ? kind?.one : kind?.many)?.replace("{order}", formats[col] ?? "");
|
|
28826
|
+
const row2 = (firstRows[key] ?? 0) + 1;
|
|
28827
|
+
warnings.push(`Column ${label2}: ${count2} ${what} (first: ${label2}${row2}).`);
|
|
28828
|
+
});
|
|
28829
|
+
return warnings;
|
|
28830
|
+
}
|
|
28831
|
+
};
|
|
28832
|
+
}
|
|
28833
|
+
|
|
28396
28834
|
// xlsx/load/csv.ts
|
|
28397
28835
|
var CANDIDATES = [",", ";", " "];
|
|
28398
28836
|
function delimiterCounts(text2, maxLines = 20) {
|
|
@@ -28489,6 +28927,7 @@ function csvToWorkbook(text2, options = {}) {
|
|
|
28489
28927
|
workbook.format = "csv";
|
|
28490
28928
|
const sheet = workbook.sheets[0];
|
|
28491
28929
|
if (!sheet) return workbook;
|
|
28930
|
+
const reader = createFieldReader(options, workbook.date1904);
|
|
28492
28931
|
const base = styleAt(workbook, 0);
|
|
28493
28932
|
const formats = /* @__PURE__ */ new Map();
|
|
28494
28933
|
const rows = parseCsv(
|
|
@@ -28496,9 +28935,11 @@ function csvToWorkbook(text2, options = {}) {
|
|
|
28496
28935
|
options.delimiter === void 0 ? {} : { delimiter: options.delimiter }
|
|
28497
28936
|
);
|
|
28498
28937
|
rows.forEach((fields, row2) => {
|
|
28499
|
-
fields.forEach((field,
|
|
28938
|
+
fields.forEach((field, source2) => {
|
|
28500
28939
|
if (field === "") return;
|
|
28501
|
-
const
|
|
28940
|
+
const col = reader.target(source2);
|
|
28941
|
+
if (col < 0) return;
|
|
28942
|
+
const parsed = reader.read(field, row2, source2);
|
|
28502
28943
|
const cell = { value: parsed.value };
|
|
28503
28944
|
if (parsed.formula !== void 0) cell.formula = parsed.formula;
|
|
28504
28945
|
if (parsed.numFmt && parsed.numFmt !== "General") {
|
|
@@ -28517,6 +28958,7 @@ function csvToWorkbook(text2, options = {}) {
|
|
|
28517
28958
|
cells.set(col, cell);
|
|
28518
28959
|
});
|
|
28519
28960
|
});
|
|
28961
|
+
workbook.warnings.push(...reader.warnings());
|
|
28520
28962
|
return workbook;
|
|
28521
28963
|
}
|
|
28522
28964
|
var FORMULA_TRIGGER = /^[=+\-@\t\r]/;
|
|
@@ -29767,7 +30209,7 @@ var RT = {
|
|
|
29767
30209
|
OBPROJ: 211,
|
|
29768
30210
|
SXSTREAMID: 213};
|
|
29769
30211
|
var STATES = ["visible", "hidden", "veryHidden"];
|
|
29770
|
-
var
|
|
30212
|
+
var KINDS3 = {
|
|
29771
30213
|
0: "worksheet",
|
|
29772
30214
|
1: "macro",
|
|
29773
30215
|
2: "chart",
|
|
@@ -29902,7 +30344,7 @@ function parseGlobals(records) {
|
|
|
29902
30344
|
case RT.BOUNDSHEET: {
|
|
29903
30345
|
const offset2 = r.u32();
|
|
29904
30346
|
const state = STATES[r.u8() & 3] ?? "visible";
|
|
29905
|
-
const kind =
|
|
30347
|
+
const kind = KINDS3[r.u8()] ?? "unknown";
|
|
29906
30348
|
out.sheets.push({ offset: offset2, state, kind, name: r.shortXlString() });
|
|
29907
30349
|
break;
|
|
29908
30350
|
}
|
|
@@ -31205,6 +31647,7 @@ async function decryptWorkbook(bytes, password) {
|
|
|
31205
31647
|
return plain3;
|
|
31206
31648
|
}
|
|
31207
31649
|
async function loadWorkbook(input, options = {}) {
|
|
31650
|
+
const limits = options.limits && resolveLoadLimits(options.limits);
|
|
31208
31651
|
let bytes = toBytes3(input);
|
|
31209
31652
|
let format = detectWorkbookFormat(bytes, options.fileName);
|
|
31210
31653
|
const encrypted = format === "encrypted";
|
|
@@ -31216,12 +31659,13 @@ async function loadWorkbook(input, options = {}) {
|
|
|
31216
31659
|
if (format === "xls") return loadLegacyXls(bytes);
|
|
31217
31660
|
if (format === "csv") {
|
|
31218
31661
|
return csvToWorkbook(decodeText(bytes), {
|
|
31662
|
+
...options.csv,
|
|
31219
31663
|
sheetName: sheetNameFromFileName(options.fileName),
|
|
31220
31664
|
...options.delimiter === void 0 ? {} : { delimiter: options.delimiter },
|
|
31221
31665
|
...options.formulas === void 0 ? {} : { formulas: options.formulas }
|
|
31222
31666
|
});
|
|
31223
31667
|
}
|
|
31224
|
-
const workbook = await loadXlsx(bytes);
|
|
31668
|
+
const workbook = await loadXlsx(bytes, limits ? { limits } : {});
|
|
31225
31669
|
if (format === "xlsm" && workbook.format === "xlsx") workbook.format = "xlsm";
|
|
31226
31670
|
if (encrypted) workbook.warnings.push(ENCRYPTED_WARNING);
|
|
31227
31671
|
return workbook;
|
|
@@ -31245,6 +31689,7 @@ exports.IncorrectPasswordError = IncorrectPasswordError;
|
|
|
31245
31689
|
exports.LegacyXlsError = LegacyXlsError;
|
|
31246
31690
|
exports.PasswordRequiredError = PasswordRequiredError;
|
|
31247
31691
|
exports.UnsupportedWorkbookError = UnsupportedWorkbookError;
|
|
31692
|
+
exports.WorkbookTooLargeError = WorkbookTooLargeError;
|
|
31248
31693
|
exports.csvToWorkbook = csvToWorkbook;
|
|
31249
31694
|
exports.decodeSpreadsheetText = decodeSpreadsheetText;
|
|
31250
31695
|
exports.decodeText = decodeText;
|
|
@@ -31252,6 +31697,7 @@ exports.detectDelimiter = detectDelimiter;
|
|
|
31252
31697
|
exports.detectWorkbookFormat = detectWorkbookFormat;
|
|
31253
31698
|
exports.isEncryptedOoxmlPackage = isEncryptedOoxmlPackage;
|
|
31254
31699
|
exports.isOoxmlCryptoError = isOoxmlCryptoError;
|
|
31700
|
+
exports.isWorkbookTooLargeError = isWorkbookTooLargeError;
|
|
31255
31701
|
exports.loadLegacyXls = loadLegacyXls;
|
|
31256
31702
|
exports.loadWorkbook = loadWorkbook;
|
|
31257
31703
|
exports.neutraliseCsvFormula = neutraliseCsvFormula;
|