@cj-tech-master/excelts 9.4.2 → 9.5.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/dist/browser/index.browser.d.ts +8 -5
- package/dist/browser/index.browser.js +19 -1
- package/dist/browser/index.d.ts +4 -2
- package/dist/browser/index.js +9 -1
- package/dist/browser/modules/excel/chart/cache-populator.d.ts +49 -0
- package/dist/browser/modules/excel/chart/cache-populator.js +1171 -0
- package/dist/browser/modules/excel/chart/chart-api.d.ts +92 -0
- package/dist/browser/modules/excel/chart/chart-api.js +364 -0
- package/dist/browser/modules/excel/chart/chart-builder.d.ts +48 -0
- package/dist/browser/modules/excel/chart/chart-builder.js +2432 -0
- package/dist/browser/modules/excel/chart/chart-ex-builder.d.ts +36 -0
- package/dist/browser/modules/excel/chart/chart-ex-builder.js +903 -0
- package/dist/browser/modules/excel/chart/chart-ex-parser.d.ts +8 -0
- package/dist/browser/modules/excel/chart/chart-ex-parser.js +1205 -0
- package/dist/browser/modules/excel/chart/chart-ex-renderer.d.ts +187 -0
- package/dist/browser/modules/excel/chart/chart-ex-renderer.js +5352 -0
- package/dist/browser/modules/excel/chart/chart-ex-types.d.ts +531 -0
- package/dist/browser/modules/excel/chart/chart-ex-types.js +11 -0
- package/dist/browser/modules/excel/chart/chart-images.d.ts +78 -0
- package/dist/browser/modules/excel/chart/chart-images.js +363 -0
- package/dist/browser/modules/excel/chart/chart-presets.d.ts +392 -0
- package/dist/browser/modules/excel/chart/chart-presets.js +179 -0
- package/dist/browser/modules/excel/chart/chart-renderer.d.ts +550 -0
- package/dist/browser/modules/excel/chart/chart-renderer.js +6440 -0
- package/dist/browser/modules/excel/chart/chart-sidecar.d.ts +21 -0
- package/dist/browser/modules/excel/chart/chart-sidecar.js +427 -0
- package/dist/browser/modules/excel/chart/chart-utils.d.ts +306 -0
- package/dist/browser/modules/excel/chart/chart-utils.js +821 -0
- package/dist/browser/modules/excel/chart/chart.d.ts +504 -0
- package/dist/browser/modules/excel/chart/chart.js +1320 -0
- package/dist/browser/modules/excel/chart/glyph-rasterizer.d.ts +62 -0
- package/dist/browser/modules/excel/chart/glyph-rasterizer.js +658 -0
- package/dist/browser/modules/excel/chart/index.d.ts +54 -0
- package/dist/browser/modules/excel/chart/index.js +46 -0
- package/dist/browser/modules/excel/chart/install.d.ts +44 -0
- package/dist/browser/modules/excel/chart/install.js +91 -0
- package/dist/browser/modules/excel/chart/shape-properties.d.ts +156 -0
- package/dist/browser/modules/excel/chart/shape-properties.js +1557 -0
- package/dist/browser/modules/excel/chart/stroke-font.d.ts +36 -0
- package/dist/browser/modules/excel/chart/stroke-font.js +1556 -0
- package/dist/browser/modules/excel/chart/topojson.d.ts +98 -0
- package/dist/browser/modules/excel/chart/topojson.js +236 -0
- package/dist/browser/modules/excel/chart/types.d.ts +2559 -0
- package/dist/browser/modules/excel/chart/types.js +8 -0
- package/dist/browser/modules/excel/chart-host-registry.d.ts +157 -0
- package/dist/browser/modules/excel/chart-host-registry.js +90 -0
- package/dist/browser/modules/excel/chartsheet.d.ts +102 -0
- package/dist/browser/modules/excel/chartsheet.js +196 -0
- package/dist/browser/modules/excel/defined-names.d.ts +35 -0
- package/dist/browser/modules/excel/defined-names.js +44 -4
- package/dist/browser/modules/excel/errors.d.ts +6 -0
- package/dist/browser/modules/excel/errors.js +9 -0
- package/dist/browser/modules/excel/form-control.d.ts +6 -0
- package/dist/browser/modules/excel/form-control.js +17 -0
- package/dist/browser/modules/excel/image.js +12 -2
- package/dist/browser/modules/excel/pivot-chart.d.ts +7 -0
- package/dist/browser/modules/excel/pivot-chart.js +53 -0
- package/dist/browser/modules/excel/pivot-table.d.ts +55 -0
- package/dist/browser/modules/excel/pivot-table.js +35 -0
- package/dist/browser/modules/excel/range.js +5 -1
- package/dist/browser/modules/excel/sparkline/index.d.ts +7 -0
- package/dist/browser/modules/excel/sparkline/index.js +7 -0
- package/dist/browser/modules/excel/sparkline/sparkline.d.ts +206 -0
- package/dist/browser/modules/excel/sparkline/sparkline.js +750 -0
- package/dist/browser/modules/excel/stream/worksheet-writer.js +3 -2
- package/dist/browser/modules/excel/table.js +42 -6
- package/dist/browser/modules/excel/types.d.ts +72 -0
- package/dist/browser/modules/excel/utils/address.d.ts +18 -0
- package/dist/browser/modules/excel/utils/address.js +28 -0
- package/dist/browser/modules/excel/utils/drawing-utils.js +11 -6
- package/dist/browser/modules/excel/utils/guid.d.ts +15 -0
- package/dist/browser/modules/excel/utils/guid.js +35 -0
- package/dist/browser/modules/excel/utils/ooxml-paths.d.ts +74 -0
- package/dist/browser/modules/excel/utils/ooxml-paths.js +206 -9
- package/dist/browser/modules/excel/utils/ooxml-validator/check-chart-sidecar.d.ts +35 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-chart-sidecar.js +101 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-chart.d.ts +32 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-chart.js +2125 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-chartsheet.d.ts +9 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-chartsheet.js +26 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-content-types.d.ts +16 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-content-types.js +181 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-drawing.d.ts +34 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-drawing.js +267 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-pivot.d.ts +14 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-pivot.js +104 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-relationships.d.ts +18 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-relationships.js +184 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-structure.d.ts +21 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-structure.js +56 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-styles.d.ts +15 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-styles.js +89 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-table.d.ts +31 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-table.js +177 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-workbook.d.ts +19 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-workbook.js +163 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-worksheet.d.ts +25 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-worksheet.js +569 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/context.d.ts +85 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/context.js +191 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/index.d.ts +31 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/index.js +102 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/path-utils.d.ts +67 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/path-utils.js +156 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/reporter.d.ts +41 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/reporter.js +61 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/types.d.ts +109 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/types.js +12 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/xml-utils.d.ts +38 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/xml-utils.js +100 -0
- package/dist/browser/modules/excel/workbook.browser.d.ts +248 -30
- package/dist/browser/modules/excel/workbook.browser.js +966 -31
- package/dist/browser/modules/excel/workbook.d.ts +43 -0
- package/dist/browser/modules/excel/workbook.js +48 -0
- package/dist/browser/modules/excel/worksheet.d.ts +157 -3
- package/dist/browser/modules/excel/worksheet.js +394 -35
- package/dist/browser/modules/excel/xlsx/rel-type.d.ts +40 -0
- package/dist/browser/modules/excel/xlsx/rel-type.js +41 -1
- package/dist/browser/modules/excel/xlsx/xform/book/defined-name-xform.d.ts +1 -0
- package/dist/browser/modules/excel/xlsx/xform/book/defined-name-xform.js +11 -2
- package/dist/browser/modules/excel/xlsx/xform/book/external-link-xform.js +12 -10
- package/dist/browser/modules/excel/xlsx/xform/book/workbook-xform.js +96 -22
- package/dist/browser/modules/excel/xlsx/xform/chart/chart-space-xform.d.ts +353 -0
- package/dist/browser/modules/excel/xlsx/xform/chart/chart-space-xform.js +6000 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/threaded-comments-xform.d.ts +60 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/threaded-comments-xform.js +213 -0
- package/dist/browser/modules/excel/xlsx/xform/core/content-types-xform.js +150 -11
- package/dist/browser/modules/excel/xlsx/xform/drawing/absolute-anchor-xform.js +20 -1
- package/dist/browser/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/drawing/drawing-xform.d.ts +30 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/drawing-xform.js +109 -5
- package/dist/browser/modules/excel/xlsx/xform/drawing/graphic-frame-xform.d.ts +54 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/graphic-frame-xform.js +225 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.d.ts +3 -1
- package/dist/browser/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +18 -3
- package/dist/browser/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.d.ts +46 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +294 -12
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.d.ts +13 -2
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +32 -6
- package/dist/browser/modules/excel/xlsx/xform/sheet/chartsheet-xform.d.ts +185 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/chartsheet-xform.js +441 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/ext-lst-xform.d.ts +1 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/ext-lst-xform.js +51 -2
- package/dist/browser/modules/excel/xlsx/xform/sheet/worksheet-xform.js +196 -20
- package/dist/browser/modules/excel/xlsx/xform/table/auto-filter-xform.js +16 -1
- package/dist/browser/modules/excel/xlsx/xform/table/table-column-xform.js +17 -2
- package/dist/browser/modules/excel/xlsx/xform/xsd-values.d.ts +63 -0
- package/dist/browser/modules/excel/xlsx/xform/xsd-values.js +101 -0
- package/dist/browser/modules/excel/xlsx/xlsx.browser.d.ts +115 -21
- package/dist/browser/modules/excel/xlsx/xlsx.browser.js +4422 -78
- package/dist/browser/modules/pdf/builder/document-builder.d.ts +74 -0
- package/dist/browser/modules/pdf/builder/document-builder.js +507 -2
- package/dist/browser/modules/pdf/builder/pdf-editor.js +48 -3
- package/dist/browser/modules/pdf/excel-bridge.d.ts +69 -0
- package/dist/browser/modules/pdf/excel-bridge.js +683 -12
- package/dist/browser/modules/pdf/font/font-manager.d.ts +25 -0
- package/dist/browser/modules/pdf/font/font-manager.js +39 -0
- package/dist/browser/modules/pdf/index.d.ts +5 -2
- package/dist/browser/modules/pdf/index.js +3 -1
- package/dist/browser/modules/pdf/render/chart-surface.d.ts +33 -0
- package/dist/browser/modules/pdf/render/chart-surface.js +200 -0
- package/dist/browser/modules/pdf/render/layout-engine.d.ts +22 -1
- package/dist/browser/modules/pdf/render/layout-engine.js +436 -56
- package/dist/browser/modules/pdf/render/page-renderer.js +169 -28
- package/dist/browser/modules/pdf/render/pdf-exporter.js +117 -7
- package/dist/browser/modules/pdf/types.d.ts +227 -23
- package/dist/browser/modules/pdf/types.js +4 -0
- package/dist/browser/modules/pdf/word-bridge.d.ts +47 -0
- package/dist/browser/modules/pdf/word-bridge.js +304 -0
- package/dist/browser/modules/word/constants.d.ts +179 -0
- package/dist/browser/modules/word/constants.js +231 -0
- package/dist/browser/modules/word/content-types.d.ts +27 -0
- package/dist/browser/modules/word/content-types.js +53 -0
- package/dist/browser/modules/word/digital-signatures.d.ts +87 -0
- package/dist/browser/modules/word/digital-signatures.js +134 -0
- package/dist/browser/modules/word/document.d.ts +728 -0
- package/dist/browser/modules/word/document.js +1795 -0
- package/dist/browser/modules/word/docx-packager.d.ts +14 -0
- package/dist/browser/modules/word/docx-packager.js +822 -0
- package/dist/browser/modules/word/docx-reader.d.ts +11 -0
- package/dist/browser/modules/word/docx-reader.js +4929 -0
- package/dist/browser/modules/word/encryption.d.ts +102 -0
- package/dist/browser/modules/word/encryption.js +274 -0
- package/dist/browser/modules/word/errors.d.ts +49 -0
- package/dist/browser/modules/word/errors.js +68 -0
- package/dist/browser/modules/word/font-obfuscation.d.ts +31 -0
- package/dist/browser/modules/word/font-obfuscation.js +83 -0
- package/dist/browser/modules/word/html-renderer.d.ts +38 -0
- package/dist/browser/modules/word/html-renderer.js +782 -0
- package/dist/browser/modules/word/index.base.d.ts +19 -0
- package/dist/browser/modules/word/index.base.js +51 -0
- package/dist/browser/modules/word/index.browser.d.ts +4 -0
- package/dist/browser/modules/word/index.browser.js +4 -0
- package/dist/browser/modules/word/index.d.ts +4 -0
- package/dist/browser/modules/word/index.js +4 -0
- package/dist/browser/modules/word/internal-utils.d.ts +23 -0
- package/dist/browser/modules/word/internal-utils.js +54 -0
- package/dist/browser/modules/word/relationships.d.ts +31 -0
- package/dist/browser/modules/word/relationships.js +56 -0
- package/dist/browser/modules/word/types.d.ts +2325 -0
- package/dist/browser/modules/word/types.js +10 -0
- package/dist/browser/modules/word/units.d.ts +49 -0
- package/dist/browser/modules/word/units.js +111 -0
- package/dist/browser/modules/word/writers/chart-writer.d.ts +10 -0
- package/dist/browser/modules/word/writers/chart-writer.js +385 -0
- package/dist/browser/modules/word/writers/checkbox-writer.d.ts +9 -0
- package/dist/browser/modules/word/writers/checkbox-writer.js +42 -0
- package/dist/browser/modules/word/writers/comment-writer.d.ts +15 -0
- package/dist/browser/modules/word/writers/comment-writer.js +70 -0
- package/dist/browser/modules/word/writers/document-writer.d.ts +16 -0
- package/dist/browser/modules/word/writers/document-writer.js +461 -0
- package/dist/browser/modules/word/writers/footnote-writer.d.ts +11 -0
- package/dist/browser/modules/word/writers/footnote-writer.js +72 -0
- package/dist/browser/modules/word/writers/header-footer-writer.d.ts +13 -0
- package/dist/browser/modules/word/writers/header-footer-writer.js +129 -0
- package/dist/browser/modules/word/writers/image-writer.d.ts +10 -0
- package/dist/browser/modules/word/writers/image-writer.js +185 -0
- package/dist/browser/modules/word/writers/math-writer.d.ts +9 -0
- package/dist/browser/modules/word/writers/math-writer.js +428 -0
- package/dist/browser/modules/word/writers/numbering-writer.d.ts +10 -0
- package/dist/browser/modules/word/writers/numbering-writer.js +125 -0
- package/dist/browser/modules/word/writers/paragraph-writer.d.ts +13 -0
- package/dist/browser/modules/word/writers/paragraph-writer.js +516 -0
- package/dist/browser/modules/word/writers/parts-writer.d.ts +26 -0
- package/dist/browser/modules/word/writers/parts-writer.js +660 -0
- package/dist/browser/modules/word/writers/run-writer.d.ts +15 -0
- package/dist/browser/modules/word/writers/run-writer.js +649 -0
- package/dist/browser/modules/word/writers/section-writer.d.ts +10 -0
- package/dist/browser/modules/word/writers/section-writer.js +238 -0
- package/dist/browser/modules/word/writers/styles-writer.d.ts +10 -0
- package/dist/browser/modules/word/writers/styles-writer.js +242 -0
- package/dist/browser/modules/word/writers/table-writer.d.ts +10 -0
- package/dist/browser/modules/word/writers/table-writer.js +503 -0
- package/dist/browser/modules/word/writers/textbox-writer.d.ts +9 -0
- package/dist/browser/modules/word/writers/textbox-writer.js +53 -0
- package/dist/browser/modules/word/writers/toc-writer.d.ts +9 -0
- package/dist/browser/modules/word/writers/toc-writer.js +79 -0
- package/dist/browser/modules/xml/encode.d.ts +56 -7
- package/dist/browser/modules/xml/encode.js +157 -11
- package/dist/cjs/index.js +13 -2
- package/dist/cjs/modules/excel/chart/cache-populator.js +1178 -0
- package/dist/cjs/modules/excel/chart/chart-api.js +371 -0
- package/dist/cjs/modules/excel/chart/chart-builder.js +2440 -0
- package/dist/cjs/modules/excel/chart/chart-ex-builder.js +907 -0
- package/dist/cjs/modules/excel/chart/chart-ex-parser.js +1208 -0
- package/dist/cjs/modules/excel/chart/chart-ex-renderer.js +5364 -0
- package/dist/cjs/modules/excel/chart/chart-ex-types.js +12 -0
- package/dist/cjs/modules/excel/chart/chart-images.js +366 -0
- package/dist/cjs/modules/excel/chart/chart-presets.js +184 -0
- package/dist/cjs/modules/excel/chart/chart-renderer.js +6450 -0
- package/dist/cjs/modules/excel/chart/chart-sidecar.js +433 -0
- package/dist/cjs/modules/excel/chart/chart-utils.js +845 -0
- package/dist/cjs/modules/excel/chart/chart.js +1324 -0
- package/dist/cjs/modules/excel/chart/glyph-rasterizer.js +664 -0
- package/dist/cjs/modules/excel/chart/index.js +101 -0
- package/dist/cjs/modules/excel/chart/install.js +95 -0
- package/dist/cjs/modules/excel/chart/shape-properties.js +1577 -0
- package/dist/cjs/modules/excel/chart/stroke-font.js +1559 -0
- package/dist/cjs/modules/excel/chart/topojson.js +239 -0
- package/dist/cjs/modules/excel/chart/types.js +9 -0
- package/dist/cjs/modules/excel/chart-host-registry.js +96 -0
- package/dist/cjs/modules/excel/chartsheet.js +199 -0
- package/dist/cjs/modules/excel/defined-names.js +44 -4
- package/dist/cjs/modules/excel/errors.js +11 -1
- package/dist/cjs/modules/excel/form-control.js +17 -0
- package/dist/cjs/modules/excel/image.js +12 -2
- package/dist/cjs/modules/excel/pivot-chart.js +56 -0
- package/dist/cjs/modules/excel/pivot-table.js +35 -0
- package/dist/cjs/modules/excel/range.js +5 -1
- package/dist/cjs/modules/excel/sparkline/index.js +23 -0
- package/dist/cjs/modules/excel/sparkline/sparkline.js +756 -0
- package/dist/cjs/modules/excel/stream/worksheet-writer.js +3 -2
- package/dist/cjs/modules/excel/table.js +42 -6
- package/dist/cjs/modules/excel/utils/address.js +29 -0
- package/dist/cjs/modules/excel/utils/drawing-utils.js +11 -6
- package/dist/cjs/modules/excel/utils/guid.js +38 -0
- package/dist/cjs/modules/excel/utils/ooxml-paths.js +246 -9
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-chart-sidecar.js +103 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-chart.js +2128 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-chartsheet.js +29 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-content-types.js +184 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-drawing.js +270 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-pivot.js +107 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-relationships.js +188 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-structure.js +60 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-styles.js +92 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-table.js +180 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-workbook.js +166 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-worksheet.js +572 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/context.js +196 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/index.js +105 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/path-utils.js +168 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/reporter.js +66 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/types.js +13 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/xml-utils.js +110 -0
- package/dist/cjs/modules/excel/workbook.browser.js +973 -38
- package/dist/cjs/modules/excel/workbook.js +48 -0
- package/dist/cjs/modules/excel/worksheet.js +393 -34
- package/dist/cjs/modules/excel/xlsx/rel-type.js +41 -1
- package/dist/cjs/modules/excel/xlsx/xform/book/defined-name-xform.js +11 -2
- package/dist/cjs/modules/excel/xlsx/xform/book/external-link-xform.js +12 -10
- package/dist/cjs/modules/excel/xlsx/xform/book/workbook-xform.js +96 -22
- package/dist/cjs/modules/excel/xlsx/xform/chart/chart-space-xform.js +6003 -0
- package/dist/cjs/modules/excel/xlsx/xform/comment/threaded-comments-xform.js +219 -0
- package/dist/cjs/modules/excel/xlsx/xform/core/content-types-xform.js +149 -10
- package/dist/cjs/modules/excel/xlsx/xform/drawing/absolute-anchor-xform.js +20 -1
- package/dist/cjs/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/drawing/drawing-xform.js +109 -5
- package/dist/cjs/modules/excel/xlsx/xform/drawing/graphic-frame-xform.js +228 -0
- package/dist/cjs/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +18 -3
- package/dist/cjs/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +294 -12
- package/dist/cjs/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +32 -6
- package/dist/cjs/modules/excel/xlsx/xform/sheet/chartsheet-xform.js +444 -0
- package/dist/cjs/modules/excel/xlsx/xform/sheet/ext-lst-xform.js +51 -2
- package/dist/cjs/modules/excel/xlsx/xform/sheet/worksheet-xform.js +195 -19
- package/dist/cjs/modules/excel/xlsx/xform/table/auto-filter-xform.js +16 -1
- package/dist/cjs/modules/excel/xlsx/xform/table/table-column-xform.js +17 -2
- package/dist/cjs/modules/excel/xlsx/xform/xsd-values.js +106 -0
- package/dist/cjs/modules/excel/xlsx/xlsx.browser.js +4420 -76
- package/dist/cjs/modules/pdf/builder/document-builder.js +506 -1
- package/dist/cjs/modules/pdf/builder/pdf-editor.js +48 -3
- package/dist/cjs/modules/pdf/excel-bridge.js +684 -12
- package/dist/cjs/modules/pdf/font/font-manager.js +39 -0
- package/dist/cjs/modules/pdf/index.js +5 -1
- package/dist/cjs/modules/pdf/render/chart-surface.js +203 -0
- package/dist/cjs/modules/pdf/render/layout-engine.js +437 -56
- package/dist/cjs/modules/pdf/render/page-renderer.js +169 -28
- package/dist/cjs/modules/pdf/render/pdf-exporter.js +115 -5
- package/dist/cjs/modules/pdf/types.js +5 -0
- package/dist/cjs/modules/pdf/word-bridge.js +307 -0
- package/dist/cjs/modules/word/constants.js +234 -0
- package/dist/cjs/modules/word/content-types.js +57 -0
- package/dist/cjs/modules/word/digital-signatures.js +140 -0
- package/dist/cjs/modules/word/document.js +1909 -0
- package/dist/cjs/modules/word/docx-packager.js +825 -0
- package/dist/cjs/modules/word/docx-reader.js +4932 -0
- package/dist/cjs/modules/word/encryption.js +282 -0
- package/dist/cjs/modules/word/errors.js +88 -0
- package/dist/cjs/modules/word/font-obfuscation.js +88 -0
- package/dist/cjs/modules/word/html-renderer.js +785 -0
- package/dist/cjs/modules/word/index.base.js +199 -0
- package/dist/cjs/modules/word/index.browser.js +20 -0
- package/dist/cjs/modules/word/index.js +20 -0
- package/dist/cjs/modules/word/internal-utils.js +59 -0
- package/dist/cjs/modules/word/relationships.js +60 -0
- package/dist/cjs/modules/word/types.js +11 -0
- package/dist/cjs/modules/word/units.js +135 -0
- package/dist/cjs/modules/word/writers/chart-writer.js +388 -0
- package/dist/cjs/modules/word/writers/checkbox-writer.js +45 -0
- package/dist/cjs/modules/word/writers/comment-writer.js +74 -0
- package/dist/cjs/modules/word/writers/document-writer.js +465 -0
- package/dist/cjs/modules/word/writers/footnote-writer.js +76 -0
- package/dist/cjs/modules/word/writers/header-footer-writer.js +134 -0
- package/dist/cjs/modules/word/writers/image-writer.js +188 -0
- package/dist/cjs/modules/word/writers/math-writer.js +431 -0
- package/dist/cjs/modules/word/writers/numbering-writer.js +128 -0
- package/dist/cjs/modules/word/writers/paragraph-writer.js +521 -0
- package/dist/cjs/modules/word/writers/parts-writer.js +671 -0
- package/dist/cjs/modules/word/writers/run-writer.js +655 -0
- package/dist/cjs/modules/word/writers/section-writer.js +241 -0
- package/dist/cjs/modules/word/writers/styles-writer.js +245 -0
- package/dist/cjs/modules/word/writers/table-writer.js +506 -0
- package/dist/cjs/modules/word/writers/textbox-writer.js +56 -0
- package/dist/cjs/modules/word/writers/toc-writer.js +82 -0
- package/dist/cjs/modules/xml/encode.js +158 -11
- package/dist/esm/index.browser.js +20 -2
- package/dist/esm/index.js +9 -1
- package/dist/esm/modules/excel/chart/cache-populator.js +1171 -0
- package/dist/esm/modules/excel/chart/chart-api.js +364 -0
- package/dist/esm/modules/excel/chart/chart-builder.js +2432 -0
- package/dist/esm/modules/excel/chart/chart-ex-builder.js +903 -0
- package/dist/esm/modules/excel/chart/chart-ex-parser.js +1205 -0
- package/dist/esm/modules/excel/chart/chart-ex-renderer.js +5352 -0
- package/dist/esm/modules/excel/chart/chart-ex-types.js +11 -0
- package/dist/esm/modules/excel/chart/chart-images.js +363 -0
- package/dist/esm/modules/excel/chart/chart-presets.js +179 -0
- package/dist/esm/modules/excel/chart/chart-renderer.js +6440 -0
- package/dist/esm/modules/excel/chart/chart-sidecar.js +427 -0
- package/dist/esm/modules/excel/chart/chart-utils.js +821 -0
- package/dist/esm/modules/excel/chart/chart.js +1320 -0
- package/dist/esm/modules/excel/chart/glyph-rasterizer.js +658 -0
- package/dist/esm/modules/excel/chart/index.js +46 -0
- package/dist/esm/modules/excel/chart/install.js +91 -0
- package/dist/esm/modules/excel/chart/shape-properties.js +1557 -0
- package/dist/esm/modules/excel/chart/stroke-font.js +1556 -0
- package/dist/esm/modules/excel/chart/topojson.js +236 -0
- package/dist/esm/modules/excel/chart/types.js +8 -0
- package/dist/esm/modules/excel/chart-host-registry.js +90 -0
- package/dist/esm/modules/excel/chartsheet.js +196 -0
- package/dist/esm/modules/excel/defined-names.js +44 -4
- package/dist/esm/modules/excel/errors.js +9 -0
- package/dist/esm/modules/excel/form-control.js +17 -0
- package/dist/esm/modules/excel/image.js +12 -2
- package/dist/esm/modules/excel/pivot-chart.js +53 -0
- package/dist/esm/modules/excel/pivot-table.js +35 -0
- package/dist/esm/modules/excel/range.js +5 -1
- package/dist/esm/modules/excel/sparkline/index.js +7 -0
- package/dist/esm/modules/excel/sparkline/sparkline.js +750 -0
- package/dist/esm/modules/excel/stream/worksheet-writer.js +3 -2
- package/dist/esm/modules/excel/table.js +42 -6
- package/dist/esm/modules/excel/utils/address.js +28 -0
- package/dist/esm/modules/excel/utils/drawing-utils.js +11 -6
- package/dist/esm/modules/excel/utils/guid.js +35 -0
- package/dist/esm/modules/excel/utils/ooxml-paths.js +206 -9
- package/dist/esm/modules/excel/utils/ooxml-validator/check-chart-sidecar.js +101 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-chart.js +2125 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-chartsheet.js +26 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-content-types.js +181 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-drawing.js +267 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-pivot.js +104 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-relationships.js +184 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-structure.js +56 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-styles.js +89 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-table.js +177 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-workbook.js +163 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-worksheet.js +569 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/context.js +191 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/index.js +102 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/path-utils.js +156 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/reporter.js +61 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/types.js +12 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/xml-utils.js +100 -0
- package/dist/esm/modules/excel/workbook.browser.js +969 -34
- package/dist/esm/modules/excel/workbook.js +48 -0
- package/dist/esm/modules/excel/worksheet.js +394 -35
- package/dist/esm/modules/excel/xlsx/rel-type.js +41 -1
- package/dist/esm/modules/excel/xlsx/xform/book/defined-name-xform.js +11 -2
- package/dist/esm/modules/excel/xlsx/xform/book/external-link-xform.js +12 -10
- package/dist/esm/modules/excel/xlsx/xform/book/workbook-xform.js +96 -22
- package/dist/esm/modules/excel/xlsx/xform/chart/chart-space-xform.js +6000 -0
- package/dist/esm/modules/excel/xlsx/xform/comment/threaded-comments-xform.js +213 -0
- package/dist/esm/modules/excel/xlsx/xform/core/content-types-xform.js +150 -11
- package/dist/esm/modules/excel/xlsx/xform/drawing/absolute-anchor-xform.js +20 -1
- package/dist/esm/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/drawing/drawing-xform.js +109 -5
- package/dist/esm/modules/excel/xlsx/xform/drawing/graphic-frame-xform.js +225 -0
- package/dist/esm/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +18 -3
- package/dist/esm/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +294 -12
- package/dist/esm/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +32 -6
- package/dist/esm/modules/excel/xlsx/xform/sheet/chartsheet-xform.js +441 -0
- package/dist/esm/modules/excel/xlsx/xform/sheet/ext-lst-xform.js +51 -2
- package/dist/esm/modules/excel/xlsx/xform/sheet/worksheet-xform.js +196 -20
- package/dist/esm/modules/excel/xlsx/xform/table/auto-filter-xform.js +16 -1
- package/dist/esm/modules/excel/xlsx/xform/table/table-column-xform.js +17 -2
- package/dist/esm/modules/excel/xlsx/xform/xsd-values.js +101 -0
- package/dist/esm/modules/excel/xlsx/xlsx.browser.js +4422 -78
- package/dist/esm/modules/pdf/builder/document-builder.js +507 -2
- package/dist/esm/modules/pdf/builder/pdf-editor.js +48 -3
- package/dist/esm/modules/pdf/excel-bridge.js +683 -12
- package/dist/esm/modules/pdf/font/font-manager.js +39 -0
- package/dist/esm/modules/pdf/index.js +3 -1
- package/dist/esm/modules/pdf/render/chart-surface.js +200 -0
- package/dist/esm/modules/pdf/render/layout-engine.js +436 -56
- package/dist/esm/modules/pdf/render/page-renderer.js +169 -28
- package/dist/esm/modules/pdf/render/pdf-exporter.js +117 -7
- package/dist/esm/modules/pdf/types.js +4 -0
- package/dist/esm/modules/pdf/word-bridge.js +304 -0
- package/dist/esm/modules/word/constants.js +231 -0
- package/dist/esm/modules/word/content-types.js +53 -0
- package/dist/esm/modules/word/digital-signatures.js +134 -0
- package/dist/esm/modules/word/document.js +1795 -0
- package/dist/esm/modules/word/docx-packager.js +822 -0
- package/dist/esm/modules/word/docx-reader.js +4929 -0
- package/dist/esm/modules/word/encryption.js +274 -0
- package/dist/esm/modules/word/errors.js +68 -0
- package/dist/esm/modules/word/font-obfuscation.js +83 -0
- package/dist/esm/modules/word/html-renderer.js +782 -0
- package/dist/esm/modules/word/index.base.js +51 -0
- package/dist/esm/modules/word/index.browser.js +4 -0
- package/dist/esm/modules/word/index.js +4 -0
- package/dist/esm/modules/word/internal-utils.js +54 -0
- package/dist/esm/modules/word/relationships.js +56 -0
- package/dist/esm/modules/word/types.js +10 -0
- package/dist/esm/modules/word/units.js +111 -0
- package/dist/esm/modules/word/writers/chart-writer.js +385 -0
- package/dist/esm/modules/word/writers/checkbox-writer.js +42 -0
- package/dist/esm/modules/word/writers/comment-writer.js +70 -0
- package/dist/esm/modules/word/writers/document-writer.js +461 -0
- package/dist/esm/modules/word/writers/footnote-writer.js +72 -0
- package/dist/esm/modules/word/writers/header-footer-writer.js +129 -0
- package/dist/esm/modules/word/writers/image-writer.js +185 -0
- package/dist/esm/modules/word/writers/math-writer.js +428 -0
- package/dist/esm/modules/word/writers/numbering-writer.js +125 -0
- package/dist/esm/modules/word/writers/paragraph-writer.js +516 -0
- package/dist/esm/modules/word/writers/parts-writer.js +660 -0
- package/dist/esm/modules/word/writers/run-writer.js +649 -0
- package/dist/esm/modules/word/writers/section-writer.js +238 -0
- package/dist/esm/modules/word/writers/styles-writer.js +242 -0
- package/dist/esm/modules/word/writers/table-writer.js +503 -0
- package/dist/esm/modules/word/writers/textbox-writer.js +53 -0
- package/dist/esm/modules/word/writers/toc-writer.js +79 -0
- package/dist/esm/modules/xml/encode.js +157 -11
- package/dist/iife/excelts.iife.js +11789 -687
- package/dist/iife/excelts.iife.js.map +1 -1
- package/dist/iife/excelts.iife.min.js +52 -44
- package/dist/types/index.browser.d.ts +8 -5
- package/dist/types/index.d.ts +4 -2
- package/dist/types/modules/excel/chart/cache-populator.d.ts +49 -0
- package/dist/types/modules/excel/chart/chart-api.d.ts +92 -0
- package/dist/types/modules/excel/chart/chart-builder.d.ts +48 -0
- package/dist/types/modules/excel/chart/chart-ex-builder.d.ts +36 -0
- package/dist/types/modules/excel/chart/chart-ex-parser.d.ts +8 -0
- package/dist/types/modules/excel/chart/chart-ex-renderer.d.ts +187 -0
- package/dist/types/modules/excel/chart/chart-ex-types.d.ts +531 -0
- package/dist/types/modules/excel/chart/chart-images.d.ts +78 -0
- package/dist/types/modules/excel/chart/chart-presets.d.ts +392 -0
- package/dist/types/modules/excel/chart/chart-renderer.d.ts +550 -0
- package/dist/types/modules/excel/chart/chart-sidecar.d.ts +21 -0
- package/dist/types/modules/excel/chart/chart-utils.d.ts +306 -0
- package/dist/types/modules/excel/chart/chart.d.ts +504 -0
- package/dist/types/modules/excel/chart/glyph-rasterizer.d.ts +62 -0
- package/dist/types/modules/excel/chart/index.d.ts +54 -0
- package/dist/types/modules/excel/chart/install.d.ts +44 -0
- package/dist/types/modules/excel/chart/shape-properties.d.ts +156 -0
- package/dist/types/modules/excel/chart/stroke-font.d.ts +36 -0
- package/dist/types/modules/excel/chart/topojson.d.ts +98 -0
- package/dist/types/modules/excel/chart/types.d.ts +2559 -0
- package/dist/types/modules/excel/chart-host-registry.d.ts +157 -0
- package/dist/types/modules/excel/chartsheet.d.ts +102 -0
- package/dist/types/modules/excel/defined-names.d.ts +35 -0
- package/dist/types/modules/excel/errors.d.ts +6 -0
- package/dist/types/modules/excel/form-control.d.ts +6 -0
- package/dist/types/modules/excel/pivot-chart.d.ts +7 -0
- package/dist/types/modules/excel/pivot-table.d.ts +55 -0
- package/dist/types/modules/excel/sparkline/index.d.ts +7 -0
- package/dist/types/modules/excel/sparkline/sparkline.d.ts +206 -0
- package/dist/types/modules/excel/types.d.ts +72 -0
- package/dist/types/modules/excel/utils/address.d.ts +18 -0
- package/dist/types/modules/excel/utils/guid.d.ts +15 -0
- package/dist/types/modules/excel/utils/ooxml-paths.d.ts +74 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-chart-sidecar.d.ts +35 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-chart.d.ts +32 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-chartsheet.d.ts +9 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-content-types.d.ts +16 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-drawing.d.ts +34 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-pivot.d.ts +14 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-relationships.d.ts +18 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-structure.d.ts +21 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-styles.d.ts +15 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-table.d.ts +31 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-workbook.d.ts +19 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-worksheet.d.ts +25 -0
- package/dist/types/modules/excel/utils/ooxml-validator/context.d.ts +85 -0
- package/dist/types/modules/excel/utils/ooxml-validator/index.d.ts +31 -0
- package/dist/types/modules/excel/utils/ooxml-validator/path-utils.d.ts +67 -0
- package/dist/types/modules/excel/utils/ooxml-validator/reporter.d.ts +41 -0
- package/dist/types/modules/excel/utils/ooxml-validator/types.d.ts +109 -0
- package/dist/types/modules/excel/utils/ooxml-validator/xml-utils.d.ts +38 -0
- package/dist/types/modules/excel/workbook.browser.d.ts +248 -30
- package/dist/types/modules/excel/workbook.d.ts +43 -0
- package/dist/types/modules/excel/worksheet.d.ts +157 -3
- package/dist/types/modules/excel/xlsx/rel-type.d.ts +40 -0
- package/dist/types/modules/excel/xlsx/xform/book/defined-name-xform.d.ts +1 -0
- package/dist/types/modules/excel/xlsx/xform/chart/chart-space-xform.d.ts +353 -0
- package/dist/types/modules/excel/xlsx/xform/comment/threaded-comments-xform.d.ts +60 -0
- package/dist/types/modules/excel/xlsx/xform/drawing/drawing-xform.d.ts +30 -0
- package/dist/types/modules/excel/xlsx/xform/drawing/graphic-frame-xform.d.ts +54 -0
- package/dist/types/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.d.ts +3 -1
- package/dist/types/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.d.ts +46 -0
- package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.d.ts +13 -2
- package/dist/types/modules/excel/xlsx/xform/sheet/chartsheet-xform.d.ts +185 -0
- package/dist/types/modules/excel/xlsx/xform/sheet/ext-lst-xform.d.ts +1 -0
- package/dist/types/modules/excel/xlsx/xform/xsd-values.d.ts +63 -0
- package/dist/types/modules/excel/xlsx/xlsx.browser.d.ts +115 -21
- package/dist/types/modules/pdf/builder/document-builder.d.ts +74 -0
- package/dist/types/modules/pdf/excel-bridge.d.ts +69 -0
- package/dist/types/modules/pdf/font/font-manager.d.ts +25 -0
- package/dist/types/modules/pdf/index.d.ts +5 -2
- package/dist/types/modules/pdf/render/chart-surface.d.ts +33 -0
- package/dist/types/modules/pdf/render/layout-engine.d.ts +22 -1
- package/dist/types/modules/pdf/types.d.ts +227 -23
- package/dist/types/modules/pdf/word-bridge.d.ts +47 -0
- package/dist/types/modules/word/constants.d.ts +179 -0
- package/dist/types/modules/word/content-types.d.ts +27 -0
- package/dist/types/modules/word/digital-signatures.d.ts +87 -0
- package/dist/types/modules/word/document.d.ts +728 -0
- package/dist/types/modules/word/docx-packager.d.ts +14 -0
- package/dist/types/modules/word/docx-reader.d.ts +11 -0
- package/dist/types/modules/word/encryption.d.ts +102 -0
- package/dist/types/modules/word/errors.d.ts +49 -0
- package/dist/types/modules/word/font-obfuscation.d.ts +31 -0
- package/dist/types/modules/word/html-renderer.d.ts +38 -0
- package/dist/types/modules/word/index.base.d.ts +19 -0
- package/dist/types/modules/word/index.browser.d.ts +4 -0
- package/dist/types/modules/word/index.d.ts +4 -0
- package/dist/types/modules/word/internal-utils.d.ts +23 -0
- package/dist/types/modules/word/relationships.d.ts +31 -0
- package/dist/types/modules/word/types.d.ts +2325 -0
- package/dist/types/modules/word/units.d.ts +49 -0
- package/dist/types/modules/word/writers/chart-writer.d.ts +10 -0
- package/dist/types/modules/word/writers/checkbox-writer.d.ts +9 -0
- package/dist/types/modules/word/writers/comment-writer.d.ts +15 -0
- package/dist/types/modules/word/writers/document-writer.d.ts +16 -0
- package/dist/types/modules/word/writers/footnote-writer.d.ts +11 -0
- package/dist/types/modules/word/writers/header-footer-writer.d.ts +13 -0
- package/dist/types/modules/word/writers/image-writer.d.ts +10 -0
- package/dist/types/modules/word/writers/math-writer.d.ts +9 -0
- package/dist/types/modules/word/writers/numbering-writer.d.ts +10 -0
- package/dist/types/modules/word/writers/paragraph-writer.d.ts +13 -0
- package/dist/types/modules/word/writers/parts-writer.d.ts +26 -0
- package/dist/types/modules/word/writers/run-writer.d.ts +15 -0
- package/dist/types/modules/word/writers/section-writer.d.ts +10 -0
- package/dist/types/modules/word/writers/styles-writer.d.ts +10 -0
- package/dist/types/modules/word/writers/table-writer.d.ts +10 -0
- package/dist/types/modules/word/writers/textbox-writer.d.ts +9 -0
- package/dist/types/modules/word/writers/toc-writer.d.ts +9 -0
- package/dist/types/modules/xml/encode.d.ts +56 -7
- package/package.json +29 -11
- package/dist/browser/modules/excel/utils/ooxml-validator.d.ts +0 -48
- package/dist/browser/modules/excel/utils/ooxml-validator.js +0 -493
- package/dist/browser/modules/excel/utils/passthrough-manager.d.ts +0 -77
- package/dist/browser/modules/excel/utils/passthrough-manager.js +0 -129
- package/dist/cjs/modules/excel/utils/ooxml-validator.js +0 -499
- package/dist/cjs/modules/excel/utils/passthrough-manager.js +0 -133
- package/dist/esm/modules/excel/utils/ooxml-validator.js +0 -493
- package/dist/esm/modules/excel/utils/passthrough-manager.js +0 -129
- package/dist/types/modules/excel/utils/ooxml-validator.d.ts +0 -48
- package/dist/types/modules/excel/utils/passthrough-manager.d.ts +0 -77
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PassthroughManager - Manages passthrough files for round-trip preservation
|
|
3
|
-
*
|
|
4
|
-
* This module handles files that are not fully parsed by the library but need to be
|
|
5
|
-
* preserved during read/write cycles (e.g., charts, sparklines, slicers).
|
|
6
|
-
*/
|
|
7
|
-
// Pre-compiled regex patterns for content type detection (performance optimization)
|
|
8
|
-
const chartXmlRegex = /^xl\/charts\/chart\d+\.xml$/;
|
|
9
|
-
const chartStyleXmlRegex = /^xl\/charts\/style\d+\.xml$/;
|
|
10
|
-
const chartColorsXmlRegex = /^xl\/charts\/colors\d+\.xml$/;
|
|
11
|
-
/**
|
|
12
|
-
* Content type definitions for passthrough files
|
|
13
|
-
*/
|
|
14
|
-
const PASSTHROUGH_CONTENT_TYPES = new Map([
|
|
15
|
-
[chartXmlRegex, "application/vnd.openxmlformats-officedocument.drawingml.chart+xml"],
|
|
16
|
-
[chartStyleXmlRegex, "application/vnd.ms-office.chartstyle+xml"],
|
|
17
|
-
[chartColorsXmlRegex, "application/vnd.ms-office.chartcolorstyle+xml"]
|
|
18
|
-
]);
|
|
19
|
-
/**
|
|
20
|
-
* Passthrough path prefixes that should be preserved
|
|
21
|
-
*/
|
|
22
|
-
const PASSTHROUGH_PREFIXES = ["xl/charts/"];
|
|
23
|
-
/**
|
|
24
|
-
* PassthroughManager handles storage and retrieval of passthrough files
|
|
25
|
-
* that need to be preserved during Excel read/write cycles.
|
|
26
|
-
*/
|
|
27
|
-
export class PassthroughManager {
|
|
28
|
-
constructor() {
|
|
29
|
-
this.files = new Map();
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Check if a path should be treated as passthrough
|
|
33
|
-
*/
|
|
34
|
-
static isPassthroughPath(path) {
|
|
35
|
-
return PASSTHROUGH_PREFIXES.some(prefix => path.startsWith(prefix));
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Get the content type for a passthrough file path
|
|
39
|
-
* @returns Content type string or undefined if unknown
|
|
40
|
-
*/
|
|
41
|
-
static getContentType(path) {
|
|
42
|
-
// Chart relationships are handled by Default extension="rels"
|
|
43
|
-
if (path.startsWith("xl/charts/_rels/")) {
|
|
44
|
-
return undefined;
|
|
45
|
-
}
|
|
46
|
-
for (const [regex, contentType] of PASSTHROUGH_CONTENT_TYPES) {
|
|
47
|
-
if (regex.test(path)) {
|
|
48
|
-
return contentType;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return undefined;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Add a file to passthrough storage
|
|
55
|
-
*/
|
|
56
|
-
add(path, data) {
|
|
57
|
-
this.files.set(path, data);
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Get a file from passthrough storage
|
|
61
|
-
*/
|
|
62
|
-
get(path) {
|
|
63
|
-
return this.files.get(path);
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Check if a file exists in passthrough storage
|
|
67
|
-
*/
|
|
68
|
-
has(path) {
|
|
69
|
-
return this.files.has(path);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Get all stored paths
|
|
73
|
-
*/
|
|
74
|
-
getPaths() {
|
|
75
|
-
return [...this.files.keys()];
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Get all files as a record (for serialization)
|
|
79
|
-
*/
|
|
80
|
-
toRecord() {
|
|
81
|
-
const record = {};
|
|
82
|
-
for (const [path, data] of this.files) {
|
|
83
|
-
record[path] = data;
|
|
84
|
-
}
|
|
85
|
-
return record;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Load files from a record (for deserialization)
|
|
89
|
-
*/
|
|
90
|
-
fromRecord(record) {
|
|
91
|
-
this.files.clear();
|
|
92
|
-
for (const [path, data] of Object.entries(record)) {
|
|
93
|
-
this.files.set(path, data);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Get content types for all stored files that have known types
|
|
98
|
-
*/
|
|
99
|
-
getContentTypes() {
|
|
100
|
-
const contentTypes = [];
|
|
101
|
-
for (const path of this.files.keys()) {
|
|
102
|
-
const contentType = PassthroughManager.getContentType(path);
|
|
103
|
-
if (contentType) {
|
|
104
|
-
contentTypes.push({ partName: path, contentType });
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
return contentTypes;
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Write all passthrough files to a ZIP writer
|
|
111
|
-
*/
|
|
112
|
-
writeToZip(zip) {
|
|
113
|
-
for (const [path, data] of this.files) {
|
|
114
|
-
zip.append(data, { name: path });
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Clear all stored files
|
|
119
|
-
*/
|
|
120
|
-
clear() {
|
|
121
|
-
this.files.clear();
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Get the number of stored files
|
|
125
|
-
*/
|
|
126
|
-
get size() {
|
|
127
|
-
return this.files.size;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
@@ -1,499 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.validateXlsxBuffer = validateXlsxBuffer;
|
|
7
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
-
const extract_1 = require("../../archive/unzip/extract.js");
|
|
9
|
-
const sax_1 = require("../../xml/sax.js");
|
|
10
|
-
function pushProblem(problems, problem, maxProblems) {
|
|
11
|
-
if (maxProblems !== undefined && problems.length >= maxProblems) {
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
problems.push(problem);
|
|
15
|
-
}
|
|
16
|
-
function stripLeadingSlash(p) {
|
|
17
|
-
return p.startsWith("/") ? p.slice(1) : p;
|
|
18
|
-
}
|
|
19
|
-
function isXmlLike(pathName) {
|
|
20
|
-
return pathName.endsWith(".xml") || pathName.endsWith(".rels") || pathName.endsWith(".vml");
|
|
21
|
-
}
|
|
22
|
-
function getRelsSourceDir(relsPath) {
|
|
23
|
-
// In OPC, relationship targets are resolved relative to the SOURCE part directory,
|
|
24
|
-
// not the .rels part directory.
|
|
25
|
-
//
|
|
26
|
-
// Examples:
|
|
27
|
-
// - _rels/.rels -> base "" (package root)
|
|
28
|
-
// - xl/_rels/workbook.xml.rels -> base "xl"
|
|
29
|
-
// - xl/worksheets/_rels/sheet1.xml.rels -> base "xl/worksheets"
|
|
30
|
-
if (relsPath === "_rels/.rels") {
|
|
31
|
-
return "";
|
|
32
|
-
}
|
|
33
|
-
const relsMarker = "/_rels/";
|
|
34
|
-
const idx = relsPath.indexOf(relsMarker);
|
|
35
|
-
if (idx === -1) {
|
|
36
|
-
return relsPath.includes("/") ? relsPath.slice(0, relsPath.lastIndexOf("/")) : "";
|
|
37
|
-
}
|
|
38
|
-
return relsPath.slice(0, idx);
|
|
39
|
-
}
|
|
40
|
-
function resolveRelTarget(relsPath, target) {
|
|
41
|
-
const baseDir = getRelsSourceDir(relsPath);
|
|
42
|
-
const resolved = node_path_1.default.posix.normalize(node_path_1.default.posix.join(baseDir, target));
|
|
43
|
-
return resolved.replace(/^\//, "");
|
|
44
|
-
}
|
|
45
|
-
function isSafeResolvedPath(resolved) {
|
|
46
|
-
// Prevent path traversal out of package root.
|
|
47
|
-
// `normalize()` can produce paths starting with "../".
|
|
48
|
-
return !(resolved === ".." || resolved.startsWith("../") || resolved.includes("/../"));
|
|
49
|
-
}
|
|
50
|
-
async function assertXmlWellFormed(xmlText) {
|
|
51
|
-
// parseSax throws on malformed XML.
|
|
52
|
-
for await (const _events of (0, sax_1.parseSax)([xmlText])) {
|
|
53
|
-
// no-op
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
function parseContentTypes(xml) {
|
|
57
|
-
const defaults = [];
|
|
58
|
-
const overrides = [];
|
|
59
|
-
let hasTypesRoot = false;
|
|
60
|
-
const parser = new sax_1.SaxParser({ position: false });
|
|
61
|
-
parser.on("error", () => { }); // swallow — parseOk will reflect success
|
|
62
|
-
parser.on("opentag", tag => {
|
|
63
|
-
const { name, attributes: a } = tag;
|
|
64
|
-
if (name === "Types" || name.endsWith(":Types")) {
|
|
65
|
-
hasTypesRoot = true;
|
|
66
|
-
}
|
|
67
|
-
else if (name === "Default" || name.endsWith(":Default")) {
|
|
68
|
-
if (a.Extension && a.ContentType) {
|
|
69
|
-
defaults.push({ extension: a.Extension, contentType: a.ContentType });
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
else if (name === "Override" || name.endsWith(":Override")) {
|
|
73
|
-
if (a.PartName && a.ContentType) {
|
|
74
|
-
overrides.push({ partName: a.PartName, contentType: a.ContentType });
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
parser.write(xml);
|
|
79
|
-
parser.close();
|
|
80
|
-
const parseOk = hasTypesRoot && (defaults.length > 0 || overrides.length > 0);
|
|
81
|
-
return { defaults, overrides, parseOk };
|
|
82
|
-
}
|
|
83
|
-
function getExtension(p) {
|
|
84
|
-
const base = node_path_1.default.posix.basename(p);
|
|
85
|
-
const idx = base.lastIndexOf(".");
|
|
86
|
-
return idx === -1 ? "" : base.slice(idx + 1);
|
|
87
|
-
}
|
|
88
|
-
function isPackagePart(pathName) {
|
|
89
|
-
// Exclude directories and the [Content_Types].xml pseudo-root.
|
|
90
|
-
return pathName !== "" && pathName !== "[Content_Types].xml";
|
|
91
|
-
}
|
|
92
|
-
function parseRelationships(xml) {
|
|
93
|
-
const rels = [];
|
|
94
|
-
let hasRoot = false;
|
|
95
|
-
const parser = new sax_1.SaxParser({ position: false });
|
|
96
|
-
parser.on("error", () => { }); // swallow — parseOk will reflect success
|
|
97
|
-
parser.on("opentag", tag => {
|
|
98
|
-
const { name, attributes: a } = tag;
|
|
99
|
-
if (name === "Relationships" || name.endsWith(":Relationships")) {
|
|
100
|
-
hasRoot = true;
|
|
101
|
-
}
|
|
102
|
-
else if (name === "Relationship" || name.endsWith(":Relationship")) {
|
|
103
|
-
if (a.Id && a.Type && a.Target !== undefined) {
|
|
104
|
-
rels.push({ id: a.Id, type: a.Type, target: a.Target, targetMode: a.TargetMode });
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
parser.write(xml);
|
|
109
|
-
parser.close();
|
|
110
|
-
const parseOk = hasRoot;
|
|
111
|
-
return { rels, parseOk };
|
|
112
|
-
}
|
|
113
|
-
async function validateXlsxBuffer(xlsxBuffer, options = {}) {
|
|
114
|
-
const { checkXmlWellFormed = true, checkRelationshipTargets = true, checkContentTypesOverrides = true, checkWorksheetControlWiring = true, maxProblems } = options;
|
|
115
|
-
const problems = [];
|
|
116
|
-
const entries = await (0, extract_1.extractAll)(xlsxBuffer);
|
|
117
|
-
const has = (p) => entries.has(p);
|
|
118
|
-
const mustExist = [
|
|
119
|
-
"[Content_Types].xml",
|
|
120
|
-
"_rels/.rels",
|
|
121
|
-
"xl/workbook.xml",
|
|
122
|
-
"xl/_rels/workbook.xml.rels"
|
|
123
|
-
];
|
|
124
|
-
for (const p of mustExist) {
|
|
125
|
-
if (!has(p)) {
|
|
126
|
-
pushProblem(problems, { kind: "missing-part", file: p, message: `Missing required part: ${p}` }, maxProblems);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
// XML well-formedness for all XML-like parts.
|
|
130
|
-
if (checkXmlWellFormed) {
|
|
131
|
-
for (const [p, entry] of entries) {
|
|
132
|
-
if (maxProblems !== undefined && problems.length >= maxProblems) {
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
if (entry.type === "directory" || !isXmlLike(p)) {
|
|
136
|
-
continue;
|
|
137
|
-
}
|
|
138
|
-
const xml = new TextDecoder().decode(entry.data);
|
|
139
|
-
try {
|
|
140
|
-
await assertXmlWellFormed(xml);
|
|
141
|
-
}
|
|
142
|
-
catch (err) {
|
|
143
|
-
pushProblem(problems, {
|
|
144
|
-
kind: "xml-malformed",
|
|
145
|
-
file: p,
|
|
146
|
-
message: `Malformed XML: ${err?.message || String(err)}`
|
|
147
|
-
}, maxProblems);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
// Content types overrides must point to existing parts.
|
|
152
|
-
if (checkContentTypesOverrides && has("[Content_Types].xml")) {
|
|
153
|
-
const ctXml = new TextDecoder().decode(entries.get("[Content_Types].xml").data);
|
|
154
|
-
const { defaults, overrides, parseOk } = parseContentTypes(ctXml);
|
|
155
|
-
if (!parseOk) {
|
|
156
|
-
pushProblem(problems, {
|
|
157
|
-
kind: "content-types-malformed",
|
|
158
|
-
file: "[Content_Types].xml",
|
|
159
|
-
message: "Content types XML missing expected root/entries"
|
|
160
|
-
}, maxProblems);
|
|
161
|
-
}
|
|
162
|
-
const defaultByExt = new Map(defaults.map(d => [d.extension.toLowerCase(), d.contentType]));
|
|
163
|
-
const overrideByPart = new Map();
|
|
164
|
-
for (const ov of overrides) {
|
|
165
|
-
const key = stripLeadingSlash(ov.partName);
|
|
166
|
-
if (overrideByPart.has(key)) {
|
|
167
|
-
pushProblem(problems, {
|
|
168
|
-
kind: "content-types-duplicate-override",
|
|
169
|
-
file: "[Content_Types].xml",
|
|
170
|
-
message: `Duplicate Override PartName: ${ov.partName}`
|
|
171
|
-
}, maxProblems);
|
|
172
|
-
}
|
|
173
|
-
overrideByPart.set(key, ov.contentType);
|
|
174
|
-
}
|
|
175
|
-
// RFC: .rels and .xml defaults are expected in valid packages.
|
|
176
|
-
const relsDefault = defaultByExt.get("rels");
|
|
177
|
-
if (relsDefault !== "application/vnd.openxmlformats-package.relationships+xml") {
|
|
178
|
-
pushProblem(problems, {
|
|
179
|
-
kind: "content-types-missing-default",
|
|
180
|
-
file: "[Content_Types].xml",
|
|
181
|
-
message: "Missing/incorrect Default for .rels (expected application/vnd.openxmlformats-package.relationships+xml)"
|
|
182
|
-
}, maxProblems);
|
|
183
|
-
}
|
|
184
|
-
const xmlDefault = defaultByExt.get("xml");
|
|
185
|
-
if (xmlDefault !== "application/xml") {
|
|
186
|
-
pushProblem(problems, {
|
|
187
|
-
kind: "content-types-missing-default",
|
|
188
|
-
file: "[Content_Types].xml",
|
|
189
|
-
message: "Missing/incorrect Default for .xml (expected application/xml)"
|
|
190
|
-
}, maxProblems);
|
|
191
|
-
}
|
|
192
|
-
for (const ov of overrides) {
|
|
193
|
-
if (maxProblems !== undefined && problems.length >= maxProblems) {
|
|
194
|
-
break;
|
|
195
|
-
}
|
|
196
|
-
const zipPath = stripLeadingSlash(ov.partName);
|
|
197
|
-
if (!has(zipPath)) {
|
|
198
|
-
pushProblem(problems, {
|
|
199
|
-
kind: "content-types-missing",
|
|
200
|
-
file: "[Content_Types].xml",
|
|
201
|
-
message: `Override PartName points to missing file: ${ov.partName}`
|
|
202
|
-
}, maxProblems);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
// Strong check: every part in the zip should have a content type via Default or Override.
|
|
206
|
-
for (const [p, entry] of entries) {
|
|
207
|
-
if (maxProblems !== undefined && problems.length >= maxProblems) {
|
|
208
|
-
break;
|
|
209
|
-
}
|
|
210
|
-
if (entry.type === "directory" || !isPackagePart(p)) {
|
|
211
|
-
continue;
|
|
212
|
-
}
|
|
213
|
-
const overrideType = overrideByPart.get(p);
|
|
214
|
-
if (overrideType) {
|
|
215
|
-
continue;
|
|
216
|
-
}
|
|
217
|
-
const ext = getExtension(p).toLowerCase();
|
|
218
|
-
if (!ext) {
|
|
219
|
-
pushProblem(problems, {
|
|
220
|
-
kind: "content-types-missing-for-part",
|
|
221
|
-
file: "[Content_Types].xml",
|
|
222
|
-
message: `No content type for part without extension: ${p}`
|
|
223
|
-
}, maxProblems);
|
|
224
|
-
continue;
|
|
225
|
-
}
|
|
226
|
-
if (!defaultByExt.has(ext)) {
|
|
227
|
-
pushProblem(problems, {
|
|
228
|
-
kind: "content-types-missing-for-part",
|
|
229
|
-
file: "[Content_Types].xml",
|
|
230
|
-
message: `No Default/Override content type for part: ${p} (extension .${ext})`
|
|
231
|
-
}, maxProblems);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
// Root relationships must point to the workbook (OPC officeDocument).
|
|
236
|
-
if (has("_rels/.rels")) {
|
|
237
|
-
const rootRelsXml = new TextDecoder().decode(entries.get("_rels/.rels").data);
|
|
238
|
-
const { rels } = parseRelationships(rootRelsXml);
|
|
239
|
-
const hasOfficeDocument = rels.some(r => r.type.includes("/relationships/officeDocument") && r.target === "xl/workbook.xml");
|
|
240
|
-
if (!hasOfficeDocument) {
|
|
241
|
-
pushProblem(problems, {
|
|
242
|
-
kind: "root-rels-missing-officeDocument",
|
|
243
|
-
file: "_rels/.rels",
|
|
244
|
-
message: "Missing officeDocument relationship to xl/workbook.xml"
|
|
245
|
-
}, maxProblems);
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
// Relationships: validate target existence and basic ID uniqueness.
|
|
249
|
-
if (checkRelationshipTargets) {
|
|
250
|
-
for (const [p, entry] of entries) {
|
|
251
|
-
if (maxProblems !== undefined && problems.length >= maxProblems) {
|
|
252
|
-
break;
|
|
253
|
-
}
|
|
254
|
-
if (entry.type === "directory" || !p.endsWith(".rels")) {
|
|
255
|
-
continue;
|
|
256
|
-
}
|
|
257
|
-
const relsXml = new TextDecoder().decode(entry.data);
|
|
258
|
-
const { rels, parseOk } = parseRelationships(relsXml);
|
|
259
|
-
if (!parseOk) {
|
|
260
|
-
pushProblem(problems, {
|
|
261
|
-
kind: "rels-malformed",
|
|
262
|
-
file: p,
|
|
263
|
-
message: "Relationships XML missing expected root/entries"
|
|
264
|
-
}, maxProblems);
|
|
265
|
-
}
|
|
266
|
-
const ids = new Set();
|
|
267
|
-
for (const rel of rels) {
|
|
268
|
-
if (maxProblems !== undefined && problems.length >= maxProblems) {
|
|
269
|
-
break;
|
|
270
|
-
}
|
|
271
|
-
if (ids.has(rel.id)) {
|
|
272
|
-
pushProblem(problems, {
|
|
273
|
-
kind: "rels-duplicate-id",
|
|
274
|
-
file: p,
|
|
275
|
-
message: `Duplicate relationship Id: ${rel.id}`
|
|
276
|
-
}, maxProblems);
|
|
277
|
-
}
|
|
278
|
-
ids.add(rel.id);
|
|
279
|
-
if (rel.targetMode === "External") {
|
|
280
|
-
continue;
|
|
281
|
-
}
|
|
282
|
-
if (!rel.target) {
|
|
283
|
-
pushProblem(problems, {
|
|
284
|
-
kind: "rels-empty-target",
|
|
285
|
-
file: p,
|
|
286
|
-
message: `Relationship ${rel.id} (${rel.type}) has empty Target`
|
|
287
|
-
}, maxProblems);
|
|
288
|
-
continue;
|
|
289
|
-
}
|
|
290
|
-
const resolvedTarget = resolveRelTarget(p, rel.target);
|
|
291
|
-
if (!isSafeResolvedPath(resolvedTarget)) {
|
|
292
|
-
pushProblem(problems, {
|
|
293
|
-
kind: "rels-invalid-target-path",
|
|
294
|
-
file: p,
|
|
295
|
-
message: `Rel ${rel.id} (${rel.type}) target escapes package root: ${rel.target} -> ${resolvedTarget}`
|
|
296
|
-
}, maxProblems);
|
|
297
|
-
continue;
|
|
298
|
-
}
|
|
299
|
-
if (!has(resolvedTarget)) {
|
|
300
|
-
pushProblem(problems, {
|
|
301
|
-
kind: "rels-missing-target",
|
|
302
|
-
file: p,
|
|
303
|
-
message: `Rel ${rel.id} (${rel.type}) target missing: ${rel.target} -> ${resolvedTarget}`
|
|
304
|
-
}, maxProblems);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
// Optional: ensure the source part exists for non-root rels.
|
|
308
|
-
if (p !== "_rels/.rels") {
|
|
309
|
-
// Convert: xl/_rels/workbook.xml.rels -> xl/workbook.xml
|
|
310
|
-
// Convert: xl/worksheets/_rels/sheet1.xml.rels -> xl/worksheets/sheet1.xml
|
|
311
|
-
const srcDir = getRelsSourceDir(p);
|
|
312
|
-
const relsBaseName = node_path_1.default.posix.basename(p);
|
|
313
|
-
const sourceName = relsBaseName.replace(/\.rels$/, "");
|
|
314
|
-
const sourcePath = srcDir ? `${srcDir}/${sourceName}` : sourceName;
|
|
315
|
-
if (!has(sourcePath)) {
|
|
316
|
-
pushProblem(problems, {
|
|
317
|
-
kind: "rels-source-missing",
|
|
318
|
-
file: p,
|
|
319
|
-
message: `Relationships part has no corresponding source part: ${sourcePath}`
|
|
320
|
-
}, maxProblems);
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
// Workbook -> worksheets wiring.
|
|
326
|
-
if (has("xl/workbook.xml") && has("xl/_rels/workbook.xml.rels")) {
|
|
327
|
-
const workbookXml = new TextDecoder().decode(entries.get("xl/workbook.xml").data);
|
|
328
|
-
const workbookRelsXml = new TextDecoder().decode(entries.get("xl/_rels/workbook.xml.rels").data);
|
|
329
|
-
const { rels: wbRels } = parseRelationships(workbookRelsXml);
|
|
330
|
-
const wbById = new Map(wbRels.map(r => [r.id, r]));
|
|
331
|
-
// Uniqueness checks: sheetId and r:id should not be duplicated.
|
|
332
|
-
const sheetIdRe = /<sheet\b[^>]*\bsheetId="(\d+)"[^>]*\/>/g;
|
|
333
|
-
const seenSheetIds = new Set();
|
|
334
|
-
for (let match = sheetIdRe.exec(workbookXml); match; match = sheetIdRe.exec(workbookXml)) {
|
|
335
|
-
const id = match[1];
|
|
336
|
-
if (seenSheetIds.has(id)) {
|
|
337
|
-
pushProblem(problems, {
|
|
338
|
-
kind: "workbook-duplicate-sheetId",
|
|
339
|
-
file: "xl/workbook.xml",
|
|
340
|
-
message: `Duplicate sheetId in workbook: ${id}`
|
|
341
|
-
}, maxProblems);
|
|
342
|
-
}
|
|
343
|
-
seenSheetIds.add(id);
|
|
344
|
-
}
|
|
345
|
-
const sheetRidSeen = new Set();
|
|
346
|
-
const sheetRidRe = /<sheet\b[^>]*\br:id="(rId\d+)"[^>]*\/>/g;
|
|
347
|
-
for (let match = sheetRidRe.exec(workbookXml); match; match = sheetRidRe.exec(workbookXml)) {
|
|
348
|
-
if (maxProblems !== undefined && problems.length >= maxProblems) {
|
|
349
|
-
break;
|
|
350
|
-
}
|
|
351
|
-
const rid = match[1];
|
|
352
|
-
if (sheetRidSeen.has(rid)) {
|
|
353
|
-
pushProblem(problems, {
|
|
354
|
-
kind: "workbook-duplicate-sheet-rid",
|
|
355
|
-
file: "xl/workbook.xml",
|
|
356
|
-
message: `Duplicate sheet r:id in workbook: ${rid}`
|
|
357
|
-
}, maxProblems);
|
|
358
|
-
}
|
|
359
|
-
sheetRidSeen.add(rid);
|
|
360
|
-
const rel = wbById.get(rid);
|
|
361
|
-
if (!rel) {
|
|
362
|
-
pushProblem(problems, {
|
|
363
|
-
kind: "workbook-sheet-missing-rel",
|
|
364
|
-
file: "xl/workbook.xml",
|
|
365
|
-
message: `Workbook <sheet> references missing relationship: ${rid} (in xl/_rels/workbook.xml.rels)`
|
|
366
|
-
}, maxProblems);
|
|
367
|
-
continue;
|
|
368
|
-
}
|
|
369
|
-
if (!rel.type.includes("/relationships/worksheet")) {
|
|
370
|
-
pushProblem(problems, {
|
|
371
|
-
kind: "workbook-sheet-wrong-rel-type",
|
|
372
|
-
file: "xl/workbook.xml",
|
|
373
|
-
message: `Workbook <sheet> ${rid} relationship is not worksheet: ${rel.type}`
|
|
374
|
-
}, maxProblems);
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
// Worksheet <controls>/<legacyDrawing> wiring.
|
|
379
|
-
if (checkWorksheetControlWiring) {
|
|
380
|
-
for (const [p, entry] of entries) {
|
|
381
|
-
if (maxProblems !== undefined && problems.length >= maxProblems) {
|
|
382
|
-
break;
|
|
383
|
-
}
|
|
384
|
-
if (entry.type === "directory" ||
|
|
385
|
-
!p.startsWith("xl/worksheets/sheet") ||
|
|
386
|
-
!p.endsWith(".xml")) {
|
|
387
|
-
continue;
|
|
388
|
-
}
|
|
389
|
-
const sheetXml = new TextDecoder().decode(entry.data);
|
|
390
|
-
const relsPath = `xl/worksheets/_rels/${node_path_1.default.posix.basename(p)}.rels`;
|
|
391
|
-
// Excel is sensitive to worksheet child element ordering. In particular,
|
|
392
|
-
// legacyDrawing must come before controls when both are present.
|
|
393
|
-
const legacyDrawingIdx = sheetXml.indexOf("<legacyDrawing");
|
|
394
|
-
const controlsIdx = sheetXml.indexOf("<controls");
|
|
395
|
-
if (legacyDrawingIdx !== -1 && controlsIdx !== -1 && legacyDrawingIdx > controlsIdx) {
|
|
396
|
-
pushProblem(problems, {
|
|
397
|
-
kind: "sheet-legacyDrawing-after-controls",
|
|
398
|
-
file: p,
|
|
399
|
-
message: "Worksheet has <legacyDrawing> after <controls>; Excel may repair or reject this sheet"
|
|
400
|
-
}, maxProblems);
|
|
401
|
-
}
|
|
402
|
-
// Match <control ...> elements (not necessarily self-closing).
|
|
403
|
-
const controlRidRe = /<control\b[^>]*\br:id="(rId\d+)"[^>]*>/g;
|
|
404
|
-
const controlRids = [];
|
|
405
|
-
for (let match = controlRidRe.exec(sheetXml); match; match = controlRidRe.exec(sheetXml)) {
|
|
406
|
-
controlRids.push(match[1]);
|
|
407
|
-
}
|
|
408
|
-
// Excel Online / strict Excel builds may reject or "repair" legacy form controls
|
|
409
|
-
// if the sheet doesn't also have a DrawingML <drawing> part.
|
|
410
|
-
if (controlRids.length > 0 && sheetXml.indexOf("<drawing") === -1) {
|
|
411
|
-
pushProblem(problems, {
|
|
412
|
-
kind: "sheet-controls-missing-drawing",
|
|
413
|
-
file: p,
|
|
414
|
-
message: "Worksheet has legacy <controls> but no <drawing>; Excel may repair/reject legacy form controls"
|
|
415
|
-
}, maxProblems);
|
|
416
|
-
}
|
|
417
|
-
const legacyDrawingRidRe = /<legacyDrawing\b[^>]*\br:id="(rId\d+)"[^>]*\/>/g;
|
|
418
|
-
const legacyDrawingRids = [];
|
|
419
|
-
for (let match = legacyDrawingRidRe.exec(sheetXml); match; match = legacyDrawingRidRe.exec(sheetXml)) {
|
|
420
|
-
legacyDrawingRids.push(match[1]);
|
|
421
|
-
}
|
|
422
|
-
if ((controlRids.length > 0 || legacyDrawingRids.length > 0) && !has(relsPath)) {
|
|
423
|
-
pushProblem(problems, {
|
|
424
|
-
kind: "sheet-missing-rels",
|
|
425
|
-
file: p,
|
|
426
|
-
message: `Worksheet has controls/legacyDrawing but missing rels part: ${relsPath}`
|
|
427
|
-
}, maxProblems);
|
|
428
|
-
continue;
|
|
429
|
-
}
|
|
430
|
-
if (!has(relsPath)) {
|
|
431
|
-
continue;
|
|
432
|
-
}
|
|
433
|
-
const sheetRelsXml = new TextDecoder().decode(entries.get(relsPath).data);
|
|
434
|
-
const { rels: sheetRels } = parseRelationships(sheetRelsXml);
|
|
435
|
-
const byId = new Map(sheetRels.map(r => [r.id, r]));
|
|
436
|
-
const assertRidType = (rid, expectedTypeIncludes, kindMissing, kindWrong, nodeLabel) => {
|
|
437
|
-
const rel = byId.get(rid);
|
|
438
|
-
if (!rel) {
|
|
439
|
-
pushProblem(problems, {
|
|
440
|
-
kind: kindMissing,
|
|
441
|
-
file: p,
|
|
442
|
-
message: `Sheet ${nodeLabel} references missing relationship: ${rid} (in ${relsPath})`
|
|
443
|
-
}, maxProblems);
|
|
444
|
-
return;
|
|
445
|
-
}
|
|
446
|
-
if (!rel.type.includes(expectedTypeIncludes)) {
|
|
447
|
-
pushProblem(problems, {
|
|
448
|
-
kind: kindWrong,
|
|
449
|
-
file: p,
|
|
450
|
-
message: `Sheet ${nodeLabel} ${rid} relationship is not ${expectedTypeIncludes}: ${rel.type}`
|
|
451
|
-
}, maxProblems);
|
|
452
|
-
}
|
|
453
|
-
};
|
|
454
|
-
for (const rid of controlRids) {
|
|
455
|
-
if (maxProblems !== undefined && problems.length >= maxProblems) {
|
|
456
|
-
break;
|
|
457
|
-
}
|
|
458
|
-
assertRidType(rid, "/relationships/ctrlProp", "sheet-control-missing-rel", "sheet-control-wrong-rel-type", "<control>");
|
|
459
|
-
}
|
|
460
|
-
for (const rid of legacyDrawingRids) {
|
|
461
|
-
if (maxProblems !== undefined && problems.length >= maxProblems) {
|
|
462
|
-
break;
|
|
463
|
-
}
|
|
464
|
-
assertRidType(rid, "/relationships/vmlDrawing", "sheet-legacyDrawing-missing-rel", "sheet-legacyDrawing-wrong-rel-type", "<legacyDrawing>");
|
|
465
|
-
}
|
|
466
|
-
// Common worksheet nodes that are wired via r:id
|
|
467
|
-
// - <drawing r:id="..."/> -> drawing
|
|
468
|
-
// - <comments r:id="..."/> -> comments
|
|
469
|
-
// - <tableParts><tablePart r:id="..."/></tableParts> -> table
|
|
470
|
-
// - <hyperlink r:id="..."/> -> hyperlink
|
|
471
|
-
const drawingRidRe = /<drawing\b[^>]*\br:id="(rId\d+)"[^>]*\/>/g;
|
|
472
|
-
for (let match = drawingRidRe.exec(sheetXml); match; match = drawingRidRe.exec(sheetXml)) {
|
|
473
|
-
assertRidType(match[1], "/relationships/drawing", "sheet-drawing-missing-rel", "sheet-drawing-wrong-rel-type", "<drawing>");
|
|
474
|
-
}
|
|
475
|
-
const commentsRidRe = /<comments\b[^>]*\br:id="(rId\d+)"[^>]*\/>/g;
|
|
476
|
-
for (let match = commentsRidRe.exec(sheetXml); match; match = commentsRidRe.exec(sheetXml)) {
|
|
477
|
-
assertRidType(match[1], "/relationships/comments", "sheet-comments-missing-rel", "sheet-comments-wrong-rel-type", "<comments>");
|
|
478
|
-
}
|
|
479
|
-
const tablePartRidRe = /<tablePart\b[^>]*\br:id="(rId\d+)"[^>]*\/>/g;
|
|
480
|
-
for (let match = tablePartRidRe.exec(sheetXml); match; match = tablePartRidRe.exec(sheetXml)) {
|
|
481
|
-
assertRidType(match[1], "/relationships/table", "sheet-tablePart-missing-rel", "sheet-tablePart-wrong-rel-type", "<tablePart>");
|
|
482
|
-
}
|
|
483
|
-
const hyperlinkRidRe = /<hyperlink\b[^>]*\br:id="(rId\d+)"[^>]*\/>/g;
|
|
484
|
-
for (let match = hyperlinkRidRe.exec(sheetXml); match; match = hyperlinkRidRe.exec(sheetXml)) {
|
|
485
|
-
assertRidType(match[1], "/relationships/hyperlink", "sheet-hyperlink-missing-rel", "sheet-hyperlink-wrong-rel-type", "<hyperlink>");
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
const stats = {
|
|
490
|
-
entryCount: entries.size,
|
|
491
|
-
xmlLikeCount: [...entries.values()].filter((f) => f.type !== "directory" && isXmlLike(f.path)).length,
|
|
492
|
-
relsCount: [...entries.values()].filter((f) => f.type !== "directory" && f.path.endsWith(".rels")).length
|
|
493
|
-
};
|
|
494
|
-
return {
|
|
495
|
-
ok: problems.length === 0,
|
|
496
|
-
problems,
|
|
497
|
-
stats
|
|
498
|
-
};
|
|
499
|
-
}
|