docxmlater 10.1.3 → 10.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +759 -754
- package/dist/constants/legacyCompatFlags.js +1 -1
- package/dist/constants/legacyCompatFlags.js.map +1 -1
- package/dist/constants/limits.js.map +1 -1
- package/dist/core/Document.d.ts +50 -50
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +483 -471
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentContent.d.ts +9 -9
- package/dist/core/DocumentContent.d.ts.map +1 -1
- package/dist/core/DocumentContent.js +1 -1
- package/dist/core/DocumentContent.js.map +1 -1
- package/dist/core/DocumentGenerator.d.ts +11 -11
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +251 -251
- package/dist/core/DocumentGenerator.js.map +1 -1
- package/dist/core/DocumentIdManager.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 +2123 -2155
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/DocumentValidator.d.ts.map +1 -1
- package/dist/core/DocumentValidator.js +2 -5
- package/dist/core/DocumentValidator.js.map +1 -1
- package/dist/core/Relationship.js.map +1 -1
- package/dist/core/RelationshipManager.d.ts.map +1 -1
- package/dist/core/RelationshipManager.js +3 -3
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/AlternateContent.js.map +1 -1
- package/dist/elements/Bookmark.d.ts.map +1 -1
- package/dist/elements/Bookmark.js +3 -1
- package/dist/elements/Bookmark.js.map +1 -1
- package/dist/elements/BookmarkManager.d.ts.map +1 -1
- package/dist/elements/BookmarkManager.js.map +1 -1
- package/dist/elements/Comment.d.ts.map +1 -1
- package/dist/elements/Comment.js +9 -6
- package/dist/elements/Comment.js.map +1 -1
- package/dist/elements/CommentManager.d.ts.map +1 -1
- package/dist/elements/CommentManager.js +18 -17
- package/dist/elements/CommentManager.js.map +1 -1
- package/dist/elements/CommonTypes.d.ts +21 -21
- package/dist/elements/CommonTypes.d.ts.map +1 -1
- package/dist/elements/CommonTypes.js +56 -56
- package/dist/elements/CommonTypes.js.map +1 -1
- package/dist/elements/CustomXml.js.map +1 -1
- package/dist/elements/Endnote.d.ts.map +1 -1
- package/dist/elements/Endnote.js +6 -6
- package/dist/elements/Endnote.js.map +1 -1
- package/dist/elements/EndnoteManager.d.ts.map +1 -1
- package/dist/elements/EndnoteManager.js +6 -7
- package/dist/elements/EndnoteManager.js.map +1 -1
- package/dist/elements/Field.d.ts.map +1 -1
- package/dist/elements/Field.js +82 -25
- package/dist/elements/Field.js.map +1 -1
- package/dist/elements/FieldHelpers.d.ts.map +1 -1
- package/dist/elements/FieldHelpers.js.map +1 -1
- package/dist/elements/FontManager.d.ts.map +1 -1
- package/dist/elements/FontManager.js +1 -1
- package/dist/elements/FontManager.js.map +1 -1
- package/dist/elements/Footer.js +2 -2
- package/dist/elements/Footer.js.map +1 -1
- package/dist/elements/Footnote.d.ts.map +1 -1
- package/dist/elements/Footnote.js +6 -6
- package/dist/elements/Footnote.js.map +1 -1
- package/dist/elements/FootnoteManager.d.ts.map +1 -1
- package/dist/elements/FootnoteManager.js +6 -7
- package/dist/elements/FootnoteManager.js.map +1 -1
- package/dist/elements/Header.js +2 -2
- package/dist/elements/Header.js.map +1 -1
- package/dist/elements/HeaderFooterManager.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts +5 -3
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +134 -76
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +238 -106
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/ImageManager.d.ts.map +1 -1
- package/dist/elements/ImageManager.js +1 -1
- package/dist/elements/ImageManager.js.map +1 -1
- package/dist/elements/ImageRun.js +1 -1
- package/dist/elements/ImageRun.js.map +1 -1
- package/dist/elements/MathElement.js.map +1 -1
- package/dist/elements/Paragraph.d.ts +24 -24
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +181 -188
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/PreservedElement.js.map +1 -1
- package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
- package/dist/elements/PropertyChangeTypes.js +6 -6
- package/dist/elements/PropertyChangeTypes.js.map +1 -1
- package/dist/elements/RangeMarker.d.ts.map +1 -1
- package/dist/elements/RangeMarker.js.map +1 -1
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +4 -5
- package/dist/elements/Revision.js.map +1 -1
- package/dist/elements/RevisionContent.js.map +1 -1
- package/dist/elements/RevisionManager.d.ts.map +1 -1
- package/dist/elements/RevisionManager.js +40 -48
- package/dist/elements/RevisionManager.js.map +1 -1
- package/dist/elements/Run.d.ts +16 -16
- package/dist/elements/Run.d.ts.map +1 -1
- package/dist/elements/Run.js +256 -238
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +36 -11
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Shape.d.ts.map +1 -1
- package/dist/elements/Shape.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts +6 -6
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +99 -104
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/Table.d.ts +11 -11
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +102 -107
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +10 -10
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +105 -106
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableGridChange.d.ts.map +1 -1
- package/dist/elements/TableGridChange.js.map +1 -1
- package/dist/elements/TableOfContents.d.ts.map +1 -1
- package/dist/elements/TableOfContents.js +4 -4
- package/dist/elements/TableOfContents.js.map +1 -1
- package/dist/elements/TableOfContentsElement.js.map +1 -1
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +13 -6
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/elements/TextBox.d.ts.map +1 -1
- package/dist/elements/TextBox.js +3 -5
- package/dist/elements/TextBox.js.map +1 -1
- package/dist/formatting/AbstractNumbering.d.ts +4 -4
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +54 -49
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingInstance.d.ts.map +1 -1
- package/dist/formatting/NumberingInstance.js +1 -3
- package/dist/formatting/NumberingInstance.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts +5 -5
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +119 -125
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/NumberingManager.d.ts.map +1 -1
- package/dist/formatting/NumberingManager.js +9 -9
- package/dist/formatting/NumberingManager.js.map +1 -1
- package/dist/formatting/Style.d.ts +11 -11
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +219 -247
- 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 +96 -102
- 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 +6 -6
- package/dist/helpers/CleanupHelper.js.map +1 -1
- package/dist/images/ImageOptimizer.js +7 -7
- package/dist/images/ImageOptimizer.js.map +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/managers/DrawingManager.js.map +1 -1
- package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
- package/dist/tracking/DocumentTrackingContext.js +23 -7
- package/dist/tracking/DocumentTrackingContext.js.map +1 -1
- package/dist/tracking/TrackingContext.d.ts.map +1 -1
- package/dist/tracking/TrackingContext.js.map +1 -1
- package/dist/types/compatibility-types.js.map +1 -1
- package/dist/types/formatting.js.map +1 -1
- package/dist/types/list-types.d.ts +6 -6
- package/dist/types/list-types.js.map +1 -1
- package/dist/types/settings-types.js.map +1 -1
- package/dist/types/styleConfig.d.ts +2 -2
- package/dist/types/styleConfig.js.map +1 -1
- package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
- package/dist/utils/ChangelogGenerator.js +97 -101
- package/dist/utils/ChangelogGenerator.js.map +1 -1
- package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
- package/dist/utils/CompatibilityUpgrader.js +1 -1
- package/dist/utils/CompatibilityUpgrader.js.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.js +1 -6
- package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
- package/dist/utils/MoveOperationHelper.d.ts.map +1 -1
- package/dist/utils/MoveOperationHelper.js +1 -1
- package/dist/utils/MoveOperationHelper.js.map +1 -1
- package/dist/utils/RevisionAwareProcessor.d.ts.map +1 -1
- package/dist/utils/RevisionAwareProcessor.js +2 -4
- package/dist/utils/RevisionAwareProcessor.js.map +1 -1
- package/dist/utils/RevisionWalker.d.ts.map +1 -1
- package/dist/utils/RevisionWalker.js +4 -12
- package/dist/utils/RevisionWalker.js.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.js +2 -6
- package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
- package/dist/utils/ShadingResolver.d.ts.map +1 -1
- package/dist/utils/ShadingResolver.js +1 -1
- package/dist/utils/ShadingResolver.js.map +1 -1
- package/dist/utils/acceptRevisions.d.ts.map +1 -1
- package/dist/utils/acceptRevisions.js +23 -12
- package/dist/utils/acceptRevisions.js.map +1 -1
- package/dist/utils/cnfStyleDecoder.d.ts +1 -1
- package/dist/utils/cnfStyleDecoder.d.ts.map +1 -1
- package/dist/utils/cnfStyleDecoder.js +40 -40
- package/dist/utils/cnfStyleDecoder.js.map +1 -1
- package/dist/utils/corruptionDetection.d.ts.map +1 -1
- package/dist/utils/corruptionDetection.js.map +1 -1
- package/dist/utils/dateFormatting.js.map +1 -1
- package/dist/utils/deepClone.js +1 -1
- package/dist/utils/deepClone.js.map +1 -1
- package/dist/utils/diagnostics.d.ts.map +1 -1
- package/dist/utils/diagnostics.js +1 -1
- package/dist/utils/diagnostics.js.map +1 -1
- package/dist/utils/errorHandling.js.map +1 -1
- package/dist/utils/formatting.d.ts.map +1 -1
- package/dist/utils/formatting.js +10 -2
- package/dist/utils/formatting.js.map +1 -1
- package/dist/utils/list-detection.d.ts +2 -2
- package/dist/utils/list-detection.d.ts.map +1 -1
- package/dist/utils/list-detection.js +21 -23
- package/dist/utils/list-detection.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +12 -7
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/parsingHelpers.js.map +1 -1
- package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
- package/dist/utils/stripTrackedChanges.js +3 -3
- package/dist/utils/stripTrackedChanges.js.map +1 -1
- package/dist/utils/textDiff.d.ts +1 -1
- package/dist/utils/textDiff.js +8 -8
- package/dist/utils/textDiff.js.map +1 -1
- package/dist/utils/units.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +24 -7
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/xmlSanitization.d.ts.map +1 -1
- package/dist/utils/xmlSanitization.js +3 -3
- package/dist/utils/xmlSanitization.js.map +1 -1
- package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
- package/dist/validation/RevisionAutoFixer.js +5 -5
- package/dist/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/validation/RevisionValidator.d.ts.map +1 -1
- package/dist/validation/RevisionValidator.js +7 -9
- package/dist/validation/RevisionValidator.js.map +1 -1
- package/dist/validation/ValidationRules.js +3 -3
- package/dist/validation/ValidationRules.js.map +1 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/xml/XMLBuilder.d.ts +1 -1
- package/dist/xml/XMLBuilder.d.ts.map +1 -1
- package/dist/xml/XMLBuilder.js +98 -100
- package/dist/xml/XMLBuilder.js.map +1 -1
- package/dist/xml/XMLParser.d.ts.map +1 -1
- package/dist/xml/XMLParser.js +61 -66
- package/dist/xml/XMLParser.js.map +1 -1
- package/dist/zip/ZipHandler.d.ts.map +1 -1
- package/dist/zip/ZipHandler.js.map +1 -1
- package/dist/zip/ZipReader.d.ts.map +1 -1
- package/dist/zip/ZipReader.js +1 -3
- 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 +28 -36
- package/dist/zip/ZipWriter.js.map +1 -1
- package/dist/zip/types.js +1 -1
- package/dist/zip/types.js.map +1 -1
- package/package.json +92 -92
- package/src/__tests__/helper-methods.test.ts +512 -512
- package/src/constants/legacyCompatFlags.ts +138 -138
- package/src/constants/limits.ts +50 -50
- package/src/core/Document.ts +985 -1145
- package/src/core/DocumentContent.ts +461 -467
- package/src/core/DocumentGenerator.ts +1133 -1104
- package/src/core/DocumentIdManager.ts +158 -158
- package/src/core/DocumentParser.ts +2347 -2716
- package/src/core/DocumentValidator.ts +363 -372
- package/src/core/Relationship.ts +367 -367
- package/src/core/RelationshipManager.ts +429 -428
- package/src/elements/AlternateContent.ts +42 -42
- package/src/elements/Bookmark.ts +212 -210
- package/src/elements/BookmarkManager.ts +247 -250
- package/src/elements/Comment.ts +356 -359
- package/src/elements/CommentManager.ts +499 -502
- package/src/elements/CommonTypes.ts +524 -549
- package/src/elements/CustomXml.ts +36 -36
- package/src/elements/Endnote.ts +221 -217
- package/src/elements/EndnoteManager.ts +246 -249
- package/src/elements/Field.ts +1292 -1233
- package/src/elements/FieldHelpers.ts +329 -333
- package/src/elements/FontManager.ts +336 -339
- package/src/elements/Footer.ts +269 -269
- package/src/elements/Footnote.ts +221 -217
- package/src/elements/FootnoteManager.ts +246 -249
- package/src/elements/Header.ts +269 -269
- package/src/elements/HeaderFooterManager.ts +219 -219
- package/src/elements/Hyperlink.ts +1288 -1193
- package/src/elements/Image.ts +1982 -1756
- package/src/elements/ImageManager.ts +437 -432
- package/src/elements/ImageRun.ts +59 -59
- package/src/elements/MathElement.ts +65 -65
- package/src/elements/Paragraph.ts +4347 -4287
- package/src/elements/PreservedElement.ts +53 -53
- package/src/elements/PropertyChangeTypes.ts +458 -442
- package/src/elements/RangeMarker.ts +382 -400
- package/src/elements/Revision.ts +1198 -1217
- package/src/elements/RevisionContent.ts +73 -73
- package/src/elements/RevisionManager.ts +1070 -1070
- package/src/elements/Run.ts +3103 -3073
- package/src/elements/Section.ts +1521 -1421
- package/src/elements/Shape.ts +884 -873
- package/src/elements/StructuredDocumentTag.ts +1176 -1207
- package/src/elements/Table.ts +2468 -2524
- package/src/elements/TableCell.ts +1617 -1621
- package/src/elements/TableGridChange.ts +149 -151
- package/src/elements/TableOfContents.ts +701 -691
- package/src/elements/TableOfContentsElement.ts +89 -89
- package/src/elements/TableRow.ts +960 -929
- package/src/elements/TextBox.ts +766 -768
- package/src/formatting/AbstractNumbering.ts +580 -579
- package/src/formatting/NumberingInstance.ts +295 -299
- package/src/formatting/NumberingLevel.ts +981 -1040
- package/src/formatting/NumberingManager.ts +833 -827
- package/src/formatting/Style.ts +1785 -1879
- package/src/formatting/StylesManager.ts +1090 -1130
- package/src/helpers/CleanupHelper.ts +524 -524
- package/src/images/ImageOptimizer.ts +274 -274
- package/src/index.ts +559 -554
- package/src/managers/DrawingManager.ts +319 -319
- package/src/tracking/DocumentTrackingContext.ts +687 -674
- package/src/tracking/TrackingContext.ts +175 -173
- package/src/types/compatibility-types.ts +49 -49
- package/src/types/formatting.ts +210 -210
- package/src/types/list-types.ts +14 -14
- package/src/types/settings-types.ts +59 -59
- package/src/types/styleConfig.ts +189 -189
- package/src/utils/ChangelogGenerator.ts +1583 -1581
- package/src/utils/CompatibilityUpgrader.ts +235 -237
- package/src/utils/InMemoryRevisionAcceptor.ts +691 -696
- package/src/utils/MoveOperationHelper.ts +233 -238
- package/src/utils/RevisionAwareProcessor.ts +518 -526
- package/src/utils/RevisionWalker.ts +427 -457
- package/src/utils/SelectiveRevisionAcceptor.ts +662 -683
- package/src/utils/ShadingResolver.ts +105 -107
- package/src/utils/acceptRevisions.ts +723 -714
- package/src/utils/cnfStyleDecoder.ts +212 -217
- package/src/utils/corruptionDetection.ts +346 -345
- package/src/utils/dateFormatting.ts +20 -20
- package/src/utils/deepClone.ts +77 -78
- package/src/utils/diagnostics.ts +125 -129
- package/src/utils/errorHandling.ts +80 -80
- package/src/utils/formatting.ts +220 -213
- package/src/utils/list-detection.ts +32 -42
- package/src/utils/logger.ts +412 -404
- package/src/utils/parsingHelpers.ts +190 -190
- package/src/utils/stripTrackedChanges.ts +356 -353
- package/src/utils/textDiff.ts +100 -100
- package/src/utils/units.ts +421 -421
- package/src/utils/validation.ts +553 -542
- package/src/utils/xmlSanitization.ts +179 -182
- package/src/validation/RevisionAutoFixer.ts +541 -542
- package/src/validation/RevisionValidator.ts +470 -460
- package/src/validation/ValidationRules.ts +338 -338
- package/src/validation/index.ts +30 -30
- package/src/xml/XMLBuilder.ts +857 -871
- package/src/xml/XMLParser.ts +877 -919
- package/src/zip/ZipHandler.ts +629 -637
- package/src/zip/ZipReader.ts +295 -299
- package/src/zip/ZipWriter.ts +374 -390
- package/src/zip/types.ts +116 -116
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrackingContext.js","sourceRoot":"","sources":["../../src/tracking/TrackingContext.ts"],"names":[],"mappings":"","sourcesContent":["/**\
|
|
1
|
+
{"version":3,"file":"TrackingContext.js","sourceRoot":"","sources":["../../src/tracking/TrackingContext.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * TrackingContext - Interface for automatic change tracking\n *\n * When enabled via Document.enableTrackChanges(), element setter methods\n * use this context to automatically create Revision objects for changes.\n *\n * @module TrackingContext\n */\n\nimport type { Revision, RevisionType } from '../elements/Revision';\nimport type { RevisionManager } from '../elements/RevisionManager';\nimport type { Run } from '../elements/Run';\nimport type { Paragraph } from '../elements/Paragraph';\nimport type { Table } from '../elements/Table';\nimport type { TableRow } from '../elements/TableRow';\nimport type { TableCell } from '../elements/TableCell';\nimport type { Section } from '../elements/Section';\n\n/** Union of element types that can be tracked */\nexport type TrackableElement =\n | Run\n | Paragraph\n | Table\n | TableRow\n | TableCell\n | Section\n | { constructor: { name: string } };\n\n/**\n * Pending change entry before flushing to RevisionManager\n */\nexport interface PendingChange {\n /** Type of revision to create */\n type: RevisionType;\n /** Property that changed */\n property: string;\n /** Value before the change */\n previousValue: unknown;\n /** Value after the change */\n newValue: unknown;\n /** Element that was modified */\n element: TrackableElement;\n /** When the change occurred */\n timestamp: number;\n /** Count for consolidated changes */\n count?: number;\n}\n\n/**\n * Interface for tracking changes to document elements.\n *\n * Elements call tracking methods when their setters are invoked.\n * The context decides whether to create revisions based on enabled state.\n */\nexport interface TrackingContext {\n /**\n * Check if change tracking is currently enabled\n */\n isEnabled(): boolean;\n\n /**\n * Get the author name for new revisions\n */\n getAuthor(): string;\n\n /**\n * Get the RevisionManager for registering revisions\n */\n getRevisionManager(): RevisionManager;\n\n /**\n * Check if formatting changes should be tracked\n */\n isTrackFormattingEnabled(): boolean;\n\n /**\n * Track a Run property change (bold, italic, font, color, etc.)\n * @param run - The Run that was modified\n * @param property - Property name (e.g., 'bold', 'color')\n * @param oldValue - Value before the change\n * @param newValue - Value after the change\n */\n trackRunPropertyChange(run: Run, property: string, oldValue: unknown, newValue: unknown): void;\n\n /**\n * Track a Paragraph property change (alignment, spacing, etc.)\n * @param paragraph - The Paragraph that was modified\n * @param property - Property name (e.g., 'alignment', 'spaceBefore')\n * @param oldValue - Value before the change\n * @param newValue - Value after the change\n */\n trackParagraphPropertyChange(\n paragraph: TrackableElement,\n property: string,\n oldValue: unknown,\n newValue: unknown\n ): void;\n\n /**\n * Track a Hyperlink change (URL, anchor, text, formatting)\n * @param hyperlink - The Hyperlink that was modified\n * @param changeType - Type of change (e.g., 'url', 'text', 'formatting')\n * @param oldValue - Value before the change\n * @param newValue - Value after the change\n */\n trackHyperlinkChange(\n hyperlink: TrackableElement,\n changeType: string,\n oldValue: unknown,\n newValue: unknown\n ): void;\n\n /**\n * Track a Table element property change\n * @param element - The table/row/cell that was modified\n * @param property - Property name\n * @param oldValue - Value before the change\n * @param newValue - Value after the change\n */\n trackTableChange(\n element: TrackableElement,\n property: string,\n oldValue: unknown,\n newValue: unknown\n ): void;\n\n /**\n * Track a Section property change\n * @param section - The Section that was modified\n * @param property - Property name (e.g., 'pageSize', 'margins')\n * @param oldValue - Value before the change\n * @param newValue - Value after the change\n */\n trackSectionChange(\n section: TrackableElement,\n property: string,\n oldValue: unknown,\n newValue: unknown\n ): void;\n\n /**\n * Track text insertion\n * @param element - Element containing the insertion\n * @param text - Text that was inserted\n */\n trackInsertion(element: TrackableElement, text: string): void;\n\n /**\n * Track text deletion\n * @param element - Element containing the deletion\n * @param text - Text that was deleted\n */\n trackDeletion(element: TrackableElement, text: string): void;\n\n /**\n * Flush all pending changes and create Revision objects.\n * This is called automatically before document save.\n * @returns Array of created revisions\n */\n flushPendingChanges(): Revision[];\n\n /**\n * Create an insertion revision (factory to avoid circular dependency in Run)\n * @param content - Run or array of content for the insertion\n * @param date - Optional date for the revision\n */\n createInsertion(content: Run, date?: Date): Revision;\n\n /**\n * Create a deletion revision (factory to avoid circular dependency in Run)\n * @param content - Run or array of content for the deletion\n * @param date - Optional date for the revision\n */\n createDeletion(content: Run, date?: Date): Revision;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compatibility-types.js","sourceRoot":"","sources":["../../src/types/compatibility-types.ts"],"names":[],"mappings":";;;AASA,IAAY,iBASX;AATD,WAAY,iBAAiB;IAE3B,kEAAa,CAAA;IAEb,kEAAa,CAAA;IAEb,kEAAa,CAAA;IAEb,0EAAiB,CAAA;AACnB,CAAC,EATW,iBAAiB,iCAAjB,iBAAiB,QAS5B","sourcesContent":["/**\
|
|
1
|
+
{"version":3,"file":"compatibility-types.js","sourceRoot":"","sources":["../../src/types/compatibility-types.ts"],"names":[],"mappings":";;;AASA,IAAY,iBASX;AATD,WAAY,iBAAiB;IAE3B,kEAAa,CAAA;IAEb,kEAAa,CAAA;IAEb,kEAAa,CAAA;IAEb,0EAAiB,CAAA;AACnB,CAAC,EATW,iBAAiB,iCAAjB,iBAAiB,QAS5B","sourcesContent":["/**\n * Word compatibility mode versions.\n *\n * These map to Microsoft's internal version numbers used in the\n * w:compatSetting name=\"compatibilityMode\" value within settings.xml.\n *\n * Per MS-DOCX specification, the default when absent is 12 (Word 2007).\n * See: https://learn.microsoft.com/en-us/openspecs/office_standards/ms-docx/90138c4d-eb18-4edc-aa6c-dfb799cb1d0d\n */\nexport enum CompatibilityMode {\n /** Word 2003 and earlier — uses MS-DOC feature set */\n Word2003 = 11,\n /** Word 2007 (ECMA-376 1st edition) — DEFAULT when absent */\n Word2007 = 12,\n /** Word 2010 (ISO/IEC 29500 with exclusions) */\n Word2010 = 14,\n /** Word 2013/2016/2019/365 (full modern features) */\n Word2013Plus = 15,\n}\n\n/**\n * A single w:compatSetting entry (name/uri/val triple).\n *\n * These are the modern extensibility mechanism for compatibility settings,\n * added in ECMA-376 2nd edition. They coexist with legacy boolean flags\n * in the Transitional schema.\n */\nexport interface CompatSetting {\n name: string;\n uri: string;\n val: string;\n}\n\n/**\n * Parsed compatibility settings from the w:compat block in settings.xml.\n */\nexport interface CompatibilityInfo {\n /** The numeric compatibility mode value (11, 12, 14, or 15) */\n mode: CompatibilityMode;\n\n /** Whether the document is in a legacy compatibility mode (below 15) */\n isLegacyMode: boolean;\n\n /** Modern w:compatSetting entries (name/uri/val triples) */\n compatSettings: CompatSetting[];\n\n /** Legacy boolean compat flags that are present and enabled (without w: prefix) */\n legacyFlags: string[];\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/types/formatting.ts"],"names":[],"mappings":"","sourcesContent":["/**\
|
|
1
|
+
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/types/formatting.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Additional formatting types for enhanced document manipulation\n */\n\n// Forward references to avoid circular dependencies\nimport type { Paragraph } from '../elements/Paragraph';\nimport type { Run } from '../elements/Run';\n\n/**\n * Border style options\n */\nexport type BorderStyleType = 'single' | 'double' | 'dashed' | 'dotted' | 'triple' | 'none';\n\n/**\n * Individual border configuration\n */\nexport interface BorderStyle {\n /** Border style */\n style: BorderStyleType;\n /** Border width in eighths of a point */\n width: number;\n /** Border color in hex format */\n color: string;\n /** Space between border and text in points */\n space?: number;\n}\n\n/**\n * Paragraph border configuration\n */\nexport interface ParagraphBorder {\n /** Top border */\n top?: BorderStyle;\n /** Bottom border */\n bottom?: BorderStyle;\n /** Left border */\n left?: BorderStyle;\n /** Right border */\n right?: BorderStyle;\n /** Apply border between paragraphs */\n between?: boolean;\n}\n\n/**\n * Shading patterns — re-exported from CommonTypes for backward compatibility.\n * @see CommonTypes.ShadingPattern for the canonical definition\n */\nexport type { ShadingPattern } from '../elements/CommonTypes';\n\n/**\n * Paragraph shading configuration — re-exported from CommonTypes for backward compatibility.\n * @see CommonTypes.ShadingConfig for the canonical definition (includes theme attributes)\n */\nexport type { ShadingConfig as ParagraphShading } from '../elements/CommonTypes';\n\n/**\n * Tab stop alignment\n */\nexport type TabAlignment = 'left' | 'center' | 'right' | 'decimal' | 'bar' | 'clear';\n\n/**\n * Tab leader character\n */\nexport type TabLeader = 'none' | 'dot' | 'dash' | 'underscore' | 'heavy' | 'middleDot';\n\n/**\n * Tab stop configuration\n */\nexport interface TabStop {\n /** Position in twips from left margin */\n position: number;\n /** Tab alignment type */\n type: TabAlignment;\n /** Leader character */\n leader?: TabLeader;\n}\n\n/**\n * Text search options\n */\nexport interface FindOptions {\n /** Case sensitive search */\n caseSensitive?: boolean;\n /** Match whole words only */\n wholeWord?: boolean;\n /** Use regular expressions */\n useRegex?: boolean;\n /** Include headers and footers */\n includeHeadersFooters?: boolean;\n /** Include footnotes and endnotes */\n includeNotes?: boolean;\n}\n\n/**\n * Text replacement options\n */\nexport interface ReplaceOptions extends FindOptions {\n /** Maximum number of replacements (0 = unlimited) */\n maxReplacements?: number;\n /** Track changes for replacements */\n trackChanges?: boolean;\n /** Author for track changes */\n author?: string;\n}\n\n/**\n * Search result\n */\nexport interface SearchResult {\n /** The paragraph containing the match */\n paragraph: Paragraph;\n /** The run containing the match */\n run?: Run;\n /** Match start position in paragraph */\n startIndex: number;\n /** Match end position in paragraph */\n endIndex: number;\n /** The matched text */\n match: string;\n}\n\n/**\n * Text emphasis options\n */\nexport type EmphasisType = 'bold' | 'italic' | 'underline';\n\n/**\n * List prefix configuration\n */\nexport interface ListPrefix {\n /** List format type */\n format: 'bullet' | 'number';\n /** Custom style string (e.g., '•', '1.', 'a)') */\n style: string;\n}\n\n/**\n * Format options for style application\n */\nexport interface FormatOptions {\n // Text formatting\n /** Font family name (e.g., 'Arial', 'Verdana') */\n font?: string;\n /** Font size in points */\n size?: number;\n /** Text color as 6-digit hex (e.g., 'FF0000' for red) */\n color?: string;\n /** Text emphasis (bold, italic, underline) */\n emphasis?: EmphasisType[];\n\n // Alignment\n /** Paragraph alignment */\n alignment?: 'left' | 'right' | 'center' | 'justify';\n\n // Spacing (in points)\n /** Space before paragraph in points */\n spaceAbove?: number;\n /** Space after paragraph in points */\n spaceBelow?: number;\n /** Line spacing in points or multiplier */\n lineSpacing?: number;\n\n // Indentation (in inches)\n /** Left indentation in inches */\n indentLeft?: number;\n /** Right indentation in inches */\n indentRight?: number;\n /** First line indentation in inches */\n indentFirst?: number;\n /** Hanging indentation in inches */\n indentHanging?: number;\n\n // Padding (in points) - for table cells\n /** Top padding in points */\n paddingTop?: number;\n /** Bottom padding in points */\n paddingBottom?: number;\n /** Left padding in points */\n paddingLeft?: number;\n /** Right padding in points */\n paddingRight?: number;\n\n // List formatting\n /** List prefix style */\n prefixList?: string | ListPrefix;\n\n // Advanced options\n /** Border color as 6-digit hex */\n borderColor?: string;\n /** Border width in points */\n borderWidth?: number;\n /** Background shading color as 6-digit hex */\n shading?: string;\n /** Keep with next paragraph */\n keepWithNext?: boolean;\n /** Keep lines together */\n keepLines?: boolean;\n}\n\n/**\n * Options for applying styles to paragraphs\n */\nexport interface StyleApplyOptions {\n /** Specific paragraphs to apply style to (default: auto-detect) */\n paragraphs?: Paragraph[];\n /** Properties to preserve from existing formatting */\n keepProperties?: string[];\n /** Custom formatting to apply */\n format?: FormatOptions;\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export type ListCategory =
|
|
2
|
-
export type NumberFormat =
|
|
3
|
-
export type BulletFormat =
|
|
1
|
+
export type ListCategory = 'numbered' | 'bullet' | 'none';
|
|
2
|
+
export type NumberFormat = 'decimal' | 'lowerLetter' | 'upperLetter' | 'lowerRoman' | 'upperRoman';
|
|
3
|
+
export type BulletFormat = 'bullet' | 'dash' | 'arrow';
|
|
4
4
|
export interface ListDetectionResult {
|
|
5
5
|
category: ListCategory;
|
|
6
6
|
isWordList: boolean;
|
|
@@ -26,7 +26,7 @@ export interface ListAnalysis {
|
|
|
26
26
|
bullet: number;
|
|
27
27
|
none: number;
|
|
28
28
|
};
|
|
29
|
-
recommendedAction:
|
|
29
|
+
recommendedAction: 'normalize' | 'none';
|
|
30
30
|
}
|
|
31
31
|
export interface IndentationLevel {
|
|
32
32
|
level: number;
|
|
@@ -38,7 +38,7 @@ export interface IndentationLevel {
|
|
|
38
38
|
export interface ListNormalizationOptions {
|
|
39
39
|
numberedStyleNumId?: number;
|
|
40
40
|
bulletStyleNumId?: number;
|
|
41
|
-
scope?:
|
|
41
|
+
scope?: 'cell' | 'table' | 'document';
|
|
42
42
|
forceMajority?: boolean;
|
|
43
43
|
preserveIndentation?: boolean;
|
|
44
44
|
indentationLevels?: IndentationLevel[];
|
|
@@ -50,7 +50,7 @@ export interface ListNormalizationReport {
|
|
|
50
50
|
appliedCategory: ListCategory;
|
|
51
51
|
details: {
|
|
52
52
|
originalText: string;
|
|
53
|
-
action:
|
|
53
|
+
action: 'normalized' | 'skipped' | 'error';
|
|
54
54
|
reason?: string;
|
|
55
55
|
}[];
|
|
56
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-types.js","sourceRoot":"","sources":["../../src/types/list-types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * List Normalization Types for docxmlater\n *\n * These types support detection and normalization of typed list prefixes\n * to proper Word list formatting.\n */\n\n/** High-level list category */\nexport type ListCategory =
|
|
1
|
+
{"version":3,"file":"list-types.js","sourceRoot":"","sources":["../../src/types/list-types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * List Normalization Types for docxmlater\n *\n * These types support detection and normalization of typed list prefixes\n * to proper Word list formatting.\n */\n\n/** High-level list category */\nexport type ListCategory = 'numbered' | 'bullet' | 'none';\n\n/** Specific number format patterns */\nexport type NumberFormat =\n | 'decimal' // 1. 2. 3.\n | 'lowerLetter' // a. b. c.\n | 'upperLetter' // A. B. C.\n | 'lowerRoman' // i. ii. iii.\n | 'upperRoman'; // I. II. III.\n\n/** Specific bullet format patterns */\nexport type BulletFormat =\n | 'bullet' // • ● ○\n | 'dash' // - – —\n | 'arrow'; // ► ▸\n\n/**\n * Result of detecting list type for a single paragraph\n */\nexport interface ListDetectionResult {\n /** High-level category */\n category: ListCategory;\n\n /** True if paragraph has <w:numPr> (real Word list) */\n isWordList: boolean;\n\n /** The typed prefix found, e.g., \"1. \", \"a) \", \"• \" */\n typedPrefix: string | null;\n\n /** Inferred nesting level based on indentation */\n inferredLevel: number;\n\n /** Specific format detected */\n format: NumberFormat | BulletFormat | null;\n\n /** If Word list, the numId from <w:numPr> */\n numId: number | null;\n\n /** If Word list, the ilvl from <w:numPr> */\n ilvl: number | null;\n\n /** Raw indentation in twips for debugging */\n indentationTwips: number;\n}\n\n/**\n * Analysis of all lists within a scope (cell, table, document)\n */\nexport interface ListAnalysis {\n /** All analyzed paragraphs with their detection results */\n paragraphs: {\n paragraph: unknown; // Paragraph instance - using unknown to avoid circular dep\n text: string;\n detection: ListDetectionResult;\n }[];\n\n /** True if any typed (non-Word) lists found */\n hasTypedLists: boolean;\n\n /** True if any real Word lists found */\n hasWordLists: boolean;\n\n /** True if both numbered AND bullet lists present */\n hasMixedCategories: boolean;\n\n /** The dominant list type in this scope */\n majorityCategory: ListCategory;\n\n /** Count by category */\n counts: {\n numbered: number;\n bullet: number;\n none: number;\n };\n\n /** Recommended action */\n recommendedAction: 'normalize' | 'none';\n}\n\n/**\n * User-defined indentation level configuration for list normalization\n */\nexport interface IndentationLevel {\n level: number;\n textIndent: number; // in inches\n symbolIndent: number; // in inches\n bulletChar?: string;\n numberedFormat?: NumberFormat | string;\n}\n\n/**\n * Options for list normalization\n */\nexport interface ListNormalizationOptions {\n /** numId to use for numbered lists (from numbering.xml) */\n numberedStyleNumId?: number;\n\n /** numId to use for bullet lists (from numbering.xml) */\n bulletStyleNumId?: number;\n\n /** Processing scope */\n scope?: 'cell' | 'table' | 'document';\n\n /**\n * If true, convert ALL list items to majority type.\n * If false, only convert typed lists (preserve existing Word lists).\n */\n forceMajority?: boolean;\n\n /**\n * If true, preserve original indentation instead of using level defaults.\n */\n preserveIndentation?: boolean;\n\n /**\n * User-defined indentation settings per list level.\n * Used to configure symbol indent, text indent, and bullet characters.\n */\n indentationLevels?: IndentationLevel[];\n}\n\n/**\n * Report returned after normalization\n */\nexport interface ListNormalizationReport {\n /** Number of paragraphs successfully normalized */\n normalized: number;\n\n /** Number of paragraphs skipped (already correct or non-list) */\n skipped: number;\n\n /** Any errors encountered */\n errors: string[];\n\n /** The majority category that was applied */\n appliedCategory: ListCategory;\n\n /** Detailed per-paragraph results */\n details: {\n originalText: string;\n action: 'normalized' | 'skipped' | 'error';\n reason?: string;\n }[];\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-types.js","sourceRoot":"","sources":["../../src/types/settings-types.ts"],"names":[],"mappings":"","sourcesContent":["/**\
|
|
1
|
+
{"version":3,"file":"settings-types.js","sourceRoot":"","sources":["../../src/types/settings-types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Shared type definitions for document settings (settings.xml)\n *\n * These types are used by both Document.ts (in-memory state) and\n * DocumentGenerator.ts (XML generation) to ensure consistency.\n */\n\n/**\n * Document protection settings per ECMA-376 CT_DocProtect\n */\nexport interface DocumentProtection {\n edit: 'readOnly' | 'comments' | 'trackedChanges' | 'forms';\n enforcement: boolean;\n cryptProviderType?: string;\n cryptAlgorithmClass?: string;\n cryptAlgorithmType?: string;\n cryptAlgorithmSid?: number;\n cryptSpinCount?: number;\n hash?: string;\n salt?: string;\n}\n\n/**\n * Revision view settings per ECMA-376 CT_TrackChangesView\n */\nexport interface RevisionViewSettings {\n showInsertionsAndDeletions: boolean;\n showFormatting: boolean;\n showInkAnnotations: boolean;\n}\n\n/**\n * Track changes and related settings passed to DocumentGenerator.generateSettings()\n */\nexport interface TrackChangesSettings {\n trackChangesEnabled?: boolean;\n trackFormatting?: boolean;\n revisionView?: RevisionViewSettings;\n rsidRoot?: string;\n rsids?: string[];\n documentProtection?: DocumentProtection;\n}\n\n/**\n * Information about webSettings.xml per ECMA-376 CT_WebSettings\n */\nexport interface WebSettingsInfo {\n divCount: number;\n optimizeForBrowser: boolean;\n allowPNG: boolean;\n relyOnVML: boolean;\n doNotRelyOnCSS: boolean;\n doNotSaveAsSingleFile: boolean;\n doNotOrganizeInFolder: boolean;\n doNotUseLongFileNames: boolean;\n pixelsPerInch?: number;\n targetScreenSz?: string;\n encoding?: string;\n}\n"]}
|
|
@@ -10,12 +10,12 @@ export interface StyleRunFormatting {
|
|
|
10
10
|
preserveUnderline?: boolean;
|
|
11
11
|
}
|
|
12
12
|
export interface StyleParagraphFormatting {
|
|
13
|
-
alignment?:
|
|
13
|
+
alignment?: 'left' | 'center' | 'right' | 'justify';
|
|
14
14
|
spacing?: {
|
|
15
15
|
before?: number;
|
|
16
16
|
after?: number;
|
|
17
17
|
line?: number;
|
|
18
|
-
lineRule?:
|
|
18
|
+
lineRule?: 'auto' | 'exact' | 'atLeast';
|
|
19
19
|
};
|
|
20
20
|
indentation?: {
|
|
21
21
|
left?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styleConfig.js","sourceRoot":"","sources":["../../src/types/styleConfig.ts"],"names":[],"mappings":"","sourcesContent":["/**\
|
|
1
|
+
{"version":3,"file":"styleConfig.js","sourceRoot":"","sources":["../../src/types/styleConfig.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Configuration interfaces for customizable style formatting\n * Used by Document.applyCustomFormattingToExistingStyles()\n */\n\n/**\n * Run (character) formatting configuration for styles\n */\nexport interface StyleRunFormatting {\n /** Font family name (e.g., 'Verdana', 'Arial', 'Times New Roman') */\n font?: string;\n\n /** Font size in points (e.g., 12, 14, 18) */\n size?: number;\n\n /** Whether text should be bold */\n bold?: boolean;\n\n /** Whether text should be italic */\n italic?: boolean;\n\n /** Whether text should be underlined */\n underline?: boolean;\n\n /** Text color as hex without # (e.g., '000000', 'FF0000') */\n color?: string;\n\n /** If true, preserve existing bold formatting (don't apply bold property) */\n preserveBold?: boolean;\n\n /** If true, preserve existing italic formatting (don't apply italic property) */\n preserveItalic?: boolean;\n\n /** If true, preserve existing underline formatting (don't apply underline property) */\n preserveUnderline?: boolean;\n}\n\n/**\n * Paragraph formatting configuration for styles\n */\nexport interface StyleParagraphFormatting {\n /** Text alignment */\n alignment?: 'left' | 'center' | 'right' | 'justify';\n\n /** Spacing configuration */\n spacing?: {\n /** Spacing before paragraph in twips (20 twips = 1 point) */\n before?: number;\n\n /** Spacing after paragraph in twips (20 twips = 1 point) */\n after?: number;\n\n /** Line spacing in twips (240 = single spacing when lineRule is 'auto') */\n line?: number;\n\n /** How to interpret the line spacing value */\n lineRule?: 'auto' | 'exact' | 'atLeast';\n };\n\n /** Indentation configuration */\n indentation?: {\n /** Left indent in twips (1440 twips = 1 inch) */\n left?: number;\n\n /** Right indent in twips */\n right?: number;\n\n /** First line indent in twips (positive = indent, negative = outdent) */\n firstLine?: number;\n\n /** Hanging indent in twips (typically used for lists) */\n hanging?: number;\n };\n\n /**\n * Whether to remove spacing between consecutive paragraphs of the same style\n * Per ECMA-376 Part 1 §17.3.1.8\n */\n contextualSpacing?: boolean;\n}\n\n/**\n * Table appearance options for Heading2 wrapping\n * Heading2 paragraphs are always wrapped in 1x1 tables with these settings\n */\nexport interface Heading2TableOptions {\n /** Cell background color as hex without # (e.g., 'BFBFBF' for gray) */\n shading?: string;\n\n /** Top cell margin in twips */\n marginTop?: number;\n\n /** Bottom cell margin in twips */\n marginBottom?: number;\n\n /** Left cell margin in twips (115 twips = 0.08 inches) */\n marginLeft?: number;\n\n /** Right cell margin in twips (115 twips = 0.08 inches) */\n marginRight?: number;\n\n /** Table width as percentage (5000 = 100%) */\n tableWidthPercent?: number;\n}\n\n/**\n * Base style configuration combining run and paragraph formatting\n */\nexport interface StyleConfig {\n /** Character formatting for the style */\n run?: StyleRunFormatting;\n\n /** Paragraph formatting for the style */\n paragraph?: StyleParagraphFormatting;\n}\n\n/**\n * Extended configuration for Heading2 style including table options\n * Heading2 paragraphs are always wrapped in tables\n */\nexport interface Heading2Config extends StyleConfig {\n /** Table appearance options for wrapping Heading2 paragraphs */\n tableOptions?: Heading2TableOptions;\n}\n\n/**\n * Extended configuration for Normal style with alignment preservation options\n */\nexport interface NormalConfig extends StyleConfig {\n /**\n * Whether to preserve center alignment during style application.\n * When true, paragraphs that are center-aligned will retain their center alignment\n * instead of being changed to the Normal style's alignment (typically 'left').\n * This is useful for preserving intentional centering like image captions or table headers.\n * @default false\n */\n preserveCenterAlignment?: boolean;\n}\n\n/**\n * Complete configuration for applyStyles()\n * All properties are optional - defaults will be used if not provided\n */\nexport interface ApplyStylesOptions {\n /** Heading1 style configuration */\n heading1?: StyleConfig;\n\n /** Heading2 style configuration with table options */\n heading2?: Heading2Config;\n\n /** Heading3 style configuration */\n heading3?: StyleConfig;\n\n /** Normal style configuration with alignment preservation options */\n normal?: NormalConfig;\n\n /** List Paragraph style configuration */\n listParagraph?: StyleConfig;\n\n /**\n * Whether to preserve blank lines added after 1x1 Heading 2 tables.\n * When true, blank paragraphs added after Heading 2 tables are marked as preserved\n * to prevent accidental removal by document processing operations (e.g., removing extra blank lines).\n * @default true\n */\n preserveBlankLinesAfterHeading2Tables?: boolean;\n\n /**\n * Whether to preserve white font (FFFFFF) color during style application.\n * When true, runs with white color will not have their color changed.\n * This is useful for preserving hidden text like ID tags or overlay text.\n * @default false\n */\n preserveWhiteFont?: boolean;\n\n /**\n * Whether to apply Normal style changes to NormalWeb (Normal (Web)) style as well.\n * When true (default), if NormalWeb style exists in the document,\n * it will receive the same formatting changes applied to Normal.\n * This ensures consistency between Normal and Normal (Web) styles.\n * @default true\n */\n linkNormalWebToNormal?: boolean;\n}\n\n/**\n * @deprecated Use {@link ApplyStylesOptions} instead (renamed in v4.0.0)\n */\nexport type ApplyCustomFormattingOptions = ApplyStylesOptions;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangelogGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/ChangelogGenerator.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAW9D,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,OAAO,GACP,WAAW,GACX,OAAO,GACP,OAAO,GACP,SAAS,GACT,UAAU,GACV,gBAAgB,CAAC;AAKrB,MAAM,WAAW,cAAc;IAE7B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,cAAc,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAMD,MAAM,WAAW,WAAW;IAE1B,EAAE,EAAE,MAAM,CAAC;IAGX,YAAY,EAAE,YAAY,CAAC;IAG3B,QAAQ,EAAE,cAAc,CAAC;IAGzB,WAAW,EAAE,MAAM,CAAC;IAGpB,MAAM,EAAE,MAAM,CAAC;IAGf,IAAI,EAAE,IAAI,CAAC;IAGX,QAAQ,EAAE,cAAc,CAAC;IAGzB,OAAO,EAAE;QAEP,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IAGF,cAAc,CAAC,EAAE;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAKD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAK5E,MAAM,WAAW,gBAAgB;IAE/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAEnC,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,eAAe,CAAC,EAAE;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,CAAC;IAE7C,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAC;IAEpC,MAAM,CAAC,EAAE,eAAe,CAAC;IAEzB,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IAEjD,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAE3B,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAKD,MAAM,WAAW,kBAAkB;IAEjC,WAAW,EAAE,MAAM,CAAC;IAEpB,KAAK,EAAE,MAAM,CAAC;IAEd,QAAQ,EAAE,cAAc,CAAC;IAEzB,gBAAgB,EAAE;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,YAAY,CAAC;QAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAKD,MAAM,WAAW,gBAAgB;IAE/B,KAAK,EAAE,MAAM,CAAC;IAEd,UAAU,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAE3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,SAAS,EAAE;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CACpD;AAMD,qBAAa,kBAAkB;IAS7B,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,WAAW,EAAE;IAkB7E,MAAM,CAAC,aAAa,CAClB,SAAS,EAAE,QAAQ,EAAE,EACrB,OAAO,CAAC,EAAE,gBAAgB,EAC1B,GAAG,CAAC,EAAE,QAAQ,GACb,WAAW,EAAE;IAyEhB,OAAO,CAAC,MAAM,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"ChangelogGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/ChangelogGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,8 +27,8 @@ class ChangelogGenerator {
|
|
|
27
27
|
filters: {
|
|
28
28
|
categories: opts.filterCategories?.length ?? 0,
|
|
29
29
|
authors: opts.filterAuthors?.length ?? 0,
|
|
30
|
-
dateRange: !!opts.filterDateRange
|
|
31
|
-
}
|
|
30
|
+
dateRange: !!opts.filterDateRange,
|
|
31
|
+
},
|
|
32
32
|
});
|
|
33
33
|
const entries = [];
|
|
34
34
|
let filtered = 0;
|
|
@@ -68,10 +68,8 @@ class ChangelogGenerator {
|
|
|
68
68
|
const type = revision.getType();
|
|
69
69
|
const category = this.categorize(revision);
|
|
70
70
|
const runs = revision.getRuns();
|
|
71
|
-
const text = runs.map(r => r.getText()).join('');
|
|
72
|
-
const truncatedText = text.length > maxContextLength
|
|
73
|
-
? text.substring(0, maxContextLength) + '...'
|
|
74
|
-
: text;
|
|
71
|
+
const text = runs.map((r) => r.getText()).join('');
|
|
72
|
+
const truncatedText = text.length > maxContextLength ? text.substring(0, maxContextLength) + '...' : text;
|
|
75
73
|
const content = {};
|
|
76
74
|
if (type === 'insert' || type === 'moveTo') {
|
|
77
75
|
content.after = truncatedText;
|
|
@@ -102,10 +100,7 @@ class ChangelogGenerator {
|
|
|
102
100
|
}
|
|
103
101
|
let propertyChange;
|
|
104
102
|
if (prevProps || newProps) {
|
|
105
|
-
const allKeys = new Set([
|
|
106
|
-
...Object.keys(prevProps || {}),
|
|
107
|
-
...Object.keys(newProps || {}),
|
|
108
|
-
]);
|
|
103
|
+
const allKeys = new Set([...Object.keys(prevProps || {}), ...Object.keys(newProps || {})]);
|
|
109
104
|
const firstKey = Array.from(allKeys)[0];
|
|
110
105
|
if (firstKey) {
|
|
111
106
|
propertyChange = {
|
|
@@ -199,12 +194,12 @@ class ChangelogGenerator {
|
|
|
199
194
|
count: groupEntries.length,
|
|
200
195
|
category: first.category,
|
|
201
196
|
commonAttributes: {
|
|
202
|
-
author: this.allSame(groupEntries.map(e => e.author)) ? first.author : undefined,
|
|
197
|
+
author: this.allSame(groupEntries.map((e) => e.author)) ? first.author : undefined,
|
|
203
198
|
revisionType: first.revisionType,
|
|
204
199
|
propertyChanged: first.propertyChange?.property,
|
|
205
200
|
newValue: first.propertyChange?.newValue,
|
|
206
201
|
},
|
|
207
|
-
changeIds: groupEntries.map(e => e.id),
|
|
202
|
+
changeIds: groupEntries.map((e) => e.id),
|
|
208
203
|
});
|
|
209
204
|
}
|
|
210
205
|
consolidated.sort((a, b) => b.count - a.count);
|
|
@@ -212,7 +207,7 @@ class ChangelogGenerator {
|
|
|
212
207
|
getLogger().info('Entries consolidated', {
|
|
213
208
|
input: entries.length,
|
|
214
209
|
groups: consolidated.length,
|
|
215
|
-
reduction: `${Math.round((1 - consolidated.length / entries.length) * 100)}
|
|
210
|
+
reduction: `${Math.round((1 - consolidated.length / entries.length) * 100)}%`,
|
|
216
211
|
});
|
|
217
212
|
}
|
|
218
213
|
return consolidated;
|
|
@@ -263,7 +258,7 @@ class ChangelogGenerator {
|
|
|
263
258
|
if (arr.length === 0)
|
|
264
259
|
return true;
|
|
265
260
|
const first = arr[0];
|
|
266
|
-
return arr.every(v => v === first);
|
|
261
|
+
return arr.every((v) => v === first);
|
|
267
262
|
}
|
|
268
263
|
static categorize(revision) {
|
|
269
264
|
const type = revision.getType();
|
|
@@ -319,10 +314,8 @@ class ChangelogGenerator {
|
|
|
319
314
|
const type = revision.getType();
|
|
320
315
|
const author = revision.getAuthor();
|
|
321
316
|
const runs = revision.getRuns();
|
|
322
|
-
const text = runs.map(r => r.getText()).join('');
|
|
323
|
-
const excerpt = text.length > maxLength
|
|
324
|
-
? `"${text.substring(0, maxLength)}..."`
|
|
325
|
-
: text ? `"${text}"` : '';
|
|
317
|
+
const text = runs.map((r) => r.getText()).join('');
|
|
318
|
+
const excerpt = text.length > maxLength ? `"${text.substring(0, maxLength)}..."` : text ? `"${text}"` : '';
|
|
326
319
|
switch (type) {
|
|
327
320
|
case 'insert':
|
|
328
321
|
return excerpt ? `Inserted ${excerpt}` : 'Inserted content';
|
|
@@ -487,10 +480,7 @@ class ChangelogGenerator {
|
|
|
487
480
|
return `Changed ${context}`;
|
|
488
481
|
}
|
|
489
482
|
const propNames = [];
|
|
490
|
-
const allKeys = new Set([
|
|
491
|
-
...Object.keys(prevProps || {}),
|
|
492
|
-
...Object.keys(newProps || {}),
|
|
493
|
-
]);
|
|
483
|
+
const allKeys = new Set([...Object.keys(prevProps || {}), ...Object.keys(newProps || {})]);
|
|
494
484
|
for (const key of allKeys) {
|
|
495
485
|
const oldVal = prevProps?.[key];
|
|
496
486
|
const newVal = newProps?.[key];
|
|
@@ -708,7 +698,7 @@ class ChangelogGenerator {
|
|
|
708
698
|
logger.info('Changelog entries processed', {
|
|
709
699
|
entries: entries.length,
|
|
710
700
|
format,
|
|
711
|
-
sorted: !!options?.sortBy
|
|
701
|
+
sorted: !!options?.sortBy,
|
|
712
702
|
});
|
|
713
703
|
switch (format) {
|
|
714
704
|
case 'json':
|
|
@@ -746,89 +736,89 @@ class ChangelogGenerator {
|
|
|
746
736
|
bookmark: 'Bookmark Changes',
|
|
747
737
|
contentControl: 'Content Control Changes',
|
|
748
738
|
};
|
|
749
|
-
let html = `<!DOCTYPE html>
|
|
750
|
-
<html lang="en">
|
|
751
|
-
<head>
|
|
752
|
-
<meta charset="UTF-8">
|
|
753
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
754
|
-
<title>Document Changes</title>
|
|
755
|
-
<style>
|
|
756
|
-
body {
|
|
757
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
758
|
-
max-width: 900px;
|
|
759
|
-
margin: 0 auto;
|
|
760
|
-
padding: 20px;
|
|
761
|
-
line-height: 1.6;
|
|
762
|
-
color: #333;
|
|
763
|
-
}
|
|
764
|
-
h1 { color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 10px; }
|
|
765
|
-
h2 { color: #34495e; margin-top: 30px; }
|
|
766
|
-
.summary { background: #f8f9fa; padding: 15px; border-radius: 8px; margin-bottom: 20px; }
|
|
767
|
-
.summary p { margin: 5px 0; }
|
|
768
|
-
.category { margin-bottom: 30px; }
|
|
769
|
-
.change-list { list-style: none; padding: 0; }
|
|
770
|
-
.change-item {
|
|
771
|
-
background: #fff;
|
|
772
|
-
border: 1px solid #e9ecef;
|
|
773
|
-
border-radius: 6px;
|
|
774
|
-
padding: 12px 15px;
|
|
775
|
-
margin-bottom: 10px;
|
|
776
|
-
}
|
|
777
|
-
.change-item:hover { box-shadow: 0 2px 5px rgba(0,0,0,0.1); }
|
|
778
|
-
.change-description { font-weight: 500; color: #2c3e50; }
|
|
779
|
-
.change-meta { font-size: 0.85em; color: #7f8c8d; margin-top: 5px; }
|
|
780
|
-
.change-content { margin-top: 8px; font-size: 0.9em; }
|
|
781
|
-
.removed { color: #c0392b; text-decoration: line-through; }
|
|
782
|
-
.added { color: #27ae60; }
|
|
783
|
-
.badge {
|
|
784
|
-
display: inline-block;
|
|
785
|
-
padding: 2px 8px;
|
|
786
|
-
border-radius: 4px;
|
|
787
|
-
font-size: 0.75em;
|
|
788
|
-
font-weight: 600;
|
|
789
|
-
text-transform: uppercase;
|
|
790
|
-
}
|
|
791
|
-
.badge-insert { background: #d4edda; color: #155724; }
|
|
792
|
-
.badge-delete { background: #f8d7da; color: #721c24; }
|
|
793
|
-
.badge-formatting { background: #cce5ff; color: #004085; }
|
|
794
|
-
.badge-structural { background: #fff3cd; color: #856404; }
|
|
795
|
-
.badge-table { background: #e2e3e5; color: #383d41; }
|
|
796
|
-
</style>
|
|
797
|
-
</head>
|
|
798
|
-
<body>
|
|
799
|
-
<h1>Document Changes</h1>
|
|
800
|
-
|
|
801
|
-
<div class="summary">
|
|
739
|
+
let html = `<!DOCTYPE html>
|
|
740
|
+
<html lang="en">
|
|
741
|
+
<head>
|
|
742
|
+
<meta charset="UTF-8">
|
|
743
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
744
|
+
<title>Document Changes</title>
|
|
745
|
+
<style>
|
|
746
|
+
body {
|
|
747
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
748
|
+
max-width: 900px;
|
|
749
|
+
margin: 0 auto;
|
|
750
|
+
padding: 20px;
|
|
751
|
+
line-height: 1.6;
|
|
752
|
+
color: #333;
|
|
753
|
+
}
|
|
754
|
+
h1 { color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 10px; }
|
|
755
|
+
h2 { color: #34495e; margin-top: 30px; }
|
|
756
|
+
.summary { background: #f8f9fa; padding: 15px; border-radius: 8px; margin-bottom: 20px; }
|
|
757
|
+
.summary p { margin: 5px 0; }
|
|
758
|
+
.category { margin-bottom: 30px; }
|
|
759
|
+
.change-list { list-style: none; padding: 0; }
|
|
760
|
+
.change-item {
|
|
761
|
+
background: #fff;
|
|
762
|
+
border: 1px solid #e9ecef;
|
|
763
|
+
border-radius: 6px;
|
|
764
|
+
padding: 12px 15px;
|
|
765
|
+
margin-bottom: 10px;
|
|
766
|
+
}
|
|
767
|
+
.change-item:hover { box-shadow: 0 2px 5px rgba(0,0,0,0.1); }
|
|
768
|
+
.change-description { font-weight: 500; color: #2c3e50; }
|
|
769
|
+
.change-meta { font-size: 0.85em; color: #7f8c8d; margin-top: 5px; }
|
|
770
|
+
.change-content { margin-top: 8px; font-size: 0.9em; }
|
|
771
|
+
.removed { color: #c0392b; text-decoration: line-through; }
|
|
772
|
+
.added { color: #27ae60; }
|
|
773
|
+
.badge {
|
|
774
|
+
display: inline-block;
|
|
775
|
+
padding: 2px 8px;
|
|
776
|
+
border-radius: 4px;
|
|
777
|
+
font-size: 0.75em;
|
|
778
|
+
font-weight: 600;
|
|
779
|
+
text-transform: uppercase;
|
|
780
|
+
}
|
|
781
|
+
.badge-insert { background: #d4edda; color: #155724; }
|
|
782
|
+
.badge-delete { background: #f8d7da; color: #721c24; }
|
|
783
|
+
.badge-formatting { background: #cce5ff; color: #004085; }
|
|
784
|
+
.badge-structural { background: #fff3cd; color: #856404; }
|
|
785
|
+
.badge-table { background: #e2e3e5; color: #383d41; }
|
|
786
|
+
</style>
|
|
787
|
+
</head>
|
|
788
|
+
<body>
|
|
789
|
+
<h1>Document Changes</h1>
|
|
790
|
+
|
|
791
|
+
<div class="summary">
|
|
802
792
|
<p><strong>Total Changes:</strong> ${summary.total}</p>`;
|
|
803
793
|
if (summary.dateRange) {
|
|
804
|
-
html += `
|
|
794
|
+
html += `
|
|
805
795
|
<p><strong>Date Range:</strong> ${summary.dateRange.earliest.toLocaleDateString()} - ${summary.dateRange.latest.toLocaleDateString()}</p>`;
|
|
806
796
|
}
|
|
807
797
|
const authors = Object.keys(summary.byAuthor);
|
|
808
798
|
if (authors.length > 0) {
|
|
809
|
-
html += `
|
|
799
|
+
html += `
|
|
810
800
|
<p><strong>Authors:</strong> ${authors.join(', ')}</p>`;
|
|
811
801
|
}
|
|
812
|
-
html += `
|
|
813
|
-
</div>
|
|
802
|
+
html += `
|
|
803
|
+
</div>
|
|
814
804
|
`;
|
|
815
805
|
for (const [category, categoryEntries] of byCategory) {
|
|
816
806
|
if (categoryEntries.length === 0)
|
|
817
807
|
continue;
|
|
818
|
-
html += `
|
|
819
|
-
<section class="category">
|
|
820
|
-
<h2>${categoryTitles[category]}</h2>
|
|
808
|
+
html += `
|
|
809
|
+
<section class="category">
|
|
810
|
+
<h2>${categoryTitles[category]}</h2>
|
|
821
811
|
<ul class="change-list">`;
|
|
822
812
|
for (const entry of categoryEntries) {
|
|
823
813
|
const badgeClass = this.getBadgeClass(entry.revisionType);
|
|
824
814
|
const date = entry.date.toLocaleDateString();
|
|
825
|
-
html += `
|
|
826
|
-
<li class="change-item">
|
|
827
|
-
<span class="badge ${badgeClass}">${entry.revisionType}</span>
|
|
828
|
-
<div class="change-description">${this.escapeHTML(entry.description)}</div>
|
|
815
|
+
html += `
|
|
816
|
+
<li class="change-item">
|
|
817
|
+
<span class="badge ${badgeClass}">${entry.revisionType}</span>
|
|
818
|
+
<div class="change-description">${this.escapeHTML(entry.description)}</div>
|
|
829
819
|
<div class="change-meta">${this.escapeHTML(entry.author)} - ${date}</div>`;
|
|
830
820
|
if (entry.content.before || entry.content.after) {
|
|
831
|
-
html += `
|
|
821
|
+
html += `
|
|
832
822
|
<div class="change-content">`;
|
|
833
823
|
if (entry.content.before) {
|
|
834
824
|
html += `<span class="removed">${this.escapeHTML(entry.content.before || '')}</span> `;
|
|
@@ -838,15 +828,15 @@ class ChangelogGenerator {
|
|
|
838
828
|
}
|
|
839
829
|
html += `</div>`;
|
|
840
830
|
}
|
|
841
|
-
html += `
|
|
831
|
+
html += `
|
|
842
832
|
</li>`;
|
|
843
833
|
}
|
|
844
|
-
html += `
|
|
845
|
-
</ul>
|
|
834
|
+
html += `
|
|
835
|
+
</ul>
|
|
846
836
|
</section>`;
|
|
847
837
|
}
|
|
848
|
-
html += `
|
|
849
|
-
</body>
|
|
838
|
+
html += `
|
|
839
|
+
</body>
|
|
850
840
|
</html>`;
|
|
851
841
|
return html;
|
|
852
842
|
}
|
|
@@ -863,7 +853,7 @@ class ChangelogGenerator {
|
|
|
863
853
|
'Before',
|
|
864
854
|
'After',
|
|
865
855
|
'Paragraph',
|
|
866
|
-
'Run'
|
|
856
|
+
'Run',
|
|
867
857
|
];
|
|
868
858
|
const lines = [];
|
|
869
859
|
if (includeHeaders) {
|
|
@@ -900,18 +890,24 @@ class ChangelogGenerator {
|
|
|
900
890
|
}
|
|
901
891
|
static getSummaryByElement(entries) {
|
|
902
892
|
return {
|
|
903
|
-
paragraphs: entries.filter(e => e.revisionType === 'paragraphPropertiesChange' ||
|
|
893
|
+
paragraphs: entries.filter((e) => e.revisionType === 'paragraphPropertiesChange' ||
|
|
904
894
|
e.revisionType === 'numberingChange' ||
|
|
905
895
|
(e.revisionType === 'insert' && !e.location.runIndex) ||
|
|
906
896
|
(e.revisionType === 'delete' && !e.location.runIndex)),
|
|
907
|
-
tables: entries.filter(e => [
|
|
908
|
-
'
|
|
909
|
-
'
|
|
910
|
-
|
|
911
|
-
|
|
897
|
+
tables: entries.filter((e) => [
|
|
898
|
+
'tablePropertiesChange',
|
|
899
|
+
'tableRowPropertiesChange',
|
|
900
|
+
'tableCellPropertiesChange',
|
|
901
|
+
'tableExceptionPropertiesChange',
|
|
902
|
+
'tableCellInsert',
|
|
903
|
+
'tableCellDelete',
|
|
904
|
+
'tableCellMerge',
|
|
905
|
+
].includes(e.revisionType)),
|
|
906
|
+
sections: entries.filter((e) => e.revisionType === 'sectionPropertiesChange'),
|
|
907
|
+
runs: entries.filter((e) => e.revisionType === 'runPropertiesChange' ||
|
|
912
908
|
(e.revisionType === 'insert' && e.location.runIndex !== undefined) ||
|
|
913
909
|
(e.revisionType === 'delete' && e.location.runIndex !== undefined)),
|
|
914
|
-
hyperlinks: entries.filter(e => e.revisionType === 'hyperlinkChange'),
|
|
910
|
+
hyperlinks: entries.filter((e) => e.revisionType === 'hyperlinkChange'),
|
|
915
911
|
};
|
|
916
912
|
}
|
|
917
913
|
static sortEntries(entries, sortBy, order) {
|