@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,205 @@
|
|
|
1
|
+
var __values = (this && this.__values) || function (o) {
|
|
2
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
|
|
3
|
+
if (m) return m.call(o);
|
|
4
|
+
return {
|
|
5
|
+
next: function () {
|
|
6
|
+
if (o && i >= o.length) o = void 0;
|
|
7
|
+
return { value: o && o[i++], done: !o };
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
import { PackageError } from '../errors/docx-error';
|
|
12
|
+
/**
|
|
13
|
+
* ASCII case-insensitive part-name key (ECMA-376-2 §6.2.2.3).
|
|
14
|
+
*/
|
|
15
|
+
export function partNameKey(name) {
|
|
16
|
+
return name.toLowerCase();
|
|
17
|
+
}
|
|
18
|
+
function rejectUnsafeSegments(logicalName) {
|
|
19
|
+
var e_1, _a;
|
|
20
|
+
if (logicalName.includes('\0')) {
|
|
21
|
+
throw new PackageError('package/invalid-part-name', 'Part name contains a NUL');
|
|
22
|
+
}
|
|
23
|
+
if (logicalName.includes('\\')) {
|
|
24
|
+
throw new PackageError('package/invalid-part-name', "Part name contains a backslash: " + logicalName);
|
|
25
|
+
}
|
|
26
|
+
if (!logicalName.startsWith('/')) {
|
|
27
|
+
throw new PackageError('package/invalid-part-name', "OPC part names begin with '/': " + logicalName);
|
|
28
|
+
}
|
|
29
|
+
if (logicalName === '/') {
|
|
30
|
+
throw new PackageError('package/invalid-part-name', 'Part name must have at least one segment');
|
|
31
|
+
}
|
|
32
|
+
if (logicalName.endsWith('/')) {
|
|
33
|
+
throw new PackageError('package/invalid-part-name', "Part name must not end with '/': " + logicalName);
|
|
34
|
+
}
|
|
35
|
+
var segments = logicalName.slice(1).split('/');
|
|
36
|
+
try {
|
|
37
|
+
for (var segments_1 = __values(segments), segments_1_1 = segments_1.next(); !segments_1_1.done; segments_1_1 = segments_1.next()) {
|
|
38
|
+
var segment = segments_1_1.value;
|
|
39
|
+
if (segment.length === 0) {
|
|
40
|
+
throw new PackageError('package/invalid-part-name', "Part name has an empty segment: " + logicalName);
|
|
41
|
+
}
|
|
42
|
+
if (segment === '.' || segment === '..') {
|
|
43
|
+
throw new PackageError('package/invalid-part-name', "Part name contains a '.' or '..' segment: " + logicalName);
|
|
44
|
+
}
|
|
45
|
+
if (segment.endsWith('.')) {
|
|
46
|
+
throw new PackageError('package/invalid-part-name', "OPC forbids a path segment that ends with '.': " + logicalName);
|
|
47
|
+
}
|
|
48
|
+
if (/^[a-zA-Z]:/.test(segment)) {
|
|
49
|
+
throw new PackageError('package/invalid-part-name', "Part name has a drive letter: " + logicalName);
|
|
50
|
+
}
|
|
51
|
+
if (/%2f/i.test(segment) || /%5c/i.test(segment)) {
|
|
52
|
+
throw new PackageError('package/invalid-part-name', "Part name has a percent-encoded slash: " + logicalName);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
57
|
+
finally {
|
|
58
|
+
try {
|
|
59
|
+
if (segments_1_1 && !segments_1_1.done && (_a = segments_1.return)) _a.call(segments_1);
|
|
60
|
+
}
|
|
61
|
+
finally { if (e_1) throw e_1.error; }
|
|
62
|
+
}
|
|
63
|
+
if (!/^[\u0020-\u007e]+$/.test(logicalName)) {
|
|
64
|
+
throw new PackageError('package/invalid-part-name', "Phase 1 part names are ASCII (ECMA-376-2 \u00A77.3.3 ZIP mapping): " + logicalName);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Validates and brands an OPC logical part name (leading `/`).
|
|
69
|
+
* ECMA-376-2 §6.2.2.2 production `part_name = 1*( "/" isegment-nz )`.
|
|
70
|
+
*/
|
|
71
|
+
export function partName(value) {
|
|
72
|
+
rejectUnsafeSegments(value);
|
|
73
|
+
return value;
|
|
74
|
+
}
|
|
75
|
+
/** ZIP item name → logical part name (ECMA-376-2 §7.3.5). */
|
|
76
|
+
export function partNameFromZipItem(zipItemName) {
|
|
77
|
+
// split/join: String.replaceAll is ES2021 and is not rewritten by target ES5.
|
|
78
|
+
var withForwardSlashes = zipItemName.split('\\').join('/');
|
|
79
|
+
return partName("/" + withForwardSlashes);
|
|
80
|
+
}
|
|
81
|
+
/** Logical part name → ZIP item name (no leading `/`). */
|
|
82
|
+
export function zipItemFromPartName(name) {
|
|
83
|
+
return name.slice(1);
|
|
84
|
+
}
|
|
85
|
+
export function partNamesEquivalent(left, right) {
|
|
86
|
+
return partNameKey(left) === partNameKey(right);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* True when `candidate` is derivable from `base` (ECMA-376-2 §6.2.2.3):
|
|
90
|
+
* concatenating `base`, `/`, and some string S yields an equivalent name.
|
|
91
|
+
*/
|
|
92
|
+
export function isPartNameDerivableFrom(candidate, base) {
|
|
93
|
+
var child = partNameKey(candidate);
|
|
94
|
+
var parent = partNameKey(base);
|
|
95
|
+
return child.startsWith(parent + "/");
|
|
96
|
+
}
|
|
97
|
+
export function assertPartNameSetIntegrity(names) {
|
|
98
|
+
for (var i = 0; i < names.length; i += 1) {
|
|
99
|
+
var left = names[i];
|
|
100
|
+
if (left === undefined) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
for (var j = i + 1; j < names.length; j += 1) {
|
|
104
|
+
var right = names[j];
|
|
105
|
+
if (right === undefined) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (partNamesEquivalent(left, right)) {
|
|
109
|
+
throw new PackageError('package/duplicate-zip-entry', "Equivalent part names in one package: " + left + " and " + right + " (ECMA-376-2 \u00A76.2.2.3)");
|
|
110
|
+
}
|
|
111
|
+
if (isPartNameDerivableFrom(left, right) || isPartNameDerivableFrom(right, left)) {
|
|
112
|
+
throw new PackageError('package/invalid-part-name', "Part name " + left + " is derivable from " + right + " (ECMA-376-2 \u00A76.2.2.3)");
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
var RELS_SUFFIX = '.rels';
|
|
118
|
+
/**
|
|
119
|
+
* Relationships parts: `/_rels/.rels` and `…/_rels/….rels` (ECMA-376-2 §6.5.2.2–§6.5.2.3).
|
|
120
|
+
*/
|
|
121
|
+
export function isRelationshipsPartName(name) {
|
|
122
|
+
var segments = name.split('/').filter(function (segment) { return segment.length > 0; });
|
|
123
|
+
if (segments.length < 2) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
var last = segments[segments.length - 1];
|
|
127
|
+
var secondLast = segments[segments.length - 2];
|
|
128
|
+
if (last === undefined || secondLast === undefined) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
return secondLast.toLowerCase() === '_rels' && last.toLowerCase().endsWith(RELS_SUFFIX);
|
|
132
|
+
}
|
|
133
|
+
export function isPackageRelationshipsPartName(name) {
|
|
134
|
+
return partNamesEquivalent(name, '/_rels/.rels');
|
|
135
|
+
}
|
|
136
|
+
/** Package Relationships part name (ECMA-376-2 §6.5.2.2). */
|
|
137
|
+
export function packageRelationshipsPartName() {
|
|
138
|
+
return partName('/_rels/.rels');
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Part Relationships part name from a source part (ECMA-376-2 §6.5.2.3).
|
|
142
|
+
*/
|
|
143
|
+
export function partRelationshipsPartName(source) {
|
|
144
|
+
var lastSlash = source.lastIndexOf('/');
|
|
145
|
+
var directory = source.slice(0, lastSlash);
|
|
146
|
+
var fileName = source.slice(lastSlash + 1);
|
|
147
|
+
var relsDirectory = directory === '' ? '/_rels' : directory + "/_rels";
|
|
148
|
+
return partName(relsDirectory + "/" + fileName + RELS_SUFFIX);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Inverse of {@link partRelationshipsPartName}. Package rels yield `undefined`.
|
|
152
|
+
*/
|
|
153
|
+
export function sourcePartNameFromRelationshipsPart(relsPart) {
|
|
154
|
+
if (!isRelationshipsPartName(relsPart)) {
|
|
155
|
+
throw new PackageError('package/invalid-part-name', "Not a Relationships part: " + relsPart);
|
|
156
|
+
}
|
|
157
|
+
if (isPackageRelationshipsPartName(relsPart)) {
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
var segments = relsPart.split('/');
|
|
161
|
+
var last = segments[segments.length - 1];
|
|
162
|
+
if (last === undefined || !last.toLowerCase().endsWith(RELS_SUFFIX)) {
|
|
163
|
+
throw new PackageError('package/invalid-part-name', "Relationships part name is malformed: " + relsPart);
|
|
164
|
+
}
|
|
165
|
+
var sourceFile = last.slice(0, last.length - RELS_SUFFIX.length);
|
|
166
|
+
var withoutRelsSegments = segments.slice(0, -2);
|
|
167
|
+
return partName(withoutRelsSegments.join('/') + "/" + sourceFile);
|
|
168
|
+
}
|
|
169
|
+
function directoryOfPart(source) {
|
|
170
|
+
var lastSlash = source.lastIndexOf('/');
|
|
171
|
+
if (lastSlash <= 0) {
|
|
172
|
+
return '/';
|
|
173
|
+
}
|
|
174
|
+
return source.slice(0, lastSlash) + "/";
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Resolve an Internal relationship Target against a source part, or against the
|
|
178
|
+
* package when `source` is omitted (package Relationships).
|
|
179
|
+
*/
|
|
180
|
+
export function resolveInternalTarget(target, source) {
|
|
181
|
+
var trimmed = target.trim();
|
|
182
|
+
if (trimmed.length === 0) {
|
|
183
|
+
throw new PackageError('package/invalid-part-name', 'Internal relationship Target is empty');
|
|
184
|
+
}
|
|
185
|
+
if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(trimmed)) {
|
|
186
|
+
throw new PackageError('package/invalid-part-name', "Internal relationship Target is not a package-relative reference: " + target);
|
|
187
|
+
}
|
|
188
|
+
var path;
|
|
189
|
+
if (trimmed.startsWith('/')) {
|
|
190
|
+
path = trimmed;
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
var basePath = source === undefined ? '/' : directoryOfPart(source);
|
|
194
|
+
var resolved = new URL(trimmed, "https://opc.invalid" + basePath);
|
|
195
|
+
path = resolved.pathname;
|
|
196
|
+
}
|
|
197
|
+
var decoded;
|
|
198
|
+
try {
|
|
199
|
+
decoded = decodeURIComponent(path);
|
|
200
|
+
}
|
|
201
|
+
catch (_a) {
|
|
202
|
+
throw new PackageError('package/invalid-part-name', "Internal Target is not a valid URI path: " + target);
|
|
203
|
+
}
|
|
204
|
+
return partName(decoded);
|
|
205
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { OpenXmlAttribute, OpenXmlChild, OpenXmlElement } from '../xml/index';
|
|
2
|
+
/**
|
|
3
|
+
* Relationship Id (`Id` on `Relationship`, `xsd:ID` in opc-relationships.xsd).
|
|
4
|
+
*/
|
|
5
|
+
export declare type RelationshipId = string & {
|
|
6
|
+
readonly __brand: 'RelationshipId';
|
|
7
|
+
};
|
|
8
|
+
/** `opc-relationships.xsd` targetNamespace. */
|
|
9
|
+
export declare const RELATIONSHIPS_NAMESPACE = "http://schemas.openxmlformats.org/package/2006/relationships";
|
|
10
|
+
/**
|
|
11
|
+
* Transitional officeDocument relationship Type (ECMA-376-4 §9.2.10).
|
|
12
|
+
*/
|
|
13
|
+
export declare const OFFICE_DOCUMENT_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";
|
|
14
|
+
/**
|
|
15
|
+
* Strict officeDocument relationship Type (ECMA-376-1 §11.2 example).
|
|
16
|
+
* Accepted on load; never rewritten to Transitional on save.
|
|
17
|
+
*/
|
|
18
|
+
export declare const STRICT_OFFICE_DOCUMENT_RELATIONSHIP_TYPE = "http://purl.oclc.org/ooxml/officeDocument/relationships/officeDocument";
|
|
19
|
+
export declare const TargetMode: {
|
|
20
|
+
Internal: "Internal";
|
|
21
|
+
External: "External";
|
|
22
|
+
};
|
|
23
|
+
export declare type TargetMode = (typeof TargetMode)[keyof typeof TargetMode];
|
|
24
|
+
export interface OpcRelationship {
|
|
25
|
+
readonly id: RelationshipId;
|
|
26
|
+
readonly type: string;
|
|
27
|
+
readonly target: string;
|
|
28
|
+
readonly targetMode?: TargetMode;
|
|
29
|
+
readonly extraAttributes: ReadonlyArray<OpenXmlAttribute>;
|
|
30
|
+
readonly children: ReadonlyArray<OpenXmlChild>;
|
|
31
|
+
}
|
|
32
|
+
export interface Relationships {
|
|
33
|
+
readonly items: ReadonlyArray<OpcRelationship>;
|
|
34
|
+
readonly opaque: ReadonlyArray<OpenXmlElement>;
|
|
35
|
+
}
|
|
36
|
+
export declare function relationshipId(value: string): RelationshipId;
|
|
37
|
+
export declare function allocateRelationshipId(used: ReadonlySet<string>): RelationshipId;
|
|
38
|
+
export declare function isOfficeDocumentRelationshipType(type: string): boolean;
|
|
39
|
+
export declare function parseRelationshipsXml(xml: string, options?: {
|
|
40
|
+
readonly relationshipCountLimit?: number;
|
|
41
|
+
readonly sourceLabel?: string;
|
|
42
|
+
}): Relationships;
|
|
43
|
+
export declare function serializeRelationships(rels: Relationships): string;
|
|
44
|
+
export declare function findOfficeDocumentRelationship(rels: Relationships): OpcRelationship | undefined;
|
|
45
|
+
export declare function emptyRelationships(): Relationships;
|
|
46
|
+
export declare function relationshipsWith(items: ReadonlyArray<OpcRelationship>, opaque?: ReadonlyArray<OpenXmlElement>): Relationships;
|
|
@@ -0,0 +1,212 @@
|
|
|
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 __values = (this && this.__values) || function (o) {
|
|
13
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
|
|
14
|
+
if (m) return m.call(o);
|
|
15
|
+
return {
|
|
16
|
+
next: function () {
|
|
17
|
+
if (o && i >= o.length) o = void 0;
|
|
18
|
+
return { value: o && o[i++], done: !o };
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
23
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
24
|
+
if (!m) return o;
|
|
25
|
+
var i = m.call(o), r, ar = [], e;
|
|
26
|
+
try {
|
|
27
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
28
|
+
}
|
|
29
|
+
catch (error) { e = { error: error }; }
|
|
30
|
+
finally {
|
|
31
|
+
try {
|
|
32
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
33
|
+
}
|
|
34
|
+
finally { if (e) throw e.error; }
|
|
35
|
+
}
|
|
36
|
+
return ar;
|
|
37
|
+
};
|
|
38
|
+
var __spread = (this && this.__spread) || function () {
|
|
39
|
+
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
|
|
40
|
+
return ar;
|
|
41
|
+
};
|
|
42
|
+
import { PackageError, SecurityError } from '../errors/docx-error';
|
|
43
|
+
import { DEFAULT_RESOURCE_LIMITS } from '../security/limits';
|
|
44
|
+
import { parseXml, serializeXml } from '../xml/index';
|
|
45
|
+
/** `opc-relationships.xsd` targetNamespace. */
|
|
46
|
+
export var RELATIONSHIPS_NAMESPACE = 'http://schemas.openxmlformats.org/package/2006/relationships';
|
|
47
|
+
/**
|
|
48
|
+
* Transitional officeDocument relationship Type (ECMA-376-4 §9.2.10).
|
|
49
|
+
*/
|
|
50
|
+
export var OFFICE_DOCUMENT_RELATIONSHIP_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument';
|
|
51
|
+
/**
|
|
52
|
+
* Strict officeDocument relationship Type (ECMA-376-1 §11.2 example).
|
|
53
|
+
* Accepted on load; never rewritten to Transitional on save.
|
|
54
|
+
*/
|
|
55
|
+
export var STRICT_OFFICE_DOCUMENT_RELATIONSHIP_TYPE = 'http://purl.oclc.org/ooxml/officeDocument/relationships/officeDocument';
|
|
56
|
+
export var TargetMode = {
|
|
57
|
+
Internal: 'Internal',
|
|
58
|
+
External: 'External',
|
|
59
|
+
};
|
|
60
|
+
var ID_PATTERN = /^[A-Za-z_][\w.-]*$/;
|
|
61
|
+
export function relationshipId(value) {
|
|
62
|
+
if (!ID_PATTERN.test(value)) {
|
|
63
|
+
throw new PackageError('package/invalid-relationship-id', "Relationship Id is not a valid xsd:ID token: " + value);
|
|
64
|
+
}
|
|
65
|
+
return value;
|
|
66
|
+
}
|
|
67
|
+
export function allocateRelationshipId(used) {
|
|
68
|
+
var n = 1;
|
|
69
|
+
while (used.has("rId" + String(n))) {
|
|
70
|
+
n += 1;
|
|
71
|
+
}
|
|
72
|
+
return relationshipId("rId" + String(n));
|
|
73
|
+
}
|
|
74
|
+
export function isOfficeDocumentRelationshipType(type) {
|
|
75
|
+
return type === OFFICE_DOCUMENT_RELATIONSHIP_TYPE || type === STRICT_OFFICE_DOCUMENT_RELATIONSHIP_TYPE;
|
|
76
|
+
}
|
|
77
|
+
function childElements(el) {
|
|
78
|
+
return el.children.filter(function (c) { return c.kind === 'element'; });
|
|
79
|
+
}
|
|
80
|
+
function attr(el, localName) {
|
|
81
|
+
var found = el.attributes.find(function (a) { return a.localName === localName && a.namespaceUri === ''; });
|
|
82
|
+
return found == null ? undefined : found.value;
|
|
83
|
+
}
|
|
84
|
+
function requiredAttr(el, localName) {
|
|
85
|
+
var value = attr(el, localName);
|
|
86
|
+
if (value === undefined || value.length === 0) {
|
|
87
|
+
throw new PackageError('package/invalid-relationships', "Relationship is missing " + localName);
|
|
88
|
+
}
|
|
89
|
+
return value;
|
|
90
|
+
}
|
|
91
|
+
function parseTargetMode(value) {
|
|
92
|
+
if (value === undefined) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
if (value === TargetMode.Internal || value === TargetMode.External) {
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
throw new PackageError('package/invalid-relationships', "TargetMode must be Internal or External (opc-relationships.xsd ST_TargetMode), got " + value);
|
|
99
|
+
}
|
|
100
|
+
export function parseRelationshipsXml(xml, options) {
|
|
101
|
+
var e_1, _a;
|
|
102
|
+
var __ts33_0, __ts33_1;
|
|
103
|
+
var limit = ((__ts33_0 = options == null ? undefined : options.relationshipCountLimit), __ts33_0 != null ? __ts33_0 : DEFAULT_RESOURCE_LIMITS.relationshipCountPerPart);
|
|
104
|
+
var sourceLabel = ((__ts33_1 = options == null ? undefined : options.sourceLabel), __ts33_1 != null ? __ts33_1 : 'Relationships part');
|
|
105
|
+
var root = parseXml(xml);
|
|
106
|
+
if (root.localName !== 'Relationships' || root.namespaceUri !== RELATIONSHIPS_NAMESPACE) {
|
|
107
|
+
throw new PackageError('package/invalid-relationships', "Expected Relationships in " + RELATIONSHIPS_NAMESPACE + ", found {" + root.namespaceUri + "}" + root.localName);
|
|
108
|
+
}
|
|
109
|
+
var items = [];
|
|
110
|
+
var opaque = [];
|
|
111
|
+
var seenIds = new Set();
|
|
112
|
+
var relationshipCount = 0;
|
|
113
|
+
var _loop_1 = function (child) {
|
|
114
|
+
if (child.namespaceUri !== RELATIONSHIPS_NAMESPACE || child.localName !== 'Relationship') {
|
|
115
|
+
opaque.push(child);
|
|
116
|
+
return "continue";
|
|
117
|
+
}
|
|
118
|
+
relationshipCount += 1;
|
|
119
|
+
if (relationshipCount > limit) {
|
|
120
|
+
throw new SecurityError('security/relationship-count', "Relationship count exceeds " + String(limit) + " on " + sourceLabel);
|
|
121
|
+
}
|
|
122
|
+
var id = relationshipId(requiredAttr(child, 'Id'));
|
|
123
|
+
if (seenIds.has(id)) {
|
|
124
|
+
throw new PackageError('package/invalid-relationships', "Duplicate Relationship Id " + id + " in " + sourceLabel + " (xsd:ID uniqueness)");
|
|
125
|
+
}
|
|
126
|
+
seenIds.add(id);
|
|
127
|
+
var known = new Set(['Id', 'Type', 'Target', 'TargetMode']);
|
|
128
|
+
var extraAttributes = child.attributes.filter(function (a) { return a.namespaceUri !== '' || !known.has(a.localName); });
|
|
129
|
+
var mode = parseTargetMode(attr(child, 'TargetMode'));
|
|
130
|
+
var relationship = __assign({ id: id, type: requiredAttr(child, 'Type'), target: requiredAttr(child, 'Target'), extraAttributes: extraAttributes, children: child.children }, (mode === undefined ? {} : { targetMode: mode }));
|
|
131
|
+
items.push(relationship);
|
|
132
|
+
};
|
|
133
|
+
try {
|
|
134
|
+
for (var _b = __values(childElements(root)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
135
|
+
var child = _c.value;
|
|
136
|
+
_loop_1(child);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
140
|
+
finally {
|
|
141
|
+
try {
|
|
142
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
143
|
+
}
|
|
144
|
+
finally { if (e_1) throw e_1.error; }
|
|
145
|
+
}
|
|
146
|
+
return { items: items, opaque: opaque };
|
|
147
|
+
}
|
|
148
|
+
export function serializeRelationships(rels) {
|
|
149
|
+
var children = __spread(rels.items.map(function (item) {
|
|
150
|
+
var attributes = [
|
|
151
|
+
{ namespaceUri: '', localName: 'Id', prefix: '', value: item.id },
|
|
152
|
+
{ namespaceUri: '', localName: 'Type', prefix: '', value: item.type },
|
|
153
|
+
{ namespaceUri: '', localName: 'Target', prefix: '', value: item.target },
|
|
154
|
+
];
|
|
155
|
+
if (item.targetMode !== undefined) {
|
|
156
|
+
attributes.push({
|
|
157
|
+
namespaceUri: '',
|
|
158
|
+
localName: 'TargetMode',
|
|
159
|
+
prefix: '',
|
|
160
|
+
value: item.targetMode,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
attributes.push.apply(attributes, __spread(item.extraAttributes));
|
|
164
|
+
return {
|
|
165
|
+
kind: 'element',
|
|
166
|
+
namespaceUri: RELATIONSHIPS_NAMESPACE,
|
|
167
|
+
localName: 'Relationship',
|
|
168
|
+
prefix: '',
|
|
169
|
+
attributes: attributes,
|
|
170
|
+
namespaceDeclarations: [],
|
|
171
|
+
children: item.children,
|
|
172
|
+
};
|
|
173
|
+
}), rels.opaque);
|
|
174
|
+
var root = {
|
|
175
|
+
kind: 'element',
|
|
176
|
+
namespaceUri: RELATIONSHIPS_NAMESPACE,
|
|
177
|
+
localName: 'Relationships',
|
|
178
|
+
prefix: '',
|
|
179
|
+
attributes: [],
|
|
180
|
+
namespaceDeclarations: [{ prefix: '', namespaceUri: RELATIONSHIPS_NAMESPACE }],
|
|
181
|
+
children: children,
|
|
182
|
+
};
|
|
183
|
+
return serializeXml(root);
|
|
184
|
+
}
|
|
185
|
+
export function findOfficeDocumentRelationship(rels) {
|
|
186
|
+
return rels.items.find(function (item) { return isOfficeDocumentRelationshipType(item.type); });
|
|
187
|
+
}
|
|
188
|
+
export function emptyRelationships() {
|
|
189
|
+
return { items: [], opaque: [] };
|
|
190
|
+
}
|
|
191
|
+
export function relationshipsWith(items, opaque) {
|
|
192
|
+
if (opaque === void 0) { opaque = []; }
|
|
193
|
+
var e_2, _a;
|
|
194
|
+
var seen = new Set();
|
|
195
|
+
try {
|
|
196
|
+
for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {
|
|
197
|
+
var item = items_1_1.value;
|
|
198
|
+
if (seen.has(item.id)) {
|
|
199
|
+
throw new PackageError('package/invalid-relationships', "Duplicate Relationship Id " + item.id);
|
|
200
|
+
}
|
|
201
|
+
seen.add(item.id);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
205
|
+
finally {
|
|
206
|
+
try {
|
|
207
|
+
if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);
|
|
208
|
+
}
|
|
209
|
+
finally { if (e_2) throw e_2.error; }
|
|
210
|
+
}
|
|
211
|
+
return { items: items, opaque: opaque };
|
|
212
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { documentBody, isWmlElement, opaqueBlocksFromBody, withOpaqueBody } from './opaque-body';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { OpenXmlElement } from '../xml/index';
|
|
2
|
+
/**
|
|
3
|
+
* Unmodeled body child (EG_ContentBlockContent and anything else). Phase 1
|
|
4
|
+
* tables module is absent, so `w:tbl` is opaque.
|
|
5
|
+
*/
|
|
6
|
+
export interface OpaqueBlock {
|
|
7
|
+
readonly type: 'opaque';
|
|
8
|
+
readonly xml: OpenXmlElement;
|
|
9
|
+
}
|
|
10
|
+
export declare function isWmlElement(element: OpenXmlElement, localName: string): boolean;
|
|
11
|
+
export declare function documentBody(root: OpenXmlElement): OpenXmlElement;
|
|
12
|
+
/**
|
|
13
|
+
* Every body child element is opaque until a feature claims it (TASK-1009 for `w:p`).
|
|
14
|
+
*/
|
|
15
|
+
export declare function opaqueBlocksFromBody(body: OpenXmlElement): ReadonlyArray<OpaqueBlock>;
|
|
16
|
+
export declare function withOpaqueBody(root: OpenXmlElement, blocks: ReadonlyArray<OpaqueBlock>): OpenXmlElement;
|
|
@@ -0,0 +1,69 @@
|
|
|
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
|
+
import { PackageError } from '../errors/docx-error';
|
|
33
|
+
import { WML_STRICT_NAMESPACE, WML_TRANSITIONAL_NAMESPACE } from '../xml/index';
|
|
34
|
+
function childElements(element) {
|
|
35
|
+
return element.children.filter(function (c) { return c.kind === 'element'; });
|
|
36
|
+
}
|
|
37
|
+
function isWmlNamespace(namespaceUri) {
|
|
38
|
+
return namespaceUri === WML_TRANSITIONAL_NAMESPACE || namespaceUri === WML_STRICT_NAMESPACE;
|
|
39
|
+
}
|
|
40
|
+
export function isWmlElement(element, localName) {
|
|
41
|
+
return isWmlNamespace(element.namespaceUri) && element.localName === localName;
|
|
42
|
+
}
|
|
43
|
+
export function documentBody(root) {
|
|
44
|
+
if (!isWmlElement(root, 'document')) {
|
|
45
|
+
throw new PackageError('package/invalid-document-part', "Expected w:document in " + WML_TRANSITIONAL_NAMESPACE + " or " + WML_STRICT_NAMESPACE + ", found {" + root.namespaceUri + "}" + root.localName);
|
|
46
|
+
}
|
|
47
|
+
var body = childElements(root).find(function (c) { return isWmlElement(c, 'body'); });
|
|
48
|
+
if (body === undefined) {
|
|
49
|
+
throw new PackageError('package/invalid-document-part', 'w:document is missing w:body');
|
|
50
|
+
}
|
|
51
|
+
return body;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Every body child element is opaque until a feature claims it (TASK-1009 for `w:p`).
|
|
55
|
+
*/
|
|
56
|
+
export function opaqueBlocksFromBody(body) {
|
|
57
|
+
return childElements(body).map(function (xml) { return ({ type: 'opaque', xml: xml }); });
|
|
58
|
+
}
|
|
59
|
+
export function withOpaqueBody(root, blocks) {
|
|
60
|
+
var body = documentBody(root);
|
|
61
|
+
var keptNonElements = body.children.filter(function (c) { return c.kind !== 'element'; });
|
|
62
|
+
var newBody = __assign({}, body, { children: __spread(blocks.map(function (b) { return b.xml; }), keptNonElements) });
|
|
63
|
+
return __assign({}, root, { children: root.children.map(function (child) {
|
|
64
|
+
if (child.kind === 'element' && isWmlElement(child, 'body')) {
|
|
65
|
+
return newBody;
|
|
66
|
+
}
|
|
67
|
+
return child;
|
|
68
|
+
}) });
|
|
69
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { WordDocument } from '../../features/document/document';
|
|
2
|
+
import { FeatureId } from './feature-registry';
|
|
3
|
+
import { FeatureBlock } from '../../features/document/feature-block';
|
|
4
|
+
import { BlockContent, Paragraph } from '../../features/document/paragraph';
|
|
5
|
+
import { OpenXmlElement } from '../xml/index';
|
|
6
|
+
/** @public */
|
|
7
|
+
export interface BodyBlockParseContext {
|
|
8
|
+
assertAttachedParagraph(target: Paragraph): void;
|
|
9
|
+
owningDocument(): WordDocument;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* @private
|
|
13
|
+
*/
|
|
14
|
+
export declare function detachedBodyBlockParseContext(): BodyBlockParseContext;
|
|
15
|
+
export interface FeatureBlockHandler {
|
|
16
|
+
readonly featureId: FeatureId;
|
|
17
|
+
readonly wmlLocalName: string;
|
|
18
|
+
tryParse(element: OpenXmlElement, ctx: BodyBlockParseContext): FeatureBlock | undefined;
|
|
19
|
+
}
|
|
20
|
+
/** Test hook */
|
|
21
|
+
export declare function resetFeatureBlockHandlers(): void;
|
|
22
|
+
export declare function registerFeatureBlockHandler(handler: FeatureBlockHandler): void;
|
|
23
|
+
export declare function tryParseFeatureBlock(element: OpenXmlElement, ctx: BodyBlockParseContext): BlockContent | undefined;
|
|
24
|
+
/** Feature body item — explicit shape (TS 3.3 does not distribute BodyItem & { type: 'feature' }). */
|
|
25
|
+
export declare type FeatureBodyItem = {
|
|
26
|
+
readonly type: 'feature';
|
|
27
|
+
readonly featureId: FeatureId;
|
|
28
|
+
readonly value: FeatureBlock;
|
|
29
|
+
};
|
|
30
|
+
export declare function serializeFeatureBlock(block: FeatureBodyItem): OpenXmlElement;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { DetachedObjectError } from '../errors/docx-error';
|
|
2
|
+
/**
|
|
3
|
+
* @private
|
|
4
|
+
*/
|
|
5
|
+
export function detachedBodyBlockParseContext() {
|
|
6
|
+
return {
|
|
7
|
+
assertAttachedParagraph: function () {
|
|
8
|
+
return;
|
|
9
|
+
},
|
|
10
|
+
owningDocument: function () {
|
|
11
|
+
throw new DetachedObjectError('This content is not in a document');
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
var handlersByLocalName = new Map();
|
|
16
|
+
/** Test hook */
|
|
17
|
+
export function resetFeatureBlockHandlers() {
|
|
18
|
+
handlersByLocalName.clear();
|
|
19
|
+
}
|
|
20
|
+
export function registerFeatureBlockHandler(handler) {
|
|
21
|
+
handlersByLocalName.set(handler.wmlLocalName, handler);
|
|
22
|
+
}
|
|
23
|
+
export function tryParseFeatureBlock(element, ctx) {
|
|
24
|
+
var handler = handlersByLocalName.get(element.localName);
|
|
25
|
+
if (handler === undefined) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
var value = handler.tryParse(element, ctx);
|
|
29
|
+
if (value === undefined) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
return { type: 'feature', featureId: handler.featureId, value: value };
|
|
33
|
+
}
|
|
34
|
+
export function serializeFeatureBlock(block) {
|
|
35
|
+
return block.value.toOpenXml();
|
|
36
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feature-owned default state attached when {@link WordDocument.create} builds a
|
|
3
|
+
* fresh, empty document (for example Word's own default `settings.xml`
|
|
4
|
+
* content, TASK-8027). Mirrors the shape of `materialize-handlers.ts`, but runs
|
|
5
|
+
* once at construction time instead of on every save, and never runs for
|
|
6
|
+
* `WordDocument.fromPackage` / `WordDocument.openSync` — a loaded package that has no
|
|
7
|
+
* state for a given feature keeps round-tripping without gaining any.
|
|
8
|
+
*
|
|
9
|
+
* @private
|
|
10
|
+
*/
|
|
11
|
+
import { FeatureMultiPackagePart } from '../../features/document/feature-multi-package-part';
|
|
12
|
+
import { FeaturePackageLevelPart } from '../../features/document/feature-package-level-part';
|
|
13
|
+
import { FeaturePackagePart } from '../../features/document/feature-package-part';
|
|
14
|
+
import { FeatureId } from './feature-registry';
|
|
15
|
+
/**
|
|
16
|
+
* @private
|
|
17
|
+
* Minimal document surface required to attach a create-time default part. */
|
|
18
|
+
export interface FeatureCreateDefaultsTarget {
|
|
19
|
+
setFeaturePart(id: FeatureId, part: FeaturePackagePart | FeatureMultiPackagePart | FeaturePackageLevelPart): void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @private
|
|
23
|
+
*/
|
|
24
|
+
export interface FeatureCreateDefaultHandler {
|
|
25
|
+
readonly featureId: FeatureId;
|
|
26
|
+
attachCreateDefault(document: FeatureCreateDefaultsTarget): void;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* @private
|
|
30
|
+
* Test hook */
|
|
31
|
+
export declare function resetFeatureCreateDefaultHandlers(): void;
|
|
32
|
+
/**
|
|
33
|
+
* @private
|
|
34
|
+
*/
|
|
35
|
+
export declare function registerFeatureCreateDefaultHandler(handler: FeatureCreateDefaultHandler): void;
|
|
36
|
+
/**
|
|
37
|
+
* @private
|
|
38
|
+
* Run every registered feature create-default pass, in registration order. */
|
|
39
|
+
export declare function attachFeatureCreateDefaults(document: FeatureCreateDefaultsTarget): void;
|