docxmlater 10.0.2 → 10.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/constants/legacyCompatFlags.d.ts.map +1 -1
- package/dist/constants/legacyCompatFlags.js.map +1 -1
- package/dist/constants/limits.d.ts +0 -27
- package/dist/constants/limits.d.ts.map +1 -1
- package/dist/constants/limits.js +13 -13
- package/dist/constants/limits.js.map +1 -1
- package/dist/core/Document.d.ts +23 -19
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +197 -63
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentContent.d.ts.map +1 -1
- package/dist/core/DocumentContent.js.map +1 -1
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +59 -24
- package/dist/core/DocumentGenerator.js.map +1 -1
- package/dist/core/DocumentIdManager.d.ts.map +1 -1
- package/dist/core/DocumentIdManager.js.map +1 -1
- package/dist/core/DocumentParser.d.ts +6 -6
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +60 -54
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/DocumentValidator.d.ts.map +1 -1
- package/dist/core/DocumentValidator.js.map +1 -1
- package/dist/core/Relationship.d.ts.map +1 -1
- package/dist/core/Relationship.js +1 -1
- package/dist/core/Relationship.js.map +1 -1
- package/dist/core/RelationshipManager.js +3 -3
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/AlternateContent.js.map +1 -1
- package/dist/elements/Bookmark.d.ts.map +1 -1
- package/dist/elements/Bookmark.js.map +1 -1
- package/dist/elements/BookmarkManager.d.ts.map +1 -1
- package/dist/elements/BookmarkManager.js.map +1 -1
- package/dist/elements/Comment.js +1 -1
- package/dist/elements/Comment.js.map +1 -1
- package/dist/elements/CommentManager.d.ts.map +1 -1
- package/dist/elements/CommentManager.js +8 -2
- package/dist/elements/CommentManager.js.map +1 -1
- package/dist/elements/CommonTypes.d.ts.map +1 -1
- package/dist/elements/CommonTypes.js +1 -2
- package/dist/elements/CommonTypes.js.map +1 -1
- package/dist/elements/CustomXml.js.map +1 -1
- package/dist/elements/Endnote.d.ts.map +1 -1
- package/dist/elements/Endnote.js.map +1 -1
- package/dist/elements/EndnoteManager.d.ts.map +1 -1
- package/dist/elements/EndnoteManager.js.map +1 -1
- package/dist/elements/Field.d.ts.map +1 -1
- package/dist/elements/Field.js +31 -28
- package/dist/elements/Field.js.map +1 -1
- package/dist/elements/FieldHelpers.d.ts.map +1 -1
- package/dist/elements/FieldHelpers.js +6 -6
- package/dist/elements/FieldHelpers.js.map +1 -1
- package/dist/elements/FontManager.d.ts.map +1 -1
- package/dist/elements/FontManager.js.map +1 -1
- package/dist/elements/Footer.js.map +1 -1
- package/dist/elements/Footnote.d.ts.map +1 -1
- package/dist/elements/Footnote.js.map +1 -1
- package/dist/elements/FootnoteManager.d.ts.map +1 -1
- package/dist/elements/FootnoteManager.js.map +1 -1
- package/dist/elements/Header.js.map +1 -1
- package/dist/elements/HeaderFooterManager.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +5 -5
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Image.d.ts +2 -2
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +21 -5
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/ImageManager.d.ts.map +1 -1
- package/dist/elements/ImageManager.js +2 -2
- package/dist/elements/ImageManager.js.map +1 -1
- package/dist/elements/ImageRun.js.map +1 -1
- package/dist/elements/MathElement.js.map +1 -1
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +128 -117
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/PreservedElement.js.map +1 -1
- package/dist/elements/PropertyChangeTypes.js.map +1 -1
- package/dist/elements/RangeMarker.js.map +1 -1
- package/dist/elements/Revision.d.ts +1 -0
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +44 -5
- package/dist/elements/Revision.js.map +1 -1
- package/dist/elements/RevisionContent.js.map +1 -1
- package/dist/elements/RevisionManager.d.ts.map +1 -1
- package/dist/elements/RevisionManager.js.map +1 -1
- package/dist/elements/Run.d.ts.map +1 -1
- package/dist/elements/Run.js +1 -3
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +127 -118
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Shape.d.ts.map +1 -1
- package/dist/elements/Shape.js +21 -0
- package/dist/elements/Shape.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +20 -8
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/Table.d.ts +2 -2
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +29 -35
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +2 -2
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +63 -67
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableGridChange.js.map +1 -1
- package/dist/elements/TableOfContents.d.ts +6 -6
- package/dist/elements/TableOfContents.d.ts.map +1 -1
- package/dist/elements/TableOfContents.js.map +1 -1
- package/dist/elements/TableOfContentsElement.js.map +1 -1
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +65 -47
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/elements/TextBox.d.ts.map +1 -1
- package/dist/elements/TextBox.js +1 -1
- package/dist/elements/TextBox.js.map +1 -1
- package/dist/formatting/AbstractNumbering.d.ts +1 -1
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +11 -11
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingInstance.d.ts.map +1 -1
- package/dist/formatting/NumberingInstance.js +4 -4
- package/dist/formatting/NumberingInstance.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +26 -26
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/NumberingManager.d.ts +1 -1
- package/dist/formatting/NumberingManager.d.ts.map +1 -1
- package/dist/formatting/NumberingManager.js.map +1 -1
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +87 -95
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +3 -3
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/helpers/CleanupHelper.js.map +1 -1
- package/dist/images/ImageOptimizer.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/managers/DrawingManager.d.ts.map +1 -1
- package/dist/managers/DrawingManager.js.map +1 -1
- package/dist/tracking/DocumentTrackingContext.js.map +1 -1
- package/dist/tracking/TrackingContext.js.map +1 -1
- package/dist/types/compatibility-types.js.map +1 -1
- package/dist/types/formatting.js.map +1 -1
- package/dist/types/list-types.d.ts +4 -4
- package/dist/types/list-types.d.ts.map +1 -1
- package/dist/types/list-types.js.map +1 -1
- package/dist/types/settings-types.js.map +1 -1
- package/dist/types/styleConfig.js.map +1 -1
- package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
- package/dist/utils/ChangelogGenerator.js.map +1 -1
- package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
- package/dist/utils/CompatibilityUpgrader.js +7 -7
- package/dist/utils/CompatibilityUpgrader.js.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.js +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
- package/dist/utils/MoveOperationHelper.js.map +1 -1
- package/dist/utils/RevisionAwareProcessor.js.map +1 -1
- package/dist/utils/RevisionWalker.js.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
- package/dist/utils/ShadingResolver.js +1 -1
- package/dist/utils/ShadingResolver.js.map +1 -1
- package/dist/utils/acceptRevisions.d.ts +0 -28
- package/dist/utils/acceptRevisions.d.ts.map +1 -1
- package/dist/utils/acceptRevisions.js +5 -7
- package/dist/utils/acceptRevisions.js.map +1 -1
- package/dist/utils/cnfStyleDecoder.js +1 -1
- package/dist/utils/cnfStyleDecoder.js.map +1 -1
- package/dist/utils/corruptionDetection.js.map +1 -1
- package/dist/utils/dateFormatting.js.map +1 -1
- package/dist/utils/deepClone.d.ts +0 -1
- package/dist/utils/deepClone.d.ts.map +1 -1
- package/dist/utils/deepClone.js +0 -7
- package/dist/utils/deepClone.js.map +1 -1
- package/dist/utils/diagnostics.d.ts +2 -2
- package/dist/utils/diagnostics.d.ts.map +1 -1
- package/dist/utils/diagnostics.js.map +1 -1
- package/dist/utils/errorHandling.js.map +1 -1
- package/dist/utils/formatting.js.map +1 -1
- package/dist/utils/list-detection.d.ts +2 -2
- package/dist/utils/list-detection.d.ts.map +1 -1
- package/dist/utils/list-detection.js +3 -3
- package/dist/utils/list-detection.js.map +1 -1
- package/dist/utils/logger.d.ts +2 -4
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +0 -2
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/parsingHelpers.js.map +1 -1
- package/dist/utils/stripTrackedChanges.d.ts +0 -19
- package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
- package/dist/utils/stripTrackedChanges.js +0 -2
- package/dist/utils/stripTrackedChanges.js.map +1 -1
- package/dist/utils/textDiff.js.map +1 -1
- package/dist/utils/units.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/xmlSanitization.js.map +1 -1
- package/dist/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/validation/RevisionValidator.js.map +1 -1
- package/dist/validation/ValidationRules.js.map +1 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/xml/XMLBuilder.d.ts.map +1 -1
- package/dist/xml/XMLBuilder.js +10 -0
- package/dist/xml/XMLBuilder.js.map +1 -1
- package/dist/xml/XMLParser.d.ts.map +1 -1
- package/dist/xml/XMLParser.js +4 -5
- package/dist/xml/XMLParser.js.map +1 -1
- package/dist/zip/ZipHandler.js.map +1 -1
- package/dist/zip/ZipReader.js.map +1 -1
- package/dist/zip/ZipWriter.js.map +1 -1
- package/dist/zip/errors.js.map +1 -1
- package/dist/zip/types.js.map +1 -1
- package/package.json +34 -4
- package/src/__tests__/helper-methods.test.ts +512 -0
- package/src/constants/legacyCompatFlags.ts +138 -0
- package/src/constants/limits.ts +50 -0
- package/src/core/CLAUDE.md +109 -0
- package/src/core/Document.ts +15569 -0
- package/src/core/DocumentContent.ts +467 -0
- package/src/core/DocumentGenerator.ts +1104 -0
- package/src/core/DocumentIdManager.ts +158 -0
- package/src/core/DocumentParser.ts +10107 -0
- package/src/core/DocumentValidator.ts +372 -0
- package/src/core/Relationship.ts +367 -0
- package/src/core/RelationshipManager.ts +428 -0
- package/src/elements/AlternateContent.ts +42 -0
- package/src/elements/Bookmark.ts +210 -0
- package/src/elements/BookmarkManager.ts +250 -0
- package/src/elements/CLAUDE.md +126 -0
- package/src/elements/Comment.ts +359 -0
- package/src/elements/CommentManager.ts +502 -0
- package/src/elements/CommonTypes.ts +549 -0
- package/src/elements/CustomXml.ts +36 -0
- package/src/elements/Endnote.ts +217 -0
- package/src/elements/EndnoteManager.ts +249 -0
- package/src/elements/Field.ts +1233 -0
- package/src/elements/FieldHelpers.ts +333 -0
- package/src/elements/FontManager.ts +339 -0
- package/src/elements/Footer.ts +269 -0
- package/src/elements/Footnote.ts +217 -0
- package/src/elements/FootnoteManager.ts +249 -0
- package/src/elements/Header.ts +269 -0
- package/src/elements/HeaderFooterManager.ts +219 -0
- package/src/elements/Hyperlink.ts +1146 -0
- package/src/elements/Image.ts +1756 -0
- package/src/elements/ImageManager.ts +432 -0
- package/src/elements/ImageRun.ts +59 -0
- package/src/elements/MathElement.ts +65 -0
- package/src/elements/Paragraph.ts +4227 -0
- package/src/elements/PreservedElement.ts +53 -0
- package/src/elements/PropertyChangeTypes.ts +442 -0
- package/src/elements/RangeMarker.ts +400 -0
- package/src/elements/Revision.ts +1217 -0
- package/src/elements/RevisionContent.ts +73 -0
- package/src/elements/RevisionManager.ts +1070 -0
- package/src/elements/Run.ts +3068 -0
- package/src/elements/Section.ts +1421 -0
- package/src/elements/Shape.ts +873 -0
- package/src/elements/StructuredDocumentTag.ts +978 -0
- package/src/elements/Table.ts +2524 -0
- package/src/elements/TableCell.ts +1586 -0
- package/src/elements/TableGridChange.ts +151 -0
- package/src/elements/TableOfContents.ts +691 -0
- package/src/elements/TableOfContentsElement.ts +89 -0
- package/src/elements/TableRow.ts +906 -0
- package/src/elements/TextBox.ts +768 -0
- package/src/formatting/AbstractNumbering.ts +548 -0
- package/src/formatting/CLAUDE.md +74 -0
- package/src/formatting/NumberingInstance.ts +212 -0
- package/src/formatting/NumberingLevel.ts +1006 -0
- package/src/formatting/NumberingManager.ts +827 -0
- package/src/formatting/Style.ts +1833 -0
- package/src/formatting/StylesManager.ts +1005 -0
- package/src/helpers/CleanupHelper.ts +524 -0
- package/src/images/ImageOptimizer.ts +274 -0
- package/src/index.ts +554 -0
- package/src/managers/CLAUDE.md +47 -0
- package/src/managers/DrawingManager.ts +319 -0
- package/src/tracking/DocumentTrackingContext.ts +643 -0
- package/src/tracking/TrackingContext.ts +173 -0
- package/src/types/compatibility-types.ts +49 -0
- package/src/types/formatting.ts +210 -0
- package/src/types/list-types.ts +152 -0
- package/src/types/settings-types.ts +59 -0
- package/src/types/styleConfig.ts +189 -0
- package/src/utils/CLAUDE.md +153 -0
- package/src/utils/ChangelogGenerator.ts +1581 -0
- package/src/utils/CompatibilityUpgrader.ts +237 -0
- package/src/utils/InMemoryRevisionAcceptor.ts +668 -0
- package/src/utils/MoveOperationHelper.ts +238 -0
- package/src/utils/RevisionAwareProcessor.ts +526 -0
- package/src/utils/RevisionWalker.ts +457 -0
- package/src/utils/SelectiveRevisionAcceptor.ts +613 -0
- package/src/utils/ShadingResolver.ts +107 -0
- package/src/utils/acceptRevisions.ts +714 -0
- package/src/utils/cnfStyleDecoder.ts +217 -0
- package/src/utils/corruptionDetection.ts +345 -0
- package/src/utils/dateFormatting.ts +20 -0
- package/src/utils/deepClone.ts +78 -0
- package/src/utils/diagnostics.ts +129 -0
- package/src/utils/errorHandling.ts +80 -0
- package/src/utils/formatting.ts +213 -0
- package/src/utils/list-detection.ts +274 -0
- package/src/utils/logger.ts +404 -0
- package/src/utils/parsingHelpers.ts +190 -0
- package/src/utils/stripTrackedChanges.ts +353 -0
- package/src/utils/textDiff.ts +100 -0
- package/src/utils/units.ts +421 -0
- package/src/utils/validation.ts +542 -0
- package/src/utils/xmlSanitization.ts +182 -0
- package/src/validation/RevisionAutoFixer.ts +542 -0
- package/src/validation/RevisionValidator.ts +460 -0
- package/src/validation/ValidationRules.ts +338 -0
- package/src/validation/index.ts +30 -0
- package/src/xml/CLAUDE.md +65 -0
- package/src/xml/XMLBuilder.ts +871 -0
- package/src/xml/XMLParser.ts +919 -0
- package/src/zip/CLAUDE.md +55 -0
- package/src/zip/ZipHandler.ts +637 -0
- package/src/zip/ZipReader.ts +299 -0
- package/src/zip/ZipWriter.ts +390 -0
- package/src/zip/errors.ts +69 -0
- package/src/zip/types.ts +116 -0
- package/dist/core/ListNormalizer.d.ts +0 -23
- package/dist/core/ListNormalizer.d.ts.map +0 -1
- package/dist/core/ListNormalizer.js +0 -624
- package/dist/core/ListNormalizer.js.map +0 -1
- package/dist/images/index.d.ts +0 -2
- package/dist/images/index.d.ts.map +0 -1
- package/dist/images/index.js +0 -8
- package/dist/images/index.js.map +0 -1
- package/dist/ms-doc/cfb/CFBReader.d.ts +0 -35
- package/dist/ms-doc/cfb/CFBReader.d.ts.map +0 -1
- package/dist/ms-doc/cfb/CFBReader.js +0 -360
- package/dist/ms-doc/cfb/CFBReader.js.map +0 -1
- package/dist/ms-doc/converter/DocToDocxConverter.d.ts +0 -55
- package/dist/ms-doc/converter/DocToDocxConverter.d.ts.map +0 -1
- package/dist/ms-doc/converter/DocToDocxConverter.js +0 -324
- package/dist/ms-doc/converter/DocToDocxConverter.js.map +0 -1
- package/dist/ms-doc/fib/FIB.d.ts +0 -18
- package/dist/ms-doc/fib/FIB.d.ts.map +0 -1
- package/dist/ms-doc/fib/FIB.js +0 -342
- package/dist/ms-doc/fib/FIB.js.map +0 -1
- package/dist/ms-doc/fields/FieldParser.d.ts +0 -31
- package/dist/ms-doc/fields/FieldParser.d.ts.map +0 -1
- package/dist/ms-doc/fields/FieldParser.js +0 -266
- package/dist/ms-doc/fields/FieldParser.js.map +0 -1
- package/dist/ms-doc/images/PictureExtractor.d.ts +0 -22
- package/dist/ms-doc/images/PictureExtractor.d.ts.map +0 -1
- package/dist/ms-doc/images/PictureExtractor.js +0 -233
- package/dist/ms-doc/images/PictureExtractor.js.map +0 -1
- package/dist/ms-doc/index.d.ts +0 -20
- package/dist/ms-doc/index.d.ts.map +0 -1
- package/dist/ms-doc/index.js +0 -59
- package/dist/ms-doc/index.js.map +0 -1
- package/dist/ms-doc/properties/SPRM.d.ts +0 -210
- package/dist/ms-doc/properties/SPRM.d.ts.map +0 -1
- package/dist/ms-doc/properties/SPRM.js +0 -633
- package/dist/ms-doc/properties/SPRM.js.map +0 -1
- package/dist/ms-doc/sections/SectionParser.d.ts +0 -25
- package/dist/ms-doc/sections/SectionParser.d.ts.map +0 -1
- package/dist/ms-doc/sections/SectionParser.js +0 -214
- package/dist/ms-doc/sections/SectionParser.js.map +0 -1
- package/dist/ms-doc/styles/StyleSheet.d.ts +0 -23
- package/dist/ms-doc/styles/StyleSheet.d.ts.map +0 -1
- package/dist/ms-doc/styles/StyleSheet.js +0 -268
- package/dist/ms-doc/styles/StyleSheet.js.map +0 -1
- package/dist/ms-doc/subdocuments/SubdocumentParser.d.ts +0 -61
- package/dist/ms-doc/subdocuments/SubdocumentParser.d.ts.map +0 -1
- package/dist/ms-doc/subdocuments/SubdocumentParser.js +0 -208
- package/dist/ms-doc/subdocuments/SubdocumentParser.js.map +0 -1
- package/dist/ms-doc/tables/TableParser.d.ts +0 -29
- package/dist/ms-doc/tables/TableParser.d.ts.map +0 -1
- package/dist/ms-doc/tables/TableParser.js +0 -176
- package/dist/ms-doc/tables/TableParser.js.map +0 -1
- package/dist/ms-doc/text/PieceTable.d.ts +0 -21
- package/dist/ms-doc/text/PieceTable.d.ts.map +0 -1
- package/dist/ms-doc/text/PieceTable.js +0 -171
- package/dist/ms-doc/text/PieceTable.js.map +0 -1
- package/dist/ms-doc/types/Constants.d.ts +0 -99
- package/dist/ms-doc/types/Constants.d.ts.map +0 -1
- package/dist/ms-doc/types/Constants.js +0 -102
- package/dist/ms-doc/types/Constants.js.map +0 -1
- package/dist/ms-doc/types/DocTypes.d.ts +0 -368
- package/dist/ms-doc/types/DocTypes.d.ts.map +0 -1
- package/dist/ms-doc/types/DocTypes.js +0 -3
- package/dist/ms-doc/types/DocTypes.js.map +0 -1
- package/dist/tracking/index.d.ts +0 -3
- package/dist/tracking/index.d.ts.map +0 -1
- package/dist/tracking/index.js +0 -6
- package/dist/tracking/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"corruptionDetection.js","sourceRoot":"","sources":["../../src/utils/corruptionDetection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"corruptionDetection.js","sourceRoot":"","sources":["../../src/utils/corruptionDetection.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Corruption Detection - Utilities to detect and diagnose XML corruption in documents\r\n *\r\n * This module helps users identify when they've accidentally passed XML-like strings\r\n * to text methods instead of using the proper API. This is a common mistake that\r\n * results in escaped XML tags being displayed as literal text in Word.\r\n */\r\n\r\nimport { Paragraph } from '../elements/Paragraph';\r\nimport { Run } from '../elements/Run';\r\n\r\n/** Minimal interface for document corruption scanning (avoids circular import) */\r\ninterface DocumentLike {\r\n getAllParagraphs?(): Paragraph[];\r\n}\r\n\r\n/**\r\n * Types of corruption that can be detected\r\n */\r\nexport type CorruptionType =\r\n | 'escaped-xml' // <w:t> style escaping\r\n | 'xml-tags' // <w:t> tags in text\r\n | 'entities' // " ' etc.\r\n | 'mixed'; // Multiple types\r\n\r\n/**\r\n * Location of corruption within a document\r\n */\r\nexport interface CorruptionLocation {\r\n /** Index of the paragraph containing corruption */\r\n paragraphIndex: number;\r\n /** Index of the run within the paragraph */\r\n runIndex: number;\r\n /** The corrupted text content */\r\n text: string;\r\n /** Type of corruption detected */\r\n corruptionType: CorruptionType;\r\n /** Suggested fix for the corruption */\r\n suggestedFix: string;\r\n /** Length of corrupted text */\r\n length: number;\r\n}\r\n\r\n/**\r\n * Comprehensive corruption report for a document\r\n */\r\nexport interface CorruptionReport {\r\n /** Whether any corruption was found */\r\n isCorrupted: boolean;\r\n /** Total number of corrupted locations */\r\n totalLocations: number;\r\n /** Detailed list of corruption locations */\r\n locations: CorruptionLocation[];\r\n /** Human-readable summary */\r\n summary: string;\r\n /** Statistics about corruption types */\r\n statistics: {\r\n escapedXml: number;\r\n xmlTags: number;\r\n entities: number;\r\n mixed: number;\r\n };\r\n}\r\n\r\n/**\r\n * Detects XML corruption in a document\r\n *\r\n * Scans all paragraphs and runs to find text that contains escaped XML\r\n * or XML-like patterns that suggest the user passed XML strings to text methods.\r\n *\r\n * @param doc - The document to scan\r\n * @returns Corruption report with locations and suggested fixes\r\n *\r\n * @example\r\n * ```typescript\r\n * const doc = await Document.load('corrupted.docx');\r\n * const report = detectCorruptionInDocument(doc);\r\n *\r\n * if (report.isCorrupted) {\r\n * console.log(report.summary);\r\n * report.locations.forEach(loc => {\r\n * console.log(`Paragraph ${loc.paragraphIndex}, Run ${loc.runIndex}: ${loc.suggestedFix}`);\r\n * });\r\n * }\r\n * ```\r\n */\r\nexport function detectCorruptionInDocument(doc: DocumentLike): CorruptionReport {\r\n const locations: CorruptionLocation[] = [];\r\n const stats = {\r\n escapedXml: 0,\r\n xmlTags: 0,\r\n entities: 0,\r\n mixed: 0,\r\n };\r\n\r\n // Get all paragraphs from the document\r\n const paragraphs = doc.getAllParagraphs ? doc.getAllParagraphs() : [];\r\n\r\n // Scan each paragraph\r\n for (let pIdx = 0; pIdx < paragraphs.length; pIdx++) {\r\n const paragraph = paragraphs[pIdx];\r\n if (!paragraph || !(paragraph instanceof Paragraph)) {\r\n continue;\r\n }\r\n\r\n // Get runs from paragraph\r\n const runs = paragraph.getRuns();\r\n\r\n // Scan each run\r\n for (let rIdx = 0; rIdx < runs.length; rIdx++) {\r\n const run = runs[rIdx];\r\n if (!run || !(run instanceof Run)) {\r\n continue;\r\n }\r\n\r\n const text = run.getText();\r\n if (!text || text.length === 0) {\r\n continue;\r\n }\r\n\r\n // Check for corruption in this text\r\n const corruption = detectCorruptionInText(text);\r\n\r\n if (corruption.isCorrupted) {\r\n locations.push({\r\n paragraphIndex: pIdx,\r\n runIndex: rIdx,\r\n text: text,\r\n corruptionType: corruption.type,\r\n suggestedFix: corruption.suggestedFix,\r\n length: text.length,\r\n });\r\n\r\n // Update statistics\r\n if (corruption.type === 'escaped-xml') stats.escapedXml++;\r\n else if (corruption.type === 'xml-tags') stats.xmlTags++;\r\n else if (corruption.type === 'entities') stats.entities++;\r\n else if (corruption.type === 'mixed') stats.mixed++;\r\n }\r\n }\r\n }\r\n\r\n // Generate summary\r\n const summary = generateSummary(locations, stats);\r\n\r\n return {\r\n isCorrupted: locations.length > 0,\r\n totalLocations: locations.length,\r\n locations,\r\n summary,\r\n statistics: stats,\r\n };\r\n}\r\n\r\n/**\r\n * Internal result from text corruption detection\r\n */\r\ninterface TextCorruptionResult {\r\n isCorrupted: boolean;\r\n type: CorruptionType;\r\n suggestedFix: string;\r\n}\r\n\r\n/**\r\n * Detects XML corruption in a single text string\r\n *\r\n * Checks for common patterns that indicate the user passed XML strings\r\n * instead of plain text.\r\n *\r\n * @param text - Text to check\r\n * @returns True if corruption detected\r\n *\r\n * @example\r\n * ```typescript\r\n * const corrupted = detectCorruptionInText('Hello <w:t>World');\r\n * // Returns: true\r\n *\r\n * const clean = detectCorruptionInText('Hello World');\r\n * // Returns: false\r\n * ```\r\n */\r\nexport function detectCorruptionInText(text: string): TextCorruptionResult {\r\n if (!text || typeof text !== 'string') {\r\n return { isCorrupted: false, type: 'mixed', suggestedFix: String(text || '') };\r\n }\r\n\r\n let hasEscapedXml = false;\r\n let hasXmlTags = false;\r\n let hasEntities = false;\r\n\r\n // Pattern 1: Escaped XML tags (most common corruption)\r\n // Matches: <w:t>, </w:t>, <w:r>, etc.\r\n const escapedXmlPattern = /<\\/?w:[a-z]+[^&]*>/i;\r\n if (escapedXmlPattern.test(text)) {\r\n hasEscapedXml = true;\r\n }\r\n\r\n // Pattern 2: Raw XML tags (less common, but possible)\r\n // Matches: <w:t>, </w:t>, <w:r>, etc.\r\n const xmlTagPattern = /<\\/?w:[a-z]+[^>]*>/i;\r\n if (xmlTagPattern.test(text)) {\r\n hasXmlTags = true;\r\n }\r\n\r\n // Pattern 3: Escaped entities combined with Word XML attributes\r\n // ONLY flag if we see Word-specific patterns, not just any entities\r\n // This avoids false positives from legitimate escaped characters\r\n // Matches all OOXML namespaces: w: (word), a: (drawingML), pic: (picture), r: (relationships), wp: (word drawing)\r\n const wordXmlAttributePattern = /(<(?:w|a|r|pic|wp|m|mc|wpc|wps|wpg|c|dgm|o|v):|xml:space="preserve")/i;\r\n if (wordXmlAttributePattern.test(text)) {\r\n hasEntities = true;\r\n }\r\n\r\n // Determine corruption type\r\n const corruptionCount = [hasEscapedXml, hasXmlTags, hasEntities].filter(Boolean).length;\r\n\r\n if (corruptionCount === 0) {\r\n return { isCorrupted: false, type: 'mixed', suggestedFix: text };\r\n }\r\n\r\n // More precise type detection - check primary indicator first\r\n let type: CorruptionType;\r\n if (hasEscapedXml && (hasEntities || hasXmlTags)) {\r\n // Escaped XML combined with other patterns - this is the classic corruption case\r\n type = 'escaped-xml';\r\n } else if (hasXmlTags && hasEntities) {\r\n type = 'xml-tags';\r\n } else if (corruptionCount > 1) {\r\n type = 'mixed';\r\n } else if (hasEscapedXml) {\r\n type = 'escaped-xml';\r\n } else if (hasXmlTags) {\r\n type = 'xml-tags';\r\n } else {\r\n type = 'entities';\r\n }\r\n\r\n const suggestedFix = suggestFix(text);\r\n\r\n return { isCorrupted: true, type, suggestedFix };\r\n}\r\n\r\n/**\r\n * Suggests a fix for corrupted text\r\n *\r\n * Attempts to clean XML patterns from text to restore the intended content.\r\n * Uses the same cleaning logic as cleanXmlFromText() from validation.ts.\r\n *\r\n * @param corruptedText - Text containing XML corruption\r\n * @returns Cleaned text with XML patterns removed\r\n *\r\n * @example\r\n * ```typescript\r\n * const fixed = suggestFix('Hello <w:t>World</w:t>');\r\n * // Returns: 'Hello World'\r\n * ```\r\n */\r\nexport function suggestFix(corruptedText: string): string {\r\n if (!corruptedText || typeof corruptedText !== 'string') {\r\n return corruptedText;\r\n }\r\n\r\n let cleaned = corruptedText;\r\n\r\n // Step 1: Unescape XML entities first\r\n cleaned = cleaned\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/"/g, '\"')\r\n .replace(/'/g, \"'\")\r\n .replace(/&/g, '&');\r\n\r\n // Step 2: Remove Word XML tags\r\n // Matches: <w:t xml:space=\"preserve\">, </w:t>, <w:r>, etc.\r\n cleaned = cleaned.replace(/<w:[^>]+>/g, '');\r\n cleaned = cleaned.replace(/<\\/w:[^>]+>/g, '');\r\n\r\n // Step 3: Remove any remaining XML-like tags\r\n cleaned = cleaned.replace(/<[^>]+>/g, '');\r\n\r\n // Step 4: Clean up whitespace\r\n cleaned = cleaned.replace(/\\s+/g, ' ').trim();\r\n\r\n return cleaned;\r\n}\r\n\r\n/**\r\n * Generates a human-readable summary of corruption\r\n */\r\nfunction generateSummary(\r\n locations: CorruptionLocation[],\r\n stats: { escapedXml: number; xmlTags: number; entities: number; mixed: number }\r\n): string {\r\n if (locations.length === 0) {\r\n return 'No corruption detected. Document is clean.';\r\n }\r\n\r\n const lines: string[] = [];\r\n lines.push(`Found ${locations.length} corrupted text location(s) in the document.`);\r\n lines.push('');\r\n lines.push('Corruption breakdown:');\r\n\r\n if (stats.escapedXml > 0) {\r\n lines.push(` - Escaped XML: ${stats.escapedXml} location(s)`);\r\n }\r\n if (stats.xmlTags > 0) {\r\n lines.push(` - XML Tags: ${stats.xmlTags} location(s)`);\r\n }\r\n if (stats.entities > 0) {\r\n lines.push(` - XML Entities: ${stats.entities} location(s)`);\r\n }\r\n if (stats.mixed > 0) {\r\n lines.push(` - Mixed: ${stats.mixed} location(s)`);\r\n }\r\n\r\n lines.push('');\r\n lines.push('This corruption typically occurs when XML strings are passed to text methods.');\r\n lines.push('Instead of: paragraph.addText(\"Text<w:t>1</w:t>\")');\r\n lines.push('Use: paragraph.addText(\"Text\"); paragraph.addText(\"1\");');\r\n lines.push('');\r\n lines.push('To automatically clean text, use: new Run(text, { cleanXmlFromText: true })');\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\n/**\r\n * Checks if text looks like it might be corrupted (less strict check)\r\n *\r\n * This is a quick check that can be used for warnings without full analysis.\r\n *\r\n * @param text - Text to check\r\n * @returns True if text might be corrupted\r\n */\r\nexport function looksCorrupted(text: string): boolean {\r\n if (!text || typeof text !== 'string') {\r\n return false;\r\n }\r\n\r\n // Quick regex checks for common corruption patterns\r\n return (\r\n /<\\/?(w|r|p):[a-z]+/i.test(text) ||\r\n /<\\/?(w|r|p):[a-z]+/i.test(text) ||\r\n /xml:space="/i.test(text)\r\n );\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateFormatting.js","sourceRoot":"","sources":["../../src/utils/dateFormatting.ts"],"names":[],"mappings":";;AAiBA,4CAEC;AAFD,SAAgB,gBAAgB,CAAC,IAAU;IACzC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACtD,CAAC"}
|
|
1
|
+
{"version":3,"file":"dateFormatting.js","sourceRoot":"","sources":["../../src/utils/dateFormatting.ts"],"names":[],"mappings":";;AAiBA,4CAEC;AAFD,SAAgB,gBAAgB,CAAC,IAAU;IACzC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACtD,CAAC","sourcesContent":["/**\r\n * Date formatting utilities for OOXML XML generation\r\n *\r\n * ECMA-376 requires dates in ISO 8601 format WITHOUT milliseconds:\r\n * Valid: \"2024-01-01T12:00:00Z\"\r\n * Invalid: \"2024-01-01T12:00:00.000Z\" (Word rejects milliseconds in w:date attributes)\r\n *\r\n * JavaScript's Date.toISOString() always includes milliseconds (YYYY-MM-DDTHH:mm:ss.sssZ),\r\n * so we must strip the .sss portion for all w:date attributes in tracked changes.\r\n */\r\n\r\n/**\r\n * Formats a Date to ISO 8601 without milliseconds for OOXML w:date attributes.\r\n *\r\n * @param date - Date to format\r\n * @returns ISO 8601 date string without milliseconds (e.g., \"2024-01-01T12:00:00Z\")\r\n */\r\nexport function formatDateForXml(date: Date): string {\r\n return date.toISOString().replace(/\\.\\d{3}Z$/, 'Z');\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepClone.d.ts","sourceRoot":"","sources":["../../src/utils/deepClone.ts"],"names":[],"mappings":"AAwBA,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAoDtC
|
|
1
|
+
{"version":3,"file":"deepClone.d.ts","sourceRoot":"","sources":["../../src/utils/deepClone.ts"],"names":[],"mappings":"AAwBA,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAoDtC"}
|
package/dist/utils/deepClone.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.deepClone = deepClone;
|
|
4
|
-
exports.shallowClone = shallowClone;
|
|
5
4
|
function deepClone(obj) {
|
|
6
5
|
if (obj === null || typeof obj !== 'object') {
|
|
7
6
|
return obj;
|
|
@@ -41,10 +40,4 @@ function deepClone(obj) {
|
|
|
41
40
|
}
|
|
42
41
|
return objCopy;
|
|
43
42
|
}
|
|
44
|
-
function shallowClone(obj) {
|
|
45
|
-
if (Array.isArray(obj)) {
|
|
46
|
-
return [...obj];
|
|
47
|
-
}
|
|
48
|
-
return { ...obj };
|
|
49
|
-
}
|
|
50
43
|
//# sourceMappingURL=deepClone.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepClone.js","sourceRoot":"","sources":["../../src/utils/deepClone.ts"],"names":[],"mappings":";;AAwBA,8BAoDC;
|
|
1
|
+
{"version":3,"file":"deepClone.js","sourceRoot":"","sources":["../../src/utils/deepClone.ts"],"names":[],"mappings":";;AAwBA,8BAoDC;AApDD,SAAgB,SAAS,CAAI,GAAM;IAEjC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,GAAG,CAAC;IACb,CAAC;IAGD,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAM,CAAC;IACtC,CAAC;IAGD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAc,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,OAAY,CAAC;IACtB,CAAC;IAGD,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACzB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,OAAO,OAAY,CAAC;IACtB,CAAC;IAGD,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAClB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,OAAO,OAAY,CAAC;IACtB,CAAC;IAGD,IAAI,GAAG,YAAY,MAAM,EAAE,CAAC;QAC1B,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAM,CAAC;IAChD,CAAC;IAGD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAA4B,CAAC;IACrF,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAE,GAA+B,CAAC,GAAG,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,OAAO,OAAY,CAAC;AACtB,CAAC","sourcesContent":["/**\r\n * Deep clone utility for safely cloning objects\r\n * More efficient and type-safe than JSON.parse(JSON.stringify())\r\n */\r\n\r\n/**\r\n * Deep clone an object using structured cloning\r\n * Preserves most object types including Date, RegExp, Map, Set, etc.\r\n *\r\n * For simple objects (like formatting options), this is more efficient\r\n * than JSON.parse(JSON.stringify()) and doesn't lose non-serializable values.\r\n *\r\n * @param obj - Object to clone\r\n * @returns Deep cloned copy of the object\r\n *\r\n * @example\r\n * ```typescript\r\n * const original = { bold: true, color: \"FF0000\", date: new Date() };\r\n * const cloned = deepClone(original);\r\n * cloned.bold = false;\r\n * console.log(original.bold); // true (unchanged)\r\n * console.log(cloned.date instanceof Date); // true (preserved)\r\n * ```\r\n */\r\nexport function deepClone<T>(obj: T): T {\r\n // Handle primitive types and null\r\n if (obj === null || typeof obj !== 'object') {\r\n return obj;\r\n }\r\n\r\n // Handle Date\r\n if (obj instanceof Date) {\r\n return new Date(obj.getTime()) as T;\r\n }\r\n\r\n // Handle Array\r\n if (Array.isArray(obj)) {\r\n const arrCopy: unknown[] = [];\r\n for (let i = 0; i < obj.length; i++) {\r\n arrCopy[i] = deepClone(obj[i]);\r\n }\r\n return arrCopy as T;\r\n }\r\n\r\n // Handle Map\r\n if (obj instanceof Map) {\r\n const mapCopy = new Map();\r\n obj.forEach((value, key) => {\r\n mapCopy.set(deepClone(key), deepClone(value));\r\n });\r\n return mapCopy as T;\r\n }\r\n\r\n // Handle Set\r\n if (obj instanceof Set) {\r\n const setCopy = new Set();\r\n obj.forEach(value => {\r\n setCopy.add(deepClone(value));\r\n });\r\n return setCopy as T;\r\n }\r\n\r\n // Handle RegExp\r\n if (obj instanceof RegExp) {\r\n return new RegExp(obj.source, obj.flags) as T;\r\n }\r\n\r\n // Handle plain objects\r\n const objCopy = Object.create(Object.getPrototypeOf(obj)) as Record<string, unknown>;\r\n for (const key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n objCopy[key] = deepClone((obj as Record<string, unknown>)[key]);\r\n }\r\n }\r\n\r\n return objCopy as T;\r\n}\r\n\r\n"]}
|
|
@@ -12,9 +12,9 @@ export declare function logParsing(message: string, data?: unknown): void;
|
|
|
12
12
|
export declare function logSerialization(message: string, data?: unknown): void;
|
|
13
13
|
export declare function logTextDirection(message: string, data?: unknown): void;
|
|
14
14
|
export declare function logVerbose(message: string, data?: unknown): void;
|
|
15
|
-
export declare function logParagraphContent(source: 'parsing' | 'serialization', paraIndex: number, runs:
|
|
15
|
+
export declare function logParagraphContent(source: 'parsing' | 'serialization', paraIndex: number, runs: {
|
|
16
16
|
text: string;
|
|
17
17
|
rtl?: boolean;
|
|
18
|
-
}
|
|
18
|
+
}[], bidi?: boolean): void;
|
|
19
19
|
export declare function logTextComparison(label: string, before: string, after: string): void;
|
|
20
20
|
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/utils/diagnostics.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB;AAeD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,OAAO,CAAC,gBAAgB,CAAM,GAAG,IAAI,CAM/E;AAKD,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAKD,wBAAgB,mBAAmB,IAAI,gBAAgB,CAEtD;AAKD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAIhE;AAKD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAItE;AAKD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAItE;AAKD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAIhE;AAKD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,GAAG,eAAe,EACnC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/utils/diagnostics.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB;AAeD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,OAAO,CAAC,gBAAgB,CAAM,GAAG,IAAI,CAM/E;AAKD,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAKD,wBAAgB,mBAAmB,IAAI,gBAAgB,CAEtD;AAKD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAIhE;AAKD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAItE;AAKD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAItE;AAKD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAIhE;AAKD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,GAAG,eAAe,EACnC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,EACvC,IAAI,CAAC,EAAE,OAAO,GACb,IAAI,CAgBN;AAKD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,IAAI,CAWN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/utils/diagnostics.ts"],"names":[],"mappings":";;AA0BA,8CAMC;AAKD,gDAEC;AAKD,kDAEC;AAKD,gCAIC;AAKD,4CAIC;AAKD,4CAIC;AAKD,gCAIC;AAKD,kDAqBC;AAKD,8CAeC;AAnHD,MAAM,aAAa,GAAqB;IACtC,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,KAAK;IACjB,gBAAgB,EAAE,KAAK;IACvB,gBAAgB,EAAE,KAAK;IACvB,OAAO,EAAE,KAAK;CACf,CAAC;AAEF,IAAI,MAAM,GAAqB,EAAE,GAAG,aAAa,EAAE,CAAC;AAKpD,SAAgB,iBAAiB,CAAC,UAAqC,EAAE;IACvE,MAAM,GAAG;QACP,GAAG,aAAa;QAChB,OAAO,EAAE,IAAI;QACb,GAAG,OAAO;KACX,CAAC;AACJ,CAAC;AAKD,SAAgB,kBAAkB;IAChC,MAAM,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;AAChC,CAAC;AAKD,SAAgB,mBAAmB;IACjC,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;AACvB,CAAC;AAKD,SAAgB,UAAU,CAAC,OAAe,EAAE,IAAc;IACxD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,EAAE,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAKD,SAAgB,gBAAgB,CAAC,OAAe,EAAE,IAAc;IAC9D,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,EAAE,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAKD,SAAgB,gBAAgB,CAAC,OAAe,EAAE,IAAc;IAC9D,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,EAAE,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAKD,SAAgB,UAAU,CAAC,OAAe,EAAE,IAAc;IACxD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,EAAE,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAKD,SAAgB,mBAAmB,CACjC,MAAmC,EACnC,SAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/utils/diagnostics.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Diagnostic logging utilities for debugging document processing\r\n * @module diagnostics\r\n */\r\n\r\nexport interface DiagnosticConfig {\r\n enabled: boolean;\r\n logParsing: boolean;\r\n logSerialization: boolean;\r\n logTextDirection: boolean;\r\n verbose: boolean;\r\n}\r\n\r\nconst defaultConfig: DiagnosticConfig = {\r\n enabled: false,\r\n logParsing: false,\r\n logSerialization: false,\r\n logTextDirection: false,\r\n verbose: false,\r\n};\r\n\r\nlet config: DiagnosticConfig = { ...defaultConfig };\r\n\r\n/**\r\n * Enable diagnostic logging\r\n */\r\nexport function enableDiagnostics(options: Partial<DiagnosticConfig> = {}): void {\r\n config = {\r\n ...defaultConfig,\r\n enabled: true,\r\n ...options,\r\n };\r\n}\r\n\r\n/**\r\n * Disable diagnostic logging\r\n */\r\nexport function disableDiagnostics(): void {\r\n config = { ...defaultConfig };\r\n}\r\n\r\n/**\r\n * Get current diagnostic configuration\r\n */\r\nexport function getDiagnosticConfig(): DiagnosticConfig {\r\n return { ...config };\r\n}\r\n\r\n/**\r\n * Log parsing activity\r\n */\r\nexport function logParsing(message: string, data?: unknown): void {\r\n if (config.enabled && config.logParsing) {\r\n console.log(`[PARSE] ${message}`, data !== undefined ? data : '');\r\n }\r\n}\r\n\r\n/**\r\n * Log serialization activity\r\n */\r\nexport function logSerialization(message: string, data?: unknown): void {\r\n if (config.enabled && config.logSerialization) {\r\n console.log(`[SERIALIZE] ${message}`, data !== undefined ? data : '');\r\n }\r\n}\r\n\r\n/**\r\n * Log text direction properties\r\n */\r\nexport function logTextDirection(message: string, data?: unknown): void {\r\n if (config.enabled && config.logTextDirection) {\r\n console.log(`[TEXT-DIR] ${message}`, data !== undefined ? data : '');\r\n }\r\n}\r\n\r\n/**\r\n * Log verbose details\r\n */\r\nexport function logVerbose(message: string, data?: unknown): void {\r\n if (config.enabled && config.verbose) {\r\n console.log(`[VERBOSE] ${message}`, data !== undefined ? data : '');\r\n }\r\n}\r\n\r\n/**\r\n * Log paragraph content summary\r\n */\r\nexport function logParagraphContent(\r\n source: 'parsing' | 'serialization',\r\n paraIndex: number,\r\n runs: { text: string; rtl?: boolean }[],\r\n bidi?: boolean\r\n): void {\r\n if (!config.enabled) return;\r\n\r\n const logger = source === 'parsing' ? logParsing : logSerialization;\r\n\r\n logger(`Paragraph ${paraIndex}:`);\r\n logger(` BiDi: ${bidi !== undefined ? bidi : 'not set'}`);\r\n logger(` Runs (${runs.length}):`);\r\n\r\n runs.forEach((run, idx) => {\r\n const rtlStatus = run.rtl ? ' [RTL]' : '';\r\n logger(` ${idx + 1}. \"${run.text}\"${rtlStatus}`);\r\n });\r\n\r\n const fullText = runs.map(r => r.text).join('');\r\n logger(` Combined text: \"${fullText}\"`);\r\n}\r\n\r\n/**\r\n * Compare text before and after processing\r\n */\r\nexport function logTextComparison(\r\n label: string,\r\n before: string,\r\n after: string\r\n): void {\r\n if (!config.enabled) return;\r\n\r\n if (before !== after) {\r\n console.log(`[TEXT-CHANGE] ${label}:`);\r\n console.log(` Before: \"${before}\"`);\r\n console.log(` After: \"${after}\"`);\r\n console.log(` MISMATCH DETECTED!`);\r\n } else if (config.verbose) {\r\n logVerbose(`${label}: Text preserved correctly`);\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorHandling.js","sourceRoot":"","sources":["../../src/utils/errorHandling.ts"],"names":[],"mappings":";;AAUA,0BAEC;AAQD,0BAiBC;AASD,8BAUC;AASD,0CAcC;AArED,SAAgB,OAAO,CAAC,KAAc;IACpC,OAAO,KAAK,YAAY,KAAK,CAAC;AAChC,CAAC;AAQD,SAAgB,OAAO,CAAC,KAAc;IACpC,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IAGD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAGD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC7D,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1C,CAAC;IAGD,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,CAAC;AASD,SAAgB,SAAS,CAAC,KAAc,EAAE,OAAe;IACvD,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,GAAG,OAAO,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAGvE,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;QACxB,YAAY,CAAC,KAAK,GAAG,GAAG,YAAY,CAAC,OAAO,gBAAgB,aAAa,CAAC,KAAK,EAAE,CAAC;IACpF,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AASD,SAAgB,eAAe,CAAC,KAAc,EAAE,QAAQ,GAAG,wBAAwB;IACjF,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"errorHandling.js","sourceRoot":"","sources":["../../src/utils/errorHandling.ts"],"names":[],"mappings":";;AAUA,0BAEC;AAQD,0BAiBC;AASD,8BAUC;AASD,0CAcC;AArED,SAAgB,OAAO,CAAC,KAAc;IACpC,OAAO,KAAK,YAAY,KAAK,CAAC;AAChC,CAAC;AAQD,SAAgB,OAAO,CAAC,KAAc;IACpC,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IAGD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAGD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC7D,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1C,CAAC;IAGD,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,CAAC;AASD,SAAgB,SAAS,CAAC,KAAc,EAAE,OAAe;IACvD,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,GAAG,OAAO,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAGvE,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;QACxB,YAAY,CAAC,KAAK,GAAG,GAAG,YAAY,CAAC,OAAO,gBAAgB,aAAa,CAAC,KAAK,EAAE,CAAC;IACpF,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AASD,SAAgB,eAAe,CAAC,KAAc,EAAE,QAAQ,GAAG,wBAAwB;IACjF,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["/**\r\n * Error handling utilities for consistent error processing\r\n * Ensures all caught errors are properly typed and handled\r\n */\r\n\r\n/**\r\n * Type guard to check if a value is an Error object\r\n * @param error - The value to check\r\n * @returns True if the value is an Error instance\r\n */\r\nexport function isError(error: unknown): error is Error {\r\n return error instanceof Error;\r\n}\r\n\r\n/**\r\n * Converts unknown error to Error object\r\n * Ensures we always have a proper Error with message property\r\n * @param error - The error to normalize (can be anything)\r\n * @returns Normalized Error object\r\n */\r\nexport function toError(error: unknown): Error {\r\n if (isError(error)) {\r\n return error;\r\n }\r\n\r\n // Handle string errors\r\n if (typeof error === 'string') {\r\n return new Error(error);\r\n }\r\n\r\n // Handle objects with message property\r\n if (error && typeof error === 'object' && 'message' in error) {\r\n return new Error(String(error.message));\r\n }\r\n\r\n // Fallback for any other type\r\n return new Error(String(error));\r\n}\r\n\r\n/**\r\n * Wraps an error with additional context\r\n * Useful for adding file paths, operation names, etc.\r\n * @param error - The original error\r\n * @param context - Additional context to prepend to error message\r\n * @returns New Error with combined message and original stack\r\n */\r\nexport function wrapError(error: unknown, context: string): Error {\r\n const originalError = toError(error);\r\n const wrappedError = new Error(`${context}: ${originalError.message}`);\r\n\r\n // Preserve original stack trace if available\r\n if (originalError.stack) {\r\n wrappedError.stack = `${wrappedError.message}\\nCaused by: ${originalError.stack}`;\r\n }\r\n\r\n return wrappedError;\r\n}\r\n\r\n/**\r\n * Safe error message extraction\r\n * Returns error message or generic fallback\r\n * @param error - The error to extract message from\r\n * @param fallback - Fallback message if extraction fails\r\n * @returns Error message string\r\n */\r\nexport function getErrorMessage(error: unknown, fallback = 'Unknown error occurred'): string {\r\n if (isError(error)) {\r\n return error.message;\r\n }\r\n\r\n if (typeof error === 'string') {\r\n return error;\r\n }\r\n\r\n if (error && typeof error === 'object' && 'message' in error) {\r\n return String(error.message);\r\n }\r\n\r\n return fallback;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Formatting utilities for deep merging and cloning formatting objects\r\n * Used for style inheritance and applying formatting\r\n */\r\n\r\n/**\r\n * Deep merges two formatting objects, with override taking precedence\r\n * Used for style inheritance and applying formatting\r\n *\r\n * @param base - Base formatting object\r\n * @param override - Override formatting object (takes precedence)\r\n * @returns Merged formatting object\r\n *\r\n * @example\r\n * ```typescript\r\n * const baseFormat = { bold: true, fontSize: 24 };\r\n * const overrideFormat = { fontSize: 28, italic: true };\r\n * const result = mergeFormatting(baseFormat, overrideFormat);\r\n * // Result: { bold: true, fontSize: 28, italic: true }\r\n * ```\r\n */\r\nexport function mergeFormatting<T extends Record<string, any>>(\r\n base: T,\r\n override: Partial<T>\r\n): T {\r\n const result = { ...base };\r\n\r\n for (const [key, value] of Object.entries(override)) {\r\n if (value === undefined) continue;\r\n\r\n if (typeof value === 'object' && !Array.isArray(value) && value !== null) {\r\n // Deep merge nested objects\r\n result[key as keyof T] = mergeFormatting(\r\n result[key as keyof T] || ({} as any),\r\n value\r\n );\r\n } else {\r\n // Direct assignment for primitives\r\n result[key as keyof T] = value;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Deep clones a formatting object\r\n * Creates a completely independent copy with no shared references\r\n *\r\n * @param formatting - Formatting object to clone\r\n * @returns Cloned formatting object\r\n *\r\n * @example\r\n * ```typescript\r\n * const original = { bold: true, indentation: { left: 100 } };\r\n * const cloned = cloneFormatting(original);\r\n * cloned.indentation.left = 200; // Doesn't affect original\r\n * ```\r\n */\r\nexport function cloneFormatting<T>(formatting: T): T {\r\n return JSON.parse(JSON.stringify(formatting));\r\n}\r\n\r\n/**\r\n * Checks if a formatting object has any defined properties\r\n *\r\n * @param formatting - Formatting object to check\r\n * @returns True if the object has at least one defined property\r\n *\r\n * @example\r\n * ```typescript\r\n * hasFormatting({}) // false\r\n * hasFormatting({ bold: true }) // true\r\n * hasFormatting({ bold: undefined }) // false\r\n * ```\r\n */\r\nexport function hasFormatting(formatting: Record<string, unknown>): boolean {\r\n for (const value of Object.values(formatting)) {\r\n if (value !== undefined && value !== null) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Removes undefined and null properties from a formatting object\r\n * Useful for cleaning up formatting before comparison or serialization\r\n *\r\n * @param formatting - Formatting object to clean\r\n * @returns Cleaned formatting object with no undefined/null values\r\n *\r\n * @example\r\n * ```typescript\r\n * const dirty = { bold: true, italic: undefined, fontSize: null, underline: false };\r\n * const clean = cleanFormatting(dirty);\r\n * // Result: { bold: true, underline: false }\r\n * ```\r\n */\r\nexport function cleanFormatting<T extends Record<string, any>>(formatting: T): Partial<T> {\r\n const cleaned: Partial<T> = {};\r\n\r\n for (const [key, value] of Object.entries(formatting)) {\r\n if (value !== undefined && value !== null) {\r\n if (typeof value === 'object' && !Array.isArray(value)) {\r\n // Recursively clean nested objects\r\n const cleanedNested = cleanFormatting(value);\r\n if (Object.keys(cleanedNested).length > 0) {\r\n cleaned[key as keyof T] = cleanedNested as any;\r\n }\r\n } else {\r\n cleaned[key as keyof T] = value;\r\n }\r\n }\r\n }\r\n\r\n return cleaned;\r\n}\r\n\r\n/**\r\n * Compares two formatting objects for equality\r\n * Performs deep comparison of all properties\r\n *\r\n * @param format1 - First formatting object\r\n * @param format2 - Second formatting object\r\n * @returns True if the formatting objects are equal\r\n *\r\n * @example\r\n * ```typescript\r\n * const a = { bold: true, fontSize: 24 };\r\n * const b = { bold: true, fontSize: 24 };\r\n * const c = { bold: true, fontSize: 28 };\r\n * isEqualFormatting(a, b) // true\r\n * isEqualFormatting(a, c) // false\r\n * ```\r\n */\r\nexport function isEqualFormatting(\r\n format1: Record<string, unknown>,\r\n format2: Record<string, unknown>\r\n): boolean {\r\n // Quick reference check\r\n if (format1 === format2) return true;\r\n\r\n // Null/undefined checks\r\n if (!format1 || !format2) return false;\r\n\r\n // Get all keys from both objects\r\n const keys1 = Object.keys(format1);\r\n const keys2 = Object.keys(format2);\r\n\r\n // Check if they have the same number of properties\r\n if (keys1.length !== keys2.length) return false;\r\n\r\n // Check all properties\r\n for (const key of keys1) {\r\n const val1 = format1[key];\r\n const val2 = format2[key];\r\n\r\n // Both undefined/null - considered equal\r\n if ((val1 === undefined || val1 === null) && (val2 === undefined || val2 === null)) {\r\n continue;\r\n }\r\n\r\n // One is undefined/null and the other isn't\r\n if ((val1 === undefined || val1 === null) !== (val2 === undefined || val2 === null)) {\r\n return false;\r\n }\r\n\r\n // Check nested objects\r\n if (typeof val1 === 'object' && val1 !== null && typeof val2 === 'object' && val2 !== null && !Array.isArray(val1) && !Array.isArray(val2)) {\r\n if (!isEqualFormatting(val1 as Record<string, unknown>, val2 as Record<string, unknown>)) return false;\r\n } else if (val1 !== val2) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Applies default values to a formatting object for any undefined properties\r\n *\r\n * @param formatting - Formatting object to apply defaults to\r\n * @param defaults - Default values\r\n * @returns Formatting object with defaults applied\r\n *\r\n * @example\r\n * ```typescript\r\n * const format = { bold: true };\r\n * const defaults = { bold: false, italic: false, fontSize: 24 };\r\n * const result = applyDefaults(format, defaults);\r\n * // Result: { bold: true, italic: false, fontSize: 24 }\r\n * ```\r\n */\r\nexport function applyDefaults<T extends Record<string, any>>(\r\n formatting: Partial<T>,\r\n defaults: T\r\n): T {\r\n const result = { ...defaults };\r\n\r\n for (const [key, value] of Object.entries(formatting)) {\r\n if (value !== undefined) {\r\n if (typeof value === 'object' && !Array.isArray(value) && value !== null && typeof defaults[key] === 'object') {\r\n // Deep merge nested objects\r\n result[key as keyof T] = applyDefaults(value, defaults[key]);\r\n } else {\r\n result[key as keyof T] = value;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n"]}
|
|
@@ -13,10 +13,10 @@ export declare function detectTypedPrefix(text: string): {
|
|
|
13
13
|
};
|
|
14
14
|
export declare function getParagraphIndentation(paragraph: Paragraph): number;
|
|
15
15
|
export declare function detectListType(paragraph: Paragraph): ListDetectionResult;
|
|
16
|
-
export declare function validateListSequence(paragraphs:
|
|
16
|
+
export declare function validateListSequence(paragraphs: {
|
|
17
17
|
detection: ListDetectionResult;
|
|
18
18
|
text: string;
|
|
19
|
-
}
|
|
19
|
+
}[]): {
|
|
20
20
|
valid: boolean;
|
|
21
21
|
warnings: string[];
|
|
22
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-detection.d.ts","sourceRoot":"","sources":["../../src/utils/list-detection.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACb,MAAM,qBAAqB,CAAC;AAU7B,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAWtD,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAQ5D,CAAC;AASF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASlD,CAAC;AAMF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGhE;AAoBD,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAGrE;AAOD,wBAAgB,iCAAiC,CAAC,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAGrF;AAWD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAC/C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,YAAY,GAAG,YAAY,GAAG,IAAI,CAAC;IAC3C,QAAQ,EAAE,YAAY,CAAC;CACxB,CAwBA;AAKD,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAGpE;AAKD,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,mBAAmB,CA+CxE;AAMD,wBAAgB,oBAAoB,CAClC,UAAU,EAAE
|
|
1
|
+
{"version":3,"file":"list-detection.d.ts","sourceRoot":"","sources":["../../src/utils/list-detection.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACb,MAAM,qBAAqB,CAAC;AAU7B,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAWtD,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAQ5D,CAAC;AASF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASlD,CAAC;AAMF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGhE;AAoBD,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAGrE;AAOD,wBAAgB,iCAAiC,CAAC,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAGrF;AAWD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAC/C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,YAAY,GAAG,YAAY,GAAG,IAAI,CAAC;IAC3C,QAAQ,EAAE,YAAY,CAAC;CACxB,CAwBA;AAKD,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAGpE;AAKD,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,mBAAmB,CA+CxE;AAMD,wBAAgB,oBAAoB,CAClC,UAAU,EAAE;IAAE,SAAS,EAAE,mBAAmB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAC7D;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAqCxC;AAMD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,YAAY,CAgBd"}
|
|
@@ -81,7 +81,7 @@ function detectListType(paragraph) {
|
|
|
81
81
|
const text = paragraph.getText();
|
|
82
82
|
const indentation = getParagraphIndentation(paragraph);
|
|
83
83
|
const numbering = paragraph.getNumbering();
|
|
84
|
-
if (numbering
|
|
84
|
+
if (numbering?.numId !== undefined && numbering.numId !== 0) {
|
|
85
85
|
return {
|
|
86
86
|
category: "numbered",
|
|
87
87
|
isWordList: true,
|
|
@@ -124,8 +124,8 @@ function validateListSequence(paragraphs) {
|
|
|
124
124
|
for (const { detection } of paragraphs) {
|
|
125
125
|
if (!detection.typedPrefix || detection.category !== "numbered")
|
|
126
126
|
continue;
|
|
127
|
-
const match =
|
|
128
|
-
if (!match
|
|
127
|
+
const match = /^(\d+|[a-zA-Z]+)/.exec(detection.typedPrefix);
|
|
128
|
+
if (!match?.[1])
|
|
129
129
|
continue;
|
|
130
130
|
const marker = match[1];
|
|
131
131
|
if (/^\d+$/.test(marker)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-detection.js","sourceRoot":"","sources":["../../src/utils/list-detection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"list-detection.js","sourceRoot":"","sources":["../../src/utils/list-detection.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * List Detection Utilities for docxmlater\n *\n * Provides functions to detect typed list prefixes and analyze\n * paragraph list properties.\n */\n\nimport type { Paragraph } from \"../elements/Paragraph\";\nimport type {\n ListCategory,\n ListDetectionResult,\n NumberFormat,\n BulletFormat,\n} from \"../types/list-types\";\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\n/**\n * Regex patterns for typed list prefixes.\n * Order matters: more specific patterns first.\n */\nexport const TYPED_LIST_PATTERNS: Record<string, RegExp> = {\n // Numbered patterns (capture the marker for validation)\n decimal: /^(\\d+)[.)]\\s+/,\n lowerLetter: /^([a-z])[.)]\\s+/,\n upperLetter: /^([A-Z])[.)]\\s+/,\n lowerRoman: /^((?:i{1,3}|iv|vi{0,3}|ix|x{1,3}))[.)]\\s+/i,\n\n // Bullet patterns\n bullet: /^[•●○◦▪■□]\\s+/,\n dash: /^[-–—]\\s+/,\n arrow: /^[►▸▶→]\\s+/,\n};\n\n/** Map pattern names to categories */\nexport const PATTERN_TO_CATEGORY: Record<string, ListCategory> = {\n decimal: \"numbered\",\n lowerLetter: \"numbered\",\n upperLetter: \"numbered\",\n lowerRoman: \"numbered\",\n bullet: \"bullet\",\n dash: \"bullet\",\n arrow: \"bullet\",\n};\n\n/**\n * Map typed prefix format to Word numbering level.\n * Word's default multilevel list uses:\n * Level 0: 1., 2., 3. (decimal)\n * Level 1: a., b., c. (lowerLetter)\n * Level 2: i., ii., iii. (lowerRoman)\n */\nexport const FORMAT_TO_LEVEL: Record<string, number> = {\n decimal: 0, // 1., 2., 3.\n lowerLetter: 1, // a., b., c.\n upperLetter: 1, // A., B., C.\n lowerRoman: 2, // i., ii., iii.\n upperRoman: 2, // I., II., III.\n bullet: 0, // Top-level bullet (filled circle)\n dash: 0, // Top-level dash marker\n arrow: 0, // Top-level arrow marker\n};\n\n/**\n * Get the Word numbering level for a given format.\n * Returns 0 (top level) for decimal or unknown formats.\n */\nexport function getLevelFromFormat(format: string | null): number {\n if (!format) return 0;\n return FORMAT_TO_LEVEL[format] ?? 0;\n}\n\n/**\n * Word standard indentation values in twips.\n * Level 0: 720 twips (0.5 inch) left indent\n * Level 1: 1080 twips (0.75 inch) left indent\n * Level 2: 1440 twips (1 inch) left indent\n * Each subsequent level adds 360 twips.\n */\nconst WORD_BASE_INDENT = 720;\nconst INDENT_PER_LEVEL = 360;\n\n// =============================================================================\n// CORE DETECTION FUNCTIONS\n// =============================================================================\n\n/**\n * Infer list level from indentation.\n * Uses standard Word indentation: 720 twips for level 0, +360 per level.\n */\nexport function inferLevelFromIndentation(indentTwips: number): number {\n if (indentTwips < WORD_BASE_INDENT) return 0;\n return Math.floor((indentTwips - WORD_BASE_INDENT) / INDENT_PER_LEVEL);\n}\n\n/**\n * Infer list level from relative indentation (baseline already subtracted).\n * Used when normalizing lists within a table cell where the baseline\n * indentation varies per cell.\n */\nexport function inferLevelFromRelativeIndentation(relativeIndentTwips: number): number {\n if (relativeIndentTwips <= 0) return 0;\n return Math.min(8, Math.floor(relativeIndentTwips / INDENT_PER_LEVEL));\n}\n\n/**\n * Detect typed list prefix in text.\n * Returns the matched prefix and format type.\n *\n * Special handling for abbreviations:\n * - Single letter prefixes (A., B., P.) are NOT treated as list markers\n * if the remaining text also starts with a letter+period pattern,\n * indicating an abbreviation like \"P.O. Box\", \"U.S. Army\", etc.\n */\nexport function detectTypedPrefix(text: string): {\n prefix: string | null;\n format: NumberFormat | BulletFormat | null;\n category: ListCategory;\n} {\n for (const [format, regex] of Object.entries(TYPED_LIST_PATTERNS)) {\n const match = text.match(regex);\n if (match) {\n // Special check for single-letter patterns (lowerLetter, upperLetter)\n // to avoid false positives on abbreviations like \"P.O. Box\", \"U.S.\", \"A.M.\"\n if (format === \"lowerLetter\" || format === \"upperLetter\") {\n const remaining = text.substring(match[0].length);\n // If remaining text starts with another letter followed by period,\n // this is likely an abbreviation, not a list marker\n if (/^[A-Za-z]\\./.test(remaining)) {\n continue; // Skip this pattern, try others\n }\n }\n\n return {\n prefix: match[0],\n format: format as NumberFormat | BulletFormat,\n category: PATTERN_TO_CATEGORY[format] ?? \"none\",\n };\n }\n }\n\n return { prefix: null, format: null, category: \"none\" };\n}\n\n/**\n * Get the left indentation from a paragraph in twips.\n */\nexport function getParagraphIndentation(paragraph: Paragraph): number {\n const formatting = paragraph.getFormatting();\n return formatting?.indentation?.left ?? 0;\n}\n\n/**\n * Main detection function: analyze a single paragraph for list properties.\n */\nexport function detectListType(paragraph: Paragraph): ListDetectionResult {\n const text = paragraph.getText();\n const indentation = getParagraphIndentation(paragraph);\n const numbering = paragraph.getNumbering();\n\n // Priority 1: Real Word list with <w:numPr>\n if (numbering?.numId !== undefined && numbering.numId !== 0) {\n return {\n category: \"numbered\", // Default, caller can refine with NumberingManager lookup\n isWordList: true,\n typedPrefix: null,\n inferredLevel: numbering.level ?? 0,\n format: null, // Would need numbering.xml lookup\n numId: numbering.numId,\n ilvl: numbering.level ?? 0,\n indentationTwips: indentation,\n };\n }\n\n // Priority 2: Typed prefix detection\n const typed = detectTypedPrefix(text);\n if (typed.prefix) {\n return {\n category: typed.category,\n isWordList: false,\n typedPrefix: typed.prefix,\n // Use FORMAT to determine level, not indentation!\n // decimal=0, lowerLetter=1, lowerRoman=2\n inferredLevel: getLevelFromFormat(typed.format),\n format: typed.format,\n numId: null,\n ilvl: null,\n indentationTwips: indentation,\n };\n }\n\n // Priority 3: Not a list\n return {\n category: \"none\",\n isWordList: false,\n typedPrefix: null,\n inferredLevel: 0,\n format: null,\n numId: null,\n ilvl: null,\n indentationTwips: indentation,\n };\n}\n\n/**\n * Validate that a typed prefix sequence is reasonable.\n * E.g., \"1. 2. 3.\" is valid, \"1. 5. 2.\" is suspicious.\n */\nexport function validateListSequence(\n paragraphs: { detection: ListDetectionResult; text: string }[]\n): { valid: boolean; warnings: string[] } {\n const warnings: string[] = [];\n let lastDecimal = 0;\n let lastLetter = \"\";\n\n for (const { detection } of paragraphs) {\n if (!detection.typedPrefix || detection.category !== \"numbered\") continue;\n\n const match = /^(\\d+|[a-zA-Z]+)/.exec(detection.typedPrefix);\n if (!match?.[1]) continue;\n\n const marker = match[1];\n\n // Check decimal sequence\n if (/^\\d+$/.test(marker)) {\n const num = parseInt(marker, 10);\n if (lastDecimal > 0 && num !== lastDecimal + 1 && num !== 1) {\n warnings.push(`Unexpected number sequence: ${lastDecimal} → ${num}`);\n }\n lastDecimal = num;\n }\n\n // Check letter sequence\n if (/^[a-z]$/i.test(marker)) {\n const letter = marker.toLowerCase();\n if (\n lastLetter &&\n letter.charCodeAt(0) !== lastLetter.charCodeAt(0) + 1 &&\n letter !== \"a\"\n ) {\n warnings.push(`Unexpected letter sequence: ${lastLetter} → ${letter}`);\n }\n lastLetter = letter;\n }\n }\n\n return { valid: warnings.length === 0, warnings };\n}\n\n/**\n * Determine the list category for a given numId by checking the abstractNum.\n * This requires access to the NumberingManager.\n */\nexport function getListCategoryFromFormat(\n format: string | undefined\n): ListCategory {\n if (!format) return \"none\";\n\n if ([\"bullet\", \"dash\", \"arrow\"].includes(format)) {\n return \"bullet\";\n }\n\n if (\n [\"decimal\", \"lowerLetter\", \"upperLetter\", \"lowerRoman\", \"upperRoman\"].includes(\n format\n )\n ) {\n return \"numbered\";\n }\n\n return \"none\";\n}\n"]}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -44,15 +44,13 @@ export declare class CollectingLogger implements ILogger {
|
|
|
44
44
|
warn(message: string, context?: Record<string, any>): void;
|
|
45
45
|
error(message: string, context?: Record<string, any>): void;
|
|
46
46
|
private addLog;
|
|
47
|
-
getLogs():
|
|
48
|
-
getLogsByLevel(level: LogLevel):
|
|
47
|
+
getLogs(): readonly LogEntry[];
|
|
48
|
+
getLogsByLevel(level: LogLevel): readonly LogEntry[];
|
|
49
49
|
clear(): void;
|
|
50
50
|
getCount(level?: LogLevel): number;
|
|
51
51
|
}
|
|
52
52
|
export declare const defaultLogger: ILogger;
|
|
53
53
|
export declare function createScopedLogger(logger: ILogger, source: string): ILogger;
|
|
54
|
-
export declare function parseLogLevel(level: string | undefined): LogLevel | undefined;
|
|
55
|
-
export declare function createLoggerFromEnv(): ILogger;
|
|
56
54
|
export declare function setGlobalLogger(logger: ILogger): void;
|
|
57
55
|
export declare function getGlobalLogger(): ILogger;
|
|
58
56
|
export declare function resetGlobalLogger(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAQA,oBAAY,QAAQ;IAElB,KAAK,UAAU;IAEf,IAAI,SAAS;IAEb,IAAI,SAAS;IAEb,KAAK,UAAU;CAChB;AAKD,MAAM,WAAW,QAAQ;IAEvB,SAAS,EAAE,IAAI,CAAC;IAEhB,KAAK,EAAE,QAAQ,CAAC;IAEhB,OAAO,EAAE,MAAM,CAAC;IAEhB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,MAAM,WAAW,OAAO;IAMtB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAO5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAO3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAO3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;CAC7D;AAMD,qBAAa,aAAc,YAAW,OAAO;IAG/B,OAAO,CAAC,QAAQ;IAF5B,OAAO,CAAC,aAAa,CAAU;gBAEX,QAAQ,GAAE,QAAwB,EAAE,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE;IAI7F,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAM3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAM1D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAM1D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAM3D,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,aAAa;IAoCrB,OAAO,CAAC,aAAa;CAetB;AAMD,qBAAa,YAAa,YAAW,OAAO;IAC1C,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;IAIZ,IAAI,IAAI,IAAI;IAIZ,KAAK,IAAI,IAAI;CAGd;AAMD,qBAAa,gBAAiB,YAAW,OAAO;IAC9C,OAAO,CAAC,IAAI,CAAkB;IAE9B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAI3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAI1D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAI1D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAI3D,OAAO,CAAC,MAAM;IAYd,OAAO,IAAI,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.defaultLogger = exports.CollectingLogger = exports.SilentLogger = exports.ConsoleLogger = exports.LogLevel = void 0;
|
|
4
4
|
exports.createScopedLogger = createScopedLogger;
|
|
5
|
-
exports.parseLogLevel = parseLogLevel;
|
|
6
|
-
exports.createLoggerFromEnv = createLoggerFromEnv;
|
|
7
5
|
exports.setGlobalLogger = setGlobalLogger;
|
|
8
6
|
exports.getGlobalLogger = getGlobalLogger;
|
|
9
7
|
exports.resetGlobalLogger = resetGlobalLogger;
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Logging interface for docXMLater\r\n * Allows library consumers to control logging behavior\r\n */\r\n\r\n/**\r\n * Log severity levels\r\n */\r\nexport enum LogLevel {\r\n /** Debugging information (most verbose) */\r\n DEBUG = 'debug',\r\n /** Informational messages */\r\n INFO = 'info',\r\n /** Warning messages - potential issues that don't prevent operation */\r\n WARN = 'warn',\r\n /** Error messages - serious issues that may cause failures */\r\n ERROR = 'error',\r\n}\r\n\r\n/**\r\n * Log entry structure\r\n */\r\nexport interface LogEntry {\r\n /** Timestamp when log was created */\r\n timestamp: Date;\r\n /** Severity level */\r\n level: LogLevel;\r\n /** Log message */\r\n message: string;\r\n /** Optional context data */\r\n context?: Record<string, any>;\r\n /** Source component that generated the log */\r\n source?: string;\r\n}\r\n\r\n/**\r\n * Logger interface that consumers can implement\r\n * Provides full control over how logs are handled\r\n */\r\nexport interface ILogger {\r\n /**\r\n * Log a debug message\r\n * @param message - Debug message\r\n * @param context - Optional context data\r\n */\r\n debug(message: string, context?: Record<string, any>): void;\r\n\r\n /**\r\n * Log an informational message\r\n * @param message - Info message\r\n * @param context - Optional context data\r\n */\r\n info(message: string, context?: Record<string, any>): void;\r\n\r\n /**\r\n * Log a warning message\r\n * @param message - Warning message\r\n * @param context - Optional context data\r\n */\r\n warn(message: string, context?: Record<string, any>): void;\r\n\r\n /**\r\n * Log an error message\r\n * @param message - Error message\r\n * @param context - Optional context data\r\n */\r\n error(message: string, context?: Record<string, any>): void;\r\n}\r\n\r\n/**\r\n * Console-based logger implementation\r\n * Uses standard console methods for output with timestamps and source prefixes\r\n */\r\nexport class ConsoleLogger implements ILogger {\r\n private showTimestamp: boolean;\r\n\r\n constructor(private minLevel: LogLevel = LogLevel.WARN, options?: { showTimestamp?: boolean }) {\r\n this.showTimestamp = options?.showTimestamp ?? true;\r\n }\r\n\r\n debug(message: string, context?: Record<string, any>): void {\r\n if (this.shouldLog(LogLevel.DEBUG)) {\r\n console.debug(this.formatMessage(LogLevel.DEBUG, message, context));\r\n }\r\n }\r\n\r\n info(message: string, context?: Record<string, any>): void {\r\n if (this.shouldLog(LogLevel.INFO)) {\r\n console.info(this.formatMessage(LogLevel.INFO, message, context));\r\n }\r\n }\r\n\r\n warn(message: string, context?: Record<string, any>): void {\r\n if (this.shouldLog(LogLevel.WARN)) {\r\n console.warn(this.formatMessage(LogLevel.WARN, message, context));\r\n }\r\n }\r\n\r\n error(message: string, context?: Record<string, any>): void {\r\n if (this.shouldLog(LogLevel.ERROR)) {\r\n console.error(this.formatMessage(LogLevel.ERROR, message, context));\r\n }\r\n }\r\n\r\n private shouldLog(level: LogLevel): boolean {\r\n const levels = [LogLevel.DEBUG, LogLevel.INFO, LogLevel.WARN, LogLevel.ERROR];\r\n const minIndex = levels.indexOf(this.minLevel);\r\n const currentIndex = levels.indexOf(level);\r\n return currentIndex >= minIndex;\r\n }\r\n\r\n private formatMessage(level: LogLevel, message: string, context?: Record<string, any>): string {\r\n const parts: string[] = [];\r\n\r\n // Add timestamp if enabled\r\n if (this.showTimestamp) {\r\n const timestamp = new Date().toISOString().slice(11, 23); // HH:mm:ss.SSS\r\n parts.push(timestamp);\r\n }\r\n\r\n // Add level tag\r\n parts.push(`[${level.toUpperCase().padEnd(5)}]`);\r\n\r\n // Add source if present\r\n if (context?.source) {\r\n parts.push(`[${context.source}]`);\r\n }\r\n\r\n // Add message\r\n parts.push(message);\r\n\r\n // Add context (excluding source which is already shown)\r\n if (context && Object.keys(context).length > 0) {\r\n const contextWithoutSource = { ...context };\r\n delete contextWithoutSource.source;\r\n if (Object.keys(contextWithoutSource).length > 0) {\r\n // Format context as key=value pairs for readability\r\n const contextStr = this.formatContext(contextWithoutSource);\r\n if (contextStr) {\r\n parts.push(contextStr);\r\n }\r\n }\r\n }\r\n\r\n return parts.join(' ');\r\n }\r\n\r\n private formatContext(context: Record<string, any>): string {\r\n const pairs: string[] = [];\r\n for (const [key, value] of Object.entries(context)) {\r\n if (value === undefined || value === null) continue;\r\n if (typeof value === 'object' && !Array.isArray(value)) {\r\n // Nested object - use compact JSON\r\n pairs.push(`${key}=${JSON.stringify(value)}`);\r\n } else if (Array.isArray(value)) {\r\n pairs.push(`${key}=[${value.length}]`);\r\n } else {\r\n pairs.push(`${key}=${value}`);\r\n }\r\n }\r\n return pairs.length > 0 ? pairs.join(' ') : '';\r\n }\r\n}\r\n\r\n/**\r\n * Silent logger that discards all log messages\r\n * Useful for testing or when logging is not desired\r\n */\r\nexport class SilentLogger implements ILogger {\r\n debug(): void {\r\n // No-op\r\n }\r\n\r\n info(): void {\r\n // No-op\r\n }\r\n\r\n warn(): void {\r\n // No-op\r\n }\r\n\r\n error(): void {\r\n // No-op\r\n }\r\n}\r\n\r\n/**\r\n * Collecting logger that stores log entries in memory\r\n * Useful for testing and diagnostics\r\n */\r\nexport class CollectingLogger implements ILogger {\r\n private logs: LogEntry[] = [];\r\n\r\n debug(message: string, context?: Record<string, any>): void {\r\n this.addLog(LogLevel.DEBUG, message, context);\r\n }\r\n\r\n info(message: string, context?: Record<string, any>): void {\r\n this.addLog(LogLevel.INFO, message, context);\r\n }\r\n\r\n warn(message: string, context?: Record<string, any>): void {\r\n this.addLog(LogLevel.WARN, message, context);\r\n }\r\n\r\n error(message: string, context?: Record<string, any>): void {\r\n this.addLog(LogLevel.ERROR, message, context);\r\n }\r\n\r\n private addLog(level: LogLevel, message: string, context?: Record<string, any>): void {\r\n this.logs.push({\r\n timestamp: new Date(),\r\n level,\r\n message,\r\n context,\r\n });\r\n }\r\n\r\n /**\r\n * Get all collected log entries\r\n */\r\n getLogs(): readonly LogEntry[] {\r\n return [...this.logs];\r\n }\r\n\r\n /**\r\n * Get logs filtered by level\r\n */\r\n getLogsByLevel(level: LogLevel): readonly LogEntry[] {\r\n return this.logs.filter(log => log.level === level);\r\n }\r\n\r\n /**\r\n * Clear all collected logs\r\n */\r\n clear(): void {\r\n this.logs = [];\r\n }\r\n\r\n /**\r\n * Get count of logs by level\r\n */\r\n getCount(level?: LogLevel): number {\r\n if (level) {\r\n return this.logs.filter(log => log.level === level).length;\r\n }\r\n return this.logs.length;\r\n }\r\n}\r\n\r\n/**\r\n * Default logger instance\r\n * Delegates to the global logger, respecting setGlobalLogger() and environment variables\r\n */\r\nexport const defaultLogger: ILogger = {\r\n debug(message: string, context?: Record<string, any>): void {\r\n getGlobalLogger().debug(message, context);\r\n },\r\n info(message: string, context?: Record<string, any>): void {\r\n getGlobalLogger().info(message, context);\r\n },\r\n warn(message: string, context?: Record<string, any>): void {\r\n getGlobalLogger().warn(message, context);\r\n },\r\n error(message: string, context?: Record<string, any>): void {\r\n getGlobalLogger().error(message, context);\r\n },\r\n};\r\n\r\n/**\r\n * Creates a scoped logger that adds source information\r\n * @param logger - Base logger\r\n * @param source - Source component name\r\n * @returns Scoped logger with source context\r\n */\r\nexport function createScopedLogger(logger: ILogger, source: string): ILogger {\r\n return {\r\n debug(message: string, context?: Record<string, any>): void {\r\n logger.debug(message, { ...context, source });\r\n },\r\n info(message: string, context?: Record<string, any>): void {\r\n logger.info(message, { ...context, source });\r\n },\r\n warn(message: string, context?: Record<string, any>): void {\r\n logger.warn(message, { ...context, source });\r\n },\r\n error(message: string, context?: Record<string, any>): void {\r\n logger.error(message, { ...context, source });\r\n },\r\n };\r\n}\r\n\r\n/**\r\n * Parse log level from string\r\n * @param level - Log level string (case-insensitive)\r\n * @returns LogLevel or undefined if invalid\r\n */\r\nfunction parseLogLevel(level: string | undefined): LogLevel | undefined {\r\n if (!level) return undefined;\r\n const normalized = level.toLowerCase();\r\n switch (normalized) {\r\n case 'debug': return LogLevel.DEBUG;\r\n case 'info': return LogLevel.INFO;\r\n case 'warn': return LogLevel.WARN;\r\n case 'error': return LogLevel.ERROR;\r\n default: return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Create a logger based on environment variables\r\n *\r\n * Environment variables (in order of precedence):\r\n * - DEBUG=docxmlater or DEBUG=docxmlater:* - Enables DEBUG level\r\n * - DOCXMLATER_LOG_LEVEL=debug|info|warn|error|silent - Sets specific level\r\n *\r\n * @returns Logger configured from environment, or SilentLogger if not configured\r\n */\r\nfunction createLoggerFromEnv(): ILogger {\r\n // Check DEBUG environment variable first (highest precedence for debug mode)\r\n const debugEnv = process.env.DEBUG || '';\r\n if (debugEnv.includes('docxmlater')) {\r\n return new ConsoleLogger(LogLevel.DEBUG);\r\n }\r\n\r\n // Check DOCXMLATER_LOG_LEVEL environment variable\r\n const envLevel = process.env.DOCXMLATER_LOG_LEVEL?.toLowerCase();\r\n if (envLevel === 'silent') {\r\n return new SilentLogger();\r\n }\r\n\r\n const parsedLevel = parseLogLevel(envLevel);\r\n if (parsedLevel) {\r\n return new ConsoleLogger(parsedLevel);\r\n }\r\n\r\n // Default: silent (no logging unless explicitly enabled)\r\n return new SilentLogger();\r\n}\r\n\r\n// Global logger instance - initialized from environment\r\nlet globalLogger: ILogger = createLoggerFromEnv();\r\n\r\n/**\r\n * Set the global logger instance\r\n * Use this to configure logging programmatically\r\n *\r\n * @example\r\n * ```typescript\r\n * import { setGlobalLogger, ConsoleLogger, LogLevel } from 'docxmlater';\r\n *\r\n * // Enable info-level logging\r\n * setGlobalLogger(new ConsoleLogger(LogLevel.INFO));\r\n * ```\r\n *\r\n * @param logger - Logger instance to use globally\r\n */\r\nexport function setGlobalLogger(logger: ILogger): void {\r\n globalLogger = logger;\r\n}\r\n\r\n/**\r\n * Get the global logger instance\r\n * Used internally by framework components\r\n *\r\n * @returns Current global logger\r\n */\r\nexport function getGlobalLogger(): ILogger {\r\n return globalLogger;\r\n}\r\n\r\n/**\r\n * Reset the global logger to its default (environment-based) configuration\r\n * Useful for testing cleanup\r\n */\r\nexport function resetGlobalLogger(): void {\r\n globalLogger = createLoggerFromEnv();\r\n}\r\n\r\n/**\r\n * Creates a component-scoped logger using the global logger.\r\n * This is a convenience function that combines getGlobalLogger() and createScopedLogger()\r\n * into a single call, reducing boilerplate in component files.\r\n *\r\n * @param componentName - Name of the component (appears in log output)\r\n * @returns Scoped logger instance\r\n *\r\n * @example\r\n * ```typescript\r\n * // Instead of:\r\n * function getLogger(): ILogger {\r\n * return createScopedLogger(getGlobalLogger(), 'MyComponent');\r\n * }\r\n *\r\n * // You can use:\r\n * const logger = createComponentLogger('MyComponent');\r\n *\r\n * // Or for lazy initialization:\r\n * const getLogger = () => createComponentLogger('MyComponent');\r\n * ```\r\n */\r\nexport function createComponentLogger(componentName: string): ILogger {\r\n return createScopedLogger(getGlobalLogger(), componentName);\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parsingHelpers.js","sourceRoot":"","sources":["../../src/utils/parsingHelpers.ts"],"names":[],"mappings":";;AA4BA,oCAYC;AA+BD,8CAiCC;AA0BD,0CAEC;AAkBD,sDAKC;AAeD,kDAmBC;AAjKD,SAAgB,YAAY,CAAC,KAAc,EAAE,YAAY,GAAG,CAAC;IAC3D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,YAAY,CAAC;IACtB,CAAC;IAGD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3C,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/C,CAAC;AA+BD,SAAgB,iBAAiB,CAAC,IAAa;IAE7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAGD,MAAM,GAAG,GAAI,IAAgC,CAAC,SAAS,CAAC,CAAC;IAIzD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACnC,OAAO,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,IAAI,CAAC;IACtE,CAAC;IAGD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,KAAK,CAAC,CAAC;IACnB,CAAC;IAGD,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;IAGD,OAAO,KAAK,CAAC;AACf,CAAC;AA0BD,SAAgB,eAAe,CAAC,KAAc;IAC5C,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AAC/C,CAAC;AAkBD,SAAgB,qBAAqB,CAAC,KAAc,EAAE,YAAoB;IACxE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AAC3C,CAAC;AAeD,SAAgB,mBAAmB,CAAC,KAAc,EAAE,YAAY,GAAG,KAAK;IACtE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACrC,OAAO,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,IAAI,CAAC;IACtE,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
1
|
+
{"version":3,"file":"parsingHelpers.js","sourceRoot":"","sources":["../../src/utils/parsingHelpers.ts"],"names":[],"mappings":";;AA4BA,oCAYC;AA+BD,8CAiCC;AA0BD,0CAEC;AAkBD,sDAKC;AAeD,kDAmBC;AAjKD,SAAgB,YAAY,CAAC,KAAc,EAAE,YAAY,GAAG,CAAC;IAC3D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,YAAY,CAAC;IACtB,CAAC;IAGD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3C,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/C,CAAC;AA+BD,SAAgB,iBAAiB,CAAC,IAAa;IAE7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAGD,MAAM,GAAG,GAAI,IAAgC,CAAC,SAAS,CAAC,CAAC;IAIzD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACnC,OAAO,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,IAAI,CAAC;IACtE,CAAC;IAGD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,KAAK,CAAC,CAAC;IACnB,CAAC;IAGD,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;IAGD,OAAO,KAAK,CAAC;AACf,CAAC;AA0BD,SAAgB,eAAe,CAAC,KAAc;IAC5C,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AAC/C,CAAC;AAkBD,SAAgB,qBAAqB,CAAC,KAAc,EAAE,YAAoB;IACxE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AAC3C,CAAC;AAeD,SAAgB,mBAAmB,CAAC,KAAc,EAAE,YAAY,GAAG,KAAK;IACtE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACrC,OAAO,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,IAAI,CAAC;IACtE,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["/**\r\n * Parsing Helper Functions\r\n *\r\n * Utility functions for safely parsing OOXML values from XML attributes.\r\n * These helpers address common parsing issues:\r\n * - Zero-value handling (0 should not be treated as falsy)\r\n * - NaN validation (malformed values should fall back to defaults)\r\n * - ECMA-376 boolean parsing (self-closing tags, val=\"1\", val=\"true\")\r\n *\r\n * @see https://ecma-international.org/publications-and-standards/standards/ecma-376/\r\n */\r\n\r\n/**\r\n * Safely parse an integer value with NaN handling.\r\n *\r\n * Addresses the issue where parseInt() can return NaN for malformed input,\r\n * which then propagates through the document model causing issues.\r\n *\r\n * @param value - The value to parse (string, number, or any)\r\n * @param defaultValue - Default value if parsing fails (default: 0)\r\n * @returns Parsed integer or default value\r\n *\r\n * @example\r\n * safeParseInt(\"42\") // 42\r\n * safeParseInt(\"invalid\") // 0\r\n * safeParseInt(undefined) // 0\r\n * safeParseInt(\"\", 100) // 100\r\n */\r\nexport function safeParseInt(value: unknown, defaultValue = 0): number {\r\n if (value === undefined || value === null) {\r\n return defaultValue;\r\n }\r\n\r\n // If already a number, return it (handle NaN case)\r\n if (typeof value === 'number') {\r\n return isNaN(value) ? defaultValue : Math.floor(value);\r\n }\r\n\r\n const parsed = parseInt(String(value), 10);\r\n return isNaN(parsed) ? defaultValue : parsed;\r\n}\r\n\r\n/**\r\n * Parse OOXML boolean value per ECMA-376 specification.\r\n *\r\n * OOXML boolean properties follow these rules:\r\n * - Self-closing tag `<w:bold/>` (no w:val attribute) = true\r\n * - `<w:bold w:val=\"1\"/>` = true\r\n * - `<w:bold w:val=\"true\"/>` = true\r\n * - `<w:bold w:val=\"on\"/>` = true\r\n * - `<w:bold w:val=\"0\"/>` = false\r\n * - `<w:bold w:val=\"false\"/>` = false\r\n * - `<w:bold w:val=\"off\"/>` = false\r\n * - Absent element = false (handled by caller checking for property existence)\r\n *\r\n * @param prop - The parsed XML property object (e.g., pPrObj[\"w:bold\"])\r\n * @returns Boolean value\r\n *\r\n * @example\r\n * // For XML: <w:bold/>\r\n * parseOoxmlBoolean({}) // true (self-closing, no @_w:val)\r\n *\r\n * // For XML: <w:bold w:val=\"1\"/>\r\n * parseOoxmlBoolean({ \"@_w:val\": \"1\" }) // true\r\n *\r\n * // For XML: <w:bold w:val=\"0\"/>\r\n * parseOoxmlBoolean({ \"@_w:val\": \"0\" }) // false\r\n *\r\n * // For absent element\r\n * parseOoxmlBoolean(undefined) // false\r\n */\r\nexport function parseOoxmlBoolean(prop: unknown): boolean {\r\n // Absent element = false\r\n if (!prop) {\r\n return false;\r\n }\r\n\r\n // Get the w:val attribute value\r\n const val = (prop as Record<string, unknown>)['@_w:val'];\r\n\r\n // Self-closing tag without w:val attribute = true\r\n // Per ECMA-376, presence of element without val means \"on\"\r\n if (val === undefined) {\r\n return true;\r\n }\r\n\r\n // Handle string values\r\n if (typeof val === 'string') {\r\n const lowerVal = val.toLowerCase();\r\n return lowerVal === '1' || lowerVal === 'true' || lowerVal === 'on';\r\n }\r\n\r\n // Handle numeric values\r\n if (typeof val === 'number') {\r\n return val === 1;\r\n }\r\n\r\n // Handle boolean values (already parsed by XML parser)\r\n if (typeof val === 'boolean') {\r\n return val;\r\n }\r\n\r\n // Unknown type - default to false\r\n return false;\r\n}\r\n\r\n/**\r\n * Check if a value is explicitly set (not undefined or null).\r\n *\r\n * This helper addresses the zero-value handling bug where truthy checks\r\n * incorrectly treat 0 as falsy:\r\n *\r\n * ```typescript\r\n * // WRONG - treats 0 as falsy\r\n * const width = val ? parseInt(val) : defaultWidth;\r\n *\r\n * // CORRECT - only checks for undefined/null\r\n * const width = isExplicitlySet(val) ? parseInt(val) : defaultWidth;\r\n * ```\r\n *\r\n * @param value - The value to check\r\n * @returns true if value is not undefined and not null\r\n *\r\n * @example\r\n * isExplicitlySet(0) // true\r\n * isExplicitlySet(\"\") // true\r\n * isExplicitlySet(false) // true\r\n * isExplicitlySet(undefined) // false\r\n * isExplicitlySet(null) // false\r\n */\r\nexport function isExplicitlySet(value: unknown): boolean {\r\n return value !== undefined && value !== null;\r\n}\r\n\r\n/**\r\n * Parse an OOXML numeric attribute with proper handling of zero values.\r\n *\r\n * Combines isExplicitlySet() and safeParseInt() for common use case\r\n * of parsing numeric attributes from XML.\r\n *\r\n * @param value - The attribute value to parse\r\n * @param defaultValue - Default value if attribute is not set\r\n * @returns Parsed integer or default value\r\n *\r\n * @example\r\n * parseNumericAttribute(\"100\", 50) // 100\r\n * parseNumericAttribute(\"0\", 50) // 0 (not 50!)\r\n * parseNumericAttribute(undefined, 50) // 50\r\n * parseNumericAttribute(\"invalid\", 50) // 50\r\n */\r\nexport function parseNumericAttribute(value: unknown, defaultValue: number): number {\r\n if (!isExplicitlySet(value)) {\r\n return defaultValue;\r\n }\r\n return safeParseInt(value, defaultValue);\r\n}\r\n\r\n/**\r\n * Parse OOXML \"on/off\" attribute (ST_OnOff type).\r\n *\r\n * Some OOXML attributes use the ST_OnOff simple type which can be:\r\n * - \"on\", \"1\", \"true\" = true\r\n * - \"off\", \"0\", \"false\" = false\r\n *\r\n * This is similar to parseOoxmlBoolean but works on attribute values directly.\r\n *\r\n * @param value - The attribute value\r\n * @param defaultValue - Default if value is not set\r\n * @returns Boolean value\r\n */\r\nexport function parseOnOffAttribute(value: unknown, defaultValue = false): boolean {\r\n if (!isExplicitlySet(value)) {\r\n return defaultValue;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const lowerVal = value.toLowerCase();\r\n return lowerVal === '1' || lowerVal === 'true' || lowerVal === 'on';\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return value === 1;\r\n }\r\n\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n\r\n return defaultValue;\r\n}\r\n"]}
|
|
@@ -1,22 +1,3 @@
|
|
|
1
1
|
import { ZipHandler } from '../zip/ZipHandler';
|
|
2
|
-
export declare class TrackedChangesStripper {
|
|
3
|
-
private zipHandler;
|
|
4
|
-
constructor(zipHandler: ZipHandler);
|
|
5
|
-
stripTrackedChanges(): Promise<void>;
|
|
6
|
-
private stripDocumentRevisions;
|
|
7
|
-
private removeRangeMarkers;
|
|
8
|
-
private processInsertions;
|
|
9
|
-
private processDeletions;
|
|
10
|
-
private processMoveFrom;
|
|
11
|
-
private processMoveTo;
|
|
12
|
-
private removePropertyChanges;
|
|
13
|
-
private removeSelfClosingRevisionTags;
|
|
14
|
-
private parseRelationships;
|
|
15
|
-
private getNextRelationshipId;
|
|
16
|
-
private addRelationship;
|
|
17
|
-
private cleanupPeopleXml;
|
|
18
|
-
private cleanupSettingsXml;
|
|
19
|
-
private cleanupCorePropsXml;
|
|
20
|
-
}
|
|
21
2
|
export declare function stripTrackedChanges(zipHandler: ZipHandler): Promise<void>;
|
|
22
3
|
//# sourceMappingURL=stripTrackedChanges.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripTrackedChanges.d.ts","sourceRoot":"","sources":["../../src/utils/stripTrackedChanges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"stripTrackedChanges.d.ts","sourceRoot":"","sources":["../../src/utils/stripTrackedChanges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA6V/C,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/E"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TrackedChangesStripper = void 0;
|
|
4
3
|
exports.stripTrackedChanges = stripTrackedChanges;
|
|
5
4
|
class TrackedChangesStripper {
|
|
6
5
|
zipHandler;
|
|
@@ -188,7 +187,6 @@ class TrackedChangesStripper {
|
|
|
188
187
|
this.zipHandler.updateFile('docProps/core.xml', content);
|
|
189
188
|
}
|
|
190
189
|
}
|
|
191
|
-
exports.TrackedChangesStripper = TrackedChangesStripper;
|
|
192
190
|
async function stripTrackedChanges(zipHandler) {
|
|
193
191
|
const stripper = new TrackedChangesStripper(zipHandler);
|
|
194
192
|
await stripper.stripTrackedChanges();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripTrackedChanges.js","sourceRoot":"","sources":["../../src/utils/stripTrackedChanges.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stripTrackedChanges.js","sourceRoot":"","sources":["../../src/utils/stripTrackedChanges.ts"],"names":[],"mappings":"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","sourcesContent":["import { ZipHandler } from '../zip/ZipHandler';\r\n\r\n/**\r\n * Strips all tracked changes markup from a Word document\r\n * This includes insertions, deletions, move operations, and property changes\r\n * Also cleans up related metadata in people.xml, settings.xml, and core.xml\r\n */\r\nclass TrackedChangesStripper {\r\n private zipHandler: ZipHandler;\r\n\r\n constructor(zipHandler: ZipHandler) {\r\n this.zipHandler = zipHandler;\r\n }\r\n\r\n /**\r\n * Main method to strip all tracked changes from the document\r\n */\r\n public async stripTrackedChanges(): Promise<void> {\r\n // Strip revision elements from document.xml\r\n await this.stripDocumentRevisions();\r\n\r\n // Clean up metadata files\r\n await this.cleanupPeopleXml();\r\n await this.cleanupSettingsXml();\r\n await this.cleanupCorePropsXml();\r\n }\r\n\r\n /**\r\n * Strip ALL revision elements from word/document.xml\r\n */\r\n private async stripDocumentRevisions(): Promise<void> {\r\n const documentXml = this.zipHandler.getFileAsString('word/document.xml');\r\n if (!documentXml) {\r\n return;\r\n }\r\n\r\n let content = documentXml;\r\n\r\n // STEP 1: Remove all range markers (boundary markers for tracked changes)\r\n content = this.removeRangeMarkers(content);\r\n\r\n // STEP 2: Process insertions - keep content, remove wrapper\r\n content = this.processInsertions(content);\r\n\r\n // STEP 3: Process deletions - remove entirely\r\n content = this.processDeletions(content);\r\n\r\n // STEP 4: Process move operations\r\n content = this.processMoveFrom(content);\r\n content = this.processMoveTo(content);\r\n\r\n // STEP 5: Remove all property change tracking elements\r\n content = this.removePropertyChanges(content);\r\n\r\n // STEP 6: Remove any remaining self-closing revision tags\r\n content = this.removeSelfClosingRevisionTags(content);\r\n\r\n // Update the file in the zip\r\n this.zipHandler.updateFile('word/document.xml', content);\r\n }\r\n\r\n /**\r\n * Remove all range marker elements\r\n */\r\n private removeRangeMarkers(xml: string): string {\r\n const patterns = [\r\n /<w:moveFromRangeStart[^>]*\\/>/g,\r\n /<w:moveFromRangeEnd[^>]*\\/>/g,\r\n /<w:moveToRangeStart[^>]*\\/>/g,\r\n /<w:moveToRangeEnd[^>]*\\/>/g,\r\n /<w:customXmlInsRangeStart[^>]*\\/>/g,\r\n /<w:customXmlInsRangeEnd[^>]*\\/>/g,\r\n /<w:customXmlDelRangeStart[^>]*\\/>/g,\r\n /<w:customXmlDelRangeEnd[^>]*\\/>/g,\r\n /<w:customXmlMoveFromRangeStart[^>]*\\/>/g,\r\n /<w:customXmlMoveFromRangeEnd[^>]*\\/>/g,\r\n /<w:customXmlMoveToRangeStart[^>]*\\/>/g,\r\n /<w:customXmlMoveToRangeEnd[^>]*\\/>/g\r\n ];\r\n\r\n let result = xml;\r\n for (const pattern of patterns) {\r\n result = result.replace(pattern, '');\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Process <w:ins> elements - keep inner content, remove wrapper\r\n * Handles orphaned tags by removing opening and closing tags separately\r\n *\r\n * IMPORTANT: This method now handles relationship ID remapping for images inside insertions.\r\n * When Word tracks changes with images, it can reuse relationship IDs (like rId5) because\r\n * they're in separate tracked change contexts. But when we unwrap them, duplicate IDs\r\n * cause corruption. This method assigns new unique IDs to images inside insertions.\r\n */\r\n private processInsertions(xml: string): string {\r\n let result = xml;\r\n\r\n // Parse existing relationships\r\n const relationships = this.parseRelationships();\r\n const existingIds = new Set(relationships.keys());\r\n\r\n // Process each w:ins element and remap images one by one\r\n const insRegex = /<w:ins\\b[^>]*>[\\s\\S]*?<\\/w:ins>/g;\r\n\r\n result = result.replace(insRegex, (insMatch) => {\r\n // For each image reference inside this insertion, generate a unique new ID\r\n return insMatch.replace(/r:embed=\"(rId\\d+)\"/g, (embedMatch, oldId) => {\r\n // Generate new unique ID for THIS occurrence\r\n const newId = this.getNextRelationshipId(existingIds);\r\n existingIds.add(newId);\r\n\r\n // Add relationship with same target as original\r\n const target = relationships.get(oldId);\r\n if (target) {\r\n this.addRelationship(\r\n newId,\r\n target,\r\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image'\r\n );\r\n }\r\n\r\n return `r:embed=\"${newId}\"`;\r\n });\r\n });\r\n\r\n // First, remove all closing tags\r\n result = result.replace(/<\\/w:ins>/g, '');\r\n\r\n // Then, remove all opening tags (keeping any content that follows)\r\n result = result.replace(/<w:ins[\\s>][^>]*>/g, '');\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Process <w:del> elements - remove entire element\r\n * Uses iterative replacement to handle nested deletions\r\n */\r\n private processDeletions(xml: string): string {\r\n let result = xml;\r\n let previousLength = 0;\r\n \r\n // Keep replacing until no more changes (handles nested revisions)\r\n while (result.length !== previousLength) {\r\n previousLength = result.length;\r\n \r\n // Match entire deletion element and remove it\r\n // Use [\\s>] to match either space or closing bracket\r\n result = result.replace(/<w:del[\\s>][^>]*>.*?<\\/w:del>/gs, '');\r\n }\r\n \r\n return result;\r\n }\r\n\r\n /**\r\n * Process <w:moveFrom> elements - remove entire element (source of move)\r\n * Uses iterative replacement to handle nested moves\r\n */\r\n private processMoveFrom(xml: string): string {\r\n let result = xml;\r\n let previousLength = 0;\r\n \r\n // Keep replacing until no more changes\r\n while (result.length !== previousLength) {\r\n previousLength = result.length;\r\n \r\n // Use [\\s>] to match either space or closing bracket\r\n result = result.replace(/<w:moveFrom[\\s>][^>]*>.*?<\\/w:moveFrom>/gs, '');\r\n }\r\n \r\n return result;\r\n }\r\n\r\n /**\r\n * Process <w:moveTo> elements - keep inner content (destination of move)\r\n * Handles orphaned tags by removing opening and closing tags separately\r\n */\r\n private processMoveTo(xml: string): string {\r\n let result = xml;\r\n \r\n // First, remove all closing tags\r\n result = result.replace(/<\\/w:moveTo>/g, '');\r\n \r\n // Then, remove all opening tags (keeping any content that follows)\r\n result = result.replace(/<w:moveTo[\\s>][^>]*>/g, '');\r\n \r\n return result;\r\n }\r\n\r\n /**\r\n * Remove all property change tracking elements\r\n */\r\n private removePropertyChanges(xml: string): string {\r\n const patterns = [\r\n /<w:rPrChange[^>]*>.*?<\\/w:rPrChange>/gs, // Run property changes\r\n /<w:pPrChange[^>]*>.*?<\\/w:pPrChange>/gs, // Paragraph property changes\r\n /<w:tblPrChange[^>]*>.*?<\\/w:tblPrChange>/gs, // Table property changes\r\n /<w:tblPrExChange[^>]*>.*?<\\/w:tblPrExChange>/gs, // Table property exception changes\r\n /<w:tcPrChange[^>]*>.*?<\\/w:tcPrChange>/gs, // Table cell property changes\r\n /<w:trPrChange[^>]*>.*?<\\/w:trPrChange>/gs, // Table row property changes\r\n /<w:sectPrChange[^>]*>.*?<\\/w:sectPrChange>/gs, // Section property changes\r\n /<w:tblGridChange[^>]*>.*?<\\/w:tblGridChange>/gs, // Table grid changes\r\n /<w:numberingChange[^>]*>.*?<\\/w:numberingChange>/gs // Numbering changes\r\n ];\r\n\r\n let result = xml;\r\n for (const pattern of patterns) {\r\n result = result.replace(pattern, '');\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Remove self-closing revision tags\r\n */\r\n private removeSelfClosingRevisionTags(xml: string): string {\r\n const patterns = [\r\n /<w:ins\\s+[^>]*\\/>/g,\r\n /<w:del\\s+[^>]*\\/>/g,\r\n /<w:moveFrom\\s+[^>]*\\/>/g,\r\n /<w:moveTo\\s+[^>]*\\/>/g\r\n ];\r\n\r\n let result = xml;\r\n for (const pattern of patterns) {\r\n result = result.replace(pattern, '');\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Parse relationship IDs from word/_rels/document.xml.rels\r\n * Returns a map of relationship ID to target path\r\n */\r\n private parseRelationships(): Map<string, string> {\r\n const relsXml = this.zipHandler.getFileAsString('word/_rels/document.xml.rels');\r\n if (!relsXml) return new Map();\r\n\r\n const map = new Map<string, string>();\r\n const relationshipRegex = /<Relationship[^>]*Id=\"([^\"]+)\"[^>]*Target=\"([^\"]+)\"[^>]*\\/>/g;\r\n let match;\r\n\r\n while ((match = relationshipRegex.exec(relsXml)) !== null) {\r\n if (match[1] && match[2]) {\r\n map.set(match[1], match[2]); // rId -> target path\r\n }\r\n }\r\n\r\n return map;\r\n }\r\n\r\n /**\r\n * Get the next available relationship ID\r\n * Finds the highest numeric ID and increments it\r\n */\r\n private getNextRelationshipId(existingIds: Set<string>): string {\r\n let maxId = 0;\r\n for (const id of existingIds) {\r\n const num = parseInt(id.replace('rId', ''));\r\n if (!isNaN(num) && num > maxId) {\r\n maxId = num;\r\n }\r\n }\r\n return `rId${maxId + 1}`;\r\n }\r\n\r\n /**\r\n * Add a new relationship to word/_rels/document.xml.rels\r\n */\r\n private addRelationship(rId: string, target: string, type: string): void {\r\n const relsXml = this.zipHandler.getFileAsString('word/_rels/document.xml.rels');\r\n if (!relsXml) return;\r\n\r\n // Insert new relationship before closing tag\r\n const newRel = `<Relationship Id=\"${rId}\" Type=\"${type}\" Target=\"${target}\"/>`;\r\n const updated = relsXml.replace('</Relationships>', `${newRel}\\n</Relationships>`);\r\n\r\n this.zipHandler.updateFile('word/_rels/document.xml.rels', updated);\r\n }\r\n\r\n /**\r\n * Clean up word/people.xml - remove revision authors\r\n */\r\n private async cleanupPeopleXml(): Promise<void> {\r\n const peopleXml = this.zipHandler.getFileAsString('word/people.xml');\r\n if (!peopleXml) {\r\n return;\r\n }\r\n\r\n let content = peopleXml;\r\n\r\n // Remove all <w:person> elements (standard namespace)\r\n content = content.replace(/<w:person[^>]*>.*?<\\/w:person>/gs, '');\r\n\r\n // Remove all <w15:person> elements (Word 2013+ namespace)\r\n content = content.replace(/<w15:person[^>]*>.*?<\\/w15:person>/gs, '');\r\n\r\n // Remove any other namespace variants of person elements\r\n content = content.replace(/<w\\d*:person[^>]*>.*?<\\/w\\d*:person>/gs, '');\r\n\r\n this.zipHandler.updateFile('word/people.xml', content);\r\n }\r\n\r\n /**\r\n * Clean up word/settings.xml - disable track changes\r\n */\r\n private async cleanupSettingsXml(): Promise<void> {\r\n const settingsXml = this.zipHandler.getFileAsString('word/settings.xml');\r\n if (!settingsXml) {\r\n return;\r\n }\r\n\r\n let content = settingsXml;\r\n\r\n // Remove track changes settings\r\n content = content.replace(/<w:trackRevisions[^>]*\\/>/g, '');\r\n content = content.replace(/<w:trackRevisions[^>]*>.*?<\\/w:trackRevisions>/gs, '');\r\n\r\n // Remove revision view settings\r\n content = content.replace(/<w:revisionView[^>]*\\/>/g, '');\r\n content = content.replace(/<w:revisionView[^>]*>.*?<\\/w:revisionView>/gs, '');\r\n\r\n this.zipHandler.updateFile('word/settings.xml', content);\r\n }\r\n\r\n /**\r\n * Clean up docProps/core.xml - reset revision count\r\n */\r\n private async cleanupCorePropsXml(): Promise<void> {\r\n const coreXml = this.zipHandler.getFileAsString('docProps/core.xml');\r\n if (!coreXml) {\r\n return;\r\n }\r\n\r\n // Reset revision count to 1\r\n const content = coreXml.replace(/<cp:revision>\\d+<\\/cp:revision>/g, '<cp:revision>1</cp:revision>');\r\n\r\n this.zipHandler.updateFile('docProps/core.xml', content);\r\n }\r\n}\r\n\r\n/**\r\n * Convenience function to strip tracked changes from a ZipHandler\r\n */\r\nexport async function stripTrackedChanges(zipHandler: ZipHandler): Promise<void> {\r\n const stripper = new TrackedChangesStripper(zipHandler);\r\n await stripper.stripTrackedChanges();\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textDiff.js","sourceRoot":"","sources":["../../src/utils/textDiff.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"textDiff.js","sourceRoot":"","sources":["../../src/utils/textDiff.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Text diff utility for character-level granular tracked changes.\r\n *\r\n * Uses a prefix/suffix diff algorithm to compute minimal edit operations\r\n * between two strings. This allows tracked changes to show only the\r\n * actual differences instead of marking entire runs as deleted/inserted.\r\n */\r\n\r\n/**\r\n * Represents a segment of a diff result.\r\n */\r\nexport interface DiffSegment {\r\n /** Whether this segment is unchanged, deleted, or inserted */\r\n type: \"equal\" | \"delete\" | \"insert\";\r\n /** The text content of this segment */\r\n text: string;\r\n}\r\n\r\n/**\r\n * Computes minimal diff segments between two strings.\r\n *\r\n * Algorithm: Find common prefix, then common suffix from the remaining text,\r\n * then the middle portion is a delete (from old) + insert (from new).\r\n *\r\n * This handles the most common edit patterns optimally:\r\n * - Space removal: \"word word\" → \"word word\" → [equal \"word \", delete \" \", equal \"word\"]\r\n * - Word replacement: \"The quick fox\" → \"The slow fox\" → [equal \"The \", delete \"quick\", insert \"slow\", equal \" fox\"]\r\n * - Prefix change: \"Hello World\" → \"Goodbye World\" → [delete \"Hello\", insert \"Goodbye\", equal \" World\"]\r\n * - Suffix change: \"Hello World\" → \"Hello Earth\" → [equal \"Hello \", delete \"World\", insert \"Earth\"]\r\n *\r\n * @param oldText - The original text\r\n * @param newText - The new text\r\n * @returns Array of diff segments\r\n */\r\nexport function diffText(oldText: string, newText: string): DiffSegment[] {\r\n // Identical strings — no changes\r\n if (oldText === newText) {\r\n return oldText.length > 0 ? [{ type: \"equal\", text: oldText }] : [];\r\n }\r\n\r\n // Empty old — entire new text is an insertion\r\n if (oldText.length === 0) {\r\n return newText.length > 0 ? [{ type: \"insert\", text: newText }] : [];\r\n }\r\n\r\n // Empty new — entire old text is a deletion\r\n if (newText.length === 0) {\r\n return [{ type: \"delete\", text: oldText }];\r\n }\r\n\r\n // Find common prefix length\r\n let prefixLen = 0;\r\n const minLen = Math.min(oldText.length, newText.length);\r\n while (prefixLen < minLen && oldText[prefixLen] === newText[prefixLen]) {\r\n prefixLen++;\r\n }\r\n\r\n // Find common suffix length (not overlapping with prefix)\r\n let suffixLen = 0;\r\n const maxSuffix = minLen - prefixLen;\r\n while (\r\n suffixLen < maxSuffix &&\r\n oldText[oldText.length - 1 - suffixLen] === newText[newText.length - 1 - suffixLen]\r\n ) {\r\n suffixLen++;\r\n }\r\n\r\n const segments: DiffSegment[] = [];\r\n\r\n // Common prefix\r\n if (prefixLen > 0) {\r\n segments.push({ type: \"equal\", text: oldText.slice(0, prefixLen) });\r\n }\r\n\r\n // Middle portion — what changed\r\n const oldMiddle = oldText.slice(prefixLen, oldText.length - suffixLen);\r\n const newMiddle = newText.slice(prefixLen, newText.length - suffixLen);\r\n\r\n if (oldMiddle.length > 0) {\r\n segments.push({ type: \"delete\", text: oldMiddle });\r\n }\r\n if (newMiddle.length > 0) {\r\n segments.push({ type: \"insert\", text: newMiddle });\r\n }\r\n\r\n // Common suffix\r\n if (suffixLen > 0) {\r\n segments.push({ type: \"equal\", text: oldText.slice(oldText.length - suffixLen) });\r\n }\r\n\r\n return segments;\r\n}\r\n\r\n/**\r\n * Checks whether a diff result has any unchanged (equal) portions.\r\n * If false, the entire text was replaced (no benefit from granular tracking).\r\n */\r\nexport function diffHasUnchangedParts(segments: DiffSegment[]): boolean {\r\n return segments.some(s => s.type === \"equal\");\r\n}\r\n"]}
|