docxmlater 10.0.2 → 10.0.3
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/README.md +2 -2
- package/dist/constants/legacyCompatFlags.d.ts.map +1 -1
- package/dist/constants/legacyCompatFlags.js.map +1 -1
- package/dist/constants/limits.d.ts +0 -27
- package/dist/constants/limits.d.ts.map +1 -1
- package/dist/constants/limits.js +13 -13
- package/dist/constants/limits.js.map +1 -1
- package/dist/core/Document.d.ts +23 -19
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +197 -63
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentContent.d.ts.map +1 -1
- package/dist/core/DocumentContent.js.map +1 -1
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +59 -24
- package/dist/core/DocumentGenerator.js.map +1 -1
- package/dist/core/DocumentIdManager.d.ts.map +1 -1
- package/dist/core/DocumentIdManager.js.map +1 -1
- package/dist/core/DocumentParser.d.ts +6 -6
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +60 -54
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/DocumentValidator.d.ts.map +1 -1
- package/dist/core/DocumentValidator.js.map +1 -1
- package/dist/core/Relationship.d.ts.map +1 -1
- package/dist/core/Relationship.js +1 -1
- package/dist/core/Relationship.js.map +1 -1
- package/dist/core/RelationshipManager.js +3 -3
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/AlternateContent.js.map +1 -1
- package/dist/elements/Bookmark.d.ts.map +1 -1
- package/dist/elements/Bookmark.js.map +1 -1
- package/dist/elements/BookmarkManager.d.ts.map +1 -1
- package/dist/elements/BookmarkManager.js.map +1 -1
- package/dist/elements/Comment.js +1 -1
- package/dist/elements/Comment.js.map +1 -1
- package/dist/elements/CommentManager.d.ts.map +1 -1
- package/dist/elements/CommentManager.js +8 -2
- package/dist/elements/CommentManager.js.map +1 -1
- package/dist/elements/CommonTypes.d.ts.map +1 -1
- package/dist/elements/CommonTypes.js +1 -2
- package/dist/elements/CommonTypes.js.map +1 -1
- package/dist/elements/CustomXml.js.map +1 -1
- package/dist/elements/Endnote.d.ts.map +1 -1
- package/dist/elements/Endnote.js.map +1 -1
- package/dist/elements/EndnoteManager.d.ts.map +1 -1
- package/dist/elements/EndnoteManager.js.map +1 -1
- package/dist/elements/Field.d.ts.map +1 -1
- package/dist/elements/Field.js +31 -28
- package/dist/elements/Field.js.map +1 -1
- package/dist/elements/FieldHelpers.d.ts.map +1 -1
- package/dist/elements/FieldHelpers.js +6 -6
- package/dist/elements/FieldHelpers.js.map +1 -1
- package/dist/elements/FontManager.d.ts.map +1 -1
- package/dist/elements/FontManager.js.map +1 -1
- package/dist/elements/Footer.js.map +1 -1
- package/dist/elements/Footnote.d.ts.map +1 -1
- package/dist/elements/Footnote.js.map +1 -1
- package/dist/elements/FootnoteManager.d.ts.map +1 -1
- package/dist/elements/FootnoteManager.js.map +1 -1
- package/dist/elements/Header.js.map +1 -1
- package/dist/elements/HeaderFooterManager.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +5 -5
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Image.d.ts +2 -2
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +21 -5
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/ImageManager.d.ts.map +1 -1
- package/dist/elements/ImageManager.js +2 -2
- package/dist/elements/ImageManager.js.map +1 -1
- package/dist/elements/ImageRun.js.map +1 -1
- package/dist/elements/MathElement.js.map +1 -1
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +128 -117
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/PreservedElement.js.map +1 -1
- package/dist/elements/PropertyChangeTypes.js.map +1 -1
- package/dist/elements/RangeMarker.js.map +1 -1
- package/dist/elements/Revision.d.ts +1 -0
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +44 -5
- package/dist/elements/Revision.js.map +1 -1
- package/dist/elements/RevisionContent.js.map +1 -1
- package/dist/elements/RevisionManager.d.ts.map +1 -1
- package/dist/elements/RevisionManager.js.map +1 -1
- package/dist/elements/Run.d.ts.map +1 -1
- package/dist/elements/Run.js +1 -3
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +127 -118
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Shape.d.ts.map +1 -1
- package/dist/elements/Shape.js +21 -0
- package/dist/elements/Shape.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +20 -8
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/Table.d.ts +2 -2
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +29 -35
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +2 -2
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +63 -67
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableGridChange.js.map +1 -1
- package/dist/elements/TableOfContents.d.ts +6 -6
- package/dist/elements/TableOfContents.d.ts.map +1 -1
- package/dist/elements/TableOfContents.js.map +1 -1
- package/dist/elements/TableOfContentsElement.js.map +1 -1
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +65 -47
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/elements/TextBox.d.ts.map +1 -1
- package/dist/elements/TextBox.js +1 -1
- package/dist/elements/TextBox.js.map +1 -1
- package/dist/formatting/AbstractNumbering.d.ts +1 -1
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +11 -11
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingInstance.d.ts.map +1 -1
- package/dist/formatting/NumberingInstance.js +4 -4
- package/dist/formatting/NumberingInstance.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +26 -26
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/NumberingManager.d.ts +1 -1
- package/dist/formatting/NumberingManager.d.ts.map +1 -1
- package/dist/formatting/NumberingManager.js.map +1 -1
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +87 -95
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +3 -3
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/helpers/CleanupHelper.js.map +1 -1
- package/dist/images/ImageOptimizer.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/managers/DrawingManager.d.ts.map +1 -1
- package/dist/managers/DrawingManager.js.map +1 -1
- package/dist/tracking/DocumentTrackingContext.js.map +1 -1
- package/dist/tracking/TrackingContext.js.map +1 -1
- package/dist/types/compatibility-types.js.map +1 -1
- package/dist/types/formatting.js.map +1 -1
- package/dist/types/list-types.d.ts +4 -4
- package/dist/types/list-types.d.ts.map +1 -1
- package/dist/types/list-types.js.map +1 -1
- package/dist/types/settings-types.js.map +1 -1
- package/dist/types/styleConfig.js.map +1 -1
- package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
- package/dist/utils/ChangelogGenerator.js.map +1 -1
- package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
- package/dist/utils/CompatibilityUpgrader.js +7 -7
- package/dist/utils/CompatibilityUpgrader.js.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.js +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
- package/dist/utils/MoveOperationHelper.js.map +1 -1
- package/dist/utils/RevisionAwareProcessor.js.map +1 -1
- package/dist/utils/RevisionWalker.js.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
- package/dist/utils/ShadingResolver.js +1 -1
- package/dist/utils/ShadingResolver.js.map +1 -1
- package/dist/utils/acceptRevisions.d.ts +0 -28
- package/dist/utils/acceptRevisions.d.ts.map +1 -1
- package/dist/utils/acceptRevisions.js +5 -7
- package/dist/utils/acceptRevisions.js.map +1 -1
- package/dist/utils/cnfStyleDecoder.js +1 -1
- package/dist/utils/cnfStyleDecoder.js.map +1 -1
- package/dist/utils/corruptionDetection.js.map +1 -1
- package/dist/utils/dateFormatting.js.map +1 -1
- package/dist/utils/deepClone.d.ts +0 -1
- package/dist/utils/deepClone.d.ts.map +1 -1
- package/dist/utils/deepClone.js +0 -7
- package/dist/utils/deepClone.js.map +1 -1
- package/dist/utils/diagnostics.d.ts +2 -2
- package/dist/utils/diagnostics.d.ts.map +1 -1
- package/dist/utils/diagnostics.js.map +1 -1
- package/dist/utils/errorHandling.js.map +1 -1
- package/dist/utils/formatting.js.map +1 -1
- package/dist/utils/list-detection.d.ts +2 -2
- package/dist/utils/list-detection.d.ts.map +1 -1
- package/dist/utils/list-detection.js +3 -3
- package/dist/utils/list-detection.js.map +1 -1
- package/dist/utils/logger.d.ts +2 -4
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +0 -2
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/parsingHelpers.js.map +1 -1
- package/dist/utils/stripTrackedChanges.d.ts +0 -19
- package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
- package/dist/utils/stripTrackedChanges.js +0 -2
- package/dist/utils/stripTrackedChanges.js.map +1 -1
- package/dist/utils/textDiff.js.map +1 -1
- package/dist/utils/units.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/xmlSanitization.js.map +1 -1
- package/dist/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/validation/RevisionValidator.js.map +1 -1
- package/dist/validation/ValidationRules.js.map +1 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/xml/XMLBuilder.d.ts.map +1 -1
- package/dist/xml/XMLBuilder.js +10 -0
- package/dist/xml/XMLBuilder.js.map +1 -1
- package/dist/xml/XMLParser.d.ts.map +1 -1
- package/dist/xml/XMLParser.js +4 -5
- package/dist/xml/XMLParser.js.map +1 -1
- package/dist/zip/ZipHandler.js.map +1 -1
- package/dist/zip/ZipReader.js.map +1 -1
- package/dist/zip/ZipWriter.js.map +1 -1
- package/dist/zip/errors.js.map +1 -1
- package/dist/zip/types.js.map +1 -1
- package/package.json +34 -4
- package/src/__tests__/helper-methods.test.ts +512 -0
- package/src/constants/legacyCompatFlags.ts +138 -0
- package/src/constants/limits.ts +50 -0
- package/src/core/CLAUDE.md +109 -0
- package/src/core/Document.ts +15569 -0
- package/src/core/DocumentContent.ts +467 -0
- package/src/core/DocumentGenerator.ts +1104 -0
- package/src/core/DocumentIdManager.ts +158 -0
- package/src/core/DocumentParser.ts +10107 -0
- package/src/core/DocumentValidator.ts +372 -0
- package/src/core/Relationship.ts +367 -0
- package/src/core/RelationshipManager.ts +428 -0
- package/src/elements/AlternateContent.ts +42 -0
- package/src/elements/Bookmark.ts +210 -0
- package/src/elements/BookmarkManager.ts +250 -0
- package/src/elements/CLAUDE.md +126 -0
- package/src/elements/Comment.ts +359 -0
- package/src/elements/CommentManager.ts +502 -0
- package/src/elements/CommonTypes.ts +549 -0
- package/src/elements/CustomXml.ts +36 -0
- package/src/elements/Endnote.ts +217 -0
- package/src/elements/EndnoteManager.ts +249 -0
- package/src/elements/Field.ts +1233 -0
- package/src/elements/FieldHelpers.ts +333 -0
- package/src/elements/FontManager.ts +339 -0
- package/src/elements/Footer.ts +269 -0
- package/src/elements/Footnote.ts +217 -0
- package/src/elements/FootnoteManager.ts +249 -0
- package/src/elements/Header.ts +269 -0
- package/src/elements/HeaderFooterManager.ts +219 -0
- package/src/elements/Hyperlink.ts +1146 -0
- package/src/elements/Image.ts +1756 -0
- package/src/elements/ImageManager.ts +432 -0
- package/src/elements/ImageRun.ts +59 -0
- package/src/elements/MathElement.ts +65 -0
- package/src/elements/Paragraph.ts +4227 -0
- package/src/elements/PreservedElement.ts +53 -0
- package/src/elements/PropertyChangeTypes.ts +442 -0
- package/src/elements/RangeMarker.ts +400 -0
- package/src/elements/Revision.ts +1217 -0
- package/src/elements/RevisionContent.ts +73 -0
- package/src/elements/RevisionManager.ts +1070 -0
- package/src/elements/Run.ts +3068 -0
- package/src/elements/Section.ts +1421 -0
- package/src/elements/Shape.ts +873 -0
- package/src/elements/StructuredDocumentTag.ts +978 -0
- package/src/elements/Table.ts +2524 -0
- package/src/elements/TableCell.ts +1586 -0
- package/src/elements/TableGridChange.ts +151 -0
- package/src/elements/TableOfContents.ts +691 -0
- package/src/elements/TableOfContentsElement.ts +89 -0
- package/src/elements/TableRow.ts +906 -0
- package/src/elements/TextBox.ts +768 -0
- package/src/formatting/AbstractNumbering.ts +548 -0
- package/src/formatting/CLAUDE.md +74 -0
- package/src/formatting/NumberingInstance.ts +212 -0
- package/src/formatting/NumberingLevel.ts +1006 -0
- package/src/formatting/NumberingManager.ts +827 -0
- package/src/formatting/Style.ts +1833 -0
- package/src/formatting/StylesManager.ts +1005 -0
- package/src/helpers/CleanupHelper.ts +524 -0
- package/src/images/ImageOptimizer.ts +274 -0
- package/src/index.ts +554 -0
- package/src/managers/CLAUDE.md +47 -0
- package/src/managers/DrawingManager.ts +319 -0
- package/src/tracking/DocumentTrackingContext.ts +643 -0
- package/src/tracking/TrackingContext.ts +173 -0
- package/src/types/compatibility-types.ts +49 -0
- package/src/types/formatting.ts +210 -0
- package/src/types/list-types.ts +152 -0
- package/src/types/settings-types.ts +59 -0
- package/src/types/styleConfig.ts +189 -0
- package/src/utils/CLAUDE.md +153 -0
- package/src/utils/ChangelogGenerator.ts +1581 -0
- package/src/utils/CompatibilityUpgrader.ts +237 -0
- package/src/utils/InMemoryRevisionAcceptor.ts +668 -0
- package/src/utils/MoveOperationHelper.ts +238 -0
- package/src/utils/RevisionAwareProcessor.ts +526 -0
- package/src/utils/RevisionWalker.ts +457 -0
- package/src/utils/SelectiveRevisionAcceptor.ts +613 -0
- package/src/utils/ShadingResolver.ts +107 -0
- package/src/utils/acceptRevisions.ts +714 -0
- package/src/utils/cnfStyleDecoder.ts +217 -0
- package/src/utils/corruptionDetection.ts +345 -0
- package/src/utils/dateFormatting.ts +20 -0
- package/src/utils/deepClone.ts +78 -0
- package/src/utils/diagnostics.ts +129 -0
- package/src/utils/errorHandling.ts +80 -0
- package/src/utils/formatting.ts +213 -0
- package/src/utils/list-detection.ts +274 -0
- package/src/utils/logger.ts +404 -0
- package/src/utils/parsingHelpers.ts +190 -0
- package/src/utils/stripTrackedChanges.ts +353 -0
- package/src/utils/textDiff.ts +100 -0
- package/src/utils/units.ts +421 -0
- package/src/utils/validation.ts +542 -0
- package/src/utils/xmlSanitization.ts +182 -0
- package/src/validation/RevisionAutoFixer.ts +542 -0
- package/src/validation/RevisionValidator.ts +460 -0
- package/src/validation/ValidationRules.ts +338 -0
- package/src/validation/index.ts +30 -0
- package/src/xml/CLAUDE.md +65 -0
- package/src/xml/XMLBuilder.ts +871 -0
- package/src/xml/XMLParser.ts +919 -0
- package/src/zip/CLAUDE.md +55 -0
- package/src/zip/ZipHandler.ts +637 -0
- package/src/zip/ZipReader.ts +299 -0
- package/src/zip/ZipWriter.ts +390 -0
- package/src/zip/errors.ts +69 -0
- package/src/zip/types.ts +116 -0
- package/dist/core/ListNormalizer.d.ts +0 -23
- package/dist/core/ListNormalizer.d.ts.map +0 -1
- package/dist/core/ListNormalizer.js +0 -624
- package/dist/core/ListNormalizer.js.map +0 -1
- package/dist/images/index.d.ts +0 -2
- package/dist/images/index.d.ts.map +0 -1
- package/dist/images/index.js +0 -8
- package/dist/images/index.js.map +0 -1
- package/dist/ms-doc/cfb/CFBReader.d.ts +0 -35
- package/dist/ms-doc/cfb/CFBReader.d.ts.map +0 -1
- package/dist/ms-doc/cfb/CFBReader.js +0 -360
- package/dist/ms-doc/cfb/CFBReader.js.map +0 -1
- package/dist/ms-doc/converter/DocToDocxConverter.d.ts +0 -55
- package/dist/ms-doc/converter/DocToDocxConverter.d.ts.map +0 -1
- package/dist/ms-doc/converter/DocToDocxConverter.js +0 -324
- package/dist/ms-doc/converter/DocToDocxConverter.js.map +0 -1
- package/dist/ms-doc/fib/FIB.d.ts +0 -18
- package/dist/ms-doc/fib/FIB.d.ts.map +0 -1
- package/dist/ms-doc/fib/FIB.js +0 -342
- package/dist/ms-doc/fib/FIB.js.map +0 -1
- package/dist/ms-doc/fields/FieldParser.d.ts +0 -31
- package/dist/ms-doc/fields/FieldParser.d.ts.map +0 -1
- package/dist/ms-doc/fields/FieldParser.js +0 -266
- package/dist/ms-doc/fields/FieldParser.js.map +0 -1
- package/dist/ms-doc/images/PictureExtractor.d.ts +0 -22
- package/dist/ms-doc/images/PictureExtractor.d.ts.map +0 -1
- package/dist/ms-doc/images/PictureExtractor.js +0 -233
- package/dist/ms-doc/images/PictureExtractor.js.map +0 -1
- package/dist/ms-doc/index.d.ts +0 -20
- package/dist/ms-doc/index.d.ts.map +0 -1
- package/dist/ms-doc/index.js +0 -59
- package/dist/ms-doc/index.js.map +0 -1
- package/dist/ms-doc/properties/SPRM.d.ts +0 -210
- package/dist/ms-doc/properties/SPRM.d.ts.map +0 -1
- package/dist/ms-doc/properties/SPRM.js +0 -633
- package/dist/ms-doc/properties/SPRM.js.map +0 -1
- package/dist/ms-doc/sections/SectionParser.d.ts +0 -25
- package/dist/ms-doc/sections/SectionParser.d.ts.map +0 -1
- package/dist/ms-doc/sections/SectionParser.js +0 -214
- package/dist/ms-doc/sections/SectionParser.js.map +0 -1
- package/dist/ms-doc/styles/StyleSheet.d.ts +0 -23
- package/dist/ms-doc/styles/StyleSheet.d.ts.map +0 -1
- package/dist/ms-doc/styles/StyleSheet.js +0 -268
- package/dist/ms-doc/styles/StyleSheet.js.map +0 -1
- package/dist/ms-doc/subdocuments/SubdocumentParser.d.ts +0 -61
- package/dist/ms-doc/subdocuments/SubdocumentParser.d.ts.map +0 -1
- package/dist/ms-doc/subdocuments/SubdocumentParser.js +0 -208
- package/dist/ms-doc/subdocuments/SubdocumentParser.js.map +0 -1
- package/dist/ms-doc/tables/TableParser.d.ts +0 -29
- package/dist/ms-doc/tables/TableParser.d.ts.map +0 -1
- package/dist/ms-doc/tables/TableParser.js +0 -176
- package/dist/ms-doc/tables/TableParser.js.map +0 -1
- package/dist/ms-doc/text/PieceTable.d.ts +0 -21
- package/dist/ms-doc/text/PieceTable.d.ts.map +0 -1
- package/dist/ms-doc/text/PieceTable.js +0 -171
- package/dist/ms-doc/text/PieceTable.js.map +0 -1
- package/dist/ms-doc/types/Constants.d.ts +0 -99
- package/dist/ms-doc/types/Constants.d.ts.map +0 -1
- package/dist/ms-doc/types/Constants.js +0 -102
- package/dist/ms-doc/types/Constants.js.map +0 -1
- package/dist/ms-doc/types/DocTypes.d.ts +0 -368
- package/dist/ms-doc/types/DocTypes.d.ts.map +0 -1
- package/dist/ms-doc/types/DocTypes.js +0 -3
- package/dist/ms-doc/types/DocTypes.js.map +0 -1
- package/dist/tracking/index.d.ts +0 -3
- package/dist/tracking/index.d.ts.map +0 -1
- package/dist/tracking/index.js +0 -6
- package/dist/tracking/index.js.map +0 -1
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Relationship - Represents an OpenXML relationship
|
|
3
|
+
*
|
|
4
|
+
* Relationships link document parts together (images, headers, footers, styles, etc.)
|
|
5
|
+
* They are stored in _rels/*.xml.rels files throughout the document structure.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { XMLBuilder } from '../xml/XMLBuilder';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Relationship types used in Word documents
|
|
12
|
+
*/
|
|
13
|
+
export enum RelationshipType {
|
|
14
|
+
/** Link to styles.xml */
|
|
15
|
+
STYLES = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles',
|
|
16
|
+
|
|
17
|
+
/** Link to numbering.xml */
|
|
18
|
+
NUMBERING = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering',
|
|
19
|
+
|
|
20
|
+
/** Link to an image */
|
|
21
|
+
IMAGE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',
|
|
22
|
+
|
|
23
|
+
/** Link to a header */
|
|
24
|
+
HEADER = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/header',
|
|
25
|
+
|
|
26
|
+
/** Link to a footer */
|
|
27
|
+
FOOTER = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer',
|
|
28
|
+
|
|
29
|
+
/** Link to fontTable.xml */
|
|
30
|
+
FONT_TABLE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable',
|
|
31
|
+
|
|
32
|
+
/** Link to settings.xml */
|
|
33
|
+
SETTINGS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings',
|
|
34
|
+
|
|
35
|
+
/** Link to theme */
|
|
36
|
+
THEME = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',
|
|
37
|
+
|
|
38
|
+
/** Link to hyperlink */
|
|
39
|
+
HYPERLINK = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink',
|
|
40
|
+
|
|
41
|
+
/** Link to comments.xml */
|
|
42
|
+
COMMENTS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments',
|
|
43
|
+
|
|
44
|
+
/** Link to footnotes.xml */
|
|
45
|
+
FOOTNOTES = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes',
|
|
46
|
+
|
|
47
|
+
/** Link to endnotes.xml */
|
|
48
|
+
ENDNOTES = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes',
|
|
49
|
+
|
|
50
|
+
/** Link to web settings */
|
|
51
|
+
WEB_SETTINGS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings',
|
|
52
|
+
|
|
53
|
+
/** Link to people.xml (track changes authors) */
|
|
54
|
+
PEOPLE = 'http://schemas.microsoft.com/office/2011/relationships/people',
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Properties for creating a relationship
|
|
59
|
+
*/
|
|
60
|
+
export interface RelationshipProperties {
|
|
61
|
+
/** Relationship ID (e.g., 'rId1', 'rId2') */
|
|
62
|
+
id: string;
|
|
63
|
+
|
|
64
|
+
/** Relationship type (URL defining the relationship type) */
|
|
65
|
+
type: string | RelationshipType;
|
|
66
|
+
|
|
67
|
+
/** Target path (relative to the source part) */
|
|
68
|
+
target: string;
|
|
69
|
+
|
|
70
|
+
/** Target mode (Internal or External) */
|
|
71
|
+
targetMode?: 'Internal' | 'External';
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Represents a single relationship in an OpenXML package
|
|
76
|
+
*/
|
|
77
|
+
export class Relationship {
|
|
78
|
+
private id: string;
|
|
79
|
+
private type: string;
|
|
80
|
+
private target: string;
|
|
81
|
+
private targetMode: 'Internal' | 'External';
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Creates a new relationship
|
|
85
|
+
* @param properties Relationship properties
|
|
86
|
+
*/
|
|
87
|
+
constructor(properties: RelationshipProperties) {
|
|
88
|
+
this.id = properties.id;
|
|
89
|
+
this.type = properties.type;
|
|
90
|
+
this.target = properties.target;
|
|
91
|
+
this.targetMode = properties.targetMode || 'Internal';
|
|
92
|
+
|
|
93
|
+
this.validate();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Validates the relationship properties
|
|
98
|
+
*/
|
|
99
|
+
private validate(): void {
|
|
100
|
+
if (!this.id?.startsWith('rId')) {
|
|
101
|
+
throw new Error(`Relationship ID must start with 'rId', got '${this.id}'`);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (!this.type) {
|
|
105
|
+
throw new Error('Relationship type is required');
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (!this.target) {
|
|
109
|
+
throw new Error('Relationship target is required');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Gets the relationship ID
|
|
115
|
+
*/
|
|
116
|
+
getId(): string {
|
|
117
|
+
return this.id;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Gets the relationship type
|
|
122
|
+
*/
|
|
123
|
+
getType(): string {
|
|
124
|
+
return this.type;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Gets the target path
|
|
129
|
+
*/
|
|
130
|
+
getTarget(): string {
|
|
131
|
+
return this.target;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Sets the target path
|
|
136
|
+
*
|
|
137
|
+
* This method allows updating the target of an existing relationship,
|
|
138
|
+
* which is crucial for properly updating hyperlink URLs without creating
|
|
139
|
+
* orphaned relationships. Per ECMA-376 §9.2, relationships can be modified
|
|
140
|
+
* as long as the ID remains the same.
|
|
141
|
+
*
|
|
142
|
+
* @param target The new target path or URL
|
|
143
|
+
*/
|
|
144
|
+
setTarget(target: string): void {
|
|
145
|
+
if (!target) {
|
|
146
|
+
throw new Error('Relationship target cannot be empty');
|
|
147
|
+
}
|
|
148
|
+
this.target = target;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Gets the target mode
|
|
153
|
+
*/
|
|
154
|
+
getTargetMode(): 'Internal' | 'External' {
|
|
155
|
+
return this.targetMode;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Checks if this relationship is external
|
|
160
|
+
*/
|
|
161
|
+
isExternal(): boolean {
|
|
162
|
+
return this.targetMode === 'External';
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Generates XML for this relationship
|
|
167
|
+
*
|
|
168
|
+
* **Security:** All attributes are properly XML-escaped to prevent injection attacks.
|
|
169
|
+
* Per ECMA-376 Part 2 §9, relationship attributes must be escaped.
|
|
170
|
+
*/
|
|
171
|
+
toXML(): string {
|
|
172
|
+
// Escape all attributes to prevent XML injection
|
|
173
|
+
const escapedId = XMLBuilder.escapeXmlAttribute(this.id);
|
|
174
|
+
const escapedType = XMLBuilder.escapeXmlAttribute(this.type);
|
|
175
|
+
const escapedTarget = XMLBuilder.escapeXmlAttribute(this.target);
|
|
176
|
+
|
|
177
|
+
let xml = ` <Relationship Id="${escapedId}" Type="${escapedType}" Target="${escapedTarget}"`;
|
|
178
|
+
|
|
179
|
+
if (this.targetMode === 'External') {
|
|
180
|
+
xml += ` TargetMode="External"`;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
xml += '/>';
|
|
184
|
+
return xml;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Factory method to create a relationship
|
|
189
|
+
* @param properties Relationship properties
|
|
190
|
+
*/
|
|
191
|
+
static create(properties: RelationshipProperties): Relationship {
|
|
192
|
+
return new Relationship(properties);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Creates a styles relationship
|
|
197
|
+
* @param id Relationship ID
|
|
198
|
+
*/
|
|
199
|
+
static createStyles(id = 'rId1'): Relationship {
|
|
200
|
+
return new Relationship({
|
|
201
|
+
id,
|
|
202
|
+
type: RelationshipType.STYLES,
|
|
203
|
+
target: 'styles.xml',
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Creates a numbering relationship
|
|
209
|
+
* @param id Relationship ID
|
|
210
|
+
*/
|
|
211
|
+
static createNumbering(id = 'rId2'): Relationship {
|
|
212
|
+
return new Relationship({
|
|
213
|
+
id,
|
|
214
|
+
type: RelationshipType.NUMBERING,
|
|
215
|
+
target: 'numbering.xml',
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Creates a fontTable relationship
|
|
221
|
+
* @param id Relationship ID (defaults to 'rId3')
|
|
222
|
+
*/
|
|
223
|
+
static createFontTable(id = 'rId3'): Relationship {
|
|
224
|
+
return new Relationship({
|
|
225
|
+
id,
|
|
226
|
+
type: RelationshipType.FONT_TABLE,
|
|
227
|
+
target: 'fontTable.xml',
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Creates a settings relationship
|
|
233
|
+
* @param id Relationship ID (defaults to 'rId4')
|
|
234
|
+
*/
|
|
235
|
+
static createSettings(id = 'rId4'): Relationship {
|
|
236
|
+
return new Relationship({
|
|
237
|
+
id,
|
|
238
|
+
type: RelationshipType.SETTINGS,
|
|
239
|
+
target: 'settings.xml',
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Creates a webSettings relationship
|
|
245
|
+
* @param id Relationship ID (defaults to 'rId5')
|
|
246
|
+
*/
|
|
247
|
+
static createWebSettings(id = 'rId5'): Relationship {
|
|
248
|
+
return new Relationship({
|
|
249
|
+
id,
|
|
250
|
+
type: RelationshipType.WEB_SETTINGS,
|
|
251
|
+
target: 'webSettings.xml',
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Creates a theme relationship
|
|
257
|
+
* @param id Relationship ID (defaults to 'rId6')
|
|
258
|
+
*/
|
|
259
|
+
static createTheme(id = 'rId6'): Relationship {
|
|
260
|
+
return new Relationship({
|
|
261
|
+
id,
|
|
262
|
+
type: RelationshipType.THEME,
|
|
263
|
+
target: 'theme/theme1.xml',
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Creates an image relationship
|
|
269
|
+
* @param id Relationship ID
|
|
270
|
+
* @param target Image path (e.g., 'media/image1.png')
|
|
271
|
+
*/
|
|
272
|
+
static createImage(id: string, target: string): Relationship {
|
|
273
|
+
return new Relationship({
|
|
274
|
+
id,
|
|
275
|
+
type: RelationshipType.IMAGE,
|
|
276
|
+
target,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Creates a header relationship
|
|
282
|
+
* @param id Relationship ID
|
|
283
|
+
* @param target Header file path (e.g., 'header1.xml')
|
|
284
|
+
*/
|
|
285
|
+
static createHeader(id: string, target: string): Relationship {
|
|
286
|
+
return new Relationship({
|
|
287
|
+
id,
|
|
288
|
+
type: RelationshipType.HEADER,
|
|
289
|
+
target,
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Creates a footer relationship
|
|
295
|
+
* @param id Relationship ID
|
|
296
|
+
* @param target Footer file path (e.g., 'footer1.xml')
|
|
297
|
+
*/
|
|
298
|
+
static createFooter(id: string, target: string): Relationship {
|
|
299
|
+
return new Relationship({
|
|
300
|
+
id,
|
|
301
|
+
type: RelationshipType.FOOTER,
|
|
302
|
+
target,
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Creates a hyperlink relationship (external)
|
|
308
|
+
* @param id Relationship ID
|
|
309
|
+
* @param url Hyperlink URL
|
|
310
|
+
*/
|
|
311
|
+
static createHyperlink(id: string, url: string): Relationship {
|
|
312
|
+
return new Relationship({
|
|
313
|
+
id,
|
|
314
|
+
type: RelationshipType.HYPERLINK,
|
|
315
|
+
target: url,
|
|
316
|
+
targetMode: 'External',
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Creates a comments relationship
|
|
322
|
+
* @param id Relationship ID (required - use RelationshipManager.generateId())
|
|
323
|
+
*/
|
|
324
|
+
static createComments(id: string): Relationship {
|
|
325
|
+
return new Relationship({
|
|
326
|
+
id,
|
|
327
|
+
type: RelationshipType.COMMENTS,
|
|
328
|
+
target: 'comments.xml',
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Creates a footnotes relationship
|
|
334
|
+
* @param id Relationship ID (required - use RelationshipManager.generateId())
|
|
335
|
+
*/
|
|
336
|
+
static createFootnotes(id: string): Relationship {
|
|
337
|
+
return new Relationship({
|
|
338
|
+
id,
|
|
339
|
+
type: RelationshipType.FOOTNOTES,
|
|
340
|
+
target: 'footnotes.xml',
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Creates an endnotes relationship
|
|
346
|
+
* @param id Relationship ID (required - use RelationshipManager.generateId())
|
|
347
|
+
*/
|
|
348
|
+
static createEndnotes(id: string): Relationship {
|
|
349
|
+
return new Relationship({
|
|
350
|
+
id,
|
|
351
|
+
type: RelationshipType.ENDNOTES,
|
|
352
|
+
target: 'endnotes.xml',
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* Creates a people relationship (track changes authors)
|
|
358
|
+
* @param id Relationship ID (required - use RelationshipManager.generateId())
|
|
359
|
+
*/
|
|
360
|
+
static createPeople(id: string): Relationship {
|
|
361
|
+
return new Relationship({
|
|
362
|
+
id,
|
|
363
|
+
type: RelationshipType.PEOPLE,
|
|
364
|
+
target: 'people.xml',
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
}
|