ooxml-core 1.19.2 → 1.21.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 +47 -1
- package/dist/{PptxHandler-6TNIQ7S5.cjs → PptxHandler-DNSXWTQV.cjs} +3 -3
- package/dist/{PptxHandler-2V4PQL6O.mjs → PptxHandler-FSKKPZZC.mjs} +3 -3
- package/dist/PptxHandler-H7MEWJJJ.mjs +4 -0
- package/dist/{PresentationBuilder-G7MPEGXJ.mjs → PresentationBuilder-7TSENZTX.mjs} +2 -2
- package/dist/{PresentationBuilder-RM52LCVN.cjs → PresentationBuilder-A5NI35VN.cjs} +5 -5
- package/dist/{PresentationBuilder-HQ6C7L4V.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 +6280 -2506
- package/dist/automation/index.d.ts +1 -0
- package/dist/automation/index.d.ts.map +1 -1
- package/dist/automation/index.mjs +6277 -2507
- package/dist/automation/xlsx-read.d.ts +56 -0
- package/dist/automation/xlsx-read.d.ts.map +1 -0
- package/dist/automation/xlsx.d.ts +105 -4
- 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-NYTR4UZ5.cjs → chunk-4LZIUJI3.cjs} +52 -12
- package/dist/{chunk-SLNQNVQM.mjs → chunk-4QPOJCJG.mjs} +45 -8
- package/dist/{chunk-XTSHZGSM.mjs → chunk-6IIMI5RS.mjs} +52 -12
- package/dist/{chunk-TJPUAUWL.mjs → chunk-BA7Z6ATM.mjs} +9 -195
- package/dist/{chunk-JUABSM7C.mjs → chunk-DLFMCZZT.mjs} +1 -1
- package/dist/{chunk-M4XLF4R7.mjs → chunk-GBKBR4CX.mjs} +20 -8
- package/dist/{chunk-R5FIHHGB.cjs → chunk-HL3FBJ6X.cjs} +1648 -1205
- package/dist/{chunk-ZJ2OKIJN.mjs → chunk-LF5E5ZOH.mjs} +642 -199
- package/dist/{chunk-4FTUAD2B.mjs → chunk-Q5PKBQXH.mjs} +766 -202
- package/dist/{chunk-M6GDBVQ7.mjs → chunk-VQF6HQEE.mjs} +1 -1
- package/dist/collab/embedding.d.ts +103 -0
- package/dist/collab/embedding.d.ts.map +1 -0
- package/dist/collab/index.cjs +450 -342
- package/dist/collab/index.d.ts +1 -0
- package/dist/collab/index.d.ts.map +1 -1
- package/dist/collab/index.mjs +443 -343
- 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 +102 -26
- package/dist/index.mjs +102 -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 +995 -462
- package/dist/pptx/automation/index.d.ts +2 -2
- package/dist/pptx/automation/index.mjs +6 -6
- package/dist/pptx/chunks/{index-Bqm-jFG-.d.ts → index-CPhsd7Df.d.ts} +7580 -7507
- package/dist/pptx/chunks/index-CPhsd7Df.d.ts.map +1 -0
- package/dist/pptx/chunks/{index-B9x557hr.d.ts → index-Q5mM8kIR.d.ts} +2 -2
- package/dist/pptx/chunks/{index-B9x557hr.d.ts.map → index-Q5mM8kIR.d.ts.map} +1 -1
- package/dist/pptx/cli/index.cjs +770 -238
- 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 +1099 -628
- package/dist/pptx/index.d.ts +3 -3
- 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/index.cjs +220 -46
- package/dist/visio/index.mjs +220 -46
- package/dist/visio/ui/contract.d.ts +8 -2
- package/dist/visio/ui/contract.d.ts.map +1 -1
- package/dist/visio/ui/index.cjs +227 -50
- package/dist/visio/ui/index.mjs +227 -50
- 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/dimensions.d.ts.map +1 -1
- package/dist/xlsx/edit/history-rows.d.ts +7 -0
- package/dist/xlsx/edit/history-rows.d.ts.map +1 -0
- package/dist/xlsx/edit/history.d.ts +19 -4
- package/dist/xlsx/edit/history.d.ts.map +1 -1
- package/dist/xlsx/edit/outline.d.ts.map +1 -1
- package/dist/xlsx/edit/row-autofit.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 +2551 -1208
- package/dist/xlsx/index.d.ts +1 -0
- package/dist/xlsx/index.d.ts.map +1 -1
- package/dist/xlsx/index.mjs +2544 -1209
- 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 +598 -98
- 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 +597 -99
- package/dist/xlsx/numfmt/format.d.ts +8 -0
- package/dist/xlsx/numfmt/format.d.ts.map +1 -1
- 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/sheet-data-source.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 +795 -388
- package/dist/xlsx/ui/index.d.ts +1 -0
- package/dist/xlsx/ui/index.d.ts.map +1 -1
- package/dist/xlsx/ui/index.mjs +795 -389
- package/dist/xlsx/ui/selection-format.d.ts +13 -0
- package/dist/xlsx/ui/selection-format.d.ts.map +1 -0
- package/dist/xlsx/write/sheet-props.d.ts.map +1 -1
- package/dist/xml/index.cjs +57 -3
- package/dist/xml/index.mjs +57 -4
- package/dist/xml/lite.d.ts.map +1 -1
- package/dist/xml/xml.d.ts +11 -1
- package/dist/xml/xml.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/PptxHandler-HSPKEP5E.mjs +0 -4
- package/dist/pptx/chunks/index-Bqm-jFG-.d.ts.map +0 -1
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) {
|
|
@@ -3641,6 +3669,12 @@ function parseLiteFragment(xml, container2, namespaces) {
|
|
|
3641
3669
|
}
|
|
3642
3670
|
if (lt < 0) break;
|
|
3643
3671
|
const next = source2.charCodeAt(lt + 1);
|
|
3672
|
+
if (next === 33) {
|
|
3673
|
+
const after = skipCommentOrCdata(source2, lt, top);
|
|
3674
|
+
if (after < 0) return void 0;
|
|
3675
|
+
pos = after;
|
|
3676
|
+
continue;
|
|
3677
|
+
}
|
|
3644
3678
|
if (next === 47) {
|
|
3645
3679
|
const gt = source2.indexOf(">", lt);
|
|
3646
3680
|
if (gt < 0 || stack2.length < 2 || source2.slice(lt + 2, gt).trimEnd() !== top.tagName)
|
|
@@ -3661,6 +3695,25 @@ function parseLiteFragment(xml, container2, namespaces) {
|
|
|
3661
3695
|
}
|
|
3662
3696
|
return stack2.length === 1 ? root : void 0;
|
|
3663
3697
|
}
|
|
3698
|
+
var DECLARATIONS = /<!DOCTYPE|<!ENTITY/i;
|
|
3699
|
+
function skipCommentOrCdata(source2, lt, parent) {
|
|
3700
|
+
if (source2.startsWith("<!--", lt)) {
|
|
3701
|
+
const end = source2.indexOf("-->", lt + 4);
|
|
3702
|
+
if (end < 0) return -1;
|
|
3703
|
+
const body = source2.slice(lt + 4, end);
|
|
3704
|
+
if (body.includes("--") || body.endsWith("-") || DECLARATIONS.test(body)) return -1;
|
|
3705
|
+
return end + 3;
|
|
3706
|
+
}
|
|
3707
|
+
if (source2.startsWith("<![CDATA[", lt)) {
|
|
3708
|
+
const end = source2.indexOf("]]>", lt + 9);
|
|
3709
|
+
if (end < 0) return -1;
|
|
3710
|
+
const text2 = source2.slice(lt + 9, end);
|
|
3711
|
+
if (DECLARATIONS.test(text2)) return -1;
|
|
3712
|
+
parent.childNodes.push(text2);
|
|
3713
|
+
return end + 3;
|
|
3714
|
+
}
|
|
3715
|
+
return -1;
|
|
3716
|
+
}
|
|
3664
3717
|
function startTag(source2, from, namespaces) {
|
|
3665
3718
|
const n = source2.length;
|
|
3666
3719
|
let i2 = from;
|
|
@@ -3802,10 +3855,13 @@ var DEFAULT_ZIP_LIMITS = {
|
|
|
3802
3855
|
var ZipLimitError = class extends Error {
|
|
3803
3856
|
code = "ZIP_BOMB";
|
|
3804
3857
|
limit;
|
|
3858
|
+
/** The check that failed (absent when the error was built without one). */
|
|
3859
|
+
kind;
|
|
3805
3860
|
constructor(message, details) {
|
|
3806
3861
|
super(message);
|
|
3807
3862
|
this.name = "ZipLimitError";
|
|
3808
3863
|
this.limit = details.limit;
|
|
3864
|
+
this.kind = details.kind;
|
|
3809
3865
|
}
|
|
3810
3866
|
};
|
|
3811
3867
|
var mib = (bytes) => Math.round(bytes / 1048576);
|
|
@@ -3828,7 +3884,7 @@ function resolveLimits(limits) {
|
|
|
3828
3884
|
maxEntryBytes: limits.maxEntryBytes ?? DEFAULT_ZIP_LIMITS.maxEntryBytes,
|
|
3829
3885
|
maxTotalBytes: limits.maxTotalBytes ?? DEFAULT_ZIP_LIMITS.maxTotalBytes,
|
|
3830
3886
|
label: limits.label ?? "ZIP",
|
|
3831
|
-
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 })
|
|
3832
3888
|
};
|
|
3833
3889
|
}
|
|
3834
3890
|
function inflateEntryGuarded(entry3, alreadyRead, limits) {
|
|
@@ -3851,13 +3907,18 @@ function inflateEntryGuarded(entry3, alreadyRead, limits) {
|
|
|
3851
3907
|
size += chunk.byteLength;
|
|
3852
3908
|
if (size > declared || size > r.maxEntryBytes)
|
|
3853
3909
|
return abort(
|
|
3854
|
-
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
|
+
)
|
|
3855
3915
|
);
|
|
3856
3916
|
if (alreadyRead + size > r.maxTotalBytes)
|
|
3857
3917
|
return abort(
|
|
3858
3918
|
r.fail(
|
|
3859
3919
|
`${r.label} package exceeds the ${mib(r.maxTotalBytes)} MiB uncompressed content limit`,
|
|
3860
|
-
r.maxTotalBytes
|
|
3920
|
+
r.maxTotalBytes,
|
|
3921
|
+
"maxTotalBytes"
|
|
3861
3922
|
)
|
|
3862
3923
|
);
|
|
3863
3924
|
chunks.push(chunk);
|
|
@@ -3890,26 +3951,29 @@ function guardZip(zip, limits = {}) {
|
|
|
3890
3951
|
if (entries.length > r.maxEntries)
|
|
3891
3952
|
throw r.fail(
|
|
3892
3953
|
`${r.label} package exceeds the ${r.maxEntries.toLocaleString("en-US")} part limit`,
|
|
3893
|
-
r.maxEntries
|
|
3954
|
+
r.maxEntries,
|
|
3955
|
+
"maxEntries"
|
|
3894
3956
|
);
|
|
3895
3957
|
let declared = 0;
|
|
3896
3958
|
for (const entry3 of entries) {
|
|
3897
3959
|
const original = entry3.unsafeOriginalName;
|
|
3898
3960
|
if (!isSafePartName(entry3.name) || original !== void 0 && !isSafePartName(original))
|
|
3899
|
-
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");
|
|
3900
3962
|
if (entry3.dir) continue;
|
|
3901
3963
|
const size = declaredEntrySize(entry3);
|
|
3902
3964
|
if (size > r.maxEntryBytes)
|
|
3903
3965
|
throw r.fail(
|
|
3904
3966
|
`${r.label} part ${entry3.name} exceeds the uncompressed part size limit`,
|
|
3905
|
-
r.maxEntryBytes
|
|
3967
|
+
r.maxEntryBytes,
|
|
3968
|
+
"maxEntryBytes"
|
|
3906
3969
|
);
|
|
3907
3970
|
declared += size;
|
|
3908
3971
|
}
|
|
3909
3972
|
if (declared > r.maxTotalBytes)
|
|
3910
3973
|
throw r.fail(
|
|
3911
3974
|
`${r.label} package exceeds the ${mib(r.maxTotalBytes)} MiB uncompressed content limit`,
|
|
3912
|
-
r.maxTotalBytes
|
|
3975
|
+
r.maxTotalBytes,
|
|
3976
|
+
"maxTotalBytes"
|
|
3913
3977
|
);
|
|
3914
3978
|
const produced = /* @__PURE__ */ new Map();
|
|
3915
3979
|
let total2 = 0;
|
|
@@ -5599,6 +5663,9 @@ function formatValue(value2, format, options = {}) {
|
|
|
5599
5663
|
if (options.width !== void 0) return fitNumber(value2, format, options);
|
|
5600
5664
|
return formatNumber(value2, format, options.date1904 ?? false);
|
|
5601
5665
|
}
|
|
5666
|
+
function isDateFormat(format) {
|
|
5667
|
+
return compileFormat(format).isDate;
|
|
5668
|
+
}
|
|
5602
5669
|
|
|
5603
5670
|
// xlsx/numfmt/input-date.ts
|
|
5604
5671
|
var MONTH_NAMES = [
|
|
@@ -5821,9 +5888,9 @@ function parseCellInput(text2, options = {}) {
|
|
|
5821
5888
|
return parsed.numFmt ? { value: parsed.value, numFmt: parsed.numFmt } : { value: parsed.value };
|
|
5822
5889
|
}
|
|
5823
5890
|
|
|
5824
|
-
// xlsx/
|
|
5825
|
-
function
|
|
5826
|
-
return JSON.stringify(sortKeys(
|
|
5891
|
+
// xlsx/stable-key.ts
|
|
5892
|
+
function stableKey(value2) {
|
|
5893
|
+
return JSON.stringify(sortKeys(value2));
|
|
5827
5894
|
}
|
|
5828
5895
|
function sortKeys(value2) {
|
|
5829
5896
|
if (Array.isArray(value2)) return value2.map(sortKeys);
|
|
@@ -5837,6 +5904,11 @@ function sortKeys(value2) {
|
|
|
5837
5904
|
}
|
|
5838
5905
|
return value2;
|
|
5839
5906
|
}
|
|
5907
|
+
|
|
5908
|
+
// xlsx/styles.ts
|
|
5909
|
+
function styleKey(style2) {
|
|
5910
|
+
return stableKey(style2);
|
|
5911
|
+
}
|
|
5840
5912
|
function styleAt(workbook, styleId) {
|
|
5841
5913
|
const style2 = workbook.styles[styleId ?? 0] ?? workbook.styles[0];
|
|
5842
5914
|
if (!style2) throw new Error("Workbook has no default cell style");
|
|
@@ -9289,10 +9361,72 @@ function mergeComments(legacy, threaded) {
|
|
|
9289
9361
|
(a2, b) => a2.address.row - b.address.row || a2.address.col - b.address.col
|
|
9290
9362
|
);
|
|
9291
9363
|
}
|
|
9292
|
-
|
|
9293
|
-
|
|
9294
|
-
var
|
|
9295
|
-
|
|
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
|
+
}
|
|
9296
9430
|
var CONTENT_TYPES = {
|
|
9297
9431
|
workbook: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
|
|
9298
9432
|
workbookMacro: "application/vnd.ms-excel.sheet.macroEnabled.main+xml",
|
|
@@ -9382,16 +9516,15 @@ var SourceIndex = class {
|
|
|
9382
9516
|
};
|
|
9383
9517
|
var mib2 = (bytes) => Math.round(bytes / 1048576);
|
|
9384
9518
|
async function readZipParts(input, limits = {}) {
|
|
9385
|
-
const
|
|
9386
|
-
const
|
|
9387
|
-
maxEntries: limits.maxParts ?? MAX_PARTS,
|
|
9388
|
-
maxEntryBytes: limits.maxPartBytes ?? MAX_PART_BYTES,
|
|
9389
|
-
maxTotalBytes: limits.maxTotalBytes ?? MAX_UNCOMPRESSED_BYTES,
|
|
9390
|
-
label: "XLSX"
|
|
9391
|
-
};
|
|
9519
|
+
const resolved = resolveLoadLimits(limits);
|
|
9520
|
+
const maxInput = resolved.maxInputBytes;
|
|
9392
9521
|
const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);
|
|
9393
9522
|
if (bytes.byteLength > maxInput)
|
|
9394
|
-
throw new
|
|
9523
|
+
throw new WorkbookTooLargeError(
|
|
9524
|
+
`XLSX package exceeds the ${mib2(maxInput)} MiB compressed input limit`,
|
|
9525
|
+
"maxInputBytes",
|
|
9526
|
+
maxInput
|
|
9527
|
+
);
|
|
9395
9528
|
let loaded;
|
|
9396
9529
|
try {
|
|
9397
9530
|
loaded = await JSZip2__default.default.loadAsync(bytes);
|
|
@@ -9401,7 +9534,7 @@ async function readZipParts(input, limits = {}) {
|
|
|
9401
9534
|
{ cause: error }
|
|
9402
9535
|
);
|
|
9403
9536
|
}
|
|
9404
|
-
const zip = guardZip(loaded,
|
|
9537
|
+
const zip = guardZip(loaded, zipLimitsFor(resolved));
|
|
9405
9538
|
const parts = /* @__PURE__ */ new Map();
|
|
9406
9539
|
for (const entry3 of Object.values(zip.files)) {
|
|
9407
9540
|
if (entry3.dir) continue;
|
|
@@ -9608,9 +9741,9 @@ function parseRichString(element2, palette) {
|
|
|
9608
9741
|
const text2 = parsed.map((run2) => run2.text).join("");
|
|
9609
9742
|
return { text: text2, runs: parsed };
|
|
9610
9743
|
}
|
|
9611
|
-
function parseSharedStrings(xml, palette) {
|
|
9744
|
+
function parseSharedStrings(xml, palette, maxXmlElements) {
|
|
9612
9745
|
if (!xml) return [];
|
|
9613
|
-
const root =
|
|
9746
|
+
const root = parseDataXml(xml, "XLSX shared strings", maxXmlElements).documentElement;
|
|
9614
9747
|
return xChildren(root, "si").map((si) => parseRichString(si, palette));
|
|
9615
9748
|
}
|
|
9616
9749
|
|
|
@@ -14002,21 +14135,50 @@ function rootNamespaces(xml) {
|
|
|
14002
14135
|
for (const match2 of (root[2] ?? "").matchAll(DECLARATION2)) out[match2[1] ?? ""] = match2[3] ?? "";
|
|
14003
14136
|
return out;
|
|
14004
14137
|
}
|
|
14138
|
+
var SPECIAL = /<[!?]/g;
|
|
14139
|
+
var SECTIONS = [
|
|
14140
|
+
["<!--", "-->"],
|
|
14141
|
+
["<![CDATA[", "]]>"],
|
|
14142
|
+
["<?", "?>"]
|
|
14143
|
+
];
|
|
14144
|
+
function blankComments(xml) {
|
|
14145
|
+
if (!xml.includes("<!--") && !xml.includes("<![CDATA[")) return xml;
|
|
14146
|
+
const pieces = [];
|
|
14147
|
+
let copied = 0;
|
|
14148
|
+
SPECIAL.lastIndex = 0;
|
|
14149
|
+
for (let match2 = SPECIAL.exec(xml); match2; match2 = SPECIAL.exec(xml)) {
|
|
14150
|
+
const at = match2.index;
|
|
14151
|
+
const section = SECTIONS.find(([open2]) => xml.startsWith(open2, at));
|
|
14152
|
+
if (!section) return void 0;
|
|
14153
|
+
const [open, close2] = section;
|
|
14154
|
+
const end = xml.indexOf(close2, at + open.length);
|
|
14155
|
+
if (end < 0) return void 0;
|
|
14156
|
+
const after = end + close2.length;
|
|
14157
|
+
if (open !== "<?") {
|
|
14158
|
+
pieces.push(xml.slice(copied, at), " ".repeat(after - at));
|
|
14159
|
+
copied = after;
|
|
14160
|
+
}
|
|
14161
|
+
SPECIAL.lastIndex = after;
|
|
14162
|
+
}
|
|
14163
|
+
pieces.push(xml.slice(copied));
|
|
14164
|
+
return pieces.join("");
|
|
14165
|
+
}
|
|
14005
14166
|
function splitSheetData(xml) {
|
|
14006
|
-
|
|
14007
|
-
|
|
14008
|
-
const
|
|
14167
|
+
const plain3 = blankComments(xml);
|
|
14168
|
+
if (plain3 === void 0) return void 0;
|
|
14169
|
+
const namespaces = rootNamespaces(plain3);
|
|
14170
|
+
const open = OPEN.exec(plain3);
|
|
14009
14171
|
if (!namespaces || !open) return void 0;
|
|
14010
14172
|
const prefix = (open[1] ?? "").slice(0, -1);
|
|
14011
14173
|
const ns = namespaces[prefix];
|
|
14012
14174
|
if (prefix && ns === void 0) return void 0;
|
|
14013
14175
|
const tagName = `${open[1] ?? ""}sheetData`;
|
|
14014
|
-
const openEnd =
|
|
14176
|
+
const openEnd = plain3.indexOf(">", open.index);
|
|
14015
14177
|
if (openEnd < 0) return void 0;
|
|
14016
|
-
const attributes =
|
|
14178
|
+
const attributes = plain3.slice(open.index + tagName.length + 1, openEnd);
|
|
14017
14179
|
if (attributes.trimEnd().endsWith("/") || attributes.includes("xmlns")) return void 0;
|
|
14018
|
-
const close2 =
|
|
14019
|
-
if (close2 < 0 || OPEN.test(
|
|
14180
|
+
const close2 = plain3.indexOf(`</${tagName}`, openEnd);
|
|
14181
|
+
if (close2 < 0 || OPEN.test(plain3.slice(openEnd))) return void 0;
|
|
14020
14182
|
const container2 = new LiteElement(tagName, "sheetData", ns || null);
|
|
14021
14183
|
const data = parseLiteFragment(xml.slice(openEnd + 1, close2), container2, namespaces);
|
|
14022
14184
|
if (!data) return void 0;
|
|
@@ -14221,7 +14383,11 @@ function parseWorksheet(ctx, partName, name, sheetId) {
|
|
|
14221
14383
|
return sheet;
|
|
14222
14384
|
}
|
|
14223
14385
|
const split = splitSheetData(xml);
|
|
14224
|
-
const root =
|
|
14386
|
+
const root = parseDataXml(
|
|
14387
|
+
split?.xml ?? xml,
|
|
14388
|
+
"XLSX worksheet",
|
|
14389
|
+
ctx.maxXmlElements
|
|
14390
|
+
).documentElement;
|
|
14225
14391
|
const byName = /* @__PURE__ */ new Map();
|
|
14226
14392
|
const cfBlocks = [];
|
|
14227
14393
|
for (const node2 of elements(root)) {
|
|
@@ -14295,8 +14461,9 @@ function liftPrintAreas(workbook) {
|
|
|
14295
14461
|
return false;
|
|
14296
14462
|
});
|
|
14297
14463
|
}
|
|
14298
|
-
async function loadXlsx(input) {
|
|
14299
|
-
const
|
|
14464
|
+
async function loadXlsx(input, options = {}) {
|
|
14465
|
+
const limits = resolveLoadLimits(options.limits);
|
|
14466
|
+
const parts = await readZipParts(input, limits);
|
|
14300
14467
|
const source2 = new SourceIndex(parts);
|
|
14301
14468
|
const workbookPart = source2.workbookPart();
|
|
14302
14469
|
if (!workbookPart) throw new Error("XLSX package has no workbook part (xl/workbook.xml)");
|
|
@@ -14317,7 +14484,8 @@ async function loadXlsx(input) {
|
|
|
14317
14484
|
source: source2,
|
|
14318
14485
|
sharedStrings: parseSharedStrings(
|
|
14319
14486
|
stringsPart ? source2.text(stringsPart) : void 0,
|
|
14320
|
-
styles.palette
|
|
14487
|
+
styles.palette,
|
|
14488
|
+
limits.maxXmlElements
|
|
14321
14489
|
),
|
|
14322
14490
|
xfMap: styles.xfMap,
|
|
14323
14491
|
date1904: book.date1904,
|
|
@@ -14325,7 +14493,8 @@ async function loadXlsx(input) {
|
|
|
14325
14493
|
dxfs: styles.dxfs,
|
|
14326
14494
|
persons: parsePersons(personsPart ? source2.text(personsPart) : void 0),
|
|
14327
14495
|
dynamicCells: parseDynamicArrayMetadata(metadataPart ? source2.text(metadataPart) : void 0),
|
|
14328
|
-
warn
|
|
14496
|
+
warn,
|
|
14497
|
+
maxXmlElements: limits.maxXmlElements
|
|
14329
14498
|
};
|
|
14330
14499
|
const rels = source2.rels(workbookPart);
|
|
14331
14500
|
const sheets = book.sheets.map((entry3) => {
|
|
@@ -16542,6 +16711,52 @@ function finite(value2) {
|
|
|
16542
16711
|
return value2;
|
|
16543
16712
|
}
|
|
16544
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
|
+
|
|
16545
16760
|
// xlsx/formula/functions/wildcard.ts
|
|
16546
16761
|
var lower = (ch) => (ch ?? "").toLowerCase();
|
|
16547
16762
|
var fold = (text2) => Array.from({ length: text2.length }, (_, i2) => lower(text2[i2]));
|
|
@@ -19826,49 +20041,6 @@ var INFO_FUNCTIONS = [
|
|
|
19826
20041
|
)
|
|
19827
20042
|
];
|
|
19828
20043
|
|
|
19829
|
-
// xlsx/formula/operators.ts
|
|
19830
|
-
function power(base, exponent) {
|
|
19831
|
-
if (base === 0 && exponent === 0) throw new ErrorSignal(ERR.NUM);
|
|
19832
|
-
if (base === 0 && exponent < 0) throw new ErrorSignal(ERR.DIV0);
|
|
19833
|
-
if (base < 0 && !Number.isInteger(exponent)) {
|
|
19834
|
-
const inverse = 1 / exponent;
|
|
19835
|
-
const odd = Math.round(inverse);
|
|
19836
|
-
if (Math.abs(inverse - odd) < 1e-10 && Math.abs(odd) % 2 === 1) {
|
|
19837
|
-
return -Math.pow(-base, exponent);
|
|
19838
|
-
}
|
|
19839
|
-
throw new ErrorSignal(ERR.NUM);
|
|
19840
|
-
}
|
|
19841
|
-
return Math.pow(base, exponent);
|
|
19842
|
-
}
|
|
19843
|
-
function pick(m, row2, col) {
|
|
19844
|
-
const r = m.rows === 1 ? 0 : row2;
|
|
19845
|
-
const c2 = m.cols === 1 ? 0 : col;
|
|
19846
|
-
if (r >= m.rows || c2 >= m.cols) return ERR.NA;
|
|
19847
|
-
return m.get(r, c2);
|
|
19848
|
-
}
|
|
19849
|
-
function broadcastShape(operands, at) {
|
|
19850
|
-
let rows = 1;
|
|
19851
|
-
let cols = 1;
|
|
19852
|
-
for (const m of operands) {
|
|
19853
|
-
rows = Math.max(rows, m.rows);
|
|
19854
|
-
cols = Math.max(cols, m.cols);
|
|
19855
|
-
}
|
|
19856
|
-
if (!operands.some((m) => m.isPadded)) return Matrix.build(rows, cols, at);
|
|
19857
|
-
let blockRows = 1;
|
|
19858
|
-
let blockCols = 1;
|
|
19859
|
-
for (const m of operands) {
|
|
19860
|
-
blockRows = Math.max(blockRows, m.isPadded ? m.blockRows : m.rows);
|
|
19861
|
-
blockCols = Math.max(blockCols, m.isPadded ? m.blockCols : m.cols);
|
|
19862
|
-
}
|
|
19863
|
-
blockRows = Math.min(blockRows, rows);
|
|
19864
|
-
blockCols = Math.min(blockCols, cols);
|
|
19865
|
-
const varies = operands.some(
|
|
19866
|
-
(m) => blockRows < rows && m.rows === 1 && m.cols > 1 || blockCols < cols && m.cols === 1 && m.rows > 1
|
|
19867
|
-
);
|
|
19868
|
-
if (varies) return Matrix.build(rows, cols, at);
|
|
19869
|
-
return Matrix.padded(Matrix.build(blockRows, blockCols, at), rows, cols, at(rows - 1, cols - 1));
|
|
19870
|
-
}
|
|
19871
|
-
|
|
19872
20044
|
// xlsx/formula/functions/lambda.ts
|
|
19873
20045
|
var C17 = "Logical";
|
|
19874
20046
|
function lambdaArg(value2) {
|
|
@@ -25128,9 +25300,6 @@ var paramKind = (spec2, index3) => {
|
|
|
25128
25300
|
return params[Math.min(index3, params.length - 1)] ?? "value";
|
|
25129
25301
|
};
|
|
25130
25302
|
|
|
25131
|
-
// xlsx/formula/spill.ts
|
|
25132
|
-
var isSpilledCell = (cell) => cell !== void 0 && "spillAnchor" in cell;
|
|
25133
|
-
|
|
25134
25303
|
// xlsx/formula/move.ts
|
|
25135
25304
|
var same3 = (a2, b) => a2.toLowerCase() === b.toLowerCase();
|
|
25136
25305
|
function deleteSheetInFormula(formula, sheetName, tableNames = []) {
|
|
@@ -27159,10 +27328,8 @@ function sheetFormatXml(sheet) {
|
|
|
27159
27328
|
const current = { defaultRowHeight: sheet.defaultRowHeight };
|
|
27160
27329
|
if (sheet.defaultColWidth !== void 0) current.defaultColWidth = sheet.defaultColWidth;
|
|
27161
27330
|
if (sheet.format && Object.keys(sheet.format).length) current.format = sheet.format;
|
|
27162
|
-
|
|
27163
|
-
|
|
27164
|
-
...[...sheet.rowInfo.values()].map((info) => info.outlineLevel ?? 0)
|
|
27165
|
-
);
|
|
27331
|
+
let rowLevel = 0;
|
|
27332
|
+
for (const info of sheet.rowInfo.values()) rowLevel = Math.max(rowLevel, info.outlineLevel ?? 0);
|
|
27166
27333
|
const colLevel = Math.max(0, ...sheet.columns.map((col) => col.outlineLevel ?? 0));
|
|
27167
27334
|
if (source2 && sameModel(readSheetFormat(source2), current) && Number(source2.getAttribute("outlineLevelRow") ?? 0) === rowLevel && Number(source2.getAttribute("outlineLevelCol") ?? 0) === colLevel)
|
|
27168
27335
|
return snapshotXml(sheet, "sheetFormatPr") ?? "";
|
|
@@ -27464,11 +27631,10 @@ function pivotCacheDefinitionXml(pivot, workbook, data, recordRel) {
|
|
|
27464
27631
|
const items = data.items[index3];
|
|
27465
27632
|
if (pivot.dateFields?.includes(name) && items.every((v) => typeof v === "number")) {
|
|
27466
27633
|
const serials = items;
|
|
27467
|
-
const
|
|
27468
|
-
const maxDate = Number.isInteger(latest) ? latest + 1 : latest;
|
|
27634
|
+
const range = dateGroupRange({}, serials);
|
|
27469
27635
|
const parent = derived.filter((entry3) => entry3.group.field === name).at(-1);
|
|
27470
27636
|
const link = parent ? `<fieldGroup par="${parent.index}"/>` : "";
|
|
27471
|
-
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>`;
|
|
27472
27638
|
}
|
|
27473
27639
|
const types = new Set(
|
|
27474
27640
|
items.map((value2) => value2 === null || value2 === "" ? "blank" : typeof value2)
|
|
@@ -28339,6 +28505,332 @@ async function saveXlsx(workbook) {
|
|
|
28339
28505
|
return writer.build();
|
|
28340
28506
|
}
|
|
28341
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
|
+
|
|
28342
28834
|
// xlsx/load/csv.ts
|
|
28343
28835
|
var CANDIDATES = [",", ";", " "];
|
|
28344
28836
|
function delimiterCounts(text2, maxLines = 20) {
|
|
@@ -28435,6 +28927,7 @@ function csvToWorkbook(text2, options = {}) {
|
|
|
28435
28927
|
workbook.format = "csv";
|
|
28436
28928
|
const sheet = workbook.sheets[0];
|
|
28437
28929
|
if (!sheet) return workbook;
|
|
28930
|
+
const reader = createFieldReader(options, workbook.date1904);
|
|
28438
28931
|
const base = styleAt(workbook, 0);
|
|
28439
28932
|
const formats = /* @__PURE__ */ new Map();
|
|
28440
28933
|
const rows = parseCsv(
|
|
@@ -28442,9 +28935,11 @@ function csvToWorkbook(text2, options = {}) {
|
|
|
28442
28935
|
options.delimiter === void 0 ? {} : { delimiter: options.delimiter }
|
|
28443
28936
|
);
|
|
28444
28937
|
rows.forEach((fields, row2) => {
|
|
28445
|
-
fields.forEach((field,
|
|
28938
|
+
fields.forEach((field, source2) => {
|
|
28446
28939
|
if (field === "") return;
|
|
28447
|
-
const
|
|
28940
|
+
const col = reader.target(source2);
|
|
28941
|
+
if (col < 0) return;
|
|
28942
|
+
const parsed = reader.read(field, row2, source2);
|
|
28448
28943
|
const cell = { value: parsed.value };
|
|
28449
28944
|
if (parsed.formula !== void 0) cell.formula = parsed.formula;
|
|
28450
28945
|
if (parsed.numFmt && parsed.numFmt !== "General") {
|
|
@@ -28463,6 +28958,7 @@ function csvToWorkbook(text2, options = {}) {
|
|
|
28463
28958
|
cells.set(col, cell);
|
|
28464
28959
|
});
|
|
28465
28960
|
});
|
|
28961
|
+
workbook.warnings.push(...reader.warnings());
|
|
28466
28962
|
return workbook;
|
|
28467
28963
|
}
|
|
28468
28964
|
var FORMULA_TRIGGER = /^[=+\-@\t\r]/;
|
|
@@ -29713,7 +30209,7 @@ var RT = {
|
|
|
29713
30209
|
OBPROJ: 211,
|
|
29714
30210
|
SXSTREAMID: 213};
|
|
29715
30211
|
var STATES = ["visible", "hidden", "veryHidden"];
|
|
29716
|
-
var
|
|
30212
|
+
var KINDS3 = {
|
|
29717
30213
|
0: "worksheet",
|
|
29718
30214
|
1: "macro",
|
|
29719
30215
|
2: "chart",
|
|
@@ -29848,7 +30344,7 @@ function parseGlobals(records) {
|
|
|
29848
30344
|
case RT.BOUNDSHEET: {
|
|
29849
30345
|
const offset2 = r.u32();
|
|
29850
30346
|
const state = STATES[r.u8() & 3] ?? "visible";
|
|
29851
|
-
const kind =
|
|
30347
|
+
const kind = KINDS3[r.u8()] ?? "unknown";
|
|
29852
30348
|
out.sheets.push({ offset: offset2, state, kind, name: r.shortXlString() });
|
|
29853
30349
|
break;
|
|
29854
30350
|
}
|
|
@@ -31151,6 +31647,7 @@ async function decryptWorkbook(bytes, password) {
|
|
|
31151
31647
|
return plain3;
|
|
31152
31648
|
}
|
|
31153
31649
|
async function loadWorkbook(input, options = {}) {
|
|
31650
|
+
const limits = options.limits && resolveLoadLimits(options.limits);
|
|
31154
31651
|
let bytes = toBytes3(input);
|
|
31155
31652
|
let format = detectWorkbookFormat(bytes, options.fileName);
|
|
31156
31653
|
const encrypted = format === "encrypted";
|
|
@@ -31162,12 +31659,13 @@ async function loadWorkbook(input, options = {}) {
|
|
|
31162
31659
|
if (format === "xls") return loadLegacyXls(bytes);
|
|
31163
31660
|
if (format === "csv") {
|
|
31164
31661
|
return csvToWorkbook(decodeText(bytes), {
|
|
31662
|
+
...options.csv,
|
|
31165
31663
|
sheetName: sheetNameFromFileName(options.fileName),
|
|
31166
31664
|
...options.delimiter === void 0 ? {} : { delimiter: options.delimiter },
|
|
31167
31665
|
...options.formulas === void 0 ? {} : { formulas: options.formulas }
|
|
31168
31666
|
});
|
|
31169
31667
|
}
|
|
31170
|
-
const workbook = await loadXlsx(bytes);
|
|
31668
|
+
const workbook = await loadXlsx(bytes, limits ? { limits } : {});
|
|
31171
31669
|
if (format === "xlsm" && workbook.format === "xlsx") workbook.format = "xlsm";
|
|
31172
31670
|
if (encrypted) workbook.warnings.push(ENCRYPTED_WARNING);
|
|
31173
31671
|
return workbook;
|
|
@@ -31191,6 +31689,7 @@ exports.IncorrectPasswordError = IncorrectPasswordError;
|
|
|
31191
31689
|
exports.LegacyXlsError = LegacyXlsError;
|
|
31192
31690
|
exports.PasswordRequiredError = PasswordRequiredError;
|
|
31193
31691
|
exports.UnsupportedWorkbookError = UnsupportedWorkbookError;
|
|
31692
|
+
exports.WorkbookTooLargeError = WorkbookTooLargeError;
|
|
31194
31693
|
exports.csvToWorkbook = csvToWorkbook;
|
|
31195
31694
|
exports.decodeSpreadsheetText = decodeSpreadsheetText;
|
|
31196
31695
|
exports.decodeText = decodeText;
|
|
@@ -31198,6 +31697,7 @@ exports.detectDelimiter = detectDelimiter;
|
|
|
31198
31697
|
exports.detectWorkbookFormat = detectWorkbookFormat;
|
|
31199
31698
|
exports.isEncryptedOoxmlPackage = isEncryptedOoxmlPackage;
|
|
31200
31699
|
exports.isOoxmlCryptoError = isOoxmlCryptoError;
|
|
31700
|
+
exports.isWorkbookTooLargeError = isWorkbookTooLargeError;
|
|
31201
31701
|
exports.loadLegacyXls = loadLegacyXls;
|
|
31202
31702
|
exports.loadWorkbook = loadWorkbook;
|
|
31203
31703
|
exports.neutraliseCsvFormula = neutraliseCsvFormula;
|