@syncfusion/ej2-docx 0.0.0-stage → 35.1.40
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/.gitleaksignore +35 -0
- package/README.md +68 -2
- package/core.js +4 -0
- package/dist/ej2-docx.umd.min.js +11 -0
- package/dist/ej2-docx.umd.min.js.map +1 -0
- package/dist/es6/ej2-docx.es2015.js +66697 -0
- package/dist/es6/ej2-docx.es2015.js.map +1 -0
- package/dist/es6/ej2-docx.es5.js +77568 -0
- package/dist/es6/ej2-docx.es5.js.map +1 -0
- package/dist/global/ej2-docx.min.js +11 -0
- package/dist/global/ej2-docx.min.js.map +1 -0
- package/dist/global/index.d.ts +14 -0
- package/features.js +4 -0
- package/index.js +4 -0
- package/license +10 -0
- package/package.json +30 -3
- package/src/all.d.ts +50 -0
- package/src/all.js +147 -0
- package/src/core/compat/base64.d.ts +13 -0
- package/src/core/compat/base64.js +90 -0
- package/src/core/compat/object-compat.d.ts +30 -0
- package/src/core/compat/object-compat.js +40 -0
- package/src/core/compat/sha256.d.ts +9 -0
- package/src/core/compat/sha256.js +98 -0
- package/src/core/errors/docx-error.d.ts +89 -0
- package/src/core/errors/docx-error.js +138 -0
- package/src/core/errors/error-codes.d.ts +8 -0
- package/src/core/errors/error-codes.js +0 -0
- package/src/core/errors/index.d.ts +10 -0
- package/src/core/errors/index.js +9 -0
- package/src/core/index.d.ts +12 -0
- package/src/core/index.js +12 -0
- package/src/core/mc/alternate-content.d.ts +7 -0
- package/src/core/mc/alternate-content.js +67 -0
- package/src/core/mc/attributes.d.ts +24 -0
- package/src/core/mc/attributes.js +82 -0
- package/src/core/mc/index.d.ts +7 -0
- package/src/core/mc/index.js +5 -0
- package/src/core/mc/inspect.d.ts +16 -0
- package/src/core/mc/inspect.js +148 -0
- package/src/core/mc/namespaces.d.ts +4 -0
- package/src/core/mc/namespaces.js +4 -0
- package/src/core/mc/scope.d.ts +6 -0
- package/src/core/mc/scope.js +47 -0
- package/src/core/opc/content-types.d.ts +34 -0
- package/src/core/opc/content-types.js +162 -0
- package/src/core/opc/index.d.ts +8 -0
- package/src/core/opc/index.js +4 -0
- package/src/core/opc/package.d.ts +49 -0
- package/src/core/opc/package.js +324 -0
- package/src/core/opc/part-name.d.ts +47 -0
- package/src/core/opc/part-name.js +205 -0
- package/src/core/opc/relationships.d.ts +46 -0
- package/src/core/opc/relationships.js +212 -0
- package/src/core/preservation/index.d.ts +2 -0
- package/src/core/preservation/index.js +1 -0
- package/src/core/preservation/opaque-body.d.ts +16 -0
- package/src/core/preservation/opaque-body.js +69 -0
- package/src/core/registry/block-handlers.d.ts +30 -0
- package/src/core/registry/block-handlers.js +36 -0
- package/src/core/registry/create-defaults.d.ts +39 -0
- package/src/core/registry/create-defaults.js +42 -0
- package/src/core/registry/feature-registry.d.ts +20 -0
- package/src/core/registry/feature-registry.js +29 -0
- package/src/core/registry/index.d.ts +9 -0
- package/src/core/registry/index.js +8 -0
- package/src/core/registry/inline-handlers.d.ts +20 -0
- package/src/core/registry/inline-handlers.js +30 -0
- package/src/core/registry/materialize-handlers.d.ts +35 -0
- package/src/core/registry/materialize-handlers.js +75 -0
- package/src/core/registry/multi-part-handlers.d.ts +37 -0
- package/src/core/registry/multi-part-handlers.js +206 -0
- package/src/core/registry/package-part-handlers.d.ts +28 -0
- package/src/core/registry/package-part-handlers.js +190 -0
- package/src/core/registry/part-handlers.d.ts +24 -0
- package/src/core/registry/part-handlers.js +172 -0
- package/src/core/registry/run-leaf-handlers.d.ts +26 -0
- package/src/core/registry/run-leaf-handlers.js +72 -0
- package/src/core/security/limits.d.ts +40 -0
- package/src/core/security/limits.js +26 -0
- package/src/core/xml/index.d.ts +7 -0
- package/src/core/xml/index.js +3 -0
- package/src/core/xml/model.d.ts +66 -0
- package/src/core/xml/model.js +17 -0
- package/src/core/xml/parse.d.ts +12 -0
- package/src/core/xml/parse.js +382 -0
- package/src/core/xml/serialize.d.ts +6 -0
- package/src/core/xml/serialize.js +93 -0
- package/src/core/zip/crc32.d.ts +2 -0
- package/src/core/zip/crc32.js +25 -0
- package/src/core/zip/deflate.d.ts +6 -0
- package/src/core/zip/deflate.js +6 -0
- package/src/core/zip/index.d.ts +10 -0
- package/src/core/zip/index.js +4 -0
- package/src/core/zip/inflate-raw.d.ts +17 -0
- package/src/core/zip/inflate-raw.js +450 -0
- package/src/core/zip/names.d.ts +6 -0
- package/src/core/zip/names.js +52 -0
- package/src/core/zip/read.d.ts +8 -0
- package/src/core/zip/read.js +262 -0
- package/src/core/zip/write.d.ts +7 -0
- package/src/core/zip/write.js +189 -0
- package/src/core/zip/zip-entry.d.ts +4 -0
- package/src/core/zip/zip-entry.js +0 -0
- package/src/features/bibliography/index.d.ts +100 -0
- package/src/features/bibliography/index.js +290 -0
- package/src/features/bookmarks/index.d.ts +331 -0
- package/src/features/bookmarks/index.js +1009 -0
- package/src/features/comments/comment-extensions.d.ts +157 -0
- package/src/features/comments/comment-extensions.js +356 -0
- package/src/features/comments/index.d.ts +579 -0
- package/src/features/comments/index.js +1727 -0
- package/src/features/content-controls/index.d.ts +821 -0
- package/src/features/content-controls/index.js +2857 -0
- package/src/features/custom-xml/index.d.ts +236 -0
- package/src/features/custom-xml/index.js +661 -0
- package/src/features/document/alignment.d.ts +23 -0
- package/src/features/document/alignment.js +36 -0
- package/src/features/document/alt-chunk.d.ts +103 -0
- package/src/features/document/alt-chunk.js +221 -0
- package/src/features/document/assert-never.d.ts +1 -0
- package/src/features/document/assert-never.js +4 -0
- package/src/features/document/augmentations.d.ts +578 -0
- package/src/features/document/augmentations.js +0 -0
- package/src/features/document/body-always-on.d.ts +36 -0
- package/src/features/document/body-always-on.js +66 -0
- package/src/features/document/body-blocks.d.ts +7 -0
- package/src/features/document/body-blocks.js +78 -0
- package/src/features/document/body-item-adapters.d.ts +62 -0
- package/src/features/document/body-item-adapters.js +97 -0
- package/src/features/document/body-item-collection.d.ts +151 -0
- package/src/features/document/body-item-collection.js +440 -0
- package/src/features/document/body-item.d.ts +35 -0
- package/src/features/document/body-item.js +8 -0
- package/src/features/document/body.d.ts +150 -0
- package/src/features/document/body.js +263 -0
- package/src/features/document/character-format.d.ts +413 -0
- package/src/features/document/character-format.js +2054 -0
- package/src/features/document/color.d.ts +178 -0
- package/src/features/document/color.js +495 -0
- package/src/features/document/document.d.ts +410 -0
- package/src/features/document/document.js +1049 -0
- package/src/features/document/element-type.d.ts +68 -0
- package/src/features/document/element-type.js +133 -0
- package/src/features/document/entity-type.d.ts +92 -0
- package/src/features/document/entity-type.js +93 -0
- package/src/features/document/feature-block.d.ts +16 -0
- package/src/features/document/feature-block.js +0 -0
- package/src/features/document/feature-inline.d.ts +13 -0
- package/src/features/document/feature-inline.js +0 -0
- package/src/features/document/feature-multi-package-part.d.ts +19 -0
- package/src/features/document/feature-multi-package-part.js +8 -0
- package/src/features/document/feature-package-level-part.d.ts +18 -0
- package/src/features/document/feature-package-level-part.js +8 -0
- package/src/features/document/feature-package-part.d.ts +14 -0
- package/src/features/document/feature-package-part.js +0 -0
- package/src/features/document/feature-run-leaf.d.ts +9 -0
- package/src/features/document/feature-run-leaf.js +0 -0
- package/src/features/document/headers-footers.d.ts +206 -0
- package/src/features/document/headers-footers.js +384 -0
- package/src/features/document/index.d.ts +41 -0
- package/src/features/document/index.js +34 -0
- package/src/features/document/length.d.ts +152 -0
- package/src/features/document/length.js +245 -0
- package/src/features/document/load-options.d.ts +14 -0
- package/src/features/document/load-options.js +0 -0
- package/src/features/document/locale-ids.d.ts +227 -0
- package/src/features/document/locale-ids.js +485 -0
- package/src/features/document/on-off.d.ts +9 -0
- package/src/features/document/on-off.js +27 -0
- package/src/features/document/page-setup.d.ts +339 -0
- package/src/features/document/page-setup.js +244 -0
- package/src/features/document/paragraph-format.d.ts +880 -0
- package/src/features/document/paragraph-format.js +2807 -0
- package/src/features/document/paragraph-item-collection.d.ts +162 -0
- package/src/features/document/paragraph-item-collection.js +363 -0
- package/src/features/document/paragraph-item.d.ts +83 -0
- package/src/features/document/paragraph-item.js +103 -0
- package/src/features/document/paragraph.d.ts +435 -0
- package/src/features/document/paragraph.js +888 -0
- package/src/features/document/run.d.ts +1 -0
- package/src/features/document/run.js +768 -0
- package/src/features/document/section-partition-flatten.d.ts +124 -0
- package/src/features/document/section-partition-flatten.js +217 -0
- package/src/features/document/section-properties-model.d.ts +13 -0
- package/src/features/document/section-properties-model.js +0 -0
- package/src/features/document/section.d.ts +93 -0
- package/src/features/document/section.js +178 -0
- package/src/features/document/sections.d.ts +103 -0
- package/src/features/document/sections.js +217 -0
- package/src/features/document/sub-super-script.d.ts +23 -0
- package/src/features/document/sub-super-script.js +43 -0
- package/src/features/document/text-range.d.ts +445 -0
- package/src/features/document/text-range.js +1156 -0
- package/src/features/document/typed-body-collections.d.ts +162 -0
- package/src/features/document/typed-body-collections.js +371 -0
- package/src/features/document/underline-style.d.ts +38 -0
- package/src/features/document/underline-style.js +126 -0
- package/src/features/document/units.d.ts +8 -0
- package/src/features/document/units.js +7 -0
- package/src/features/document/wml.d.ts +16 -0
- package/src/features/document/wml.js +67 -0
- package/src/features/drawing/authoring.d.ts +27 -0
- package/src/features/drawing/authoring.js +271 -0
- package/src/features/drawing/body-pr.d.ts +271 -0
- package/src/features/drawing/body-pr.js +663 -0
- package/src/features/drawing/drawing-shape.d.ts +1192 -0
- package/src/features/drawing/drawing-shape.js +3239 -0
- package/src/features/drawing/encode-builders.d.ts +176 -0
- package/src/features/drawing/encode-builders.js +390 -0
- package/src/features/drawing/fill-format.d.ts +52 -0
- package/src/features/drawing/fill-format.js +124 -0
- package/src/features/drawing/host-codec.d.ts +632 -0
- package/src/features/drawing/host-codec.js +2595 -0
- package/src/features/drawing/index.d.ts +13 -0
- package/src/features/drawing/index.js +33 -0
- package/src/features/drawing/line-format.d.ts +76 -0
- package/src/features/drawing/line-format.js +343 -0
- package/src/features/drawing/parse-register.d.ts +50 -0
- package/src/features/drawing/parse-register.js +257 -0
- package/src/features/drawing/residual-utils.d.ts +47 -0
- package/src/features/drawing/residual-utils.js +290 -0
- package/src/features/drawing/shape-types.d.ts +433 -0
- package/src/features/drawing/shape-types.js +437 -0
- package/src/features/drawing/sp-pr.d.ts +396 -0
- package/src/features/drawing/sp-pr.js +610 -0
- package/src/features/drawing/text-frame.d.ts +90 -0
- package/src/features/drawing/text-frame.js +152 -0
- package/src/features/drawing/types.d.ts +352 -0
- package/src/features/drawing/types.js +60 -0
- package/src/features/drawing/wrap-format.d.ts +62 -0
- package/src/features/drawing/wrap-format.js +114 -0
- package/src/features/editable-ranges/index.d.ts +494 -0
- package/src/features/editable-ranges/index.js +1348 -0
- package/src/features/fields/index.d.ts +428 -0
- package/src/features/fields/index.js +2148 -0
- package/src/features/fields/paragraph-field.d.ts +187 -0
- package/src/features/fields/paragraph-field.js +692 -0
- package/src/features/font-table/font-substitution-table.d.ts +75 -0
- package/src/features/font-table/font-substitution-table.js +257 -0
- package/src/features/font-table/font-table-entry.d.ts +255 -0
- package/src/features/font-table/font-table-entry.js +823 -0
- package/src/features/font-table/font-table.d.ts +128 -0
- package/src/features/font-table/font-table.js +313 -0
- package/src/features/font-table/index.d.ts +27 -0
- package/src/features/font-table/index.js +48 -0
- package/src/features/glossary/index.d.ts +97 -0
- package/src/features/glossary/index.js +286 -0
- package/src/features/headers-footers/index.d.ts +506 -0
- package/src/features/headers-footers/index.js +1666 -0
- package/src/features/hyperlinks/index.d.ts +230 -0
- package/src/features/hyperlinks/index.js +685 -0
- package/src/features/images/caption-authoring-api.d.ts +33 -0
- package/src/features/images/caption-authoring-api.js +33 -0
- package/src/features/images/caption-enums.d.ts +52 -0
- package/src/features/images/caption-enums.js +141 -0
- package/src/features/images/caption-host.d.ts +10 -0
- package/src/features/images/caption-host.js +21 -0
- package/src/features/images/captions.d.ts +13 -0
- package/src/features/images/captions.js +142 -0
- package/src/features/images/host-codec.d.ts +103 -0
- package/src/features/images/host-codec.js +720 -0
- package/src/features/images/image-sniff.d.ts +21 -0
- package/src/features/images/image-sniff.js +71 -0
- package/src/features/images/index.d.ts +506 -0
- package/src/features/images/index.js +1429 -0
- package/src/features/images/layout-types.d.ts +232 -0
- package/src/features/images/layout-types.js +294 -0
- package/src/features/images/public-entry.d.ts +9 -0
- package/src/features/images/public-entry.js +9 -0
- package/src/features/index.d.ts +35 -0
- package/src/features/index.js +36 -0
- package/src/features/mail-merge/index.d.ts +113 -0
- package/src/features/mail-merge/index.js +315 -0
- package/src/features/notes/index.d.ts +573 -0
- package/src/features/notes/index.js +1725 -0
- package/src/features/numbering/abstract-numbering.d.ts +90 -0
- package/src/features/numbering/abstract-numbering.js +292 -0
- package/src/features/numbering/index.d.ts +182 -0
- package/src/features/numbering/index.js +668 -0
- package/src/features/numbering/list-format.d.ts +158 -0
- package/src/features/numbering/list-format.js +590 -0
- package/src/features/numbering/list-string.d.ts +7 -0
- package/src/features/numbering/list-string.js +423 -0
- package/src/features/numbering/list-style.d.ts +204 -0
- package/src/features/numbering/list-style.js +1084 -0
- package/src/features/numbering/numbering-instance.d.ts +101 -0
- package/src/features/numbering/numbering-instance.js +329 -0
- package/src/features/numbering/numbering-level.d.ts +118 -0
- package/src/features/numbering/numbering-level.js +501 -0
- package/src/features/numbering/picture-bullet.d.ts +34 -0
- package/src/features/numbering/picture-bullet.js +88 -0
- package/src/features/ole-object/catalog.d.ts +300 -0
- package/src/features/ole-object/catalog.js +908 -0
- package/src/features/ole-object/index.d.ts +526 -0
- package/src/features/ole-object/index.js +1421 -0
- package/src/features/ole-object/relationship.d.ts +27 -0
- package/src/features/ole-object/relationship.js +27 -0
- package/src/features/ole-object/typed-dom.d.ts +186 -0
- package/src/features/ole-object/typed-dom.js +595 -0
- package/src/features/properties/index.d.ts +205 -0
- package/src/features/properties/index.js +549 -0
- package/src/features/revisions/index.d.ts +204 -0
- package/src/features/revisions/index.js +695 -0
- package/src/features/sections/column-collection.d.ts +119 -0
- package/src/features/sections/column-collection.js +478 -0
- package/src/features/sections/column.d.ts +15 -0
- package/src/features/sections/column.js +37 -0
- package/src/features/sections/index.d.ts +91 -0
- package/src/features/sections/index.js +1096 -0
- package/src/features/sections/margins.d.ts +40 -0
- package/src/features/sections/margins.js +105 -0
- package/src/features/sections/page-number-style.d.ts +21 -0
- package/src/features/sections/page-number-style.js +62 -0
- package/src/features/sections/page-orientation.d.ts +10 -0
- package/src/features/sections/page-orientation.js +10 -0
- package/src/features/sections/page-setup.d.ts +435 -0
- package/src/features/sections/page-setup.js +1479 -0
- package/src/features/sections/page-size.d.ts +59 -0
- package/src/features/sections/page-size.js +68 -0
- package/src/features/sections/section-break-code.d.ts +27 -0
- package/src/features/sections/section-break-code.js +60 -0
- package/src/features/sections/section-document-association.d.ts +18 -0
- package/src/features/sections/section-document-association.js +31 -0
- package/src/features/sections/section-validation.d.ts +43 -0
- package/src/features/sections/section-validation.js +97 -0
- package/src/features/settings/attached-template.d.ts +35 -0
- package/src/features/settings/attached-template.js +98 -0
- package/src/features/settings/compat-settings.d.ts +216 -0
- package/src/features/settings/compat-settings.js +508 -0
- package/src/features/settings/document-background.d.ts +59 -0
- package/src/features/settings/document-background.js +131 -0
- package/src/features/settings/document-protection.d.ts +65 -0
- package/src/features/settings/document-protection.js +157 -0
- package/src/features/settings/document-settings-facades.d.ts +108 -0
- package/src/features/settings/document-settings-facades.js +312 -0
- package/src/features/settings/document-settings-values.d.ts +43 -0
- package/src/features/settings/document-settings-values.js +60 -0
- package/src/features/settings/footnote-properties.d.ts +211 -0
- package/src/features/settings/footnote-properties.js +591 -0
- package/src/features/settings/index.d.ts +356 -0
- package/src/features/settings/index.js +829 -0
- package/src/features/settings/settings-children.d.ts +151 -0
- package/src/features/settings/settings-children.js +505 -0
- package/src/features/settings/web-settings.d.ts +88 -0
- package/src/features/settings/web-settings.js +227 -0
- package/src/features/settings/zoom.d.ts +79 -0
- package/src/features/settings/zoom.js +147 -0
- package/src/features/styles/builtin-catalog.d.ts +159 -0
- package/src/features/styles/builtin-catalog.js +963 -0
- package/src/features/styles/builtin-resolver.d.ts +49 -0
- package/src/features/styles/builtin-resolver.js +165 -0
- package/src/features/styles/default-styles.d.ts +37 -0
- package/src/features/styles/default-styles.js +186 -0
- package/src/features/styles/default-theme.d.ts +13 -0
- package/src/features/styles/default-theme.js +13 -0
- package/src/features/styles/doc-defaults.d.ts +58 -0
- package/src/features/styles/doc-defaults.js +178 -0
- package/src/features/styles/formatting-resolver.d.ts +27 -0
- package/src/features/styles/formatting-resolver.js +72 -0
- package/src/features/styles/index.d.ts +256 -0
- package/src/features/styles/index.js +1325 -0
- package/src/features/styles/latent-styles.d.ts +68 -0
- package/src/features/styles/latent-styles.js +305 -0
- package/src/features/styles/paragraph-properties.d.ts +71 -0
- package/src/features/styles/paragraph-properties.js +237 -0
- package/src/features/styles/run-properties.d.ts +93 -0
- package/src/features/styles/run-properties.js +516 -0
- package/src/features/styles/style-base.d.ts +402 -0
- package/src/features/styles/style-base.js +1026 -0
- package/src/features/styles/style-collection.d.ts +264 -0
- package/src/features/styles/style-collection.js +714 -0
- package/src/features/styles/style-format-bridge.d.ts +64 -0
- package/src/features/styles/style-format-bridge.js +100 -0
- package/src/features/styles/style.d.ts +84 -0
- package/src/features/styles/style.js +375 -0
- package/src/features/styles/styles-with-effects.d.ts +71 -0
- package/src/features/styles/styles-with-effects.js +180 -0
- package/src/features/styles/table-style.d.ts +272 -0
- package/src/features/styles/table-style.js +1226 -0
- package/src/features/styles/theme.d.ts +126 -0
- package/src/features/styles/theme.js +377 -0
- package/src/features/tables/border-style-map.d.ts +24 -0
- package/src/features/tables/border-style-map.js +81 -0
- package/src/features/tables/borders.d.ts +126 -0
- package/src/features/tables/borders.js +527 -0
- package/src/features/tables/collections.d.ts +113 -0
- package/src/features/tables/collections.js +261 -0
- package/src/features/tables/format.d.ts +208 -0
- package/src/features/tables/format.js +716 -0
- package/src/features/tables/index.d.ts +597 -0
- package/src/features/tables/index.js +2386 -0
- package/src/features/tables/paddings.d.ts +41 -0
- package/src/features/tables/paddings.js +97 -0
- package/src/features/tables/tbl-pr-positioning.d.ts +27 -0
- package/src/features/tables/tbl-pr-positioning.js +178 -0
- package/src/features/tables/tbl-pr.d.ts +528 -0
- package/src/features/tables/tbl-pr.js +1208 -0
- package/src/features/tables/tc-pr.d.ts +168 -0
- package/src/features/tables/tc-pr.js +553 -0
- package/src/features/tables/tr-pr.d.ts +60 -0
- package/src/features/tables/tr-pr.js +215 -0
- package/src/features/watermark/detect.d.ts +76 -0
- package/src/features/watermark/detect.js +219 -0
- package/src/features/watermark/index.d.ts +28 -0
- package/src/features/watermark/index.js +91 -0
- package/src/features/watermark/logical-store.d.ts +29 -0
- package/src/features/watermark/logical-store.js +31 -0
- package/src/features/watermark/model.d.ts +285 -0
- package/src/features/watermark/model.js +597 -0
- package/src/features/watermark/parse.d.ts +84 -0
- package/src/features/watermark/parse.js +815 -0
- package/src/features/watermark/serialize.d.ts +98 -0
- package/src/features/watermark/serialize.js +1517 -0
- package/src/global.js +1 -0
- package/src/index.d.ts +2 -0
- package/src/index.js +2 -0
|
@@ -0,0 +1,908 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
13
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
14
|
+
if (!m) return o;
|
|
15
|
+
var i = m.call(o), r, ar = [], e;
|
|
16
|
+
try {
|
|
17
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
18
|
+
}
|
|
19
|
+
catch (error) { e = { error: error }; }
|
|
20
|
+
finally {
|
|
21
|
+
try {
|
|
22
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
23
|
+
}
|
|
24
|
+
finally { if (e) throw e.error; }
|
|
25
|
+
}
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
var __spread = (this && this.__spread) || function () {
|
|
29
|
+
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
var __values = (this && this.__values) || function (o) {
|
|
33
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
|
|
34
|
+
if (m) return m.call(o);
|
|
35
|
+
return {
|
|
36
|
+
next: function () {
|
|
37
|
+
if (o && i >= o.length) o = void 0;
|
|
38
|
+
return { value: o && o[i++], done: !o };
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* OLE object multi-package-part catalog (TASK-8054 embed + TASK-8055 link +
|
|
44
|
+
* TASK-8056 icon/preview media).
|
|
45
|
+
*
|
|
46
|
+
* Owns the embedded-package bytes for OLE objects (`word/embeddings/*`),
|
|
47
|
+
* external link targets, and optional icon/preview media
|
|
48
|
+
* (`word/media/imageN.{png|jpeg}`), mirroring the images module part
|
|
49
|
+
* pipeline (`registerPendingImage` → `materializePending` → `allocatePart` →
|
|
50
|
+
* `applyToPackage`):
|
|
51
|
+
*
|
|
52
|
+
* - **Pending registration at append** — authoring registers payload bytes
|
|
53
|
+
* (and optional icon bytes) against the created {@link OleObject} without
|
|
54
|
+
* allocating package ids; relationship ids and part names are allocated at
|
|
55
|
+
* save (`materializePending`).
|
|
56
|
+
* - **Deterministic part naming** — embeddings `word/embeddings/oleObject{N}.bin`
|
|
57
|
+
* (ECMA-376-1 §15.2.10); icons `word/media/image{N}.{png|jpeg}`
|
|
58
|
+
* (ECMA-376-1 §15.2.14; images module parity).
|
|
59
|
+
* - **Content type** — embed: caller-provided, else the default
|
|
60
|
+
* `application/vnd.openxmlformats-officedocument.oleObject`; icon: sniffed
|
|
61
|
+
* PNG/JPEG only.
|
|
62
|
+
* - **No OLE byte dedupe** — OLE storages are not content-addressable (two
|
|
63
|
+
* appends of identical bytes yield two distinct parts and relationships).
|
|
64
|
+
* - **Icon hash dedupe** — identical icon bytes share one media part and one
|
|
65
|
+
* image relationship (sha256; images module parity).
|
|
66
|
+
* - **Orphan GC at save** — a part with no referencing `w:object` in the
|
|
67
|
+
* document is removed together with its relationship and content-type
|
|
68
|
+
* override (parity with the images module).
|
|
69
|
+
* - **Linked objects (TASK-8055)** — external relationships only
|
|
70
|
+
* (`TargetMode="External"`); **no part** is created for the OLE link.
|
|
71
|
+
* Icon media for a link is still an internal image part.
|
|
72
|
+
*
|
|
73
|
+
* Security (`.agent/policies/security.md`): payload bytes are opaque data.
|
|
74
|
+
* This catalog stores, replaces, and writes them; it never parses,
|
|
75
|
+
* decompresses, inspects beyond length, activates, or launches anything.
|
|
76
|
+
* Link targets are strings only. Icon bytes are PNG/JPEG media only.
|
|
77
|
+
*
|
|
78
|
+
* @packageDocumentation
|
|
79
|
+
*/
|
|
80
|
+
import { sha256Hex as sha256Digest } from '../../core/compat/sha256';
|
|
81
|
+
import { allocateRelationshipId, relationshipsWith, TargetMode } from '../../core/opc/relationships';
|
|
82
|
+
import { partByName, relationshipsForPart, withPartRelationships } from '../../core/opc/package';
|
|
83
|
+
import { partName, partNameKey } from '../../core/opc/part-name';
|
|
84
|
+
import { replaceOrAddPackagePart } from '../../core/registry/multi-part-handlers';
|
|
85
|
+
import { usedMainDocumentRelationshipIds } from '../../core/registry/multi-part-handlers';
|
|
86
|
+
import { IMAGE_RELATIONSHIP_TYPE, JPEG_CONTENT_TYPE, PNG_CONTENT_TYPE } from '../images/index';
|
|
87
|
+
import { OLE_OBJECT_LINK_LONG_PATH_RELATIONSHIP_TYPE, OLE_OBJECT_RELATIONSHIP_TYPE, } from './relationship';
|
|
88
|
+
/**
|
|
89
|
+
* Default content type for authored embedded-object parts (unknown binary
|
|
90
|
+
* storage). ECMA-376-1 §15.2.10 permits any content type; Word uses this
|
|
91
|
+
* token for OLE compound storages.
|
|
92
|
+
*
|
|
93
|
+
* @private
|
|
94
|
+
*/
|
|
95
|
+
export var OLE_OBJECT_DEFAULT_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.oleObject';
|
|
96
|
+
/** Part-name prefix for authored embedding parts (spec §Package parts). */
|
|
97
|
+
var EMBEDDINGS_PART_PREFIX = '/word/embeddings/oleObject';
|
|
98
|
+
/** Part-name extension for authored embedding parts. */
|
|
99
|
+
var EMBEDDINGS_PART_SUFFIX = '.bin';
|
|
100
|
+
/** Part-name prefix for authored icon media (images module parity). */
|
|
101
|
+
var MEDIA_PART_PREFIX = '/word/media/image';
|
|
102
|
+
/**
|
|
103
|
+
* Package catalog for embedded OLE object parts, linked external targets,
|
|
104
|
+
* and icon/preview media parts (TASK-8056).
|
|
105
|
+
*
|
|
106
|
+
* Loaded from Main-WordDocument relationships of the transitional `oleObject`
|
|
107
|
+
* type (and the long-path link variant on load only) plus image
|
|
108
|
+
* relationships whose parts are PNG/JPEG (icon media). Authored
|
|
109
|
+
* embeds/links/icons register pending entries that are materialized at save.
|
|
110
|
+
*
|
|
111
|
+
* @private
|
|
112
|
+
*/
|
|
113
|
+
var OleObjectCatalog = /** @class */ (function () {
|
|
114
|
+
/**
|
|
115
|
+
* @private
|
|
116
|
+
*/
|
|
117
|
+
function OleObjectCatalog(entries, externalByRelationshipId, iconEntries) {
|
|
118
|
+
var e_1, _a;
|
|
119
|
+
if (externalByRelationshipId === void 0) { externalByRelationshipId = new Map(); }
|
|
120
|
+
if (iconEntries === void 0) { iconEntries = new Map(); }
|
|
121
|
+
this.entries = entries;
|
|
122
|
+
this.byRelationshipId = new Map(__spread(entries.values()).map(function (entry) { return [entry.relationshipId, entry]; }));
|
|
123
|
+
this.externalByRelationshipId = externalByRelationshipId;
|
|
124
|
+
this.iconEntries = iconEntries;
|
|
125
|
+
this.iconByRelationshipId = new Map(__spread(iconEntries.values()).map(function (entry) { return [entry.relationshipId, entry]; }));
|
|
126
|
+
this.iconHashToRelationshipId = new Map();
|
|
127
|
+
try {
|
|
128
|
+
for (var _b = __values(iconEntries.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
129
|
+
var entry = _c.value;
|
|
130
|
+
this.iconHashToRelationshipId.set(sha256Hex(entry.data), entry.relationshipId);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
134
|
+
finally {
|
|
135
|
+
try {
|
|
136
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
137
|
+
}
|
|
138
|
+
finally { if (e_1) throw e_1.error; }
|
|
139
|
+
}
|
|
140
|
+
this.pendingRemovals = [];
|
|
141
|
+
this.pendingExternalRemovals = [];
|
|
142
|
+
this.pendingIconRemovals = [];
|
|
143
|
+
this.pendingEmbeds = new Map();
|
|
144
|
+
this.pendingLinks = new Map();
|
|
145
|
+
this.pendingIcons = new Map();
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Loaded + pending embedded-object entries (embedded only; linked objects
|
|
149
|
+
* have no part).
|
|
150
|
+
*
|
|
151
|
+
* @private
|
|
152
|
+
*/
|
|
153
|
+
OleObjectCatalog.prototype.objects = function () {
|
|
154
|
+
return __spread(this.entries.values());
|
|
155
|
+
};
|
|
156
|
+
/**
|
|
157
|
+
* Payload bytes for a main-document relationship id (embedded parts only).
|
|
158
|
+
*
|
|
159
|
+
* @private
|
|
160
|
+
*/
|
|
161
|
+
OleObjectCatalog.prototype.bytesForRelationship = function (relationshipId) {
|
|
162
|
+
var __ts33_0;
|
|
163
|
+
return ((__ts33_0 = this.byRelationshipId.get(relationshipId)), __ts33_0 == null ? undefined : __ts33_0.data);
|
|
164
|
+
};
|
|
165
|
+
/**
|
|
166
|
+
* External target string for a main-document relationship id (linked
|
|
167
|
+
* objects only). Returns `undefined` for embeds. The string is stored
|
|
168
|
+
* verbatim and is never fetched, resolved, or opened.
|
|
169
|
+
*
|
|
170
|
+
* @private
|
|
171
|
+
*/
|
|
172
|
+
OleObjectCatalog.prototype.targetForRelationship = function (relationshipId) {
|
|
173
|
+
var __ts33_1;
|
|
174
|
+
return ((__ts33_1 = this.externalByRelationshipId.get(relationshipId)), __ts33_1 == null ? undefined : __ts33_1.target);
|
|
175
|
+
};
|
|
176
|
+
/**
|
|
177
|
+
* Icon/preview image bytes for a main-document image relationship id
|
|
178
|
+
* (TASK-8056). Returns `undefined` when the id is not an icon media entry.
|
|
179
|
+
*
|
|
180
|
+
* @private
|
|
181
|
+
*/
|
|
182
|
+
OleObjectCatalog.prototype.iconBytesForRelationship = function (relationshipId) {
|
|
183
|
+
var __ts33_2;
|
|
184
|
+
return ((__ts33_2 = this.iconByRelationshipId.get(relationshipId)), __ts33_2 == null ? undefined : __ts33_2.data);
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* @private
|
|
188
|
+
* Pending payload bytes for a not-yet-materialized embed. */
|
|
189
|
+
OleObjectCatalog.prototype.pendingBytesFor = function (object) {
|
|
190
|
+
var __ts33_3;
|
|
191
|
+
return ((__ts33_3 = this.pendingEmbeds.get(object)), __ts33_3 == null ? undefined : __ts33_3.bytes);
|
|
192
|
+
};
|
|
193
|
+
/**
|
|
194
|
+
* @private
|
|
195
|
+
* Pending external target for a not-yet-materialized link. */
|
|
196
|
+
OleObjectCatalog.prototype.pendingTargetFor = function (object) {
|
|
197
|
+
var __ts33_4;
|
|
198
|
+
return ((__ts33_4 = this.pendingLinks.get(object)), __ts33_4 == null ? undefined : __ts33_4.target);
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* @private
|
|
202
|
+
* Pending icon bytes for a not-yet-materialized icon. */
|
|
203
|
+
OleObjectCatalog.prototype.pendingIconBytesFor = function (object) {
|
|
204
|
+
var __ts33_5;
|
|
205
|
+
return ((__ts33_5 = this.pendingIcons.get(object)), __ts33_5 == null ? undefined : __ts33_5.bytes);
|
|
206
|
+
};
|
|
207
|
+
/**
|
|
208
|
+
* @private
|
|
209
|
+
* Part names already owned by the catalog (embed + icon). */
|
|
210
|
+
OleObjectCatalog.prototype.pendingPartNames = function () {
|
|
211
|
+
return __spread(this.entries.keys(), this.iconEntries.keys());
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* @private
|
|
215
|
+
* Relationship ids already owned by the catalog
|
|
216
|
+
* (embed + link + icon).
|
|
217
|
+
*/
|
|
218
|
+
OleObjectCatalog.prototype.pendingRelationshipIds = function () {
|
|
219
|
+
return __spread(this.byRelationshipId.keys(), this.externalByRelationshipId.keys(), this.iconByRelationshipId.keys());
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* @private
|
|
223
|
+
* Record embed intent without allocating package ids
|
|
224
|
+
* (images `registerPendingImage` pattern). `contentType` may be
|
|
225
|
+
* caller-provided or the module default.
|
|
226
|
+
*/
|
|
227
|
+
OleObjectCatalog.prototype.registerPendingEmbed = function (object, bytes, contentType) {
|
|
228
|
+
this.pendingEmbeds.set(object, { bytes: bytes, contentType: contentType });
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* @private
|
|
232
|
+
* Record link intent without allocating package ids
|
|
233
|
+
* (hyperlinks `registerPendingExternal` pattern). Target is a stored
|
|
234
|
+
* string only — never fetched.
|
|
235
|
+
*/
|
|
236
|
+
OleObjectCatalog.prototype.registerPendingLink = function (object, target) {
|
|
237
|
+
this.pendingLinks.set(object, { target: target });
|
|
238
|
+
};
|
|
239
|
+
/**
|
|
240
|
+
* @private
|
|
241
|
+
* Record icon/preview media intent without allocating package
|
|
242
|
+
* ids (TASK-8056; images `registerPendingImage` pattern). Bytes must
|
|
243
|
+
* already be sniffed as PNG or JPEG by the caller.
|
|
244
|
+
*/
|
|
245
|
+
OleObjectCatalog.prototype.registerPendingIcon = function (object, bytes, contentType) {
|
|
246
|
+
this.pendingIcons.set(object, { bytes: bytes, contentType: contentType });
|
|
247
|
+
};
|
|
248
|
+
/**
|
|
249
|
+
* @private
|
|
250
|
+
* Drop a pending embed removed before save. */
|
|
251
|
+
OleObjectCatalog.prototype.discardPendingEmbed = function (object) {
|
|
252
|
+
this.pendingEmbeds.delete(object);
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* @private
|
|
256
|
+
* Drop a pending link removed before save. */
|
|
257
|
+
OleObjectCatalog.prototype.discardPendingLink = function (object) {
|
|
258
|
+
this.pendingLinks.delete(object);
|
|
259
|
+
};
|
|
260
|
+
/**
|
|
261
|
+
* @private
|
|
262
|
+
* Drop a pending icon removed before save. */
|
|
263
|
+
OleObjectCatalog.prototype.discardPendingIcon = function (object) {
|
|
264
|
+
this.pendingIcons.delete(object);
|
|
265
|
+
};
|
|
266
|
+
/**
|
|
267
|
+
* @private
|
|
268
|
+
* Replace bytes on a not-yet-materialized embed. */
|
|
269
|
+
OleObjectCatalog.prototype.updatePendingBytes = function (object, bytes) {
|
|
270
|
+
var pending = this.pendingEmbeds.get(object);
|
|
271
|
+
if (pending === undefined) {
|
|
272
|
+
throw new Error('Pending OLE object was not found');
|
|
273
|
+
}
|
|
274
|
+
this.pendingEmbeds.set(object, __assign({}, pending, { bytes: bytes }));
|
|
275
|
+
};
|
|
276
|
+
/**
|
|
277
|
+
* @private
|
|
278
|
+
* Replace bytes on a loaded entry and mark it dirty
|
|
279
|
+
* (byte-replace only; the library never interprets OLE storages).
|
|
280
|
+
*/
|
|
281
|
+
OleObjectCatalog.prototype.replaceBytes = function (relationshipId, bytes) {
|
|
282
|
+
var entry = this.byRelationshipId.get(relationshipId);
|
|
283
|
+
if (entry === undefined) {
|
|
284
|
+
throw new Error("OLE object relationship " + relationshipId + " is not loaded");
|
|
285
|
+
}
|
|
286
|
+
entry.data = bytes;
|
|
287
|
+
entry.dirty = true;
|
|
288
|
+
};
|
|
289
|
+
/**
|
|
290
|
+
* @private
|
|
291
|
+
* Queue orphan removal of a part + relationship + content-type
|
|
292
|
+
* override (GC parity with the images module). For external (link-only)
|
|
293
|
+
* relationships, removes the relationship entry only — there is no part.
|
|
294
|
+
*/
|
|
295
|
+
OleObjectCatalog.prototype.removeEntry = function (relationshipId) {
|
|
296
|
+
var entry = this.byRelationshipId.get(relationshipId);
|
|
297
|
+
if (entry !== undefined) {
|
|
298
|
+
this.entries.delete(entry.partName);
|
|
299
|
+
this.byRelationshipId.delete(relationshipId);
|
|
300
|
+
this.pendingRemovals.push(entry);
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
if (this.externalByRelationshipId.has(relationshipId)) {
|
|
304
|
+
this.externalByRelationshipId.delete(relationshipId);
|
|
305
|
+
this.pendingExternalRemovals.push(relationshipId);
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
/**
|
|
309
|
+
* @private
|
|
310
|
+
* Queue removal of an icon media part + image relationship
|
|
311
|
+
* (TASK-8056). Shared media (hash-deduped) is removed only when this is
|
|
312
|
+
* the last catalog reference; callers must not remove shared icons while
|
|
313
|
+
* other objects still reference the same relationship id.
|
|
314
|
+
*/
|
|
315
|
+
OleObjectCatalog.prototype.removeIconEntry = function (relationshipId) {
|
|
316
|
+
var entry = this.iconByRelationshipId.get(relationshipId);
|
|
317
|
+
if (entry === undefined) {
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
this.iconEntries.delete(entry.partName);
|
|
321
|
+
this.iconByRelationshipId.delete(relationshipId);
|
|
322
|
+
var hash = sha256Hex(entry.data);
|
|
323
|
+
if (this.iconHashToRelationshipId.get(hash) === relationshipId) {
|
|
324
|
+
this.iconHashToRelationshipId.delete(hash);
|
|
325
|
+
}
|
|
326
|
+
this.pendingIconRemovals.push(entry);
|
|
327
|
+
};
|
|
328
|
+
/**
|
|
329
|
+
* @private
|
|
330
|
+
*/
|
|
331
|
+
OleObjectCatalog.prototype.isDirty = function () {
|
|
332
|
+
var e_2, _a, e_3, _b, e_4, _c;
|
|
333
|
+
if (this.pendingRemovals.length > 0 ||
|
|
334
|
+
this.pendingExternalRemovals.length > 0 ||
|
|
335
|
+
this.pendingIconRemovals.length > 0 ||
|
|
336
|
+
this.pendingEmbeds.size > 0 ||
|
|
337
|
+
this.pendingLinks.size > 0 ||
|
|
338
|
+
this.pendingIcons.size > 0) {
|
|
339
|
+
return true;
|
|
340
|
+
}
|
|
341
|
+
try {
|
|
342
|
+
for (var _d = __values(this.entries.values()), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
343
|
+
var entry = _e.value;
|
|
344
|
+
if (entry.dirty || entry.pendingRelationship !== undefined) {
|
|
345
|
+
return true;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
350
|
+
finally {
|
|
351
|
+
try {
|
|
352
|
+
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
|
|
353
|
+
}
|
|
354
|
+
finally { if (e_2) throw e_2.error; }
|
|
355
|
+
}
|
|
356
|
+
try {
|
|
357
|
+
for (var _f = __values(this.externalByRelationshipId.values()), _g = _f.next(); !_g.done; _g = _f.next()) {
|
|
358
|
+
var entry = _g.value;
|
|
359
|
+
if (entry.pendingRelationship !== undefined) {
|
|
360
|
+
return true;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
365
|
+
finally {
|
|
366
|
+
try {
|
|
367
|
+
if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
|
|
368
|
+
}
|
|
369
|
+
finally { if (e_3) throw e_3.error; }
|
|
370
|
+
}
|
|
371
|
+
try {
|
|
372
|
+
for (var _h = __values(this.iconEntries.values()), _j = _h.next(); !_j.done; _j = _h.next()) {
|
|
373
|
+
var entry = _j.value;
|
|
374
|
+
if (entry.dirty || entry.pendingRelationship !== undefined) {
|
|
375
|
+
return true;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
380
|
+
finally {
|
|
381
|
+
try {
|
|
382
|
+
if (_j && !_j.done && (_c = _h.return)) _c.call(_h);
|
|
383
|
+
}
|
|
384
|
+
finally { if (e_4) throw e_4.error; }
|
|
385
|
+
}
|
|
386
|
+
return false;
|
|
387
|
+
};
|
|
388
|
+
/**
|
|
389
|
+
* @private
|
|
390
|
+
* Allocate a new embedding part + main-document relationship
|
|
391
|
+
* for one pending embed (images `allocatePart` pattern; no dedupe).
|
|
392
|
+
*/
|
|
393
|
+
OleObjectCatalog.prototype.allocatePart = function (bytes, contentType, usedRelIds, usedPartNames) {
|
|
394
|
+
var partNameValue = allocateEmbeddingPartName(usedPartNames);
|
|
395
|
+
var relId = allocateRelationshipId(usedRelIds);
|
|
396
|
+
while (this.byRelationshipId.has(relId) ||
|
|
397
|
+
this.externalByRelationshipId.has(relId) ||
|
|
398
|
+
this.iconByRelationshipId.has(relId)) {
|
|
399
|
+
relId = allocateRelationshipId(new Set(__spread(usedRelIds, [relId])));
|
|
400
|
+
}
|
|
401
|
+
var entry = {
|
|
402
|
+
partName: partNameValue,
|
|
403
|
+
relationshipId: relId,
|
|
404
|
+
relationshipType: OLE_OBJECT_RELATIONSHIP_TYPE,
|
|
405
|
+
contentType: contentType,
|
|
406
|
+
data: bytes,
|
|
407
|
+
dirty: true,
|
|
408
|
+
pendingRelationship: {
|
|
409
|
+
id: relId,
|
|
410
|
+
type: OLE_OBJECT_RELATIONSHIP_TYPE,
|
|
411
|
+
target: relativeTarget(partNameValue),
|
|
412
|
+
extraAttributes: [],
|
|
413
|
+
children: [],
|
|
414
|
+
},
|
|
415
|
+
};
|
|
416
|
+
this.entries.set(partNameValue, entry);
|
|
417
|
+
this.byRelationshipId.set(relId, entry);
|
|
418
|
+
return { entry: entry, relationshipId: relId };
|
|
419
|
+
};
|
|
420
|
+
/**
|
|
421
|
+
* @private
|
|
422
|
+
* Allocate an external oleObject relationship for one pending
|
|
423
|
+
* link (hyperlinks `allocateExternalTarget` pattern). No part is created.
|
|
424
|
+
* Always emits the transitional oleObject type — never the long-path
|
|
425
|
+
* accept-only variant.
|
|
426
|
+
*/
|
|
427
|
+
OleObjectCatalog.prototype.allocateExternalTarget = function (target, usedRelIds) {
|
|
428
|
+
var relId = allocateRelationshipId(usedRelIds);
|
|
429
|
+
while (this.byRelationshipId.has(relId) ||
|
|
430
|
+
this.externalByRelationshipId.has(relId) ||
|
|
431
|
+
this.iconByRelationshipId.has(relId)) {
|
|
432
|
+
relId = allocateRelationshipId(new Set(__spread(usedRelIds, [relId])));
|
|
433
|
+
}
|
|
434
|
+
var pending = {
|
|
435
|
+
id: relId,
|
|
436
|
+
type: OLE_OBJECT_RELATIONSHIP_TYPE,
|
|
437
|
+
target: target,
|
|
438
|
+
targetMode: TargetMode.External,
|
|
439
|
+
extraAttributes: [],
|
|
440
|
+
children: [],
|
|
441
|
+
};
|
|
442
|
+
this.externalByRelationshipId.set(relId, {
|
|
443
|
+
relationshipId: relId,
|
|
444
|
+
target: target,
|
|
445
|
+
relationshipType: OLE_OBJECT_RELATIONSHIP_TYPE,
|
|
446
|
+
pendingRelationship: pending,
|
|
447
|
+
});
|
|
448
|
+
return relId;
|
|
449
|
+
};
|
|
450
|
+
/**
|
|
451
|
+
* @private
|
|
452
|
+
* Allocate (or reuse via sha256) an icon media part + image
|
|
453
|
+
* relationship (TASK-8056; images `allocatePart` + hash-dedupe pattern).
|
|
454
|
+
*/
|
|
455
|
+
OleObjectCatalog.prototype.allocateIconPart = function (bytes, contentType, usedRelIds, usedPartNames) {
|
|
456
|
+
var hash = sha256Hex(bytes);
|
|
457
|
+
var existingId = this.iconHashToRelationshipId.get(hash);
|
|
458
|
+
if (existingId !== undefined) {
|
|
459
|
+
var existing = this.iconByRelationshipId.get(existingId);
|
|
460
|
+
if (existing !== undefined) {
|
|
461
|
+
return { entry: existing, relationshipId: existingId };
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
var partNameValue = allocateIconPartName(contentType, usedPartNames);
|
|
465
|
+
var relId = allocateRelationshipId(usedRelIds);
|
|
466
|
+
while (this.byRelationshipId.has(relId) ||
|
|
467
|
+
this.externalByRelationshipId.has(relId) ||
|
|
468
|
+
this.iconByRelationshipId.has(relId)) {
|
|
469
|
+
relId = allocateRelationshipId(new Set(__spread(usedRelIds, [relId])));
|
|
470
|
+
}
|
|
471
|
+
var entry = {
|
|
472
|
+
partName: partNameValue,
|
|
473
|
+
relationshipId: relId,
|
|
474
|
+
relationshipType: IMAGE_RELATIONSHIP_TYPE,
|
|
475
|
+
contentType: contentType,
|
|
476
|
+
data: bytes,
|
|
477
|
+
dirty: true,
|
|
478
|
+
pendingRelationship: {
|
|
479
|
+
id: relId,
|
|
480
|
+
type: IMAGE_RELATIONSHIP_TYPE,
|
|
481
|
+
target: relativeTarget(partNameValue),
|
|
482
|
+
extraAttributes: [],
|
|
483
|
+
children: [],
|
|
484
|
+
},
|
|
485
|
+
};
|
|
486
|
+
this.iconEntries.set(partNameValue, entry);
|
|
487
|
+
this.iconByRelationshipId.set(relId, entry);
|
|
488
|
+
this.iconHashToRelationshipId.set(hash, relId);
|
|
489
|
+
return { entry: entry, relationshipId: relId };
|
|
490
|
+
};
|
|
491
|
+
/**
|
|
492
|
+
* @private
|
|
493
|
+
* Allocate relationship ids (+ part names for embeds/icons) for
|
|
494
|
+
* pending embeds, links, and icons and resolve each object's `r:id` values
|
|
495
|
+
* (save-time `materializePending`). The caller supplies the modeled OLE
|
|
496
|
+
* objects in document order (avoids a circular import of the index listing
|
|
497
|
+
* helper). Objects that carry a pending registration but were not visited
|
|
498
|
+
* keep their registration (the next save retries); objects removed before
|
|
499
|
+
* save are dropped via `discardPendingEmbed` / `discardPendingLink` /
|
|
500
|
+
* `discardPendingIcon`.
|
|
501
|
+
*/
|
|
502
|
+
OleObjectCatalog.prototype.materializePending = function (document, objects) {
|
|
503
|
+
var e_5, _a, e_6, _b;
|
|
504
|
+
if (this.pendingEmbeds.size === 0 &&
|
|
505
|
+
this.pendingLinks.size === 0 &&
|
|
506
|
+
this.pendingIcons.size === 0) {
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
var usedRelIds = usedMainDocumentRelationshipIds(document);
|
|
510
|
+
try {
|
|
511
|
+
for (var _c = __values(this.pendingRelationshipIds()), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
512
|
+
var id = _d.value;
|
|
513
|
+
usedRelIds.add(id);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
517
|
+
finally {
|
|
518
|
+
try {
|
|
519
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
520
|
+
}
|
|
521
|
+
finally { if (e_5) throw e_5.error; }
|
|
522
|
+
}
|
|
523
|
+
var usedPartNames = usedPartNameKeys(document, this);
|
|
524
|
+
try {
|
|
525
|
+
for (var objects_1 = __values(objects), objects_1_1 = objects_1.next(); !objects_1_1.done; objects_1_1 = objects_1.next()) {
|
|
526
|
+
var object = objects_1_1.value;
|
|
527
|
+
if (object.isPendingRelationship()) {
|
|
528
|
+
var pendingEmbed = this.pendingEmbeds.get(object);
|
|
529
|
+
if (pendingEmbed !== undefined) {
|
|
530
|
+
var allocated = this.allocatePart(pendingEmbed.bytes, pendingEmbed.contentType, usedRelIds, usedPartNames);
|
|
531
|
+
usedRelIds.add(allocated.relationshipId);
|
|
532
|
+
usedPartNames.add(partNameKey(allocated.entry.partName));
|
|
533
|
+
object.resolveRelationshipId(allocated.relationshipId);
|
|
534
|
+
this.pendingEmbeds.delete(object);
|
|
535
|
+
}
|
|
536
|
+
else {
|
|
537
|
+
var pendingLink = this.pendingLinks.get(object);
|
|
538
|
+
if (pendingLink !== undefined) {
|
|
539
|
+
var relationshipId = this.allocateExternalTarget(pendingLink.target, usedRelIds);
|
|
540
|
+
usedRelIds.add(relationshipId);
|
|
541
|
+
object.resolveRelationshipId(relationshipId);
|
|
542
|
+
this.pendingLinks.delete(object);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
if (object.isPendingIcon()) {
|
|
547
|
+
var pendingIcon = this.pendingIcons.get(object);
|
|
548
|
+
if (pendingIcon !== undefined) {
|
|
549
|
+
var allocated = this.allocateIconPart(pendingIcon.bytes, pendingIcon.contentType, usedRelIds, usedPartNames);
|
|
550
|
+
usedRelIds.add(allocated.relationshipId);
|
|
551
|
+
usedPartNames.add(partNameKey(allocated.entry.partName));
|
|
552
|
+
object.resolveIconRelationshipId(allocated.relationshipId);
|
|
553
|
+
this.pendingIcons.delete(object);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
559
|
+
finally {
|
|
560
|
+
try {
|
|
561
|
+
if (objects_1_1 && !objects_1_1.done && (_b = objects_1.return)) _b.call(objects_1);
|
|
562
|
+
}
|
|
563
|
+
finally { if (e_6) throw e_6.error; }
|
|
564
|
+
}
|
|
565
|
+
};
|
|
566
|
+
/**
|
|
567
|
+
* @private
|
|
568
|
+
*/
|
|
569
|
+
OleObjectCatalog.prototype.applyToPackage = function (pkg, mainPartName) {
|
|
570
|
+
var e_7, _a, e_8, _b, e_9, _c, e_10, _d, e_11, _e, e_12, _f;
|
|
571
|
+
var next = pkg;
|
|
572
|
+
var _loop_1 = function (entry) {
|
|
573
|
+
if (!entry.dirty && entry.pendingRelationship === undefined) {
|
|
574
|
+
return "continue";
|
|
575
|
+
}
|
|
576
|
+
var rel = entry.pendingRelationship != null ? entry.pendingRelationship : relationshipsForPart(next, mainPartName).items.find(function (item) { return item.id === entry.relationshipId; });
|
|
577
|
+
next = replaceOrAddPackagePart(next, mainPartName, entry.partName, entry.contentType, entry.data, rel);
|
|
578
|
+
entry.dirty = false;
|
|
579
|
+
entry.pendingRelationship = undefined;
|
|
580
|
+
};
|
|
581
|
+
try {
|
|
582
|
+
for (var _g = __values(this.entries.values()), _h = _g.next(); !_h.done; _h = _g.next()) {
|
|
583
|
+
var entry = _h.value;
|
|
584
|
+
_loop_1(entry);
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
588
|
+
finally {
|
|
589
|
+
try {
|
|
590
|
+
if (_h && !_h.done && (_a = _g.return)) _a.call(_g);
|
|
591
|
+
}
|
|
592
|
+
finally { if (e_7) throw e_7.error; }
|
|
593
|
+
}
|
|
594
|
+
var _loop_2 = function (entry) {
|
|
595
|
+
if (!entry.dirty && entry.pendingRelationship === undefined) {
|
|
596
|
+
return "continue";
|
|
597
|
+
}
|
|
598
|
+
var rel = entry.pendingRelationship != null ? entry.pendingRelationship : relationshipsForPart(next, mainPartName).items.find(function (item) { return item.id === entry.relationshipId; });
|
|
599
|
+
next = replaceOrAddPackagePart(next, mainPartName, entry.partName, entry.contentType, entry.data, rel);
|
|
600
|
+
entry.dirty = false;
|
|
601
|
+
entry.pendingRelationship = undefined;
|
|
602
|
+
};
|
|
603
|
+
try {
|
|
604
|
+
for (var _j = __values(this.iconEntries.values()), _k = _j.next(); !_k.done; _k = _j.next()) {
|
|
605
|
+
var entry = _k.value;
|
|
606
|
+
_loop_2(entry);
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
610
|
+
finally {
|
|
611
|
+
try {
|
|
612
|
+
if (_k && !_k.done && (_b = _j.return)) _b.call(_j);
|
|
613
|
+
}
|
|
614
|
+
finally { if (e_8) throw e_8.error; }
|
|
615
|
+
}
|
|
616
|
+
// Merge pending external (link) relationships — no parts (hyperlinks pattern).
|
|
617
|
+
var pendingExternalRels = __spread(this.externalByRelationshipId.values()).map(function (entry) { return entry.pendingRelationship; })
|
|
618
|
+
.filter(function (rel) { return rel !== undefined; });
|
|
619
|
+
if (pendingExternalRels.length > 0) {
|
|
620
|
+
var existing = relationshipsForPart(next, mainPartName);
|
|
621
|
+
var merged = mergePendingRelationships(existing, pendingExternalRels);
|
|
622
|
+
try {
|
|
623
|
+
for (var _l = __values(this.externalByRelationshipId.values()), _m = _l.next(); !_m.done; _m = _l.next()) {
|
|
624
|
+
var entry = _m.value;
|
|
625
|
+
entry.pendingRelationship = undefined;
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
629
|
+
finally {
|
|
630
|
+
try {
|
|
631
|
+
if (_m && !_m.done && (_c = _l.return)) _c.call(_l);
|
|
632
|
+
}
|
|
633
|
+
finally { if (e_9) throw e_9.error; }
|
|
634
|
+
}
|
|
635
|
+
next = withPartRelationships(next, mainPartName, merged);
|
|
636
|
+
}
|
|
637
|
+
try {
|
|
638
|
+
for (var _o = __values(this.pendingRemovals), _p = _o.next(); !_p.done; _p = _o.next()) {
|
|
639
|
+
var entry = _p.value;
|
|
640
|
+
next = removeOleObjectPartFromPackage(next, mainPartName, entry);
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
catch (e_10_1) { e_10 = { error: e_10_1 }; }
|
|
644
|
+
finally {
|
|
645
|
+
try {
|
|
646
|
+
if (_p && !_p.done && (_d = _o.return)) _d.call(_o);
|
|
647
|
+
}
|
|
648
|
+
finally { if (e_10) throw e_10.error; }
|
|
649
|
+
}
|
|
650
|
+
this.pendingRemovals.length = 0;
|
|
651
|
+
try {
|
|
652
|
+
for (var _q = __values(this.pendingIconRemovals), _r = _q.next(); !_r.done; _r = _q.next()) {
|
|
653
|
+
var entry = _r.value;
|
|
654
|
+
next = removeOleIconPartFromPackage(next, mainPartName, entry);
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
catch (e_11_1) { e_11 = { error: e_11_1 }; }
|
|
658
|
+
finally {
|
|
659
|
+
try {
|
|
660
|
+
if (_r && !_r.done && (_e = _q.return)) _e.call(_q);
|
|
661
|
+
}
|
|
662
|
+
finally { if (e_11) throw e_11.error; }
|
|
663
|
+
}
|
|
664
|
+
this.pendingIconRemovals.length = 0;
|
|
665
|
+
var _loop_3 = function (relationshipId) {
|
|
666
|
+
next = withFilteredPartRelationshipsLocal(next, mainPartName, function (rel) { return rel.id !== relationshipId; });
|
|
667
|
+
};
|
|
668
|
+
try {
|
|
669
|
+
for (var _s = __values(this.pendingExternalRemovals), _t = _s.next(); !_t.done; _t = _s.next()) {
|
|
670
|
+
var relationshipId = _t.value;
|
|
671
|
+
_loop_3(relationshipId);
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
catch (e_12_1) { e_12 = { error: e_12_1 }; }
|
|
675
|
+
finally {
|
|
676
|
+
try {
|
|
677
|
+
if (_t && !_t.done && (_f = _s.return)) _f.call(_s);
|
|
678
|
+
}
|
|
679
|
+
finally { if (e_12) throw e_12.error; }
|
|
680
|
+
}
|
|
681
|
+
this.pendingExternalRemovals.length = 0;
|
|
682
|
+
return next;
|
|
683
|
+
};
|
|
684
|
+
return OleObjectCatalog;
|
|
685
|
+
}());
|
|
686
|
+
export { OleObjectCatalog };
|
|
687
|
+
function mergePendingRelationships(existing, add) {
|
|
688
|
+
var e_13, _a;
|
|
689
|
+
if (add.length === 0) {
|
|
690
|
+
return existing;
|
|
691
|
+
}
|
|
692
|
+
var used = new Set(existing.items.map(function (item) { return item.id; }));
|
|
693
|
+
var next = __spread(existing.items);
|
|
694
|
+
try {
|
|
695
|
+
for (var add_1 = __values(add), add_1_1 = add_1.next(); !add_1_1.done; add_1_1 = add_1.next()) {
|
|
696
|
+
var rel = add_1_1.value;
|
|
697
|
+
var id = rel.id;
|
|
698
|
+
while (used.has(id)) {
|
|
699
|
+
id = allocateRelationshipId(used);
|
|
700
|
+
}
|
|
701
|
+
used.add(id);
|
|
702
|
+
next.push(__assign({}, rel, { id: id }));
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
catch (e_13_1) { e_13 = { error: e_13_1 }; }
|
|
706
|
+
finally {
|
|
707
|
+
try {
|
|
708
|
+
if (add_1_1 && !add_1_1.done && (_a = add_1.return)) _a.call(add_1);
|
|
709
|
+
}
|
|
710
|
+
finally { if (e_13) throw e_13.error; }
|
|
711
|
+
}
|
|
712
|
+
return relationshipsWith(next, existing.opaque);
|
|
713
|
+
}
|
|
714
|
+
function relativeTarget(partNameValue) {
|
|
715
|
+
return partNameValue.slice('/word/'.length);
|
|
716
|
+
}
|
|
717
|
+
/** First unused `oleObject{N}.bin` part name (deterministic, no dedupe). */
|
|
718
|
+
function allocateEmbeddingPartName(used) {
|
|
719
|
+
var index = 1;
|
|
720
|
+
while (used.has(partNameKey("" + EMBEDDINGS_PART_PREFIX + String(index) + EMBEDDINGS_PART_SUFFIX))) {
|
|
721
|
+
index += 1;
|
|
722
|
+
}
|
|
723
|
+
return partName("" + EMBEDDINGS_PART_PREFIX + String(index) + EMBEDDINGS_PART_SUFFIX);
|
|
724
|
+
}
|
|
725
|
+
/** First unused `image{N}.{png|jpeg}` part name (images module parity). */
|
|
726
|
+
function allocateIconPartName(contentType, used) {
|
|
727
|
+
var ext = extensionForIconContentType(contentType);
|
|
728
|
+
var index = 1;
|
|
729
|
+
while (used.has(partNameKey("" + MEDIA_PART_PREFIX + String(index) + "." + ext))) {
|
|
730
|
+
index += 1;
|
|
731
|
+
}
|
|
732
|
+
return partName("" + MEDIA_PART_PREFIX + String(index) + "." + ext);
|
|
733
|
+
}
|
|
734
|
+
function extensionForIconContentType(contentType) {
|
|
735
|
+
return contentType === JPEG_CONTENT_TYPE ? 'jpeg' : 'png';
|
|
736
|
+
}
|
|
737
|
+
function sha256Hex(data) {
|
|
738
|
+
return sha256Digest(data);
|
|
739
|
+
}
|
|
740
|
+
function usedPartNameKeys(document, catalog) {
|
|
741
|
+
var e_14, _a, e_15, _b;
|
|
742
|
+
var used = new Set();
|
|
743
|
+
try {
|
|
744
|
+
for (var _c = __values(document.opcPackage().parts), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
745
|
+
var part = _d.value;
|
|
746
|
+
used.add(partNameKey(part.name));
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
catch (e_14_1) { e_14 = { error: e_14_1 }; }
|
|
750
|
+
finally {
|
|
751
|
+
try {
|
|
752
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
753
|
+
}
|
|
754
|
+
finally { if (e_14) throw e_14.error; }
|
|
755
|
+
}
|
|
756
|
+
try {
|
|
757
|
+
for (var _e = __values(catalog.pendingPartNames()), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
758
|
+
var name_1 = _f.value;
|
|
759
|
+
used.add(partNameKey(name_1));
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
catch (e_15_1) { e_15 = { error: e_15_1 }; }
|
|
763
|
+
finally {
|
|
764
|
+
try {
|
|
765
|
+
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
766
|
+
}
|
|
767
|
+
finally { if (e_15) throw e_15.error; }
|
|
768
|
+
}
|
|
769
|
+
return used;
|
|
770
|
+
}
|
|
771
|
+
function removeOleObjectPartFromPackage(pkg, mainPartName, entry) {
|
|
772
|
+
var next = withRemovedPartLocal(pkg, entry.partName);
|
|
773
|
+
next = withRemovedContentTypeOverrideLocal(next, entry.partName);
|
|
774
|
+
next = withFilteredPartRelationshipsLocal(next, mainPartName, function (rel) { return rel.id !== entry.relationshipId; });
|
|
775
|
+
return next;
|
|
776
|
+
}
|
|
777
|
+
function removeOleIconPartFromPackage(pkg, mainPartName, entry) {
|
|
778
|
+
var next = withRemovedPartLocal(pkg, entry.partName);
|
|
779
|
+
next = withRemovedContentTypeOverrideLocal(next, entry.partName);
|
|
780
|
+
next = withFilteredPartRelationshipsLocal(next, mainPartName, function (rel) { return rel.id !== entry.relationshipId; });
|
|
781
|
+
return next;
|
|
782
|
+
}
|
|
783
|
+
function withRemovedPartLocal(pkg, name) {
|
|
784
|
+
var key = partNameKey(name);
|
|
785
|
+
var parts = pkg.parts.filter(function (part) { return partNameKey(part.name) !== key; });
|
|
786
|
+
if (parts.length === pkg.parts.length) {
|
|
787
|
+
return pkg;
|
|
788
|
+
}
|
|
789
|
+
return __assign({}, pkg, { parts: parts });
|
|
790
|
+
}
|
|
791
|
+
function withRemovedContentTypeOverrideLocal(pkg, logicalPartName) {
|
|
792
|
+
return __assign({}, pkg, { contentTypes: {
|
|
793
|
+
records: pkg.contentTypes.records.filter(function (record) { return !(record.kind === 'override' && record.partName === logicalPartName); }),
|
|
794
|
+
} });
|
|
795
|
+
}
|
|
796
|
+
function withFilteredPartRelationshipsLocal(pkg, source, keep) {
|
|
797
|
+
var existing = relationshipsForPart(pkg, source);
|
|
798
|
+
var kept = existing.items.filter(keep);
|
|
799
|
+
if (kept.length === existing.items.length) {
|
|
800
|
+
return pkg;
|
|
801
|
+
}
|
|
802
|
+
return withPartRelationships(pkg, source, relationshipsWith(kept, existing.opaque));
|
|
803
|
+
}
|
|
804
|
+
function isOleObjectRelationshipType(type) {
|
|
805
|
+
return (type === OLE_OBJECT_RELATIONSHIP_TYPE ||
|
|
806
|
+
type === OLE_OBJECT_LINK_LONG_PATH_RELATIONSHIP_TYPE);
|
|
807
|
+
}
|
|
808
|
+
function isImageRelationshipType(type) {
|
|
809
|
+
return type === IMAGE_RELATIONSHIP_TYPE;
|
|
810
|
+
}
|
|
811
|
+
function contentTypeForIconPart(part) {
|
|
812
|
+
if (part.contentType === PNG_CONTENT_TYPE || part.contentType === JPEG_CONTENT_TYPE) {
|
|
813
|
+
return part.contentType;
|
|
814
|
+
}
|
|
815
|
+
return undefined;
|
|
816
|
+
}
|
|
817
|
+
/**
|
|
818
|
+
* Load the OLE-object catalog from Main-WordDocument relationships of the
|
|
819
|
+
* `oleObject` type (and the long-path link variant) plus PNG/JPEG image
|
|
820
|
+
* relationships used as OLE icon/preview media (TASK-8056).
|
|
821
|
+
*
|
|
822
|
+
* Internal oleObject targets load embedded parts; external targets load
|
|
823
|
+
* link target strings only (no part). Image relationships with PNG/JPEG
|
|
824
|
+
* content types load into the icon catalog.
|
|
825
|
+
*
|
|
826
|
+
* @private
|
|
827
|
+
*/
|
|
828
|
+
export function loadOleObjectCatalog(pkg, mainPartName) {
|
|
829
|
+
var e_16, _a;
|
|
830
|
+
var rels = relationshipsForPart(pkg, mainPartName);
|
|
831
|
+
var entries = new Map();
|
|
832
|
+
var externalByRelationshipId = new Map();
|
|
833
|
+
var iconEntries = new Map();
|
|
834
|
+
try {
|
|
835
|
+
for (var _b = __values(rels.items), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
836
|
+
var rel = _c.value;
|
|
837
|
+
if (isOleObjectRelationshipType(rel.type)) {
|
|
838
|
+
// External targets are linked objects (TASK-8055); store the target string only.
|
|
839
|
+
if (rel.targetMode === TargetMode.External) {
|
|
840
|
+
externalByRelationshipId.set(rel.id, {
|
|
841
|
+
relationshipId: rel.id,
|
|
842
|
+
target: rel.target,
|
|
843
|
+
relationshipType: rel.type,
|
|
844
|
+
pendingRelationship: undefined,
|
|
845
|
+
});
|
|
846
|
+
continue;
|
|
847
|
+
}
|
|
848
|
+
// Long-path is a link-only product type; ignore internal targets for it.
|
|
849
|
+
if (rel.type === OLE_OBJECT_LINK_LONG_PATH_RELATIONSHIP_TYPE) {
|
|
850
|
+
continue;
|
|
851
|
+
}
|
|
852
|
+
var target = resolveInternalTargetLocal(rel.target, mainPartName);
|
|
853
|
+
var part = partByName(pkg, target);
|
|
854
|
+
if (part === undefined) {
|
|
855
|
+
continue; // dangling relationship: body parse keeps the object; GC handles the rest
|
|
856
|
+
}
|
|
857
|
+
entries.set(part.name, {
|
|
858
|
+
partName: part.name,
|
|
859
|
+
relationshipId: rel.id,
|
|
860
|
+
relationshipType: rel.type,
|
|
861
|
+
contentType: part.contentType,
|
|
862
|
+
data: part.data,
|
|
863
|
+
dirty: false,
|
|
864
|
+
pendingRelationship: undefined,
|
|
865
|
+
});
|
|
866
|
+
continue;
|
|
867
|
+
}
|
|
868
|
+
// TASK-8056: PNG/JPEG image relationships are candidates for icon media.
|
|
869
|
+
if (!isImageRelationshipType(rel.type) || rel.targetMode === TargetMode.External) {
|
|
870
|
+
continue;
|
|
871
|
+
}
|
|
872
|
+
var imageTarget = resolveInternalTargetLocal(rel.target, mainPartName);
|
|
873
|
+
var imagePart = partByName(pkg, imageTarget);
|
|
874
|
+
if (imagePart === undefined) {
|
|
875
|
+
continue;
|
|
876
|
+
}
|
|
877
|
+
var iconContentType = contentTypeForIconPart(imagePart);
|
|
878
|
+
if (iconContentType === undefined) {
|
|
879
|
+
continue;
|
|
880
|
+
}
|
|
881
|
+
iconEntries.set(imagePart.name, {
|
|
882
|
+
partName: imagePart.name,
|
|
883
|
+
relationshipId: rel.id,
|
|
884
|
+
relationshipType: rel.type,
|
|
885
|
+
contentType: iconContentType,
|
|
886
|
+
data: imagePart.data,
|
|
887
|
+
dirty: false,
|
|
888
|
+
pendingRelationship: undefined,
|
|
889
|
+
});
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
catch (e_16_1) { e_16 = { error: e_16_1 }; }
|
|
893
|
+
finally {
|
|
894
|
+
try {
|
|
895
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
896
|
+
}
|
|
897
|
+
finally { if (e_16) throw e_16.error; }
|
|
898
|
+
}
|
|
899
|
+
return new OleObjectCatalog(entries, externalByRelationshipId, iconEntries);
|
|
900
|
+
}
|
|
901
|
+
function resolveInternalTargetLocal(target, mainPartName) {
|
|
902
|
+
if (target.startsWith('/')) {
|
|
903
|
+
return partName(target);
|
|
904
|
+
}
|
|
905
|
+
// Relative targets resolve against the source part directory (/word/…).
|
|
906
|
+
var base = mainPartName.slice(0, mainPartName.lastIndexOf('/') + 1);
|
|
907
|
+
return partName("" + base + target);
|
|
908
|
+
}
|