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.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) {
|
|
@@ -3635,6 +3663,12 @@ function parseLiteFragment(xml, container2, namespaces) {
|
|
|
3635
3663
|
}
|
|
3636
3664
|
if (lt < 0) break;
|
|
3637
3665
|
const next = source2.charCodeAt(lt + 1);
|
|
3666
|
+
if (next === 33) {
|
|
3667
|
+
const after = skipCommentOrCdata(source2, lt, top);
|
|
3668
|
+
if (after < 0) return void 0;
|
|
3669
|
+
pos = after;
|
|
3670
|
+
continue;
|
|
3671
|
+
}
|
|
3638
3672
|
if (next === 47) {
|
|
3639
3673
|
const gt = source2.indexOf(">", lt);
|
|
3640
3674
|
if (gt < 0 || stack2.length < 2 || source2.slice(lt + 2, gt).trimEnd() !== top.tagName)
|
|
@@ -3655,6 +3689,25 @@ function parseLiteFragment(xml, container2, namespaces) {
|
|
|
3655
3689
|
}
|
|
3656
3690
|
return stack2.length === 1 ? root : void 0;
|
|
3657
3691
|
}
|
|
3692
|
+
var DECLARATIONS = /<!DOCTYPE|<!ENTITY/i;
|
|
3693
|
+
function skipCommentOrCdata(source2, lt, parent) {
|
|
3694
|
+
if (source2.startsWith("<!--", lt)) {
|
|
3695
|
+
const end = source2.indexOf("-->", lt + 4);
|
|
3696
|
+
if (end < 0) return -1;
|
|
3697
|
+
const body = source2.slice(lt + 4, end);
|
|
3698
|
+
if (body.includes("--") || body.endsWith("-") || DECLARATIONS.test(body)) return -1;
|
|
3699
|
+
return end + 3;
|
|
3700
|
+
}
|
|
3701
|
+
if (source2.startsWith("<![CDATA[", lt)) {
|
|
3702
|
+
const end = source2.indexOf("]]>", lt + 9);
|
|
3703
|
+
if (end < 0) return -1;
|
|
3704
|
+
const text2 = source2.slice(lt + 9, end);
|
|
3705
|
+
if (DECLARATIONS.test(text2)) return -1;
|
|
3706
|
+
parent.childNodes.push(text2);
|
|
3707
|
+
return end + 3;
|
|
3708
|
+
}
|
|
3709
|
+
return -1;
|
|
3710
|
+
}
|
|
3658
3711
|
function startTag(source2, from, namespaces) {
|
|
3659
3712
|
const n = source2.length;
|
|
3660
3713
|
let i2 = from;
|
|
@@ -3796,10 +3849,13 @@ var DEFAULT_ZIP_LIMITS = {
|
|
|
3796
3849
|
var ZipLimitError = class extends Error {
|
|
3797
3850
|
code = "ZIP_BOMB";
|
|
3798
3851
|
limit;
|
|
3852
|
+
/** The check that failed (absent when the error was built without one). */
|
|
3853
|
+
kind;
|
|
3799
3854
|
constructor(message, details) {
|
|
3800
3855
|
super(message);
|
|
3801
3856
|
this.name = "ZipLimitError";
|
|
3802
3857
|
this.limit = details.limit;
|
|
3858
|
+
this.kind = details.kind;
|
|
3803
3859
|
}
|
|
3804
3860
|
};
|
|
3805
3861
|
var mib = (bytes) => Math.round(bytes / 1048576);
|
|
@@ -3822,7 +3878,7 @@ function resolveLimits(limits) {
|
|
|
3822
3878
|
maxEntryBytes: limits.maxEntryBytes ?? DEFAULT_ZIP_LIMITS.maxEntryBytes,
|
|
3823
3879
|
maxTotalBytes: limits.maxTotalBytes ?? DEFAULT_ZIP_LIMITS.maxTotalBytes,
|
|
3824
3880
|
label: limits.label ?? "ZIP",
|
|
3825
|
-
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 })
|
|
3826
3882
|
};
|
|
3827
3883
|
}
|
|
3828
3884
|
function inflateEntryGuarded(entry3, alreadyRead, limits) {
|
|
@@ -3845,13 +3901,18 @@ function inflateEntryGuarded(entry3, alreadyRead, limits) {
|
|
|
3845
3901
|
size += chunk.byteLength;
|
|
3846
3902
|
if (size > declared || size > r.maxEntryBytes)
|
|
3847
3903
|
return abort(
|
|
3848
|
-
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
|
+
)
|
|
3849
3909
|
);
|
|
3850
3910
|
if (alreadyRead + size > r.maxTotalBytes)
|
|
3851
3911
|
return abort(
|
|
3852
3912
|
r.fail(
|
|
3853
3913
|
`${r.label} package exceeds the ${mib(r.maxTotalBytes)} MiB uncompressed content limit`,
|
|
3854
|
-
r.maxTotalBytes
|
|
3914
|
+
r.maxTotalBytes,
|
|
3915
|
+
"maxTotalBytes"
|
|
3855
3916
|
)
|
|
3856
3917
|
);
|
|
3857
3918
|
chunks.push(chunk);
|
|
@@ -3884,26 +3945,29 @@ function guardZip(zip, limits = {}) {
|
|
|
3884
3945
|
if (entries.length > r.maxEntries)
|
|
3885
3946
|
throw r.fail(
|
|
3886
3947
|
`${r.label} package exceeds the ${r.maxEntries.toLocaleString("en-US")} part limit`,
|
|
3887
|
-
r.maxEntries
|
|
3948
|
+
r.maxEntries,
|
|
3949
|
+
"maxEntries"
|
|
3888
3950
|
);
|
|
3889
3951
|
let declared = 0;
|
|
3890
3952
|
for (const entry3 of entries) {
|
|
3891
3953
|
const original = entry3.unsafeOriginalName;
|
|
3892
3954
|
if (!isSafePartName(entry3.name) || original !== void 0 && !isSafePartName(original))
|
|
3893
|
-
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");
|
|
3894
3956
|
if (entry3.dir) continue;
|
|
3895
3957
|
const size = declaredEntrySize(entry3);
|
|
3896
3958
|
if (size > r.maxEntryBytes)
|
|
3897
3959
|
throw r.fail(
|
|
3898
3960
|
`${r.label} part ${entry3.name} exceeds the uncompressed part size limit`,
|
|
3899
|
-
r.maxEntryBytes
|
|
3961
|
+
r.maxEntryBytes,
|
|
3962
|
+
"maxEntryBytes"
|
|
3900
3963
|
);
|
|
3901
3964
|
declared += size;
|
|
3902
3965
|
}
|
|
3903
3966
|
if (declared > r.maxTotalBytes)
|
|
3904
3967
|
throw r.fail(
|
|
3905
3968
|
`${r.label} package exceeds the ${mib(r.maxTotalBytes)} MiB uncompressed content limit`,
|
|
3906
|
-
r.maxTotalBytes
|
|
3969
|
+
r.maxTotalBytes,
|
|
3970
|
+
"maxTotalBytes"
|
|
3907
3971
|
);
|
|
3908
3972
|
const produced = /* @__PURE__ */ new Map();
|
|
3909
3973
|
let total2 = 0;
|
|
@@ -5593,6 +5657,9 @@ function formatValue(value2, format, options = {}) {
|
|
|
5593
5657
|
if (options.width !== void 0) return fitNumber(value2, format, options);
|
|
5594
5658
|
return formatNumber(value2, format, options.date1904 ?? false);
|
|
5595
5659
|
}
|
|
5660
|
+
function isDateFormat(format) {
|
|
5661
|
+
return compileFormat(format).isDate;
|
|
5662
|
+
}
|
|
5596
5663
|
|
|
5597
5664
|
// xlsx/numfmt/input-date.ts
|
|
5598
5665
|
var MONTH_NAMES = [
|
|
@@ -5815,9 +5882,9 @@ function parseCellInput(text2, options = {}) {
|
|
|
5815
5882
|
return parsed.numFmt ? { value: parsed.value, numFmt: parsed.numFmt } : { value: parsed.value };
|
|
5816
5883
|
}
|
|
5817
5884
|
|
|
5818
|
-
// xlsx/
|
|
5819
|
-
function
|
|
5820
|
-
return JSON.stringify(sortKeys(
|
|
5885
|
+
// xlsx/stable-key.ts
|
|
5886
|
+
function stableKey(value2) {
|
|
5887
|
+
return JSON.stringify(sortKeys(value2));
|
|
5821
5888
|
}
|
|
5822
5889
|
function sortKeys(value2) {
|
|
5823
5890
|
if (Array.isArray(value2)) return value2.map(sortKeys);
|
|
@@ -5831,6 +5898,11 @@ function sortKeys(value2) {
|
|
|
5831
5898
|
}
|
|
5832
5899
|
return value2;
|
|
5833
5900
|
}
|
|
5901
|
+
|
|
5902
|
+
// xlsx/styles.ts
|
|
5903
|
+
function styleKey(style2) {
|
|
5904
|
+
return stableKey(style2);
|
|
5905
|
+
}
|
|
5834
5906
|
function styleAt(workbook, styleId) {
|
|
5835
5907
|
const style2 = workbook.styles[styleId ?? 0] ?? workbook.styles[0];
|
|
5836
5908
|
if (!style2) throw new Error("Workbook has no default cell style");
|
|
@@ -9283,10 +9355,72 @@ function mergeComments(legacy, threaded) {
|
|
|
9283
9355
|
(a2, b) => a2.address.row - b.address.row || a2.address.col - b.address.col
|
|
9284
9356
|
);
|
|
9285
9357
|
}
|
|
9286
|
-
|
|
9287
|
-
|
|
9288
|
-
var
|
|
9289
|
-
|
|
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
|
+
}
|
|
9290
9424
|
var CONTENT_TYPES = {
|
|
9291
9425
|
workbook: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
|
|
9292
9426
|
workbookMacro: "application/vnd.ms-excel.sheet.macroEnabled.main+xml",
|
|
@@ -9376,16 +9510,15 @@ var SourceIndex = class {
|
|
|
9376
9510
|
};
|
|
9377
9511
|
var mib2 = (bytes) => Math.round(bytes / 1048576);
|
|
9378
9512
|
async function readZipParts(input, limits = {}) {
|
|
9379
|
-
const
|
|
9380
|
-
const
|
|
9381
|
-
maxEntries: limits.maxParts ?? MAX_PARTS,
|
|
9382
|
-
maxEntryBytes: limits.maxPartBytes ?? MAX_PART_BYTES,
|
|
9383
|
-
maxTotalBytes: limits.maxTotalBytes ?? MAX_UNCOMPRESSED_BYTES,
|
|
9384
|
-
label: "XLSX"
|
|
9385
|
-
};
|
|
9513
|
+
const resolved = resolveLoadLimits(limits);
|
|
9514
|
+
const maxInput = resolved.maxInputBytes;
|
|
9386
9515
|
const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);
|
|
9387
9516
|
if (bytes.byteLength > maxInput)
|
|
9388
|
-
throw new
|
|
9517
|
+
throw new WorkbookTooLargeError(
|
|
9518
|
+
`XLSX package exceeds the ${mib2(maxInput)} MiB compressed input limit`,
|
|
9519
|
+
"maxInputBytes",
|
|
9520
|
+
maxInput
|
|
9521
|
+
);
|
|
9389
9522
|
let loaded;
|
|
9390
9523
|
try {
|
|
9391
9524
|
loaded = await JSZip2.loadAsync(bytes);
|
|
@@ -9395,7 +9528,7 @@ async function readZipParts(input, limits = {}) {
|
|
|
9395
9528
|
{ cause: error }
|
|
9396
9529
|
);
|
|
9397
9530
|
}
|
|
9398
|
-
const zip = guardZip(loaded,
|
|
9531
|
+
const zip = guardZip(loaded, zipLimitsFor(resolved));
|
|
9399
9532
|
const parts = /* @__PURE__ */ new Map();
|
|
9400
9533
|
for (const entry3 of Object.values(zip.files)) {
|
|
9401
9534
|
if (entry3.dir) continue;
|
|
@@ -9602,9 +9735,9 @@ function parseRichString(element2, palette) {
|
|
|
9602
9735
|
const text2 = parsed.map((run2) => run2.text).join("");
|
|
9603
9736
|
return { text: text2, runs: parsed };
|
|
9604
9737
|
}
|
|
9605
|
-
function parseSharedStrings(xml, palette) {
|
|
9738
|
+
function parseSharedStrings(xml, palette, maxXmlElements) {
|
|
9606
9739
|
if (!xml) return [];
|
|
9607
|
-
const root =
|
|
9740
|
+
const root = parseDataXml(xml, "XLSX shared strings", maxXmlElements).documentElement;
|
|
9608
9741
|
return xChildren(root, "si").map((si) => parseRichString(si, palette));
|
|
9609
9742
|
}
|
|
9610
9743
|
|
|
@@ -13996,21 +14129,50 @@ function rootNamespaces(xml) {
|
|
|
13996
14129
|
for (const match2 of (root[2] ?? "").matchAll(DECLARATION2)) out[match2[1] ?? ""] = match2[3] ?? "";
|
|
13997
14130
|
return out;
|
|
13998
14131
|
}
|
|
14132
|
+
var SPECIAL = /<[!?]/g;
|
|
14133
|
+
var SECTIONS = [
|
|
14134
|
+
["<!--", "-->"],
|
|
14135
|
+
["<![CDATA[", "]]>"],
|
|
14136
|
+
["<?", "?>"]
|
|
14137
|
+
];
|
|
14138
|
+
function blankComments(xml) {
|
|
14139
|
+
if (!xml.includes("<!--") && !xml.includes("<![CDATA[")) return xml;
|
|
14140
|
+
const pieces = [];
|
|
14141
|
+
let copied = 0;
|
|
14142
|
+
SPECIAL.lastIndex = 0;
|
|
14143
|
+
for (let match2 = SPECIAL.exec(xml); match2; match2 = SPECIAL.exec(xml)) {
|
|
14144
|
+
const at = match2.index;
|
|
14145
|
+
const section = SECTIONS.find(([open2]) => xml.startsWith(open2, at));
|
|
14146
|
+
if (!section) return void 0;
|
|
14147
|
+
const [open, close2] = section;
|
|
14148
|
+
const end = xml.indexOf(close2, at + open.length);
|
|
14149
|
+
if (end < 0) return void 0;
|
|
14150
|
+
const after = end + close2.length;
|
|
14151
|
+
if (open !== "<?") {
|
|
14152
|
+
pieces.push(xml.slice(copied, at), " ".repeat(after - at));
|
|
14153
|
+
copied = after;
|
|
14154
|
+
}
|
|
14155
|
+
SPECIAL.lastIndex = after;
|
|
14156
|
+
}
|
|
14157
|
+
pieces.push(xml.slice(copied));
|
|
14158
|
+
return pieces.join("");
|
|
14159
|
+
}
|
|
13999
14160
|
function splitSheetData(xml) {
|
|
14000
|
-
|
|
14001
|
-
|
|
14002
|
-
const
|
|
14161
|
+
const plain3 = blankComments(xml);
|
|
14162
|
+
if (plain3 === void 0) return void 0;
|
|
14163
|
+
const namespaces = rootNamespaces(plain3);
|
|
14164
|
+
const open = OPEN.exec(plain3);
|
|
14003
14165
|
if (!namespaces || !open) return void 0;
|
|
14004
14166
|
const prefix = (open[1] ?? "").slice(0, -1);
|
|
14005
14167
|
const ns = namespaces[prefix];
|
|
14006
14168
|
if (prefix && ns === void 0) return void 0;
|
|
14007
14169
|
const tagName = `${open[1] ?? ""}sheetData`;
|
|
14008
|
-
const openEnd =
|
|
14170
|
+
const openEnd = plain3.indexOf(">", open.index);
|
|
14009
14171
|
if (openEnd < 0) return void 0;
|
|
14010
|
-
const attributes =
|
|
14172
|
+
const attributes = plain3.slice(open.index + tagName.length + 1, openEnd);
|
|
14011
14173
|
if (attributes.trimEnd().endsWith("/") || attributes.includes("xmlns")) return void 0;
|
|
14012
|
-
const close2 =
|
|
14013
|
-
if (close2 < 0 || OPEN.test(
|
|
14174
|
+
const close2 = plain3.indexOf(`</${tagName}`, openEnd);
|
|
14175
|
+
if (close2 < 0 || OPEN.test(plain3.slice(openEnd))) return void 0;
|
|
14014
14176
|
const container2 = new LiteElement(tagName, "sheetData", ns || null);
|
|
14015
14177
|
const data = parseLiteFragment(xml.slice(openEnd + 1, close2), container2, namespaces);
|
|
14016
14178
|
if (!data) return void 0;
|
|
@@ -14215,7 +14377,11 @@ function parseWorksheet(ctx, partName, name, sheetId) {
|
|
|
14215
14377
|
return sheet;
|
|
14216
14378
|
}
|
|
14217
14379
|
const split = splitSheetData(xml);
|
|
14218
|
-
const root =
|
|
14380
|
+
const root = parseDataXml(
|
|
14381
|
+
split?.xml ?? xml,
|
|
14382
|
+
"XLSX worksheet",
|
|
14383
|
+
ctx.maxXmlElements
|
|
14384
|
+
).documentElement;
|
|
14219
14385
|
const byName = /* @__PURE__ */ new Map();
|
|
14220
14386
|
const cfBlocks = [];
|
|
14221
14387
|
for (const node2 of elements(root)) {
|
|
@@ -14289,8 +14455,9 @@ function liftPrintAreas(workbook) {
|
|
|
14289
14455
|
return false;
|
|
14290
14456
|
});
|
|
14291
14457
|
}
|
|
14292
|
-
async function loadXlsx(input) {
|
|
14293
|
-
const
|
|
14458
|
+
async function loadXlsx(input, options = {}) {
|
|
14459
|
+
const limits = resolveLoadLimits(options.limits);
|
|
14460
|
+
const parts = await readZipParts(input, limits);
|
|
14294
14461
|
const source2 = new SourceIndex(parts);
|
|
14295
14462
|
const workbookPart = source2.workbookPart();
|
|
14296
14463
|
if (!workbookPart) throw new Error("XLSX package has no workbook part (xl/workbook.xml)");
|
|
@@ -14311,7 +14478,8 @@ async function loadXlsx(input) {
|
|
|
14311
14478
|
source: source2,
|
|
14312
14479
|
sharedStrings: parseSharedStrings(
|
|
14313
14480
|
stringsPart ? source2.text(stringsPart) : void 0,
|
|
14314
|
-
styles.palette
|
|
14481
|
+
styles.palette,
|
|
14482
|
+
limits.maxXmlElements
|
|
14315
14483
|
),
|
|
14316
14484
|
xfMap: styles.xfMap,
|
|
14317
14485
|
date1904: book.date1904,
|
|
@@ -14319,7 +14487,8 @@ async function loadXlsx(input) {
|
|
|
14319
14487
|
dxfs: styles.dxfs,
|
|
14320
14488
|
persons: parsePersons(personsPart ? source2.text(personsPart) : void 0),
|
|
14321
14489
|
dynamicCells: parseDynamicArrayMetadata(metadataPart ? source2.text(metadataPart) : void 0),
|
|
14322
|
-
warn
|
|
14490
|
+
warn,
|
|
14491
|
+
maxXmlElements: limits.maxXmlElements
|
|
14323
14492
|
};
|
|
14324
14493
|
const rels = source2.rels(workbookPart);
|
|
14325
14494
|
const sheets = book.sheets.map((entry3) => {
|
|
@@ -16536,6 +16705,52 @@ function finite(value2) {
|
|
|
16536
16705
|
return value2;
|
|
16537
16706
|
}
|
|
16538
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
|
+
|
|
16539
16754
|
// xlsx/formula/functions/wildcard.ts
|
|
16540
16755
|
var lower = (ch) => (ch ?? "").toLowerCase();
|
|
16541
16756
|
var fold = (text2) => Array.from({ length: text2.length }, (_, i2) => lower(text2[i2]));
|
|
@@ -19820,49 +20035,6 @@ var INFO_FUNCTIONS = [
|
|
|
19820
20035
|
)
|
|
19821
20036
|
];
|
|
19822
20037
|
|
|
19823
|
-
// xlsx/formula/operators.ts
|
|
19824
|
-
function power(base, exponent) {
|
|
19825
|
-
if (base === 0 && exponent === 0) throw new ErrorSignal(ERR.NUM);
|
|
19826
|
-
if (base === 0 && exponent < 0) throw new ErrorSignal(ERR.DIV0);
|
|
19827
|
-
if (base < 0 && !Number.isInteger(exponent)) {
|
|
19828
|
-
const inverse = 1 / exponent;
|
|
19829
|
-
const odd = Math.round(inverse);
|
|
19830
|
-
if (Math.abs(inverse - odd) < 1e-10 && Math.abs(odd) % 2 === 1) {
|
|
19831
|
-
return -Math.pow(-base, exponent);
|
|
19832
|
-
}
|
|
19833
|
-
throw new ErrorSignal(ERR.NUM);
|
|
19834
|
-
}
|
|
19835
|
-
return Math.pow(base, exponent);
|
|
19836
|
-
}
|
|
19837
|
-
function pick(m, row2, col) {
|
|
19838
|
-
const r = m.rows === 1 ? 0 : row2;
|
|
19839
|
-
const c2 = m.cols === 1 ? 0 : col;
|
|
19840
|
-
if (r >= m.rows || c2 >= m.cols) return ERR.NA;
|
|
19841
|
-
return m.get(r, c2);
|
|
19842
|
-
}
|
|
19843
|
-
function broadcastShape(operands, at) {
|
|
19844
|
-
let rows = 1;
|
|
19845
|
-
let cols = 1;
|
|
19846
|
-
for (const m of operands) {
|
|
19847
|
-
rows = Math.max(rows, m.rows);
|
|
19848
|
-
cols = Math.max(cols, m.cols);
|
|
19849
|
-
}
|
|
19850
|
-
if (!operands.some((m) => m.isPadded)) return Matrix.build(rows, cols, at);
|
|
19851
|
-
let blockRows = 1;
|
|
19852
|
-
let blockCols = 1;
|
|
19853
|
-
for (const m of operands) {
|
|
19854
|
-
blockRows = Math.max(blockRows, m.isPadded ? m.blockRows : m.rows);
|
|
19855
|
-
blockCols = Math.max(blockCols, m.isPadded ? m.blockCols : m.cols);
|
|
19856
|
-
}
|
|
19857
|
-
blockRows = Math.min(blockRows, rows);
|
|
19858
|
-
blockCols = Math.min(blockCols, cols);
|
|
19859
|
-
const varies = operands.some(
|
|
19860
|
-
(m) => blockRows < rows && m.rows === 1 && m.cols > 1 || blockCols < cols && m.cols === 1 && m.rows > 1
|
|
19861
|
-
);
|
|
19862
|
-
if (varies) return Matrix.build(rows, cols, at);
|
|
19863
|
-
return Matrix.padded(Matrix.build(blockRows, blockCols, at), rows, cols, at(rows - 1, cols - 1));
|
|
19864
|
-
}
|
|
19865
|
-
|
|
19866
20038
|
// xlsx/formula/functions/lambda.ts
|
|
19867
20039
|
var C17 = "Logical";
|
|
19868
20040
|
function lambdaArg(value2) {
|
|
@@ -25122,9 +25294,6 @@ var paramKind = (spec2, index3) => {
|
|
|
25122
25294
|
return params[Math.min(index3, params.length - 1)] ?? "value";
|
|
25123
25295
|
};
|
|
25124
25296
|
|
|
25125
|
-
// xlsx/formula/spill.ts
|
|
25126
|
-
var isSpilledCell = (cell) => cell !== void 0 && "spillAnchor" in cell;
|
|
25127
|
-
|
|
25128
25297
|
// xlsx/formula/move.ts
|
|
25129
25298
|
var same3 = (a2, b) => a2.toLowerCase() === b.toLowerCase();
|
|
25130
25299
|
function deleteSheetInFormula(formula, sheetName, tableNames = []) {
|
|
@@ -27153,10 +27322,8 @@ function sheetFormatXml(sheet) {
|
|
|
27153
27322
|
const current = { defaultRowHeight: sheet.defaultRowHeight };
|
|
27154
27323
|
if (sheet.defaultColWidth !== void 0) current.defaultColWidth = sheet.defaultColWidth;
|
|
27155
27324
|
if (sheet.format && Object.keys(sheet.format).length) current.format = sheet.format;
|
|
27156
|
-
|
|
27157
|
-
|
|
27158
|
-
...[...sheet.rowInfo.values()].map((info) => info.outlineLevel ?? 0)
|
|
27159
|
-
);
|
|
27325
|
+
let rowLevel = 0;
|
|
27326
|
+
for (const info of sheet.rowInfo.values()) rowLevel = Math.max(rowLevel, info.outlineLevel ?? 0);
|
|
27160
27327
|
const colLevel = Math.max(0, ...sheet.columns.map((col) => col.outlineLevel ?? 0));
|
|
27161
27328
|
if (source2 && sameModel(readSheetFormat(source2), current) && Number(source2.getAttribute("outlineLevelRow") ?? 0) === rowLevel && Number(source2.getAttribute("outlineLevelCol") ?? 0) === colLevel)
|
|
27162
27329
|
return snapshotXml(sheet, "sheetFormatPr") ?? "";
|
|
@@ -27458,11 +27625,10 @@ function pivotCacheDefinitionXml(pivot, workbook, data, recordRel) {
|
|
|
27458
27625
|
const items = data.items[index3];
|
|
27459
27626
|
if (pivot.dateFields?.includes(name) && items.every((v) => typeof v === "number")) {
|
|
27460
27627
|
const serials = items;
|
|
27461
|
-
const
|
|
27462
|
-
const maxDate = Number.isInteger(latest) ? latest + 1 : latest;
|
|
27628
|
+
const range = dateGroupRange({}, serials);
|
|
27463
27629
|
const parent = derived.filter((entry3) => entry3.group.field === name).at(-1);
|
|
27464
27630
|
const link = parent ? `<fieldGroup par="${parent.index}"/>` : "";
|
|
27465
|
-
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>`;
|
|
27466
27632
|
}
|
|
27467
27633
|
const types = new Set(
|
|
27468
27634
|
items.map((value2) => value2 === null || value2 === "" ? "blank" : typeof value2)
|
|
@@ -28333,6 +28499,332 @@ async function saveXlsx(workbook) {
|
|
|
28333
28499
|
return writer.build();
|
|
28334
28500
|
}
|
|
28335
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
|
+
|
|
28336
28828
|
// xlsx/load/csv.ts
|
|
28337
28829
|
var CANDIDATES = [",", ";", " "];
|
|
28338
28830
|
function delimiterCounts(text2, maxLines = 20) {
|
|
@@ -28429,6 +28921,7 @@ function csvToWorkbook(text2, options = {}) {
|
|
|
28429
28921
|
workbook.format = "csv";
|
|
28430
28922
|
const sheet = workbook.sheets[0];
|
|
28431
28923
|
if (!sheet) return workbook;
|
|
28924
|
+
const reader = createFieldReader(options, workbook.date1904);
|
|
28432
28925
|
const base = styleAt(workbook, 0);
|
|
28433
28926
|
const formats = /* @__PURE__ */ new Map();
|
|
28434
28927
|
const rows = parseCsv(
|
|
@@ -28436,9 +28929,11 @@ function csvToWorkbook(text2, options = {}) {
|
|
|
28436
28929
|
options.delimiter === void 0 ? {} : { delimiter: options.delimiter }
|
|
28437
28930
|
);
|
|
28438
28931
|
rows.forEach((fields, row2) => {
|
|
28439
|
-
fields.forEach((field,
|
|
28932
|
+
fields.forEach((field, source2) => {
|
|
28440
28933
|
if (field === "") return;
|
|
28441
|
-
const
|
|
28934
|
+
const col = reader.target(source2);
|
|
28935
|
+
if (col < 0) return;
|
|
28936
|
+
const parsed = reader.read(field, row2, source2);
|
|
28442
28937
|
const cell = { value: parsed.value };
|
|
28443
28938
|
if (parsed.formula !== void 0) cell.formula = parsed.formula;
|
|
28444
28939
|
if (parsed.numFmt && parsed.numFmt !== "General") {
|
|
@@ -28457,6 +28952,7 @@ function csvToWorkbook(text2, options = {}) {
|
|
|
28457
28952
|
cells.set(col, cell);
|
|
28458
28953
|
});
|
|
28459
28954
|
});
|
|
28955
|
+
workbook.warnings.push(...reader.warnings());
|
|
28460
28956
|
return workbook;
|
|
28461
28957
|
}
|
|
28462
28958
|
var FORMULA_TRIGGER = /^[=+\-@\t\r]/;
|
|
@@ -29707,7 +30203,7 @@ var RT = {
|
|
|
29707
30203
|
OBPROJ: 211,
|
|
29708
30204
|
SXSTREAMID: 213};
|
|
29709
30205
|
var STATES = ["visible", "hidden", "veryHidden"];
|
|
29710
|
-
var
|
|
30206
|
+
var KINDS3 = {
|
|
29711
30207
|
0: "worksheet",
|
|
29712
30208
|
1: "macro",
|
|
29713
30209
|
2: "chart",
|
|
@@ -29842,7 +30338,7 @@ function parseGlobals(records) {
|
|
|
29842
30338
|
case RT.BOUNDSHEET: {
|
|
29843
30339
|
const offset2 = r.u32();
|
|
29844
30340
|
const state = STATES[r.u8() & 3] ?? "visible";
|
|
29845
|
-
const kind =
|
|
30341
|
+
const kind = KINDS3[r.u8()] ?? "unknown";
|
|
29846
30342
|
out.sheets.push({ offset: offset2, state, kind, name: r.shortXlString() });
|
|
29847
30343
|
break;
|
|
29848
30344
|
}
|
|
@@ -31145,6 +31641,7 @@ async function decryptWorkbook(bytes, password) {
|
|
|
31145
31641
|
return plain3;
|
|
31146
31642
|
}
|
|
31147
31643
|
async function loadWorkbook(input, options = {}) {
|
|
31644
|
+
const limits = options.limits && resolveLoadLimits(options.limits);
|
|
31148
31645
|
let bytes = toBytes3(input);
|
|
31149
31646
|
let format = detectWorkbookFormat(bytes, options.fileName);
|
|
31150
31647
|
const encrypted = format === "encrypted";
|
|
@@ -31156,12 +31653,13 @@ async function loadWorkbook(input, options = {}) {
|
|
|
31156
31653
|
if (format === "xls") return loadLegacyXls(bytes);
|
|
31157
31654
|
if (format === "csv") {
|
|
31158
31655
|
return csvToWorkbook(decodeText(bytes), {
|
|
31656
|
+
...options.csv,
|
|
31159
31657
|
sheetName: sheetNameFromFileName(options.fileName),
|
|
31160
31658
|
...options.delimiter === void 0 ? {} : { delimiter: options.delimiter },
|
|
31161
31659
|
...options.formulas === void 0 ? {} : { formulas: options.formulas }
|
|
31162
31660
|
});
|
|
31163
31661
|
}
|
|
31164
|
-
const workbook = await loadXlsx(bytes);
|
|
31662
|
+
const workbook = await loadXlsx(bytes, limits ? { limits } : {});
|
|
31165
31663
|
if (format === "xlsm" && workbook.format === "xlsx") workbook.format = "xlsm";
|
|
31166
31664
|
if (encrypted) workbook.warnings.push(ENCRYPTED_WARNING);
|
|
31167
31665
|
return workbook;
|
|
@@ -31180,4 +31678,4 @@ async function saveWorkbook(workbook, format, sheetIndexOrOptions) {
|
|
|
31180
31678
|
return new TextEncoder().encode(`\uFEFF${csv}`);
|
|
31181
31679
|
}
|
|
31182
31680
|
|
|
31183
|
-
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 };
|