@cj-tech-master/excelts 9.5.4 → 9.5.5
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/modules/archive/compression/streaming-compress.browser.js +29 -0
- package/dist/browser/modules/archive/compression/streaming-compress.js +9 -0
- package/dist/browser/modules/archive/compression/worker-pool/pool.browser.js +26 -1
- package/dist/browser/modules/archive/fs/archive-file.d.ts +8 -5
- package/dist/browser/modules/archive/fs/archive-file.js +78 -16
- package/dist/browser/modules/archive/unzip/stream.browser.js +43 -2
- package/dist/browser/modules/excel/chart/chart-ex-builder.js +7 -2
- package/dist/browser/modules/excel/chart/chart-ex-renderer.js +4 -9
- package/dist/browser/modules/excel/chart/chart-ex-types.d.ts +0 -12
- package/dist/browser/modules/excel/chart/chart.d.ts +1 -5
- package/dist/browser/modules/excel/chart/chart.js +1 -7
- package/dist/browser/modules/excel/chart/types.d.ts +0 -6
- package/dist/browser/modules/excel/stream/workbook-reader.browser.js +25 -1
- package/dist/browser/modules/excel/stream/workbook-reader.js +9 -0
- package/dist/browser/modules/excel/stream/workbook-writer.browser.d.ts +40 -0
- package/dist/browser/modules/excel/stream/workbook-writer.browser.js +228 -13
- package/dist/browser/modules/excel/utils/string-buf.d.ts +5 -26
- package/dist/browser/modules/excel/utils/string-buf.js +4 -81
- package/dist/browser/modules/excel/workbook.browser.js +135 -25
- package/dist/browser/modules/excel/xlsx/xform/chart/chart-space-xform.js +6 -20
- package/dist/browser/modules/excel/xlsx/xlsx.browser.d.ts +19 -9
- package/dist/browser/modules/excel/xlsx/xlsx.browser.js +32 -8
- package/dist/browser/modules/excel/xlsx/xlsx.d.ts +10 -2
- package/dist/browser/modules/excel/xlsx/xlsx.js +9 -1
- package/dist/browser/modules/pdf/excel-bridge.d.ts +30 -1
- package/dist/browser/modules/pdf/excel-bridge.js +32 -0
- package/dist/browser/modules/pdf/font/metrics.d.ts +3 -52
- package/dist/browser/modules/pdf/font/metrics.js +3 -237
- package/dist/browser/modules/pdf/index.d.ts +1 -1
- package/dist/browser/modules/pdf/index.js +1 -1
- package/dist/browser/modules/pdf/render-layout-to-pdf.d.ts +66 -0
- package/dist/browser/modules/pdf/render-layout-to-pdf.js +647 -0
- package/dist/browser/modules/pdf/word-bridge.d.ts +80 -12
- package/dist/browser/modules/pdf/word-bridge.js +122 -274
- package/dist/browser/modules/stream/index.base.d.ts +2 -0
- package/dist/browser/modules/stream/index.base.js +2 -1
- package/dist/browser/modules/stream/internal/sink-adapter.d.ts +65 -0
- package/dist/browser/modules/stream/internal/sink-adapter.js +198 -0
- package/dist/browser/modules/stream/pull-stream.d.ts +19 -2
- package/dist/browser/modules/stream/pull-stream.js +51 -5
- package/dist/browser/modules/stream/types.d.ts +13 -1
- package/dist/browser/modules/word/advanced/diff.d.ts +61 -0
- package/dist/browser/modules/word/advanced/diff.js +167 -0
- package/dist/browser/modules/word/advanced/drawing-shapes.d.ts +269 -0
- package/dist/browser/modules/word/advanced/drawing-shapes.js +268 -0
- package/dist/browser/modules/word/advanced/field-engine.d.ts +43 -0
- package/dist/browser/modules/word/advanced/field-engine.js +1225 -0
- package/dist/browser/modules/word/advanced/glossary.d.ts +86 -0
- package/dist/browser/modules/word/advanced/glossary.js +79 -0
- package/dist/browser/modules/word/advanced/math-convert.d.ts +30 -0
- package/dist/browser/modules/word/advanced/math-convert.js +595 -0
- package/dist/browser/modules/word/advanced/ole-objects.d.ts +115 -0
- package/dist/browser/modules/word/advanced/ole-objects.js +271 -0
- package/dist/browser/modules/word/advanced/style-map.d.ts +105 -0
- package/dist/browser/modules/word/advanced/style-map.js +322 -0
- package/dist/browser/modules/word/advanced/validation.d.ts +56 -0
- package/dist/browser/modules/word/advanced/validation.js +1065 -0
- package/dist/browser/modules/word/advanced/vba-project.d.ts +91 -0
- package/dist/browser/modules/word/advanced/vba-project.js +265 -0
- package/dist/browser/modules/word/bridge/excel-bridge.d.ts +127 -0
- package/dist/browser/modules/word/bridge/excel-bridge.js +980 -0
- package/dist/browser/modules/word/builder/document-handle.d.ts +151 -0
- package/dist/browser/modules/word/builder/document-handle.js +664 -0
- package/dist/browser/modules/word/builder/paragraph-builders.d.ts +61 -0
- package/dist/browser/modules/word/builder/paragraph-builders.js +90 -0
- package/dist/browser/modules/word/builder/run-builders.d.ts +374 -0
- package/dist/browser/modules/word/builder/run-builders.js +600 -0
- package/dist/browser/modules/word/builder/table-builders.d.ts +23 -0
- package/dist/browser/modules/word/builder/table-builders.js +45 -0
- package/dist/browser/modules/word/constants.d.ts +39 -1
- package/dist/browser/modules/word/constants.js +109 -1
- package/dist/browser/modules/word/convert/conversion-ir.d.ts +210 -0
- package/dist/browser/modules/word/convert/conversion-ir.js +31 -0
- package/dist/browser/modules/word/convert/docx-to-semantic.d.ts +39 -0
- package/dist/browser/modules/word/convert/docx-to-semantic.js +499 -0
- package/dist/browser/modules/word/convert/flat-opc.d.ts +44 -0
- package/dist/browser/modules/word/convert/flat-opc.js +385 -0
- package/dist/browser/modules/word/convert/html/html-import.d.ts +50 -0
- package/dist/browser/modules/word/convert/html/html-import.js +1907 -0
- package/dist/{types/modules/word → browser/modules/word/convert/html}/html-renderer.d.ts +14 -1
- package/dist/{esm/modules/word → browser/modules/word/convert/html}/html-renderer.js +420 -69
- package/dist/browser/modules/word/convert/html/html.d.ts +15 -0
- package/dist/browser/modules/word/convert/html/html.js +15 -0
- package/dist/browser/modules/word/convert/markdown/markdown-import.d.ts +68 -0
- package/dist/browser/modules/word/convert/markdown/markdown-import.js +1325 -0
- package/dist/browser/modules/word/convert/markdown/markdown-renderer.d.ts +25 -0
- package/dist/browser/modules/word/convert/markdown/markdown-renderer.js +634 -0
- package/dist/browser/modules/word/convert/markdown/markdown.d.ts +15 -0
- package/dist/browser/modules/word/convert/markdown/markdown.js +15 -0
- package/dist/browser/modules/word/convert/odt/odt.d.ts +41 -0
- package/dist/browser/modules/word/convert/odt/odt.js +1932 -0
- package/dist/browser/modules/word/{color-utils.d.ts → core/color-utils.d.ts} +8 -1
- package/dist/browser/modules/word/core/color-utils.js +43 -0
- package/dist/browser/modules/word/core/internal-utils.d.ts +90 -0
- package/dist/browser/modules/word/core/internal-utils.js +209 -0
- package/dist/browser/modules/word/core/mapper.d.ts +44 -0
- package/dist/browser/modules/word/core/mapper.js +427 -0
- package/dist/browser/modules/word/core/opc-paths.d.ts +33 -0
- package/dist/browser/modules/word/core/opc-paths.js +48 -0
- package/dist/browser/modules/word/core/text-utils.d.ts +38 -0
- package/dist/browser/modules/word/core/text-utils.js +202 -0
- package/dist/browser/modules/word/core/walker.d.ts +119 -0
- package/dist/browser/modules/word/core/walker.js +570 -0
- package/dist/browser/modules/word/crypto.d.ts +14 -9
- package/dist/browser/modules/word/crypto.js +13 -7
- package/dist/browser/modules/word/document-io.d.ts +59 -27
- package/dist/browser/modules/word/document-io.js +80 -197
- package/dist/browser/modules/word/errors.d.ts +44 -1
- package/dist/browser/modules/word/errors.js +54 -2
- package/dist/browser/modules/word/excel.d.ts +14 -0
- package/dist/browser/modules/word/excel.js +13 -0
- package/dist/browser/modules/word/font/font-embed.d.ts +112 -0
- package/dist/browser/modules/word/font/font-embed.js +646 -0
- package/dist/{esm/modules/word → browser/modules/word/font}/font-obfuscation.js +4 -9
- package/dist/browser/modules/word/font/hyphenation.d.ts +65 -0
- package/dist/browser/modules/word/font/hyphenation.js +4210 -0
- package/dist/browser/modules/word/font/text-shaping.d.ts +58 -0
- package/dist/browser/modules/word/font/text-shaping.js +635 -0
- package/dist/browser/modules/word/html.d.ts +7 -6
- package/dist/browser/modules/word/html.js +6 -5
- package/dist/browser/modules/word/incremental-edit.d.ts +123 -0
- package/dist/browser/modules/word/incremental-edit.js +361 -0
- package/dist/browser/modules/word/index.base.d.ts +194 -10
- package/dist/browser/modules/word/index.base.js +138 -29
- package/dist/browser/modules/word/layout/layout-constants.d.ts +17 -0
- package/dist/browser/modules/word/layout/layout-constants.js +17 -0
- package/dist/browser/modules/word/layout/layout-full.d.ts +53 -0
- package/dist/browser/modules/word/layout/layout-full.js +1696 -0
- package/dist/browser/modules/word/layout/layout-model.d.ts +344 -0
- package/dist/browser/modules/word/layout/layout-model.js +16 -0
- package/dist/browser/modules/word/layout/layout.d.ts +63 -0
- package/dist/browser/modules/word/layout/layout.js +1167 -0
- package/dist/browser/modules/word/layout/render-page.d.ts +57 -0
- package/dist/browser/modules/word/layout/render-page.js +1238 -0
- package/dist/browser/modules/word/markdown.d.ts +14 -0
- package/dist/browser/modules/word/markdown.js +13 -0
- package/dist/browser/modules/word/patcher.d.ts +62 -0
- package/dist/browser/modules/word/patcher.js +537 -0
- package/dist/browser/modules/word/query/compat.d.ts +25 -0
- package/dist/browser/modules/word/query/compat.js +58 -0
- package/dist/browser/modules/word/query/data-binding.d.ts +22 -0
- package/dist/browser/modules/word/query/data-binding.js +392 -0
- package/dist/browser/modules/word/query/form-fields.d.ts +41 -0
- package/dist/browser/modules/word/query/form-fields.js +268 -0
- package/dist/browser/modules/word/query/format-search.d.ts +99 -0
- package/dist/browser/modules/word/query/format-search.js +329 -0
- package/dist/browser/modules/word/query/mail-merge.d.ts +25 -0
- package/dist/browser/modules/word/query/mail-merge.js +111 -0
- package/dist/browser/modules/word/query/merge.d.ts +50 -0
- package/dist/browser/modules/word/query/merge.js +617 -0
- package/dist/browser/modules/word/query/replace.d.ts +47 -0
- package/dist/browser/modules/word/query/replace.js +301 -0
- package/dist/browser/modules/word/query/revisions.d.ts +67 -0
- package/dist/browser/modules/word/query/revisions.js +879 -0
- package/dist/browser/modules/word/query/search.d.ts +129 -0
- package/dist/browser/modules/word/query/search.js +346 -0
- package/dist/browser/modules/word/query/split.d.ts +44 -0
- package/dist/browser/modules/word/query/split.js +135 -0
- package/dist/browser/modules/word/query/style-resolve.d.ts +104 -0
- package/dist/browser/modules/word/query/style-resolve.js +368 -0
- package/dist/browser/modules/word/reader/chart-parser.d.ts +20 -0
- package/dist/browser/modules/word/reader/chart-parser.js +810 -0
- package/dist/browser/modules/word/reader/comments-parser.d.ts +26 -0
- package/dist/browser/modules/word/reader/comments-parser.js +92 -0
- package/dist/browser/modules/word/reader/doc-props-parsers.d.ts +15 -0
- package/dist/browser/modules/word/reader/doc-props-parsers.js +190 -0
- package/dist/browser/modules/word/reader/docx-reader.d.ts +27 -0
- package/dist/browser/modules/word/reader/docx-reader.js +2557 -0
- package/dist/browser/modules/word/reader/drawing-helpers.d.ts +27 -0
- package/dist/browser/modules/word/reader/drawing-helpers.js +84 -0
- package/dist/browser/modules/word/reader/form-field-parser.d.ts +21 -0
- package/dist/browser/modules/word/reader/form-field-parser.js +82 -0
- package/dist/browser/modules/word/reader/image-parsers.d.ts +11 -0
- package/dist/browser/modules/word/reader/image-parsers.js +291 -0
- package/dist/browser/modules/word/reader/math-parser.d.ts +12 -0
- package/dist/browser/modules/word/reader/math-parser.js +422 -0
- package/dist/browser/modules/word/reader/metadata-parsers.d.ts +17 -0
- package/dist/browser/modules/word/reader/metadata-parsers.js +87 -0
- package/dist/browser/modules/word/reader/numbering-parser.d.ts +13 -0
- package/dist/browser/modules/word/reader/numbering-parser.js +166 -0
- package/dist/browser/modules/word/reader/paragraph-section-parsers.d.ts +12 -0
- package/dist/browser/modules/word/reader/paragraph-section-parsers.js +503 -0
- package/dist/browser/modules/word/reader/parse-utils.d.ts +91 -0
- package/dist/browser/modules/word/reader/parse-utils.js +249 -0
- package/dist/browser/modules/word/reader/properties-parsers.d.ts +21 -0
- package/dist/browser/modules/word/reader/properties-parsers.js +332 -0
- package/dist/browser/modules/word/reader/reader-context.d.ts +69 -0
- package/dist/browser/modules/word/reader/reader-context.js +61 -0
- package/dist/browser/modules/word/reader/sdt-helpers.d.ts +29 -0
- package/dist/browser/modules/word/reader/sdt-helpers.js +111 -0
- package/dist/browser/modules/word/reader/settings-parser.d.ts +8 -0
- package/dist/browser/modules/word/reader/settings-parser.js +263 -0
- package/dist/browser/modules/word/reader/styles-parser.d.ts +12 -0
- package/dist/browser/modules/word/reader/styles-parser.js +147 -0
- package/dist/browser/modules/word/reader/table-properties-parsers.d.ts +12 -0
- package/dist/browser/modules/word/reader/table-properties-parsers.js +234 -0
- package/dist/browser/modules/word/reader/theme-parser.d.ts +8 -0
- package/dist/browser/modules/word/reader/theme-parser.js +167 -0
- package/dist/browser/modules/word/reader/watermark-parser.d.ts +15 -0
- package/dist/browser/modules/word/reader/watermark-parser.js +110 -0
- package/dist/browser/modules/word/security/cfb-reader.d.ts +37 -0
- package/dist/browser/modules/word/security/cfb-reader.js +410 -0
- package/dist/browser/modules/word/{digital-signatures.d.ts → security/digital-signatures.d.ts} +19 -11
- package/dist/browser/modules/word/{digital-signatures.js → security/digital-signatures.js} +34 -34
- package/dist/browser/modules/word/security/document-protection.d.ts +93 -0
- package/dist/browser/modules/word/security/document-protection.js +201 -0
- package/dist/{types/modules/word → browser/modules/word/security}/encryption.d.ts +51 -4
- package/dist/browser/modules/word/security/encryption.js +602 -0
- package/dist/browser/modules/word/security/policy.d.ts +80 -0
- package/dist/browser/modules/word/security/policy.js +102 -0
- package/dist/browser/modules/word/template/template-chart.d.ts +56 -0
- package/dist/browser/modules/word/template/template-chart.js +167 -0
- package/dist/browser/modules/word/template/template-datasource.d.ts +154 -0
- package/dist/browser/modules/word/template/template-datasource.js +541 -0
- package/dist/browser/modules/word/template/template-engine.d.ts +121 -0
- package/dist/browser/modules/word/template/template-engine.js +1435 -0
- package/dist/browser/modules/word/types.d.ts +224 -25
- package/dist/browser/modules/word/units.d.ts +26 -0
- package/dist/browser/modules/word/units.js +43 -14
- package/dist/browser/modules/word/{writers → writer}/chart-writer.js +164 -23
- package/dist/browser/modules/word/writer/checkbox-writer.d.ts +17 -0
- package/dist/browser/modules/word/writer/checkbox-writer.js +79 -0
- package/dist/{types/modules/word/writers → browser/modules/word/writer}/comment-writer.d.ts +2 -1
- package/dist/browser/modules/word/{writers → writer}/comment-writer.js +8 -6
- package/dist/browser/modules/word/writer/common-parts.d.ts +57 -0
- package/dist/browser/modules/word/writer/common-parts.js +101 -0
- package/dist/{types/modules/word → browser/modules/word/writer}/content-types.d.ts +2 -2
- package/dist/{esm/modules/word → browser/modules/word/writer}/content-types.js +14 -6
- package/dist/browser/modules/word/writer/document-writer.d.ts +24 -0
- package/dist/browser/modules/word/writer/document-writer.js +473 -0
- package/dist/browser/modules/word/writer/docx-packager.d.ts +35 -0
- package/dist/browser/modules/word/writer/docx-packager.js +1515 -0
- package/dist/{types/modules/word/writers → browser/modules/word/writer}/footnote-writer.d.ts +3 -2
- package/dist/{esm/modules/word/writers → browser/modules/word/writer}/footnote-writer.js +13 -10
- package/dist/{types/modules/word/writers → browser/modules/word/writer}/header-footer-writer.d.ts +3 -2
- package/dist/{esm/modules/word/writers → browser/modules/word/writer}/header-footer-writer.js +39 -21
- package/dist/{types/modules/word/writers → browser/modules/word/writer}/image-writer.d.ts +1 -1
- package/dist/browser/modules/word/{writers → writer}/image-writer.js +11 -7
- package/dist/browser/modules/word/writer/math-writer.d.ts +20 -0
- package/dist/{esm/modules/word/writers → browser/modules/word/writer}/math-writer.js +21 -1
- package/dist/browser/modules/word/{writers → writer}/numbering-writer.d.ts +1 -1
- package/dist/{esm/modules/word/writers → browser/modules/word/writer}/numbering-writer.js +11 -4
- package/dist/browser/modules/word/{writers → writer}/paragraph-writer.d.ts +2 -1
- package/dist/browser/modules/word/{writers → writer}/paragraph-writer.js +73 -38
- package/dist/browser/modules/word/{writers → writer}/parts-writer.d.ts +3 -3
- package/dist/{esm/modules/word/writers → browser/modules/word/writer}/parts-writer.js +91 -12
- package/dist/browser/modules/word/writer/reference-scanners.d.ts +42 -0
- package/dist/browser/modules/word/writer/reference-scanners.js +111 -0
- package/dist/browser/modules/word/writer/relationships.d.ts +52 -0
- package/dist/browser/modules/word/writer/relationships.js +117 -0
- package/dist/browser/modules/word/writer/render-context.d.ts +124 -0
- package/dist/browser/modules/word/writer/render-context.js +46 -0
- package/dist/browser/modules/word/{writers → writer}/run-writer.d.ts +10 -1
- package/dist/{esm/modules/word/writers → browser/modules/word/writer}/run-writer.js +126 -24
- package/dist/browser/modules/word/writer/sdt-writer.d.ts +25 -0
- package/dist/browser/modules/word/writer/sdt-writer.js +189 -0
- package/dist/browser/modules/word/writer/stream-buf.d.ts +37 -0
- package/dist/browser/modules/word/writer/stream-buf.js +73 -0
- package/dist/browser/modules/word/writer/streaming-writer.d.ts +344 -0
- package/dist/browser/modules/word/writer/streaming-writer.js +1382 -0
- package/dist/browser/modules/word/writer/string-buf.d.ts +8 -0
- package/dist/browser/modules/word/writer/string-buf.js +7 -0
- package/dist/browser/modules/word/{writers → writer}/styles-writer.js +32 -1
- package/dist/browser/modules/word/{writers → writer}/table-writer.d.ts +2 -1
- package/dist/browser/modules/word/{writers → writer}/table-writer.js +94 -11
- package/dist/browser/modules/xml/types.d.ts +22 -0
- package/dist/browser/utils/crypto.browser.d.ts +3 -1
- package/dist/browser/utils/crypto.browser.js +3 -1
- package/dist/browser/utils/crypto.d.ts +4 -1
- package/dist/browser/utils/crypto.js +4 -1
- package/dist/browser/utils/font-metrics.d.ts +63 -0
- package/dist/browser/utils/font-metrics.js +293 -0
- package/dist/browser/utils/string-buf.d.ts +42 -0
- package/dist/browser/utils/string-buf.js +89 -0
- package/dist/browser/utils/theme-colors.d.ts +55 -0
- package/dist/browser/utils/theme-colors.js +120 -0
- package/dist/cjs/modules/archive/compression/streaming-compress.browser.js +29 -0
- package/dist/cjs/modules/archive/compression/streaming-compress.js +9 -0
- package/dist/cjs/modules/archive/compression/worker-pool/pool.browser.js +26 -1
- package/dist/cjs/modules/archive/fs/archive-file.js +78 -16
- package/dist/cjs/modules/archive/unzip/stream.browser.js +43 -2
- package/dist/cjs/modules/excel/chart/chart-ex-builder.js +7 -2
- package/dist/cjs/modules/excel/chart/chart-ex-renderer.js +4 -9
- package/dist/cjs/modules/excel/chart/chart.js +1 -7
- package/dist/cjs/modules/excel/stream/workbook-reader.browser.js +25 -1
- package/dist/cjs/modules/excel/stream/workbook-reader.js +9 -0
- package/dist/cjs/modules/excel/stream/workbook-writer.browser.js +228 -13
- package/dist/cjs/modules/excel/utils/string-buf.js +5 -81
- package/dist/cjs/modules/excel/workbook.browser.js +135 -25
- package/dist/cjs/modules/excel/xlsx/xform/chart/chart-space-xform.js +6 -20
- package/dist/cjs/modules/excel/xlsx/xlsx.browser.js +32 -8
- package/dist/cjs/modules/excel/xlsx/xlsx.js +9 -1
- package/dist/cjs/modules/pdf/excel-bridge.js +33 -0
- package/dist/cjs/modules/pdf/font/metrics.js +11 -244
- package/dist/cjs/modules/pdf/index.js +2 -1
- package/dist/cjs/modules/pdf/render-layout-to-pdf.js +651 -0
- package/dist/cjs/modules/pdf/word-bridge.js +155 -274
- package/dist/cjs/modules/stream/index.base.js +4 -2
- package/dist/cjs/modules/stream/internal/sink-adapter.js +202 -0
- package/dist/cjs/modules/stream/pull-stream.js +51 -5
- package/dist/cjs/modules/word/advanced/diff.js +170 -0
- package/dist/cjs/modules/word/advanced/drawing-shapes.js +279 -0
- package/dist/cjs/modules/word/advanced/field-engine.js +1229 -0
- package/dist/cjs/modules/word/advanced/glossary.js +87 -0
- package/dist/cjs/modules/word/advanced/math-convert.js +599 -0
- package/dist/cjs/modules/word/advanced/ole-objects.js +277 -0
- package/dist/cjs/modules/word/advanced/style-map.js +329 -0
- package/dist/cjs/modules/word/advanced/validation.js +1068 -0
- package/dist/cjs/modules/word/advanced/vba-project.js +274 -0
- package/dist/cjs/modules/word/bridge/excel-bridge.js +1020 -0
- package/dist/cjs/modules/word/builder/document-handle.js +667 -0
- package/dist/cjs/modules/word/builder/paragraph-builders.js +109 -0
- package/dist/cjs/modules/word/builder/run-builders.js +676 -0
- package/dist/cjs/modules/word/builder/table-builders.js +53 -0
- package/dist/cjs/modules/word/constants.js +111 -2
- package/dist/cjs/modules/word/convert/conversion-ir.js +34 -0
- package/dist/cjs/modules/word/convert/docx-to-semantic.js +502 -0
- package/dist/cjs/modules/word/convert/flat-opc.js +390 -0
- package/dist/cjs/modules/word/convert/html/html-import.js +1910 -0
- package/dist/cjs/modules/word/{html-renderer.js → convert/html/html-renderer.js} +420 -69
- package/dist/cjs/modules/word/convert/html/html.js +20 -0
- package/dist/cjs/modules/word/convert/markdown/markdown-import.js +1329 -0
- package/dist/cjs/modules/word/convert/markdown/markdown-renderer.js +637 -0
- package/dist/cjs/modules/word/convert/markdown/markdown.js +21 -0
- package/dist/cjs/modules/word/convert/odt/odt.js +1936 -0
- package/dist/cjs/modules/word/core/color-utils.js +47 -0
- package/dist/cjs/modules/word/core/internal-utils.js +219 -0
- package/dist/cjs/modules/word/core/mapper.js +430 -0
- package/dist/cjs/modules/word/core/opc-paths.js +53 -0
- package/dist/cjs/modules/word/core/text-utils.js +210 -0
- package/dist/cjs/modules/word/core/walker.js +577 -0
- package/dist/cjs/modules/word/crypto.js +19 -8
- package/dist/cjs/modules/word/document-io.js +117 -197
- package/dist/cjs/modules/word/errors.js +59 -13
- package/dist/cjs/modules/word/excel.js +22 -0
- package/dist/cjs/modules/word/font/font-embed.js +652 -0
- package/dist/cjs/modules/word/{font-obfuscation.js → font/font-obfuscation.js} +4 -9
- package/dist/cjs/modules/word/font/hyphenation.js +4216 -0
- package/dist/cjs/modules/word/font/text-shaping.js +640 -0
- package/dist/cjs/modules/word/html.js +9 -7
- package/dist/cjs/modules/word/incremental-edit.js +366 -0
- package/dist/cjs/modules/word/index.base.js +370 -137
- package/dist/cjs/modules/word/layout/layout-constants.js +20 -0
- package/dist/cjs/modules/word/layout/layout-full.js +1699 -0
- package/dist/cjs/modules/word/layout/layout-model.js +17 -0
- package/dist/cjs/modules/word/layout/layout.js +1170 -0
- package/dist/cjs/modules/word/layout/render-page.js +1243 -0
- package/dist/cjs/modules/word/markdown.js +19 -0
- package/dist/cjs/modules/word/patcher.js +539 -0
- package/dist/cjs/modules/word/query/compat.js +61 -0
- package/dist/cjs/modules/word/query/data-binding.js +395 -0
- package/dist/cjs/modules/word/query/form-fields.js +272 -0
- package/dist/cjs/modules/word/query/format-search.js +334 -0
- package/dist/cjs/modules/word/query/mail-merge.js +114 -0
- package/dist/cjs/modules/word/query/merge.js +620 -0
- package/dist/cjs/modules/word/query/replace.js +304 -0
- package/dist/cjs/modules/word/query/revisions.js +885 -0
- package/dist/cjs/modules/word/query/search.js +361 -0
- package/dist/cjs/modules/word/query/split.js +138 -0
- package/dist/cjs/modules/word/query/style-resolve.js +374 -0
- package/dist/cjs/modules/word/reader/chart-parser.js +814 -0
- package/dist/cjs/modules/word/reader/comments-parser.js +96 -0
- package/dist/cjs/modules/word/reader/doc-props-parsers.js +194 -0
- package/dist/cjs/modules/word/reader/docx-reader.js +2560 -0
- package/dist/cjs/modules/word/reader/drawing-helpers.js +90 -0
- package/dist/cjs/modules/word/reader/form-field-parser.js +85 -0
- package/dist/cjs/modules/word/reader/image-parsers.js +293 -0
- package/dist/cjs/modules/word/reader/math-parser.js +424 -0
- package/dist/cjs/modules/word/reader/metadata-parsers.js +93 -0
- package/dist/cjs/modules/word/reader/numbering-parser.js +168 -0
- package/dist/cjs/modules/word/reader/paragraph-section-parsers.js +505 -0
- package/dist/cjs/modules/word/reader/parse-utils.js +271 -0
- package/dist/cjs/modules/word/reader/properties-parsers.js +338 -0
- package/dist/cjs/modules/word/reader/reader-context.js +66 -0
- package/dist/cjs/modules/word/reader/sdt-helpers.js +114 -0
- package/dist/cjs/modules/word/reader/settings-parser.js +265 -0
- package/dist/cjs/modules/word/reader/styles-parser.js +149 -0
- package/dist/cjs/modules/word/reader/table-properties-parsers.js +237 -0
- package/dist/cjs/modules/word/reader/theme-parser.js +169 -0
- package/dist/cjs/modules/word/reader/watermark-parser.js +113 -0
- package/dist/cjs/modules/word/security/cfb-reader.js +414 -0
- package/dist/cjs/modules/word/{digital-signatures.js → security/digital-signatures.js} +34 -34
- package/dist/cjs/modules/word/security/document-protection.js +208 -0
- package/dist/cjs/modules/word/security/encryption.js +612 -0
- package/dist/cjs/modules/word/security/policy.js +106 -0
- package/dist/cjs/modules/word/template/template-chart.js +170 -0
- package/dist/cjs/modules/word/template/template-datasource.js +549 -0
- package/dist/cjs/modules/word/template/template-engine.js +1430 -0
- package/dist/cjs/modules/word/units.js +44 -14
- package/dist/cjs/modules/word/{writers → writer}/chart-writer.js +163 -22
- package/dist/cjs/modules/word/writer/checkbox-writer.js +82 -0
- package/dist/cjs/modules/word/{writers → writer}/comment-writer.js +8 -6
- package/dist/cjs/modules/word/writer/common-parts.js +104 -0
- package/dist/cjs/modules/word/{content-types.js → writer/content-types.js} +14 -6
- package/dist/cjs/modules/word/writer/document-writer.js +478 -0
- package/dist/cjs/modules/word/writer/docx-packager.js +1551 -0
- package/dist/cjs/modules/word/{writers → writer}/footnote-writer.js +13 -10
- package/dist/cjs/modules/word/{writers → writer}/header-footer-writer.js +38 -20
- package/dist/cjs/modules/word/{writers → writer}/image-writer.js +11 -7
- package/dist/cjs/modules/word/{writers → writer}/math-writer.js +21 -1
- package/dist/cjs/modules/word/{writers → writer}/numbering-writer.js +11 -4
- package/dist/cjs/modules/word/{writers → writer}/paragraph-writer.js +72 -37
- package/dist/cjs/modules/word/{writers → writer}/parts-writer.js +91 -12
- package/dist/cjs/modules/word/writer/reference-scanners.js +120 -0
- package/dist/cjs/modules/word/writer/relationships.js +124 -0
- package/dist/cjs/modules/word/writer/render-context.js +51 -0
- package/dist/cjs/modules/word/{writers → writer}/run-writer.js +127 -24
- package/dist/cjs/modules/word/writer/sdt-writer.js +192 -0
- package/dist/cjs/modules/word/writer/stream-buf.js +76 -0
- package/dist/cjs/modules/word/writer/streaming-writer.js +1387 -0
- package/dist/cjs/modules/word/writer/string-buf.js +11 -0
- package/dist/cjs/modules/word/{writers → writer}/styles-writer.js +32 -1
- package/dist/cjs/modules/word/{writers → writer}/table-writer.js +94 -11
- package/dist/cjs/utils/crypto.browser.js +3 -1
- package/dist/cjs/utils/crypto.js +4 -1
- package/dist/cjs/utils/font-metrics.js +303 -0
- package/dist/cjs/utils/string-buf.js +92 -0
- package/dist/cjs/utils/theme-colors.js +126 -0
- package/dist/esm/modules/archive/compression/streaming-compress.browser.js +29 -0
- package/dist/esm/modules/archive/compression/streaming-compress.js +9 -0
- package/dist/esm/modules/archive/compression/worker-pool/pool.browser.js +26 -1
- package/dist/esm/modules/archive/fs/archive-file.js +78 -16
- package/dist/esm/modules/archive/unzip/stream.browser.js +43 -2
- package/dist/esm/modules/excel/chart/chart-ex-builder.js +7 -2
- package/dist/esm/modules/excel/chart/chart-ex-renderer.js +4 -9
- package/dist/esm/modules/excel/chart/chart.js +1 -7
- package/dist/esm/modules/excel/stream/workbook-reader.browser.js +25 -1
- package/dist/esm/modules/excel/stream/workbook-reader.js +9 -0
- package/dist/esm/modules/excel/stream/workbook-writer.browser.js +228 -13
- package/dist/esm/modules/excel/utils/string-buf.js +4 -81
- package/dist/esm/modules/excel/workbook.browser.js +135 -25
- package/dist/esm/modules/excel/xlsx/xform/chart/chart-space-xform.js +6 -20
- package/dist/esm/modules/excel/xlsx/xlsx.browser.js +32 -8
- package/dist/esm/modules/excel/xlsx/xlsx.js +9 -1
- package/dist/esm/modules/pdf/excel-bridge.js +32 -0
- package/dist/esm/modules/pdf/font/metrics.js +3 -237
- package/dist/esm/modules/pdf/index.js +1 -1
- package/dist/esm/modules/pdf/render-layout-to-pdf.js +647 -0
- package/dist/esm/modules/pdf/word-bridge.js +122 -274
- package/dist/esm/modules/stream/index.base.js +2 -1
- package/dist/esm/modules/stream/internal/sink-adapter.js +198 -0
- package/dist/esm/modules/stream/pull-stream.js +51 -5
- package/dist/esm/modules/word/advanced/diff.js +167 -0
- package/dist/esm/modules/word/advanced/drawing-shapes.js +268 -0
- package/dist/esm/modules/word/advanced/field-engine.js +1225 -0
- package/dist/esm/modules/word/advanced/glossary.js +79 -0
- package/dist/esm/modules/word/advanced/math-convert.js +595 -0
- package/dist/esm/modules/word/advanced/ole-objects.js +271 -0
- package/dist/esm/modules/word/advanced/style-map.js +322 -0
- package/dist/esm/modules/word/advanced/validation.js +1065 -0
- package/dist/esm/modules/word/advanced/vba-project.js +265 -0
- package/dist/esm/modules/word/bridge/excel-bridge.js +980 -0
- package/dist/esm/modules/word/builder/document-handle.js +664 -0
- package/dist/esm/modules/word/builder/paragraph-builders.js +90 -0
- package/dist/esm/modules/word/builder/run-builders.js +600 -0
- package/dist/esm/modules/word/builder/table-builders.js +45 -0
- package/dist/esm/modules/word/constants.js +109 -1
- package/dist/esm/modules/word/convert/conversion-ir.js +31 -0
- package/dist/esm/modules/word/convert/docx-to-semantic.js +499 -0
- package/dist/esm/modules/word/convert/flat-opc.js +385 -0
- package/dist/esm/modules/word/convert/html/html-import.js +1907 -0
- package/dist/{browser/modules/word → esm/modules/word/convert/html}/html-renderer.js +420 -69
- package/dist/esm/modules/word/convert/html/html.js +15 -0
- package/dist/esm/modules/word/convert/markdown/markdown-import.js +1325 -0
- package/dist/esm/modules/word/convert/markdown/markdown-renderer.js +634 -0
- package/dist/esm/modules/word/convert/markdown/markdown.js +15 -0
- package/dist/esm/modules/word/convert/odt/odt.js +1932 -0
- package/dist/esm/modules/word/core/color-utils.js +43 -0
- package/dist/esm/modules/word/core/internal-utils.js +209 -0
- package/dist/esm/modules/word/core/mapper.js +427 -0
- package/dist/esm/modules/word/core/opc-paths.js +48 -0
- package/dist/esm/modules/word/core/text-utils.js +202 -0
- package/dist/esm/modules/word/core/walker.js +570 -0
- package/dist/esm/modules/word/crypto.js +13 -7
- package/dist/esm/modules/word/document-io.js +80 -197
- package/dist/esm/modules/word/errors.js +54 -2
- package/dist/esm/modules/word/excel.js +13 -0
- package/dist/esm/modules/word/font/font-embed.js +646 -0
- package/dist/{browser/modules/word → esm/modules/word/font}/font-obfuscation.js +4 -9
- package/dist/esm/modules/word/font/hyphenation.js +4210 -0
- package/dist/esm/modules/word/font/text-shaping.js +635 -0
- package/dist/esm/modules/word/html.js +6 -5
- package/dist/esm/modules/word/incremental-edit.js +361 -0
- package/dist/esm/modules/word/index.base.js +138 -29
- package/dist/esm/modules/word/layout/layout-constants.js +17 -0
- package/dist/esm/modules/word/layout/layout-full.js +1696 -0
- package/dist/esm/modules/word/layout/layout-model.js +16 -0
- package/dist/esm/modules/word/layout/layout.js +1167 -0
- package/dist/esm/modules/word/layout/render-page.js +1238 -0
- package/dist/esm/modules/word/markdown.js +13 -0
- package/dist/esm/modules/word/patcher.js +537 -0
- package/dist/esm/modules/word/query/compat.js +58 -0
- package/dist/esm/modules/word/query/data-binding.js +392 -0
- package/dist/esm/modules/word/query/form-fields.js +268 -0
- package/dist/esm/modules/word/query/format-search.js +329 -0
- package/dist/esm/modules/word/query/mail-merge.js +111 -0
- package/dist/esm/modules/word/query/merge.js +617 -0
- package/dist/esm/modules/word/query/replace.js +301 -0
- package/dist/esm/modules/word/query/revisions.js +879 -0
- package/dist/esm/modules/word/query/search.js +346 -0
- package/dist/esm/modules/word/query/split.js +135 -0
- package/dist/esm/modules/word/query/style-resolve.js +368 -0
- package/dist/esm/modules/word/reader/chart-parser.js +810 -0
- package/dist/esm/modules/word/reader/comments-parser.js +92 -0
- package/dist/esm/modules/word/reader/doc-props-parsers.js +190 -0
- package/dist/esm/modules/word/reader/docx-reader.js +2557 -0
- package/dist/esm/modules/word/reader/drawing-helpers.js +84 -0
- package/dist/esm/modules/word/reader/form-field-parser.js +82 -0
- package/dist/esm/modules/word/reader/image-parsers.js +291 -0
- package/dist/esm/modules/word/reader/math-parser.js +422 -0
- package/dist/esm/modules/word/reader/metadata-parsers.js +87 -0
- package/dist/esm/modules/word/reader/numbering-parser.js +166 -0
- package/dist/esm/modules/word/reader/paragraph-section-parsers.js +503 -0
- package/dist/esm/modules/word/reader/parse-utils.js +249 -0
- package/dist/esm/modules/word/reader/properties-parsers.js +332 -0
- package/dist/esm/modules/word/reader/reader-context.js +61 -0
- package/dist/esm/modules/word/reader/sdt-helpers.js +111 -0
- package/dist/esm/modules/word/reader/settings-parser.js +263 -0
- package/dist/esm/modules/word/reader/styles-parser.js +147 -0
- package/dist/esm/modules/word/reader/table-properties-parsers.js +234 -0
- package/dist/esm/modules/word/reader/theme-parser.js +167 -0
- package/dist/esm/modules/word/reader/watermark-parser.js +110 -0
- package/dist/esm/modules/word/security/cfb-reader.js +410 -0
- package/dist/esm/modules/word/{digital-signatures.js → security/digital-signatures.js} +34 -34
- package/dist/esm/modules/word/security/document-protection.js +201 -0
- package/dist/esm/modules/word/security/encryption.js +602 -0
- package/dist/esm/modules/word/security/policy.js +102 -0
- package/dist/esm/modules/word/template/template-chart.js +167 -0
- package/dist/esm/modules/word/template/template-datasource.js +541 -0
- package/dist/esm/modules/word/template/template-engine.js +1435 -0
- package/dist/esm/modules/word/units.js +43 -14
- package/dist/esm/modules/word/{writers → writer}/chart-writer.js +164 -23
- package/dist/esm/modules/word/writer/checkbox-writer.js +79 -0
- package/dist/esm/modules/word/{writers → writer}/comment-writer.js +8 -6
- package/dist/esm/modules/word/writer/common-parts.js +101 -0
- package/dist/{browser/modules/word → esm/modules/word/writer}/content-types.js +14 -6
- package/dist/esm/modules/word/writer/document-writer.js +473 -0
- package/dist/esm/modules/word/writer/docx-packager.js +1515 -0
- package/dist/{browser/modules/word/writers → esm/modules/word/writer}/footnote-writer.js +13 -10
- package/dist/{browser/modules/word/writers → esm/modules/word/writer}/header-footer-writer.js +39 -21
- package/dist/esm/modules/word/{writers → writer}/image-writer.js +11 -7
- package/dist/{browser/modules/word/writers → esm/modules/word/writer}/math-writer.js +21 -1
- package/dist/{browser/modules/word/writers → esm/modules/word/writer}/numbering-writer.js +11 -4
- package/dist/esm/modules/word/{writers → writer}/paragraph-writer.js +73 -38
- package/dist/{browser/modules/word/writers → esm/modules/word/writer}/parts-writer.js +91 -12
- package/dist/esm/modules/word/writer/reference-scanners.js +111 -0
- package/dist/esm/modules/word/writer/relationships.js +117 -0
- package/dist/esm/modules/word/writer/render-context.js +46 -0
- package/dist/{browser/modules/word/writers → esm/modules/word/writer}/run-writer.js +126 -24
- package/dist/esm/modules/word/writer/sdt-writer.js +189 -0
- package/dist/esm/modules/word/writer/stream-buf.js +73 -0
- package/dist/esm/modules/word/writer/streaming-writer.js +1382 -0
- package/dist/esm/modules/word/writer/string-buf.js +7 -0
- package/dist/esm/modules/word/{writers → writer}/styles-writer.js +32 -1
- package/dist/esm/modules/word/{writers → writer}/table-writer.js +94 -11
- package/dist/esm/utils/crypto.browser.js +3 -1
- package/dist/esm/utils/crypto.js +4 -1
- package/dist/esm/utils/font-metrics.js +293 -0
- package/dist/esm/utils/string-buf.js +89 -0
- package/dist/esm/utils/theme-colors.js +120 -0
- package/dist/iife/excelts.iife.js +70692 -70337
- package/dist/iife/excelts.iife.js.map +1 -1
- package/dist/iife/excelts.iife.min.js +57 -57
- package/dist/types/modules/archive/fs/archive-file.d.ts +8 -5
- package/dist/types/modules/excel/chart/chart-ex-types.d.ts +0 -12
- package/dist/types/modules/excel/chart/chart.d.ts +1 -5
- package/dist/types/modules/excel/chart/types.d.ts +0 -6
- package/dist/types/modules/excel/stream/workbook-writer.browser.d.ts +40 -0
- package/dist/types/modules/excel/utils/string-buf.d.ts +5 -26
- package/dist/types/modules/excel/xlsx/xlsx.browser.d.ts +19 -9
- package/dist/types/modules/excel/xlsx/xlsx.d.ts +10 -2
- package/dist/types/modules/pdf/excel-bridge.d.ts +30 -1
- package/dist/types/modules/pdf/font/metrics.d.ts +3 -52
- package/dist/types/modules/pdf/index.d.ts +1 -1
- package/dist/types/modules/pdf/render-layout-to-pdf.d.ts +66 -0
- package/dist/types/modules/pdf/word-bridge.d.ts +80 -12
- package/dist/types/modules/stream/index.base.d.ts +2 -0
- package/dist/types/modules/stream/internal/sink-adapter.d.ts +65 -0
- package/dist/types/modules/stream/pull-stream.d.ts +19 -2
- package/dist/types/modules/stream/types.d.ts +13 -1
- package/dist/types/modules/word/advanced/diff.d.ts +61 -0
- package/dist/types/modules/word/advanced/drawing-shapes.d.ts +269 -0
- package/dist/types/modules/word/advanced/field-engine.d.ts +43 -0
- package/dist/types/modules/word/advanced/glossary.d.ts +86 -0
- package/dist/types/modules/word/advanced/math-convert.d.ts +30 -0
- package/dist/types/modules/word/advanced/ole-objects.d.ts +115 -0
- package/dist/types/modules/word/advanced/style-map.d.ts +105 -0
- package/dist/types/modules/word/advanced/validation.d.ts +56 -0
- package/dist/types/modules/word/advanced/vba-project.d.ts +91 -0
- package/dist/types/modules/word/bridge/excel-bridge.d.ts +127 -0
- package/dist/types/modules/word/builder/document-handle.d.ts +151 -0
- package/dist/types/modules/word/builder/paragraph-builders.d.ts +61 -0
- package/dist/types/modules/word/builder/run-builders.d.ts +374 -0
- package/dist/types/modules/word/builder/table-builders.d.ts +23 -0
- package/dist/types/modules/word/constants.d.ts +39 -1
- package/dist/types/modules/word/convert/conversion-ir.d.ts +210 -0
- package/dist/types/modules/word/convert/docx-to-semantic.d.ts +39 -0
- package/dist/types/modules/word/convert/flat-opc.d.ts +44 -0
- package/dist/types/modules/word/convert/html/html-import.d.ts +50 -0
- package/dist/{browser/modules/word → types/modules/word/convert/html}/html-renderer.d.ts +14 -1
- package/dist/types/modules/word/convert/html/html.d.ts +15 -0
- package/dist/types/modules/word/convert/markdown/markdown-import.d.ts +68 -0
- package/dist/types/modules/word/convert/markdown/markdown-renderer.d.ts +25 -0
- package/dist/types/modules/word/convert/markdown/markdown.d.ts +15 -0
- package/dist/types/modules/word/convert/odt/odt.d.ts +41 -0
- package/dist/types/modules/word/{color-utils.d.ts → core/color-utils.d.ts} +8 -1
- package/dist/types/modules/word/core/internal-utils.d.ts +90 -0
- package/dist/types/modules/word/core/mapper.d.ts +44 -0
- package/dist/types/modules/word/core/opc-paths.d.ts +33 -0
- package/dist/types/modules/word/core/text-utils.d.ts +38 -0
- package/dist/types/modules/word/core/walker.d.ts +119 -0
- package/dist/types/modules/word/crypto.d.ts +14 -9
- package/dist/types/modules/word/document-io.d.ts +59 -27
- package/dist/types/modules/word/errors.d.ts +44 -1
- package/dist/types/modules/word/excel.d.ts +14 -0
- package/dist/types/modules/word/font/font-embed.d.ts +112 -0
- package/dist/types/modules/word/font/hyphenation.d.ts +65 -0
- package/dist/types/modules/word/font/text-shaping.d.ts +58 -0
- package/dist/types/modules/word/html.d.ts +7 -6
- package/dist/types/modules/word/incremental-edit.d.ts +123 -0
- package/dist/types/modules/word/index.base.d.ts +194 -10
- package/dist/types/modules/word/layout/layout-constants.d.ts +17 -0
- package/dist/types/modules/word/layout/layout-full.d.ts +53 -0
- package/dist/types/modules/word/layout/layout-model.d.ts +344 -0
- package/dist/types/modules/word/layout/layout.d.ts +63 -0
- package/dist/types/modules/word/layout/render-page.d.ts +57 -0
- package/dist/types/modules/word/markdown.d.ts +14 -0
- package/dist/types/modules/word/patcher.d.ts +62 -0
- package/dist/types/modules/word/query/compat.d.ts +25 -0
- package/dist/types/modules/word/query/data-binding.d.ts +22 -0
- package/dist/types/modules/word/query/form-fields.d.ts +41 -0
- package/dist/types/modules/word/query/format-search.d.ts +99 -0
- package/dist/types/modules/word/query/mail-merge.d.ts +25 -0
- package/dist/types/modules/word/query/merge.d.ts +50 -0
- package/dist/types/modules/word/query/replace.d.ts +47 -0
- package/dist/types/modules/word/query/revisions.d.ts +67 -0
- package/dist/types/modules/word/query/search.d.ts +129 -0
- package/dist/types/modules/word/query/split.d.ts +44 -0
- package/dist/types/modules/word/query/style-resolve.d.ts +104 -0
- package/dist/types/modules/word/reader/chart-parser.d.ts +20 -0
- package/dist/types/modules/word/reader/comments-parser.d.ts +26 -0
- package/dist/types/modules/word/reader/doc-props-parsers.d.ts +15 -0
- package/dist/types/modules/word/reader/docx-reader.d.ts +27 -0
- package/dist/types/modules/word/reader/drawing-helpers.d.ts +27 -0
- package/dist/types/modules/word/reader/form-field-parser.d.ts +21 -0
- package/dist/types/modules/word/reader/image-parsers.d.ts +11 -0
- package/dist/types/modules/word/reader/math-parser.d.ts +12 -0
- package/dist/types/modules/word/reader/metadata-parsers.d.ts +17 -0
- package/dist/types/modules/word/reader/numbering-parser.d.ts +13 -0
- package/dist/types/modules/word/reader/paragraph-section-parsers.d.ts +12 -0
- package/dist/types/modules/word/reader/parse-utils.d.ts +91 -0
- package/dist/types/modules/word/reader/properties-parsers.d.ts +21 -0
- package/dist/types/modules/word/reader/reader-context.d.ts +69 -0
- package/dist/types/modules/word/reader/sdt-helpers.d.ts +29 -0
- package/dist/types/modules/word/reader/settings-parser.d.ts +8 -0
- package/dist/types/modules/word/reader/styles-parser.d.ts +12 -0
- package/dist/types/modules/word/reader/table-properties-parsers.d.ts +12 -0
- package/dist/types/modules/word/reader/theme-parser.d.ts +8 -0
- package/dist/types/modules/word/reader/watermark-parser.d.ts +15 -0
- package/dist/types/modules/word/security/cfb-reader.d.ts +37 -0
- package/dist/types/modules/word/{digital-signatures.d.ts → security/digital-signatures.d.ts} +19 -11
- package/dist/types/modules/word/security/document-protection.d.ts +93 -0
- package/dist/{browser/modules/word → types/modules/word/security}/encryption.d.ts +51 -4
- package/dist/types/modules/word/security/policy.d.ts +80 -0
- package/dist/types/modules/word/template/template-chart.d.ts +56 -0
- package/dist/types/modules/word/template/template-datasource.d.ts +154 -0
- package/dist/types/modules/word/template/template-engine.d.ts +121 -0
- package/dist/types/modules/word/types.d.ts +224 -25
- package/dist/types/modules/word/units.d.ts +26 -0
- package/dist/types/modules/word/writer/checkbox-writer.d.ts +17 -0
- package/dist/{browser/modules/word/writers → types/modules/word/writer}/comment-writer.d.ts +2 -1
- package/dist/types/modules/word/writer/common-parts.d.ts +57 -0
- package/dist/{browser/modules/word → types/modules/word/writer}/content-types.d.ts +2 -2
- package/dist/types/modules/word/writer/document-writer.d.ts +24 -0
- package/dist/types/modules/word/writer/docx-packager.d.ts +35 -0
- package/dist/{browser/modules/word/writers → types/modules/word/writer}/footnote-writer.d.ts +3 -2
- package/dist/{browser/modules/word/writers → types/modules/word/writer}/header-footer-writer.d.ts +3 -2
- package/dist/{browser/modules/word/writers → types/modules/word/writer}/image-writer.d.ts +1 -1
- package/dist/types/modules/word/writer/math-writer.d.ts +20 -0
- package/dist/types/modules/word/{writers → writer}/numbering-writer.d.ts +1 -1
- package/dist/types/modules/word/{writers → writer}/paragraph-writer.d.ts +2 -1
- package/dist/types/modules/word/{writers → writer}/parts-writer.d.ts +3 -3
- package/dist/types/modules/word/writer/reference-scanners.d.ts +42 -0
- package/dist/types/modules/word/writer/relationships.d.ts +52 -0
- package/dist/types/modules/word/writer/render-context.d.ts +124 -0
- package/dist/types/modules/word/{writers → writer}/run-writer.d.ts +10 -1
- package/dist/types/modules/word/writer/sdt-writer.d.ts +25 -0
- package/dist/types/modules/word/writer/stream-buf.d.ts +37 -0
- package/dist/types/modules/word/writer/streaming-writer.d.ts +344 -0
- package/dist/types/modules/word/writer/string-buf.d.ts +8 -0
- package/dist/types/modules/word/{writers → writer}/table-writer.d.ts +2 -1
- package/dist/types/modules/xml/types.d.ts +22 -0
- package/dist/types/utils/crypto.browser.d.ts +3 -1
- package/dist/types/utils/crypto.d.ts +4 -1
- package/dist/types/utils/font-metrics.d.ts +63 -0
- package/dist/types/utils/string-buf.d.ts +42 -0
- package/dist/types/utils/theme-colors.d.ts +55 -0
- package/package.json +121 -39
- package/dist/browser/modules/word/color-utils.js +0 -94
- package/dist/browser/modules/word/document.d.ts +0 -657
- package/dist/browser/modules/word/document.js +0 -1533
- package/dist/browser/modules/word/docx-packager.d.ts +0 -14
- package/dist/browser/modules/word/docx-packager.js +0 -822
- package/dist/browser/modules/word/docx-reader.d.ts +0 -11
- package/dist/browser/modules/word/docx-reader.js +0 -4929
- package/dist/browser/modules/word/encryption.js +0 -274
- package/dist/browser/modules/word/internal-utils.d.ts +0 -23
- package/dist/browser/modules/word/internal-utils.js +0 -54
- package/dist/browser/modules/word/namespaces.d.ts +0 -159
- package/dist/browser/modules/word/namespaces.js +0 -189
- package/dist/browser/modules/word/relationships.d.ts +0 -30
- package/dist/browser/modules/word/relationships.js +0 -48
- package/dist/browser/modules/word/writers/checkbox-writer.d.ts +0 -9
- package/dist/browser/modules/word/writers/checkbox-writer.js +0 -42
- package/dist/browser/modules/word/writers/document-writer.d.ts +0 -16
- package/dist/browser/modules/word/writers/document-writer.js +0 -461
- package/dist/browser/modules/word/writers/math-writer.d.ts +0 -9
- package/dist/cjs/modules/word/color-utils.js +0 -97
- package/dist/cjs/modules/word/document.js +0 -1645
- package/dist/cjs/modules/word/docx-packager.js +0 -825
- package/dist/cjs/modules/word/docx-reader.js +0 -4932
- package/dist/cjs/modules/word/encryption.js +0 -282
- package/dist/cjs/modules/word/internal-utils.js +0 -59
- package/dist/cjs/modules/word/namespaces.js +0 -192
- package/dist/cjs/modules/word/relationships.js +0 -55
- package/dist/cjs/modules/word/writers/checkbox-writer.js +0 -45
- package/dist/cjs/modules/word/writers/document-writer.js +0 -465
- package/dist/esm/modules/word/color-utils.js +0 -94
- package/dist/esm/modules/word/document.js +0 -1533
- package/dist/esm/modules/word/docx-packager.js +0 -822
- package/dist/esm/modules/word/docx-reader.js +0 -4929
- package/dist/esm/modules/word/encryption.js +0 -274
- package/dist/esm/modules/word/internal-utils.js +0 -54
- package/dist/esm/modules/word/namespaces.js +0 -189
- package/dist/esm/modules/word/relationships.js +0 -48
- package/dist/esm/modules/word/writers/checkbox-writer.js +0 -42
- package/dist/esm/modules/word/writers/document-writer.js +0 -461
- package/dist/types/modules/word/document.d.ts +0 -657
- package/dist/types/modules/word/docx-packager.d.ts +0 -14
- package/dist/types/modules/word/docx-reader.d.ts +0 -11
- package/dist/types/modules/word/internal-utils.d.ts +0 -23
- package/dist/types/modules/word/namespaces.d.ts +0 -159
- package/dist/types/modules/word/relationships.d.ts +0 -30
- package/dist/types/modules/word/writers/checkbox-writer.d.ts +0 -9
- package/dist/types/modules/word/writers/document-writer.d.ts +0 -16
- package/dist/types/modules/word/writers/math-writer.d.ts +0 -9
- /package/dist/browser/modules/word/{font-obfuscation.d.ts → font/font-obfuscation.d.ts} +0 -0
- /package/dist/browser/modules/word/{writers → writer}/chart-writer.d.ts +0 -0
- /package/dist/browser/modules/word/{writers → writer}/section-writer.d.ts +0 -0
- /package/dist/browser/modules/word/{writers → writer}/section-writer.js +0 -0
- /package/dist/browser/modules/word/{writers → writer}/styles-writer.d.ts +0 -0
- /package/dist/browser/modules/word/{writers → writer}/textbox-writer.d.ts +0 -0
- /package/dist/browser/modules/word/{writers → writer}/textbox-writer.js +0 -0
- /package/dist/browser/modules/word/{writers → writer}/toc-writer.d.ts +0 -0
- /package/dist/browser/modules/word/{writers → writer}/toc-writer.js +0 -0
- /package/dist/cjs/modules/word/{writers → writer}/section-writer.js +0 -0
- /package/dist/cjs/modules/word/{writers → writer}/textbox-writer.js +0 -0
- /package/dist/cjs/modules/word/{writers → writer}/toc-writer.js +0 -0
- /package/dist/esm/modules/word/{writers → writer}/section-writer.js +0 -0
- /package/dist/esm/modules/word/{writers → writer}/textbox-writer.js +0 -0
- /package/dist/esm/modules/word/{writers → writer}/toc-writer.js +0 -0
- /package/dist/types/modules/word/{font-obfuscation.d.ts → font/font-obfuscation.d.ts} +0 -0
- /package/dist/types/modules/word/{writers → writer}/chart-writer.d.ts +0 -0
- /package/dist/types/modules/word/{writers → writer}/section-writer.d.ts +0 -0
- /package/dist/types/modules/word/{writers → writer}/styles-writer.d.ts +0 -0
- /package/dist/types/modules/word/{writers → writer}/textbox-writer.d.ts +0 -0
- /package/dist/types/modules/word/{writers → writer}/toc-writer.d.ts +0 -0
|
@@ -0,0 +1,617 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Document Merge API
|
|
3
|
+
*
|
|
4
|
+
* Merge multiple DocxDocument bodies into a single document.
|
|
5
|
+
*
|
|
6
|
+
* The first document is taken as the base (its styles, settings, page layout,
|
|
7
|
+
* etc. become the foundation). Each subsequent document is appended after a
|
|
8
|
+
* section break. Numbering definitions, instances and the body references
|
|
9
|
+
* that point to them are rewritten when the appended document collides with
|
|
10
|
+
* IDs already present in the base. Image rIds, footnote/endnote ids and
|
|
11
|
+
* comment ids are also remapped, and the corresponding parts (footnotes,
|
|
12
|
+
* endnotes, comments) are merged so that references emitted in the body
|
|
13
|
+
* still resolve.
|
|
14
|
+
*
|
|
15
|
+
* What is *not* merged today (callers needing these should compose at a
|
|
16
|
+
* higher level):
|
|
17
|
+
* - headers / footers (only the base document's are kept; appended
|
|
18
|
+
* documents' header/footer parts are dropped)
|
|
19
|
+
* - customXmlParts, embeddedFonts, settings, coreProperties, app
|
|
20
|
+
* metadata, theme, document protection, signatures, vbaProject
|
|
21
|
+
*
|
|
22
|
+
* Body content from appended documents is deep-cloned so that callers'
|
|
23
|
+
* models are never mutated.
|
|
24
|
+
*/
|
|
25
|
+
// =============================================================================
|
|
26
|
+
// Public API
|
|
27
|
+
// =============================================================================
|
|
28
|
+
/**
|
|
29
|
+
* Merge multiple DocxDocument bodies into a single document.
|
|
30
|
+
*
|
|
31
|
+
* The first document is used as the base (preserving its styles, numbering,
|
|
32
|
+
* settings, etc.). Subsequent documents' body content is appended with
|
|
33
|
+
* section breaks between them. IDs that collide with the base are remapped
|
|
34
|
+
* during the deep-clone of each appended body:
|
|
35
|
+
* - paragraph numbering refs (numId)
|
|
36
|
+
* - inline / floating image rIds
|
|
37
|
+
* - footnote, endnote and comment references (and their range markers)
|
|
38
|
+
*
|
|
39
|
+
* The corresponding `footnotes`, `endnotes`, `comments` and `images`
|
|
40
|
+
* collections are merged in tandem so references emitted into the body
|
|
41
|
+
* still resolve in the output package.
|
|
42
|
+
*
|
|
43
|
+
* @param documents - Array of documents to merge (at least 1).
|
|
44
|
+
* @param options - Optional merge settings.
|
|
45
|
+
* @returns A new merged DocxDocument.
|
|
46
|
+
*/
|
|
47
|
+
export function mergeDocuments(documents, options) {
|
|
48
|
+
if (documents.length === 0) {
|
|
49
|
+
return { body: [] };
|
|
50
|
+
}
|
|
51
|
+
if (documents.length === 1) {
|
|
52
|
+
return documents[0];
|
|
53
|
+
}
|
|
54
|
+
const base = documents[0];
|
|
55
|
+
const breakType = options?.sectionBreak ?? "nextPage";
|
|
56
|
+
const mergedBody = [...base.body];
|
|
57
|
+
const mergedImages = base.images ? [...base.images] : [];
|
|
58
|
+
const mergedStyles = base.styles ? [...base.styles] : [];
|
|
59
|
+
const existingStyleIds = new Set(mergedStyles.map(s => s.styleId));
|
|
60
|
+
const mergedAbstractNums = base.abstractNumberings
|
|
61
|
+
? [...base.abstractNumberings]
|
|
62
|
+
: [];
|
|
63
|
+
const mergedNumInstances = base.numberingInstances
|
|
64
|
+
? [...base.numberingInstances]
|
|
65
|
+
: [];
|
|
66
|
+
const mergedFootnotes = base.footnotes ? [...base.footnotes] : [];
|
|
67
|
+
const mergedEndnotes = base.endnotes ? [...base.endnotes] : [];
|
|
68
|
+
const mergedComments = base.comments ? [...base.comments] : [];
|
|
69
|
+
for (let i = 1; i < documents.length; i++) {
|
|
70
|
+
const doc = documents[i];
|
|
71
|
+
// Insert section break before appending next document
|
|
72
|
+
const sectionBreakPara = {
|
|
73
|
+
type: "paragraph",
|
|
74
|
+
properties: {
|
|
75
|
+
sectionProperties: {
|
|
76
|
+
breakType
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
children: []
|
|
80
|
+
};
|
|
81
|
+
mergedBody.push(sectionBreakPara);
|
|
82
|
+
// Compute id remappings BEFORE cloning the body so we can rewrite refs
|
|
83
|
+
// during the clone in a single pass.
|
|
84
|
+
const numMaps = mergeNumberingDefinitions(doc, mergedAbstractNums, mergedNumInstances);
|
|
85
|
+
const imageRIdMap = mergeImages(doc, mergedImages);
|
|
86
|
+
const footnoteIdMap = mergeFootnotes(doc, mergedFootnotes);
|
|
87
|
+
const endnoteIdMap = mergeEndnotes(doc, mergedEndnotes);
|
|
88
|
+
const commentIdMap = mergeComments(doc, mergedComments);
|
|
89
|
+
const remap = {
|
|
90
|
+
imageRIdMap,
|
|
91
|
+
numIdMap: numMaps.numIdMap,
|
|
92
|
+
footnoteIdMap,
|
|
93
|
+
endnoteIdMap,
|
|
94
|
+
commentIdMap
|
|
95
|
+
};
|
|
96
|
+
// Deep-clone body and rewrite refs as needed.
|
|
97
|
+
const cloned = doc.body.map(b => cloneBlockWithRemap(b, remap));
|
|
98
|
+
mergedBody.push(...cloned);
|
|
99
|
+
// Merge styles (avoid duplicates by styleId)
|
|
100
|
+
if (doc.styles) {
|
|
101
|
+
for (const style of doc.styles) {
|
|
102
|
+
if (!existingStyleIds.has(style.styleId)) {
|
|
103
|
+
mergedStyles.push(style);
|
|
104
|
+
existingStyleIds.add(style.styleId);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
...base,
|
|
111
|
+
body: mergedBody,
|
|
112
|
+
images: mergedImages.length > 0 ? mergedImages : undefined,
|
|
113
|
+
styles: mergedStyles.length > 0 ? mergedStyles : undefined,
|
|
114
|
+
abstractNumberings: mergedAbstractNums.length > 0 ? mergedAbstractNums : undefined,
|
|
115
|
+
numberingInstances: mergedNumInstances.length > 0 ? mergedNumInstances : undefined,
|
|
116
|
+
footnotes: mergedFootnotes.length > 0 ? mergedFootnotes : undefined,
|
|
117
|
+
endnotes: mergedEndnotes.length > 0 ? mergedEndnotes : undefined,
|
|
118
|
+
comments: mergedComments.length > 0 ? mergedComments : undefined,
|
|
119
|
+
// Use the final document's section properties (page layout) if available
|
|
120
|
+
sectionProperties: documents[documents.length - 1].sectionProperties ?? base.sectionProperties
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
// =============================================================================
|
|
124
|
+
// Image / footnote / endnote / comment merge helpers
|
|
125
|
+
// =============================================================================
|
|
126
|
+
/**
|
|
127
|
+
* Merge `doc.images` into `mergedImages`, returning a map of original rId →
|
|
128
|
+
* final rId for any image whose rId collided with one already in the base.
|
|
129
|
+
*
|
|
130
|
+
* Images are deduplicated only when both rId AND fileName match — different
|
|
131
|
+
* documents may legitimately use the same fileName for different binaries
|
|
132
|
+
* (`image1.png` is overwhelmingly common), so deduping by fileName alone
|
|
133
|
+
* would silently drop content. Conversely, two ImageDefs that share both
|
|
134
|
+
* rId and fileName almost certainly came from the same source document
|
|
135
|
+
* round-tripped through the same writer, so coalescing is safe.
|
|
136
|
+
*/
|
|
137
|
+
function mergeImages(doc, mergedImages) {
|
|
138
|
+
const rIdMap = new Map();
|
|
139
|
+
if (!doc.images || doc.images.length === 0) {
|
|
140
|
+
return rIdMap;
|
|
141
|
+
}
|
|
142
|
+
const usedRIds = new Set(mergedImages.map(m => m.rId).filter((x) => !!x));
|
|
143
|
+
const usedFileNames = new Set(mergedImages.map(m => m.fileName));
|
|
144
|
+
// Caches for O(1) collision checks. The previous implementation called
|
|
145
|
+
// `mergedImages.includes(...)` and `mergedImages.find(...)` per image,
|
|
146
|
+
// which is O(N²) overall — unacceptable for documents with thousands of
|
|
147
|
+
// images.
|
|
148
|
+
const seenObjects = new WeakSet();
|
|
149
|
+
for (const m of mergedImages) {
|
|
150
|
+
seenObjects.add(m);
|
|
151
|
+
}
|
|
152
|
+
const exactByRId = new Map(); // rId → fileNames already merged with that rId
|
|
153
|
+
for (const m of mergedImages) {
|
|
154
|
+
if (m.rId) {
|
|
155
|
+
let names = exactByRId.get(m.rId);
|
|
156
|
+
if (!names) {
|
|
157
|
+
names = new Set();
|
|
158
|
+
exactByRId.set(m.rId, names);
|
|
159
|
+
}
|
|
160
|
+
names.add(m.fileName);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
let nextRIdSuffix = 1;
|
|
164
|
+
const allocFreshRId = (oldRId) => {
|
|
165
|
+
let candidate = `${oldRId}_m${nextRIdSuffix++}`;
|
|
166
|
+
while (usedRIds.has(candidate)) {
|
|
167
|
+
candidate = `${oldRId}_m${nextRIdSuffix++}`;
|
|
168
|
+
}
|
|
169
|
+
return candidate;
|
|
170
|
+
};
|
|
171
|
+
const allocFreshFileName = (oldName) => {
|
|
172
|
+
if (!usedFileNames.has(oldName)) {
|
|
173
|
+
return oldName;
|
|
174
|
+
}
|
|
175
|
+
const dot = oldName.lastIndexOf(".");
|
|
176
|
+
const stem = dot >= 0 ? oldName.slice(0, dot) : oldName;
|
|
177
|
+
const ext = dot >= 0 ? oldName.slice(dot) : "";
|
|
178
|
+
let n = 2;
|
|
179
|
+
let candidate = `${stem}_${n}${ext}`;
|
|
180
|
+
while (usedFileNames.has(candidate)) {
|
|
181
|
+
n++;
|
|
182
|
+
candidate = `${stem}_${n}${ext}`;
|
|
183
|
+
}
|
|
184
|
+
return candidate;
|
|
185
|
+
};
|
|
186
|
+
const recordPush = (img) => {
|
|
187
|
+
seenObjects.add(img);
|
|
188
|
+
if (img.rId) {
|
|
189
|
+
let names = exactByRId.get(img.rId);
|
|
190
|
+
if (!names) {
|
|
191
|
+
names = new Set();
|
|
192
|
+
exactByRId.set(img.rId, names);
|
|
193
|
+
}
|
|
194
|
+
names.add(img.fileName);
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
for (const img of doc.images) {
|
|
198
|
+
// Coalesce identical object references in O(1).
|
|
199
|
+
if (seenObjects.has(img)) {
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
if (!img.rId) {
|
|
203
|
+
// No rId to remap; rename the file conservatively if a different
|
|
204
|
+
// image already claims the name. We can't dedupe by fileName alone
|
|
205
|
+
// because two real documents can both ship `image1.png` with
|
|
206
|
+
// unrelated bytes.
|
|
207
|
+
const fileName = allocFreshFileName(img.fileName);
|
|
208
|
+
const next = fileName === img.fileName ? img : { ...img, fileName };
|
|
209
|
+
mergedImages.push(next);
|
|
210
|
+
usedFileNames.add(fileName);
|
|
211
|
+
recordPush(next);
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
// Coalesce identical (rId, fileName) entries via O(1) lookup.
|
|
215
|
+
const namesForRId = exactByRId.get(img.rId);
|
|
216
|
+
if (namesForRId && namesForRId.has(img.fileName)) {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
const collidesRId = usedRIds.has(img.rId);
|
|
220
|
+
if (!collidesRId) {
|
|
221
|
+
const fileName = allocFreshFileName(img.fileName);
|
|
222
|
+
const next = fileName === img.fileName ? img : { ...img, fileName };
|
|
223
|
+
mergedImages.push(next);
|
|
224
|
+
usedRIds.add(img.rId);
|
|
225
|
+
usedFileNames.add(fileName);
|
|
226
|
+
recordPush(next);
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
// Both rId is taken AND it points at a different image. Remap.
|
|
230
|
+
const newRId = allocFreshRId(img.rId);
|
|
231
|
+
const fileName = allocFreshFileName(img.fileName);
|
|
232
|
+
rIdMap.set(img.rId, newRId);
|
|
233
|
+
const next = {
|
|
234
|
+
...img,
|
|
235
|
+
rId: newRId,
|
|
236
|
+
...(fileName !== img.fileName ? { fileName } : {})
|
|
237
|
+
};
|
|
238
|
+
mergedImages.push(next);
|
|
239
|
+
usedRIds.add(newRId);
|
|
240
|
+
usedFileNames.add(fileName);
|
|
241
|
+
recordPush(next);
|
|
242
|
+
}
|
|
243
|
+
return rIdMap;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Iterative max over a Set/iterable. `Math.max(...set)` triggers a stack
|
|
247
|
+
* overflow on JS engines once the spread argument count exceeds ~10⁵
|
|
248
|
+
* (V8: ~125k); a hostile document with 10⁶ collisionful note ids can
|
|
249
|
+
* easily reach that limit.
|
|
250
|
+
*/
|
|
251
|
+
function maxOf(values) {
|
|
252
|
+
let m = -Infinity;
|
|
253
|
+
for (const v of values) {
|
|
254
|
+
if (v > m) {
|
|
255
|
+
m = v;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return m;
|
|
259
|
+
}
|
|
260
|
+
function mergeFootnotes(doc, merged) {
|
|
261
|
+
const idMap = new Map();
|
|
262
|
+
if (!doc.footnotes || doc.footnotes.length === 0) {
|
|
263
|
+
return idMap;
|
|
264
|
+
}
|
|
265
|
+
const used = new Set(merged.map(n => n.id));
|
|
266
|
+
let nextId = used.size > 0 ? maxOf(used) + 1 : 1;
|
|
267
|
+
for (const note of doc.footnotes) {
|
|
268
|
+
// ids -1 and 0 are reserved for separators and exist only once per
|
|
269
|
+
// document — assume the base already has them and skip duplicates.
|
|
270
|
+
if (note.id <= 0) {
|
|
271
|
+
if (!used.has(note.id)) {
|
|
272
|
+
merged.push(note);
|
|
273
|
+
used.add(note.id);
|
|
274
|
+
}
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
let id = note.id;
|
|
278
|
+
if (used.has(id)) {
|
|
279
|
+
id = nextId++;
|
|
280
|
+
idMap.set(note.id, id);
|
|
281
|
+
}
|
|
282
|
+
else if (id >= nextId) {
|
|
283
|
+
nextId = id + 1;
|
|
284
|
+
}
|
|
285
|
+
used.add(id);
|
|
286
|
+
merged.push(id === note.id ? note : { ...note, id });
|
|
287
|
+
}
|
|
288
|
+
return idMap;
|
|
289
|
+
}
|
|
290
|
+
function mergeEndnotes(doc, merged) {
|
|
291
|
+
const idMap = new Map();
|
|
292
|
+
if (!doc.endnotes || doc.endnotes.length === 0) {
|
|
293
|
+
return idMap;
|
|
294
|
+
}
|
|
295
|
+
const used = new Set(merged.map(n => n.id));
|
|
296
|
+
let nextId = used.size > 0 ? maxOf(used) + 1 : 1;
|
|
297
|
+
for (const note of doc.endnotes) {
|
|
298
|
+
if (note.id <= 0) {
|
|
299
|
+
if (!used.has(note.id)) {
|
|
300
|
+
merged.push(note);
|
|
301
|
+
used.add(note.id);
|
|
302
|
+
}
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
let id = note.id;
|
|
306
|
+
if (used.has(id)) {
|
|
307
|
+
id = nextId++;
|
|
308
|
+
idMap.set(note.id, id);
|
|
309
|
+
}
|
|
310
|
+
else if (id >= nextId) {
|
|
311
|
+
nextId = id + 1;
|
|
312
|
+
}
|
|
313
|
+
used.add(id);
|
|
314
|
+
merged.push(id === note.id ? note : { ...note, id });
|
|
315
|
+
}
|
|
316
|
+
return idMap;
|
|
317
|
+
}
|
|
318
|
+
function mergeComments(doc, merged) {
|
|
319
|
+
const idMap = new Map();
|
|
320
|
+
if (!doc.comments || doc.comments.length === 0) {
|
|
321
|
+
return idMap;
|
|
322
|
+
}
|
|
323
|
+
const used = new Set(merged.map(c => c.id));
|
|
324
|
+
let nextId = used.size > 0 ? maxOf(used) + 1 : 0;
|
|
325
|
+
for (const cmt of doc.comments) {
|
|
326
|
+
let id = cmt.id;
|
|
327
|
+
if (used.has(id)) {
|
|
328
|
+
id = nextId++;
|
|
329
|
+
idMap.set(cmt.id, id);
|
|
330
|
+
}
|
|
331
|
+
else if (id >= nextId) {
|
|
332
|
+
nextId = id + 1;
|
|
333
|
+
}
|
|
334
|
+
used.add(id);
|
|
335
|
+
merged.push(id === cmt.id ? cmt : { ...cmt, id });
|
|
336
|
+
}
|
|
337
|
+
return idMap;
|
|
338
|
+
}
|
|
339
|
+
// =============================================================================
|
|
340
|
+
// Numbering merge
|
|
341
|
+
// =============================================================================
|
|
342
|
+
/**
|
|
343
|
+
* Append `doc`'s numbering definitions/instances into the running merge state,
|
|
344
|
+
* remapping abstractNumIds and numIds that collide with what is already there.
|
|
345
|
+
* The returned maps describe the remapping that callers must apply to body refs.
|
|
346
|
+
*/
|
|
347
|
+
function mergeNumberingDefinitions(doc, mergedAbstractNums, mergedNumInstances) {
|
|
348
|
+
const absIdMap = new Map();
|
|
349
|
+
const numIdMap = new Map();
|
|
350
|
+
if (doc.abstractNumberings && doc.abstractNumberings.length > 0) {
|
|
351
|
+
const existingAbsIds = new Set(mergedAbstractNums.map(a => a.abstractNumId));
|
|
352
|
+
let nextAbsId = existingAbsIds.size > 0 ? maxOf(existingAbsIds) + 1 : 0;
|
|
353
|
+
for (const abs of doc.abstractNumberings) {
|
|
354
|
+
if (existingAbsIds.has(abs.abstractNumId)) {
|
|
355
|
+
const newId = nextAbsId++;
|
|
356
|
+
absIdMap.set(abs.abstractNumId, newId);
|
|
357
|
+
existingAbsIds.add(newId);
|
|
358
|
+
mergedAbstractNums.push({ ...abs, abstractNumId: newId });
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
existingAbsIds.add(abs.abstractNumId);
|
|
362
|
+
mergedAbstractNums.push(abs);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
if (doc.numberingInstances && doc.numberingInstances.length > 0) {
|
|
367
|
+
const existingNumIds = new Set(mergedNumInstances.map(n => n.numId));
|
|
368
|
+
let nextNumId = existingNumIds.size > 0 ? maxOf(existingNumIds) + 1 : 1;
|
|
369
|
+
for (const inst of doc.numberingInstances) {
|
|
370
|
+
const remappedAbsId = absIdMap.get(inst.abstractNumId) ?? inst.abstractNumId;
|
|
371
|
+
let numId = inst.numId;
|
|
372
|
+
if (existingNumIds.has(numId)) {
|
|
373
|
+
numId = nextNumId++;
|
|
374
|
+
numIdMap.set(inst.numId, numId);
|
|
375
|
+
}
|
|
376
|
+
existingNumIds.add(numId);
|
|
377
|
+
mergedNumInstances.push({ ...inst, numId, abstractNumId: remappedAbsId });
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return { absIdMap, numIdMap };
|
|
381
|
+
}
|
|
382
|
+
// =============================================================================
|
|
383
|
+
// Body cloning with remap
|
|
384
|
+
// =============================================================================
|
|
385
|
+
/**
|
|
386
|
+
* Deep-clone a body content block while rewriting any paragraph numbering
|
|
387
|
+
* references, image rIds, and footnote/endnote/comment references through
|
|
388
|
+
* the supplied remap state. The original block is never mutated.
|
|
389
|
+
*/
|
|
390
|
+
function cloneBlockWithRemap(block, remap) {
|
|
391
|
+
switch (block.type) {
|
|
392
|
+
case "paragraph":
|
|
393
|
+
return cloneParagraph(block, remap);
|
|
394
|
+
case "table":
|
|
395
|
+
return cloneTable(block, remap);
|
|
396
|
+
case "sdt":
|
|
397
|
+
return cloneSdt(block, remap);
|
|
398
|
+
case "floatingImage": {
|
|
399
|
+
const cloned = structuredClone(block);
|
|
400
|
+
if (cloned.rId && remap.imageRIdMap.has(cloned.rId)) {
|
|
401
|
+
cloned.rId = remap.imageRIdMap.get(cloned.rId);
|
|
402
|
+
}
|
|
403
|
+
return cloned;
|
|
404
|
+
}
|
|
405
|
+
case "textBox": {
|
|
406
|
+
// textBox.content is `Paragraph[]`; clone each paragraph through the
|
|
407
|
+
// full remap so footnoteRef/endnoteRef/comment/numId/image rIds
|
|
408
|
+
// inside are all rewritten.
|
|
409
|
+
const tb = block;
|
|
410
|
+
const cloned = structuredClone(block);
|
|
411
|
+
if (tb.content && tb.content.length > 0) {
|
|
412
|
+
cloned.content = tb.content.map(p => cloneParagraph(p, remap));
|
|
413
|
+
}
|
|
414
|
+
return cloned;
|
|
415
|
+
}
|
|
416
|
+
case "drawingShape": {
|
|
417
|
+
const shape = block;
|
|
418
|
+
const cloned = structuredClone(block);
|
|
419
|
+
if (shape.textContent && shape.textContent.length > 0) {
|
|
420
|
+
cloned.textContent = shape.textContent.map(p => cloneParagraph(p, remap));
|
|
421
|
+
}
|
|
422
|
+
return cloned;
|
|
423
|
+
}
|
|
424
|
+
case "tableOfContents": {
|
|
425
|
+
const toc = block;
|
|
426
|
+
const cloned = structuredClone(block);
|
|
427
|
+
if (toc.cachedParagraphs && toc.cachedParagraphs.length > 0) {
|
|
428
|
+
cloned.cachedParagraphs = toc.cachedParagraphs.map(p => cloneParagraph(p, remap));
|
|
429
|
+
}
|
|
430
|
+
return cloned;
|
|
431
|
+
}
|
|
432
|
+
default:
|
|
433
|
+
// For chart / altChunk / opaqueDrawing / checkBox / math etc.
|
|
434
|
+
// there's no nested paragraph content the merge cares about; only
|
|
435
|
+
// the top-level rId (when present) needs remapping. structuredClone
|
|
436
|
+
// gives an independent copy, then walk for image rIds carried by
|
|
437
|
+
// image-bearing nodes.
|
|
438
|
+
return remapImageRIdsDeep(structuredClone(block), remap.imageRIdMap);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
function cloneParagraph(para, remap) {
|
|
442
|
+
// Walk and clone children in one pass so we can rewrite refs inline.
|
|
443
|
+
const clonedChildren = structuredClone(para.children);
|
|
444
|
+
for (const child of clonedChildren) {
|
|
445
|
+
remapParagraphChild(child, remap);
|
|
446
|
+
}
|
|
447
|
+
const clonedProps = para.properties
|
|
448
|
+
? cloneParagraphProps(para.properties, remap.numIdMap)
|
|
449
|
+
: undefined;
|
|
450
|
+
const out = {
|
|
451
|
+
...para,
|
|
452
|
+
properties: clonedProps,
|
|
453
|
+
children: clonedChildren
|
|
454
|
+
};
|
|
455
|
+
return out;
|
|
456
|
+
}
|
|
457
|
+
function remapParagraphChild(child, remap) {
|
|
458
|
+
if (!child || typeof child !== "object") {
|
|
459
|
+
return;
|
|
460
|
+
}
|
|
461
|
+
const c = child;
|
|
462
|
+
if ("type" in c) {
|
|
463
|
+
switch (c.type) {
|
|
464
|
+
case "hyperlink":
|
|
465
|
+
if (Array.isArray(c.children)) {
|
|
466
|
+
for (const sub of c.children) {
|
|
467
|
+
remapParagraphChild(sub, remap);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
return;
|
|
471
|
+
case "insertedRun":
|
|
472
|
+
case "movedToRun":
|
|
473
|
+
remapParagraphChild(c.run, remap);
|
|
474
|
+
return;
|
|
475
|
+
case "commentRangeStart":
|
|
476
|
+
case "commentRangeEnd":
|
|
477
|
+
case "commentReference": {
|
|
478
|
+
const idVal = c.id;
|
|
479
|
+
if (typeof idVal === "number" && remap.commentIdMap.has(idVal)) {
|
|
480
|
+
c.id = remap.commentIdMap.get(idVal);
|
|
481
|
+
}
|
|
482
|
+
return;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
// Plain Run with content.
|
|
487
|
+
if (Array.isArray(c.content)) {
|
|
488
|
+
for (const rc of c.content) {
|
|
489
|
+
remapRunContent(rc, remap);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
function remapRunContent(rc, remap) {
|
|
494
|
+
if (!rc || typeof rc !== "object") {
|
|
495
|
+
return;
|
|
496
|
+
}
|
|
497
|
+
const r = rc;
|
|
498
|
+
switch (r.type) {
|
|
499
|
+
case "image": {
|
|
500
|
+
const rId = r.rId;
|
|
501
|
+
if (typeof rId === "string" && remap.imageRIdMap.has(rId)) {
|
|
502
|
+
r.rId = remap.imageRIdMap.get(rId);
|
|
503
|
+
}
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
case "footnoteRef": {
|
|
507
|
+
const id = r.id;
|
|
508
|
+
if (typeof id === "number" && remap.footnoteIdMap.has(id)) {
|
|
509
|
+
r.id = remap.footnoteIdMap.get(id);
|
|
510
|
+
}
|
|
511
|
+
return;
|
|
512
|
+
}
|
|
513
|
+
case "endnoteRef": {
|
|
514
|
+
const id = r.id;
|
|
515
|
+
if (typeof id === "number" && remap.endnoteIdMap.has(id)) {
|
|
516
|
+
r.id = remap.endnoteIdMap.get(id);
|
|
517
|
+
}
|
|
518
|
+
return;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* Walk an opaque cloned subtree and rewrite `rId` fields that point at an
|
|
524
|
+
* image we just remapped. Used for block types we don't model in detail
|
|
525
|
+
* (textBox, drawingShape, chart container, …) so a body image reference
|
|
526
|
+
* moved across documents still resolves.
|
|
527
|
+
*
|
|
528
|
+
* **Critical**: this is restricted to nodes whose `type` field marks them
|
|
529
|
+
* as image carriers (`image`, `floatingImage`, `drawingShape` carrying a
|
|
530
|
+
* blip rId, etc.). The previous implementation rewrote any string `rId`
|
|
531
|
+
* field whose value matched an entry in `imageRIdMap`, which silently
|
|
532
|
+
* broke chart / hyperlink / customXml relationships whenever the appended
|
|
533
|
+
* document happened to assign an image and a chart the same rId number
|
|
534
|
+
* (very common because each rels space numbers from rId1).
|
|
535
|
+
*/
|
|
536
|
+
const IMAGE_CARRIER_TYPES = new Set([
|
|
537
|
+
"image",
|
|
538
|
+
"floatingImage",
|
|
539
|
+
// drawingShape can carry a fill image rId on the top-level node — the
|
|
540
|
+
// shape model exposes it as `rId` on the fill descriptor, not the shape
|
|
541
|
+
// itself, so we whitelist it explicitly when the type matches.
|
|
542
|
+
"drawingShape",
|
|
543
|
+
"opaqueDrawing"
|
|
544
|
+
]);
|
|
545
|
+
function remapImageRIdsDeep(node, imageRIdMap) {
|
|
546
|
+
if (imageRIdMap.size === 0 || !node || typeof node !== "object") {
|
|
547
|
+
return node;
|
|
548
|
+
}
|
|
549
|
+
const stack = [node];
|
|
550
|
+
while (stack.length > 0) {
|
|
551
|
+
const cur = stack.pop();
|
|
552
|
+
if (!cur || typeof cur !== "object") {
|
|
553
|
+
continue;
|
|
554
|
+
}
|
|
555
|
+
if (Array.isArray(cur)) {
|
|
556
|
+
for (const item of cur) {
|
|
557
|
+
stack.push(item);
|
|
558
|
+
}
|
|
559
|
+
continue;
|
|
560
|
+
}
|
|
561
|
+
const obj = cur;
|
|
562
|
+
const t = typeof obj.type === "string" ? obj.type : undefined;
|
|
563
|
+
if (t !== undefined &&
|
|
564
|
+
IMAGE_CARRIER_TYPES.has(t) &&
|
|
565
|
+
typeof obj.rId === "string" &&
|
|
566
|
+
imageRIdMap.has(obj.rId)) {
|
|
567
|
+
obj.rId = imageRIdMap.get(obj.rId);
|
|
568
|
+
}
|
|
569
|
+
for (const key of Object.keys(obj)) {
|
|
570
|
+
const v = obj[key];
|
|
571
|
+
if (v && typeof v === "object") {
|
|
572
|
+
stack.push(v);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
return node;
|
|
577
|
+
}
|
|
578
|
+
function cloneParagraphProps(props, numIdMap) {
|
|
579
|
+
const cloned = structuredClone(props);
|
|
580
|
+
if (cloned.numbering && numIdMap.has(cloned.numbering.numId)) {
|
|
581
|
+
cloned.numbering.numId = numIdMap.get(cloned.numbering.numId);
|
|
582
|
+
}
|
|
583
|
+
return cloned;
|
|
584
|
+
}
|
|
585
|
+
function cloneTable(table, remap) {
|
|
586
|
+
return {
|
|
587
|
+
...table,
|
|
588
|
+
rows: table.rows.map(r => cloneRow(r, remap))
|
|
589
|
+
};
|
|
590
|
+
}
|
|
591
|
+
function cloneRow(row, remap) {
|
|
592
|
+
return {
|
|
593
|
+
...row,
|
|
594
|
+
cells: row.cells.map(c => cloneCell(c, remap))
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
function cloneCell(cell, remap) {
|
|
598
|
+
return {
|
|
599
|
+
...cell,
|
|
600
|
+
content: cell.content.map(item => cloneBlockWithRemap(item, remap))
|
|
601
|
+
};
|
|
602
|
+
}
|
|
603
|
+
function cloneSdt(sdt, remap) {
|
|
604
|
+
return {
|
|
605
|
+
...sdt,
|
|
606
|
+
content: sdt.content.map(c => {
|
|
607
|
+
if ("type" in c && (c.type === "paragraph" || c.type === "table")) {
|
|
608
|
+
return cloneBlockWithRemap(c, remap);
|
|
609
|
+
}
|
|
610
|
+
// Run / other in-line children inside an inline SDT: clone and
|
|
611
|
+
// remap refs in place.
|
|
612
|
+
const cloned = structuredClone(c);
|
|
613
|
+
remapParagraphChild(cloned, remap);
|
|
614
|
+
return cloned;
|
|
615
|
+
})
|
|
616
|
+
};
|
|
617
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Document Replace API
|
|
3
|
+
*
|
|
4
|
+
* Uses the unified walker from core/walker.ts for consistent traversal
|
|
5
|
+
* across body, headers, footers, footnotes, endnotes, comments, and SDTs.
|
|
6
|
+
*
|
|
7
|
+
* Note: This API mutates the document in place for backward compatibility.
|
|
8
|
+
*
|
|
9
|
+
* Implementation notes:
|
|
10
|
+
* We always operate on the paragraph's concatenated plain text and the
|
|
11
|
+
* ordered list of text-bearing run-content nodes ("text segments").
|
|
12
|
+
* This guarantees consistent semantics regardless of whether matches sit
|
|
13
|
+
* inside a single run or straddle multiple runs:
|
|
14
|
+
* 1. Build segment table [seg0, seg1, ...] with absolute offsets.
|
|
15
|
+
* 2. Compute every match using a global regex (string searches are
|
|
16
|
+
* promoted to a global regex with the literal escaped).
|
|
17
|
+
* 3. Walk segments and matches together. For each segment we emit:
|
|
18
|
+
* - the literal (un-matched) prefix/middle/suffix slices, and
|
|
19
|
+
* - the replacement string the first time we see each match.
|
|
20
|
+
* Subsequent segments overlapping the same match contribute the empty
|
|
21
|
+
* string (so the replacement is not duplicated) but otherwise keep
|
|
22
|
+
* their original formatting (RunProperties remain on the parent run).
|
|
23
|
+
* The returned count equals the number of matches actually replaced.
|
|
24
|
+
*/
|
|
25
|
+
import type { DocxDocument } from "../types.js";
|
|
26
|
+
/**
|
|
27
|
+
* Replace text in a document (mutates in place).
|
|
28
|
+
*
|
|
29
|
+
* Performs document-wide text replacement within run content. Matches are
|
|
30
|
+
* applied uniformly whether they fall inside a single run or span several
|
|
31
|
+
* runs; the formatting of each run that survives the replacement is preserved.
|
|
32
|
+
*
|
|
33
|
+
* Traverses body, headers, footers, footnotes, endnotes, comments, tables, and
|
|
34
|
+
* SDTs using the unified document walker. SDTs may carry inline runs without
|
|
35
|
+
* an enclosing paragraph (content controls wrapping a single Run); those
|
|
36
|
+
* inline runs are treated as a single virtual paragraph for replacement.
|
|
37
|
+
*
|
|
38
|
+
* @param doc - The document model to modify (mutated in place).
|
|
39
|
+
* @param search - String or RegExp to find. Both are treated as global
|
|
40
|
+
* (every occurrence is replaced); the `g` flag on a RegExp
|
|
41
|
+
* is therefore optional.
|
|
42
|
+
* @param replacement - Replacement string. When `search` is a RegExp the
|
|
43
|
+
* replacement supports the standard `$1`/`$&`/`$$` etc.
|
|
44
|
+
* backreferences.
|
|
45
|
+
* @returns The exact number of replacements made.
|
|
46
|
+
*/
|
|
47
|
+
export declare function replaceText(doc: DocxDocument, search: string | RegExp, replacement: string): number;
|