@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,410 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOCX Module - CFB (Compound File Binary) Reader
|
|
3
|
+
*
|
|
4
|
+
* Minimal reader for OLE2/CFB format used by encrypted Office documents.
|
|
5
|
+
* Implements enough of MS-CFB to extract named streams (EncryptionInfo, EncryptedPackage).
|
|
6
|
+
*
|
|
7
|
+
* References:
|
|
8
|
+
* - MS-CFB: Compound File Binary File Format
|
|
9
|
+
* - https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb
|
|
10
|
+
*/
|
|
11
|
+
import { DocxParseError } from "../errors.js";
|
|
12
|
+
/** CFB file signature: D0CF11E0A1B11AE1. */
|
|
13
|
+
const CFB_SIGNATURE = [0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1];
|
|
14
|
+
/** Special sector values. */
|
|
15
|
+
const ENDOFCHAIN = 0xfffffffe;
|
|
16
|
+
const FREESECT = 0xffffffff;
|
|
17
|
+
const _FATSECT = 0xfffffffd;
|
|
18
|
+
/**
|
|
19
|
+
* Read a CFB (OLE2 Compound File) and extract all stream entries.
|
|
20
|
+
*
|
|
21
|
+
* Only reads v3 and v4 CFB files (sector sizes 512 and 4096).
|
|
22
|
+
*
|
|
23
|
+
* @param buffer - The CFB file data.
|
|
24
|
+
* @returns Array of named stream entries.
|
|
25
|
+
*/
|
|
26
|
+
export function readCfb(buffer) {
|
|
27
|
+
if (buffer.length < 512) {
|
|
28
|
+
throw new DocxParseError("CFB: file too small");
|
|
29
|
+
}
|
|
30
|
+
// Verify signature
|
|
31
|
+
for (let i = 0; i < 8; i++) {
|
|
32
|
+
if (buffer[i] !== CFB_SIGNATURE[i]) {
|
|
33
|
+
throw new DocxParseError("CFB: invalid signature");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
|
|
37
|
+
// Header fields
|
|
38
|
+
const majorVersion = view.getUint16(26, true);
|
|
39
|
+
const sectorSize = majorVersion === 4 ? 4096 : 512;
|
|
40
|
+
const miniSectorSize = 64;
|
|
41
|
+
const miniStreamCutoff = view.getUint32(56, true); // usually 4096
|
|
42
|
+
const fatSectorCount = view.getUint32(44, true);
|
|
43
|
+
const firstDirectorySector = view.getUint32(48, true);
|
|
44
|
+
const firstMiniFatSector = view.getUint32(60, true);
|
|
45
|
+
const miniFatSectorCount = view.getUint32(64, true);
|
|
46
|
+
const firstDifatSector = view.getUint32(68, true);
|
|
47
|
+
const difatSectorCount = view.getUint32(72, true);
|
|
48
|
+
// Helper: sector offset in file
|
|
49
|
+
const sectorOffset = (sector) => (sector + 1) * sectorSize;
|
|
50
|
+
// Read DIFAT: first 109 entries in header, then chained
|
|
51
|
+
const difat = [];
|
|
52
|
+
for (let i = 0; i < 109 && difat.length < fatSectorCount; i++) {
|
|
53
|
+
const val = view.getUint32(76 + i * 4, true);
|
|
54
|
+
if (val !== FREESECT && val !== ENDOFCHAIN) {
|
|
55
|
+
difat.push(val);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Follow DIFAT chain
|
|
59
|
+
let difatSector = firstDifatSector;
|
|
60
|
+
for (let i = 0; i < difatSectorCount && difatSector !== ENDOFCHAIN; i++) {
|
|
61
|
+
const off = sectorOffset(difatSector);
|
|
62
|
+
const entriesPerSector = sectorSize / 4 - 1; // last 4 bytes = next DIFAT sector
|
|
63
|
+
for (let j = 0; j < entriesPerSector && difat.length < fatSectorCount; j++) {
|
|
64
|
+
const val = view.getUint32(off + j * 4, true);
|
|
65
|
+
if (val !== FREESECT && val !== ENDOFCHAIN) {
|
|
66
|
+
difat.push(val);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
difatSector = view.getUint32(off + entriesPerSector * 4, true);
|
|
70
|
+
}
|
|
71
|
+
// Build FAT (sector allocation table).
|
|
72
|
+
//
|
|
73
|
+
// `fatSectorCount` comes from the file header and is attacker-controlled.
|
|
74
|
+
// A hostile CFB advertising `fatSectorCount = 100_000` would push us to
|
|
75
|
+
// build a FAT array with ~12.8M Uint32 entries (~100 MB at JS object
|
|
76
|
+
// overhead). Cap it conservatively — real DOCX-encryption packages have
|
|
77
|
+
// at most a few dozen FAT sectors.
|
|
78
|
+
const MAX_FAT_ENTRIES = 1000000;
|
|
79
|
+
const fat = [];
|
|
80
|
+
for (const fatSec of difat) {
|
|
81
|
+
const off = sectorOffset(fatSec);
|
|
82
|
+
for (let i = 0; i < sectorSize / 4; i++) {
|
|
83
|
+
if (fat.length >= MAX_FAT_ENTRIES) {
|
|
84
|
+
throw new Error(`CFB FAT exceeds maximum entry count (${MAX_FAT_ENTRIES}). ` +
|
|
85
|
+
`Aborting to avoid runaway memory consumption.`);
|
|
86
|
+
}
|
|
87
|
+
fat.push(view.getUint32(off + i * 4, true));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Read sector chain.
|
|
91
|
+
//
|
|
92
|
+
// Resource limits:
|
|
93
|
+
// - `visited` already protects against infinite cycles.
|
|
94
|
+
// - We additionally cap the total bytes assembled per chain at 256 MB
|
|
95
|
+
// to bound memory consumption when a malicious CFB advertises a
|
|
96
|
+
// legitimately-shaped but enormous chain. Real DOCX-encryption
|
|
97
|
+
// packages are well under this; the cap exists to fail fast on
|
|
98
|
+
// hostile input rather than burn memory.
|
|
99
|
+
const MAX_CHAIN_BYTES = 256 * 1024 * 1024;
|
|
100
|
+
const readChain = (startSector) => {
|
|
101
|
+
const sectors = [];
|
|
102
|
+
let sector = startSector;
|
|
103
|
+
let totalBytes = 0;
|
|
104
|
+
const visited = new Set();
|
|
105
|
+
while (sector !== ENDOFCHAIN && sector < fat.length && !visited.has(sector)) {
|
|
106
|
+
visited.add(sector);
|
|
107
|
+
const off = sectorOffset(sector);
|
|
108
|
+
if (off + sectorSize <= buffer.length) {
|
|
109
|
+
sectors.push(buffer.slice(off, off + sectorSize));
|
|
110
|
+
totalBytes += sectorSize;
|
|
111
|
+
if (totalBytes > MAX_CHAIN_BYTES) {
|
|
112
|
+
throw new Error(`CFB sector chain exceeds maximum size (${MAX_CHAIN_BYTES} bytes). ` +
|
|
113
|
+
`Aborting to avoid runaway memory consumption.`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
sector = fat[sector];
|
|
117
|
+
}
|
|
118
|
+
// Concatenate
|
|
119
|
+
const total = sectors.reduce((sum, s) => sum + s.length, 0);
|
|
120
|
+
const result = new Uint8Array(total);
|
|
121
|
+
let pos = 0;
|
|
122
|
+
for (const s of sectors) {
|
|
123
|
+
result.set(s, pos);
|
|
124
|
+
pos += s.length;
|
|
125
|
+
}
|
|
126
|
+
return result;
|
|
127
|
+
};
|
|
128
|
+
// Read directory entries
|
|
129
|
+
const dirData = readChain(firstDirectorySector);
|
|
130
|
+
const dirView = new DataView(dirData.buffer, dirData.byteOffset, dirData.byteLength);
|
|
131
|
+
const dirEntrySize = 128;
|
|
132
|
+
const numDirEntries = Math.floor(dirData.length / dirEntrySize);
|
|
133
|
+
const dirEntries = [];
|
|
134
|
+
for (let i = 0; i < numDirEntries; i++) {
|
|
135
|
+
const off = i * dirEntrySize;
|
|
136
|
+
const nameSize = dirView.getUint16(off + 64, true); // bytes (including null terminator)
|
|
137
|
+
const type = dirView.getUint8(off + 66);
|
|
138
|
+
const startSector = dirView.getUint32(off + 116, true);
|
|
139
|
+
const size = majorVersion === 4
|
|
140
|
+
? Number(dirView.getBigUint64(off + 120, true))
|
|
141
|
+
: dirView.getUint32(off + 120, true);
|
|
142
|
+
// Decode UTF-16LE name (nameSize includes null terminator)
|
|
143
|
+
let name = "";
|
|
144
|
+
const nameLen = Math.max(0, nameSize - 2); // exclude null terminator
|
|
145
|
+
for (let j = 0; j < nameLen; j += 2) {
|
|
146
|
+
name += String.fromCharCode(dirView.getUint16(off + j, true));
|
|
147
|
+
}
|
|
148
|
+
dirEntries.push({ name, type, startSector, size });
|
|
149
|
+
}
|
|
150
|
+
// Build mini-FAT if needed
|
|
151
|
+
const miniFat = [];
|
|
152
|
+
if (miniFatSectorCount > 0 && firstMiniFatSector !== ENDOFCHAIN) {
|
|
153
|
+
const miniFatData = readChain(firstMiniFatSector);
|
|
154
|
+
const mfView = new DataView(miniFatData.buffer, miniFatData.byteOffset, miniFatData.byteLength);
|
|
155
|
+
for (let i = 0; i < miniFatData.length / 4; i++) {
|
|
156
|
+
miniFat.push(mfView.getUint32(i * 4, true));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Read mini-stream (from root entry's chain)
|
|
160
|
+
let miniStream;
|
|
161
|
+
const rootEntry = dirEntries[0];
|
|
162
|
+
if (rootEntry && rootEntry.type === 5 && rootEntry.startSector !== ENDOFCHAIN) {
|
|
163
|
+
miniStream = readChain(rootEntry.startSector);
|
|
164
|
+
}
|
|
165
|
+
// Read a stream from mini-sectors. The declared `size` originates from a
|
|
166
|
+
// directory entry inside the file and must therefore be treated as
|
|
167
|
+
// untrusted; cap it at the actual mini-stream length to prevent malformed
|
|
168
|
+
// CFB containers from triggering oversized buffer allocations.
|
|
169
|
+
const readMiniChain = (startSector, size) => {
|
|
170
|
+
if (!miniStream) {
|
|
171
|
+
return new Uint8Array(0);
|
|
172
|
+
}
|
|
173
|
+
const safeSize = Math.max(0, Math.min(size, miniStream.length));
|
|
174
|
+
const result = new Uint8Array(safeSize);
|
|
175
|
+
let sector = startSector;
|
|
176
|
+
let pos = 0;
|
|
177
|
+
const visited = new Set();
|
|
178
|
+
while (sector !== ENDOFCHAIN && pos < safeSize && !visited.has(sector)) {
|
|
179
|
+
visited.add(sector);
|
|
180
|
+
const off = sector * miniSectorSize;
|
|
181
|
+
const copyLen = Math.min(miniSectorSize, safeSize - pos);
|
|
182
|
+
if (off + copyLen <= miniStream.length) {
|
|
183
|
+
result.set(miniStream.slice(off, off + copyLen), pos);
|
|
184
|
+
}
|
|
185
|
+
pos += copyLen;
|
|
186
|
+
sector = sector < miniFat.length ? miniFat[sector] : ENDOFCHAIN;
|
|
187
|
+
}
|
|
188
|
+
return result;
|
|
189
|
+
};
|
|
190
|
+
// Extract stream entries
|
|
191
|
+
const entries = [];
|
|
192
|
+
for (let i = 1; i < dirEntries.length; i++) {
|
|
193
|
+
const entry = dirEntries[i];
|
|
194
|
+
if (entry.type !== 2 || entry.name === "") {
|
|
195
|
+
continue;
|
|
196
|
+
} // only stream entries
|
|
197
|
+
// The directory's declared stream size cannot exceed the size of the
|
|
198
|
+
// backing storage. Without this clamp a malformed `size` field could
|
|
199
|
+
// request a multi-GiB allocation in `slice(0, entry.size)`.
|
|
200
|
+
const safeSize = Math.max(0, Math.min(entry.size, buffer.length));
|
|
201
|
+
let data;
|
|
202
|
+
if (safeSize < miniStreamCutoff) {
|
|
203
|
+
// Read from mini-stream
|
|
204
|
+
data = readMiniChain(entry.startSector, safeSize);
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
// Read from regular sectors
|
|
208
|
+
const raw = readChain(entry.startSector);
|
|
209
|
+
data = raw.slice(0, safeSize);
|
|
210
|
+
}
|
|
211
|
+
entries.push({ name: entry.name, data });
|
|
212
|
+
}
|
|
213
|
+
return entries;
|
|
214
|
+
}
|
|
215
|
+
// =============================================================================
|
|
216
|
+
// CFB Writer (v3, sector size 512)
|
|
217
|
+
// =============================================================================
|
|
218
|
+
/**
|
|
219
|
+
* Write a set of named stream entries into a CFB (OLE2 Compound File) container.
|
|
220
|
+
*
|
|
221
|
+
* Produces a minimal v3 CFB with 512-byte sectors. Does not use mini-streams
|
|
222
|
+
* (all data is stored in regular sectors). This is suitable for encrypted Office
|
|
223
|
+
* documents where every stream exceeds 4096 bytes.
|
|
224
|
+
*
|
|
225
|
+
* @param entries - Named stream entries to include.
|
|
226
|
+
* @returns The CFB file as a Uint8Array.
|
|
227
|
+
*/
|
|
228
|
+
export function writeCfb(entries) {
|
|
229
|
+
const SECTOR_SIZE = 512;
|
|
230
|
+
const DIR_ENTRY_SIZE = 128;
|
|
231
|
+
// Compute sector count for each entry
|
|
232
|
+
const entrySectors = entries.map(e => Math.ceil(e.data.length / SECTOR_SIZE));
|
|
233
|
+
// Directory entries: Root Entry + one per stream entry
|
|
234
|
+
const dirEntryCount = 1 + entries.length;
|
|
235
|
+
const dirSectors = Math.ceil((dirEntryCount * DIR_ENTRY_SIZE) / SECTOR_SIZE);
|
|
236
|
+
// Total data sectors
|
|
237
|
+
const totalDataSectors = entrySectors.reduce((a, b) => a + b, 0);
|
|
238
|
+
// FAT entries needed: directory sectors + data sectors + FAT sectors themselves
|
|
239
|
+
// We solve iteratively since FAT sectors count depends on total sector count
|
|
240
|
+
let fatSectors = 1;
|
|
241
|
+
while (true) {
|
|
242
|
+
const totalSectors = dirSectors + totalDataSectors + fatSectors;
|
|
243
|
+
const fatCapacity = fatSectors * (SECTOR_SIZE / 4);
|
|
244
|
+
if (fatCapacity >= totalSectors) {
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
fatSectors++;
|
|
248
|
+
}
|
|
249
|
+
const totalSectors = dirSectors + totalDataSectors + fatSectors;
|
|
250
|
+
const fileSize = (1 + totalSectors) * SECTOR_SIZE; // +1 for header sector
|
|
251
|
+
const output = new Uint8Array(fileSize);
|
|
252
|
+
const view = new DataView(output.buffer);
|
|
253
|
+
// --- Header (sector 0 area, 512 bytes) ---
|
|
254
|
+
// Signature
|
|
255
|
+
const sig = [0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1];
|
|
256
|
+
for (let i = 0; i < 8; i++) {
|
|
257
|
+
output[i] = sig[i];
|
|
258
|
+
}
|
|
259
|
+
// Minor version = 0x003E, Major version = 0x0003 (v3)
|
|
260
|
+
view.setUint16(24, 0x003e, true);
|
|
261
|
+
view.setUint16(26, 0x0003, true);
|
|
262
|
+
// Byte order = 0xFFFE (little-endian)
|
|
263
|
+
view.setUint16(28, 0xfffe, true);
|
|
264
|
+
// Sector size power = 9 (2^9 = 512)
|
|
265
|
+
view.setUint16(30, 9, true);
|
|
266
|
+
// Mini sector size power = 6 (2^6 = 64)
|
|
267
|
+
view.setUint16(32, 6, true);
|
|
268
|
+
// Total sectors in directory (v3: must be 0)
|
|
269
|
+
view.setUint32(40, 0, true);
|
|
270
|
+
// Total FAT sectors
|
|
271
|
+
view.setUint32(44, fatSectors, true);
|
|
272
|
+
// First directory sector SECT
|
|
273
|
+
// Layout: [FAT sectors] [Directory sectors] [Data sectors]
|
|
274
|
+
const firstDirSector = fatSectors;
|
|
275
|
+
view.setUint32(48, firstDirSector, true);
|
|
276
|
+
// Transaction signature number
|
|
277
|
+
view.setUint32(52, 0, true);
|
|
278
|
+
// Mini stream cutoff = 0 (all streams stored in regular sectors)
|
|
279
|
+
view.setUint32(56, 0, true);
|
|
280
|
+
// First mini FAT sector = ENDOFCHAIN (none)
|
|
281
|
+
view.setUint32(60, ENDOFCHAIN, true);
|
|
282
|
+
// Mini FAT sector count = 0
|
|
283
|
+
view.setUint32(64, 0, true);
|
|
284
|
+
// First DIFAT sector = ENDOFCHAIN (none needed, <=109 FAT sectors)
|
|
285
|
+
view.setUint32(68, ENDOFCHAIN, true);
|
|
286
|
+
// DIFAT sector count = 0
|
|
287
|
+
view.setUint32(72, 0, true);
|
|
288
|
+
// DIFAT array in header (109 entries starting at offset 76)
|
|
289
|
+
for (let i = 0; i < 109; i++) {
|
|
290
|
+
view.setUint32(76 + i * 4, i < fatSectors ? i : FREESECT, true);
|
|
291
|
+
}
|
|
292
|
+
// --- Build FAT ---
|
|
293
|
+
const fatOffset = SECTOR_SIZE; // FAT starts at sector 0 in file
|
|
294
|
+
const fatView = new DataView(output.buffer, fatOffset, fatSectors * SECTOR_SIZE);
|
|
295
|
+
// Initialize all FAT entries to FREESECT
|
|
296
|
+
for (let i = 0; i < fatSectors * (SECTOR_SIZE / 4); i++) {
|
|
297
|
+
fatView.setUint32(i * 4, FREESECT, true);
|
|
298
|
+
}
|
|
299
|
+
let sectorIdx = 0;
|
|
300
|
+
// FAT sectors themselves are marked as 0xFFFFFFFD (FATSECT)
|
|
301
|
+
for (let i = 0; i < fatSectors; i++) {
|
|
302
|
+
fatView.setUint32(sectorIdx * 4, 0xfffffffd, true);
|
|
303
|
+
sectorIdx++;
|
|
304
|
+
}
|
|
305
|
+
// Directory sectors chain
|
|
306
|
+
for (let i = 0; i < dirSectors; i++) {
|
|
307
|
+
const next = i < dirSectors - 1 ? sectorIdx + 1 : ENDOFCHAIN;
|
|
308
|
+
fatView.setUint32(sectorIdx * 4, next, true);
|
|
309
|
+
sectorIdx++;
|
|
310
|
+
}
|
|
311
|
+
// Data sectors for each entry
|
|
312
|
+
const entryStartSectors = [];
|
|
313
|
+
for (let e = 0; e < entries.length; e++) {
|
|
314
|
+
entryStartSectors.push(sectorIdx);
|
|
315
|
+
for (let i = 0; i < entrySectors[e]; i++) {
|
|
316
|
+
const next = i < entrySectors[e] - 1 ? sectorIdx + 1 : ENDOFCHAIN;
|
|
317
|
+
fatView.setUint32(sectorIdx * 4, next, true);
|
|
318
|
+
sectorIdx++;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
// --- Write Directory ---
|
|
322
|
+
const dirFileOffset = (1 + firstDirSector) * SECTOR_SIZE;
|
|
323
|
+
// Helper: write UTF-16LE name into directory entry
|
|
324
|
+
const writeDirName = (off, name) => {
|
|
325
|
+
for (let i = 0; i < name.length && i < 31; i++) {
|
|
326
|
+
view.setUint16(off + i * 2, name.charCodeAt(i), true);
|
|
327
|
+
}
|
|
328
|
+
// Null terminator
|
|
329
|
+
view.setUint16(off + name.length * 2, 0, true);
|
|
330
|
+
// Name size in bytes (including null terminator)
|
|
331
|
+
view.setUint16(off + 64, (name.length + 1) * 2, true);
|
|
332
|
+
};
|
|
333
|
+
// Root Entry (index 0)
|
|
334
|
+
const rootOff = dirFileOffset;
|
|
335
|
+
writeDirName(rootOff, "Root Entry");
|
|
336
|
+
output[rootOff + 66] = 5; // type = root storage
|
|
337
|
+
output[rootOff + 67] = 1; // color = black
|
|
338
|
+
// Child (left/right/child SIDs) - set up a simple tree
|
|
339
|
+
view.setUint32(rootOff + 68, 0xffffffff, true); // left sibling
|
|
340
|
+
view.setUint32(rootOff + 72, 0xffffffff, true); // right sibling
|
|
341
|
+
// Root entry child points to first entry (or 0xFFFFFFFF if none)
|
|
342
|
+
if (entries.length > 0) {
|
|
343
|
+
// Build a balanced-ish tree: use the middle entry as child
|
|
344
|
+
const rootChild = entries.length === 1 ? 1 : Math.ceil(entries.length / 2);
|
|
345
|
+
view.setUint32(rootOff + 76, rootChild, true);
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
view.setUint32(rootOff + 76, 0xffffffff, true);
|
|
349
|
+
}
|
|
350
|
+
// Start sector = ENDOFCHAIN (no mini-stream)
|
|
351
|
+
view.setUint32(rootOff + 116, ENDOFCHAIN, true);
|
|
352
|
+
// Size = 0
|
|
353
|
+
view.setUint32(rootOff + 120, 0, true);
|
|
354
|
+
// Stream entries (index 1..N)
|
|
355
|
+
// Build as a red-black tree: simple approach — balanced binary tree
|
|
356
|
+
// For small entry counts (2-3), just arrange siblings
|
|
357
|
+
const buildTree = (indices) => {
|
|
358
|
+
// Map each entry to its left/right sibling
|
|
359
|
+
const nodes = indices.map(idx => ({
|
|
360
|
+
leftSib: 0xffffffff,
|
|
361
|
+
rightSib: 0xffffffff,
|
|
362
|
+
root: idx
|
|
363
|
+
}));
|
|
364
|
+
if (indices.length <= 1) {
|
|
365
|
+
return nodes;
|
|
366
|
+
}
|
|
367
|
+
// Simple sorted insertion: entry at mid is root, left half is left subtree, right half is right subtree
|
|
368
|
+
const assignTree = (arr) => {
|
|
369
|
+
if (arr.length === 0) {
|
|
370
|
+
return 0xffffffff;
|
|
371
|
+
}
|
|
372
|
+
const mid = Math.floor(arr.length / 2);
|
|
373
|
+
const midIdx = arr[mid];
|
|
374
|
+
const nodeEntry = nodes.find(n => n.root === midIdx);
|
|
375
|
+
nodeEntry.leftSib = assignTree(arr.slice(0, mid));
|
|
376
|
+
nodeEntry.rightSib = assignTree(arr.slice(mid + 1));
|
|
377
|
+
return midIdx;
|
|
378
|
+
};
|
|
379
|
+
assignTree(indices);
|
|
380
|
+
return nodes;
|
|
381
|
+
};
|
|
382
|
+
const dirIndices = entries.map((_, i) => i + 1); // 1-based directory indices
|
|
383
|
+
const treeNodes = buildTree(dirIndices);
|
|
384
|
+
for (let e = 0; e < entries.length; e++) {
|
|
385
|
+
const entryOff = dirFileOffset + (e + 1) * DIR_ENTRY_SIZE;
|
|
386
|
+
writeDirName(entryOff, entries[e].name);
|
|
387
|
+
output[entryOff + 66] = 2; // type = stream
|
|
388
|
+
output[entryOff + 67] = 1; // color = black
|
|
389
|
+
const node = treeNodes.find(n => n.root === e + 1);
|
|
390
|
+
view.setUint32(entryOff + 68, node.leftSib, true); // left sibling
|
|
391
|
+
view.setUint32(entryOff + 72, node.rightSib, true); // right sibling
|
|
392
|
+
view.setUint32(entryOff + 76, 0xffffffff, true); // child (streams have none)
|
|
393
|
+
// Start sector
|
|
394
|
+
view.setUint32(entryOff + 116, entryStartSectors[e], true);
|
|
395
|
+
// Size (32-bit for v3)
|
|
396
|
+
view.setUint32(entryOff + 120, entries[e].data.length, true);
|
|
397
|
+
}
|
|
398
|
+
// Update root entry child to the tree root
|
|
399
|
+
if (entries.length > 0) {
|
|
400
|
+
const sortedIndices = dirIndices.slice();
|
|
401
|
+
const mid = Math.floor(sortedIndices.length / 2);
|
|
402
|
+
view.setUint32(rootOff + 76, sortedIndices[mid], true);
|
|
403
|
+
}
|
|
404
|
+
// --- Write Data Sectors ---
|
|
405
|
+
for (let e = 0; e < entries.length; e++) {
|
|
406
|
+
const dataFileOffset = (1 + entryStartSectors[e]) * SECTOR_SIZE;
|
|
407
|
+
output.set(entries[e].data, dataFileOffset);
|
|
408
|
+
}
|
|
409
|
+
return output;
|
|
410
|
+
}
|
|
@@ -13,14 +13,17 @@
|
|
|
13
13
|
* - Detection and extraction of signature metadata
|
|
14
14
|
* - Preservation of signatures through round-trip (via opaqueParts)
|
|
15
15
|
*
|
|
16
|
-
* Note:
|
|
17
|
-
*
|
|
18
|
-
*
|
|
16
|
+
* Note: This module does NOT validate signature integrity (would require
|
|
17
|
+
* full XMLDSig + Canonical XML implementation). Signatures are preserved
|
|
18
|
+
* verbatim but become invalid if the package contents change.
|
|
19
19
|
*
|
|
20
20
|
* References:
|
|
21
|
-
* -
|
|
21
|
+
* - MS-OFFCRYPTO §3.2.6 Digital Signatures
|
|
22
22
|
* - XMLDSig: https://www.w3.org/TR/xmldsig-core/
|
|
23
23
|
*/
|
|
24
|
+
import { xmlDecode } from "../../xml/encode.js";
|
|
25
|
+
import { utf8Decoder } from "../core/internal-utils.js";
|
|
26
|
+
import { getFileName } from "../core/opc-paths.js";
|
|
24
27
|
/**
|
|
25
28
|
* Check if a document has digital signatures.
|
|
26
29
|
*
|
|
@@ -40,33 +43,34 @@ export function hasDigitalSignatures(opaquePaths) {
|
|
|
40
43
|
export function parseSignatureXml(xmlStr, fileName) {
|
|
41
44
|
const info = {
|
|
42
45
|
rawXml: xmlStr,
|
|
43
|
-
fileName
|
|
46
|
+
fileName,
|
|
47
|
+
cryptographicStatus: "not-verified"
|
|
44
48
|
};
|
|
45
49
|
// Extract Office-specific metadata from <SignatureInfoV1>
|
|
46
50
|
const sigTextMatch = /<SignatureText[^>]*>([^<]*)<\/SignatureText>/.exec(xmlStr);
|
|
47
51
|
if (sigTextMatch) {
|
|
48
|
-
info.signer =
|
|
52
|
+
info.signer = xmlDecode(sigTextMatch[1]);
|
|
49
53
|
}
|
|
50
54
|
const sigCommentsMatch = /<SignatureComments[^>]*>([^<]*)<\/SignatureComments>/.exec(xmlStr);
|
|
51
55
|
if (sigCommentsMatch) {
|
|
52
|
-
info.signatureComments =
|
|
56
|
+
info.signatureComments = xmlDecode(sigCommentsMatch[1]);
|
|
53
57
|
}
|
|
54
58
|
const purposeMatch = /<SignaturePurpose[^>]*>([^<]*)<\/SignaturePurpose>/.exec(xmlStr);
|
|
55
59
|
if (purposeMatch) {
|
|
56
|
-
info.purpose =
|
|
60
|
+
info.purpose = xmlDecode(purposeMatch[1]);
|
|
57
61
|
}
|
|
58
62
|
const dateMatch = /<SignatureDate[^>]*>([^<]*)<\/SignatureDate>/.exec(xmlStr);
|
|
59
63
|
if (dateMatch) {
|
|
60
|
-
info.signDate = dateMatch[1];
|
|
64
|
+
info.signDate = xmlDecode(dateMatch[1]);
|
|
61
65
|
}
|
|
62
66
|
const providerMatch = /<SignatureProviderUrl[^>]*>([^<]*)<\/SignatureProviderUrl>/.exec(xmlStr);
|
|
63
67
|
if (providerMatch) {
|
|
64
|
-
info.providerUrl =
|
|
68
|
+
info.providerUrl = xmlDecode(providerMatch[1]);
|
|
65
69
|
}
|
|
66
70
|
// Commitment type
|
|
67
71
|
const commitMatch = /<CommitmentType[^>]*>\s*<CommitmentTypeIndication[^>]*>\s*<CommitmentTypeId>([^<]*)<\/CommitmentTypeId>/.exec(xmlStr);
|
|
68
72
|
if (commitMatch) {
|
|
69
|
-
info.commitmentType = commitMatch[1];
|
|
73
|
+
info.commitmentType = xmlDecode(commitMatch[1]);
|
|
70
74
|
}
|
|
71
75
|
// Extract signature value (base64)
|
|
72
76
|
const sigValMatch = /<SignatureValue[^>]*>([^]*?)<\/SignatureValue>/.exec(xmlStr);
|
|
@@ -76,15 +80,15 @@ export function parseSignatureXml(xmlStr, fileName) {
|
|
|
76
80
|
// Certificate details from <X509Data>
|
|
77
81
|
const certSubjectMatch = /<X509SubjectName[^>]*>([^<]*)<\/X509SubjectName>/.exec(xmlStr);
|
|
78
82
|
if (certSubjectMatch) {
|
|
79
|
-
info.certificateSubject =
|
|
83
|
+
info.certificateSubject = xmlDecode(certSubjectMatch[1]);
|
|
80
84
|
}
|
|
81
85
|
const certIssuerMatch = /<X509IssuerName[^>]*>([^<]*)<\/X509IssuerName>/.exec(xmlStr);
|
|
82
86
|
if (certIssuerMatch) {
|
|
83
|
-
info.certificateIssuer =
|
|
87
|
+
info.certificateIssuer = xmlDecode(certIssuerMatch[1]);
|
|
84
88
|
}
|
|
85
89
|
const certSerialMatch = /<X509SerialNumber[^>]*>([^<]*)<\/X509SerialNumber>/.exec(xmlStr);
|
|
86
90
|
if (certSerialMatch) {
|
|
87
|
-
info.certificateSerialNumber = certSerialMatch[1];
|
|
91
|
+
info.certificateSerialNumber = xmlDecode(certSerialMatch[1]);
|
|
88
92
|
}
|
|
89
93
|
return info;
|
|
90
94
|
}
|
|
@@ -99,36 +103,32 @@ export function extractSignatures(opaqueParts) {
|
|
|
99
103
|
return [];
|
|
100
104
|
}
|
|
101
105
|
const signatures = [];
|
|
102
|
-
const decoder = new TextDecoder("utf-8");
|
|
103
106
|
for (const part of opaqueParts) {
|
|
104
107
|
if (part.path.startsWith("_xmlsignatures/sig") && part.path.endsWith(".xml")) {
|
|
105
|
-
const xmlStr =
|
|
106
|
-
const fileName = part.path
|
|
108
|
+
const xmlStr = utf8Decoder.decode(part.data);
|
|
109
|
+
const fileName = getFileName(part.path);
|
|
107
110
|
signatures.push(parseSignatureXml(xmlStr, fileName));
|
|
108
111
|
}
|
|
109
112
|
}
|
|
110
113
|
return signatures;
|
|
111
114
|
}
|
|
112
115
|
/**
|
|
113
|
-
*
|
|
116
|
+
* Check that a parsed signature has the structural elements XMLDSig
|
|
117
|
+
* requires (`Signature`, `SignedInfo`, `SignatureValue`, `KeyInfo`).
|
|
114
118
|
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
119
|
+
* This is **not** a cryptographic check — see `cryptographicStatus`. It is
|
|
120
|
+
* also tolerant of namespace prefixes (`<ds:Signature>` etc.) which the
|
|
121
|
+
* previous implementation missed.
|
|
118
122
|
*
|
|
119
|
-
* @returns True if the signature
|
|
123
|
+
* @returns True if the signature XML carries the required elements.
|
|
120
124
|
*/
|
|
121
125
|
export function isWellFormedSignature(info) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
.replace(/>/g, ">")
|
|
131
|
-
.replace(/"/g, '"')
|
|
132
|
-
.replace(/'/g, "'")
|
|
133
|
-
.replace(/&/g, "&");
|
|
126
|
+
// Allow optional namespace prefix and either an attribute-bearing or
|
|
127
|
+
// self-closing form — XMLDSig signatures in real DOCX files commonly
|
|
128
|
+
// use `<ds:Signature ...>` rather than the default-namespace form.
|
|
129
|
+
const hasElement = (local) => new RegExp(`<(?:[\\w-]+:)?${local}(?:\\s|>|/>)`).test(info.rawXml);
|
|
130
|
+
return (hasElement("Signature") &&
|
|
131
|
+
hasElement("SignedInfo") &&
|
|
132
|
+
hasElement("SignatureValue") &&
|
|
133
|
+
hasElement("KeyInfo"));
|
|
134
134
|
}
|