@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,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOCX reader — header watermark detection.
|
|
3
|
+
*
|
|
4
|
+
* Watermarks are stored as a VML shape inside the first `<w:p>` of a header
|
|
5
|
+
* part. We detect them by walking the header XML tree looking for a shape
|
|
6
|
+
* whose id contains "WaterMark"; the surrounding header content is parsed
|
|
7
|
+
* by the regular header-content parser.
|
|
8
|
+
*
|
|
9
|
+
* Self-contained — no dependency on the body parser, so it lives in its
|
|
10
|
+
* own file to keep `docx-reader.ts` focused on package orchestration.
|
|
11
|
+
*/
|
|
12
|
+
import { findChild } from "../../xml/dom.js";
|
|
13
|
+
/** Detect a watermark shape inside a header XML root, if present. */
|
|
14
|
+
export function detectWatermarkFromRoot(root) {
|
|
15
|
+
// Look for VML shape with id containing "WaterMark"
|
|
16
|
+
for (const pEl of root.children) {
|
|
17
|
+
if (pEl.type !== "element") {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
for (const rEl of pEl.children) {
|
|
21
|
+
if (rEl.type !== "element") {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
// Look for w:pict or w:r > w:pict
|
|
25
|
+
const pictEls = [];
|
|
26
|
+
const rName = rEl.name.replace(/^w:/, "");
|
|
27
|
+
if (rName === "pict") {
|
|
28
|
+
pictEls.push(rEl);
|
|
29
|
+
}
|
|
30
|
+
else if (rName === "r") {
|
|
31
|
+
for (const rc of rEl.children) {
|
|
32
|
+
if (rc.type === "element" && rc.name.replace(/^w:/, "") === "pict") {
|
|
33
|
+
pictEls.push(rc);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
for (const pictEl of pictEls) {
|
|
38
|
+
for (const shapeEl of pictEl.children) {
|
|
39
|
+
if (shapeEl.type !== "element") {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const shapeId = shapeEl.attributes["id"] ?? "";
|
|
43
|
+
if (!shapeId.toLowerCase().includes("watermark")) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
// Found watermark shape
|
|
47
|
+
const shapeType = shapeEl.attributes["type"] ?? "";
|
|
48
|
+
if (shapeType.includes("136")) {
|
|
49
|
+
// WordArt text watermark (shapetype 136)
|
|
50
|
+
return parseTextWatermark(shapeEl);
|
|
51
|
+
}
|
|
52
|
+
// Check for image watermark (has v:imagedata)
|
|
53
|
+
const imgData = findChild(shapeEl, "v:imagedata");
|
|
54
|
+
if (imgData) {
|
|
55
|
+
return parseImageWatermark(shapeEl, imgData);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
function parseTextWatermark(shapeEl) {
|
|
64
|
+
const fillColor = shapeEl.attributes["fillcolor"] ?? "#C0C0C0";
|
|
65
|
+
const color = fillColor.replace(/^#/, "");
|
|
66
|
+
// Parse rotation from style
|
|
67
|
+
const style = shapeEl.attributes["style"] ?? "";
|
|
68
|
+
let rotation = -45;
|
|
69
|
+
const rotMatch = style.match(/rotation:\s*(-?\d+)/);
|
|
70
|
+
if (rotMatch) {
|
|
71
|
+
rotation = parseInt(rotMatch[1], 10);
|
|
72
|
+
}
|
|
73
|
+
// Get opacity from v:fill
|
|
74
|
+
const fillEl = findChild(shapeEl, "v:fill");
|
|
75
|
+
const opacity = fillEl?.attributes["opacity"] ?? ".5";
|
|
76
|
+
const semiTransparent = opacity !== "1";
|
|
77
|
+
// Get text and font from v:textpath
|
|
78
|
+
const textpathEl = findChild(shapeEl, "v:textpath");
|
|
79
|
+
const text = textpathEl?.attributes["string"] ?? "";
|
|
80
|
+
const tpStyle = textpathEl?.attributes["style"] ?? "";
|
|
81
|
+
let font;
|
|
82
|
+
let fontSize;
|
|
83
|
+
const fontMatch = tpStyle.match(/font-family:\s*"?([^";]+)"?/);
|
|
84
|
+
if (fontMatch) {
|
|
85
|
+
font = fontMatch[1].replace(/"/g, "");
|
|
86
|
+
}
|
|
87
|
+
const sizeMatch = tpStyle.match(/font-size:\s*(\d+(?:\.\d+)?)\s*pt/);
|
|
88
|
+
if (sizeMatch) {
|
|
89
|
+
fontSize = Math.round(parseFloat(sizeMatch[1]) * 2); // convert pt to half-points
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
type: "text",
|
|
93
|
+
text,
|
|
94
|
+
font,
|
|
95
|
+
fontSize,
|
|
96
|
+
color,
|
|
97
|
+
semiTransparent,
|
|
98
|
+
rotation
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function parseImageWatermark(shapeEl, imgDataEl) {
|
|
102
|
+
const rId = imgDataEl.attributes["r:id"] ?? "";
|
|
103
|
+
const gain = imgDataEl.attributes["gain"] ?? "";
|
|
104
|
+
const washout = gain.startsWith("19661") || gain === "";
|
|
105
|
+
return {
|
|
106
|
+
type: "image",
|
|
107
|
+
rId,
|
|
108
|
+
washout
|
|
109
|
+
};
|
|
110
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
/** A stream entry extracted from/written to a CFB file. */
|
|
12
|
+
export interface CfbEntry {
|
|
13
|
+
/** Stream name (UTF-16LE decoded). */
|
|
14
|
+
readonly name: string;
|
|
15
|
+
/** Stream data. */
|
|
16
|
+
readonly data: Uint8Array;
|
|
17
|
+
}
|
|
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 declare function readCfb(buffer: Uint8Array): CfbEntry[];
|
|
27
|
+
/**
|
|
28
|
+
* Write a set of named stream entries into a CFB (OLE2 Compound File) container.
|
|
29
|
+
*
|
|
30
|
+
* Produces a minimal v3 CFB with 512-byte sectors. Does not use mini-streams
|
|
31
|
+
* (all data is stored in regular sectors). This is suitable for encrypted Office
|
|
32
|
+
* documents where every stream exceeds 4096 bytes.
|
|
33
|
+
*
|
|
34
|
+
* @param entries - Named stream entries to include.
|
|
35
|
+
* @returns The CFB file as a Uint8Array.
|
|
36
|
+
*/
|
|
37
|
+
export declare function writeCfb(entries: readonly CfbEntry[]): Uint8Array;
|
|
@@ -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
|
+
}
|
package/dist/browser/modules/word/{digital-signatures.d.ts → security/digital-signatures.d.ts}
RENAMED
|
@@ -13,12 +13,12 @@
|
|
|
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
24
|
/** Parsed digital signature metadata. */
|
|
@@ -43,8 +43,15 @@ export interface DigitalSignatureInfo {
|
|
|
43
43
|
readonly certificateSerialNumber?: string;
|
|
44
44
|
/** Hash of the signature (base64). */
|
|
45
45
|
readonly signatureValue?: string;
|
|
46
|
-
/**
|
|
47
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Cryptographic verification status.
|
|
48
|
+
*
|
|
49
|
+
* `"not-verified"` is the only value this module ever produces — full
|
|
50
|
+
* verification requires a complete XMLDSig + Canonical XML implementation
|
|
51
|
+
* which is intentionally out of scope. The field is exposed so callers
|
|
52
|
+
* are not tempted to interpret a missing value as "valid".
|
|
53
|
+
*/
|
|
54
|
+
readonly cryptographicStatus: "not-verified";
|
|
48
55
|
/** Raw XML for preservation. */
|
|
49
56
|
readonly rawXml: string;
|
|
50
57
|
/** Signature file name (e.g. "sig1.xml"). */
|
|
@@ -76,12 +83,13 @@ export declare function extractSignatures(opaqueParts: readonly {
|
|
|
76
83
|
data: Uint8Array;
|
|
77
84
|
}[] | undefined): DigitalSignatureInfo[];
|
|
78
85
|
/**
|
|
79
|
-
*
|
|
86
|
+
* Check that a parsed signature has the structural elements XMLDSig
|
|
87
|
+
* requires (`Signature`, `SignedInfo`, `SignatureValue`, `KeyInfo`).
|
|
80
88
|
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
89
|
+
* This is **not** a cryptographic check — see `cryptographicStatus`. It is
|
|
90
|
+
* also tolerant of namespace prefixes (`<ds:Signature>` etc.) which the
|
|
91
|
+
* previous implementation missed.
|
|
84
92
|
*
|
|
85
|
-
* @returns True if the signature
|
|
93
|
+
* @returns True if the signature XML carries the required elements.
|
|
86
94
|
*/
|
|
87
95
|
export declare function isWellFormedSignature(info: DigitalSignatureInfo): boolean;
|