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.mjs
CHANGED
|
@@ -3248,6 +3248,19 @@ var DEFAULT_XML_LIMITS = {
|
|
|
3248
3248
|
maxDepth: 512,
|
|
3249
3249
|
maxNodes: 5e6
|
|
3250
3250
|
};
|
|
3251
|
+
var XmlLimitError = class extends Error {
|
|
3252
|
+
code = "xml-limit";
|
|
3253
|
+
/** The limit that was exceeded. */
|
|
3254
|
+
limit;
|
|
3255
|
+
/** Its value: the largest depth or element count allowed. */
|
|
3256
|
+
maximum;
|
|
3257
|
+
constructor(message, limit2, maximum) {
|
|
3258
|
+
super(message);
|
|
3259
|
+
this.name = "XmlLimitError";
|
|
3260
|
+
this.limit = limit2;
|
|
3261
|
+
this.maximum = maximum;
|
|
3262
|
+
}
|
|
3263
|
+
};
|
|
3251
3264
|
var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
|
|
3252
3265
|
var MARKUP_SKIPS = [
|
|
3253
3266
|
["<!--", "-->"],
|
|
@@ -3281,11 +3294,22 @@ function checkXmlLimits(xml, label2, limits = {}) {
|
|
|
3281
3294
|
continue;
|
|
3282
3295
|
}
|
|
3283
3296
|
nodes++;
|
|
3284
|
-
if (nodes > maxNodes)
|
|
3297
|
+
if (nodes > maxNodes)
|
|
3298
|
+
throw new XmlLimitError(
|
|
3299
|
+
`${label2} XML exceeds the limit of ${maxNodes} elements`,
|
|
3300
|
+
"maxNodes",
|
|
3301
|
+
maxNodes
|
|
3302
|
+
);
|
|
3285
3303
|
if (!selfClosing && ++depth > maxDepth)
|
|
3286
|
-
throw new
|
|
3304
|
+
throw new XmlLimitError(
|
|
3305
|
+
`${label2} XML exceeds the nesting depth limit of ${maxDepth}`,
|
|
3306
|
+
"maxDepth",
|
|
3307
|
+
maxDepth
|
|
3308
|
+
);
|
|
3287
3309
|
}
|
|
3288
3310
|
}
|
|
3311
|
+
var CRLF_DECLARATION = /^<\?xml[^>]*\?>\r\n/;
|
|
3312
|
+
var crlfDeclarations = /* @__PURE__ */ new WeakSet();
|
|
3289
3313
|
function parseXml(xml, options = {}) {
|
|
3290
3314
|
const label2 = options.label ?? "OOXML";
|
|
3291
3315
|
if (/<!DOCTYPE|<!ENTITY/i.test(xml))
|
|
@@ -3307,9 +3331,13 @@ function parseXml(xml, options = {}) {
|
|
|
3307
3331
|
}
|
|
3308
3332
|
if (parseError || !parsed.documentElement)
|
|
3309
3333
|
throw new Error(`Invalid ${label2} XML: ${parseError || "missing root element"}`);
|
|
3334
|
+
if (CRLF_DECLARATION.test(xml)) crlfDeclarations.add(parsed);
|
|
3310
3335
|
return parsed;
|
|
3311
3336
|
}
|
|
3312
|
-
var buildXml = (node2) =>
|
|
3337
|
+
var buildXml = (node2) => {
|
|
3338
|
+
const xml = new XMLSerializer().serializeToString(node2);
|
|
3339
|
+
return crlfDeclarations.has(node2) ? xml.replace(/^(<\?xml[^>]*\?>)\n/, "$1\r\n") : xml;
|
|
3340
|
+
};
|
|
3313
3341
|
var isElement = (node2) => node2.nodeType === 1;
|
|
3314
3342
|
var elements = (parent) => Array.from(parent.childNodes).filter(isElement);
|
|
3315
3343
|
function named(element2, local, ns, lenient = true) {
|
|
@@ -3821,10 +3849,13 @@ var DEFAULT_ZIP_LIMITS = {
|
|
|
3821
3849
|
var ZipLimitError = class extends Error {
|
|
3822
3850
|
code = "ZIP_BOMB";
|
|
3823
3851
|
limit;
|
|
3852
|
+
/** The check that failed (absent when the error was built without one). */
|
|
3853
|
+
kind;
|
|
3824
3854
|
constructor(message, details) {
|
|
3825
3855
|
super(message);
|
|
3826
3856
|
this.name = "ZipLimitError";
|
|
3827
3857
|
this.limit = details.limit;
|
|
3858
|
+
this.kind = details.kind;
|
|
3828
3859
|
}
|
|
3829
3860
|
};
|
|
3830
3861
|
var mib = (bytes) => Math.round(bytes / 1048576);
|
|
@@ -3847,7 +3878,7 @@ function resolveLimits(limits) {
|
|
|
3847
3878
|
maxEntryBytes: limits.maxEntryBytes ?? DEFAULT_ZIP_LIMITS.maxEntryBytes,
|
|
3848
3879
|
maxTotalBytes: limits.maxTotalBytes ?? DEFAULT_ZIP_LIMITS.maxTotalBytes,
|
|
3849
3880
|
label: limits.label ?? "ZIP",
|
|
3850
|
-
fail: (message, limit2) => create ? create(message, { limit: limit2 }) : new ZipLimitError(message, { limit: limit2 })
|
|
3881
|
+
fail: (message, limit2, kind) => create ? create(message, { limit: limit2, kind }) : new ZipLimitError(message, { limit: limit2, kind })
|
|
3851
3882
|
};
|
|
3852
3883
|
}
|
|
3853
3884
|
function inflateEntryGuarded(entry3, alreadyRead, limits) {
|
|
@@ -3870,13 +3901,18 @@ function inflateEntryGuarded(entry3, alreadyRead, limits) {
|
|
|
3870
3901
|
size += chunk.byteLength;
|
|
3871
3902
|
if (size > declared || size > r.maxEntryBytes)
|
|
3872
3903
|
return abort(
|
|
3873
|
-
r.fail(
|
|
3904
|
+
r.fail(
|
|
3905
|
+
`${r.label} part ${entry3.name} inflates past its declared size`,
|
|
3906
|
+
r.maxEntryBytes,
|
|
3907
|
+
size > declared ? "declaredSize" : "maxEntryBytes"
|
|
3908
|
+
)
|
|
3874
3909
|
);
|
|
3875
3910
|
if (alreadyRead + size > r.maxTotalBytes)
|
|
3876
3911
|
return abort(
|
|
3877
3912
|
r.fail(
|
|
3878
3913
|
`${r.label} package exceeds the ${mib(r.maxTotalBytes)} MiB uncompressed content limit`,
|
|
3879
|
-
r.maxTotalBytes
|
|
3914
|
+
r.maxTotalBytes,
|
|
3915
|
+
"maxTotalBytes"
|
|
3880
3916
|
)
|
|
3881
3917
|
);
|
|
3882
3918
|
chunks.push(chunk);
|
|
@@ -3909,26 +3945,29 @@ function guardZip(zip, limits = {}) {
|
|
|
3909
3945
|
if (entries.length > r.maxEntries)
|
|
3910
3946
|
throw r.fail(
|
|
3911
3947
|
`${r.label} package exceeds the ${r.maxEntries.toLocaleString("en-US")} part limit`,
|
|
3912
|
-
r.maxEntries
|
|
3948
|
+
r.maxEntries,
|
|
3949
|
+
"maxEntries"
|
|
3913
3950
|
);
|
|
3914
3951
|
let declared = 0;
|
|
3915
3952
|
for (const entry3 of entries) {
|
|
3916
3953
|
const original = entry3.unsafeOriginalName;
|
|
3917
3954
|
if (!isSafePartName(entry3.name) || original !== void 0 && !isSafePartName(original))
|
|
3918
|
-
throw r.fail(`${r.label} package has an unsafe part name`, r.maxEntries);
|
|
3955
|
+
throw r.fail(`${r.label} package has an unsafe part name`, r.maxEntries, "partName");
|
|
3919
3956
|
if (entry3.dir) continue;
|
|
3920
3957
|
const size = declaredEntrySize(entry3);
|
|
3921
3958
|
if (size > r.maxEntryBytes)
|
|
3922
3959
|
throw r.fail(
|
|
3923
3960
|
`${r.label} part ${entry3.name} exceeds the uncompressed part size limit`,
|
|
3924
|
-
r.maxEntryBytes
|
|
3961
|
+
r.maxEntryBytes,
|
|
3962
|
+
"maxEntryBytes"
|
|
3925
3963
|
);
|
|
3926
3964
|
declared += size;
|
|
3927
3965
|
}
|
|
3928
3966
|
if (declared > r.maxTotalBytes)
|
|
3929
3967
|
throw r.fail(
|
|
3930
3968
|
`${r.label} package exceeds the ${mib(r.maxTotalBytes)} MiB uncompressed content limit`,
|
|
3931
|
-
r.maxTotalBytes
|
|
3969
|
+
r.maxTotalBytes,
|
|
3970
|
+
"maxTotalBytes"
|
|
3932
3971
|
);
|
|
3933
3972
|
const produced = /* @__PURE__ */ new Map();
|
|
3934
3973
|
let total2 = 0;
|
|
@@ -5618,6 +5657,9 @@ function formatValue(value2, format, options = {}) {
|
|
|
5618
5657
|
if (options.width !== void 0) return fitNumber(value2, format, options);
|
|
5619
5658
|
return formatNumber(value2, format, options.date1904 ?? false);
|
|
5620
5659
|
}
|
|
5660
|
+
function isDateFormat(format) {
|
|
5661
|
+
return compileFormat(format).isDate;
|
|
5662
|
+
}
|
|
5621
5663
|
|
|
5622
5664
|
// xlsx/numfmt/input-date.ts
|
|
5623
5665
|
var MONTH_NAMES = [
|
|
@@ -5840,9 +5882,9 @@ function parseCellInput(text2, options = {}) {
|
|
|
5840
5882
|
return parsed.numFmt ? { value: parsed.value, numFmt: parsed.numFmt } : { value: parsed.value };
|
|
5841
5883
|
}
|
|
5842
5884
|
|
|
5843
|
-
// xlsx/
|
|
5844
|
-
function
|
|
5845
|
-
return JSON.stringify(sortKeys(
|
|
5885
|
+
// xlsx/stable-key.ts
|
|
5886
|
+
function stableKey(value2) {
|
|
5887
|
+
return JSON.stringify(sortKeys(value2));
|
|
5846
5888
|
}
|
|
5847
5889
|
function sortKeys(value2) {
|
|
5848
5890
|
if (Array.isArray(value2)) return value2.map(sortKeys);
|
|
@@ -5856,6 +5898,11 @@ function sortKeys(value2) {
|
|
|
5856
5898
|
}
|
|
5857
5899
|
return value2;
|
|
5858
5900
|
}
|
|
5901
|
+
|
|
5902
|
+
// xlsx/styles.ts
|
|
5903
|
+
function styleKey(style2) {
|
|
5904
|
+
return stableKey(style2);
|
|
5905
|
+
}
|
|
5859
5906
|
function styleAt(workbook, styleId) {
|
|
5860
5907
|
const style2 = workbook.styles[styleId ?? 0] ?? workbook.styles[0];
|
|
5861
5908
|
if (!style2) throw new Error("Workbook has no default cell style");
|
|
@@ -9308,10 +9355,72 @@ function mergeComments(legacy, threaded) {
|
|
|
9308
9355
|
(a2, b) => a2.address.row - b.address.row || a2.address.col - b.address.col
|
|
9309
9356
|
);
|
|
9310
9357
|
}
|
|
9311
|
-
|
|
9312
|
-
|
|
9313
|
-
var
|
|
9314
|
-
|
|
9358
|
+
|
|
9359
|
+
// xlsx/read/limits.ts
|
|
9360
|
+
var DEFAULT_XLSX_LOAD_LIMITS = {
|
|
9361
|
+
maxInputBytes: 50 * 1024 * 1024,
|
|
9362
|
+
maxParts: 1e4,
|
|
9363
|
+
maxPartBytes: 200 * 1024 * 1024,
|
|
9364
|
+
maxTotalBytes: 300 * 1024 * 1024,
|
|
9365
|
+
maxXmlElements: 5e6
|
|
9366
|
+
};
|
|
9367
|
+
var WorkbookTooLargeError = class extends Error {
|
|
9368
|
+
code = "workbook-too-large";
|
|
9369
|
+
/** The limit that was exceeded, as named in {@link XlsxLoadLimits}. */
|
|
9370
|
+
limit;
|
|
9371
|
+
/** The value of that limit when the load failed. */
|
|
9372
|
+
maximum;
|
|
9373
|
+
constructor(message, limit2, maximum, options) {
|
|
9374
|
+
super(message, options);
|
|
9375
|
+
this.name = "WorkbookTooLargeError";
|
|
9376
|
+
this.limit = limit2;
|
|
9377
|
+
this.maximum = maximum;
|
|
9378
|
+
}
|
|
9379
|
+
};
|
|
9380
|
+
function isWorkbookTooLargeError(error) {
|
|
9381
|
+
return error instanceof Error && error.code === "workbook-too-large";
|
|
9382
|
+
}
|
|
9383
|
+
function resolveLoadLimits(limits = {}) {
|
|
9384
|
+
const resolved = { ...DEFAULT_XLSX_LOAD_LIMITS };
|
|
9385
|
+
for (const name of Object.keys(resolved)) {
|
|
9386
|
+
const value2 = limits[name];
|
|
9387
|
+
if (value2 === void 0) continue;
|
|
9388
|
+
if (!Number.isFinite(value2) || value2 <= 0)
|
|
9389
|
+
throw new RangeError(`limits.${name} must be a positive finite number`);
|
|
9390
|
+
resolved[name] = value2;
|
|
9391
|
+
}
|
|
9392
|
+
return resolved;
|
|
9393
|
+
}
|
|
9394
|
+
var ZIP_LIMIT_NAMES = {
|
|
9395
|
+
maxInputBytes: "maxInputBytes",
|
|
9396
|
+
maxEntries: "maxParts",
|
|
9397
|
+
maxEntryBytes: "maxPartBytes",
|
|
9398
|
+
maxTotalBytes: "maxTotalBytes"
|
|
9399
|
+
};
|
|
9400
|
+
function zipLimitsFor(limits) {
|
|
9401
|
+
return {
|
|
9402
|
+
maxInputBytes: limits.maxInputBytes,
|
|
9403
|
+
maxEntries: limits.maxParts,
|
|
9404
|
+
maxEntryBytes: limits.maxPartBytes,
|
|
9405
|
+
maxTotalBytes: limits.maxTotalBytes,
|
|
9406
|
+
label: "XLSX",
|
|
9407
|
+
createError: (message, { limit: limit2, kind }) => {
|
|
9408
|
+
const name = ZIP_LIMIT_NAMES[kind];
|
|
9409
|
+
return name ? new WorkbookTooLargeError(message, name, limit2) : new ZipLimitError(message, { limit: limit2, kind });
|
|
9410
|
+
}
|
|
9411
|
+
};
|
|
9412
|
+
}
|
|
9413
|
+
function parseDataXml(xml, label2, maxXmlElements = DEFAULT_XLSX_LOAD_LIMITS.maxXmlElements) {
|
|
9414
|
+
try {
|
|
9415
|
+
return parseXml(xml, { label: label2, limits: { maxNodes: maxXmlElements } });
|
|
9416
|
+
} catch (error) {
|
|
9417
|
+
if (error instanceof XmlLimitError && error.limit === "maxNodes")
|
|
9418
|
+
throw new WorkbookTooLargeError(error.message, "maxXmlElements", error.maximum, {
|
|
9419
|
+
cause: error
|
|
9420
|
+
});
|
|
9421
|
+
throw error;
|
|
9422
|
+
}
|
|
9423
|
+
}
|
|
9315
9424
|
var CONTENT_TYPES = {
|
|
9316
9425
|
workbook: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
|
|
9317
9426
|
workbookMacro: "application/vnd.ms-excel.sheet.macroEnabled.main+xml",
|
|
@@ -9401,16 +9510,15 @@ var SourceIndex = class {
|
|
|
9401
9510
|
};
|
|
9402
9511
|
var mib2 = (bytes) => Math.round(bytes / 1048576);
|
|
9403
9512
|
async function readZipParts(input, limits = {}) {
|
|
9404
|
-
const
|
|
9405
|
-
const
|
|
9406
|
-
maxEntries: limits.maxParts ?? MAX_PARTS,
|
|
9407
|
-
maxEntryBytes: limits.maxPartBytes ?? MAX_PART_BYTES,
|
|
9408
|
-
maxTotalBytes: limits.maxTotalBytes ?? MAX_UNCOMPRESSED_BYTES,
|
|
9409
|
-
label: "XLSX"
|
|
9410
|
-
};
|
|
9513
|
+
const resolved = resolveLoadLimits(limits);
|
|
9514
|
+
const maxInput = resolved.maxInputBytes;
|
|
9411
9515
|
const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);
|
|
9412
9516
|
if (bytes.byteLength > maxInput)
|
|
9413
|
-
throw new
|
|
9517
|
+
throw new WorkbookTooLargeError(
|
|
9518
|
+
`XLSX package exceeds the ${mib2(maxInput)} MiB compressed input limit`,
|
|
9519
|
+
"maxInputBytes",
|
|
9520
|
+
maxInput
|
|
9521
|
+
);
|
|
9414
9522
|
let loaded;
|
|
9415
9523
|
try {
|
|
9416
9524
|
loaded = await JSZip2.loadAsync(bytes);
|
|
@@ -9420,7 +9528,7 @@ async function readZipParts(input, limits = {}) {
|
|
|
9420
9528
|
{ cause: error }
|
|
9421
9529
|
);
|
|
9422
9530
|
}
|
|
9423
|
-
const zip = guardZip(loaded,
|
|
9531
|
+
const zip = guardZip(loaded, zipLimitsFor(resolved));
|
|
9424
9532
|
const parts = /* @__PURE__ */ new Map();
|
|
9425
9533
|
for (const entry3 of Object.values(zip.files)) {
|
|
9426
9534
|
if (entry3.dir) continue;
|
|
@@ -9627,9 +9735,9 @@ function parseRichString(element2, palette) {
|
|
|
9627
9735
|
const text2 = parsed.map((run2) => run2.text).join("");
|
|
9628
9736
|
return { text: text2, runs: parsed };
|
|
9629
9737
|
}
|
|
9630
|
-
function parseSharedStrings(xml, palette) {
|
|
9738
|
+
function parseSharedStrings(xml, palette, maxXmlElements) {
|
|
9631
9739
|
if (!xml) return [];
|
|
9632
|
-
const root =
|
|
9740
|
+
const root = parseDataXml(xml, "XLSX shared strings", maxXmlElements).documentElement;
|
|
9633
9741
|
return xChildren(root, "si").map((si) => parseRichString(si, palette));
|
|
9634
9742
|
}
|
|
9635
9743
|
|
|
@@ -14269,7 +14377,11 @@ function parseWorksheet(ctx, partName, name, sheetId) {
|
|
|
14269
14377
|
return sheet;
|
|
14270
14378
|
}
|
|
14271
14379
|
const split = splitSheetData(xml);
|
|
14272
|
-
const root =
|
|
14380
|
+
const root = parseDataXml(
|
|
14381
|
+
split?.xml ?? xml,
|
|
14382
|
+
"XLSX worksheet",
|
|
14383
|
+
ctx.maxXmlElements
|
|
14384
|
+
).documentElement;
|
|
14273
14385
|
const byName = /* @__PURE__ */ new Map();
|
|
14274
14386
|
const cfBlocks = [];
|
|
14275
14387
|
for (const node2 of elements(root)) {
|
|
@@ -14343,8 +14455,9 @@ function liftPrintAreas(workbook) {
|
|
|
14343
14455
|
return false;
|
|
14344
14456
|
});
|
|
14345
14457
|
}
|
|
14346
|
-
async function loadXlsx(input) {
|
|
14347
|
-
const
|
|
14458
|
+
async function loadXlsx(input, options = {}) {
|
|
14459
|
+
const limits = resolveLoadLimits(options.limits);
|
|
14460
|
+
const parts = await readZipParts(input, limits);
|
|
14348
14461
|
const source2 = new SourceIndex(parts);
|
|
14349
14462
|
const workbookPart = source2.workbookPart();
|
|
14350
14463
|
if (!workbookPart) throw new Error("XLSX package has no workbook part (xl/workbook.xml)");
|
|
@@ -14365,7 +14478,8 @@ async function loadXlsx(input) {
|
|
|
14365
14478
|
source: source2,
|
|
14366
14479
|
sharedStrings: parseSharedStrings(
|
|
14367
14480
|
stringsPart ? source2.text(stringsPart) : void 0,
|
|
14368
|
-
styles.palette
|
|
14481
|
+
styles.palette,
|
|
14482
|
+
limits.maxXmlElements
|
|
14369
14483
|
),
|
|
14370
14484
|
xfMap: styles.xfMap,
|
|
14371
14485
|
date1904: book.date1904,
|
|
@@ -14373,7 +14487,8 @@ async function loadXlsx(input) {
|
|
|
14373
14487
|
dxfs: styles.dxfs,
|
|
14374
14488
|
persons: parsePersons(personsPart ? source2.text(personsPart) : void 0),
|
|
14375
14489
|
dynamicCells: parseDynamicArrayMetadata(metadataPart ? source2.text(metadataPart) : void 0),
|
|
14376
|
-
warn
|
|
14490
|
+
warn,
|
|
14491
|
+
maxXmlElements: limits.maxXmlElements
|
|
14377
14492
|
};
|
|
14378
14493
|
const rels = source2.rels(workbookPart);
|
|
14379
14494
|
const sheets = book.sheets.map((entry3) => {
|
|
@@ -16590,6 +16705,52 @@ function finite(value2) {
|
|
|
16590
16705
|
return value2;
|
|
16591
16706
|
}
|
|
16592
16707
|
|
|
16708
|
+
// xlsx/formula/operators.ts
|
|
16709
|
+
function power(base, exponent) {
|
|
16710
|
+
if (base === 0 && exponent === 0) throw new ErrorSignal(ERR.NUM);
|
|
16711
|
+
if (base === 0 && exponent < 0) throw new ErrorSignal(ERR.DIV0);
|
|
16712
|
+
if (base < 0 && !Number.isInteger(exponent)) {
|
|
16713
|
+
const inverse = 1 / exponent;
|
|
16714
|
+
const odd = Math.round(inverse);
|
|
16715
|
+
if (Math.abs(inverse - odd) < 1e-10 && Math.abs(odd) % 2 === 1) {
|
|
16716
|
+
return -Math.pow(-base, exponent);
|
|
16717
|
+
}
|
|
16718
|
+
throw new ErrorSignal(ERR.NUM);
|
|
16719
|
+
}
|
|
16720
|
+
return Math.pow(base, exponent);
|
|
16721
|
+
}
|
|
16722
|
+
function pick(m, row2, col) {
|
|
16723
|
+
const r = m.rows === 1 ? 0 : row2;
|
|
16724
|
+
const c2 = m.cols === 1 ? 0 : col;
|
|
16725
|
+
if (r >= m.rows || c2 >= m.cols) return ERR.NA;
|
|
16726
|
+
return m.get(r, c2);
|
|
16727
|
+
}
|
|
16728
|
+
function broadcastShape(operands, at) {
|
|
16729
|
+
let rows = 1;
|
|
16730
|
+
let cols = 1;
|
|
16731
|
+
for (const m of operands) {
|
|
16732
|
+
rows = Math.max(rows, m.rows);
|
|
16733
|
+
cols = Math.max(cols, m.cols);
|
|
16734
|
+
}
|
|
16735
|
+
if (!operands.some((m) => m.isPadded)) return Matrix.build(rows, cols, at);
|
|
16736
|
+
let blockRows = 1;
|
|
16737
|
+
let blockCols = 1;
|
|
16738
|
+
for (const m of operands) {
|
|
16739
|
+
blockRows = Math.max(blockRows, m.isPadded ? m.blockRows : m.rows);
|
|
16740
|
+
blockCols = Math.max(blockCols, m.isPadded ? m.blockCols : m.cols);
|
|
16741
|
+
}
|
|
16742
|
+
blockRows = Math.min(blockRows, rows);
|
|
16743
|
+
blockCols = Math.min(blockCols, cols);
|
|
16744
|
+
const varies = operands.some(
|
|
16745
|
+
(m) => blockRows < rows && m.rows === 1 && m.cols > 1 || blockCols < cols && m.cols === 1 && m.rows > 1
|
|
16746
|
+
);
|
|
16747
|
+
if (varies) return Matrix.build(rows, cols, at);
|
|
16748
|
+
return Matrix.padded(Matrix.build(blockRows, blockCols, at), rows, cols, at(rows - 1, cols - 1));
|
|
16749
|
+
}
|
|
16750
|
+
|
|
16751
|
+
// xlsx/formula/spill.ts
|
|
16752
|
+
var isSpilledCell = (cell) => cell !== void 0 && "spillAnchor" in cell;
|
|
16753
|
+
|
|
16593
16754
|
// xlsx/formula/functions/wildcard.ts
|
|
16594
16755
|
var lower = (ch) => (ch ?? "").toLowerCase();
|
|
16595
16756
|
var fold = (text2) => Array.from({ length: text2.length }, (_, i2) => lower(text2[i2]));
|
|
@@ -19874,49 +20035,6 @@ var INFO_FUNCTIONS = [
|
|
|
19874
20035
|
)
|
|
19875
20036
|
];
|
|
19876
20037
|
|
|
19877
|
-
// xlsx/formula/operators.ts
|
|
19878
|
-
function power(base, exponent) {
|
|
19879
|
-
if (base === 0 && exponent === 0) throw new ErrorSignal(ERR.NUM);
|
|
19880
|
-
if (base === 0 && exponent < 0) throw new ErrorSignal(ERR.DIV0);
|
|
19881
|
-
if (base < 0 && !Number.isInteger(exponent)) {
|
|
19882
|
-
const inverse = 1 / exponent;
|
|
19883
|
-
const odd = Math.round(inverse);
|
|
19884
|
-
if (Math.abs(inverse - odd) < 1e-10 && Math.abs(odd) % 2 === 1) {
|
|
19885
|
-
return -Math.pow(-base, exponent);
|
|
19886
|
-
}
|
|
19887
|
-
throw new ErrorSignal(ERR.NUM);
|
|
19888
|
-
}
|
|
19889
|
-
return Math.pow(base, exponent);
|
|
19890
|
-
}
|
|
19891
|
-
function pick(m, row2, col) {
|
|
19892
|
-
const r = m.rows === 1 ? 0 : row2;
|
|
19893
|
-
const c2 = m.cols === 1 ? 0 : col;
|
|
19894
|
-
if (r >= m.rows || c2 >= m.cols) return ERR.NA;
|
|
19895
|
-
return m.get(r, c2);
|
|
19896
|
-
}
|
|
19897
|
-
function broadcastShape(operands, at) {
|
|
19898
|
-
let rows = 1;
|
|
19899
|
-
let cols = 1;
|
|
19900
|
-
for (const m of operands) {
|
|
19901
|
-
rows = Math.max(rows, m.rows);
|
|
19902
|
-
cols = Math.max(cols, m.cols);
|
|
19903
|
-
}
|
|
19904
|
-
if (!operands.some((m) => m.isPadded)) return Matrix.build(rows, cols, at);
|
|
19905
|
-
let blockRows = 1;
|
|
19906
|
-
let blockCols = 1;
|
|
19907
|
-
for (const m of operands) {
|
|
19908
|
-
blockRows = Math.max(blockRows, m.isPadded ? m.blockRows : m.rows);
|
|
19909
|
-
blockCols = Math.max(blockCols, m.isPadded ? m.blockCols : m.cols);
|
|
19910
|
-
}
|
|
19911
|
-
blockRows = Math.min(blockRows, rows);
|
|
19912
|
-
blockCols = Math.min(blockCols, cols);
|
|
19913
|
-
const varies = operands.some(
|
|
19914
|
-
(m) => blockRows < rows && m.rows === 1 && m.cols > 1 || blockCols < cols && m.cols === 1 && m.rows > 1
|
|
19915
|
-
);
|
|
19916
|
-
if (varies) return Matrix.build(rows, cols, at);
|
|
19917
|
-
return Matrix.padded(Matrix.build(blockRows, blockCols, at), rows, cols, at(rows - 1, cols - 1));
|
|
19918
|
-
}
|
|
19919
|
-
|
|
19920
20038
|
// xlsx/formula/functions/lambda.ts
|
|
19921
20039
|
var C17 = "Logical";
|
|
19922
20040
|
function lambdaArg(value2) {
|
|
@@ -25176,9 +25294,6 @@ var paramKind = (spec2, index3) => {
|
|
|
25176
25294
|
return params[Math.min(index3, params.length - 1)] ?? "value";
|
|
25177
25295
|
};
|
|
25178
25296
|
|
|
25179
|
-
// xlsx/formula/spill.ts
|
|
25180
|
-
var isSpilledCell = (cell) => cell !== void 0 && "spillAnchor" in cell;
|
|
25181
|
-
|
|
25182
25297
|
// xlsx/formula/move.ts
|
|
25183
25298
|
var same3 = (a2, b) => a2.toLowerCase() === b.toLowerCase();
|
|
25184
25299
|
function deleteSheetInFormula(formula, sheetName, tableNames = []) {
|
|
@@ -27207,10 +27322,8 @@ function sheetFormatXml(sheet) {
|
|
|
27207
27322
|
const current = { defaultRowHeight: sheet.defaultRowHeight };
|
|
27208
27323
|
if (sheet.defaultColWidth !== void 0) current.defaultColWidth = sheet.defaultColWidth;
|
|
27209
27324
|
if (sheet.format && Object.keys(sheet.format).length) current.format = sheet.format;
|
|
27210
|
-
|
|
27211
|
-
|
|
27212
|
-
...[...sheet.rowInfo.values()].map((info) => info.outlineLevel ?? 0)
|
|
27213
|
-
);
|
|
27325
|
+
let rowLevel = 0;
|
|
27326
|
+
for (const info of sheet.rowInfo.values()) rowLevel = Math.max(rowLevel, info.outlineLevel ?? 0);
|
|
27214
27327
|
const colLevel = Math.max(0, ...sheet.columns.map((col) => col.outlineLevel ?? 0));
|
|
27215
27328
|
if (source2 && sameModel(readSheetFormat(source2), current) && Number(source2.getAttribute("outlineLevelRow") ?? 0) === rowLevel && Number(source2.getAttribute("outlineLevelCol") ?? 0) === colLevel)
|
|
27216
27329
|
return snapshotXml(sheet, "sheetFormatPr") ?? "";
|
|
@@ -27512,11 +27625,10 @@ function pivotCacheDefinitionXml(pivot, workbook, data, recordRel) {
|
|
|
27512
27625
|
const items = data.items[index3];
|
|
27513
27626
|
if (pivot.dateFields?.includes(name) && items.every((v) => typeof v === "number")) {
|
|
27514
27627
|
const serials = items;
|
|
27515
|
-
const
|
|
27516
|
-
const maxDate = Number.isInteger(latest) ? latest + 1 : latest;
|
|
27628
|
+
const range = dateGroupRange({}, serials);
|
|
27517
27629
|
const parent = derived.filter((entry3) => entry3.group.field === name).at(-1);
|
|
27518
27630
|
const link = parent ? `<fieldGroup par="${parent.index}"/>` : "";
|
|
27519
|
-
return `<cacheField${attrs({ name: encodeEscapes(name), numFmtId: 14 })}><sharedItems${attrs({ containsSemiMixedTypes: false, containsNonDate: false, containsDate: true, containsString: false, minDate: iso(
|
|
27631
|
+
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>`;
|
|
27520
27632
|
}
|
|
27521
27633
|
const types = new Set(
|
|
27522
27634
|
items.map((value2) => value2 === null || value2 === "" ? "blank" : typeof value2)
|
|
@@ -28387,6 +28499,332 @@ async function saveXlsx(workbook) {
|
|
|
28387
28499
|
return writer.build();
|
|
28388
28500
|
}
|
|
28389
28501
|
|
|
28502
|
+
// xlsx/load/csv-dates.ts
|
|
28503
|
+
var DAY_RE = /^(\d{1,4})([-/. ])(\d{1,4})\2(\d{1,4})$/;
|
|
28504
|
+
var COMPACT_RE = /^\d{8}$/;
|
|
28505
|
+
var PAIR_RE = /^(\d{1,2})\/(\d{1,2})$/;
|
|
28506
|
+
var FRACTION_RE = /\.(\d+)/;
|
|
28507
|
+
var TIME_RE3 = /^(\d{1,2}:\d{1,2}(?::\d{1,2}(?:\.\d+)?)?(?:\s*[ap]m?)?)\s*(Z|[+-]\d{2}(?::?\d{2})?)?$/i;
|
|
28508
|
+
var SPACE_RE = /\s/;
|
|
28509
|
+
var MAX_DATE_TEXT = 64;
|
|
28510
|
+
function splitTime(text2) {
|
|
28511
|
+
const colon = text2.indexOf(":");
|
|
28512
|
+
if (colon < 0) return [text2, void 0];
|
|
28513
|
+
let start = colon;
|
|
28514
|
+
while (start > 0 && colon - start < 2) {
|
|
28515
|
+
const code = text2.charCodeAt(start - 1);
|
|
28516
|
+
if (code < 48 || code > 57) break;
|
|
28517
|
+
start--;
|
|
28518
|
+
}
|
|
28519
|
+
const before = text2[start - 1] ?? "";
|
|
28520
|
+
if (start === colon || !before) return void 0;
|
|
28521
|
+
if (before === "T" || before === "t") return [text2.slice(0, start - 1), text2.slice(start)];
|
|
28522
|
+
return SPACE_RE.test(before) ? [text2.slice(0, start).trimEnd(), text2.slice(start)] : void 0;
|
|
28523
|
+
}
|
|
28524
|
+
function compactParts(text2, order) {
|
|
28525
|
+
const parts = [];
|
|
28526
|
+
let at = 0;
|
|
28527
|
+
for (const kind of order) {
|
|
28528
|
+
const size = kind === "Y" ? 4 : 2;
|
|
28529
|
+
parts.push(text2.slice(at, at + size));
|
|
28530
|
+
at += size;
|
|
28531
|
+
}
|
|
28532
|
+
return parts;
|
|
28533
|
+
}
|
|
28534
|
+
function pairParts(pair, order) {
|
|
28535
|
+
let next = 0;
|
|
28536
|
+
return [...order].map(
|
|
28537
|
+
(kind) => kind === "Y" ? String((/* @__PURE__ */ new Date()).getFullYear()) : pair[next++] ?? ""
|
|
28538
|
+
);
|
|
28539
|
+
}
|
|
28540
|
+
function dayParts(text2, order) {
|
|
28541
|
+
const match2 = DAY_RE.exec(text2);
|
|
28542
|
+
if (match2) return [match2[1] ?? "", match2[3] ?? "", match2[4] ?? ""];
|
|
28543
|
+
if (COMPACT_RE.test(text2)) return compactParts(text2, order);
|
|
28544
|
+
const pair = PAIR_RE.exec(text2);
|
|
28545
|
+
return pair ? pairParts([pair[1] ?? "", pair[2] ?? ""], order) : void 0;
|
|
28546
|
+
}
|
|
28547
|
+
function inOrder(parts, order) {
|
|
28548
|
+
const date = [0, 0, 0];
|
|
28549
|
+
for (let i2 = 0; i2 < 3; i2++) {
|
|
28550
|
+
const part = parts[i2] ?? "";
|
|
28551
|
+
const kind = order[i2];
|
|
28552
|
+
if (kind === "Y") {
|
|
28553
|
+
if (part.length === 3 || part.length > 4) return void 0;
|
|
28554
|
+
date[0] = fullYear(part);
|
|
28555
|
+
} else if (part.length > 2) return void 0;
|
|
28556
|
+
else date[kind === "M" ? 1 : 2] = Number(part);
|
|
28557
|
+
}
|
|
28558
|
+
return date;
|
|
28559
|
+
}
|
|
28560
|
+
function offsetMinutes(zone) {
|
|
28561
|
+
if (zone === "Z" || zone === "z") return 0;
|
|
28562
|
+
const hours = Number(zone.slice(1, 3));
|
|
28563
|
+
const minutes = zone.length > 3 ? Number(zone.slice(-2)) : 0;
|
|
28564
|
+
if (hours > 23 || minutes > 59) return void 0;
|
|
28565
|
+
return (zone.startsWith("-") ? -1 : 1) * (hours * 60 + minutes);
|
|
28566
|
+
}
|
|
28567
|
+
function parseOrderedDate(text2, order, date1904, decimal = ".") {
|
|
28568
|
+
if (text2.length > MAX_DATE_TEXT) return void 0;
|
|
28569
|
+
const split = splitTime(text2);
|
|
28570
|
+
if (!split) return void 0;
|
|
28571
|
+
let clock = split[1];
|
|
28572
|
+
if (clock !== void 0 && decimal !== ".")
|
|
28573
|
+
clock = clock.includes(".") ? "" : clock.replace(decimal, ".");
|
|
28574
|
+
const tail = clock === void 0 ? void 0 : TIME_RE3.exec(clock);
|
|
28575
|
+
if (clock !== void 0 && !tail) return void 0;
|
|
28576
|
+
const parts = dayParts(split[0], order);
|
|
28577
|
+
const date = parts && inOrder(parts, order);
|
|
28578
|
+
if (!date) return void 0;
|
|
28579
|
+
const serial = serialOf(date[0], date[1], date[2], date1904);
|
|
28580
|
+
if (serial === void 0) return void 0;
|
|
28581
|
+
if (!tail) return { value: serial, numFmt: "yyyy-mm-dd", zoned: false };
|
|
28582
|
+
const time = parseTime(tail[1] ?? "");
|
|
28583
|
+
if (!time || time.fraction >= 1) return void 0;
|
|
28584
|
+
const zone = tail[2];
|
|
28585
|
+
const offset2 = zone === void 0 ? 0 : offsetMinutes(zone);
|
|
28586
|
+
if (offset2 === void 0) return void 0;
|
|
28587
|
+
const value2 = serial + time.fraction - offset2 / 1440;
|
|
28588
|
+
if (value2 < (date1904 ? 0 : 1)) return void 0;
|
|
28589
|
+
const digits2 = Math.min(3, FRACTION_RE.exec(tail[1] ?? "")?.[1]?.length ?? 0);
|
|
28590
|
+
const format = digits2 ? `h:mm:ss.${"0".repeat(digits2)}` : time.format;
|
|
28591
|
+
return { value: value2, numFmt: `yyyy-mm-dd ${format}`, zoned: zone !== void 0 };
|
|
28592
|
+
}
|
|
28593
|
+
|
|
28594
|
+
// xlsx/load/csv-separators.ts
|
|
28595
|
+
function separatorsOf(decimal = ".", thousands = decimal === "," ? "." : ",") {
|
|
28596
|
+
for (const separator of [decimal, thousands])
|
|
28597
|
+
if (separator.length !== 1 || /[\d+-]/.test(separator))
|
|
28598
|
+
throw new RangeError(`"${separator}" cannot be a decimal or thousands separator.`);
|
|
28599
|
+
if (decimal === thousands)
|
|
28600
|
+
throw new RangeError("The decimal and thousands separators must differ.");
|
|
28601
|
+
return { decimal, thousands };
|
|
28602
|
+
}
|
|
28603
|
+
function separatorNormalizer({
|
|
28604
|
+
decimal,
|
|
28605
|
+
thousands
|
|
28606
|
+
}) {
|
|
28607
|
+
if (decimal === "." && thousands === ",") return void 0;
|
|
28608
|
+
const escape2 = (char) => char.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&");
|
|
28609
|
+
const pattern = new RegExp(`(${escape2(decimal)})|(\\d)${escape2(thousands)}(?=\\d)|[.,]`, "g");
|
|
28610
|
+
const swap = (_, point, digit) => {
|
|
28611
|
+
if (point !== void 0) return ".";
|
|
28612
|
+
if (digit !== void 0) return `${digit},`;
|
|
28613
|
+
return "";
|
|
28614
|
+
};
|
|
28615
|
+
return (text2) => text2.replace(pattern, swap);
|
|
28616
|
+
}
|
|
28617
|
+
|
|
28618
|
+
// xlsx/load/csv-traits.ts
|
|
28619
|
+
var LEADING_ZEROS = 1;
|
|
28620
|
+
var LONG_NUMBER = 2;
|
|
28621
|
+
var SCIENTIFIC = 4;
|
|
28622
|
+
var LETTER_DATE = 8;
|
|
28623
|
+
var TIME_ZONE = 16;
|
|
28624
|
+
var DATE_FALLBACK = 32;
|
|
28625
|
+
var isDigit4 = (code) => code >= 48 && code <= 57;
|
|
28626
|
+
var isLetter2 = (code) => (code | 32) >= 97 && (code | 32) <= 122;
|
|
28627
|
+
function numberTraits(text2, decimal, thousands) {
|
|
28628
|
+
let traits = 0;
|
|
28629
|
+
let digits2 = 0;
|
|
28630
|
+
let first2 = true;
|
|
28631
|
+
for (let i2 = 0; i2 < text2.length; i2++) {
|
|
28632
|
+
const code = text2.charCodeAt(i2);
|
|
28633
|
+
if (isDigit4(code)) {
|
|
28634
|
+
if (first2 && code === 48) {
|
|
28635
|
+
const next = text2.charCodeAt(i2 + 1);
|
|
28636
|
+
if (isDigit4(next) || next === thousands && isDigit4(text2.charCodeAt(i2 + 2)))
|
|
28637
|
+
traits |= LEADING_ZEROS;
|
|
28638
|
+
}
|
|
28639
|
+
first2 = false;
|
|
28640
|
+
if (digits2 > 0 || code !== 48) digits2++;
|
|
28641
|
+
} else if (code === decimal) first2 = false;
|
|
28642
|
+
else if (code === 69 || code === 101) {
|
|
28643
|
+
traits |= SCIENTIFIC;
|
|
28644
|
+
break;
|
|
28645
|
+
}
|
|
28646
|
+
}
|
|
28647
|
+
return digits2 > 15 ? traits | LONG_NUMBER : traits;
|
|
28648
|
+
}
|
|
28649
|
+
function significantDigits(text2) {
|
|
28650
|
+
let digits2 = "";
|
|
28651
|
+
for (const char of text2) {
|
|
28652
|
+
if (char === "e" || char === "E") break;
|
|
28653
|
+
if (char >= "0" && char <= "9" && (digits2 !== "" || char !== "0")) digits2 += char;
|
|
28654
|
+
}
|
|
28655
|
+
let end = digits2.length;
|
|
28656
|
+
while (end > 0 && digits2[end - 1] === "0") end--;
|
|
28657
|
+
return digits2.slice(0, end);
|
|
28658
|
+
}
|
|
28659
|
+
var keepsDigits = (field, value2) => significantDigits(field) === significantDigits(String(Math.abs(value2)));
|
|
28660
|
+
function dateTraits(field) {
|
|
28661
|
+
const text2 = field.trimStart();
|
|
28662
|
+
let i2 = 0;
|
|
28663
|
+
while (isLetter2(text2.charCodeAt(i2))) i2++;
|
|
28664
|
+
return i2 > 0 && isDigit4(text2.charCodeAt(i2)) ? LETTER_DATE : 0;
|
|
28665
|
+
}
|
|
28666
|
+
|
|
28667
|
+
// xlsx/load/csv-import.ts
|
|
28668
|
+
var KINDS2 = [
|
|
28669
|
+
{
|
|
28670
|
+
conversion: "leadingZeros",
|
|
28671
|
+
one: "value lost its leading zeros when converted to a number",
|
|
28672
|
+
many: "values lost their leading zeros when converted to numbers"
|
|
28673
|
+
},
|
|
28674
|
+
{
|
|
28675
|
+
conversion: "longNumbers",
|
|
28676
|
+
one: "value with more than 15 digits lost digits when converted to a number",
|
|
28677
|
+
many: "values with more than 15 digits lost digits when converted to numbers"
|
|
28678
|
+
},
|
|
28679
|
+
{
|
|
28680
|
+
conversion: "scientific",
|
|
28681
|
+
one: "value with the letter E lost digits when converted to a number",
|
|
28682
|
+
many: "values with the letter E lost digits when converted to numbers"
|
|
28683
|
+
},
|
|
28684
|
+
{
|
|
28685
|
+
conversion: "letterDates",
|
|
28686
|
+
one: "value of letters and digits such as JAN1 was converted to a date",
|
|
28687
|
+
many: "values of letters and digits such as JAN1 were converted to dates"
|
|
28688
|
+
},
|
|
28689
|
+
{
|
|
28690
|
+
conversion: void 0,
|
|
28691
|
+
one: "date-time with a time zone was converted to UTC",
|
|
28692
|
+
many: "date-times with a time zone were converted to UTC"
|
|
28693
|
+
},
|
|
28694
|
+
{
|
|
28695
|
+
conversion: void 0,
|
|
28696
|
+
one: "value could not be read as a date in {order} order and was read as General",
|
|
28697
|
+
many: "values could not be read as dates in {order} order and were read as General"
|
|
28698
|
+
}
|
|
28699
|
+
];
|
|
28700
|
+
var FORMATS = /* @__PURE__ */ new Set(["general", "text", "skip", "MDY", "DMY", "YMD", "MYD", "DYM", "YDM"]);
|
|
28701
|
+
var DAY_FIRST = /* @__PURE__ */ new Set(["DMY", "DYM", "YDM"]);
|
|
28702
|
+
var MONTH_FIRST_RE = /^\d{1,2}[-/]\d{1,2}(?:[-/]\d{1,4})?(?:$|[\sT])/;
|
|
28703
|
+
var FRACTION_FORMATS = /* @__PURE__ */ new Set(["# ?/?", "# ??/??"]);
|
|
28704
|
+
var EN_US_SEPARATORS_RE = /[.,]/;
|
|
28705
|
+
var SIGNED_RE = /^\s*(?:[$€£]\s*)?[-+(]/;
|
|
28706
|
+
function columnFormats(columns) {
|
|
28707
|
+
const formats = [];
|
|
28708
|
+
for (const [key, format] of Object.entries(columns ?? {})) {
|
|
28709
|
+
const col = Number(key);
|
|
28710
|
+
if (!Number.isInteger(col) || col < 0 || col > MAX_COL)
|
|
28711
|
+
throw new RangeError(`CSV column ${key} is not a zero-based column index.`);
|
|
28712
|
+
if (!FORMATS.has(format))
|
|
28713
|
+
throw new RangeError(`Unknown CSV column format "${String(format)}" for column ${col}.`);
|
|
28714
|
+
formats[col] = format;
|
|
28715
|
+
}
|
|
28716
|
+
return formats;
|
|
28717
|
+
}
|
|
28718
|
+
function createFieldReader(options, date1904) {
|
|
28719
|
+
const formats = columnFormats(options.columns);
|
|
28720
|
+
const targets = [];
|
|
28721
|
+
let skipped = 0;
|
|
28722
|
+
for (let col = 0; col < formats.length; col++) {
|
|
28723
|
+
if (formats[col] === "skip") {
|
|
28724
|
+
targets.push(-1);
|
|
28725
|
+
skipped++;
|
|
28726
|
+
} else targets.push(col - skipped);
|
|
28727
|
+
}
|
|
28728
|
+
const target = (col) => col < targets.length ? targets[col] ?? -1 : col - skipped;
|
|
28729
|
+
let keepText = 0;
|
|
28730
|
+
KINDS2.forEach(({ conversion }, kind) => {
|
|
28731
|
+
if (conversion && options.conversions?.[conversion] === false) keepText |= 1 << kind;
|
|
28732
|
+
});
|
|
28733
|
+
const separators = separatorsOf(options.decimalSeparator, options.thousandsSeparator);
|
|
28734
|
+
const normalize = separatorNormalizer(separators);
|
|
28735
|
+
const decimal = separators.decimal.charCodeAt(0);
|
|
28736
|
+
const thousands = separators.thousands.charCodeAt(0);
|
|
28737
|
+
const { formulas = false, trailingMinus = false } = options;
|
|
28738
|
+
const counts = [];
|
|
28739
|
+
const firstRows = [];
|
|
28740
|
+
const report = (traits, row2, col) => {
|
|
28741
|
+
if (options.reportConversions === false) return;
|
|
28742
|
+
for (let kind = 0; kind < KINDS2.length; kind++) {
|
|
28743
|
+
if (!(traits & 1 << kind)) continue;
|
|
28744
|
+
const key = col * KINDS2.length + kind;
|
|
28745
|
+
const count2 = counts[key];
|
|
28746
|
+
if (count2 === void 0) firstRows[key] = row2;
|
|
28747
|
+
counts[key] = (count2 ?? 0) + 1;
|
|
28748
|
+
}
|
|
28749
|
+
};
|
|
28750
|
+
const dateFormats = /* @__PURE__ */ new Map();
|
|
28751
|
+
const isDate = (numFmt) => {
|
|
28752
|
+
if (numFmt === void 0) return false;
|
|
28753
|
+
let known = dateFormats.get(numFmt);
|
|
28754
|
+
if (known === void 0) {
|
|
28755
|
+
known = isDateFormat(numFmt);
|
|
28756
|
+
dateFormats.set(numFmt, known);
|
|
28757
|
+
}
|
|
28758
|
+
return known;
|
|
28759
|
+
};
|
|
28760
|
+
const isNumber = (parsed) => typeof parsed.value === "number" && parsed.formula === void 0 && !isDate(parsed.numFmt);
|
|
28761
|
+
const localized = (text2, normalized) => {
|
|
28762
|
+
const parsed = parseCellInput(normalized);
|
|
28763
|
+
if (normalized === text2 || isNumber(parsed)) return parsed;
|
|
28764
|
+
const plain3 = parseCellInput(text2);
|
|
28765
|
+
if (isNumber(plain3) && EN_US_SEPARATORS_RE.test(text2)) return { value: text2 };
|
|
28766
|
+
const dated = typeof parsed.value === "number" && parsed.formula === void 0;
|
|
28767
|
+
return dated && typeof plain3.value === "string" ? parsed : plain3;
|
|
28768
|
+
};
|
|
28769
|
+
const type = normalize ? (text2) => localized(text2, normalize(text2)) : (text2) => parseCellInput(text2);
|
|
28770
|
+
const negative = (field) => {
|
|
28771
|
+
const text2 = field.trimEnd();
|
|
28772
|
+
if (text2.length < 2 || !text2.endsWith("-")) return void 0;
|
|
28773
|
+
const body = text2.slice(0, -1);
|
|
28774
|
+
if (SIGNED_RE.test(body)) return void 0;
|
|
28775
|
+
const parsed = type(body);
|
|
28776
|
+
if (!isNumber(parsed)) return void 0;
|
|
28777
|
+
return { ...parsed, value: parsed.value === 0 ? 0 : -parsed.value };
|
|
28778
|
+
};
|
|
28779
|
+
const general = (field, row2, col) => {
|
|
28780
|
+
if (!formulas && field.startsWith("=")) return { value: field };
|
|
28781
|
+
const parsed = (trailingMinus ? negative(field) : void 0) ?? type(field);
|
|
28782
|
+
if (typeof parsed.value !== "number" || parsed.formula !== void 0) return parsed;
|
|
28783
|
+
const grouping = FRACTION_FORMATS.has(parsed.numFmt ?? "") ? -1 : thousands;
|
|
28784
|
+
const traits = isDate(parsed.numFmt) ? dateTraits(field) : numberTraits(field, decimal, grouping);
|
|
28785
|
+
if (traits === 0) return parsed;
|
|
28786
|
+
if (traits & keepText) return { value: field };
|
|
28787
|
+
let lost = traits;
|
|
28788
|
+
if (traits & (LONG_NUMBER | SCIENTIFIC)) {
|
|
28789
|
+
if (keepsDigits(field, parsed.value)) lost &= -7;
|
|
28790
|
+
else if (traits & LONG_NUMBER) lost &= ~SCIENTIFIC;
|
|
28791
|
+
}
|
|
28792
|
+
if (lost) report(lost, row2, col);
|
|
28793
|
+
return parsed;
|
|
28794
|
+
};
|
|
28795
|
+
return {
|
|
28796
|
+
target,
|
|
28797
|
+
read(field, row2, col) {
|
|
28798
|
+
const format = col < formats.length ? formats[col] : void 0;
|
|
28799
|
+
if (format === void 0 || format === "general") return general(field, row2, col);
|
|
28800
|
+
if (format === "text") return { value: field, numFmt: "@" };
|
|
28801
|
+
if (format === "skip") return { value: null };
|
|
28802
|
+
const date = parseOrderedDate(field.trim(), format, date1904, separators.decimal);
|
|
28803
|
+
if (!date) {
|
|
28804
|
+
const parsed = general(field, row2, col);
|
|
28805
|
+
const dated = typeof parsed.value === "number" && isDate(parsed.numFmt);
|
|
28806
|
+
if (dated && DAY_FIRST.has(format) && MONTH_FIRST_RE.test(field.trim()))
|
|
28807
|
+
report(DATE_FALLBACK, row2, col);
|
|
28808
|
+
return parsed;
|
|
28809
|
+
}
|
|
28810
|
+
if (date.zoned) report(TIME_ZONE, row2, col);
|
|
28811
|
+
return { value: date.value, numFmt: date.numFmt };
|
|
28812
|
+
},
|
|
28813
|
+
warnings() {
|
|
28814
|
+
const warnings = [];
|
|
28815
|
+
counts.forEach((count2, key) => {
|
|
28816
|
+
const kind = KINDS2[key % KINDS2.length];
|
|
28817
|
+
const col = Math.floor(key / KINDS2.length);
|
|
28818
|
+
const label2 = columnLabel(target(col));
|
|
28819
|
+
const what = (count2 === 1 ? kind?.one : kind?.many)?.replace("{order}", formats[col] ?? "");
|
|
28820
|
+
const row2 = (firstRows[key] ?? 0) + 1;
|
|
28821
|
+
warnings.push(`Column ${label2}: ${count2} ${what} (first: ${label2}${row2}).`);
|
|
28822
|
+
});
|
|
28823
|
+
return warnings;
|
|
28824
|
+
}
|
|
28825
|
+
};
|
|
28826
|
+
}
|
|
28827
|
+
|
|
28390
28828
|
// xlsx/load/csv.ts
|
|
28391
28829
|
var CANDIDATES = [",", ";", " "];
|
|
28392
28830
|
function delimiterCounts(text2, maxLines = 20) {
|
|
@@ -28483,6 +28921,7 @@ function csvToWorkbook(text2, options = {}) {
|
|
|
28483
28921
|
workbook.format = "csv";
|
|
28484
28922
|
const sheet = workbook.sheets[0];
|
|
28485
28923
|
if (!sheet) return workbook;
|
|
28924
|
+
const reader = createFieldReader(options, workbook.date1904);
|
|
28486
28925
|
const base = styleAt(workbook, 0);
|
|
28487
28926
|
const formats = /* @__PURE__ */ new Map();
|
|
28488
28927
|
const rows = parseCsv(
|
|
@@ -28490,9 +28929,11 @@ function csvToWorkbook(text2, options = {}) {
|
|
|
28490
28929
|
options.delimiter === void 0 ? {} : { delimiter: options.delimiter }
|
|
28491
28930
|
);
|
|
28492
28931
|
rows.forEach((fields, row2) => {
|
|
28493
|
-
fields.forEach((field,
|
|
28932
|
+
fields.forEach((field, source2) => {
|
|
28494
28933
|
if (field === "") return;
|
|
28495
|
-
const
|
|
28934
|
+
const col = reader.target(source2);
|
|
28935
|
+
if (col < 0) return;
|
|
28936
|
+
const parsed = reader.read(field, row2, source2);
|
|
28496
28937
|
const cell = { value: parsed.value };
|
|
28497
28938
|
if (parsed.formula !== void 0) cell.formula = parsed.formula;
|
|
28498
28939
|
if (parsed.numFmt && parsed.numFmt !== "General") {
|
|
@@ -28511,6 +28952,7 @@ function csvToWorkbook(text2, options = {}) {
|
|
|
28511
28952
|
cells.set(col, cell);
|
|
28512
28953
|
});
|
|
28513
28954
|
});
|
|
28955
|
+
workbook.warnings.push(...reader.warnings());
|
|
28514
28956
|
return workbook;
|
|
28515
28957
|
}
|
|
28516
28958
|
var FORMULA_TRIGGER = /^[=+\-@\t\r]/;
|
|
@@ -29761,7 +30203,7 @@ var RT = {
|
|
|
29761
30203
|
OBPROJ: 211,
|
|
29762
30204
|
SXSTREAMID: 213};
|
|
29763
30205
|
var STATES = ["visible", "hidden", "veryHidden"];
|
|
29764
|
-
var
|
|
30206
|
+
var KINDS3 = {
|
|
29765
30207
|
0: "worksheet",
|
|
29766
30208
|
1: "macro",
|
|
29767
30209
|
2: "chart",
|
|
@@ -29896,7 +30338,7 @@ function parseGlobals(records) {
|
|
|
29896
30338
|
case RT.BOUNDSHEET: {
|
|
29897
30339
|
const offset2 = r.u32();
|
|
29898
30340
|
const state = STATES[r.u8() & 3] ?? "visible";
|
|
29899
|
-
const kind =
|
|
30341
|
+
const kind = KINDS3[r.u8()] ?? "unknown";
|
|
29900
30342
|
out.sheets.push({ offset: offset2, state, kind, name: r.shortXlString() });
|
|
29901
30343
|
break;
|
|
29902
30344
|
}
|
|
@@ -31199,6 +31641,7 @@ async function decryptWorkbook(bytes, password) {
|
|
|
31199
31641
|
return plain3;
|
|
31200
31642
|
}
|
|
31201
31643
|
async function loadWorkbook(input, options = {}) {
|
|
31644
|
+
const limits = options.limits && resolveLoadLimits(options.limits);
|
|
31202
31645
|
let bytes = toBytes3(input);
|
|
31203
31646
|
let format = detectWorkbookFormat(bytes, options.fileName);
|
|
31204
31647
|
const encrypted = format === "encrypted";
|
|
@@ -31210,12 +31653,13 @@ async function loadWorkbook(input, options = {}) {
|
|
|
31210
31653
|
if (format === "xls") return loadLegacyXls(bytes);
|
|
31211
31654
|
if (format === "csv") {
|
|
31212
31655
|
return csvToWorkbook(decodeText(bytes), {
|
|
31656
|
+
...options.csv,
|
|
31213
31657
|
sheetName: sheetNameFromFileName(options.fileName),
|
|
31214
31658
|
...options.delimiter === void 0 ? {} : { delimiter: options.delimiter },
|
|
31215
31659
|
...options.formulas === void 0 ? {} : { formulas: options.formulas }
|
|
31216
31660
|
});
|
|
31217
31661
|
}
|
|
31218
|
-
const workbook = await loadXlsx(bytes);
|
|
31662
|
+
const workbook = await loadXlsx(bytes, limits ? { limits } : {});
|
|
31219
31663
|
if (format === "xlsm" && workbook.format === "xlsx") workbook.format = "xlsm";
|
|
31220
31664
|
if (encrypted) workbook.warnings.push(ENCRYPTED_WARNING);
|
|
31221
31665
|
return workbook;
|
|
@@ -31234,4 +31678,4 @@ async function saveWorkbook(workbook, format, sheetIndexOrOptions) {
|
|
|
31234
31678
|
return new TextEncoder().encode(`\uFEFF${csv}`);
|
|
31235
31679
|
}
|
|
31236
31680
|
|
|
31237
|
-
export { DataIntegrityError, IncorrectPasswordError, LegacyXlsError, PasswordRequiredError, UnsupportedWorkbookError, csvToWorkbook, decodeSpreadsheetText, decodeText, detectDelimiter, detectWorkbookFormat, isEncryptedOoxmlPackage, isOoxmlCryptoError, loadLegacyXls, loadWorkbook, neutraliseCsvFormula, parseCsv, saveWorkbook, sheetNameFromFileName, sheetToCsv };
|
|
31681
|
+
export { DataIntegrityError, IncorrectPasswordError, LegacyXlsError, PasswordRequiredError, UnsupportedWorkbookError, WorkbookTooLargeError, csvToWorkbook, decodeSpreadsheetText, decodeText, detectDelimiter, detectWorkbookFormat, isEncryptedOoxmlPackage, isOoxmlCryptoError, isWorkbookTooLargeError, loadLegacyXls, loadWorkbook, neutraliseCsvFormula, parseCsv, saveWorkbook, sheetNameFromFileName, sheetToCsv };
|