@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
|
@@ -33,11 +33,77 @@ import { stringToUint8Array } from "../../../utils/binary.js";
|
|
|
33
33
|
import { base64ToUint8Array } from "../../../utils/utils.browser.js";
|
|
34
34
|
const EMPTY_U8 = new Uint8Array(0);
|
|
35
35
|
const TEXT_DECODER = new TextDecoder();
|
|
36
|
+
/**
|
|
37
|
+
* Drain a resolver list, calling each. Mutates the array to empty.
|
|
38
|
+
*
|
|
39
|
+
* Used by the backpressure machinery: when a sink drains or errors, every
|
|
40
|
+
* parked `_waitForUserSinkDrain()` / pending-async waiter must be woken
|
|
41
|
+
* exactly once, and the array reset so the next backpressure cycle starts
|
|
42
|
+
* clean. Hoisted to a free function so it can be re-used across the three
|
|
43
|
+
* wake sites without per-site duplication of the splice/loop pattern.
|
|
44
|
+
*/
|
|
45
|
+
function callAllResolvers(resolvers) {
|
|
46
|
+
if (resolvers.length === 0) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// Snapshot then clear, so a resolver that itself triggers a fresh wait
|
|
50
|
+
// (re-pushing into the same array) doesn't get confused with the current
|
|
51
|
+
// batch.
|
|
52
|
+
const snapshot = resolvers.splice(0);
|
|
53
|
+
for (const r of snapshot) {
|
|
54
|
+
r();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
36
57
|
// ============================================================================
|
|
37
58
|
// Base Class
|
|
38
59
|
// ============================================================================
|
|
39
60
|
export class WorkbookWriterBase {
|
|
40
61
|
constructor(options, WorksheetWriterClass) {
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Backpressure tracking for the user-supplied output sink.
|
|
64
|
+
//
|
|
65
|
+
// Set by `_trackBackpressure(ok)` whenever `this.stream.write(data)` returns
|
|
66
|
+
// false (or a Promise that resolves to false). Cleared when the sink emits
|
|
67
|
+
// `'drain'`. Awaited by `_waitForUserSinkDrain()` at async boundaries
|
|
68
|
+
// (between worksheets, before `addWorkbook`, etc) so a slow sink throttles
|
|
69
|
+
// the producer instead of letting bytes accumulate unboundedly inside the
|
|
70
|
+
// sink's internal buffer or in the zip pipeline.
|
|
71
|
+
//
|
|
72
|
+
// Important caveat: this **cannot** block a single tight synchronous
|
|
73
|
+
// `for (...) row.commit()` loop inside one worksheet — JavaScript has no
|
|
74
|
+
// sync wait, and `row.commit()` is sync void. During such a loop, every
|
|
75
|
+
// produced compressed chunk is pushed straight into the sink's internal
|
|
76
|
+
// buffer (Node `Writable` accepts writes after returning false; it just
|
|
77
|
+
// hints "drain"). For very-large single-worksheet workloads with a slow
|
|
78
|
+
// sink, the practical bound on how much can pile up is roughly the total
|
|
79
|
+
// compressed size of one worksheet — only the `wb.commit()` boundary
|
|
80
|
+
// (and any `worksheet.commit()` between sheets) gives the event loop a
|
|
81
|
+
// chance to park here on `_waitForUserSinkDrain()`.
|
|
82
|
+
//
|
|
83
|
+
// Multi-sheet workloads benefit fully because each `worksheet.commit()`
|
|
84
|
+
// hands control back to `_commitWorksheets()` which awaits drain before
|
|
85
|
+
// the next sheet starts.
|
|
86
|
+
this._needsDrain = false;
|
|
87
|
+
this._drainResolvers = [];
|
|
88
|
+
this._drainListenerAttached = false;
|
|
89
|
+
// Captured if the user sink fires 'error' before `_finalize()` attaches its
|
|
90
|
+
// own listener. Replayed by `_finalize()` so the original error is what
|
|
91
|
+
// rejects `commit()`, not a generic timeout.
|
|
92
|
+
this._sinkError = null;
|
|
93
|
+
/**
|
|
94
|
+
* Attach error/close listeners on the user sink so any parked backpressure
|
|
95
|
+
* waiters are released the moment the sink fails. Without this, a
|
|
96
|
+
* `commit()` parked on `_waitForUserSinkDrain()` would hang forever if
|
|
97
|
+
* the sink errored before emitting 'drain'. Idempotent and a no-op for
|
|
98
|
+
* sinks that don't expose `.on` (e.g. internal `StreamBuf`).
|
|
99
|
+
*
|
|
100
|
+
* Uses a non-consuming listener: if the user has their own 'error' handler
|
|
101
|
+
* it still fires (EventEmitter broadcasts to all listeners). The error is
|
|
102
|
+
* also captured into `_sinkError` so `_finalize()` can replay it — `_finalize`
|
|
103
|
+
* registers its own listener with `once()`, which would miss errors that
|
|
104
|
+
* arrived earlier in the commit pipeline.
|
|
105
|
+
*/
|
|
106
|
+
this._lifecycleListenersAttached = false;
|
|
41
107
|
this.WorksheetWriterClass = WorksheetWriterClass;
|
|
42
108
|
this.created = options.created || new Date();
|
|
43
109
|
this.modified = options.modified || this.created;
|
|
@@ -57,14 +123,26 @@ export class WorkbookWriterBase {
|
|
|
57
123
|
this.commentRefs = [];
|
|
58
124
|
this.dynamicArrayCount = 0;
|
|
59
125
|
this._trueStreaming = options.trueStreaming ?? false;
|
|
60
|
-
// Create Zip instance
|
|
126
|
+
// Create Zip instance.
|
|
127
|
+
//
|
|
128
|
+
// Backpressure note: when `this.stream.write(data)` returns false (the
|
|
129
|
+
// user-supplied sink — e.g. fs.WriteStream, PassThrough, HTTP response
|
|
130
|
+
// — has reached its highWaterMark), we cannot synchronously block the
|
|
131
|
+
// zip callback (it's invoked from inside `row.commit()`'s sync chain).
|
|
132
|
+
// Instead we record a `_needsDrain` flag and a Promise that resolves
|
|
133
|
+
// when the sink emits `'drain'`. `commit()` and `_commitWorksheets()`
|
|
134
|
+
// await this promise at their natural async boundaries, so the producer
|
|
135
|
+
// stops generating new zip data until the sink has caught up. This
|
|
136
|
+
// makes `WorkbookWriter` safe against slow sinks (network responses,
|
|
137
|
+
// throttled fs, etc) without changing the public API.
|
|
61
138
|
this.zip = new Zip((err, data, final) => {
|
|
62
139
|
if (err) {
|
|
63
140
|
this.stream.emit("error", err);
|
|
64
141
|
}
|
|
65
142
|
else {
|
|
66
143
|
// `streaming-zip` already emits `Uint8Array`; avoid copying per chunk.
|
|
67
|
-
this.stream.write(data);
|
|
144
|
+
const ok = this.stream.write(data);
|
|
145
|
+
this._trackBackpressure(ok);
|
|
68
146
|
if (final) {
|
|
69
147
|
this.stream.end();
|
|
70
148
|
}
|
|
@@ -72,6 +150,11 @@ export class WorkbookWriterBase {
|
|
|
72
150
|
});
|
|
73
151
|
// Setup output stream
|
|
74
152
|
this.stream = this._createOutputStream(options);
|
|
153
|
+
// Eagerly attach error/close listeners on the sink so any backpressure
|
|
154
|
+
// waiters are released the moment the sink fails — without this, a
|
|
155
|
+
// `commit()` parked on `_waitForUserSinkDrain()` would hang forever if
|
|
156
|
+
// the sink errored before emitting 'drain'.
|
|
157
|
+
this._attachSinkLifecycleListeners();
|
|
75
158
|
// Theme and office rels are deferred to commit() so that worksheet files
|
|
76
159
|
// are added to the ZIP first. This ensures StreamingZip sets ondata on
|
|
77
160
|
// the worksheet immediately, allowing pushSync to flow data through
|
|
@@ -87,6 +170,106 @@ export class WorkbookWriterBase {
|
|
|
87
170
|
}
|
|
88
171
|
return new StreamBuf();
|
|
89
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Internal: record whether the sink accepted the last write. The
|
|
175
|
+
* `OutputStreamLike.write` type advertises `boolean | Promise<boolean>`
|
|
176
|
+
* for forward compatibility, but in practice every concrete sink we
|
|
177
|
+
* accept (Node `Writable`, browser `Writable` from `@stream`, internal
|
|
178
|
+
* `StreamBuf`, fs.WriteStream, etc) returns a sync `boolean`. We
|
|
179
|
+
* defensively handle the Promise shape but it's never exercised.
|
|
180
|
+
*/
|
|
181
|
+
_trackBackpressure(ok) {
|
|
182
|
+
if (ok instanceof Promise) {
|
|
183
|
+
// Defensive path: a hypothetical sink whose `write()` returns a
|
|
184
|
+
// Promise. Await its resolution and treat false as backpressure.
|
|
185
|
+
ok.then(result => {
|
|
186
|
+
if (!result) {
|
|
187
|
+
this._needsDrain = true;
|
|
188
|
+
}
|
|
189
|
+
}, () => {
|
|
190
|
+
// Errors surface via the sink's 'error' event; ignore here.
|
|
191
|
+
});
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
if (ok === false) {
|
|
195
|
+
this._needsDrain = true;
|
|
196
|
+
}
|
|
197
|
+
this._ensureDrainListener();
|
|
198
|
+
}
|
|
199
|
+
_ensureDrainListener() {
|
|
200
|
+
if (this._drainListenerAttached) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
if (typeof this.stream.on !== "function") {
|
|
204
|
+
// StreamBuf and similar sinks that don't follow the Writable contract
|
|
205
|
+
// never emit 'drain'; they also never return false from write(), so
|
|
206
|
+
// they reach this branch only spuriously. Skip listener attach.
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
this._drainListenerAttached = true;
|
|
210
|
+
this.stream.on("drain", () => {
|
|
211
|
+
this._needsDrain = false;
|
|
212
|
+
callAllResolvers(this._drainResolvers);
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
_attachSinkLifecycleListeners() {
|
|
216
|
+
if (this._lifecycleListenersAttached) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
if (typeof this.stream.on !== "function") {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
this._lifecycleListenersAttached = true;
|
|
223
|
+
// Use `.once()` for both events: we only care about the first error
|
|
224
|
+
// (subsequent errors are captured in `_sinkError` only if we haven't
|
|
225
|
+
// recorded one yet). Using `.once()` also avoids leaking the listener
|
|
226
|
+
// if the sink lives longer than the WorkbookWriter — the EventEmitter
|
|
227
|
+
// releases the closure as soon as the event fires.
|
|
228
|
+
if (typeof this.stream.once === "function") {
|
|
229
|
+
this.stream.once("error", (err) => {
|
|
230
|
+
if (!this._sinkError) {
|
|
231
|
+
this._sinkError = err;
|
|
232
|
+
}
|
|
233
|
+
this._wakeAllBackpressureWaiters();
|
|
234
|
+
});
|
|
235
|
+
this.stream.once("close", () => {
|
|
236
|
+
this._wakeAllBackpressureWaiters();
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
// Fallback: sink only has .on, attach normally.
|
|
241
|
+
this.stream.on("error", (err) => {
|
|
242
|
+
if (!this._sinkError) {
|
|
243
|
+
this._sinkError = err;
|
|
244
|
+
}
|
|
245
|
+
this._wakeAllBackpressureWaiters();
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
_wakeAllBackpressureWaiters() {
|
|
250
|
+
this._needsDrain = false;
|
|
251
|
+
callAllResolvers(this._drainResolvers);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Park here until any async writes have settled and the user sink has
|
|
255
|
+
* drained below its high-water mark. Resolves immediately when no
|
|
256
|
+
* backpressure is in flight.
|
|
257
|
+
*
|
|
258
|
+
* Called at async boundaries inside `commit()` so a slow sink throttles
|
|
259
|
+
* the producer instead of letting bytes accumulate unboundedly.
|
|
260
|
+
*/
|
|
261
|
+
async _waitForUserSinkDrain() {
|
|
262
|
+
// Short-circuit if the sink already errored — no point waiting for a
|
|
263
|
+
// drain that will never come. The error itself surfaces from
|
|
264
|
+
// `_finalize()` later.
|
|
265
|
+
if (this._sinkError) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
if (!this._needsDrain) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
return new Promise(resolve => this._drainResolvers.push(resolve));
|
|
272
|
+
}
|
|
90
273
|
get definedNames() {
|
|
91
274
|
return this._definedNames;
|
|
92
275
|
}
|
|
@@ -135,24 +318,32 @@ export class WorkbookWriterBase {
|
|
|
135
318
|
}
|
|
136
319
|
zipFile.push(buffer, true);
|
|
137
320
|
}
|
|
138
|
-
_commitWorksheets() {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
321
|
+
async _commitWorksheets() {
|
|
322
|
+
// Commit worksheets sequentially (not in parallel) so we can park on
|
|
323
|
+
// user-sink backpressure between them. Parallel commit was the old
|
|
324
|
+
// behavior; for a single-worksheet workbook the difference is nil, and
|
|
325
|
+
// for multi-sheet workbooks honoring backpressure between them keeps
|
|
326
|
+
// memory bounded against slow sinks. ZIP itself is inherently serial
|
|
327
|
+
// (StreamingZip processes one entry at a time via `activeFile`), so
|
|
328
|
+
// sequential commit imposes no real CPU cost — measured throughput is
|
|
329
|
+
// identical to parallel commit on multi-sheet workbooks.
|
|
330
|
+
for (const worksheet of this._worksheets) {
|
|
331
|
+
if (!worksheet || worksheet.committed) {
|
|
332
|
+
continue;
|
|
145
333
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
334
|
+
await new Promise(resolve => {
|
|
335
|
+
worksheet.stream.once("zipped", () => resolve());
|
|
336
|
+
worksheet.commit();
|
|
337
|
+
});
|
|
338
|
+
await this._waitForUserSinkDrain();
|
|
339
|
+
}
|
|
150
340
|
}
|
|
151
341
|
async commit() {
|
|
152
342
|
await this.promise;
|
|
153
343
|
await this._commitWorksheets();
|
|
154
344
|
await this.addMedia();
|
|
155
345
|
this.addDrawings();
|
|
346
|
+
await this._waitForUserSinkDrain();
|
|
156
347
|
await Promise.all([
|
|
157
348
|
this.addThemes(),
|
|
158
349
|
this.addOfficeRels(),
|
|
@@ -165,7 +356,9 @@ export class WorkbookWriterBase {
|
|
|
165
356
|
this.addMetadata(),
|
|
166
357
|
this.addWorkbookRels()
|
|
167
358
|
]);
|
|
359
|
+
await this._waitForUserSinkDrain();
|
|
168
360
|
await this.addWorkbook();
|
|
361
|
+
await this._waitForUserSinkDrain();
|
|
169
362
|
await this._finalize();
|
|
170
363
|
}
|
|
171
364
|
get nextId() {
|
|
@@ -436,6 +629,22 @@ export class WorkbookWriterBase {
|
|
|
436
629
|
});
|
|
437
630
|
}
|
|
438
631
|
_finalize() {
|
|
632
|
+
// If the user sink errored earlier in the commit pipeline (captured by
|
|
633
|
+
// `_attachSinkLifecycleListeners`), surface that error now — `commit()`
|
|
634
|
+
// would otherwise reach `_finalize` and hang waiting for `'close'` from
|
|
635
|
+
// a sink that's already destroyed.
|
|
636
|
+
if (this._sinkError) {
|
|
637
|
+
// End the zip pipeline cleanly so its internal callbacks don't keep
|
|
638
|
+
// firing into a torn-down sink. Best-effort: ignore any error from
|
|
639
|
+
// end() since the original `_sinkError` is what we care about.
|
|
640
|
+
try {
|
|
641
|
+
this.zip.end();
|
|
642
|
+
}
|
|
643
|
+
catch {
|
|
644
|
+
// Best-effort cleanup.
|
|
645
|
+
}
|
|
646
|
+
return Promise.reject(this._sinkError);
|
|
647
|
+
}
|
|
439
648
|
// Wait for "close" — emitted by all supported output streams (Node Writable,
|
|
440
649
|
// browser Writable, and StreamBuf) after "finish". For file streams this
|
|
441
650
|
// guarantees the fd is released, which is critical on Windows where reading
|
|
@@ -451,6 +660,12 @@ export class WorkbookWriterBase {
|
|
|
451
660
|
};
|
|
452
661
|
const onDone = () => {
|
|
453
662
|
cleanup();
|
|
663
|
+
// If an error fired between us checking `_sinkError` and reaching
|
|
664
|
+
// 'close' (rare but possible with concurrent emit), surface it.
|
|
665
|
+
if (this._sinkError) {
|
|
666
|
+
reject(this._sinkError);
|
|
667
|
+
return;
|
|
668
|
+
}
|
|
454
669
|
resolve(this);
|
|
455
670
|
};
|
|
456
671
|
this.stream.once("error", onError);
|
|
@@ -1,29 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* StringBuf
|
|
2
|
+
* Re-export of the shared {@link StringBuf} from `@utils/string-buf`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Kept as a thin alias so existing imports (`@excel/utils/string-buf`)
|
|
5
|
+
* continue to work without churn.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
encoding?: string;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* StringBuf - efficient string builder using Uint8Array
|
|
13
|
-
* Works identically in Node.js and Browser environments.
|
|
14
|
-
*/
|
|
15
|
-
declare class StringBuf {
|
|
16
|
-
private _buf;
|
|
17
|
-
private _inPos;
|
|
18
|
-
private _buffer;
|
|
19
|
-
constructor(options?: StringBufOptions);
|
|
20
|
-
get length(): number;
|
|
21
|
-
get capacity(): number;
|
|
22
|
-
get buffer(): Uint8Array;
|
|
23
|
-
toBuffer(): Uint8Array;
|
|
24
|
-
reset(position?: number): void;
|
|
25
|
-
private _grow;
|
|
26
|
-
addText(text: string): void;
|
|
27
|
-
addStringBuf(inBuf: StringBuf): void;
|
|
28
|
-
}
|
|
29
|
-
export { StringBuf };
|
|
7
|
+
export { StringBuf } from "../../../utils/string-buf.js";
|
|
8
|
+
export type { StringBufOptions } from "../../../utils/string-buf.js";
|
|
@@ -1,84 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* StringBuf
|
|
2
|
+
* Re-export of the shared {@link StringBuf} from `@utils/string-buf`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Kept as a thin alias so existing imports (`@excel/utils/string-buf`)
|
|
5
|
+
* continue to work without churn.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* StringBuf - efficient string builder using Uint8Array
|
|
10
|
-
* Works identically in Node.js and Browser environments.
|
|
11
|
-
*/
|
|
12
|
-
class StringBuf {
|
|
13
|
-
constructor(options) {
|
|
14
|
-
this._buf = new Uint8Array((options && options.size) || 16384);
|
|
15
|
-
// TextEncoder only supports UTF-8, so encoding option is ignored
|
|
16
|
-
this._inPos = 0;
|
|
17
|
-
this._buffer = undefined;
|
|
18
|
-
}
|
|
19
|
-
get length() {
|
|
20
|
-
return this._inPos;
|
|
21
|
-
}
|
|
22
|
-
get capacity() {
|
|
23
|
-
return this._buf.length;
|
|
24
|
-
}
|
|
25
|
-
get buffer() {
|
|
26
|
-
return this._buf;
|
|
27
|
-
}
|
|
28
|
-
toBuffer() {
|
|
29
|
-
// Return the current data as a single enclosing buffer
|
|
30
|
-
if (!this._buffer) {
|
|
31
|
-
this._buffer = this._buf.slice(0, this._inPos);
|
|
32
|
-
}
|
|
33
|
-
return this._buffer;
|
|
34
|
-
}
|
|
35
|
-
reset(position) {
|
|
36
|
-
position = position ?? 0;
|
|
37
|
-
this._buffer = undefined;
|
|
38
|
-
this._inPos = position;
|
|
39
|
-
}
|
|
40
|
-
_grow(min) {
|
|
41
|
-
let size = this._buf.length * 2;
|
|
42
|
-
while (size < min) {
|
|
43
|
-
size *= 2;
|
|
44
|
-
}
|
|
45
|
-
const buf = new Uint8Array(size);
|
|
46
|
-
buf.set(this._buf);
|
|
47
|
-
this._buf = buf;
|
|
48
|
-
}
|
|
49
|
-
addText(text) {
|
|
50
|
-
this._buffer = undefined;
|
|
51
|
-
// Ensure there's room for at least the string length (optimistic: 1 byte per char).
|
|
52
|
-
const optimistic = this._inPos + text.length;
|
|
53
|
-
if (optimistic > this._buf.length - 4) {
|
|
54
|
-
this._grow(optimistic);
|
|
55
|
-
}
|
|
56
|
-
// Use encodeInto to write directly into the buffer, avoiding the
|
|
57
|
-
// intermediate Uint8Array allocation that encoder.encode() creates.
|
|
58
|
-
const target = this._buf.subarray(this._inPos);
|
|
59
|
-
const result = encoder.encodeInto(text, target);
|
|
60
|
-
if (result.read < text.length) {
|
|
61
|
-
// Didn't fit — text has multi-byte UTF-8 chars that exceed the optimistic estimate.
|
|
62
|
-
// Grow to accommodate the remainder (worst case: 3 bytes per remaining char).
|
|
63
|
-
const remaining = text.length - result.read;
|
|
64
|
-
this._grow(this._inPos + result.written + remaining * 3);
|
|
65
|
-
const result2 = encoder.encodeInto(text.substring(result.read), this._buf.subarray(this._inPos + result.written));
|
|
66
|
-
this._inPos += result.written + result2.written;
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
this._inPos += result.written;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
addStringBuf(inBuf) {
|
|
73
|
-
if (inBuf.length) {
|
|
74
|
-
this._buffer = undefined;
|
|
75
|
-
if (this.length + inBuf.length > this.capacity) {
|
|
76
|
-
this._grow(this.length + inBuf.length);
|
|
77
|
-
}
|
|
78
|
-
// Copy bytes from input buffer
|
|
79
|
-
this._buf.set(inBuf._buf.subarray(0, inBuf.length), this._inPos);
|
|
80
|
-
this._inPos += inBuf.length;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
export { StringBuf };
|
|
7
|
+
export { StringBuf } from "../../../utils/string-buf.js";
|
|
@@ -231,6 +231,59 @@ function isReadableStream(input) {
|
|
|
231
231
|
// =============================================================================
|
|
232
232
|
// CSV Helper Functions (Internal)
|
|
233
233
|
// =============================================================================
|
|
234
|
+
/**
|
|
235
|
+
* Iterate worksheet rows lazily — yields `{row, rowNumber}` for every row
|
|
236
|
+
* with values, in sheet order. Reaches into the worksheet's internal
|
|
237
|
+
* `_rows` array directly so we don't have to materialise the whole row
|
|
238
|
+
* set up front (matters for very large worksheets piped to slow sinks).
|
|
239
|
+
*
|
|
240
|
+
* Note: `_rows` is 0-based but XLSX row numbers are 1-based. Row N lives
|
|
241
|
+
* at `_rows[N - 1]`, so the yielded `rowNumber` is `i + 1`.
|
|
242
|
+
*/
|
|
243
|
+
function* iterateWorksheetRows(worksheet) {
|
|
244
|
+
const rows = worksheet._rows;
|
|
245
|
+
if (!rows || rows.length === 0) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
for (let i = 0; i < rows.length; i++) {
|
|
249
|
+
const row = rows[i];
|
|
250
|
+
if (row && row.hasValues) {
|
|
251
|
+
yield { row, rowNumber: i + 1 };
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Build a `() => Promise<void>` that resolves on the next `'drain'` event
|
|
257
|
+
* of `emitter`, but rejects promptly if `'error'` or `'close'` fires first.
|
|
258
|
+
*
|
|
259
|
+
* Without the error/close races, a producer parked on `once('drain')`
|
|
260
|
+
* would hang forever after the downstream sink errors mid-write — the
|
|
261
|
+
* Transform is destroyed and never emits drain again.
|
|
262
|
+
*/
|
|
263
|
+
function createDrainRacer(emitter) {
|
|
264
|
+
return () => new Promise((resolve, reject) => {
|
|
265
|
+
const cleanup = () => {
|
|
266
|
+
emitter.off("drain", onDrain);
|
|
267
|
+
emitter.off("error", onError);
|
|
268
|
+
emitter.off("close", onClose);
|
|
269
|
+
};
|
|
270
|
+
const onDrain = () => {
|
|
271
|
+
cleanup();
|
|
272
|
+
resolve();
|
|
273
|
+
};
|
|
274
|
+
const onError = (err) => {
|
|
275
|
+
cleanup();
|
|
276
|
+
reject(err);
|
|
277
|
+
};
|
|
278
|
+
const onClose = () => {
|
|
279
|
+
cleanup();
|
|
280
|
+
reject(new Error("stream closed before drain"));
|
|
281
|
+
};
|
|
282
|
+
emitter.once("drain", onDrain);
|
|
283
|
+
emitter.once("error", onError);
|
|
284
|
+
emitter.once("close", onClose);
|
|
285
|
+
});
|
|
286
|
+
}
|
|
234
287
|
function buildParserOptions(options) {
|
|
235
288
|
return {
|
|
236
289
|
delimiter: options?.delimiter ?? ",",
|
|
@@ -596,26 +649,56 @@ class Workbook {
|
|
|
596
649
|
const map = options?.map || createDefaultWriteMapper(options?.dateFormat, options?.dateUTC);
|
|
597
650
|
const includeEmptyRows = options?.includeEmptyRows !== false;
|
|
598
651
|
const formatter = new CsvFormatterStream(buildFormatterOptions(options));
|
|
599
|
-
if (worksheet) {
|
|
600
|
-
setTimeout(() =>
|
|
652
|
+
if (!worksheet) {
|
|
653
|
+
setTimeout(() => formatter.end(), 0);
|
|
654
|
+
return formatter;
|
|
655
|
+
}
|
|
656
|
+
// Drive rows asynchronously so the formatter's backpressure signal can
|
|
657
|
+
// throttle production. The drain wait races against `'error'` / `'close'`
|
|
658
|
+
// so a downstream sink failure unwinds the producer instead of hanging.
|
|
659
|
+
const awaitFormatterDrain = createDrainRacer(formatter);
|
|
660
|
+
const writeAndDrain = (values) => {
|
|
661
|
+
if (formatter.write(values)) {
|
|
662
|
+
return;
|
|
663
|
+
}
|
|
664
|
+
return awaitFormatterDrain();
|
|
665
|
+
};
|
|
666
|
+
(async () => {
|
|
667
|
+
try {
|
|
601
668
|
let lastRow = 1;
|
|
602
|
-
worksheet.
|
|
669
|
+
// Iterate worksheet rows lazily — no snapshot. Each row's `values`
|
|
670
|
+
// are mapped at iteration time, so already-yielded data is GC-able
|
|
671
|
+
// as the consumer drains the formatter.
|
|
672
|
+
for (const { row, rowNumber } of iterateWorksheetRows(worksheet)) {
|
|
673
|
+
if (formatter.destroyed) {
|
|
674
|
+
return;
|
|
675
|
+
}
|
|
676
|
+
// First slot is the 1-based padding cell — skip without mutating
|
|
677
|
+
// the row (mutating would corrupt subsequent reads / writes).
|
|
678
|
+
const dataValues = row.values.slice(1).map(map);
|
|
603
679
|
if (includeEmptyRows) {
|
|
604
680
|
while (lastRow++ < rowNumber - 1) {
|
|
605
|
-
|
|
681
|
+
const p = writeAndDrain([]);
|
|
682
|
+
if (p) {
|
|
683
|
+
await p;
|
|
684
|
+
}
|
|
685
|
+
if (formatter.destroyed) {
|
|
686
|
+
return;
|
|
687
|
+
}
|
|
606
688
|
}
|
|
607
689
|
}
|
|
608
|
-
const
|
|
609
|
-
|
|
610
|
-
|
|
690
|
+
const p = writeAndDrain(dataValues);
|
|
691
|
+
if (p) {
|
|
692
|
+
await p;
|
|
693
|
+
}
|
|
611
694
|
lastRow = rowNumber;
|
|
612
|
-
}
|
|
695
|
+
}
|
|
613
696
|
formatter.end();
|
|
614
|
-
}
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
}
|
|
697
|
+
}
|
|
698
|
+
catch (err) {
|
|
699
|
+
formatter.destroy(err instanceof Error ? err : new Error(String(err)));
|
|
700
|
+
}
|
|
701
|
+
})();
|
|
619
702
|
return formatter;
|
|
620
703
|
}
|
|
621
704
|
/**
|
|
@@ -814,20 +897,47 @@ class Workbook {
|
|
|
814
897
|
const includeEmptyRows = options?.includeEmptyRows !== false;
|
|
815
898
|
const formatter = new CsvFormatterStream(buildFormatterOptions(options));
|
|
816
899
|
const pipelinePromise = pipeline(formatter, stream);
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
900
|
+
// Race drain against error / close so a mid-stream sink failure makes
|
|
901
|
+
// `writeAndDrain` reject (and the for-loop unwind) instead of hanging
|
|
902
|
+
// on a 'drain' the destroyed formatter will never emit.
|
|
903
|
+
const awaitFormatterDrain = createDrainRacer(formatter);
|
|
904
|
+
const writeAndDrain = async (values) => {
|
|
905
|
+
if (!formatter.write(values)) {
|
|
906
|
+
await awaitFormatterDrain();
|
|
907
|
+
}
|
|
908
|
+
};
|
|
909
|
+
try {
|
|
910
|
+
let lastRow = 1;
|
|
911
|
+
// Iterate worksheet rows directly without pre-collecting them. The
|
|
912
|
+
// Workbook model is already in memory, so reaching into `_rows` here
|
|
913
|
+
// adds no per-row allocation — just a Row reference per iteration,
|
|
914
|
+
// immediately reassigned. The async loop honours formatter
|
|
915
|
+
// backpressure between rows so the formatter's internal buffer can't
|
|
916
|
+
// grow unbounded against a slow sink.
|
|
917
|
+
for (const { row, rowNumber } of iterateWorksheetRows(worksheet)) {
|
|
918
|
+
// First slot is the 1-based padding cell — skip without mutating
|
|
919
|
+
// the row (mutating would corrupt subsequent reads / writes).
|
|
920
|
+
const dataValues = row.values.slice(1).map(map);
|
|
921
|
+
if (includeEmptyRows) {
|
|
922
|
+
while (lastRow++ < rowNumber - 1) {
|
|
923
|
+
await writeAndDrain([]);
|
|
924
|
+
}
|
|
822
925
|
}
|
|
926
|
+
await writeAndDrain(dataValues);
|
|
927
|
+
lastRow = rowNumber;
|
|
823
928
|
}
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
929
|
+
formatter.end();
|
|
930
|
+
await pipelinePromise;
|
|
931
|
+
}
|
|
932
|
+
catch (err) {
|
|
933
|
+
// Sink errored mid-write (or pipeline tore down for any reason).
|
|
934
|
+
// Destroy the formatter so the pipeline unwinds, swallow the
|
|
935
|
+
// pipeline rejection (the original error is what we want to surface),
|
|
936
|
+
// and rethrow.
|
|
937
|
+
formatter.destroy(err instanceof Error ? err : new Error(String(err)));
|
|
938
|
+
await pipelinePromise.catch(() => { });
|
|
939
|
+
throw err;
|
|
940
|
+
}
|
|
831
941
|
}
|
|
832
942
|
/**
|
|
833
943
|
* Populate a worksheet from a parsed Markdown table result.
|