docxmlater 10.4.1 → 11.0.4
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 +3 -3
- package/dist/constants/legacyCompatFlags.d.ts +1 -1
- package/dist/constants/legacyCompatFlags.d.ts.map +1 -1
- package/dist/constants/legacyCompatFlags.js.map +1 -1
- package/dist/core/Document.d.ts +74 -67
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +605 -414
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentContent.d.ts +11 -10
- package/dist/core/DocumentContent.d.ts.map +1 -1
- package/dist/core/DocumentContent.js +19 -19
- package/dist/core/DocumentContent.js.map +1 -1
- package/dist/core/DocumentEvents.d.ts +39 -0
- package/dist/core/DocumentEvents.d.ts.map +1 -0
- package/dist/core/DocumentEvents.js +51 -0
- package/dist/core/DocumentEvents.js.map +1 -0
- package/dist/core/DocumentGenerator.d.ts +11 -11
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +72 -52
- package/dist/core/DocumentGenerator.js.map +1 -1
- package/dist/core/DocumentParser.d.ts +15 -15
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +2056 -1073
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/DocumentValidator.d.ts +3 -3
- package/dist/core/DocumentValidator.d.ts.map +1 -1
- package/dist/core/DocumentValidator.js +31 -31
- package/dist/core/DocumentValidator.js.map +1 -1
- package/dist/core/ElementRegistry.d.ts +22 -0
- package/dist/core/ElementRegistry.d.ts.map +1 -0
- package/dist/core/ElementRegistry.js +27 -0
- package/dist/core/ElementRegistry.js.map +1 -0
- package/dist/core/Relationship.js +4 -4
- package/dist/core/Relationship.js.map +1 -1
- package/dist/core/RelationshipManager.d.ts +1 -1
- package/dist/core/RelationshipManager.d.ts.map +1 -1
- package/dist/core/RelationshipManager.js +32 -32
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/AlternateContent.d.ts +1 -1
- package/dist/elements/AlternateContent.d.ts.map +1 -1
- package/dist/elements/AlternateContent.js.map +1 -1
- package/dist/elements/Bookmark.d.ts +6 -1
- package/dist/elements/Bookmark.d.ts.map +1 -1
- package/dist/elements/Bookmark.js +19 -3
- package/dist/elements/Bookmark.js.map +1 -1
- package/dist/elements/BookmarkManager.d.ts +1 -1
- package/dist/elements/BookmarkManager.d.ts.map +1 -1
- package/dist/elements/BookmarkManager.js +7 -7
- package/dist/elements/BookmarkManager.js.map +1 -1
- package/dist/elements/Comment.d.ts +2 -2
- package/dist/elements/Comment.d.ts.map +1 -1
- package/dist/elements/Comment.js +4 -4
- package/dist/elements/Comment.js.map +1 -1
- package/dist/elements/CommentManager.d.ts +2 -2
- package/dist/elements/CommentManager.d.ts.map +1 -1
- package/dist/elements/CommentManager.js +9 -9
- package/dist/elements/CommentManager.js.map +1 -1
- package/dist/elements/CommonTypes.d.ts +9 -4
- package/dist/elements/CommonTypes.d.ts.map +1 -1
- package/dist/elements/CommonTypes.js +1 -0
- package/dist/elements/CommonTypes.js.map +1 -1
- package/dist/elements/CustomXml.d.ts +1 -1
- package/dist/elements/CustomXml.d.ts.map +1 -1
- package/dist/elements/CustomXml.js.map +1 -1
- package/dist/elements/Endnote.d.ts +2 -2
- package/dist/elements/Endnote.d.ts.map +1 -1
- package/dist/elements/Endnote.js +9 -9
- package/dist/elements/Endnote.js.map +1 -1
- package/dist/elements/EndnoteManager.d.ts +1 -1
- package/dist/elements/EndnoteManager.d.ts.map +1 -1
- package/dist/elements/EndnoteManager.js +11 -11
- package/dist/elements/EndnoteManager.js.map +1 -1
- package/dist/elements/Field.d.ts +9 -5
- package/dist/elements/Field.d.ts.map +1 -1
- package/dist/elements/Field.js +21 -9
- package/dist/elements/Field.js.map +1 -1
- package/dist/elements/FieldHelpers.d.ts +1 -1
- package/dist/elements/FieldHelpers.d.ts.map +1 -1
- package/dist/elements/FieldHelpers.js +10 -10
- package/dist/elements/FieldHelpers.js.map +1 -1
- package/dist/elements/Footer.d.ts +3 -3
- package/dist/elements/Footer.d.ts.map +1 -1
- package/dist/elements/Footer.js +5 -5
- package/dist/elements/Footer.js.map +1 -1
- package/dist/elements/Footnote.d.ts +2 -2
- package/dist/elements/Footnote.d.ts.map +1 -1
- package/dist/elements/Footnote.js +9 -9
- package/dist/elements/Footnote.js.map +1 -1
- package/dist/elements/FootnoteManager.d.ts +1 -1
- package/dist/elements/FootnoteManager.d.ts.map +1 -1
- package/dist/elements/FootnoteManager.js +11 -11
- package/dist/elements/FootnoteManager.js.map +1 -1
- package/dist/elements/Header.d.ts +3 -3
- package/dist/elements/Header.d.ts.map +1 -1
- package/dist/elements/Header.js +5 -5
- package/dist/elements/Header.js.map +1 -1
- package/dist/elements/HeaderFooterManager.d.ts +2 -2
- package/dist/elements/HeaderFooterManager.d.ts.map +1 -1
- package/dist/elements/HeaderFooterManager.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts +5 -5
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +29 -29
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Image.d.ts +1 -1
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +67 -67
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/ImageManager.d.ts +1 -1
- package/dist/elements/ImageManager.d.ts.map +1 -1
- package/dist/elements/ImageManager.js +4 -4
- package/dist/elements/ImageManager.js.map +1 -1
- package/dist/elements/ImageRun.d.ts +3 -3
- package/dist/elements/ImageRun.d.ts.map +1 -1
- package/dist/elements/ImageRun.js +2 -2
- package/dist/elements/ImageRun.js.map +1 -1
- package/dist/elements/MathElement.d.ts +1 -1
- package/dist/elements/MathElement.d.ts.map +1 -1
- package/dist/elements/MathElement.js.map +1 -1
- package/dist/elements/Paragraph.d.ts +34 -19
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +286 -231
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/PreservedElement.d.ts +1 -1
- package/dist/elements/PreservedElement.d.ts.map +1 -1
- package/dist/elements/PreservedElement.js.map +1 -1
- package/dist/elements/PropertyChangeTypes.d.ts +2 -2
- package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
- package/dist/elements/PropertyChangeTypes.js.map +1 -1
- package/dist/elements/RangeMarker.d.ts +14 -1
- package/dist/elements/RangeMarker.d.ts.map +1 -1
- package/dist/elements/RangeMarker.js +46 -8
- package/dist/elements/RangeMarker.js.map +1 -1
- package/dist/elements/RegisteredBodyElement.d.ts +15 -0
- package/dist/elements/RegisteredBodyElement.d.ts.map +1 -0
- package/dist/elements/RegisteredBodyElement.js +44 -0
- package/dist/elements/RegisteredBodyElement.js.map +1 -0
- package/dist/elements/Revision.d.ts +8 -8
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +12 -12
- package/dist/elements/Revision.js.map +1 -1
- package/dist/elements/RevisionContent.d.ts +3 -3
- package/dist/elements/RevisionContent.d.ts.map +1 -1
- package/dist/elements/RevisionContent.js.map +1 -1
- package/dist/elements/RevisionManager.d.ts +2 -2
- package/dist/elements/RevisionManager.d.ts.map +1 -1
- package/dist/elements/RevisionManager.js +2 -2
- package/dist/elements/RevisionManager.js.map +1 -1
- package/dist/elements/Run.d.ts +16 -10
- package/dist/elements/Run.d.ts.map +1 -1
- package/dist/elements/Run.js +199 -173
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Section.d.ts +4 -2
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +152 -145
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Shape.d.ts +3 -3
- package/dist/elements/Shape.d.ts.map +1 -1
- package/dist/elements/Shape.js +12 -12
- package/dist/elements/Shape.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts +3 -3
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +39 -39
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/Table.d.ts +16 -10
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +118 -89
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +11 -11
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +108 -78
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableGridChange.d.ts +1 -1
- package/dist/elements/TableGridChange.d.ts.map +1 -1
- package/dist/elements/TableGridChange.js +3 -3
- package/dist/elements/TableGridChange.js.map +1 -1
- package/dist/elements/TableOfContents.d.ts +1 -1
- package/dist/elements/TableOfContents.d.ts.map +1 -1
- package/dist/elements/TableOfContents.js +2 -2
- package/dist/elements/TableOfContents.js.map +1 -1
- package/dist/elements/TableOfContentsElement.d.ts +2 -2
- package/dist/elements/TableOfContentsElement.d.ts.map +1 -1
- package/dist/elements/TableOfContentsElement.js +5 -5
- package/dist/elements/TableOfContentsElement.js.map +1 -1
- package/dist/elements/TableRow.d.ts +18 -7
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +127 -74
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/elements/TextBox.d.ts +4 -4
- package/dist/elements/TextBox.d.ts.map +1 -1
- package/dist/elements/TextBox.js +6 -6
- package/dist/elements/TextBox.js.map +1 -1
- package/dist/esm/constants/legacyCompatFlags.js +97 -0
- package/dist/esm/constants/legacyCompatFlags.js.map +1 -0
- package/dist/esm/constants/limits.js +36 -0
- package/dist/esm/constants/limits.js.map +1 -0
- package/dist/esm/core/Document.js +8498 -0
- package/dist/esm/core/Document.js.map +1 -0
- package/dist/esm/core/DocumentContent.js +190 -0
- package/dist/esm/core/DocumentContent.js.map +1 -0
- package/dist/esm/core/DocumentEvents.js +47 -0
- package/dist/esm/core/DocumentEvents.js.map +1 -0
- package/dist/esm/core/DocumentGenerator.js +764 -0
- package/dist/esm/core/DocumentGenerator.js.map +1 -0
- package/dist/esm/core/DocumentIdManager.js +67 -0
- package/dist/esm/core/DocumentIdManager.js.map +1 -0
- package/dist/esm/core/DocumentParser.js +8760 -0
- package/dist/esm/core/DocumentParser.js.map +1 -0
- package/dist/esm/core/DocumentValidator.js +222 -0
- package/dist/esm/core/DocumentValidator.js.map +1 -0
- package/dist/esm/core/ElementRegistry.js +24 -0
- package/dist/esm/core/ElementRegistry.js.map +1 -0
- package/dist/esm/core/Relationship.js +177 -0
- package/dist/esm/core/Relationship.js.map +1 -0
- package/dist/esm/core/RelationshipManager.js +202 -0
- package/dist/esm/core/RelationshipManager.js.map +1 -0
- package/dist/esm/elements/AlternateContent.js +19 -0
- package/dist/esm/elements/AlternateContent.js.map +1 -0
- package/dist/esm/elements/Bookmark.js +115 -0
- package/dist/esm/elements/Bookmark.js.map +1 -0
- package/dist/esm/elements/BookmarkManager.js +99 -0
- package/dist/esm/elements/BookmarkManager.js.map +1 -0
- package/dist/esm/elements/Comment.js +181 -0
- package/dist/esm/elements/Comment.js.map +1 -0
- package/dist/esm/elements/CommentManager.js +233 -0
- package/dist/esm/elements/CommentManager.js.map +1 -0
- package/dist/esm/elements/CommonTypes.js +106 -0
- package/dist/esm/elements/CommonTypes.js.map +1 -0
- package/dist/esm/elements/CustomXml.js +19 -0
- package/dist/esm/elements/CustomXml.js.map +1 -0
- package/dist/esm/elements/Endnote.js +107 -0
- package/dist/esm/elements/Endnote.js.map +1 -0
- package/dist/esm/elements/EndnoteManager.js +119 -0
- package/dist/esm/elements/EndnoteManager.js.map +1 -0
- package/dist/esm/elements/Field.js +856 -0
- package/dist/esm/elements/Field.js.map +1 -0
- package/dist/esm/elements/FieldHelpers.js +134 -0
- package/dist/esm/elements/FieldHelpers.js.map +1 -0
- package/dist/esm/elements/FontManager.js +158 -0
- package/dist/esm/elements/FontManager.js.map +1 -0
- package/dist/esm/elements/Footer.js +141 -0
- package/dist/esm/elements/Footer.js.map +1 -0
- package/dist/esm/elements/Footnote.js +107 -0
- package/dist/esm/elements/Footnote.js.map +1 -0
- package/dist/esm/elements/FootnoteManager.js +119 -0
- package/dist/esm/elements/FootnoteManager.js.map +1 -0
- package/dist/esm/elements/Header.js +141 -0
- package/dist/esm/elements/Header.js.map +1 -0
- package/dist/esm/elements/HeaderFooterManager.js +87 -0
- package/dist/esm/elements/HeaderFooterManager.js.map +1 -0
- package/dist/esm/elements/Hyperlink.js +586 -0
- package/dist/esm/elements/Hyperlink.js.map +1 -0
- package/dist/esm/elements/Image.js +1288 -0
- package/dist/esm/elements/Image.js.map +1 -0
- package/dist/esm/elements/ImageManager.js +223 -0
- package/dist/esm/elements/ImageManager.js.map +1 -0
- package/dist/esm/elements/ImageRun.js +29 -0
- package/dist/esm/elements/ImageRun.js.map +1 -0
- package/dist/esm/elements/MathElement.js +37 -0
- package/dist/esm/elements/MathElement.js.map +1 -0
- package/dist/esm/elements/Paragraph.js +2308 -0
- package/dist/esm/elements/Paragraph.js.map +1 -0
- package/dist/esm/elements/PreservedElement.js +29 -0
- package/dist/esm/elements/PreservedElement.js.map +1 -0
- package/dist/esm/elements/PropertyChangeTypes.js +53 -0
- package/dist/esm/elements/PropertyChangeTypes.js.map +1 -0
- package/dist/esm/elements/RangeMarker.js +219 -0
- package/dist/esm/elements/RangeMarker.js.map +1 -0
- package/dist/esm/elements/RegisteredBodyElement.js +40 -0
- package/dist/esm/elements/RegisteredBodyElement.js.map +1 -0
- package/dist/esm/elements/Revision.js +498 -0
- package/dist/esm/elements/Revision.js.map +1 -0
- package/dist/esm/elements/RevisionContent.js +18 -0
- package/dist/esm/elements/RevisionContent.js.map +1 -0
- package/dist/esm/elements/RevisionManager.js +486 -0
- package/dist/esm/elements/RevisionManager.js.map +1 -0
- package/dist/esm/elements/Run.js +1465 -0
- package/dist/esm/elements/Run.js.map +1 -0
- package/dist/esm/elements/Section.js +978 -0
- package/dist/esm/elements/Section.js.map +1 -0
- package/dist/esm/elements/Shape.js +493 -0
- package/dist/esm/elements/Shape.js.map +1 -0
- package/dist/esm/elements/StructuredDocumentTag.js +471 -0
- package/dist/esm/elements/StructuredDocumentTag.js.map +1 -0
- package/dist/esm/elements/Table.js +1456 -0
- package/dist/esm/elements/Table.js.map +1 -0
- package/dist/esm/elements/TableCell.js +835 -0
- package/dist/esm/elements/TableCell.js.map +1 -0
- package/dist/esm/elements/TableGridChange.js +52 -0
- package/dist/esm/elements/TableGridChange.js.map +1 -0
- package/dist/esm/elements/TableOfContents.js +389 -0
- package/dist/esm/elements/TableOfContents.js.map +1 -0
- package/dist/esm/elements/TableOfContentsElement.js +29 -0
- package/dist/esm/elements/TableOfContentsElement.js.map +1 -0
- package/dist/esm/elements/TableRow.js +555 -0
- package/dist/esm/elements/TableRow.js.map +1 -0
- package/dist/esm/elements/TextBox.js +459 -0
- package/dist/esm/elements/TextBox.js.map +1 -0
- package/dist/esm/formatting/AbstractNumbering.js +325 -0
- package/dist/esm/formatting/AbstractNumbering.js.map +1 -0
- package/dist/esm/formatting/NumberingInstance.js +150 -0
- package/dist/esm/formatting/NumberingInstance.js.map +1 -0
- package/dist/esm/formatting/NumberingLevel.js +608 -0
- package/dist/esm/formatting/NumberingLevel.js.map +1 -0
- package/dist/esm/formatting/NumberingManager.js +423 -0
- package/dist/esm/formatting/NumberingManager.js.map +1 -0
- package/dist/esm/formatting/Style.js +1151 -0
- package/dist/esm/formatting/Style.js.map +1 -0
- package/dist/esm/formatting/StylesManager.js +557 -0
- package/dist/esm/formatting/StylesManager.js.map +1 -0
- package/dist/esm/helpers/CleanupHelper.js +350 -0
- package/dist/esm/helpers/CleanupHelper.js.map +1 -0
- package/dist/esm/images/ImageOptimizer.js +161 -0
- package/dist/esm/images/ImageOptimizer.js.map +1 -0
- package/dist/esm/index.js +75 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal.js +16 -0
- package/dist/esm/internal.js.map +1 -0
- package/dist/esm/managers/DrawingManager.js +163 -0
- package/dist/esm/managers/DrawingManager.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/processors/ChangelogGenerator.js +970 -0
- package/dist/esm/processors/ChangelogGenerator.js.map +1 -0
- package/dist/esm/processors/CompatibilityUpgrader.js +130 -0
- package/dist/esm/processors/CompatibilityUpgrader.js.map +1 -0
- package/dist/esm/processors/InMemoryRevisionAcceptor.js +530 -0
- package/dist/esm/processors/InMemoryRevisionAcceptor.js.map +1 -0
- package/dist/esm/processors/MoveOperationHelper.js +57 -0
- package/dist/esm/processors/MoveOperationHelper.js.map +1 -0
- package/dist/esm/processors/RevisionAwareProcessor.js +232 -0
- package/dist/esm/processors/RevisionAwareProcessor.js.map +1 -0
- package/dist/esm/processors/RevisionWalker.js +278 -0
- package/dist/esm/processors/RevisionWalker.js.map +1 -0
- package/dist/{utils → esm/processors}/SelectiveRevisionAcceptor.js +81 -42
- package/dist/esm/processors/SelectiveRevisionAcceptor.js.map +1 -0
- package/dist/esm/processors/ShadingResolver.js +66 -0
- package/dist/esm/processors/ShadingResolver.js.map +1 -0
- package/dist/esm/processors/acceptRevisions.js +416 -0
- package/dist/esm/processors/acceptRevisions.js.map +1 -0
- package/dist/esm/processors/cnfStyleDecoder.js +89 -0
- package/dist/esm/processors/cnfStyleDecoder.js.map +1 -0
- package/dist/esm/processors/stripTrackedChanges.js +201 -0
- package/dist/esm/processors/stripTrackedChanges.js.map +1 -0
- package/dist/esm/tracking/DocumentTrackingContext.js +531 -0
- package/dist/esm/tracking/DocumentTrackingContext.js.map +1 -0
- package/dist/esm/tracking/TrackingContext.js +2 -0
- package/dist/esm/tracking/TrackingContext.js.map +1 -0
- package/dist/esm/types/compatibility-types.js +8 -0
- package/dist/esm/types/compatibility-types.js.map +1 -0
- package/dist/esm/types/document-types.js +2 -0
- package/dist/esm/types/document-types.js.map +1 -0
- package/dist/esm/types/formatting.js +2 -0
- package/dist/esm/types/formatting.js.map +1 -0
- package/dist/esm/types/list-types.js +2 -0
- package/dist/esm/types/list-types.js.map +1 -0
- package/dist/esm/types/settings-types.js +2 -0
- package/dist/esm/types/settings-types.js.map +1 -0
- package/dist/esm/types/styleConfig.js +2 -0
- package/dist/esm/types/styleConfig.js.map +1 -0
- package/dist/esm/utils/KeyedRegistry.js +32 -0
- package/dist/esm/utils/KeyedRegistry.js.map +1 -0
- package/dist/esm/utils/corruptionDetection.js +155 -0
- package/dist/esm/utils/corruptionDetection.js.map +1 -0
- package/dist/esm/utils/dateFormatting.js +4 -0
- package/dist/esm/utils/dateFormatting.js.map +1 -0
- package/dist/esm/utils/deepClone.js +40 -0
- package/dist/esm/utils/deepClone.js.map +1 -0
- package/dist/esm/utils/deepEqual.js +47 -0
- package/dist/esm/utils/deepEqual.js.map +1 -0
- package/dist/esm/utils/diagnostics.js +69 -0
- package/dist/esm/utils/diagnostics.js.map +1 -0
- package/dist/esm/utils/errorHandling.js +36 -0
- package/dist/esm/utils/errorHandling.js.map +1 -0
- package/dist/esm/utils/formatting.js +93 -0
- package/dist/esm/utils/formatting.js.map +1 -0
- package/dist/esm/utils/list-detection.js +148 -0
- package/dist/esm/utils/list-detection.js.map +1 -0
- package/dist/esm/utils/logger.js +205 -0
- package/dist/esm/utils/logger.js.map +1 -0
- package/dist/esm/utils/parsingHelpers.js +56 -0
- package/dist/esm/utils/parsingHelpers.js.map +1 -0
- package/dist/esm/utils/textDiff.js +42 -0
- package/dist/esm/utils/textDiff.js.map +1 -0
- package/dist/esm/utils/units.js +152 -0
- package/dist/esm/utils/units.js.map +1 -0
- package/dist/esm/utils/validation.js +285 -0
- package/dist/esm/utils/validation.js.map +1 -0
- package/dist/esm/utils/xmlSanitization.js +54 -0
- package/dist/esm/utils/xmlSanitization.js.map +1 -0
- package/dist/esm/validation/RevisionAutoFixer.js +340 -0
- package/dist/esm/validation/RevisionAutoFixer.js.map +1 -0
- package/dist/esm/validation/RevisionValidator.js +240 -0
- package/dist/esm/validation/RevisionValidator.js.map +1 -0
- package/dist/esm/validation/ValidationRuleRegistry.js +40 -0
- package/dist/esm/validation/ValidationRuleRegistry.js.map +1 -0
- package/dist/esm/validation/ValidationRules.js +92 -0
- package/dist/esm/validation/ValidationRules.js.map +1 -0
- package/dist/esm/validation/index.js +4 -0
- package/dist/esm/validation/index.js.map +1 -0
- package/dist/esm/xml/XMLBuilder.js +434 -0
- package/dist/esm/xml/XMLBuilder.js.map +1 -0
- package/dist/esm/xml/XMLParser.js +486 -0
- package/dist/esm/xml/XMLParser.js.map +1 -0
- package/dist/esm/zip/ZipHandler.js +298 -0
- package/dist/esm/zip/ZipHandler.js.map +1 -0
- package/dist/esm/zip/ZipReader.js +147 -0
- package/dist/esm/zip/ZipReader.js.map +1 -0
- package/dist/esm/zip/ZipWriter.js +199 -0
- package/dist/esm/zip/ZipWriter.js.map +1 -0
- package/dist/esm/zip/errors.js +43 -0
- package/dist/esm/zip/errors.js.map +1 -0
- package/dist/esm/zip/types.js +31 -0
- package/dist/esm/zip/types.js.map +1 -0
- package/dist/formatting/AbstractNumbering.d.ts +2 -2
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +33 -33
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingInstance.d.ts +2 -2
- package/dist/formatting/NumberingInstance.d.ts.map +1 -1
- package/dist/formatting/NumberingInstance.js +7 -7
- package/dist/formatting/NumberingInstance.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts +11 -2
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +111 -25
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/NumberingManager.d.ts +4 -4
- package/dist/formatting/NumberingManager.d.ts.map +1 -1
- package/dist/formatting/NumberingManager.js +28 -28
- package/dist/formatting/NumberingManager.js.map +1 -1
- package/dist/formatting/Style.d.ts +14 -7
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +309 -112
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +2 -2
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js +52 -52
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/helpers/CleanupHelper.d.ts +1 -1
- package/dist/helpers/CleanupHelper.d.ts.map +1 -1
- package/dist/helpers/CleanupHelper.js +15 -15
- package/dist/helpers/CleanupHelper.js.map +1 -1
- package/dist/index.d.ts +81 -90
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +286 -317
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +16 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +42 -0
- package/dist/internal.js.map +1 -0
- package/dist/managers/DrawingManager.d.ts +3 -3
- package/dist/managers/DrawingManager.d.ts.map +1 -1
- package/dist/managers/DrawingManager.js +12 -12
- package/dist/managers/DrawingManager.js.map +1 -1
- package/dist/{utils → processors}/ChangelogGenerator.d.ts +2 -2
- package/dist/processors/ChangelogGenerator.d.ts.map +1 -0
- package/dist/{utils → processors}/ChangelogGenerator.js +2 -2
- package/dist/processors/ChangelogGenerator.js.map +1 -0
- package/dist/processors/CompatibilityUpgrader.d.ts.map +1 -0
- package/dist/{utils → processors}/CompatibilityUpgrader.js +10 -10
- package/dist/processors/CompatibilityUpgrader.js.map +1 -0
- package/dist/{utils → processors}/InMemoryRevisionAcceptor.d.ts +3 -3
- package/dist/processors/InMemoryRevisionAcceptor.d.ts.map +1 -0
- package/dist/{utils → processors}/InMemoryRevisionAcceptor.js +84 -27
- package/dist/processors/InMemoryRevisionAcceptor.js.map +1 -0
- package/dist/{utils → processors}/MoveOperationHelper.d.ts +4 -4
- package/dist/processors/MoveOperationHelper.d.ts.map +1 -0
- package/dist/{utils → processors}/MoveOperationHelper.js +10 -10
- package/dist/processors/MoveOperationHelper.js.map +1 -0
- package/dist/{utils → processors}/RevisionAwareProcessor.d.ts +3 -3
- package/dist/processors/RevisionAwareProcessor.d.ts.map +1 -0
- package/dist/{utils → processors}/RevisionAwareProcessor.js +2 -2
- package/dist/processors/RevisionAwareProcessor.js.map +1 -0
- package/dist/{utils → processors}/RevisionWalker.d.ts +2 -1
- package/dist/processors/RevisionWalker.d.ts.map +1 -0
- package/dist/{utils → processors}/RevisionWalker.js +28 -0
- package/dist/processors/RevisionWalker.js.map +1 -0
- package/dist/{utils → processors}/SelectiveRevisionAcceptor.d.ts +4 -3
- package/dist/processors/SelectiveRevisionAcceptor.d.ts.map +1 -0
- package/dist/processors/SelectiveRevisionAcceptor.js +402 -0
- package/dist/processors/SelectiveRevisionAcceptor.js.map +1 -0
- package/dist/processors/ShadingResolver.d.ts +6 -0
- package/dist/processors/ShadingResolver.d.ts.map +1 -0
- package/dist/{utils → processors}/ShadingResolver.js +2 -2
- package/dist/processors/ShadingResolver.js.map +1 -0
- package/dist/{utils → processors}/acceptRevisions.d.ts +1 -1
- package/dist/processors/acceptRevisions.d.ts.map +1 -0
- package/dist/{utils → processors}/acceptRevisions.js +24 -4
- package/dist/processors/acceptRevisions.js.map +1 -0
- package/dist/{utils → processors}/cnfStyleDecoder.d.ts +1 -1
- package/dist/processors/cnfStyleDecoder.d.ts.map +1 -0
- package/dist/processors/cnfStyleDecoder.js.map +1 -0
- package/dist/processors/stripTrackedChanges.d.ts +3 -0
- package/dist/processors/stripTrackedChanges.d.ts.map +1 -0
- package/dist/{utils → processors}/stripTrackedChanges.js +16 -6
- package/dist/processors/stripTrackedChanges.js.map +1 -0
- package/dist/tracking/DocumentTrackingContext.d.ts +4 -4
- package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
- package/dist/tracking/DocumentTrackingContext.js +38 -43
- package/dist/tracking/DocumentTrackingContext.js.map +1 -1
- package/dist/tracking/TrackingContext.d.ts +8 -8
- package/dist/tracking/TrackingContext.d.ts.map +1 -1
- package/dist/tracking/TrackingContext.js.map +1 -1
- package/dist/types/document-types.d.ts +28 -0
- package/dist/types/document-types.d.ts.map +1 -0
- package/dist/types/document-types.js +3 -0
- package/dist/types/document-types.js.map +1 -0
- package/dist/types/formatting.d.ts +4 -4
- package/dist/types/formatting.d.ts.map +1 -1
- package/dist/types/formatting.js.map +1 -1
- package/dist/types/settings-types.d.ts +6 -0
- package/dist/types/settings-types.d.ts.map +1 -1
- package/dist/types/settings-types.js.map +1 -1
- package/dist/utils/KeyedRegistry.d.ts +13 -0
- package/dist/utils/KeyedRegistry.d.ts.map +1 -0
- package/dist/utils/KeyedRegistry.js +36 -0
- package/dist/utils/KeyedRegistry.js.map +1 -0
- package/dist/utils/corruptionDetection.d.ts +1 -1
- package/dist/utils/corruptionDetection.d.ts.map +1 -1
- package/dist/utils/corruptionDetection.js +4 -4
- package/dist/utils/corruptionDetection.js.map +1 -1
- package/dist/utils/deepEqual.d.ts +2 -0
- package/dist/utils/deepEqual.d.ts.map +1 -0
- package/dist/utils/deepEqual.js +50 -0
- package/dist/utils/deepEqual.js.map +1 -0
- 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.map +1 -1
- package/dist/utils/parsingHelpers.d.ts +1 -1
- package/dist/utils/parsingHelpers.d.ts.map +1 -1
- package/dist/utils/parsingHelpers.js +2 -2
- package/dist/utils/parsingHelpers.js.map +1 -1
- package/dist/utils/validation.js +7 -7
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/xmlSanitization.js +2 -2
- package/dist/utils/xmlSanitization.js.map +1 -1
- package/dist/validation/RevisionAutoFixer.d.ts +4 -4
- package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
- package/dist/validation/RevisionAutoFixer.js +11 -11
- package/dist/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/validation/RevisionValidator.d.ts +5 -4
- package/dist/validation/RevisionValidator.d.ts.map +1 -1
- package/dist/validation/RevisionValidator.js +29 -30
- package/dist/validation/RevisionValidator.js.map +1 -1
- package/dist/validation/ValidationRuleRegistry.d.ts +27 -0
- package/dist/validation/ValidationRuleRegistry.d.ts.map +1 -0
- package/dist/validation/ValidationRuleRegistry.js +43 -0
- package/dist/validation/ValidationRuleRegistry.js.map +1 -0
- package/dist/validation/index.d.ts +3 -3
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +10 -10
- package/dist/validation/index.js.map +1 -1
- package/dist/xml/XMLBuilder.d.ts +6 -1
- package/dist/xml/XMLBuilder.d.ts.map +1 -1
- package/dist/xml/XMLBuilder.js +11 -6
- package/dist/xml/XMLBuilder.js.map +1 -1
- package/dist/xml/XMLParser.js +6 -6
- package/dist/xml/XMLParser.js.map +1 -1
- package/dist/zip/ZipHandler.d.ts +1 -1
- package/dist/zip/ZipHandler.d.ts.map +1 -1
- package/dist/zip/ZipHandler.js +8 -8
- package/dist/zip/ZipHandler.js.map +1 -1
- package/dist/zip/ZipReader.d.ts +1 -1
- package/dist/zip/ZipReader.d.ts.map +1 -1
- package/dist/zip/ZipReader.js +14 -14
- package/dist/zip/ZipReader.js.map +1 -1
- package/dist/zip/ZipWriter.d.ts +1 -1
- package/dist/zip/ZipWriter.d.ts.map +1 -1
- package/dist/zip/ZipWriter.js +10 -10
- package/dist/zip/ZipWriter.js.map +1 -1
- package/package.json +20 -4
- package/src/constants/legacyCompatFlags.ts +1 -1
- package/src/core/Document.ts +461 -167
- package/src/core/DocumentContent.ts +14 -11
- package/src/core/DocumentEvents.ts +90 -0
- package/src/core/DocumentGenerator.ts +49 -22
- package/src/core/DocumentParser.ts +2180 -617
- package/src/core/DocumentValidator.ts +7 -7
- package/src/core/ElementRegistry.ts +69 -0
- package/src/core/Relationship.ts +1 -1
- package/src/core/RelationshipManager.ts +4 -4
- package/src/elements/AlternateContent.ts +1 -1
- package/src/elements/Bookmark.ts +52 -4
- package/src/elements/BookmarkManager.ts +2 -2
- package/src/elements/Comment.ts +3 -3
- package/src/elements/CommentManager.ts +4 -4
- package/src/elements/CommonTypes.ts +45 -7
- package/src/elements/CustomXml.ts +1 -1
- package/src/elements/Endnote.ts +2 -2
- package/src/elements/EndnoteManager.ts +3 -3
- package/src/elements/Field.ts +44 -10
- package/src/elements/FieldHelpers.ts +2 -2
- package/src/elements/Footer.ts +4 -4
- package/src/elements/Footnote.ts +2 -2
- package/src/elements/FootnoteManager.ts +3 -3
- package/src/elements/Header.ts +4 -4
- package/src/elements/HeaderFooterManager.ts +2 -2
- package/src/elements/Hyperlink.ts +16 -12
- package/src/elements/Image.ts +3 -3
- package/src/elements/ImageManager.ts +2 -2
- package/src/elements/ImageRun.ts +3 -3
- package/src/elements/MathElement.ts +1 -1
- package/src/elements/Paragraph.ts +221 -88
- package/src/elements/PreservedElement.ts +1 -1
- package/src/elements/PropertyChangeTypes.ts +2 -2
- package/src/elements/RangeMarker.ts +153 -12
- package/src/elements/RegisteredBodyElement.ts +52 -0
- package/src/elements/Revision.ts +14 -14
- package/src/elements/RevisionContent.ts +3 -3
- package/src/elements/RevisionManager.ts +3 -3
- package/src/elements/Run.ts +221 -94
- package/src/elements/Section.ts +136 -69
- package/src/elements/Shape.ts +4 -4
- package/src/elements/StructuredDocumentTag.ts +3 -3
- package/src/elements/Table.ts +91 -27
- package/src/elements/TableCell.ts +62 -34
- package/src/elements/TableGridChange.ts +1 -1
- package/src/elements/TableOfContents.ts +1 -1
- package/src/elements/TableOfContentsElement.ts +2 -2
- package/src/elements/TableRow.ts +192 -48
- package/src/elements/TextBox.ts +5 -5
- package/src/formatting/AbstractNumbering.ts +3 -3
- package/src/formatting/NumberingInstance.ts +2 -2
- package/src/formatting/NumberingLevel.ts +201 -10
- package/src/formatting/NumberingManager.ts +5 -5
- package/src/formatting/Style.ts +382 -86
- package/src/formatting/StylesManager.ts +4 -4
- package/src/helpers/CleanupHelper.ts +6 -6
- package/src/index.ts +118 -127
- package/src/internal.ts +79 -0
- package/src/managers/DrawingManager.ts +3 -3
- package/src/{utils → processors}/ChangelogGenerator.ts +3 -3
- package/src/{utils → processors}/CompatibilityUpgrader.ts +2 -2
- package/src/{utils → processors}/InMemoryRevisionAcceptor.ts +100 -12
- package/src/{utils → processors}/MoveOperationHelper.ts +5 -5
- package/src/{utils → processors}/RevisionAwareProcessor.ts +3 -3
- package/src/{utils → processors}/RevisionWalker.ts +42 -1
- package/src/{utils → processors}/SelectiveRevisionAcceptor.ts +98 -39
- package/src/{utils → processors}/ShadingResolver.ts +5 -5
- package/src/{utils → processors}/acceptRevisions.ts +77 -9
- package/src/{utils → processors}/cnfStyleDecoder.ts +1 -1
- package/src/{utils → processors}/stripTrackedChanges.ts +35 -10
- package/src/tracking/DocumentTrackingContext.ts +12 -14
- package/src/tracking/TrackingContext.ts +8 -8
- package/src/types/document-types.ts +53 -0
- package/src/types/formatting.ts +4 -4
- package/src/types/settings-types.ts +32 -0
- package/src/utils/KeyedRegistry.ts +41 -0
- package/src/utils/corruptionDetection.ts +2 -2
- package/src/utils/deepEqual.ts +58 -0
- package/src/utils/list-detection.ts +2 -2
- package/src/utils/parsingHelpers.ts +11 -3
- package/src/utils/validation.ts +3 -3
- package/src/utils/xmlSanitization.ts +1 -1
- package/src/validation/RevisionAutoFixer.ts +5 -5
- package/src/validation/RevisionValidator.ts +39 -28
- package/src/validation/ValidationRuleRegistry.ts +86 -0
- package/src/validation/index.ts +3 -3
- package/src/xml/XMLBuilder.ts +13 -3
- package/src/xml/XMLParser.ts +2 -2
- package/src/zip/ZipHandler.ts +4 -4
- package/src/zip/ZipReader.ts +3 -3
- package/src/zip/ZipWriter.ts +3 -3
- package/dist/utils/ChangelogGenerator.d.ts.map +0 -1
- package/dist/utils/ChangelogGenerator.js.map +0 -1
- package/dist/utils/CompatibilityUpgrader.d.ts.map +0 -1
- package/dist/utils/CompatibilityUpgrader.js.map +0 -1
- package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +0 -1
- package/dist/utils/InMemoryRevisionAcceptor.js.map +0 -1
- package/dist/utils/MoveOperationHelper.d.ts.map +0 -1
- package/dist/utils/MoveOperationHelper.js.map +0 -1
- package/dist/utils/RevisionAwareProcessor.d.ts.map +0 -1
- package/dist/utils/RevisionAwareProcessor.js.map +0 -1
- package/dist/utils/RevisionWalker.d.ts.map +0 -1
- package/dist/utils/RevisionWalker.js.map +0 -1
- package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +0 -1
- package/dist/utils/SelectiveRevisionAcceptor.js.map +0 -1
- package/dist/utils/ShadingResolver.d.ts +0 -6
- package/dist/utils/ShadingResolver.d.ts.map +0 -1
- package/dist/utils/ShadingResolver.js.map +0 -1
- package/dist/utils/acceptRevisions.d.ts.map +0 -1
- package/dist/utils/acceptRevisions.js.map +0 -1
- package/dist/utils/cnfStyleDecoder.d.ts.map +0 -1
- package/dist/utils/cnfStyleDecoder.js.map +0 -1
- package/dist/utils/stripTrackedChanges.d.ts +0 -3
- package/dist/utils/stripTrackedChanges.d.ts.map +0 -1
- package/dist/utils/stripTrackedChanges.js.map +0 -1
- package/src/__tests__/helper-methods.test.ts +0 -512
- package/src/constants/CLAUDE.md +0 -28
- package/src/core/CLAUDE.md +0 -113
- package/src/elements/CLAUDE.md +0 -142
- package/src/formatting/CLAUDE.md +0 -78
- package/src/managers/CLAUDE.md +0 -47
- package/src/tracking/CLAUDE.md +0 -30
- package/src/types/CLAUDE.md +0 -39
- package/src/utils/CLAUDE.md +0 -168
- package/src/validation/CLAUDE.md +0 -40
- package/src/xml/CLAUDE.md +0 -65
- package/src/zip/CLAUDE.md +0 -55
- /package/dist/{utils → processors}/CompatibilityUpgrader.d.ts +0 -0
- /package/dist/{utils → processors}/cnfStyleDecoder.js +0 -0
package/dist/core/Document.js
CHANGED
|
@@ -34,86 +34,88 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.Document = void 0;
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
const
|
|
65
|
-
const
|
|
66
|
-
const
|
|
67
|
-
const
|
|
68
|
-
const
|
|
69
|
-
const
|
|
37
|
+
const parsingHelpers_js_1 = require("../utils/parsingHelpers.js");
|
|
38
|
+
const Bookmark_js_1 = require("../elements/Bookmark.js");
|
|
39
|
+
const BookmarkManager_js_1 = require("../elements/BookmarkManager.js");
|
|
40
|
+
const PreservedElement_js_1 = require("../elements/PreservedElement.js");
|
|
41
|
+
const CommentManager_js_1 = require("../elements/CommentManager.js");
|
|
42
|
+
const EndnoteManager_js_1 = require("../elements/EndnoteManager.js");
|
|
43
|
+
const Field_js_1 = require("../elements/Field.js");
|
|
44
|
+
const FootnoteManager_js_1 = require("../elements/FootnoteManager.js");
|
|
45
|
+
const HeaderFooterManager_js_1 = require("../elements/HeaderFooterManager.js");
|
|
46
|
+
const Hyperlink_js_1 = require("../elements/Hyperlink.js");
|
|
47
|
+
const ImageManager_js_1 = require("../elements/ImageManager.js");
|
|
48
|
+
const ImageRun_js_1 = require("../elements/ImageRun.js");
|
|
49
|
+
const Paragraph_js_1 = require("../elements/Paragraph.js");
|
|
50
|
+
const RangeMarker_js_1 = require("../elements/RangeMarker.js");
|
|
51
|
+
const Revision_js_1 = require("../elements/Revision.js");
|
|
52
|
+
const RevisionManager_js_1 = require("../elements/RevisionManager.js");
|
|
53
|
+
const Run_js_1 = require("../elements/Run.js");
|
|
54
|
+
const Shape_js_1 = require("../elements/Shape.js");
|
|
55
|
+
const TextBox_js_1 = require("../elements/TextBox.js");
|
|
56
|
+
const index_js_1 = require("../validation/index.js");
|
|
57
|
+
const Section_js_1 = require("../elements/Section.js");
|
|
58
|
+
const StructuredDocumentTag_js_1 = require("../elements/StructuredDocumentTag.js");
|
|
59
|
+
const Table_js_1 = require("../elements/Table.js");
|
|
60
|
+
const TableCell_js_1 = require("../elements/TableCell.js");
|
|
61
|
+
const TableOfContentsElement_js_1 = require("../elements/TableOfContentsElement.js");
|
|
62
|
+
const ShadingResolver_js_1 = require("../processors/ShadingResolver.js");
|
|
63
|
+
const NumberingManager_js_1 = require("../formatting/NumberingManager.js");
|
|
64
|
+
const Style_js_1 = require("../formatting/Style.js");
|
|
65
|
+
const StylesManager_js_1 = require("../formatting/StylesManager.js");
|
|
66
|
+
const compatibility_types_js_1 = require("../types/compatibility-types.js");
|
|
67
|
+
const CompatibilityUpgrader_js_1 = require("../processors/CompatibilityUpgrader.js");
|
|
68
|
+
const legacyCompatFlags_js_1 = require("../constants/legacyCompatFlags.js");
|
|
69
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
70
|
+
const units_js_1 = require("../utils/units.js");
|
|
70
71
|
function getLogger() {
|
|
71
|
-
return (0,
|
|
72
|
+
return (0, logger_js_1.createScopedLogger)((0, logger_js_1.getGlobalLogger)(), 'Document');
|
|
72
73
|
}
|
|
73
|
-
const
|
|
74
|
-
const
|
|
75
|
-
const
|
|
76
|
-
const
|
|
77
|
-
const
|
|
78
|
-
const
|
|
79
|
-
const
|
|
80
|
-
const
|
|
81
|
-
const
|
|
82
|
-
const
|
|
83
|
-
const
|
|
84
|
-
const
|
|
85
|
-
const
|
|
86
|
-
const
|
|
87
|
-
const
|
|
88
|
-
const
|
|
74
|
+
const acceptRevisions_js_1 = require("../processors/acceptRevisions.js");
|
|
75
|
+
const InMemoryRevisionAcceptor_js_1 = require("../processors/InMemoryRevisionAcceptor.js");
|
|
76
|
+
const stripTrackedChanges_js_1 = require("../processors/stripTrackedChanges.js");
|
|
77
|
+
const textDiff_js_1 = require("../utils/textDiff.js");
|
|
78
|
+
const XMLBuilder_js_1 = require("../xml/XMLBuilder.js");
|
|
79
|
+
const XMLParser_js_1 = require("../xml/XMLParser.js");
|
|
80
|
+
const DocumentTrackingContext_js_1 = require("../tracking/DocumentTrackingContext.js");
|
|
81
|
+
const ZipHandler_js_1 = require("../zip/ZipHandler.js");
|
|
82
|
+
const types_js_1 = require("../zip/types.js");
|
|
83
|
+
const DocumentGenerator_js_1 = require("./DocumentGenerator.js");
|
|
84
|
+
const DocumentIdManager_js_1 = require("./DocumentIdManager.js");
|
|
85
|
+
const DocumentParser_js_1 = require("./DocumentParser.js");
|
|
86
|
+
const DocumentValidator_js_1 = require("./DocumentValidator.js");
|
|
87
|
+
const DocumentEvents_js_1 = require("./DocumentEvents.js");
|
|
88
|
+
const RelationshipManager_js_1 = require("./RelationshipManager.js");
|
|
89
|
+
const Relationship_js_1 = require("./Relationship.js");
|
|
90
|
+
const ImageOptimizer_js_1 = require("../images/ImageOptimizer.js");
|
|
89
91
|
class Document {
|
|
90
92
|
constructor(zipHandler, options = {}, initDefaults = true) {
|
|
91
|
-
this.zipHandler = zipHandler || new
|
|
93
|
+
this.zipHandler = zipHandler || new ZipHandler_js_1.ZipHandler();
|
|
92
94
|
this.bodyElements = [];
|
|
93
95
|
this.properties = options.properties || {};
|
|
94
96
|
this.namespaces = {};
|
|
95
|
-
this.stylesManager =
|
|
96
|
-
this.numberingManager =
|
|
97
|
-
this.section = new
|
|
98
|
-
this.imageManager =
|
|
97
|
+
this.stylesManager = StylesManager_js_1.StylesManager.create();
|
|
98
|
+
this.numberingManager = NumberingManager_js_1.NumberingManager.create();
|
|
99
|
+
this.section = new Section_js_1.Section();
|
|
100
|
+
this.imageManager = ImageManager_js_1.ImageManager.create();
|
|
99
101
|
this.relationshipManager = initDefaults
|
|
100
|
-
?
|
|
101
|
-
:
|
|
102
|
-
this.headerFooterManager =
|
|
103
|
-
this.bookmarkManager =
|
|
104
|
-
this.revisionManager =
|
|
105
|
-
this.commentManager =
|
|
106
|
-
this.footnoteManager =
|
|
107
|
-
this.endnoteManager =
|
|
108
|
-
this.documentIdManager =
|
|
102
|
+
? RelationshipManager_js_1.RelationshipManager.createForDocument()
|
|
103
|
+
: RelationshipManager_js_1.RelationshipManager.create();
|
|
104
|
+
this.headerFooterManager = HeaderFooterManager_js_1.HeaderFooterManager.create();
|
|
105
|
+
this.bookmarkManager = BookmarkManager_js_1.BookmarkManager.create();
|
|
106
|
+
this.revisionManager = RevisionManager_js_1.RevisionManager.create();
|
|
107
|
+
this.commentManager = CommentManager_js_1.CommentManager.create();
|
|
108
|
+
this.footnoteManager = FootnoteManager_js_1.FootnoteManager.create();
|
|
109
|
+
this.endnoteManager = EndnoteManager_js_1.EndnoteManager.create();
|
|
110
|
+
this.documentIdManager = DocumentIdManager_js_1.DocumentIdManager.create();
|
|
109
111
|
this.bookmarkManager.setIdProvider(() => this.documentIdManager.getNextId(), (existingId) => this.documentIdManager.ensureNextIdAbove(existingId));
|
|
110
112
|
this.revisionManager.setIdProvider(() => this.documentIdManager.getNextId(), (existingId) => this.documentIdManager.ensureNextIdAbove(existingId));
|
|
111
113
|
this.commentManager.setIdProvider(() => this.documentIdManager.getNextId(), (existingId) => this.documentIdManager.ensureNextIdAbove(existingId));
|
|
112
|
-
this.trackingContext = new
|
|
113
|
-
this.parser = new
|
|
114
|
-
this.generator = new
|
|
115
|
-
this.validator = new
|
|
116
|
-
this.logger = options.logger ||
|
|
114
|
+
this.trackingContext = new DocumentTrackingContext_js_1.DocumentTrackingContext(this.revisionManager);
|
|
115
|
+
this.parser = new DocumentParser_js_1.DocumentParser();
|
|
116
|
+
this.generator = new DocumentGenerator_js_1.DocumentGenerator();
|
|
117
|
+
this.validator = new DocumentValidator_js_1.DocumentValidator();
|
|
118
|
+
this.logger = options.logger || logger_js_1.defaultLogger;
|
|
117
119
|
this.trackChangesEnabled = false;
|
|
118
120
|
this.trackFormatting = true;
|
|
119
121
|
this.revisionViewSettings = {
|
|
@@ -168,6 +170,8 @@ class Document {
|
|
|
168
170
|
_originalCommentsXml;
|
|
169
171
|
_commentsModified = false;
|
|
170
172
|
_originalCommentCompanionFiles = new Map();
|
|
173
|
+
_events = new DocumentEvents_js_1.DocumentEventEmitter();
|
|
174
|
+
_saveQueue = Promise.resolve();
|
|
171
175
|
_removedParts = new Set();
|
|
172
176
|
_appPropsModified = false;
|
|
173
177
|
_footnotesModified = false;
|
|
@@ -338,7 +342,7 @@ class Document {
|
|
|
338
342
|
para.addText(match[6], { font: 'Courier New' });
|
|
339
343
|
}
|
|
340
344
|
else if (match[7] !== undefined && match[8] !== undefined) {
|
|
341
|
-
para.addHyperlink(new
|
|
345
|
+
para.addHyperlink(new Hyperlink_js_1.Hyperlink({ url: match[8], text: match[7] }));
|
|
342
346
|
}
|
|
343
347
|
lastIndex = match.index + match[0].length;
|
|
344
348
|
}
|
|
@@ -363,21 +367,25 @@ class Document {
|
|
|
363
367
|
}
|
|
364
368
|
if (rows.length === 0)
|
|
365
369
|
return null;
|
|
366
|
-
return
|
|
370
|
+
return Table_js_1.Table.fromArray(rows);
|
|
367
371
|
}
|
|
368
372
|
static async load(filePath, options) {
|
|
369
373
|
const logger = getLogger();
|
|
370
374
|
logger.info('Loading document from file', { path: filePath });
|
|
371
|
-
const zipHandler = new
|
|
375
|
+
const zipHandler = new ZipHandler_js_1.ZipHandler();
|
|
372
376
|
await zipHandler.load(filePath);
|
|
373
|
-
|
|
377
|
+
const doc = await Document.initializeFromZip(zipHandler, options);
|
|
378
|
+
doc._events.emit('afterLoad', { source: 'file', path: filePath });
|
|
379
|
+
return doc;
|
|
374
380
|
}
|
|
375
381
|
static async loadFromBuffer(buffer, options) {
|
|
376
382
|
const logger = getLogger();
|
|
377
383
|
logger.info('Loading document from buffer', { bufferSize: buffer.length });
|
|
378
|
-
const zipHandler = new
|
|
384
|
+
const zipHandler = new ZipHandler_js_1.ZipHandler();
|
|
379
385
|
await zipHandler.loadFromBuffer(buffer);
|
|
380
|
-
|
|
386
|
+
const doc = await Document.initializeFromZip(zipHandler, options);
|
|
387
|
+
doc._events.emit('afterLoad', { source: 'buffer' });
|
|
388
|
+
return doc;
|
|
381
389
|
}
|
|
382
390
|
static async initializeFromZip(zipHandler, options) {
|
|
383
391
|
const logger = getLogger();
|
|
@@ -386,10 +394,10 @@ class Document {
|
|
|
386
394
|
? 'preserve'
|
|
387
395
|
: (options?.revisionHandling ?? 'accept');
|
|
388
396
|
if (revisionHandling === 'accept') {
|
|
389
|
-
await (0,
|
|
397
|
+
await (0, acceptRevisions_js_1.acceptAllRevisions)(zipHandler);
|
|
390
398
|
}
|
|
391
399
|
else if (revisionHandling === 'strip') {
|
|
392
|
-
await (0,
|
|
400
|
+
await (0, stripTrackedChanges_js_1.stripTrackedChanges)(zipHandler);
|
|
393
401
|
}
|
|
394
402
|
else if (revisionHandling === 'preserve') {
|
|
395
403
|
if (!useInMemoryAccept) {
|
|
@@ -408,24 +416,24 @@ class Document {
|
|
|
408
416
|
if (contentTypesXml) {
|
|
409
417
|
doc._originalContentTypes = doc.parseContentTypes(contentTypesXml);
|
|
410
418
|
}
|
|
411
|
-
const stylesXml = zipHandler.getFileAsString(
|
|
419
|
+
const stylesXml = zipHandler.getFileAsString(types_js_1.DOCX_PATHS.STYLES);
|
|
412
420
|
if (stylesXml) {
|
|
413
421
|
doc._originalStylesXml = stylesXml;
|
|
414
422
|
}
|
|
415
|
-
const numberingXml = zipHandler.getFileAsString(
|
|
423
|
+
const numberingXml = zipHandler.getFileAsString(types_js_1.DOCX_PATHS.NUMBERING);
|
|
416
424
|
if (numberingXml) {
|
|
417
425
|
doc._originalNumberingXml = numberingXml;
|
|
418
426
|
}
|
|
419
|
-
const settingsXml = zipHandler.getFileAsString(
|
|
427
|
+
const settingsXml = zipHandler.getFileAsString(types_js_1.DOCX_PATHS.SETTINGS);
|
|
420
428
|
if (settingsXml) {
|
|
421
429
|
doc._originalSettingsXml = settingsXml;
|
|
422
430
|
doc.parseSettingsFromXml(settingsXml);
|
|
423
431
|
}
|
|
424
|
-
const appPropsXml = zipHandler.getFileAsString(
|
|
432
|
+
const appPropsXml = zipHandler.getFileAsString(types_js_1.DOCX_PATHS.APP_PROPS);
|
|
425
433
|
if (appPropsXml) {
|
|
426
434
|
doc._originalAppPropsXml = appPropsXml;
|
|
427
435
|
}
|
|
428
|
-
const webSettingsXml = zipHandler.getFileAsString(
|
|
436
|
+
const webSettingsXml = zipHandler.getFileAsString(types_js_1.DOCX_PATHS.WEB_SETTINGS);
|
|
429
437
|
if (webSettingsXml) {
|
|
430
438
|
doc._originalWebSettingsXml = webSettingsXml;
|
|
431
439
|
doc.parseWebSettingsFromXml(webSettingsXml);
|
|
@@ -459,28 +467,51 @@ class Document {
|
|
|
459
467
|
this.trackChangesEnabled = true;
|
|
460
468
|
}
|
|
461
469
|
}
|
|
462
|
-
const
|
|
463
|
-
|
|
470
|
+
const parseSettingCtOnOff = (tagName) => {
|
|
471
|
+
const re = new RegExp(`<${tagName}\\b([^>]*)\\/?>`);
|
|
472
|
+
const m = re.exec(settingsXml);
|
|
473
|
+
if (!m)
|
|
474
|
+
return undefined;
|
|
475
|
+
const attrs = m[1] ?? '';
|
|
476
|
+
const valMatch = /w:val\s*=\s*"([^"]*)"/.exec(attrs);
|
|
477
|
+
if (!valMatch || valMatch[1] === undefined)
|
|
478
|
+
return true;
|
|
479
|
+
const v = valMatch[1].toLowerCase();
|
|
480
|
+
return v !== '0' && v !== 'false' && v !== 'off';
|
|
481
|
+
};
|
|
482
|
+
const doNotTrackFormattingVal = parseSettingCtOnOff('w:doNotTrackFormatting');
|
|
483
|
+
if (doNotTrackFormattingVal === true) {
|
|
464
484
|
this.trackFormatting = false;
|
|
465
485
|
}
|
|
466
|
-
|
|
467
|
-
if (hasTrackFormatting) {
|
|
486
|
+
else if (doNotTrackFormattingVal === false) {
|
|
468
487
|
this.trackFormatting = true;
|
|
469
488
|
}
|
|
489
|
+
const trackFormattingVal = parseSettingCtOnOff('w:trackFormatting');
|
|
490
|
+
if (trackFormattingVal !== undefined) {
|
|
491
|
+
this.trackFormatting = trackFormattingVal;
|
|
492
|
+
}
|
|
470
493
|
const revisionViewMatch = /<w:revisionView\b([^>]*)\/?>/.exec(settingsXml);
|
|
471
494
|
if (revisionViewMatch) {
|
|
472
495
|
const attrs = revisionViewMatch[1] || '';
|
|
473
496
|
const insDelMatch = /w:insDel\s*=\s*"([^"]*)"/.exec(attrs);
|
|
474
497
|
const formattingMatch = /w:formatting\s*=\s*"([^"]*)"/.exec(attrs);
|
|
475
498
|
const inkMatch = /w:inkAnnotations\s*=\s*"([^"]*)"/.exec(attrs);
|
|
499
|
+
const markupMatch = /w:markup\s*=\s*"([^"]*)"/.exec(attrs);
|
|
500
|
+
const commentsMatch = /w:comments\s*=\s*"([^"]*)"/.exec(attrs);
|
|
476
501
|
if (insDelMatch?.[1] !== undefined) {
|
|
477
|
-
this.revisionViewSettings.showInsertionsAndDeletions = insDelMatch[1]
|
|
502
|
+
this.revisionViewSettings.showInsertionsAndDeletions = (0, parsingHelpers_js_1.parseOnOffAttribute)(insDelMatch[1]);
|
|
478
503
|
}
|
|
479
504
|
if (formattingMatch?.[1] !== undefined) {
|
|
480
|
-
this.revisionViewSettings.showFormatting = formattingMatch[1]
|
|
505
|
+
this.revisionViewSettings.showFormatting = (0, parsingHelpers_js_1.parseOnOffAttribute)(formattingMatch[1]);
|
|
481
506
|
}
|
|
482
507
|
if (inkMatch?.[1] !== undefined) {
|
|
483
|
-
this.revisionViewSettings.showInkAnnotations = inkMatch[1]
|
|
508
|
+
this.revisionViewSettings.showInkAnnotations = (0, parsingHelpers_js_1.parseOnOffAttribute)(inkMatch[1]);
|
|
509
|
+
}
|
|
510
|
+
if (markupMatch?.[1] !== undefined) {
|
|
511
|
+
this.revisionViewSettings.showMarkup = (0, parsingHelpers_js_1.parseOnOffAttribute)(markupMatch[1]);
|
|
512
|
+
}
|
|
513
|
+
if (commentsMatch?.[1] !== undefined) {
|
|
514
|
+
this.revisionViewSettings.showComments = (0, parsingHelpers_js_1.parseOnOffAttribute)(commentsMatch[1]);
|
|
484
515
|
}
|
|
485
516
|
}
|
|
486
517
|
const protMatch = /<w:documentProtection\b([^>]*)\/?>/.exec(settingsXml);
|
|
@@ -490,8 +521,12 @@ class Document {
|
|
|
490
521
|
const enforcementMatch = /w:enforcement\s*=\s*"([^"]*)"/.exec(attrs);
|
|
491
522
|
if (editMatch?.[1]) {
|
|
492
523
|
const edit = editMatch[1];
|
|
493
|
-
const enforcement = enforcementMatch?.[1] ? enforcementMatch[1]
|
|
524
|
+
const enforcement = enforcementMatch?.[1] ? (0, parsingHelpers_js_1.parseOnOffAttribute)(enforcementMatch[1]) : true;
|
|
494
525
|
this.documentProtection = { edit, enforcement };
|
|
526
|
+
const formattingMatch = /w:formatting\s*=\s*"([^"]*)"/.exec(attrs);
|
|
527
|
+
if (formattingMatch?.[1] !== undefined) {
|
|
528
|
+
this.documentProtection.formatting = (0, parsingHelpers_js_1.parseOnOffAttribute)(formattingMatch[1]);
|
|
529
|
+
}
|
|
495
530
|
const cryptProviderMatch = /w:cryptProviderType\s*=\s*"([^"]*)"/.exec(attrs);
|
|
496
531
|
const cryptAlgClassMatch = /w:cryptAlgorithmClass\s*=\s*"([^"]*)"/.exec(attrs);
|
|
497
532
|
const cryptAlgTypeMatch = /w:cryptAlgorithmType\s*=\s*"([^"]*)"/.exec(attrs);
|
|
@@ -513,6 +548,16 @@ class Document {
|
|
|
513
548
|
this.documentProtection.hash = hashMatch[1];
|
|
514
549
|
if (saltMatch?.[1])
|
|
515
550
|
this.documentProtection.salt = saltMatch[1];
|
|
551
|
+
const algorithmNameMatch = /w:algorithmName\s*=\s*"([^"]*)"/.exec(attrs);
|
|
552
|
+
const hashValueMatch = /w:hashValue\s*=\s*"([^"]*)"/.exec(attrs);
|
|
553
|
+
const saltValueMatch = /w:saltValue\s*=\s*"([^"]*)"/.exec(attrs);
|
|
554
|
+
if (algorithmNameMatch?.[1]) {
|
|
555
|
+
this.documentProtection.algorithmName = algorithmNameMatch[1];
|
|
556
|
+
}
|
|
557
|
+
if (hashValueMatch?.[1])
|
|
558
|
+
this.documentProtection.hashValue = hashValueMatch[1];
|
|
559
|
+
if (saltValueMatch?.[1])
|
|
560
|
+
this.documentProtection.saltValue = saltValueMatch[1];
|
|
516
561
|
}
|
|
517
562
|
}
|
|
518
563
|
const rsidsBlockMatch = /<w:rsids>([\s\S]*?)<\/w:rsids>/.exec(settingsXml);
|
|
@@ -536,37 +581,37 @@ class Document {
|
|
|
536
581
|
if (viewMatch?.[1]) {
|
|
537
582
|
this._documentView = viewMatch[1];
|
|
538
583
|
}
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
584
|
+
const evenAndOddHeadersVal = parseSettingCtOnOff('w:evenAndOddHeaders');
|
|
585
|
+
if (evenAndOddHeadersVal !== undefined)
|
|
586
|
+
this._evenAndOddHeaders = evenAndOddHeadersVal;
|
|
587
|
+
const mirrorMarginsVal = parseSettingCtOnOff('w:mirrorMargins');
|
|
588
|
+
if (mirrorMarginsVal !== undefined)
|
|
589
|
+
this._mirrorMargins = mirrorMarginsVal;
|
|
590
|
+
const autoHyphenationVal = parseSettingCtOnOff('w:autoHyphenation');
|
|
591
|
+
if (autoHyphenationVal !== undefined)
|
|
592
|
+
this._autoHyphenation = autoHyphenationVal;
|
|
593
|
+
const hideSpellingErrorsVal = parseSettingCtOnOff('w:hideSpellingErrors');
|
|
594
|
+
if (hideSpellingErrorsVal !== undefined)
|
|
595
|
+
this._hideSpellingErrors = hideSpellingErrorsVal;
|
|
596
|
+
const hideGrammaticalErrorsVal = parseSettingCtOnOff('w:hideGrammaticalErrors');
|
|
597
|
+
if (hideGrammaticalErrorsVal !== undefined)
|
|
598
|
+
this._hideGrammaticalErrors = hideGrammaticalErrorsVal;
|
|
554
599
|
const defaultTabStopMatch = /<w:defaultTabStop\s+w:val\s*=\s*"(\d+)"\s*\/?>/.exec(settingsXml);
|
|
555
600
|
if (defaultTabStopMatch?.[1]) {
|
|
556
601
|
this._defaultTabStop = parseInt(defaultTabStopMatch[1], 10);
|
|
557
602
|
}
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
603
|
+
const updateFieldsVal = parseSettingCtOnOff('w:updateFields');
|
|
604
|
+
if (updateFieldsVal !== undefined)
|
|
605
|
+
this._updateFields = updateFieldsVal;
|
|
606
|
+
const embedTrueTypeFontsVal = parseSettingCtOnOff('w:embedTrueTypeFonts');
|
|
607
|
+
if (embedTrueTypeFontsVal !== undefined)
|
|
608
|
+
this._embedTrueTypeFonts = embedTrueTypeFontsVal;
|
|
609
|
+
const saveSubsetFontsVal = parseSettingCtOnOff('w:saveSubsetFonts');
|
|
610
|
+
if (saveSubsetFontsVal !== undefined)
|
|
611
|
+
this._saveSubsetFonts = saveSubsetFontsVal;
|
|
612
|
+
const doNotTrackMovesVal = parseSettingCtOnOff('w:doNotTrackMoves');
|
|
613
|
+
if (doNotTrackMovesVal !== undefined)
|
|
614
|
+
this._doNotTrackMoves = doNotTrackMovesVal;
|
|
570
615
|
const decimalMatch = /<w:decimalSymbol\s+w:val\s*=\s*"([^"]*)"\s*\/?>/.exec(settingsXml);
|
|
571
616
|
if (decimalMatch?.[1]) {
|
|
572
617
|
this._decimalSymbol = decimalMatch[1];
|
|
@@ -580,7 +625,7 @@ class Document {
|
|
|
580
625
|
parseCompatBlock(settingsXml) {
|
|
581
626
|
const compatSettings = [];
|
|
582
627
|
const legacyFlags = [];
|
|
583
|
-
let mode =
|
|
628
|
+
let mode = compatibility_types_js_1.CompatibilityMode.Word2007;
|
|
584
629
|
const compatBlockMatch = /<w:compat>([\s\S]*?)<\/w:compat>/.exec(settingsXml);
|
|
585
630
|
if (compatBlockMatch?.[1]) {
|
|
586
631
|
const compatBlock = compatBlockMatch[1];
|
|
@@ -618,7 +663,7 @@ class Document {
|
|
|
618
663
|
}
|
|
619
664
|
return {
|
|
620
665
|
mode,
|
|
621
|
-
isLegacyMode: mode <
|
|
666
|
+
isLegacyMode: mode < compatibility_types_js_1.CompatibilityMode.Word2013Plus,
|
|
622
667
|
compatSettings,
|
|
623
668
|
legacyFlags,
|
|
624
669
|
};
|
|
@@ -634,7 +679,7 @@ class Document {
|
|
|
634
679
|
this.stylesManager.addStyle(style);
|
|
635
680
|
}
|
|
636
681
|
for (const element of this.bodyElements) {
|
|
637
|
-
if (element instanceof
|
|
682
|
+
if (element instanceof Table_js_1.Table) {
|
|
638
683
|
element._setStylesManager(this.stylesManager);
|
|
639
684
|
}
|
|
640
685
|
}
|
|
@@ -693,16 +738,16 @@ class Document {
|
|
|
693
738
|
}
|
|
694
739
|
this._originalCommentsXml = commentsXml;
|
|
695
740
|
for (const path of [
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
741
|
+
types_js_1.DOCX_PATHS.COMMENTS_EXTENDED,
|
|
742
|
+
types_js_1.DOCX_PATHS.COMMENTS_IDS,
|
|
743
|
+
types_js_1.DOCX_PATHS.COMMENTS_EXTENSIBLE,
|
|
699
744
|
]) {
|
|
700
745
|
const content = this.zipHandler.getFileAsString(path);
|
|
701
746
|
if (content) {
|
|
702
747
|
this._originalCommentCompanionFiles.set(path, content);
|
|
703
748
|
}
|
|
704
749
|
}
|
|
705
|
-
const parser = new
|
|
750
|
+
const parser = new DocumentParser_js_1.DocumentParser();
|
|
706
751
|
const comments = parser.parseCommentsXml(commentsXml);
|
|
707
752
|
for (const comment of comments) {
|
|
708
753
|
this.commentManager.registerExisting(comment);
|
|
@@ -710,13 +755,13 @@ class Document {
|
|
|
710
755
|
this.commentManager.linkReplies();
|
|
711
756
|
}
|
|
712
757
|
parseAndRegisterFootnotes() {
|
|
713
|
-
const footnotesXml = this.zipHandler.getFileAsString(
|
|
758
|
+
const footnotesXml = this.zipHandler.getFileAsString(types_js_1.DOCX_PATHS.FOOTNOTES);
|
|
714
759
|
if (!footnotesXml) {
|
|
715
760
|
return;
|
|
716
761
|
}
|
|
717
762
|
this._originalFootnotesXml = footnotesXml;
|
|
718
763
|
try {
|
|
719
|
-
const parser = new
|
|
764
|
+
const parser = new DocumentParser_js_1.DocumentParser();
|
|
720
765
|
const footnotes = parser.parseFootnotesXml(footnotesXml);
|
|
721
766
|
for (const footnote of footnotes) {
|
|
722
767
|
const id = footnote.getId();
|
|
@@ -732,13 +777,13 @@ class Document {
|
|
|
732
777
|
}
|
|
733
778
|
}
|
|
734
779
|
parseAndRegisterEndnotes() {
|
|
735
|
-
const endnotesXml = this.zipHandler.getFileAsString(
|
|
780
|
+
const endnotesXml = this.zipHandler.getFileAsString(types_js_1.DOCX_PATHS.ENDNOTES);
|
|
736
781
|
if (!endnotesXml) {
|
|
737
782
|
return;
|
|
738
783
|
}
|
|
739
784
|
this._originalEndnotesXml = endnotesXml;
|
|
740
785
|
try {
|
|
741
|
-
const parser = new
|
|
786
|
+
const parser = new DocumentParser_js_1.DocumentParser();
|
|
742
787
|
const endnotes = parser.parseEndnotesXml(endnotesXml);
|
|
743
788
|
for (const endnote of endnotes) {
|
|
744
789
|
const id = endnote.getId();
|
|
@@ -779,15 +824,15 @@ class Document {
|
|
|
779
824
|
}
|
|
780
825
|
}
|
|
781
826
|
initializeRequiredFiles() {
|
|
782
|
-
this.zipHandler.addFile(
|
|
783
|
-
this.zipHandler.addFile(
|
|
784
|
-
this.zipHandler.addFile(
|
|
827
|
+
this.zipHandler.addFile(types_js_1.DOCX_PATHS.CONTENT_TYPES, this.generator.generateContentTypes());
|
|
828
|
+
this.zipHandler.addFile(types_js_1.DOCX_PATHS.RELS, this.generator.generateRels());
|
|
829
|
+
this.zipHandler.addFile(types_js_1.DOCX_PATHS.DOCUMENT, this.generator.generateDocumentXml(this.bodyElements, this.section, this.namespaces, this._documentBackground));
|
|
785
830
|
this.zipHandler.addFile('word/_rels/document.xml.rels', this.relationshipManager.generateXml());
|
|
786
|
-
this.zipHandler.addFile(
|
|
787
|
-
this.zipHandler.addFile(
|
|
831
|
+
this.zipHandler.addFile(types_js_1.DOCX_PATHS.STYLES, this.stylesManager.generateStylesXml());
|
|
832
|
+
this.zipHandler.addFile(types_js_1.DOCX_PATHS.NUMBERING, this.numberingManager.generateNumberingXml());
|
|
788
833
|
this.zipHandler.addFile('word/fontTable.xml', this.generator.generateFontTable());
|
|
789
|
-
this.zipHandler.addFile(
|
|
790
|
-
this.zipHandler.addFile(
|
|
834
|
+
this.zipHandler.addFile(types_js_1.DOCX_PATHS.WEB_SETTINGS, this.generator.generateWebSettings());
|
|
835
|
+
this.zipHandler.addFile(types_js_1.DOCX_PATHS.SETTINGS, this.generator.generateSettings({
|
|
791
836
|
trackChangesEnabled: this.trackChangesEnabled,
|
|
792
837
|
trackFormatting: this.trackFormatting,
|
|
793
838
|
revisionView: this.revisionViewSettings,
|
|
@@ -796,7 +841,7 @@ class Document {
|
|
|
796
841
|
documentProtection: this.documentProtection,
|
|
797
842
|
}));
|
|
798
843
|
this._compatInfo = {
|
|
799
|
-
mode:
|
|
844
|
+
mode: compatibility_types_js_1.CompatibilityMode.Word2013Plus,
|
|
800
845
|
isLegacyMode: false,
|
|
801
846
|
compatSettings: [
|
|
802
847
|
{ name: 'compatibilityMode', uri: 'http://schemas.microsoft.com/office/word', val: '15' },
|
|
@@ -824,8 +869,8 @@ class Document {
|
|
|
824
869
|
legacyFlags: [],
|
|
825
870
|
};
|
|
826
871
|
this.zipHandler.addFile('word/theme/theme1.xml', this.generator.generateTheme());
|
|
827
|
-
this.zipHandler.addFile(
|
|
828
|
-
this.zipHandler.addFile(
|
|
872
|
+
this.zipHandler.addFile(types_js_1.DOCX_PATHS.CORE_PROPS, this.generator.generateCoreProps(this.properties));
|
|
873
|
+
this.zipHandler.addFile(types_js_1.DOCX_PATHS.APP_PROPS, this.generator.generateAppProps(this.properties));
|
|
829
874
|
}
|
|
830
875
|
addParagraph(paragraph) {
|
|
831
876
|
paragraph._setStylesManager(this.stylesManager);
|
|
@@ -834,16 +879,17 @@ class Document {
|
|
|
834
879
|
const runs = paragraph.getRuns();
|
|
835
880
|
if (runs.length > 0) {
|
|
836
881
|
const author = this.trackingContext.getAuthor();
|
|
837
|
-
const insertion =
|
|
882
|
+
const insertion = Revision_js_1.Revision.createInsertion(author, runs);
|
|
838
883
|
this.trackingContext.getRevisionManager().register(insertion);
|
|
839
884
|
paragraph.addRevision(insertion);
|
|
840
885
|
}
|
|
841
886
|
}
|
|
842
887
|
this.bodyElements.push(paragraph);
|
|
888
|
+
this._emitElementAdded(paragraph, this.bodyElements.length - 1);
|
|
843
889
|
return this;
|
|
844
890
|
}
|
|
845
891
|
createParagraph(text) {
|
|
846
|
-
const para = new
|
|
892
|
+
const para = new Paragraph_js_1.Paragraph();
|
|
847
893
|
para._setStylesManager(this.stylesManager);
|
|
848
894
|
if (this.trackChangesEnabled && this.trackingContext.isEnabled()) {
|
|
849
895
|
para._setTrackingContext(this.trackingContext);
|
|
@@ -851,7 +897,9 @@ class Document {
|
|
|
851
897
|
if (text) {
|
|
852
898
|
para.addText(text);
|
|
853
899
|
}
|
|
900
|
+
Document.applyGlobalDefaultsToParagraph(para);
|
|
854
901
|
this.bodyElements.push(para);
|
|
902
|
+
this._emitElementAdded(para, this.bodyElements.length - 1);
|
|
855
903
|
return para;
|
|
856
904
|
}
|
|
857
905
|
addHeading(text, level = 1) {
|
|
@@ -859,7 +907,7 @@ class Document {
|
|
|
859
907
|
}
|
|
860
908
|
addPageBreak() {
|
|
861
909
|
const para = this.createParagraph();
|
|
862
|
-
const run = new
|
|
910
|
+
const run = new Run_js_1.Run('');
|
|
863
911
|
run.addBreak('page');
|
|
864
912
|
para.addRun(run);
|
|
865
913
|
return para;
|
|
@@ -875,34 +923,38 @@ class Document {
|
|
|
875
923
|
this.bindTrackingToElement(table);
|
|
876
924
|
}
|
|
877
925
|
this.bodyElements.push(table);
|
|
926
|
+
this._emitElementAdded(table, this.bodyElements.length - 1);
|
|
878
927
|
return this;
|
|
879
928
|
}
|
|
880
929
|
addStructuredDocumentTag(sdt) {
|
|
881
930
|
this.bodyElements.push(sdt);
|
|
931
|
+
this._emitElementAdded(sdt, this.bodyElements.length - 1);
|
|
882
932
|
return this;
|
|
883
933
|
}
|
|
884
934
|
createTable(rows, columns) {
|
|
885
|
-
const table = new
|
|
935
|
+
const table = new Table_js_1.Table(rows, columns);
|
|
886
936
|
table._setStylesManager(this.stylesManager);
|
|
887
937
|
this.bodyElements.push(table);
|
|
938
|
+
this._emitElementAdded(table, this.bodyElements.length - 1);
|
|
888
939
|
return table;
|
|
889
940
|
}
|
|
890
941
|
createTableFromCSV(csv, delimiter = ',') {
|
|
891
|
-
const table =
|
|
942
|
+
const table = Table_js_1.Table.fromCSV(csv, delimiter);
|
|
892
943
|
table._setStylesManager(this.stylesManager);
|
|
893
944
|
this.bodyElements.push(table);
|
|
945
|
+
this._emitElementAdded(table, this.bodyElements.length - 1);
|
|
894
946
|
return table;
|
|
895
947
|
}
|
|
896
948
|
getTables() {
|
|
897
|
-
return this.bodyElements.filter((el) => el instanceof
|
|
949
|
+
return this.bodyElements.filter((el) => el instanceof Table_js_1.Table);
|
|
898
950
|
}
|
|
899
951
|
walkElements(visitor) {
|
|
900
952
|
const walk = (elements) => {
|
|
901
953
|
for (const element of elements) {
|
|
902
|
-
if (element instanceof
|
|
954
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
903
955
|
visitor(element);
|
|
904
956
|
}
|
|
905
|
-
else if (element instanceof
|
|
957
|
+
else if (element instanceof Table_js_1.Table) {
|
|
906
958
|
visitor(element);
|
|
907
959
|
for (const row of element.getRows()) {
|
|
908
960
|
for (const cell of row.getCells()) {
|
|
@@ -912,7 +964,7 @@ class Document {
|
|
|
912
964
|
}
|
|
913
965
|
}
|
|
914
966
|
}
|
|
915
|
-
else if (element instanceof
|
|
967
|
+
else if (element instanceof StructuredDocumentTag_js_1.StructuredDocumentTag) {
|
|
916
968
|
visitor(element);
|
|
917
969
|
walk(element.getContent());
|
|
918
970
|
}
|
|
@@ -923,58 +975,99 @@ class Document {
|
|
|
923
975
|
getAllParagraphs() {
|
|
924
976
|
const result = [];
|
|
925
977
|
this.walkElements((element) => {
|
|
926
|
-
if (element instanceof
|
|
978
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
927
979
|
result.push(element);
|
|
928
980
|
}
|
|
929
981
|
});
|
|
930
982
|
return result;
|
|
931
983
|
}
|
|
984
|
+
*iterateParagraphs() {
|
|
985
|
+
yield* Document.walkParagraphs(this.bodyElements);
|
|
986
|
+
}
|
|
987
|
+
static *walkParagraphs(elements) {
|
|
988
|
+
for (const element of elements) {
|
|
989
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
990
|
+
yield element;
|
|
991
|
+
}
|
|
992
|
+
else if (element instanceof Table_js_1.Table) {
|
|
993
|
+
for (const row of element.getRows()) {
|
|
994
|
+
for (const cell of row.getCells()) {
|
|
995
|
+
for (const cellPara of cell.getParagraphs()) {
|
|
996
|
+
yield cellPara;
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
else if (element instanceof StructuredDocumentTag_js_1.StructuredDocumentTag) {
|
|
1002
|
+
yield* Document.walkParagraphs(element.getContent());
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
*iterateBodyElements() {
|
|
1007
|
+
for (const element of this.bodyElements) {
|
|
1008
|
+
yield element;
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
*iterateSections() {
|
|
1012
|
+
let current = [];
|
|
1013
|
+
for (const element of this.bodyElements) {
|
|
1014
|
+
current.push(element);
|
|
1015
|
+
if (element instanceof Paragraph_js_1.Paragraph && element.formatting.sectPr) {
|
|
1016
|
+
yield { sectPr: element.formatting.sectPr, elements: current };
|
|
1017
|
+
current = [];
|
|
1018
|
+
}
|
|
1019
|
+
}
|
|
1020
|
+
if (current.length > 0) {
|
|
1021
|
+
yield { sectPr: this.section ?? null, elements: current };
|
|
1022
|
+
}
|
|
1023
|
+
}
|
|
932
1024
|
getParagraphs() {
|
|
933
1025
|
return this.getAllParagraphs();
|
|
934
1026
|
}
|
|
935
1027
|
getParagraphAt(index) {
|
|
936
|
-
const paragraphs = this.bodyElements.filter((el) => el instanceof
|
|
1028
|
+
const paragraphs = this.bodyElements.filter((el) => el instanceof Paragraph_js_1.Paragraph);
|
|
937
1029
|
return paragraphs[index];
|
|
938
1030
|
}
|
|
939
1031
|
getTableAt(index) {
|
|
940
|
-
const tables = this.bodyElements.filter((el) => el instanceof
|
|
1032
|
+
const tables = this.bodyElements.filter((el) => el instanceof Table_js_1.Table);
|
|
941
1033
|
return tables[index];
|
|
942
1034
|
}
|
|
943
1035
|
getBodyElementAt(index) {
|
|
944
1036
|
return this.bodyElements[index];
|
|
945
1037
|
}
|
|
946
1038
|
getParagraphIndex(paragraph) {
|
|
947
|
-
const paragraphs = this.bodyElements.filter((el) => el instanceof
|
|
1039
|
+
const paragraphs = this.bodyElements.filter((el) => el instanceof Paragraph_js_1.Paragraph);
|
|
948
1040
|
return paragraphs.indexOf(paragraph);
|
|
949
1041
|
}
|
|
950
1042
|
getTableIndex(table) {
|
|
951
|
-
const tables = this.bodyElements.filter((el) => el instanceof
|
|
1043
|
+
const tables = this.bodyElements.filter((el) => el instanceof Table_js_1.Table);
|
|
952
1044
|
return tables.indexOf(table);
|
|
953
1045
|
}
|
|
954
1046
|
getNextParagraph(paragraph) {
|
|
955
|
-
const paragraphs = this.bodyElements.filter((el) => el instanceof
|
|
1047
|
+
const paragraphs = this.bodyElements.filter((el) => el instanceof Paragraph_js_1.Paragraph);
|
|
956
1048
|
const index = paragraphs.indexOf(paragraph);
|
|
957
1049
|
return index >= 0 && index < paragraphs.length - 1 ? paragraphs[index + 1] : undefined;
|
|
958
1050
|
}
|
|
959
1051
|
getPreviousParagraph(paragraph) {
|
|
960
|
-
const paragraphs = this.bodyElements.filter((el) => el instanceof
|
|
1052
|
+
const paragraphs = this.bodyElements.filter((el) => el instanceof Paragraph_js_1.Paragraph);
|
|
961
1053
|
const index = paragraphs.indexOf(paragraph);
|
|
962
1054
|
return index > 0 ? paragraphs[index - 1] : undefined;
|
|
963
1055
|
}
|
|
964
1056
|
getAllTables() {
|
|
965
1057
|
const result = [];
|
|
966
1058
|
this.walkElements((element) => {
|
|
967
|
-
if (element instanceof
|
|
1059
|
+
if (element instanceof Table_js_1.Table) {
|
|
968
1060
|
result.push(element);
|
|
969
1061
|
}
|
|
970
1062
|
});
|
|
971
1063
|
return result;
|
|
972
1064
|
}
|
|
973
1065
|
getTableOfContentsElements() {
|
|
974
|
-
return this.bodyElements.filter((el) => el instanceof
|
|
1066
|
+
return this.bodyElements.filter((el) => el instanceof TableOfContentsElement_js_1.TableOfContentsElement);
|
|
975
1067
|
}
|
|
976
1068
|
addBodyElement(element) {
|
|
977
1069
|
this.bodyElements.push(element);
|
|
1070
|
+
this._emitElementAdded(element, this.bodyElements.length - 1);
|
|
978
1071
|
return this;
|
|
979
1072
|
}
|
|
980
1073
|
getBodyElements() {
|
|
@@ -991,7 +1084,7 @@ class Document {
|
|
|
991
1084
|
return this;
|
|
992
1085
|
}
|
|
993
1086
|
setProperties(properties) {
|
|
994
|
-
const validated =
|
|
1087
|
+
const validated = DocumentValidator_js_1.DocumentValidator.validateProperties(properties);
|
|
995
1088
|
this.properties = { ...this.properties, ...validated };
|
|
996
1089
|
return this;
|
|
997
1090
|
}
|
|
@@ -1126,8 +1219,17 @@ class Document {
|
|
|
1126
1219
|
this.updateContentTypesWithImagesHeadersFootersAndComments();
|
|
1127
1220
|
}
|
|
1128
1221
|
async save(filePath) {
|
|
1222
|
+
return this.withSaveLock(() => this.saveImpl(filePath));
|
|
1223
|
+
}
|
|
1224
|
+
withSaveLock(operation) {
|
|
1225
|
+
const next = this._saveQueue.then(operation, operation);
|
|
1226
|
+
this._saveQueue = next.catch(() => undefined);
|
|
1227
|
+
return next;
|
|
1228
|
+
}
|
|
1229
|
+
async saveImpl(filePath) {
|
|
1129
1230
|
const logger = getLogger();
|
|
1130
1231
|
logger.info('Saving document', { path: filePath, paragraphs: this.getParagraphCount() });
|
|
1232
|
+
this._events.emit('beforeSave', { filePath });
|
|
1131
1233
|
const tempPath = `${filePath}.tmp.${Date.now()}`;
|
|
1132
1234
|
let saveSucceeded = false;
|
|
1133
1235
|
this.createSaveStateSnapshot();
|
|
@@ -1142,6 +1244,7 @@ class Document {
|
|
|
1142
1244
|
saveSucceeded = true;
|
|
1143
1245
|
this.clearSaveStateSnapshot();
|
|
1144
1246
|
logger.info('Document saved', { path: filePath });
|
|
1247
|
+
this._events.emit('afterSave', { filePath });
|
|
1145
1248
|
}
|
|
1146
1249
|
catch (error) {
|
|
1147
1250
|
this.restoreSaveStateSnapshot();
|
|
@@ -1161,8 +1264,12 @@ class Document {
|
|
|
1161
1264
|
}
|
|
1162
1265
|
}
|
|
1163
1266
|
async toBuffer() {
|
|
1267
|
+
return this.withSaveLock(() => this.toBufferImpl());
|
|
1268
|
+
}
|
|
1269
|
+
async toBufferImpl() {
|
|
1164
1270
|
const logger = getLogger();
|
|
1165
1271
|
logger.info('Generating document buffer', { paragraphs: this.getParagraphCount() });
|
|
1272
|
+
this._events.emit('beforeSave', {});
|
|
1166
1273
|
let generateSucceeded = false;
|
|
1167
1274
|
this.createSaveStateSnapshot();
|
|
1168
1275
|
try {
|
|
@@ -1180,6 +1287,7 @@ class Document {
|
|
|
1180
1287
|
generateSucceeded = true;
|
|
1181
1288
|
this.clearSaveStateSnapshot();
|
|
1182
1289
|
logger.info('Document buffer generated', { bufferSize: buffer.length });
|
|
1290
|
+
this._events.emit('afterSave', { bufferSize: buffer.length });
|
|
1183
1291
|
return buffer;
|
|
1184
1292
|
}
|
|
1185
1293
|
catch (error) {
|
|
@@ -1211,7 +1319,7 @@ class Document {
|
|
|
1211
1319
|
updateDocumentXml() {
|
|
1212
1320
|
let xml = this.generator.generateDocumentXml(this.bodyElements, this.section, this.namespaces, this._documentBackground);
|
|
1213
1321
|
xml = this.syncTOCFieldInstructions(xml);
|
|
1214
|
-
this.zipHandler.updateFile(
|
|
1322
|
+
this.zipHandler.updateFile(types_js_1.DOCX_PATHS.DOCUMENT, xml);
|
|
1215
1323
|
}
|
|
1216
1324
|
_postProcessDocumentXml() {
|
|
1217
1325
|
if (!this._flattenIncludePictureFields &&
|
|
@@ -1219,7 +1327,7 @@ class Document {
|
|
|
1219
1327
|
!this._clearDirectSpacingStyles) {
|
|
1220
1328
|
return;
|
|
1221
1329
|
}
|
|
1222
|
-
let docXml = this.zipHandler.getFileAsString(
|
|
1330
|
+
let docXml = this.zipHandler.getFileAsString(types_js_1.DOCX_PATHS.DOCUMENT);
|
|
1223
1331
|
if (!docXml) {
|
|
1224
1332
|
return;
|
|
1225
1333
|
}
|
|
@@ -1235,7 +1343,7 @@ class Document {
|
|
|
1235
1343
|
docXml = this._clearDirectSpacingFromStyledParagraphs(docXml, this._clearDirectSpacingStyles);
|
|
1236
1344
|
this._clearDirectSpacingStyles = null;
|
|
1237
1345
|
}
|
|
1238
|
-
this.zipHandler.updateFile(
|
|
1346
|
+
this.zipHandler.updateFile(types_js_1.DOCX_PATHS.DOCUMENT, docXml);
|
|
1239
1347
|
}
|
|
1240
1348
|
_flattenIncludePictureFieldsInXml(xml) {
|
|
1241
1349
|
const fieldTokens = [];
|
|
@@ -1459,25 +1567,25 @@ class Document {
|
|
|
1459
1567
|
}
|
|
1460
1568
|
}
|
|
1461
1569
|
updateCoreProps() {
|
|
1462
|
-
if (this._removedParts.has(
|
|
1570
|
+
if (this._removedParts.has(types_js_1.DOCX_PATHS.CORE_PROPS) ||
|
|
1463
1571
|
this._removedParts.has('docProps/core.xml'))
|
|
1464
1572
|
return;
|
|
1465
1573
|
const xml = this.generator.generateCoreProps(this.properties);
|
|
1466
|
-
this.zipHandler.updateFile(
|
|
1574
|
+
this.zipHandler.updateFile(types_js_1.DOCX_PATHS.CORE_PROPS, xml);
|
|
1467
1575
|
}
|
|
1468
1576
|
updateAppProps() {
|
|
1469
|
-
if (this._removedParts.has(
|
|
1577
|
+
if (this._removedParts.has(types_js_1.DOCX_PATHS.APP_PROPS) || this._removedParts.has('docProps/app.xml'))
|
|
1470
1578
|
return;
|
|
1471
1579
|
if (this._originalAppPropsXml && !this._appPropsModified) {
|
|
1472
1580
|
return;
|
|
1473
1581
|
}
|
|
1474
1582
|
if (this._originalAppPropsXml && this._appPropsModified) {
|
|
1475
1583
|
const mergedXml = this.mergeAppPropsWithOriginal();
|
|
1476
|
-
this.zipHandler.updateFile(
|
|
1584
|
+
this.zipHandler.updateFile(types_js_1.DOCX_PATHS.APP_PROPS, mergedXml);
|
|
1477
1585
|
}
|
|
1478
1586
|
else {
|
|
1479
1587
|
const xml = this.generator.generateAppProps(this.properties);
|
|
1480
|
-
this.zipHandler.updateFile(
|
|
1588
|
+
this.zipHandler.updateFile(types_js_1.DOCX_PATHS.APP_PROPS, xml);
|
|
1481
1589
|
}
|
|
1482
1590
|
}
|
|
1483
1591
|
mergeAppPropsWithOriginal() {
|
|
@@ -1486,7 +1594,7 @@ class Document {
|
|
|
1486
1594
|
}
|
|
1487
1595
|
let xml = this._originalAppPropsXml;
|
|
1488
1596
|
if (this.properties.company !== undefined) {
|
|
1489
|
-
const escaped =
|
|
1597
|
+
const escaped = XMLBuilder_js_1.XMLBuilder.sanitizeXmlContent(this.properties.company);
|
|
1490
1598
|
if (xml.includes('<Company>')) {
|
|
1491
1599
|
xml = xml.replace(/<Company>[^<]*<\/Company>/, `<Company>${escaped}</Company>`);
|
|
1492
1600
|
}
|
|
@@ -1495,19 +1603,19 @@ class Document {
|
|
|
1495
1603
|
}
|
|
1496
1604
|
}
|
|
1497
1605
|
if (this.properties.application !== undefined) {
|
|
1498
|
-
const escaped =
|
|
1606
|
+
const escaped = XMLBuilder_js_1.XMLBuilder.sanitizeXmlContent(this.properties.application);
|
|
1499
1607
|
if (xml.includes('<Application>')) {
|
|
1500
1608
|
xml = xml.replace(/<Application>[^<]*<\/Application>/, `<Application>${escaped}</Application>`);
|
|
1501
1609
|
}
|
|
1502
1610
|
}
|
|
1503
1611
|
if (this.properties.appVersion !== undefined) {
|
|
1504
|
-
const escaped =
|
|
1612
|
+
const escaped = XMLBuilder_js_1.XMLBuilder.sanitizeXmlContent(this.properties.appVersion);
|
|
1505
1613
|
if (xml.includes('<AppVersion>')) {
|
|
1506
1614
|
xml = xml.replace(/<AppVersion>[^<]*<\/AppVersion>/, `<AppVersion>${escaped}</AppVersion>`);
|
|
1507
1615
|
}
|
|
1508
1616
|
}
|
|
1509
1617
|
if (this.properties.manager !== undefined) {
|
|
1510
|
-
const escaped =
|
|
1618
|
+
const escaped = XMLBuilder_js_1.XMLBuilder.sanitizeXmlContent(this.properties.manager);
|
|
1511
1619
|
if (xml.includes('<Manager>')) {
|
|
1512
1620
|
xml = xml.replace(/<Manager>[^<]*<\/Manager>/, `<Manager>${escaped}</Manager>`);
|
|
1513
1621
|
}
|
|
@@ -1534,10 +1642,10 @@ class Document {
|
|
|
1534
1642
|
return;
|
|
1535
1643
|
}
|
|
1536
1644
|
if (this._originalWebSettingsXml) {
|
|
1537
|
-
this.zipHandler.updateFile(
|
|
1645
|
+
this.zipHandler.updateFile(types_js_1.DOCX_PATHS.WEB_SETTINGS, this._originalWebSettingsXml);
|
|
1538
1646
|
}
|
|
1539
1647
|
else {
|
|
1540
|
-
this.zipHandler.updateFile(
|
|
1648
|
+
this.zipHandler.updateFile(types_js_1.DOCX_PATHS.WEB_SETTINGS, this.generator.generateWebSettings(this._webSettings));
|
|
1541
1649
|
}
|
|
1542
1650
|
}
|
|
1543
1651
|
getWebSettingsInfo() {
|
|
@@ -1555,14 +1663,34 @@ class Document {
|
|
|
1555
1663
|
if (!this._originalWebSettingsXml) {
|
|
1556
1664
|
return 0;
|
|
1557
1665
|
}
|
|
1558
|
-
const
|
|
1666
|
+
const original = this._originalWebSettingsXml;
|
|
1667
|
+
const matches = original.match(/<w:div\b/g);
|
|
1559
1668
|
const count = matches ? matches.length : 0;
|
|
1560
1669
|
if (count === 0) {
|
|
1561
1670
|
return 0;
|
|
1562
1671
|
}
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1672
|
+
try {
|
|
1673
|
+
const mutated = original.replace(/<w:divs>[\s\S]*?<\/w:divs>/g, '');
|
|
1674
|
+
if (!Document.isWellFormedXml(mutated)) {
|
|
1675
|
+
getLogger().warn('stripWebDivs produced malformed XML; reverting');
|
|
1676
|
+
return 0;
|
|
1677
|
+
}
|
|
1678
|
+
this._originalWebSettingsXml = mutated;
|
|
1679
|
+
this._webSettingsModified = true;
|
|
1680
|
+
return count;
|
|
1681
|
+
}
|
|
1682
|
+
catch (err) {
|
|
1683
|
+
getLogger().warn('stripWebDivs failed; reverting', { error: String(err) });
|
|
1684
|
+
this._originalWebSettingsXml = original;
|
|
1685
|
+
return 0;
|
|
1686
|
+
}
|
|
1687
|
+
}
|
|
1688
|
+
static isWellFormedXml(xml) {
|
|
1689
|
+
if (xml.length === 0)
|
|
1690
|
+
return true;
|
|
1691
|
+
const openTags = xml.match(/<([a-zA-Z_][^\s/>]*)\b[^>]*[^/]>/g) || [];
|
|
1692
|
+
const closeTags = xml.match(/<\/([a-zA-Z_][^\s>]*)\s*>/g) || [];
|
|
1693
|
+
return openTags.length === closeTags.length;
|
|
1566
1694
|
}
|
|
1567
1695
|
sanitizeWebSettings() {
|
|
1568
1696
|
let divCount = 0;
|
|
@@ -1604,11 +1732,11 @@ class Document {
|
|
|
1604
1732
|
updateStylesXml() {
|
|
1605
1733
|
if (this._originalStylesXml) {
|
|
1606
1734
|
const mergedXml = this.mergeStylesWithOriginal();
|
|
1607
|
-
this.zipHandler.updateFile(
|
|
1735
|
+
this.zipHandler.updateFile(types_js_1.DOCX_PATHS.STYLES, mergedXml);
|
|
1608
1736
|
}
|
|
1609
1737
|
else {
|
|
1610
1738
|
const xml = this.stylesManager.generateStylesXml();
|
|
1611
|
-
this.zipHandler.updateFile(
|
|
1739
|
+
this.zipHandler.updateFile(types_js_1.DOCX_PATHS.STYLES, xml);
|
|
1612
1740
|
}
|
|
1613
1741
|
}
|
|
1614
1742
|
mergeStylesWithOriginal() {
|
|
@@ -1628,7 +1756,7 @@ class Document {
|
|
|
1628
1756
|
}
|
|
1629
1757
|
let resultXml = this._originalStylesXml;
|
|
1630
1758
|
for (const [styleId, style] of modifiedStyles) {
|
|
1631
|
-
const newStyleXml =
|
|
1759
|
+
const newStyleXml = XMLBuilder_js_1.XMLBuilder.elementToString(style.toXML());
|
|
1632
1760
|
const escapedStyleId = styleId.replace(/[.*+?^${}()|[\]\\"]/g, '\\$&');
|
|
1633
1761
|
const stylePattern = new RegExp(`<w:style[^>]*\\sw:styleId="${escapedStyleId}"[^>]*>[\\s\\S]*?</w:style>`);
|
|
1634
1762
|
if (stylePattern.test(resultXml)) {
|
|
@@ -1642,20 +1770,20 @@ class Document {
|
|
|
1642
1770
|
}
|
|
1643
1771
|
updateNumberingXml() {
|
|
1644
1772
|
if (this._originalNumberingXml && !this.numberingManager.isModified()) {
|
|
1645
|
-
this.zipHandler.updateFile(
|
|
1773
|
+
this.zipHandler.updateFile(types_js_1.DOCX_PATHS.NUMBERING, this._originalNumberingXml);
|
|
1646
1774
|
}
|
|
1647
1775
|
else if (this._originalNumberingXml) {
|
|
1648
1776
|
const mergedXml = this.mergeNumberingWithOriginal();
|
|
1649
|
-
this.zipHandler.updateFile(
|
|
1777
|
+
this.zipHandler.updateFile(types_js_1.DOCX_PATHS.NUMBERING, mergedXml);
|
|
1650
1778
|
this.cleanupNumberingRels(mergedXml);
|
|
1651
1779
|
}
|
|
1652
1780
|
else {
|
|
1653
1781
|
const xml = this.numberingManager.generateNumberingXml();
|
|
1654
|
-
this.zipHandler.updateFile(
|
|
1782
|
+
this.zipHandler.updateFile(types_js_1.DOCX_PATHS.NUMBERING, xml);
|
|
1655
1783
|
}
|
|
1656
1784
|
}
|
|
1657
1785
|
cleanupNumberingRels(mergedXml) {
|
|
1658
|
-
const relsXml = this.zipHandler.getFileAsString(
|
|
1786
|
+
const relsXml = this.zipHandler.getFileAsString(types_js_1.DOCX_PATHS.NUMBERING_RELS);
|
|
1659
1787
|
if (!relsXml)
|
|
1660
1788
|
return;
|
|
1661
1789
|
const usedRIds = new Set();
|
|
@@ -1679,10 +1807,10 @@ class Document {
|
|
|
1679
1807
|
}
|
|
1680
1808
|
if (entriesToRemove.length > 0) {
|
|
1681
1809
|
if (!/<Relationship\s/.test(cleanedRels)) {
|
|
1682
|
-
this.zipHandler.removeFile(
|
|
1810
|
+
this.zipHandler.removeFile(types_js_1.DOCX_PATHS.NUMBERING_RELS);
|
|
1683
1811
|
}
|
|
1684
1812
|
else {
|
|
1685
|
-
this.zipHandler.updateFile(
|
|
1813
|
+
this.zipHandler.updateFile(types_js_1.DOCX_PATHS.NUMBERING_RELS, cleanedRels);
|
|
1686
1814
|
}
|
|
1687
1815
|
this.logger.info(`Removed ${entriesToRemove.length} orphaned numbering relationship(s)`);
|
|
1688
1816
|
}
|
|
@@ -1706,7 +1834,7 @@ class Document {
|
|
|
1706
1834
|
const abstractNum = this.numberingManager.getAbstractNumbering(abstractNumId);
|
|
1707
1835
|
if (!abstractNum)
|
|
1708
1836
|
continue;
|
|
1709
|
-
const newXml =
|
|
1837
|
+
const newXml = XMLBuilder_js_1.XMLBuilder.elementToString(abstractNum.toXML());
|
|
1710
1838
|
const escapedId = String(abstractNumId).replace(/[.*+?^${}()|[\]\\"]/g, '\\$&');
|
|
1711
1839
|
const pattern = new RegExp(`<w:abstractNum[^>]*\\sw:abstractNumId="${escapedId}"[^>]*>[\\s\\S]*?</w:abstractNum>`);
|
|
1712
1840
|
if (pattern.test(resultXml)) {
|
|
@@ -1726,7 +1854,7 @@ class Document {
|
|
|
1726
1854
|
const instance = this.numberingManager.getInstance(numId);
|
|
1727
1855
|
if (!instance)
|
|
1728
1856
|
continue;
|
|
1729
|
-
const newXml =
|
|
1857
|
+
const newXml = XMLBuilder_js_1.XMLBuilder.elementToString(instance.toXML());
|
|
1730
1858
|
const escapedNumId = String(numId).replace(/[.*+?^${}()|[\]\\"]/g, '\\$&');
|
|
1731
1859
|
const pattern = new RegExp(`<w:num\\b[^>]*\\sw:numId="${escapedNumId}"[^>]*>[\\s\\S]*?</w:num>`);
|
|
1732
1860
|
if (pattern.test(resultXml)) {
|
|
@@ -1784,7 +1912,7 @@ class Document {
|
|
|
1784
1912
|
}
|
|
1785
1913
|
updateSettingsXml() {
|
|
1786
1914
|
const xml = this.mergeSettingsWithOriginal();
|
|
1787
|
-
this.zipHandler.updateFile(
|
|
1915
|
+
this.zipHandler.updateFile(types_js_1.DOCX_PATHS.SETTINGS, xml);
|
|
1788
1916
|
}
|
|
1789
1917
|
mergeSettingsWithOriginal() {
|
|
1790
1918
|
if (!this._originalSettingsXml) {
|
|
@@ -1819,7 +1947,7 @@ class Document {
|
|
|
1819
1947
|
return xml;
|
|
1820
1948
|
}
|
|
1821
1949
|
xml = xml.replace(/<w:view\b[^>]*\/?>\s*/g, '');
|
|
1822
|
-
const viewXml = `<w:view w:val="${
|
|
1950
|
+
const viewXml = `<w:view w:val="${XMLBuilder_js_1.XMLBuilder.escapeXmlAttribute(this._documentView)}"/>`;
|
|
1823
1951
|
xml = xml.replace(/(<w:settings\b[^>]*>)/, `$1\n ${viewXml}`);
|
|
1824
1952
|
return xml;
|
|
1825
1953
|
}
|
|
@@ -1871,7 +1999,7 @@ class Document {
|
|
|
1871
1999
|
return xml;
|
|
1872
2000
|
}
|
|
1873
2001
|
const prot = this.documentProtection;
|
|
1874
|
-
const esc =
|
|
2002
|
+
const esc = XMLBuilder_js_1.XMLBuilder.escapeXmlAttribute;
|
|
1875
2003
|
let protXml = `\n <w:documentProtection w:edit="${esc(prot.edit)}" w:enforcement="${prot.enforcement ? '1' : '0'}"`;
|
|
1876
2004
|
if (prot.cryptProviderType)
|
|
1877
2005
|
protXml += ` w:cryptProviderType="${esc(prot.cryptProviderType)}"`;
|
|
@@ -1904,7 +2032,7 @@ class Document {
|
|
|
1904
2032
|
if (this.rsids.size === 0) {
|
|
1905
2033
|
return xml;
|
|
1906
2034
|
}
|
|
1907
|
-
const esc =
|
|
2035
|
+
const esc = XMLBuilder_js_1.XMLBuilder.escapeXmlAttribute;
|
|
1908
2036
|
let rsidsXml = '\n <w:rsids>';
|
|
1909
2037
|
if (this.rsidRoot) {
|
|
1910
2038
|
rsidsXml += `\n <w:rsidRoot w:val="${esc(this.rsidRoot)}"/>`;
|
|
@@ -2019,7 +2147,7 @@ class Document {
|
|
|
2019
2147
|
const cell = tableRow.getCell(col);
|
|
2020
2148
|
if (!cell)
|
|
2021
2149
|
return undefined;
|
|
2022
|
-
return (0,
|
|
2150
|
+
return (0, ShadingResolver_js_1.resolveCellShading)(cell, table, this.stylesManager);
|
|
2023
2151
|
}
|
|
2024
2152
|
addStyle(style) {
|
|
2025
2153
|
this.stylesManager.addStyle(style);
|
|
@@ -2070,7 +2198,7 @@ class Document {
|
|
|
2070
2198
|
? { ...currentProps.runFormatting, ...properties.runFormatting }
|
|
2071
2199
|
: currentProps.runFormatting,
|
|
2072
2200
|
};
|
|
2073
|
-
const updatedStyle =
|
|
2201
|
+
const updatedStyle = Style_js_1.Style.create(updatedProps);
|
|
2074
2202
|
this.stylesManager.addStyle(updatedStyle);
|
|
2075
2203
|
return true;
|
|
2076
2204
|
}
|
|
@@ -2078,7 +2206,7 @@ class Document {
|
|
|
2078
2206
|
let count = 0;
|
|
2079
2207
|
for (const element of this.bodyElements) {
|
|
2080
2208
|
if (predicate(element)) {
|
|
2081
|
-
if (element instanceof
|
|
2209
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
2082
2210
|
element.setStyle(styleId);
|
|
2083
2211
|
count++;
|
|
2084
2212
|
}
|
|
@@ -2101,7 +2229,7 @@ class Document {
|
|
|
2101
2229
|
findElementsByStyle(styleId) {
|
|
2102
2230
|
const results = [];
|
|
2103
2231
|
for (const element of this.bodyElements) {
|
|
2104
|
-
if (element instanceof
|
|
2232
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
2105
2233
|
const formatting = element.getFormatting();
|
|
2106
2234
|
if (formatting.style === styleId) {
|
|
2107
2235
|
results.push(element);
|
|
@@ -2131,7 +2259,7 @@ class Document {
|
|
|
2131
2259
|
applyStyleToAllParagraphsWithStyle(currentStyleId, newStyleId) {
|
|
2132
2260
|
let count = 0;
|
|
2133
2261
|
for (const element of this.bodyElements) {
|
|
2134
|
-
if (element instanceof
|
|
2262
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
2135
2263
|
const formatting = element.getFormatting();
|
|
2136
2264
|
if (formatting.style === currentStyleId) {
|
|
2137
2265
|
element.setStyle(newStyleId);
|
|
@@ -2173,7 +2301,7 @@ class Document {
|
|
|
2173
2301
|
count++;
|
|
2174
2302
|
};
|
|
2175
2303
|
for (const element of this.bodyElements) {
|
|
2176
|
-
if (element instanceof
|
|
2304
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
2177
2305
|
applyToParagraph(element);
|
|
2178
2306
|
}
|
|
2179
2307
|
}
|
|
@@ -2248,7 +2376,7 @@ class Document {
|
|
|
2248
2376
|
if (paragraphs.length > 0) {
|
|
2249
2377
|
const firstPara = paragraphs[0];
|
|
2250
2378
|
if (firstPara) {
|
|
2251
|
-
const bookmark = new
|
|
2379
|
+
const bookmark = new Bookmark_js_1.Bookmark({ name: '_top' });
|
|
2252
2380
|
const registered = this.bookmarkManager.register(bookmark);
|
|
2253
2381
|
firstPara.addBookmark(registered);
|
|
2254
2382
|
}
|
|
@@ -2463,7 +2591,7 @@ class Document {
|
|
|
2463
2591
|
for (const paragraph of this.getAllParagraphs()) {
|
|
2464
2592
|
const content = paragraph.getContent();
|
|
2465
2593
|
for (const item of content) {
|
|
2466
|
-
if (item instanceof
|
|
2594
|
+
if (item instanceof ImageRun_js_1.ImageRun) {
|
|
2467
2595
|
const image = item.getImageElement();
|
|
2468
2596
|
const relId = image.getRelationshipId();
|
|
2469
2597
|
if (relId && largeImageIds.has(relId)) {
|
|
@@ -2481,7 +2609,7 @@ class Document {
|
|
|
2481
2609
|
let count = 0;
|
|
2482
2610
|
const minEmus = Math.round(minPixels * 9525);
|
|
2483
2611
|
const processImageRun = (item) => {
|
|
2484
|
-
if (item instanceof
|
|
2612
|
+
if (item instanceof ImageRun_js_1.ImageRun) {
|
|
2485
2613
|
const image = item.getImageElement();
|
|
2486
2614
|
const width = image.getWidth();
|
|
2487
2615
|
const height = image.getHeight();
|
|
@@ -2509,7 +2637,7 @@ class Document {
|
|
|
2509
2637
|
if (processImageRun(item)) {
|
|
2510
2638
|
hasLargeImage = true;
|
|
2511
2639
|
}
|
|
2512
|
-
else if (item instanceof
|
|
2640
|
+
else if (item instanceof Revision_js_1.Revision) {
|
|
2513
2641
|
if (processRevision(item)) {
|
|
2514
2642
|
hasLargeImage = true;
|
|
2515
2643
|
}
|
|
@@ -2606,12 +2734,12 @@ class Document {
|
|
|
2606
2734
|
const paragraphs = this.getAllParagraphs();
|
|
2607
2735
|
this.collectNumIdsFromParagraphs(paragraphs, usedNumIds);
|
|
2608
2736
|
for (const element of this.bodyElements) {
|
|
2609
|
-
if (element instanceof
|
|
2737
|
+
if (element instanceof Table_js_1.Table) {
|
|
2610
2738
|
this.collectNumIdsFromTable(element, usedNumIds);
|
|
2611
2739
|
}
|
|
2612
|
-
else if (element instanceof
|
|
2740
|
+
else if (element instanceof StructuredDocumentTag_js_1.StructuredDocumentTag) {
|
|
2613
2741
|
for (const content of element.getContent()) {
|
|
2614
|
-
if (content instanceof
|
|
2742
|
+
if (content instanceof Table_js_1.Table) {
|
|
2615
2743
|
this.collectNumIdsFromTable(content, usedNumIds);
|
|
2616
2744
|
}
|
|
2617
2745
|
}
|
|
@@ -2632,8 +2760,8 @@ class Document {
|
|
|
2632
2760
|
for (const filePath of this.zipHandler.getFilePaths()) {
|
|
2633
2761
|
if (filePath.startsWith('word/header') ||
|
|
2634
2762
|
filePath.startsWith('word/footer') ||
|
|
2635
|
-
filePath ===
|
|
2636
|
-
filePath ===
|
|
2763
|
+
filePath === types_js_1.DOCX_PATHS.FOOTNOTES ||
|
|
2764
|
+
filePath === types_js_1.DOCX_PATHS.ENDNOTES) {
|
|
2637
2765
|
const xml = this.zipHandler.getFileAsString(filePath);
|
|
2638
2766
|
if (xml) {
|
|
2639
2767
|
this.collectNumIdsFromXml(xml, usedNumIds);
|
|
@@ -2696,18 +2824,18 @@ class Document {
|
|
|
2696
2824
|
}
|
|
2697
2825
|
};
|
|
2698
2826
|
for (const element of this.bodyElements) {
|
|
2699
|
-
if (element instanceof
|
|
2827
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
2700
2828
|
collectFromParagraph(element);
|
|
2701
2829
|
}
|
|
2702
|
-
else if (element instanceof
|
|
2830
|
+
else if (element instanceof Table_js_1.Table) {
|
|
2703
2831
|
collectFromTable(element);
|
|
2704
2832
|
}
|
|
2705
|
-
else if (element instanceof
|
|
2833
|
+
else if (element instanceof StructuredDocumentTag_js_1.StructuredDocumentTag) {
|
|
2706
2834
|
for (const content of element.getContent()) {
|
|
2707
|
-
if (content instanceof
|
|
2835
|
+
if (content instanceof Paragraph_js_1.Paragraph) {
|
|
2708
2836
|
collectFromParagraph(content);
|
|
2709
2837
|
}
|
|
2710
|
-
else if (content instanceof
|
|
2838
|
+
else if (content instanceof Table_js_1.Table) {
|
|
2711
2839
|
collectFromTable(content);
|
|
2712
2840
|
}
|
|
2713
2841
|
}
|
|
@@ -2718,7 +2846,7 @@ class Document {
|
|
|
2718
2846
|
if (!endIds.has(id)) {
|
|
2719
2847
|
const lastPara = this.getLastParagraph();
|
|
2720
2848
|
if (lastPara) {
|
|
2721
|
-
lastPara.addBookmarkEnd(new
|
|
2849
|
+
lastPara.addBookmarkEnd(new Bookmark_js_1.Bookmark({ id, name: `_repair_${id}`, skipNormalization: true }));
|
|
2722
2850
|
this.logger.warn(`Bookmark validation: added missing bookmarkEnd for ID ${id}`);
|
|
2723
2851
|
repairs++;
|
|
2724
2852
|
}
|
|
@@ -2764,13 +2892,13 @@ class Document {
|
|
|
2764
2892
|
}
|
|
2765
2893
|
}
|
|
2766
2894
|
for (const item of para.getContent()) {
|
|
2767
|
-
if (item instanceof
|
|
2895
|
+
if (item instanceof Shape_js_1.Shape) {
|
|
2768
2896
|
item.setDocPrId(docPrId++);
|
|
2769
2897
|
}
|
|
2770
|
-
else if (item instanceof
|
|
2898
|
+
else if (item instanceof TextBox_js_1.TextBox) {
|
|
2771
2899
|
item.setDocPrId(docPrId++);
|
|
2772
2900
|
}
|
|
2773
|
-
else if (item instanceof
|
|
2901
|
+
else if (item instanceof ImageRun_js_1.ImageRun) {
|
|
2774
2902
|
item.getImageElement().setDocPrId(docPrId++);
|
|
2775
2903
|
}
|
|
2776
2904
|
}
|
|
@@ -2782,10 +2910,10 @@ class Document {
|
|
|
2782
2910
|
}
|
|
2783
2911
|
};
|
|
2784
2912
|
for (const element of this.bodyElements) {
|
|
2785
|
-
if (element instanceof
|
|
2913
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
2786
2914
|
processParagraph(element);
|
|
2787
2915
|
}
|
|
2788
|
-
else if (element instanceof
|
|
2916
|
+
else if (element instanceof Table_js_1.Table) {
|
|
2789
2917
|
for (const row of element.getRows()) {
|
|
2790
2918
|
for (const cell of row.getCells()) {
|
|
2791
2919
|
for (const para of cell.getParagraphs()) {
|
|
@@ -2805,10 +2933,10 @@ class Document {
|
|
|
2805
2933
|
getLastParagraph() {
|
|
2806
2934
|
for (let i = this.bodyElements.length - 1; i >= 0; i--) {
|
|
2807
2935
|
const element = this.bodyElements[i];
|
|
2808
|
-
if (element instanceof
|
|
2936
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
2809
2937
|
return element;
|
|
2810
2938
|
}
|
|
2811
|
-
if (element instanceof
|
|
2939
|
+
if (element instanceof Table_js_1.Table) {
|
|
2812
2940
|
const para = element.getLastParagraph();
|
|
2813
2941
|
if (para)
|
|
2814
2942
|
return para;
|
|
@@ -2836,18 +2964,18 @@ class Document {
|
|
|
2836
2964
|
}
|
|
2837
2965
|
};
|
|
2838
2966
|
for (const element of this.bodyElements) {
|
|
2839
|
-
if (element instanceof
|
|
2967
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
2840
2968
|
removeFromParagraph(element);
|
|
2841
2969
|
}
|
|
2842
|
-
else if (element instanceof
|
|
2970
|
+
else if (element instanceof Table_js_1.Table) {
|
|
2843
2971
|
removeFromTable(element);
|
|
2844
2972
|
}
|
|
2845
|
-
else if (element instanceof
|
|
2973
|
+
else if (element instanceof StructuredDocumentTag_js_1.StructuredDocumentTag) {
|
|
2846
2974
|
for (const content of element.getContent()) {
|
|
2847
|
-
if (content instanceof
|
|
2975
|
+
if (content instanceof Paragraph_js_1.Paragraph) {
|
|
2848
2976
|
removeFromParagraph(content);
|
|
2849
2977
|
}
|
|
2850
|
-
else if (content instanceof
|
|
2978
|
+
else if (content instanceof Table_js_1.Table) {
|
|
2851
2979
|
removeFromTable(content);
|
|
2852
2980
|
}
|
|
2853
2981
|
}
|
|
@@ -2868,10 +2996,10 @@ class Document {
|
|
|
2868
2996
|
}
|
|
2869
2997
|
collectNumIdsFromElements(elements, usedNumIds) {
|
|
2870
2998
|
for (const element of elements) {
|
|
2871
|
-
if (element instanceof
|
|
2999
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
2872
3000
|
this.collectNumIdsFromParagraphs([element], usedNumIds);
|
|
2873
3001
|
}
|
|
2874
|
-
else if (element instanceof
|
|
3002
|
+
else if (element instanceof Table_js_1.Table) {
|
|
2875
3003
|
for (const row of element.getRows()) {
|
|
2876
3004
|
for (const cell of row.getCells()) {
|
|
2877
3005
|
this.collectNumIdsFromParagraphs(cell.getParagraphs(), usedNumIds);
|
|
@@ -2905,19 +3033,19 @@ class Document {
|
|
|
2905
3033
|
let insertedCount = 0;
|
|
2906
3034
|
for (let i = 0; i < this.bodyElements.length; i++) {
|
|
2907
3035
|
const element = this.bodyElements[i];
|
|
2908
|
-
if (element instanceof
|
|
3036
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
2909
3037
|
const numbering = element.getNumbering();
|
|
2910
3038
|
if (numbering) {
|
|
2911
3039
|
const nextElement = this.bodyElements[i + 1];
|
|
2912
3040
|
const isListEnd = !nextElement ||
|
|
2913
|
-
!(nextElement instanceof
|
|
3041
|
+
!(nextElement instanceof Paragraph_js_1.Paragraph) ||
|
|
2914
3042
|
nextElement.getNumbering()?.numId !== numbering.numId;
|
|
2915
3043
|
if (isListEnd) {
|
|
2916
|
-
const alreadyHasBlank = nextElement instanceof
|
|
3044
|
+
const alreadyHasBlank = nextElement instanceof Paragraph_js_1.Paragraph &&
|
|
2917
3045
|
nextElement.getText().trim() === '' &&
|
|
2918
3046
|
nextElement.getContent().length === 0;
|
|
2919
3047
|
if (!alreadyHasBlank) {
|
|
2920
|
-
const blankPara = new
|
|
3048
|
+
const blankPara = new Paragraph_js_1.Paragraph();
|
|
2921
3049
|
blankPara.setStyle('Normal');
|
|
2922
3050
|
this.bodyElements.splice(i + 1, 0, blankPara);
|
|
2923
3051
|
insertedCount++;
|
|
@@ -2955,7 +3083,7 @@ class Document {
|
|
|
2955
3083
|
sectionProps.titlePage = false;
|
|
2956
3084
|
}
|
|
2957
3085
|
for (const element of this.bodyElements) {
|
|
2958
|
-
if (element instanceof
|
|
3086
|
+
if (element instanceof Paragraph_js_1.Paragraph && typeof element.formatting.sectPr === 'string') {
|
|
2959
3087
|
let sectPrXml = element.formatting.sectPr;
|
|
2960
3088
|
sectPrXml = sectPrXml.replace(/<w:headerReference[^/]*\/>/g, '');
|
|
2961
3089
|
sectPrXml = sectPrXml.replace(/<w:headerReference[^>]*>[\s\S]*?<\/w:headerReference>/g, '');
|
|
@@ -2981,11 +3109,11 @@ class Document {
|
|
|
2981
3109
|
return count;
|
|
2982
3110
|
}
|
|
2983
3111
|
getStylesXml() {
|
|
2984
|
-
const stylesFile = this.zipHandler.getFileAsString(
|
|
3112
|
+
const stylesFile = this.zipHandler.getFileAsString(types_js_1.DOCX_PATHS.STYLES);
|
|
2985
3113
|
return stylesFile || this.stylesManager.generateStylesXml();
|
|
2986
3114
|
}
|
|
2987
3115
|
setStylesXml(xml) {
|
|
2988
|
-
this.zipHandler.updateFile(
|
|
3116
|
+
this.zipHandler.updateFile(types_js_1.DOCX_PATHS.STYLES, xml);
|
|
2989
3117
|
this.stylesManager.clear();
|
|
2990
3118
|
}
|
|
2991
3119
|
getZipHandler() {
|
|
@@ -3130,7 +3258,7 @@ class Document {
|
|
|
3130
3258
|
if (paraIndex === -1) {
|
|
3131
3259
|
throw new Error('Paragraph not found in document body elements');
|
|
3132
3260
|
}
|
|
3133
|
-
const table = new
|
|
3261
|
+
const table = new Table_js_1.Table(1, 1);
|
|
3134
3262
|
const cell = table.getCell(0, 0);
|
|
3135
3263
|
if (!cell) {
|
|
3136
3264
|
throw new Error('Failed to get cell from newly created table');
|
|
@@ -3230,10 +3358,10 @@ class Document {
|
|
|
3230
3358
|
const runs = [];
|
|
3231
3359
|
const content = para.getContent();
|
|
3232
3360
|
for (const item of content) {
|
|
3233
|
-
if (item instanceof
|
|
3361
|
+
if (item instanceof Run_js_1.Run) {
|
|
3234
3362
|
runs.push(item);
|
|
3235
3363
|
}
|
|
3236
|
-
else if (item instanceof
|
|
3364
|
+
else if (item instanceof Revision_js_1.Revision) {
|
|
3237
3365
|
const revType = item.getType();
|
|
3238
3366
|
if (revType === 'delete' || revType === 'moveFrom') {
|
|
3239
3367
|
continue;
|
|
@@ -3241,7 +3369,7 @@ class Document {
|
|
|
3241
3369
|
const revisionRuns = item.getRuns();
|
|
3242
3370
|
runs.push(...revisionRuns);
|
|
3243
3371
|
}
|
|
3244
|
-
else if (item instanceof
|
|
3372
|
+
else if (item instanceof Hyperlink_js_1.Hyperlink) {
|
|
3245
3373
|
const hyperlinkRun = item.getRun();
|
|
3246
3374
|
runs.push(hyperlinkRun);
|
|
3247
3375
|
}
|
|
@@ -3380,7 +3508,7 @@ class Document {
|
|
|
3380
3508
|
const indent = listParaConfig.paragraph.indentation;
|
|
3381
3509
|
if (indent?.hanging !== undefined && indent?.left !== undefined) {
|
|
3382
3510
|
if (indent.hanging > indent.left) {
|
|
3383
|
-
const logger = (0,
|
|
3511
|
+
const logger = (0, logger_js_1.getGlobalLogger)();
|
|
3384
3512
|
logger.warn(`[Document] ListParagraph indentation: hanging (${indent.hanging}) > left (${indent.left}). ` +
|
|
3385
3513
|
`Capping hanging to left to prevent negative bullet position.`);
|
|
3386
3514
|
indent.hanging = indent.left;
|
|
@@ -3610,13 +3738,13 @@ class Document {
|
|
|
3610
3738
|
if (tableIndex !== -1) {
|
|
3611
3739
|
const nextElement = this.bodyElements[tableIndex + 1];
|
|
3612
3740
|
const isNextElementBlank = (() => {
|
|
3613
|
-
if (!(nextElement instanceof
|
|
3741
|
+
if (!(nextElement instanceof Paragraph_js_1.Paragraph))
|
|
3614
3742
|
return false;
|
|
3615
3743
|
const content = nextElement.getContent();
|
|
3616
3744
|
if (!content || content.length === 0)
|
|
3617
3745
|
return true;
|
|
3618
3746
|
for (const item of content) {
|
|
3619
|
-
if (item instanceof
|
|
3747
|
+
if (item instanceof Hyperlink_js_1.Hyperlink) {
|
|
3620
3748
|
return false;
|
|
3621
3749
|
}
|
|
3622
3750
|
if (item.getText) {
|
|
@@ -3628,7 +3756,7 @@ class Document {
|
|
|
3628
3756
|
return true;
|
|
3629
3757
|
})();
|
|
3630
3758
|
if (!isNextElementBlank) {
|
|
3631
|
-
const blankPara =
|
|
3759
|
+
const blankPara = Paragraph_js_1.Paragraph.create();
|
|
3632
3760
|
blankPara.setSpaceAfter(120);
|
|
3633
3761
|
if (preserveBlankLines) {
|
|
3634
3762
|
blankPara.setPreserved(true);
|
|
@@ -3922,7 +4050,7 @@ class Document {
|
|
|
3922
4050
|
}
|
|
3923
4051
|
let tocStyle = this.stylesManager.getStyle(styleId);
|
|
3924
4052
|
if (!tocStyle) {
|
|
3925
|
-
tocStyle =
|
|
4053
|
+
tocStyle = Style_js_1.Style.createTOCStyle(level, {
|
|
3926
4054
|
run: options.run,
|
|
3927
4055
|
paragraph: paragraphOverride,
|
|
3928
4056
|
});
|
|
@@ -4200,28 +4328,28 @@ class Document {
|
|
|
4200
4328
|
para.setAlignment(options.alignment);
|
|
4201
4329
|
}
|
|
4202
4330
|
if (options.spaceAbove !== undefined) {
|
|
4203
|
-
para.setSpaceBefore(options.spaceAbove *
|
|
4331
|
+
para.setSpaceBefore(options.spaceAbove * units_js_1.UNITS.TWIPS_PER_POINT);
|
|
4204
4332
|
}
|
|
4205
4333
|
if (options.spaceBelow !== undefined) {
|
|
4206
|
-
para.setSpaceAfter(options.spaceBelow *
|
|
4334
|
+
para.setSpaceAfter(options.spaceBelow * units_js_1.UNITS.TWIPS_PER_POINT);
|
|
4207
4335
|
}
|
|
4208
4336
|
if (options.lineSpacing !== undefined) {
|
|
4209
|
-
para.setLineSpacing(options.lineSpacing *
|
|
4337
|
+
para.setLineSpacing(options.lineSpacing * units_js_1.UNITS.TWIPS_PER_POINT);
|
|
4210
4338
|
}
|
|
4211
4339
|
if (options.indentLeft !== undefined) {
|
|
4212
|
-
para.setLeftIndent(options.indentLeft *
|
|
4340
|
+
para.setLeftIndent(options.indentLeft * units_js_1.UNITS.TWIPS_PER_INCH);
|
|
4213
4341
|
}
|
|
4214
4342
|
if (options.indentRight !== undefined) {
|
|
4215
|
-
para.setRightIndent(options.indentRight *
|
|
4343
|
+
para.setRightIndent(options.indentRight * units_js_1.UNITS.TWIPS_PER_INCH);
|
|
4216
4344
|
}
|
|
4217
4345
|
if (options.indentFirst !== undefined) {
|
|
4218
|
-
para.setFirstLineIndent(options.indentFirst *
|
|
4346
|
+
para.setFirstLineIndent(options.indentFirst * units_js_1.UNITS.TWIPS_PER_INCH);
|
|
4219
4347
|
}
|
|
4220
4348
|
if (options.indentHanging !== undefined) {
|
|
4221
4349
|
if (!para.formatting.indentation) {
|
|
4222
4350
|
para.formatting.indentation = {};
|
|
4223
4351
|
}
|
|
4224
|
-
para.formatting.indentation.hanging = options.indentHanging *
|
|
4352
|
+
para.formatting.indentation.hanging = options.indentHanging * units_js_1.UNITS.TWIPS_PER_INCH;
|
|
4225
4353
|
}
|
|
4226
4354
|
if (options.keepWithNext) {
|
|
4227
4355
|
para.setKeepNext(true);
|
|
@@ -4526,7 +4654,7 @@ class Document {
|
|
|
4526
4654
|
findHeadingStylesUsedByParagraphs() {
|
|
4527
4655
|
const usedStyles = new Map();
|
|
4528
4656
|
const processElement = (element) => {
|
|
4529
|
-
if (element instanceof
|
|
4657
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
4530
4658
|
const styleId = element.getStyle();
|
|
4531
4659
|
if (styleId) {
|
|
4532
4660
|
const style = this.stylesManager.getStyle(styleId);
|
|
@@ -4542,7 +4670,7 @@ class Document {
|
|
|
4542
4670
|
}
|
|
4543
4671
|
}
|
|
4544
4672
|
}
|
|
4545
|
-
else if (element instanceof
|
|
4673
|
+
else if (element instanceof Table_js_1.Table) {
|
|
4546
4674
|
for (let row = 0; row < element.getRowCount(); row++) {
|
|
4547
4675
|
const rowObj = element.getRow(row);
|
|
4548
4676
|
if (rowObj) {
|
|
@@ -4567,7 +4695,7 @@ class Document {
|
|
|
4567
4695
|
const headings = [];
|
|
4568
4696
|
const levelSet = new Set(levels);
|
|
4569
4697
|
try {
|
|
4570
|
-
const parsed =
|
|
4698
|
+
const parsed = XMLParser_js_1.XMLParser.parseToObject(docXml, { trimValues: false });
|
|
4571
4699
|
const document = parsed['w:document'];
|
|
4572
4700
|
if (!document) {
|
|
4573
4701
|
return headings;
|
|
@@ -4676,7 +4804,7 @@ class Document {
|
|
|
4676
4804
|
}
|
|
4677
4805
|
}
|
|
4678
4806
|
catch (error) {
|
|
4679
|
-
|
|
4807
|
+
logger_js_1.defaultLogger.error('Error parsing document.xml for headings:', error instanceof Error
|
|
4680
4808
|
? { message: error.message, stack: error.stack }
|
|
4681
4809
|
: { error: String(error) });
|
|
4682
4810
|
}
|
|
@@ -4764,7 +4892,7 @@ class Document {
|
|
|
4764
4892
|
.replace(/'/g, ''');
|
|
4765
4893
|
}
|
|
4766
4894
|
async populateTOCsInFile(filePath) {
|
|
4767
|
-
const handler = new
|
|
4895
|
+
const handler = new ZipHandler_js_1.ZipHandler();
|
|
4768
4896
|
await handler.load(filePath);
|
|
4769
4897
|
const docXml = handler.getFileAsString('word/document.xml');
|
|
4770
4898
|
if (!docXml) {
|
|
@@ -5018,14 +5146,14 @@ class Document {
|
|
|
5018
5146
|
const target = `media/image${this.imageManager.getImageCount() + 1}.${image.getExtension()}`;
|
|
5019
5147
|
const relationship = this.relationshipManager.addImage(target);
|
|
5020
5148
|
this.imageManager.registerImage(image, relationship.getId());
|
|
5021
|
-
const para = new
|
|
5149
|
+
const para = new Paragraph_js_1.Paragraph();
|
|
5022
5150
|
const imageRun = this.createImageRun(image);
|
|
5023
5151
|
para.addRun(imageRun);
|
|
5024
5152
|
this.bodyElements.push(para);
|
|
5025
5153
|
return this;
|
|
5026
5154
|
}
|
|
5027
5155
|
createImageRun(image) {
|
|
5028
|
-
return new
|
|
5156
|
+
return new ImageRun_js_1.ImageRun(image);
|
|
5029
5157
|
}
|
|
5030
5158
|
getImageManager() {
|
|
5031
5159
|
return this.imageManager;
|
|
@@ -5075,14 +5203,14 @@ class Document {
|
|
|
5075
5203
|
if (this.commentManager.getCount() > 0) {
|
|
5076
5204
|
const xml = this.commentManager.generateCommentsXml();
|
|
5077
5205
|
this.zipHandler.addFile('word/comments.xml', xml);
|
|
5078
|
-
const existingRels = this.relationshipManager.getRelationshipsByType(
|
|
5206
|
+
const existingRels = this.relationshipManager.getRelationshipsByType(Relationship_js_1.RelationshipType.COMMENTS);
|
|
5079
5207
|
if (existingRels.length === 0) {
|
|
5080
5208
|
this.relationshipManager.addComments();
|
|
5081
5209
|
}
|
|
5082
5210
|
}
|
|
5083
5211
|
else {
|
|
5084
5212
|
this.zipHandler.removeFile('word/comments.xml');
|
|
5085
|
-
const existingRels = this.relationshipManager.getRelationshipsByType(
|
|
5213
|
+
const existingRels = this.relationshipManager.getRelationshipsByType(Relationship_js_1.RelationshipType.COMMENTS);
|
|
5086
5214
|
for (const rel of existingRels) {
|
|
5087
5215
|
this.relationshipManager.removeRelationship(rel.getId());
|
|
5088
5216
|
}
|
|
@@ -5094,7 +5222,7 @@ class Document {
|
|
|
5094
5222
|
for (const [path, content] of this._originalCommentCompanionFiles) {
|
|
5095
5223
|
this.zipHandler.addFile(path, content);
|
|
5096
5224
|
}
|
|
5097
|
-
const existingRels = this.relationshipManager.getRelationshipsByType(
|
|
5225
|
+
const existingRels = this.relationshipManager.getRelationshipsByType(Relationship_js_1.RelationshipType.COMMENTS);
|
|
5098
5226
|
if (existingRels.length === 0) {
|
|
5099
5227
|
this.relationshipManager.addComments();
|
|
5100
5228
|
}
|
|
@@ -5102,7 +5230,7 @@ class Document {
|
|
|
5102
5230
|
else if (this.commentManager.getCount() > 0) {
|
|
5103
5231
|
const xml = this.commentManager.generateCommentsXml();
|
|
5104
5232
|
this.zipHandler.addFile('word/comments.xml', xml);
|
|
5105
|
-
const existingRels = this.relationshipManager.getRelationshipsByType(
|
|
5233
|
+
const existingRels = this.relationshipManager.getRelationshipsByType(Relationship_js_1.RelationshipType.COMMENTS);
|
|
5106
5234
|
if (existingRels.length === 0) {
|
|
5107
5235
|
this.relationshipManager.addComments();
|
|
5108
5236
|
}
|
|
@@ -5110,9 +5238,9 @@ class Document {
|
|
|
5110
5238
|
}
|
|
5111
5239
|
removeCommentCompanionFiles() {
|
|
5112
5240
|
const companionPaths = [
|
|
5113
|
-
|
|
5114
|
-
|
|
5115
|
-
|
|
5241
|
+
types_js_1.DOCX_PATHS.COMMENTS_EXTENDED,
|
|
5242
|
+
types_js_1.DOCX_PATHS.COMMENTS_IDS,
|
|
5243
|
+
types_js_1.DOCX_PATHS.COMMENTS_EXTENSIBLE,
|
|
5116
5244
|
];
|
|
5117
5245
|
for (const filePath of companionPaths) {
|
|
5118
5246
|
this.zipHandler.removeFile(filePath);
|
|
@@ -5127,16 +5255,16 @@ class Document {
|
|
|
5127
5255
|
saveFootnotes() {
|
|
5128
5256
|
if (this._footnotesModified || this.footnoteManager.getCount() > 0) {
|
|
5129
5257
|
const xml = this.footnoteManager.generateFootnotesXml();
|
|
5130
|
-
this.zipHandler.addFile(
|
|
5131
|
-
const existingRels = this.relationshipManager.getRelationshipsByType(
|
|
5258
|
+
this.zipHandler.addFile(types_js_1.DOCX_PATHS.FOOTNOTES, xml);
|
|
5259
|
+
const existingRels = this.relationshipManager.getRelationshipsByType(Relationship_js_1.RelationshipType.FOOTNOTES);
|
|
5132
5260
|
if (existingRels.length === 0) {
|
|
5133
5261
|
this.relationshipManager.addFootnotes();
|
|
5134
5262
|
}
|
|
5135
5263
|
this.generatePartLevelHyperlinkRels(this.footnoteManager.getAllFootnotes().flatMap((fn) => fn.getParagraphs()), 'word/_rels/footnotes.xml.rels');
|
|
5136
5264
|
}
|
|
5137
5265
|
else if (this._originalFootnotesXml) {
|
|
5138
|
-
this.zipHandler.addFile(
|
|
5139
|
-
const existingRels = this.relationshipManager.getRelationshipsByType(
|
|
5266
|
+
this.zipHandler.addFile(types_js_1.DOCX_PATHS.FOOTNOTES, this._originalFootnotesXml);
|
|
5267
|
+
const existingRels = this.relationshipManager.getRelationshipsByType(Relationship_js_1.RelationshipType.FOOTNOTES);
|
|
5140
5268
|
if (existingRels.length === 0) {
|
|
5141
5269
|
this.relationshipManager.addFootnotes();
|
|
5142
5270
|
}
|
|
@@ -5145,16 +5273,16 @@ class Document {
|
|
|
5145
5273
|
saveEndnotes() {
|
|
5146
5274
|
if (this._endnotesModified || this.endnoteManager.getCount() > 0) {
|
|
5147
5275
|
const xml = this.endnoteManager.generateEndnotesXml();
|
|
5148
|
-
this.zipHandler.addFile(
|
|
5149
|
-
const existingRels = this.relationshipManager.getRelationshipsByType(
|
|
5276
|
+
this.zipHandler.addFile(types_js_1.DOCX_PATHS.ENDNOTES, xml);
|
|
5277
|
+
const existingRels = this.relationshipManager.getRelationshipsByType(Relationship_js_1.RelationshipType.ENDNOTES);
|
|
5150
5278
|
if (existingRels.length === 0) {
|
|
5151
5279
|
this.relationshipManager.addEndnotes();
|
|
5152
5280
|
}
|
|
5153
5281
|
this.generatePartLevelHyperlinkRels(this.endnoteManager.getAllEndnotes().flatMap((en) => en.getParagraphs()), 'word/_rels/endnotes.xml.rels');
|
|
5154
5282
|
}
|
|
5155
5283
|
else if (this._originalEndnotesXml) {
|
|
5156
|
-
this.zipHandler.addFile(
|
|
5157
|
-
const existingRels = this.relationshipManager.getRelationshipsByType(
|
|
5284
|
+
this.zipHandler.addFile(types_js_1.DOCX_PATHS.ENDNOTES, this._originalEndnotesXml);
|
|
5285
|
+
const existingRels = this.relationshipManager.getRelationshipsByType(Relationship_js_1.RelationshipType.ENDNOTES);
|
|
5158
5286
|
if (existingRels.length === 0) {
|
|
5159
5287
|
this.relationshipManager.addEndnotes();
|
|
5160
5288
|
}
|
|
@@ -5163,10 +5291,10 @@ class Document {
|
|
|
5163
5291
|
extractParagraphsFromElements(elements) {
|
|
5164
5292
|
const result = [];
|
|
5165
5293
|
for (const el of elements) {
|
|
5166
|
-
if (el instanceof
|
|
5294
|
+
if (el instanceof Paragraph_js_1.Paragraph) {
|
|
5167
5295
|
result.push(el);
|
|
5168
5296
|
}
|
|
5169
|
-
else if (el instanceof
|
|
5297
|
+
else if (el instanceof Table_js_1.Table) {
|
|
5170
5298
|
for (const row of el.getRows()) {
|
|
5171
5299
|
for (const cell of row.getCells()) {
|
|
5172
5300
|
result.push(...cell.getParagraphs());
|
|
@@ -5180,16 +5308,16 @@ class Document {
|
|
|
5180
5308
|
const hyperlinkRels = [];
|
|
5181
5309
|
for (const para of paragraphs) {
|
|
5182
5310
|
for (const item of para.getContent()) {
|
|
5183
|
-
if (item instanceof
|
|
5311
|
+
if (item instanceof Hyperlink_js_1.Hyperlink && item.isExternal()) {
|
|
5184
5312
|
const relId = item.getRelationshipId();
|
|
5185
5313
|
const url = item.getUrl();
|
|
5186
5314
|
if (relId && url) {
|
|
5187
5315
|
hyperlinkRels.push({ id: relId, url });
|
|
5188
5316
|
}
|
|
5189
5317
|
}
|
|
5190
|
-
if (item instanceof
|
|
5318
|
+
if (item instanceof Revision_js_1.Revision) {
|
|
5191
5319
|
for (const revContent of item.getContent()) {
|
|
5192
|
-
if (revContent instanceof
|
|
5320
|
+
if (revContent instanceof Hyperlink_js_1.Hyperlink && revContent.isExternal()) {
|
|
5193
5321
|
const relId = revContent.getRelationshipId();
|
|
5194
5322
|
const url = revContent.getUrl();
|
|
5195
5323
|
if (relId && url) {
|
|
@@ -5205,8 +5333,8 @@ class Document {
|
|
|
5205
5333
|
xml +=
|
|
5206
5334
|
'<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">\n';
|
|
5207
5335
|
for (const rel of hyperlinkRels) {
|
|
5208
|
-
const escapedId =
|
|
5209
|
-
const escapedUrl =
|
|
5336
|
+
const escapedId = XMLBuilder_js_1.XMLBuilder.escapeXmlAttribute(rel.id);
|
|
5337
|
+
const escapedUrl = XMLBuilder_js_1.XMLBuilder.escapeXmlAttribute(rel.url);
|
|
5210
5338
|
xml += ` <Relationship Id="${escapedId}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Target="${escapedUrl}" TargetMode="External"/>\n`;
|
|
5211
5339
|
}
|
|
5212
5340
|
xml += '</Relationships>';
|
|
@@ -5220,7 +5348,7 @@ class Document {
|
|
|
5220
5348
|
const authors = new Set();
|
|
5221
5349
|
for (const para of this.getAllParagraphs()) {
|
|
5222
5350
|
for (const item of para.getContent()) {
|
|
5223
|
-
if (item instanceof
|
|
5351
|
+
if (item instanceof Revision_js_1.Revision) {
|
|
5224
5352
|
const author = item.getAuthor();
|
|
5225
5353
|
if (author)
|
|
5226
5354
|
authors.add(author);
|
|
@@ -5237,7 +5365,7 @@ class Document {
|
|
|
5237
5365
|
}
|
|
5238
5366
|
}
|
|
5239
5367
|
for (const element of this.bodyElements) {
|
|
5240
|
-
if (element instanceof
|
|
5368
|
+
if (element instanceof Table_js_1.Table) {
|
|
5241
5369
|
this.collectAuthorsFromTable(element, authors);
|
|
5242
5370
|
}
|
|
5243
5371
|
}
|
|
@@ -5278,7 +5406,7 @@ class Document {
|
|
|
5278
5406
|
const newPeopleXml = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<w15:people xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="w15">${personElements}</w15:people>`;
|
|
5279
5407
|
this.zipHandler.addFile('word/people.xml', newPeopleXml);
|
|
5280
5408
|
}
|
|
5281
|
-
const peopleType =
|
|
5409
|
+
const peopleType = Relationship_js_1.RelationshipType.PEOPLE;
|
|
5282
5410
|
const existingPeopleRels = this.relationshipManager.getRelationshipsByType(peopleType);
|
|
5283
5411
|
if (existingPeopleRels.length === 0) {
|
|
5284
5412
|
this.relationshipManager.addPeople();
|
|
@@ -5299,7 +5427,7 @@ class Document {
|
|
|
5299
5427
|
continue;
|
|
5300
5428
|
for (const para of cell.getParagraphs()) {
|
|
5301
5429
|
for (const item of para.getContent()) {
|
|
5302
|
-
if (item instanceof
|
|
5430
|
+
if (item instanceof Revision_js_1.Revision) {
|
|
5303
5431
|
const author = item.getAuthor();
|
|
5304
5432
|
if (author)
|
|
5305
5433
|
authors.add(author);
|
|
@@ -5343,7 +5471,7 @@ class Document {
|
|
|
5343
5471
|
updateContentTypesWithImagesHeadersFootersAndComments() {
|
|
5344
5472
|
const hasCustomProps = this.properties.customProperties && Object.keys(this.properties.customProperties).length > 0;
|
|
5345
5473
|
const contentTypes = this.generator.generateContentTypesWithImagesHeadersFootersAndComments(this.imageManager, this.headerFooterManager, this.commentManager, this.zipHandler, undefined, hasCustomProps, this._originalContentTypes, this.footnoteManager, this.endnoteManager);
|
|
5346
|
-
this.zipHandler.updateFile(
|
|
5474
|
+
this.zipHandler.updateFile(types_js_1.DOCX_PATHS.CONTENT_TYPES, contentTypes);
|
|
5347
5475
|
}
|
|
5348
5476
|
getBookmarkManager() {
|
|
5349
5477
|
return this.bookmarkManager;
|
|
@@ -5369,7 +5497,7 @@ class Document {
|
|
|
5369
5497
|
const BOOKMARK_NAME = '_top';
|
|
5370
5498
|
let bookmark = this.getBookmark(BOOKMARK_NAME);
|
|
5371
5499
|
if (!bookmark) {
|
|
5372
|
-
bookmark = new
|
|
5500
|
+
bookmark = new Bookmark_js_1.Bookmark({
|
|
5373
5501
|
id: 0,
|
|
5374
5502
|
name: BOOKMARK_NAME,
|
|
5375
5503
|
skipNormalization: true,
|
|
@@ -5380,7 +5508,7 @@ class Document {
|
|
|
5380
5508
|
paragraphs[0].addBookmark(bookmark);
|
|
5381
5509
|
}
|
|
5382
5510
|
else {
|
|
5383
|
-
const topParagraph = new
|
|
5511
|
+
const topParagraph = new Paragraph_js_1.Paragraph();
|
|
5384
5512
|
topParagraph.addBookmark(bookmark);
|
|
5385
5513
|
this.bodyElements.unshift(topParagraph);
|
|
5386
5514
|
}
|
|
@@ -5389,7 +5517,7 @@ class Document {
|
|
|
5389
5517
|
bookmark,
|
|
5390
5518
|
anchor: BOOKMARK_NAME,
|
|
5391
5519
|
hyperlink: (text, formatting) => {
|
|
5392
|
-
return
|
|
5520
|
+
return Hyperlink_js_1.Hyperlink.createInternal(BOOKMARK_NAME, text, formatting);
|
|
5393
5521
|
},
|
|
5394
5522
|
};
|
|
5395
5523
|
}
|
|
@@ -5402,16 +5530,16 @@ class Document {
|
|
|
5402
5530
|
let i = 0;
|
|
5403
5531
|
while (i < this.bodyElements.length) {
|
|
5404
5532
|
const element = this.bodyElements[i];
|
|
5405
|
-
if (element instanceof
|
|
5533
|
+
if (element instanceof Table_js_1.Table &&
|
|
5406
5534
|
element.getRowCount() === 1 &&
|
|
5407
5535
|
element.getColumnCount() === 1) {
|
|
5408
5536
|
oneByOneCount++;
|
|
5409
5537
|
if (oneByOneCount > 1) {
|
|
5410
5538
|
const prevElement = i > 0 ? this.bodyElements[i - 1] : undefined;
|
|
5411
|
-
const hasLink = prevElement instanceof
|
|
5539
|
+
const hasLink = prevElement instanceof Paragraph_js_1.Paragraph && this._paragraphHasTopLink(prevElement);
|
|
5412
5540
|
if (!hasLink) {
|
|
5413
|
-
const para = new
|
|
5414
|
-
const link =
|
|
5541
|
+
const para = new Paragraph_js_1.Paragraph();
|
|
5542
|
+
const link = Hyperlink_js_1.Hyperlink.createInternal('_top', linkText, {
|
|
5415
5543
|
color: '0000FF',
|
|
5416
5544
|
underline: 'single',
|
|
5417
5545
|
...formatting,
|
|
@@ -5429,16 +5557,16 @@ class Document {
|
|
|
5429
5557
|
}
|
|
5430
5558
|
_paragraphHasTopLink(paragraph) {
|
|
5431
5559
|
for (const item of paragraph.getContent()) {
|
|
5432
|
-
if (item instanceof
|
|
5560
|
+
if (item instanceof Hyperlink_js_1.Hyperlink && item.getAnchor() === '_top') {
|
|
5433
5561
|
return true;
|
|
5434
5562
|
}
|
|
5435
|
-
if (item instanceof
|
|
5563
|
+
if (item instanceof Field_js_1.ComplexField && item.isHyperlinkField()) {
|
|
5436
5564
|
const parsed = item.getParsedHyperlink();
|
|
5437
5565
|
if (parsed?.anchor === '_top') {
|
|
5438
5566
|
return true;
|
|
5439
5567
|
}
|
|
5440
5568
|
}
|
|
5441
|
-
if (item instanceof
|
|
5569
|
+
if (item instanceof PreservedElement_js_1.PreservedElement && item.getRawXml().includes('w:anchor="_top"')) {
|
|
5442
5570
|
return true;
|
|
5443
5571
|
}
|
|
5444
5572
|
}
|
|
@@ -5448,13 +5576,13 @@ class Document {
|
|
|
5448
5576
|
return this.revisionManager;
|
|
5449
5577
|
}
|
|
5450
5578
|
validateRevisions(options) {
|
|
5451
|
-
return
|
|
5579
|
+
return index_js_1.RevisionValidator.validate(this, options);
|
|
5452
5580
|
}
|
|
5453
5581
|
autoFixRevisions(options) {
|
|
5454
|
-
return
|
|
5582
|
+
return index_js_1.RevisionAutoFixer.fix(this, options);
|
|
5455
5583
|
}
|
|
5456
5584
|
isRevisionsValid() {
|
|
5457
|
-
return
|
|
5585
|
+
return index_js_1.RevisionValidator.isValid(this);
|
|
5458
5586
|
}
|
|
5459
5587
|
validateAndFixRevisions(options) {
|
|
5460
5588
|
const validation = this.validateRevisions(options?.validation);
|
|
@@ -5471,15 +5599,15 @@ class Document {
|
|
|
5471
5599
|
return { validation, fix };
|
|
5472
5600
|
}
|
|
5473
5601
|
createInsertion(author, content, date) {
|
|
5474
|
-
const revision =
|
|
5602
|
+
const revision = Revision_js_1.Revision.createInsertion(author, content, date);
|
|
5475
5603
|
return this.revisionManager.register(revision);
|
|
5476
5604
|
}
|
|
5477
5605
|
createDeletion(author, content, date) {
|
|
5478
|
-
const revision =
|
|
5606
|
+
const revision = Revision_js_1.Revision.createDeletion(author, content, date);
|
|
5479
5607
|
return this.revisionManager.register(revision);
|
|
5480
5608
|
}
|
|
5481
5609
|
createRevisionFromText(type, author, text, date) {
|
|
5482
|
-
const revision =
|
|
5610
|
+
const revision = Revision_js_1.Revision.fromText(type, author, text, date);
|
|
5483
5611
|
return this.revisionManager.register(revision);
|
|
5484
5612
|
}
|
|
5485
5613
|
findParagraphIndex(paragraph) {
|
|
@@ -5518,8 +5646,8 @@ class Document {
|
|
|
5518
5646
|
return revision;
|
|
5519
5647
|
}
|
|
5520
5648
|
trackFieldInstructionDeletion(paragraph, author, fieldInstruction, date) {
|
|
5521
|
-
const run = new
|
|
5522
|
-
const revision =
|
|
5649
|
+
const run = new Run_js_1.Run(fieldInstruction);
|
|
5650
|
+
const revision = Revision_js_1.Revision.createFieldInstructionDeletion(author, run, date);
|
|
5523
5651
|
this.revisionManager.register(revision);
|
|
5524
5652
|
const location = this.createRevisionLocation(paragraph);
|
|
5525
5653
|
if (location) {
|
|
@@ -5745,7 +5873,7 @@ class Document {
|
|
|
5745
5873
|
return this.documentProtection;
|
|
5746
5874
|
}
|
|
5747
5875
|
getCompatibilityMode() {
|
|
5748
|
-
return this._compatInfo?.mode ??
|
|
5876
|
+
return this._compatInfo?.mode ?? compatibility_types_js_1.CompatibilityMode.Word2007;
|
|
5749
5877
|
}
|
|
5750
5878
|
getDocumentBackground() {
|
|
5751
5879
|
return this._documentBackground ? { ...this._documentBackground } : undefined;
|
|
@@ -5811,7 +5939,7 @@ class Document {
|
|
|
5811
5939
|
setDefaultFont(fontName, sizeInPoints) {
|
|
5812
5940
|
let normalStyle = this.stylesManager.getStyle('Normal');
|
|
5813
5941
|
if (!normalStyle) {
|
|
5814
|
-
normalStyle = new
|
|
5942
|
+
normalStyle = new Style_js_1.Style({
|
|
5815
5943
|
styleId: 'Normal',
|
|
5816
5944
|
name: 'Normal',
|
|
5817
5945
|
type: 'paragraph',
|
|
@@ -5830,7 +5958,7 @@ class Document {
|
|
|
5830
5958
|
setDefaultFontSize(sizeInPoints) {
|
|
5831
5959
|
let normalStyle = this.stylesManager.getStyle('Normal');
|
|
5832
5960
|
if (!normalStyle) {
|
|
5833
|
-
normalStyle = new
|
|
5961
|
+
normalStyle = new Style_js_1.Style({
|
|
5834
5962
|
styleId: 'Normal',
|
|
5835
5963
|
name: 'Normal',
|
|
5836
5964
|
type: 'paragraph',
|
|
@@ -5885,7 +6013,7 @@ class Document {
|
|
|
5885
6013
|
}
|
|
5886
6014
|
getCompatibilityInfo() {
|
|
5887
6015
|
return (this._compatInfo ?? {
|
|
5888
|
-
mode:
|
|
6016
|
+
mode: compatibility_types_js_1.CompatibilityMode.Word2007,
|
|
5889
6017
|
isLegacyMode: true,
|
|
5890
6018
|
compatSettings: [],
|
|
5891
6019
|
legacyFlags: [],
|
|
@@ -5894,7 +6022,7 @@ class Document {
|
|
|
5894
6022
|
upgradeToModernFormat() {
|
|
5895
6023
|
const currentMode = this.getCompatibilityMode();
|
|
5896
6024
|
const currentInfo = this.getCompatibilityInfo();
|
|
5897
|
-
if (currentMode ===
|
|
6025
|
+
if (currentMode === compatibility_types_js_1.CompatibilityMode.Word2013Plus && currentInfo.legacyFlags.length === 0) {
|
|
5898
6026
|
return {
|
|
5899
6027
|
previousMode: currentMode,
|
|
5900
6028
|
newMode: 15,
|
|
@@ -5905,65 +6033,65 @@ class Document {
|
|
|
5905
6033
|
};
|
|
5906
6034
|
}
|
|
5907
6035
|
if (this._originalSettingsXml) {
|
|
5908
|
-
const result =
|
|
6036
|
+
const result = CompatibilityUpgrader_js_1.CompatibilityUpgrader.upgradeCompatBlock(this._originalSettingsXml, currentMode);
|
|
5909
6037
|
this._originalSettingsXml = result.xml;
|
|
5910
6038
|
this._settingsModified = true;
|
|
5911
|
-
const nsResult =
|
|
6039
|
+
const nsResult = CompatibilityUpgrader_js_1.CompatibilityUpgrader.ensureModernNamespaces(this.namespaces);
|
|
5912
6040
|
this.namespaces = nsResult.namespaces;
|
|
5913
6041
|
result.report.namespacesExpanded = nsResult.expanded;
|
|
5914
6042
|
this._compatInfo = {
|
|
5915
|
-
mode:
|
|
6043
|
+
mode: compatibility_types_js_1.CompatibilityMode.Word2013Plus,
|
|
5916
6044
|
isLegacyMode: false,
|
|
5917
|
-
compatSettings: [...
|
|
6045
|
+
compatSettings: [...legacyCompatFlags_js_1.MODERN_COMPAT_SETTINGS],
|
|
5918
6046
|
legacyFlags: [],
|
|
5919
6047
|
};
|
|
5920
6048
|
return result.report;
|
|
5921
6049
|
}
|
|
5922
6050
|
this._compatInfo = {
|
|
5923
|
-
mode:
|
|
6051
|
+
mode: compatibility_types_js_1.CompatibilityMode.Word2013Plus,
|
|
5924
6052
|
isLegacyMode: false,
|
|
5925
|
-
compatSettings: [...
|
|
6053
|
+
compatSettings: [...legacyCompatFlags_js_1.MODERN_COMPAT_SETTINGS],
|
|
5926
6054
|
legacyFlags: [],
|
|
5927
6055
|
};
|
|
5928
|
-
const nsResult =
|
|
6056
|
+
const nsResult = CompatibilityUpgrader_js_1.CompatibilityUpgrader.ensureModernNamespaces(this.namespaces);
|
|
5929
6057
|
this.namespaces = nsResult.namespaces;
|
|
5930
6058
|
return {
|
|
5931
6059
|
previousMode: currentMode,
|
|
5932
6060
|
newMode: 15,
|
|
5933
6061
|
removedFlags: [],
|
|
5934
|
-
addedSettings:
|
|
6062
|
+
addedSettings: legacyCompatFlags_js_1.MODERN_COMPAT_SETTINGS.map((s) => s.name),
|
|
5935
6063
|
namespacesExpanded: nsResult.expanded,
|
|
5936
|
-
changed: currentMode !==
|
|
6064
|
+
changed: currentMode !== compatibility_types_js_1.CompatibilityMode.Word2013Plus,
|
|
5937
6065
|
};
|
|
5938
6066
|
}
|
|
5939
6067
|
createRunPropertiesChange(author, content, previousProperties, date) {
|
|
5940
|
-
const revision =
|
|
6068
|
+
const revision = Revision_js_1.Revision.createRunPropertiesChange(author, content, previousProperties, date);
|
|
5941
6069
|
return this.revisionManager.register(revision);
|
|
5942
6070
|
}
|
|
5943
6071
|
createParagraphPropertiesChange(author, content, previousProperties, date) {
|
|
5944
|
-
const revision =
|
|
6072
|
+
const revision = Revision_js_1.Revision.createParagraphPropertiesChange(author, content, previousProperties, date);
|
|
5945
6073
|
return this.revisionManager.register(revision);
|
|
5946
6074
|
}
|
|
5947
6075
|
createTablePropertiesChange(author, content, previousProperties, date) {
|
|
5948
|
-
const revision =
|
|
6076
|
+
const revision = Revision_js_1.Revision.createTablePropertiesChange(author, content, previousProperties, date);
|
|
5949
6077
|
return this.revisionManager.register(revision);
|
|
5950
6078
|
}
|
|
5951
6079
|
createMoveFrom(author, content, moveId, date) {
|
|
5952
|
-
const revision =
|
|
6080
|
+
const revision = Revision_js_1.Revision.createMoveFrom(author, content, moveId, date);
|
|
5953
6081
|
return this.revisionManager.register(revision);
|
|
5954
6082
|
}
|
|
5955
6083
|
createMoveTo(author, content, moveId, date) {
|
|
5956
|
-
const revision =
|
|
6084
|
+
const revision = Revision_js_1.Revision.createMoveTo(author, content, moveId, date);
|
|
5957
6085
|
return this.revisionManager.register(revision);
|
|
5958
6086
|
}
|
|
5959
6087
|
trackMove(author, content, date) {
|
|
5960
6088
|
const moveId = `move${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
5961
6089
|
const moveName = `move${Date.now()}`;
|
|
5962
6090
|
const rangeIdStart = this.revisionManager.getStats().nextId;
|
|
5963
|
-
const moveFromRangeStart =
|
|
5964
|
-
const moveFromRangeEnd =
|
|
5965
|
-
const moveToRangeStart =
|
|
5966
|
-
const moveToRangeEnd =
|
|
6091
|
+
const moveFromRangeStart = RangeMarker_js_1.RangeMarker.createMoveFromStart(rangeIdStart, moveName, author, date);
|
|
6092
|
+
const moveFromRangeEnd = RangeMarker_js_1.RangeMarker.createMoveFromEnd(rangeIdStart);
|
|
6093
|
+
const moveToRangeStart = RangeMarker_js_1.RangeMarker.createMoveToStart(rangeIdStart, moveName, author, date);
|
|
6094
|
+
const moveToRangeEnd = RangeMarker_js_1.RangeMarker.createMoveToEnd(rangeIdStart);
|
|
5967
6095
|
const moveFrom = this.createMoveFrom(author, content, moveId, date);
|
|
5968
6096
|
const moveTo = this.createMoveTo(author, content, moveId, date);
|
|
5969
6097
|
return {
|
|
@@ -5977,19 +6105,19 @@ class Document {
|
|
|
5977
6105
|
};
|
|
5978
6106
|
}
|
|
5979
6107
|
createTableCellInsert(author, content, date) {
|
|
5980
|
-
const revision =
|
|
6108
|
+
const revision = Revision_js_1.Revision.createTableCellInsert(author, content, date);
|
|
5981
6109
|
return this.revisionManager.register(revision);
|
|
5982
6110
|
}
|
|
5983
6111
|
createTableCellDelete(author, content, date) {
|
|
5984
|
-
const revision =
|
|
6112
|
+
const revision = Revision_js_1.Revision.createTableCellDelete(author, content, date);
|
|
5985
6113
|
return this.revisionManager.register(revision);
|
|
5986
6114
|
}
|
|
5987
6115
|
createTableCellMerge(author, content, date) {
|
|
5988
|
-
const revision =
|
|
6116
|
+
const revision = Revision_js_1.Revision.createTableCellMerge(author, content, date);
|
|
5989
6117
|
return this.revisionManager.register(revision);
|
|
5990
6118
|
}
|
|
5991
6119
|
createNumberingChange(author, content, previousProperties, date) {
|
|
5992
|
-
const revision =
|
|
6120
|
+
const revision = Revision_js_1.Revision.createNumberingChange(author, content, previousProperties, date);
|
|
5993
6121
|
return this.revisionManager.register(revision);
|
|
5994
6122
|
}
|
|
5995
6123
|
getCommentManager() {
|
|
@@ -6115,7 +6243,7 @@ class Document {
|
|
|
6115
6243
|
const updates = [];
|
|
6116
6244
|
for (const para of this.getAllParagraphs()) {
|
|
6117
6245
|
for (const content of para.getContent()) {
|
|
6118
|
-
if (content instanceof
|
|
6246
|
+
if (content instanceof Hyperlink_js_1.Hyperlink && content.isExternal()) {
|
|
6119
6247
|
const currentUrl = content.getUrl();
|
|
6120
6248
|
if (currentUrl && urlMap.has(currentUrl)) {
|
|
6121
6249
|
const newUrl = urlMap.get(currentUrl);
|
|
@@ -6143,8 +6271,8 @@ class Document {
|
|
|
6143
6271
|
return this.acceptAllRevisions();
|
|
6144
6272
|
}
|
|
6145
6273
|
async acceptAllRevisions() {
|
|
6146
|
-
const result = (0,
|
|
6147
|
-
(0,
|
|
6274
|
+
const result = (0, InMemoryRevisionAcceptor_js_1.acceptRevisionsInMemory)(this);
|
|
6275
|
+
(0, acceptRevisions_js_1.cleanupRevisionMetadata)(this.zipHandler);
|
|
6148
6276
|
this.logger.info('Accepted all revisions using in-memory transformation', {
|
|
6149
6277
|
insertions: result.insertionsAccepted,
|
|
6150
6278
|
deletions: result.deletionsAccepted,
|
|
@@ -6173,7 +6301,7 @@ class Document {
|
|
|
6173
6301
|
}
|
|
6174
6302
|
for (const headerEntry of this.headerFooterManager.getAllHeaders()) {
|
|
6175
6303
|
for (const element of headerEntry.header.getElements()) {
|
|
6176
|
-
if (element instanceof
|
|
6304
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
6177
6305
|
paragraphsProcessed++;
|
|
6178
6306
|
totalConsolidated += element.consolidateRevisions(timeWindowMs);
|
|
6179
6307
|
}
|
|
@@ -6181,7 +6309,7 @@ class Document {
|
|
|
6181
6309
|
}
|
|
6182
6310
|
for (const footerEntry of this.headerFooterManager.getAllFooters()) {
|
|
6183
6311
|
for (const element of footerEntry.footer.getElements()) {
|
|
6184
|
-
if (element instanceof
|
|
6312
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
6185
6313
|
paragraphsProcessed++;
|
|
6186
6314
|
totalConsolidated += element.consolidateRevisions(timeWindowMs);
|
|
6187
6315
|
}
|
|
@@ -6194,7 +6322,7 @@ class Document {
|
|
|
6194
6322
|
return { paragraphsProcessed, revisionsConsolidated: totalConsolidated };
|
|
6195
6323
|
}
|
|
6196
6324
|
async acceptAllRevisionsRawXml() {
|
|
6197
|
-
await (0,
|
|
6325
|
+
await (0, acceptRevisions_js_1.acceptAllRevisions)(this.zipHandler);
|
|
6198
6326
|
this.clearRevisionsFromAllParagraphs();
|
|
6199
6327
|
this.skipDocumentXmlRegeneration = true;
|
|
6200
6328
|
return this;
|
|
@@ -6210,16 +6338,16 @@ class Document {
|
|
|
6210
6338
|
const revisions = para.getRevisions();
|
|
6211
6339
|
if (revisions.length > 0) {
|
|
6212
6340
|
const content = para.getContent();
|
|
6213
|
-
const nonRevisionContent = content.filter((item) => !(item instanceof
|
|
6341
|
+
const nonRevisionContent = content.filter((item) => !(item instanceof Revision_js_1.Revision));
|
|
6214
6342
|
para.clearContent();
|
|
6215
6343
|
for (const item of nonRevisionContent) {
|
|
6216
|
-
if (item instanceof
|
|
6344
|
+
if (item instanceof Run_js_1.Run || item instanceof ImageRun_js_1.ImageRun) {
|
|
6217
6345
|
para.addRun(item);
|
|
6218
6346
|
}
|
|
6219
|
-
else if (item instanceof
|
|
6347
|
+
else if (item instanceof Hyperlink_js_1.Hyperlink) {
|
|
6220
6348
|
para.addHyperlink(item);
|
|
6221
6349
|
}
|
|
6222
|
-
else if (item instanceof
|
|
6350
|
+
else if (item instanceof Field_js_1.Field) {
|
|
6223
6351
|
para.addField(item);
|
|
6224
6352
|
}
|
|
6225
6353
|
}
|
|
@@ -6285,7 +6413,59 @@ class Document {
|
|
|
6285
6413
|
this.bodyElements = [];
|
|
6286
6414
|
return this;
|
|
6287
6415
|
}
|
|
6416
|
+
on(event, listener) {
|
|
6417
|
+
return this._events.on(event, listener);
|
|
6418
|
+
}
|
|
6419
|
+
off(event, listener) {
|
|
6420
|
+
this._events.off(event, listener);
|
|
6421
|
+
}
|
|
6422
|
+
listenerCount(event) {
|
|
6423
|
+
return this._events.listenerCount(event);
|
|
6424
|
+
}
|
|
6425
|
+
_emitElementAdded(element, index) {
|
|
6426
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
6427
|
+
this._events.emit('paragraphAdded', { paragraph: element, index });
|
|
6428
|
+
}
|
|
6429
|
+
else if (element instanceof Table_js_1.Table) {
|
|
6430
|
+
this._events.emit('tableAdded', { table: element });
|
|
6431
|
+
}
|
|
6432
|
+
}
|
|
6433
|
+
_emitElementRemoved(element) {
|
|
6434
|
+
if (!element)
|
|
6435
|
+
return;
|
|
6436
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
6437
|
+
this._events.emit('paragraphRemoved', { paragraph: element });
|
|
6438
|
+
}
|
|
6439
|
+
else if (element instanceof Table_js_1.Table) {
|
|
6440
|
+
this._events.emit('tableRemoved', { table: element });
|
|
6441
|
+
}
|
|
6442
|
+
}
|
|
6443
|
+
static globalDefaults = {};
|
|
6444
|
+
static setDefaults(defaults) {
|
|
6445
|
+
Document.globalDefaults = { ...defaults };
|
|
6446
|
+
}
|
|
6447
|
+
static getDefaults() {
|
|
6448
|
+
return { ...Document.globalDefaults };
|
|
6449
|
+
}
|
|
6450
|
+
static resetDefaults() {
|
|
6451
|
+
Document.globalDefaults = {};
|
|
6452
|
+
}
|
|
6453
|
+
static applyGlobalDefaultsToParagraph(para) {
|
|
6454
|
+
const d = Document.globalDefaults;
|
|
6455
|
+
if (!d.font && d.fontSize === undefined && !d.fontColor)
|
|
6456
|
+
return;
|
|
6457
|
+
for (const run of para.getRuns()) {
|
|
6458
|
+
const fmt = run.getFormatting();
|
|
6459
|
+
if (d.font && !fmt.font)
|
|
6460
|
+
run.setFont(d.font);
|
|
6461
|
+
if (d.fontSize !== undefined && fmt.size === undefined)
|
|
6462
|
+
run.setSize(d.fontSize);
|
|
6463
|
+
if (d.fontColor && !fmt.color)
|
|
6464
|
+
run.setColor(d.fontColor);
|
|
6465
|
+
}
|
|
6466
|
+
}
|
|
6288
6467
|
dispose() {
|
|
6468
|
+
this._events.removeAllListeners();
|
|
6289
6469
|
this.bodyElements = [];
|
|
6290
6470
|
this.parser.clearParseErrors();
|
|
6291
6471
|
this.stylesManager.clear();
|
|
@@ -6358,7 +6538,7 @@ class Document {
|
|
|
6358
6538
|
this.rsids = new Set();
|
|
6359
6539
|
this.documentProtection = undefined;
|
|
6360
6540
|
this.properties = {};
|
|
6361
|
-
this.section =
|
|
6541
|
+
this.section = Section_js_1.Section.create();
|
|
6362
6542
|
this.namespaces = {};
|
|
6363
6543
|
}
|
|
6364
6544
|
getSizeStats() {
|
|
@@ -6532,13 +6712,13 @@ class Document {
|
|
|
6532
6712
|
const relsContent = this.zipHandler.getFileAsString(relsPath);
|
|
6533
6713
|
if (relsContent) {
|
|
6534
6714
|
const rels = [];
|
|
6535
|
-
const relationshipElements =
|
|
6715
|
+
const relationshipElements = XMLParser_js_1.XMLParser.extractElements(relsContent, 'Relationship');
|
|
6536
6716
|
for (const relElement of relationshipElements) {
|
|
6537
6717
|
const rel = {};
|
|
6538
|
-
const id =
|
|
6539
|
-
const type =
|
|
6540
|
-
const target =
|
|
6541
|
-
const targetMode =
|
|
6718
|
+
const id = XMLParser_js_1.XMLParser.extractAttribute(relElement, 'Id');
|
|
6719
|
+
const type = XMLParser_js_1.XMLParser.extractAttribute(relElement, 'Type');
|
|
6720
|
+
const target = XMLParser_js_1.XMLParser.extractAttribute(relElement, 'Target');
|
|
6721
|
+
const targetMode = XMLParser_js_1.XMLParser.extractAttribute(relElement, 'TargetMode');
|
|
6542
6722
|
if (id)
|
|
6543
6723
|
rel.id = id;
|
|
6544
6724
|
if (type)
|
|
@@ -6568,13 +6748,13 @@ class Document {
|
|
|
6568
6748
|
return [];
|
|
6569
6749
|
}
|
|
6570
6750
|
const relationships = [];
|
|
6571
|
-
const relationshipElements =
|
|
6751
|
+
const relationshipElements = XMLParser_js_1.XMLParser.extractElements(relsContent, 'Relationship');
|
|
6572
6752
|
for (const relElement of relationshipElements) {
|
|
6573
6753
|
const rel = {};
|
|
6574
|
-
const id =
|
|
6575
|
-
const type =
|
|
6576
|
-
const target =
|
|
6577
|
-
const targetMode =
|
|
6754
|
+
const id = XMLParser_js_1.XMLParser.extractAttribute(relElement, 'Id');
|
|
6755
|
+
const type = XMLParser_js_1.XMLParser.extractAttribute(relElement, 'Type');
|
|
6756
|
+
const target = XMLParser_js_1.XMLParser.extractAttribute(relElement, 'Target');
|
|
6757
|
+
const targetMode = XMLParser_js_1.XMLParser.extractAttribute(relElement, 'TargetMode');
|
|
6578
6758
|
if (id)
|
|
6579
6759
|
rel.id = id;
|
|
6580
6760
|
if (type)
|
|
@@ -6667,7 +6847,7 @@ class Document {
|
|
|
6667
6847
|
for (const table of this.getTables()) {
|
|
6668
6848
|
for (const row of table.getRows()) {
|
|
6669
6849
|
for (const cell of row.getCells()) {
|
|
6670
|
-
if (cell instanceof
|
|
6850
|
+
if (cell instanceof TableCell_js_1.TableCell) {
|
|
6671
6851
|
const cellParagraphs = cell.getParagraphs();
|
|
6672
6852
|
for (let pIndex = 0; pIndex < cellParagraphs.length; pIndex++) {
|
|
6673
6853
|
const paragraph = cellParagraphs[pIndex];
|
|
@@ -6912,24 +7092,24 @@ class Document {
|
|
|
6912
7092
|
if (trackChanges && !this.trackChangesEnabled) {
|
|
6913
7093
|
const parentParagraph = run._getParentParagraph();
|
|
6914
7094
|
if (parentParagraph) {
|
|
6915
|
-
const segments = (0,
|
|
6916
|
-
const useGranular = (0,
|
|
7095
|
+
const segments = (0, textDiff_js_1.diffText)(originalText, newText);
|
|
7096
|
+
const useGranular = (0, textDiff_js_1.diffHasUnchangedParts)(segments);
|
|
6917
7097
|
const now = new Date();
|
|
6918
7098
|
const formatting = run.getFormatting();
|
|
6919
7099
|
const newContent = [];
|
|
6920
7100
|
if (useGranular) {
|
|
6921
7101
|
for (const seg of segments) {
|
|
6922
7102
|
if (seg.type === 'equal') {
|
|
6923
|
-
newContent.push(new
|
|
7103
|
+
newContent.push(new Run_js_1.Run(seg.text, formatting));
|
|
6924
7104
|
}
|
|
6925
7105
|
else if (seg.type === 'delete') {
|
|
6926
|
-
const delRev =
|
|
7106
|
+
const delRev = Revision_js_1.Revision.createDeletion(author, new Run_js_1.Run(seg.text, formatting), now);
|
|
6927
7107
|
this.revisionManager.register(delRev);
|
|
6928
7108
|
revisions.push(delRev);
|
|
6929
7109
|
newContent.push(delRev);
|
|
6930
7110
|
}
|
|
6931
7111
|
else if (seg.type === 'insert') {
|
|
6932
|
-
const insRev =
|
|
7112
|
+
const insRev = Revision_js_1.Revision.createInsertion(author, new Run_js_1.Run(seg.text, formatting), now);
|
|
6933
7113
|
this.revisionManager.register(insRev);
|
|
6934
7114
|
revisions.push(insRev);
|
|
6935
7115
|
newContent.push(insRev);
|
|
@@ -6937,11 +7117,11 @@ class Document {
|
|
|
6937
7117
|
}
|
|
6938
7118
|
}
|
|
6939
7119
|
else {
|
|
6940
|
-
const deletion =
|
|
7120
|
+
const deletion = Revision_js_1.Revision.createDeletion(author, new Run_js_1.Run(originalText, formatting), now);
|
|
6941
7121
|
this.revisionManager.register(deletion);
|
|
6942
7122
|
revisions.push(deletion);
|
|
6943
7123
|
newContent.push(deletion);
|
|
6944
|
-
const insertion =
|
|
7124
|
+
const insertion = Revision_js_1.Revision.createInsertion(author, new Run_js_1.Run(newText, formatting), now);
|
|
6945
7125
|
this.revisionManager.register(insertion);
|
|
6946
7126
|
revisions.push(insertion);
|
|
6947
7127
|
newContent.push(insertion);
|
|
@@ -7132,7 +7312,7 @@ class Document {
|
|
|
7132
7312
|
let count = 0;
|
|
7133
7313
|
let paraIndex = 0;
|
|
7134
7314
|
for (const element of this.bodyElements) {
|
|
7135
|
-
if (element instanceof
|
|
7315
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
7136
7316
|
const result = callback(element, paraIndex);
|
|
7137
7317
|
count++;
|
|
7138
7318
|
paraIndex++;
|
|
@@ -7146,7 +7326,7 @@ class Document {
|
|
|
7146
7326
|
let count = 0;
|
|
7147
7327
|
let tableIndex = 0;
|
|
7148
7328
|
for (const element of this.bodyElements) {
|
|
7149
|
-
if (element instanceof
|
|
7329
|
+
if (element instanceof Table_js_1.Table) {
|
|
7150
7330
|
const result = callback(element, tableIndex);
|
|
7151
7331
|
count++;
|
|
7152
7332
|
tableIndex++;
|
|
@@ -7163,14 +7343,14 @@ class Document {
|
|
|
7163
7343
|
toMarkdown() {
|
|
7164
7344
|
const lines = [];
|
|
7165
7345
|
for (const element of this.bodyElements) {
|
|
7166
|
-
if (element instanceof
|
|
7346
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
7167
7347
|
const mdLine = this.paragraphToMarkdown(element);
|
|
7168
7348
|
if (mdLine !== null) {
|
|
7169
7349
|
lines.push(mdLine);
|
|
7170
7350
|
lines.push('');
|
|
7171
7351
|
}
|
|
7172
7352
|
}
|
|
7173
|
-
else if (element instanceof
|
|
7353
|
+
else if (element instanceof Table_js_1.Table) {
|
|
7174
7354
|
lines.push(...this.tableToMarkdown(element));
|
|
7175
7355
|
lines.push('');
|
|
7176
7356
|
}
|
|
@@ -7198,7 +7378,7 @@ class Document {
|
|
|
7198
7378
|
paragraphContentToMarkdown(para) {
|
|
7199
7379
|
const parts = [];
|
|
7200
7380
|
for (const item of para.getContent()) {
|
|
7201
|
-
if (item instanceof
|
|
7381
|
+
if (item instanceof Run_js_1.Run) {
|
|
7202
7382
|
const runText = item.getText();
|
|
7203
7383
|
if (!runText)
|
|
7204
7384
|
continue;
|
|
@@ -7222,7 +7402,7 @@ class Document {
|
|
|
7222
7402
|
}
|
|
7223
7403
|
parts.push(md);
|
|
7224
7404
|
}
|
|
7225
|
-
else if (item instanceof
|
|
7405
|
+
else if (item instanceof Hyperlink_js_1.Hyperlink) {
|
|
7226
7406
|
const url = item.getUrl() || '';
|
|
7227
7407
|
const linkText = item.getText() || url;
|
|
7228
7408
|
parts.push(`[${linkText}](${url})`);
|
|
@@ -7261,7 +7441,7 @@ class Document {
|
|
|
7261
7441
|
}
|
|
7262
7442
|
};
|
|
7263
7443
|
for (const element of this.bodyElements) {
|
|
7264
|
-
if (element instanceof
|
|
7444
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
7265
7445
|
const headingLevel = element.detectHeadingLevel();
|
|
7266
7446
|
const style = element.getStyle();
|
|
7267
7447
|
const isBullet = style?.toLowerCase().includes('bullet') || style === 'ListBullet';
|
|
@@ -7289,7 +7469,7 @@ class Document {
|
|
|
7289
7469
|
}
|
|
7290
7470
|
}
|
|
7291
7471
|
}
|
|
7292
|
-
else if (element instanceof
|
|
7472
|
+
else if (element instanceof Table_js_1.Table) {
|
|
7293
7473
|
closeList();
|
|
7294
7474
|
parts.push(this.tableToHTML(element));
|
|
7295
7475
|
}
|
|
@@ -7316,7 +7496,7 @@ class Document {
|
|
|
7316
7496
|
paragraphContentToHTML(para) {
|
|
7317
7497
|
const parts = [];
|
|
7318
7498
|
for (const item of para.getContent()) {
|
|
7319
|
-
if (item instanceof
|
|
7499
|
+
if (item instanceof Run_js_1.Run) {
|
|
7320
7500
|
const text = item.getText();
|
|
7321
7501
|
if (!text)
|
|
7322
7502
|
continue;
|
|
@@ -7340,7 +7520,7 @@ class Document {
|
|
|
7340
7520
|
}
|
|
7341
7521
|
parts.push(html);
|
|
7342
7522
|
}
|
|
7343
|
-
else if (item instanceof
|
|
7523
|
+
else if (item instanceof Hyperlink_js_1.Hyperlink) {
|
|
7344
7524
|
const url = this.escapeHTML(item.getUrl() || '');
|
|
7345
7525
|
const linkText = this.escapeHTML(item.getText() || url);
|
|
7346
7526
|
parts.push(`<a href="${url}">${linkText}</a>`);
|
|
@@ -7393,18 +7573,18 @@ class Document {
|
|
|
7393
7573
|
tables: tables.length,
|
|
7394
7574
|
images: this.imageManager.getImageCount(),
|
|
7395
7575
|
headings: headings.length,
|
|
7396
|
-
sections: this.bodyElements.filter((el) => el instanceof
|
|
7576
|
+
sections: this.bodyElements.filter((el) => el instanceof Section_js_1.Section).length || 1,
|
|
7397
7577
|
},
|
|
7398
7578
|
headings: headings.map((h) => ({ level: h.level, text: h.text })),
|
|
7399
7579
|
body: this.bodyElements.map((el) => {
|
|
7400
|
-
if (el instanceof
|
|
7580
|
+
if (el instanceof Paragraph_js_1.Paragraph) {
|
|
7401
7581
|
return {
|
|
7402
7582
|
type: 'paragraph',
|
|
7403
7583
|
text: el.getText(),
|
|
7404
7584
|
style: el.getStyle(),
|
|
7405
7585
|
};
|
|
7406
7586
|
}
|
|
7407
|
-
if (el instanceof
|
|
7587
|
+
if (el instanceof Table_js_1.Table) {
|
|
7408
7588
|
return {
|
|
7409
7589
|
type: 'table',
|
|
7410
7590
|
text: `${el.getRows().length} rows x ${el.getRows()[0]?.getCells().length ?? 0} cols`,
|
|
@@ -7418,16 +7598,16 @@ class Document {
|
|
|
7418
7598
|
const results = [];
|
|
7419
7599
|
for (const para of this.getAllParagraphs()) {
|
|
7420
7600
|
for (const item of para.getContent()) {
|
|
7421
|
-
if (item instanceof
|
|
7601
|
+
if (item instanceof ImageRun_js_1.ImageRun) {
|
|
7422
7602
|
const image = item.getImageElement();
|
|
7423
7603
|
const altText = image.getAltText();
|
|
7424
7604
|
if (!altText || altText === 'Image') {
|
|
7425
7605
|
results.push(image);
|
|
7426
7606
|
}
|
|
7427
7607
|
}
|
|
7428
|
-
if (item instanceof
|
|
7608
|
+
if (item instanceof Revision_js_1.Revision) {
|
|
7429
7609
|
for (const revContent of item.getContent()) {
|
|
7430
|
-
if (revContent instanceof
|
|
7610
|
+
if (revContent instanceof ImageRun_js_1.ImageRun) {
|
|
7431
7611
|
const image = revContent.getImageElement();
|
|
7432
7612
|
const altText = image.getAltText();
|
|
7433
7613
|
if (!altText || altText === 'Image') {
|
|
@@ -7462,7 +7642,7 @@ class Document {
|
|
|
7462
7642
|
content: [],
|
|
7463
7643
|
};
|
|
7464
7644
|
for (const element of this.bodyElements) {
|
|
7465
|
-
if (element instanceof
|
|
7645
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
7466
7646
|
const headingLevel = element.detectHeadingLevel();
|
|
7467
7647
|
if (headingLevel !== null && headingLevel <= maxLevel) {
|
|
7468
7648
|
if (current.heading || current.content.length > 0) {
|
|
@@ -7497,18 +7677,19 @@ class Document {
|
|
|
7497
7677
|
}
|
|
7498
7678
|
if (index >= 0 && index < this.bodyElements.length) {
|
|
7499
7679
|
const element = this.bodyElements[index];
|
|
7500
|
-
if (element instanceof
|
|
7680
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
7501
7681
|
if (this.trackChangesEnabled && this.trackingContext.isEnabled()) {
|
|
7502
7682
|
const runs = element.getRuns();
|
|
7503
7683
|
if (runs.length > 0) {
|
|
7504
7684
|
const author = this.trackingContext.getAuthor();
|
|
7505
|
-
const deletion =
|
|
7685
|
+
const deletion = Revision_js_1.Revision.createDeletion(author, runs);
|
|
7506
7686
|
this.trackingContext.getRevisionManager().register(deletion);
|
|
7507
7687
|
element.addRevision(deletion);
|
|
7508
7688
|
}
|
|
7509
7689
|
return true;
|
|
7510
7690
|
}
|
|
7511
7691
|
this.bodyElements.splice(index, 1);
|
|
7692
|
+
this._emitElementRemoved(element);
|
|
7512
7693
|
return true;
|
|
7513
7694
|
}
|
|
7514
7695
|
}
|
|
@@ -7533,21 +7714,22 @@ class Document {
|
|
|
7533
7714
|
}
|
|
7534
7715
|
if (index >= 0 && index < this.bodyElements.length) {
|
|
7535
7716
|
const element = this.bodyElements[index];
|
|
7536
|
-
if (element instanceof
|
|
7717
|
+
if (element instanceof Table_js_1.Table) {
|
|
7537
7718
|
this.bodyElements.splice(index, 1);
|
|
7719
|
+
this._emitElementRemoved(element);
|
|
7538
7720
|
return true;
|
|
7539
7721
|
}
|
|
7540
7722
|
}
|
|
7541
7723
|
return false;
|
|
7542
7724
|
}
|
|
7543
7725
|
validateParagraph(paragraph) {
|
|
7544
|
-
if (!(paragraph instanceof
|
|
7726
|
+
if (!(paragraph instanceof Paragraph_js_1.Paragraph)) {
|
|
7545
7727
|
throw new Error('insertParagraphAt: parameter must be a Paragraph instance');
|
|
7546
7728
|
}
|
|
7547
7729
|
const paraId = paragraph.getFormatting().paraId;
|
|
7548
7730
|
if (paraId) {
|
|
7549
7731
|
const existingIds = this.bodyElements
|
|
7550
|
-
.filter((el) => el instanceof
|
|
7732
|
+
.filter((el) => el instanceof Paragraph_js_1.Paragraph)
|
|
7551
7733
|
.map((p) => p.getFormatting().paraId)
|
|
7552
7734
|
.filter((id) => id === paraId);
|
|
7553
7735
|
if (existingIds.length > 0) {
|
|
@@ -7556,15 +7738,15 @@ class Document {
|
|
|
7556
7738
|
}
|
|
7557
7739
|
const style = paragraph.getFormatting().style;
|
|
7558
7740
|
if (style && !this.stylesManager.hasStyle(style)) {
|
|
7559
|
-
|
|
7741
|
+
logger_js_1.defaultLogger.warn(`Style "${style}" not found in document. Paragraph will fall back to Normal style.`);
|
|
7560
7742
|
}
|
|
7561
7743
|
const numbering = paragraph.getFormatting().numbering;
|
|
7562
7744
|
if (numbering && !this.numberingManager.hasInstance(numbering.numId)) {
|
|
7563
|
-
|
|
7745
|
+
logger_js_1.defaultLogger.warn(`Numbering ID ${numbering.numId} not found in document. List formatting will not display.`);
|
|
7564
7746
|
}
|
|
7565
7747
|
}
|
|
7566
7748
|
validateTable(table) {
|
|
7567
|
-
if (!(table instanceof
|
|
7749
|
+
if (!(table instanceof Table_js_1.Table)) {
|
|
7568
7750
|
throw new Error('insertTableAt: parameter must be a Table instance');
|
|
7569
7751
|
}
|
|
7570
7752
|
const rows = table.getRows();
|
|
@@ -7577,11 +7759,11 @@ class Document {
|
|
|
7577
7759
|
}
|
|
7578
7760
|
const tableStyle = table.getFormatting().style;
|
|
7579
7761
|
if (tableStyle && !this.stylesManager.hasStyle(tableStyle)) {
|
|
7580
|
-
|
|
7762
|
+
logger_js_1.defaultLogger.warn(`Table style "${tableStyle}" not found in document. Table will use default formatting.`);
|
|
7581
7763
|
}
|
|
7582
7764
|
}
|
|
7583
7765
|
validateToc(toc) {
|
|
7584
|
-
if (!(toc instanceof
|
|
7766
|
+
if (!(toc instanceof TableOfContentsElement_js_1.TableOfContentsElement)) {
|
|
7585
7767
|
throw new Error('insertTocAt: parameter must be a TableOfContentsElement instance');
|
|
7586
7768
|
}
|
|
7587
7769
|
const hasHeadings = [
|
|
@@ -7596,7 +7778,7 @@ class Document {
|
|
|
7596
7778
|
'Heading9',
|
|
7597
7779
|
].some((style) => this.stylesManager.hasStyle(style));
|
|
7598
7780
|
if (!hasHeadings) {
|
|
7599
|
-
|
|
7781
|
+
logger_js_1.defaultLogger.warn('No heading styles found in document. Table of Contents may not display entries correctly.');
|
|
7600
7782
|
}
|
|
7601
7783
|
}
|
|
7602
7784
|
normalizeIndex(index) {
|
|
@@ -7612,12 +7794,14 @@ class Document {
|
|
|
7612
7794
|
this.validateParagraph(paragraph);
|
|
7613
7795
|
index = this.normalizeIndex(index);
|
|
7614
7796
|
this.bodyElements.splice(index, 0, paragraph);
|
|
7797
|
+
this._emitElementAdded(paragraph, index);
|
|
7615
7798
|
return this;
|
|
7616
7799
|
}
|
|
7617
7800
|
insertTableAt(index, table) {
|
|
7618
7801
|
this.validateTable(table);
|
|
7619
7802
|
index = this.normalizeIndex(index);
|
|
7620
7803
|
this.bodyElements.splice(index, 0, table);
|
|
7804
|
+
this._emitElementAdded(table, index);
|
|
7621
7805
|
return this;
|
|
7622
7806
|
}
|
|
7623
7807
|
insertTocAt(index, toc) {
|
|
@@ -7629,7 +7813,7 @@ class Document {
|
|
|
7629
7813
|
replaceParagraphAt(index, paragraph) {
|
|
7630
7814
|
if (index >= 0 && index < this.bodyElements.length) {
|
|
7631
7815
|
const element = this.bodyElements[index];
|
|
7632
|
-
if (element instanceof
|
|
7816
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
7633
7817
|
this.validateParagraph(paragraph);
|
|
7634
7818
|
this.bodyElements[index] = paragraph;
|
|
7635
7819
|
return true;
|
|
@@ -7640,7 +7824,7 @@ class Document {
|
|
|
7640
7824
|
replaceTableAt(index, table) {
|
|
7641
7825
|
if (index >= 0 && index < this.bodyElements.length) {
|
|
7642
7826
|
const element = this.bodyElements[index];
|
|
7643
|
-
if (element instanceof
|
|
7827
|
+
if (element instanceof Table_js_1.Table) {
|
|
7644
7828
|
this.validateTable(table);
|
|
7645
7829
|
this.bodyElements[index] = table;
|
|
7646
7830
|
return true;
|
|
@@ -7674,7 +7858,7 @@ class Document {
|
|
|
7674
7858
|
removeTocAt(index) {
|
|
7675
7859
|
if (index >= 0 && index < this.bodyElements.length) {
|
|
7676
7860
|
const element = this.bodyElements[index];
|
|
7677
|
-
if (element instanceof
|
|
7861
|
+
if (element instanceof TableOfContentsElement_js_1.TableOfContentsElement) {
|
|
7678
7862
|
this.bodyElements.splice(index, 1);
|
|
7679
7863
|
return true;
|
|
7680
7864
|
}
|
|
@@ -7689,7 +7873,8 @@ class Document {
|
|
|
7689
7873
|
}
|
|
7690
7874
|
removeBodyElementAt(index) {
|
|
7691
7875
|
if (index >= 0 && index < this.bodyElements.length) {
|
|
7692
|
-
this.bodyElements.splice(index, 1);
|
|
7876
|
+
const [removed] = this.bodyElements.splice(index, 1);
|
|
7877
|
+
this._emitElementRemoved(removed);
|
|
7693
7878
|
return true;
|
|
7694
7879
|
}
|
|
7695
7880
|
return false;
|
|
@@ -7699,6 +7884,7 @@ class Document {
|
|
|
7699
7884
|
if (index === -1)
|
|
7700
7885
|
return false;
|
|
7701
7886
|
this.bodyElements.splice(index, 1);
|
|
7887
|
+
this._emitElementRemoved(element);
|
|
7702
7888
|
return true;
|
|
7703
7889
|
}
|
|
7704
7890
|
insertAfter(reference, element) {
|
|
@@ -7706,6 +7892,7 @@ class Document {
|
|
|
7706
7892
|
if (index === -1)
|
|
7707
7893
|
return false;
|
|
7708
7894
|
this.bodyElements.splice(index + 1, 0, element);
|
|
7895
|
+
this._emitElementAdded(element, index + 1);
|
|
7709
7896
|
return true;
|
|
7710
7897
|
}
|
|
7711
7898
|
insertBefore(reference, element) {
|
|
@@ -7713,6 +7900,7 @@ class Document {
|
|
|
7713
7900
|
if (index === -1)
|
|
7714
7901
|
return false;
|
|
7715
7902
|
this.bodyElements.splice(index, 0, element);
|
|
7903
|
+
this._emitElementAdded(element, index);
|
|
7716
7904
|
return true;
|
|
7717
7905
|
}
|
|
7718
7906
|
replaceElement(oldElement, newElement) {
|
|
@@ -7720,11 +7908,14 @@ class Document {
|
|
|
7720
7908
|
if (index === -1)
|
|
7721
7909
|
return false;
|
|
7722
7910
|
this.bodyElements[index] = newElement;
|
|
7911
|
+
this._emitElementRemoved(oldElement);
|
|
7912
|
+
this._emitElementAdded(newElement, index);
|
|
7723
7913
|
return true;
|
|
7724
7914
|
}
|
|
7725
7915
|
insertBodyElementAt(index, element) {
|
|
7726
7916
|
const clampedIndex = Math.max(0, Math.min(index, this.bodyElements.length));
|
|
7727
7917
|
this.bodyElements.splice(clampedIndex, 0, element);
|
|
7918
|
+
this._emitElementAdded(element, clampedIndex);
|
|
7728
7919
|
}
|
|
7729
7920
|
setBodyElements(elements) {
|
|
7730
7921
|
this.bodyElements = elements;
|
|
@@ -7733,12 +7924,12 @@ class Document {
|
|
|
7733
7924
|
const hyperlinks = [];
|
|
7734
7925
|
const extractHyperlinksFromParagraph = (para) => {
|
|
7735
7926
|
for (const content of para.getContent()) {
|
|
7736
|
-
if (content instanceof
|
|
7927
|
+
if (content instanceof Hyperlink_js_1.Hyperlink) {
|
|
7737
7928
|
hyperlinks.push({ hyperlink: content, paragraph: para });
|
|
7738
7929
|
}
|
|
7739
|
-
else if (content instanceof
|
|
7930
|
+
else if (content instanceof Revision_js_1.Revision) {
|
|
7740
7931
|
for (const revContent of content.getContent()) {
|
|
7741
|
-
if (revContent instanceof
|
|
7932
|
+
if (revContent instanceof Hyperlink_js_1.Hyperlink) {
|
|
7742
7933
|
hyperlinks.push({ hyperlink: revContent, paragraph: para });
|
|
7743
7934
|
}
|
|
7744
7935
|
}
|
|
@@ -7751,7 +7942,7 @@ class Document {
|
|
|
7751
7942
|
for (const table of this.getTables()) {
|
|
7752
7943
|
for (const row of table.getRows()) {
|
|
7753
7944
|
for (const cell of row.getCells()) {
|
|
7754
|
-
const cellParagraphs = cell instanceof
|
|
7945
|
+
const cellParagraphs = cell instanceof TableCell_js_1.TableCell ? cell.getParagraphs() : [];
|
|
7755
7946
|
for (const para of cellParagraphs) {
|
|
7756
7947
|
extractHyperlinksFromParagraph(para);
|
|
7757
7948
|
}
|
|
@@ -7764,14 +7955,14 @@ class Document {
|
|
|
7764
7955
|
const ids = new Set();
|
|
7765
7956
|
const scanParagraph = (para) => {
|
|
7766
7957
|
for (const item of para.getContent()) {
|
|
7767
|
-
if (item instanceof
|
|
7958
|
+
if (item instanceof Hyperlink_js_1.Hyperlink) {
|
|
7768
7959
|
const relId = item.getRelationshipId();
|
|
7769
7960
|
if (relId)
|
|
7770
7961
|
ids.add(relId);
|
|
7771
7962
|
}
|
|
7772
|
-
if (item instanceof
|
|
7963
|
+
if (item instanceof Revision_js_1.Revision) {
|
|
7773
7964
|
for (const revContent of item.getContent()) {
|
|
7774
|
-
if (revContent instanceof
|
|
7965
|
+
if (revContent instanceof Hyperlink_js_1.Hyperlink) {
|
|
7775
7966
|
const relId = revContent.getRelationshipId();
|
|
7776
7967
|
if (relId)
|
|
7777
7968
|
ids.add(relId);
|
|
@@ -7781,10 +7972,10 @@ class Document {
|
|
|
7781
7972
|
}
|
|
7782
7973
|
};
|
|
7783
7974
|
const scanElement = (element) => {
|
|
7784
|
-
if (element instanceof
|
|
7975
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
7785
7976
|
scanParagraph(element);
|
|
7786
7977
|
}
|
|
7787
|
-
else if (element instanceof
|
|
7978
|
+
else if (element instanceof Table_js_1.Table) {
|
|
7788
7979
|
for (let row = 0; row < element.getRowCount(); row++) {
|
|
7789
7980
|
for (let col = 0; col < element.getColumnCount(); col++) {
|
|
7790
7981
|
const cell = element.getCell(row, col);
|
|
@@ -7803,7 +7994,7 @@ class Document {
|
|
|
7803
7994
|
}
|
|
7804
7995
|
}
|
|
7805
7996
|
}
|
|
7806
|
-
else if (element instanceof
|
|
7997
|
+
else if (element instanceof StructuredDocumentTag_js_1.StructuredDocumentTag) {
|
|
7807
7998
|
for (const item of element.getContent()) {
|
|
7808
7999
|
scanElement(item);
|
|
7809
8000
|
}
|
|
@@ -7837,12 +8028,12 @@ class Document {
|
|
|
7837
8028
|
defragmentHyperlinks(options) {
|
|
7838
8029
|
const { resetFormatting = false, cleanupRelationships = false } = options || {};
|
|
7839
8030
|
if (this.trackChangesEnabled) {
|
|
7840
|
-
|
|
8031
|
+
logger_js_1.defaultLogger.warn('defragmentHyperlinks skipped: track changes is enabled. ' +
|
|
7841
8032
|
'Call defragmentHyperlinks before enableTrackChanges() to avoid field corruption.');
|
|
7842
8033
|
return 0;
|
|
7843
8034
|
}
|
|
7844
8035
|
let mergedCount = 0;
|
|
7845
|
-
const parser = new
|
|
8036
|
+
const parser = new DocumentParser_js_1.DocumentParser();
|
|
7846
8037
|
for (const paragraph of this.getAllParagraphs()) {
|
|
7847
8038
|
const originalContent = paragraph.getContent();
|
|
7848
8039
|
parser.mergeConsecutiveHyperlinks(paragraph, resetFormatting);
|
|
@@ -7854,7 +8045,7 @@ class Document {
|
|
|
7854
8045
|
for (const table of this.getTables()) {
|
|
7855
8046
|
for (const row of table.getRows()) {
|
|
7856
8047
|
for (const cell of row.getCells()) {
|
|
7857
|
-
const cellParagraphs = cell instanceof
|
|
8048
|
+
const cellParagraphs = cell instanceof TableCell_js_1.TableCell ? cell.getParagraphs() : [];
|
|
7858
8049
|
for (const para of cellParagraphs) {
|
|
7859
8050
|
const originalContent = para.getContent();
|
|
7860
8051
|
parser.mergeConsecutiveHyperlinks(para, resetFormatting);
|
|
@@ -7870,7 +8061,7 @@ class Document {
|
|
|
7870
8061
|
const referencedIds = this.collectAllReferencedHyperlinkIds();
|
|
7871
8062
|
const removedCount = this.relationshipManager.removeOrphanedHyperlinks(referencedIds);
|
|
7872
8063
|
if (removedCount > 0) {
|
|
7873
|
-
|
|
8064
|
+
logger_js_1.defaultLogger.info(`Cleaned up ${removedCount} orphaned hyperlink relationship(s)`);
|
|
7874
8065
|
}
|
|
7875
8066
|
}
|
|
7876
8067
|
return mergedCount;
|
|
@@ -7905,7 +8096,7 @@ class Document {
|
|
|
7905
8096
|
for (const table of this.getTables()) {
|
|
7906
8097
|
for (const row of table.getRows()) {
|
|
7907
8098
|
for (const cell of row.getCells()) {
|
|
7908
|
-
const cellParagraphs = cell instanceof
|
|
8099
|
+
const cellParagraphs = cell instanceof TableCell_js_1.TableCell ? cell.getParagraphs() : [];
|
|
7909
8100
|
for (const para of cellParagraphs) {
|
|
7910
8101
|
for (const field of para.getFields()) {
|
|
7911
8102
|
results.push({ field, paragraph: para, table });
|
|
@@ -7942,7 +8133,7 @@ class Document {
|
|
|
7942
8133
|
continue;
|
|
7943
8134
|
}
|
|
7944
8135
|
const extension = image.getExtension();
|
|
7945
|
-
const result = (0,
|
|
8136
|
+
const result = (0, ImageOptimizer_js_1.optimizeImage)(originalData, extension);
|
|
7946
8137
|
if (!result)
|
|
7947
8138
|
continue;
|
|
7948
8139
|
const saved = originalData.length - result.data.length;
|
|
@@ -7993,7 +8184,7 @@ class Document {
|
|
|
7993
8184
|
for (const table of this.getTables()) {
|
|
7994
8185
|
for (const row of table.getRows()) {
|
|
7995
8186
|
for (const cell of row.getCells()) {
|
|
7996
|
-
const cellParagraphs = cell instanceof
|
|
8187
|
+
const cellParagraphs = cell instanceof TableCell_js_1.TableCell ? cell.getParagraphs() : [];
|
|
7997
8188
|
for (const para of cellParagraphs) {
|
|
7998
8189
|
runs.push(...para.getRuns());
|
|
7999
8190
|
}
|
|
@@ -8019,7 +8210,7 @@ class Document {
|
|
|
8019
8210
|
let modified = false;
|
|
8020
8211
|
const content = [...para.getContent()];
|
|
8021
8212
|
for (const item of content) {
|
|
8022
|
-
if (item instanceof
|
|
8213
|
+
if (item instanceof Run_js_1.Run) {
|
|
8023
8214
|
const text = item.getText();
|
|
8024
8215
|
const matches = [...text.matchAll(emailRegex)];
|
|
8025
8216
|
if (matches.length > 0) {
|
|
@@ -8045,15 +8236,15 @@ class Document {
|
|
|
8045
8236
|
const startIndex = match.index;
|
|
8046
8237
|
if (startIndex > lastIndex) {
|
|
8047
8238
|
const beforeText = text.slice(lastIndex, startIndex);
|
|
8048
|
-
result.push(new
|
|
8239
|
+
result.push(new Run_js_1.Run(beforeText, originalFormatting));
|
|
8049
8240
|
}
|
|
8050
|
-
const hyperlink =
|
|
8241
|
+
const hyperlink = Hyperlink_js_1.Hyperlink.createEmail(email, email, formatting);
|
|
8051
8242
|
result.push(hyperlink);
|
|
8052
8243
|
lastIndex = startIndex + email.length;
|
|
8053
8244
|
}
|
|
8054
8245
|
if (lastIndex < text.length) {
|
|
8055
8246
|
const afterText = text.slice(lastIndex);
|
|
8056
|
-
result.push(new
|
|
8247
|
+
result.push(new Run_js_1.Run(afterText, originalFormatting));
|
|
8057
8248
|
}
|
|
8058
8249
|
return result;
|
|
8059
8250
|
}
|
|
@@ -8085,7 +8276,7 @@ class Document {
|
|
|
8085
8276
|
let lastWasEmpty = false;
|
|
8086
8277
|
const toRemove = [];
|
|
8087
8278
|
this.bodyElements.forEach((element, index) => {
|
|
8088
|
-
if (element instanceof
|
|
8279
|
+
if (element instanceof Paragraph_js_1.Paragraph) {
|
|
8089
8280
|
const isEmpty = element.getText().trim() === '';
|
|
8090
8281
|
if (isEmpty && lastWasEmpty) {
|
|
8091
8282
|
toRemove.push(index);
|
|
@@ -8134,7 +8325,7 @@ class Document {
|
|
|
8134
8325
|
for (const table of this.getTables()) {
|
|
8135
8326
|
for (const row of table.getRows()) {
|
|
8136
8327
|
for (const cell of row.getCells()) {
|
|
8137
|
-
const cellParagraphs = cell instanceof
|
|
8328
|
+
const cellParagraphs = cell instanceof TableCell_js_1.TableCell ? cell.getParagraphs() : [];
|
|
8138
8329
|
for (const para of cellParagraphs) {
|
|
8139
8330
|
if (standardParagraphSpacing) {
|
|
8140
8331
|
if (standardParagraphSpacing.before !== undefined) {
|
|
@@ -8184,16 +8375,16 @@ class Document {
|
|
|
8184
8375
|
const unwrappedBody = [];
|
|
8185
8376
|
const unwrapSDT = (sdt, target) => {
|
|
8186
8377
|
for (const item of sdt.getContent()) {
|
|
8187
|
-
if (item instanceof
|
|
8378
|
+
if (item instanceof Paragraph_js_1.Paragraph || item instanceof Table_js_1.Table) {
|
|
8188
8379
|
target.push(item);
|
|
8189
8380
|
}
|
|
8190
|
-
else if (item instanceof
|
|
8381
|
+
else if (item instanceof StructuredDocumentTag_js_1.StructuredDocumentTag) {
|
|
8191
8382
|
unwrapSDT(item, target);
|
|
8192
8383
|
}
|
|
8193
8384
|
}
|
|
8194
8385
|
};
|
|
8195
8386
|
for (const element of this.bodyElements) {
|
|
8196
|
-
if (element instanceof
|
|
8387
|
+
if (element instanceof StructuredDocumentTag_js_1.StructuredDocumentTag) {
|
|
8197
8388
|
unwrapSDT(element, unwrappedBody);
|
|
8198
8389
|
}
|
|
8199
8390
|
else {
|