docxmlater 10.1.3 → 10.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +759 -754
- package/dist/constants/legacyCompatFlags.js +1 -1
- package/dist/constants/legacyCompatFlags.js.map +1 -1
- package/dist/constants/limits.js.map +1 -1
- package/dist/core/Document.d.ts +50 -50
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +483 -471
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentContent.d.ts +9 -9
- package/dist/core/DocumentContent.d.ts.map +1 -1
- package/dist/core/DocumentContent.js +1 -1
- package/dist/core/DocumentContent.js.map +1 -1
- package/dist/core/DocumentGenerator.d.ts +11 -11
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +251 -251
- package/dist/core/DocumentGenerator.js.map +1 -1
- package/dist/core/DocumentIdManager.js.map +1 -1
- package/dist/core/DocumentParser.d.ts +15 -15
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +2123 -2155
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/DocumentValidator.d.ts.map +1 -1
- package/dist/core/DocumentValidator.js +2 -5
- package/dist/core/DocumentValidator.js.map +1 -1
- package/dist/core/Relationship.js.map +1 -1
- package/dist/core/RelationshipManager.d.ts.map +1 -1
- package/dist/core/RelationshipManager.js +3 -3
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/AlternateContent.js.map +1 -1
- package/dist/elements/Bookmark.d.ts.map +1 -1
- package/dist/elements/Bookmark.js +3 -1
- package/dist/elements/Bookmark.js.map +1 -1
- package/dist/elements/BookmarkManager.d.ts.map +1 -1
- package/dist/elements/BookmarkManager.js.map +1 -1
- package/dist/elements/Comment.d.ts.map +1 -1
- package/dist/elements/Comment.js +9 -6
- package/dist/elements/Comment.js.map +1 -1
- package/dist/elements/CommentManager.d.ts.map +1 -1
- package/dist/elements/CommentManager.js +18 -17
- package/dist/elements/CommentManager.js.map +1 -1
- package/dist/elements/CommonTypes.d.ts +21 -21
- package/dist/elements/CommonTypes.d.ts.map +1 -1
- package/dist/elements/CommonTypes.js +56 -56
- package/dist/elements/CommonTypes.js.map +1 -1
- package/dist/elements/CustomXml.js.map +1 -1
- package/dist/elements/Endnote.d.ts.map +1 -1
- package/dist/elements/Endnote.js +6 -6
- package/dist/elements/Endnote.js.map +1 -1
- package/dist/elements/EndnoteManager.d.ts.map +1 -1
- package/dist/elements/EndnoteManager.js +6 -7
- package/dist/elements/EndnoteManager.js.map +1 -1
- package/dist/elements/Field.d.ts.map +1 -1
- package/dist/elements/Field.js +82 -25
- package/dist/elements/Field.js.map +1 -1
- package/dist/elements/FieldHelpers.d.ts.map +1 -1
- package/dist/elements/FieldHelpers.js.map +1 -1
- package/dist/elements/FontManager.d.ts.map +1 -1
- package/dist/elements/FontManager.js +1 -1
- package/dist/elements/FontManager.js.map +1 -1
- package/dist/elements/Footer.js +2 -2
- package/dist/elements/Footer.js.map +1 -1
- package/dist/elements/Footnote.d.ts.map +1 -1
- package/dist/elements/Footnote.js +6 -6
- package/dist/elements/Footnote.js.map +1 -1
- package/dist/elements/FootnoteManager.d.ts.map +1 -1
- package/dist/elements/FootnoteManager.js +6 -7
- package/dist/elements/FootnoteManager.js.map +1 -1
- package/dist/elements/Header.js +2 -2
- package/dist/elements/Header.js.map +1 -1
- package/dist/elements/HeaderFooterManager.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts +5 -3
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +134 -76
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +238 -106
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/ImageManager.d.ts.map +1 -1
- package/dist/elements/ImageManager.js +1 -1
- package/dist/elements/ImageManager.js.map +1 -1
- package/dist/elements/ImageRun.js +1 -1
- package/dist/elements/ImageRun.js.map +1 -1
- package/dist/elements/MathElement.js.map +1 -1
- package/dist/elements/Paragraph.d.ts +24 -24
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +181 -188
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/PreservedElement.js.map +1 -1
- package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
- package/dist/elements/PropertyChangeTypes.js +6 -6
- package/dist/elements/PropertyChangeTypes.js.map +1 -1
- package/dist/elements/RangeMarker.d.ts.map +1 -1
- package/dist/elements/RangeMarker.js.map +1 -1
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +4 -5
- package/dist/elements/Revision.js.map +1 -1
- package/dist/elements/RevisionContent.js.map +1 -1
- package/dist/elements/RevisionManager.d.ts.map +1 -1
- package/dist/elements/RevisionManager.js +40 -48
- package/dist/elements/RevisionManager.js.map +1 -1
- package/dist/elements/Run.d.ts +16 -16
- package/dist/elements/Run.d.ts.map +1 -1
- package/dist/elements/Run.js +256 -238
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +36 -11
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Shape.d.ts.map +1 -1
- package/dist/elements/Shape.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts +6 -6
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +99 -104
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/Table.d.ts +11 -11
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +102 -107
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +10 -10
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +105 -106
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableGridChange.d.ts.map +1 -1
- package/dist/elements/TableGridChange.js.map +1 -1
- package/dist/elements/TableOfContents.d.ts.map +1 -1
- package/dist/elements/TableOfContents.js +4 -4
- package/dist/elements/TableOfContents.js.map +1 -1
- package/dist/elements/TableOfContentsElement.js.map +1 -1
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +13 -6
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/elements/TextBox.d.ts.map +1 -1
- package/dist/elements/TextBox.js +3 -5
- package/dist/elements/TextBox.js.map +1 -1
- package/dist/formatting/AbstractNumbering.d.ts +4 -4
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +54 -49
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingInstance.d.ts.map +1 -1
- package/dist/formatting/NumberingInstance.js +1 -3
- package/dist/formatting/NumberingInstance.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts +5 -5
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +119 -125
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/NumberingManager.d.ts.map +1 -1
- package/dist/formatting/NumberingManager.js +9 -9
- package/dist/formatting/NumberingManager.js.map +1 -1
- package/dist/formatting/Style.d.ts +11 -11
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +219 -247
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +2 -2
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js +96 -102
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/helpers/CleanupHelper.d.ts +1 -1
- package/dist/helpers/CleanupHelper.d.ts.map +1 -1
- package/dist/helpers/CleanupHelper.js +6 -6
- package/dist/helpers/CleanupHelper.js.map +1 -1
- package/dist/images/ImageOptimizer.js +7 -7
- package/dist/images/ImageOptimizer.js.map +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/managers/DrawingManager.js.map +1 -1
- package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
- package/dist/tracking/DocumentTrackingContext.js +23 -7
- package/dist/tracking/DocumentTrackingContext.js.map +1 -1
- package/dist/tracking/TrackingContext.d.ts.map +1 -1
- package/dist/tracking/TrackingContext.js.map +1 -1
- package/dist/types/compatibility-types.js.map +1 -1
- package/dist/types/formatting.js.map +1 -1
- package/dist/types/list-types.d.ts +6 -6
- package/dist/types/list-types.js.map +1 -1
- package/dist/types/settings-types.js.map +1 -1
- package/dist/types/styleConfig.d.ts +2 -2
- package/dist/types/styleConfig.js.map +1 -1
- package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
- package/dist/utils/ChangelogGenerator.js +97 -101
- package/dist/utils/ChangelogGenerator.js.map +1 -1
- package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
- package/dist/utils/CompatibilityUpgrader.js +1 -1
- package/dist/utils/CompatibilityUpgrader.js.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.js +1 -6
- package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
- package/dist/utils/MoveOperationHelper.d.ts.map +1 -1
- package/dist/utils/MoveOperationHelper.js +1 -1
- package/dist/utils/MoveOperationHelper.js.map +1 -1
- package/dist/utils/RevisionAwareProcessor.d.ts.map +1 -1
- package/dist/utils/RevisionAwareProcessor.js +2 -4
- package/dist/utils/RevisionAwareProcessor.js.map +1 -1
- package/dist/utils/RevisionWalker.d.ts.map +1 -1
- package/dist/utils/RevisionWalker.js +4 -12
- package/dist/utils/RevisionWalker.js.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.js +2 -6
- package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
- package/dist/utils/ShadingResolver.d.ts.map +1 -1
- package/dist/utils/ShadingResolver.js +1 -1
- package/dist/utils/ShadingResolver.js.map +1 -1
- package/dist/utils/acceptRevisions.d.ts.map +1 -1
- package/dist/utils/acceptRevisions.js +23 -12
- package/dist/utils/acceptRevisions.js.map +1 -1
- package/dist/utils/cnfStyleDecoder.d.ts +1 -1
- package/dist/utils/cnfStyleDecoder.d.ts.map +1 -1
- package/dist/utils/cnfStyleDecoder.js +40 -40
- package/dist/utils/cnfStyleDecoder.js.map +1 -1
- package/dist/utils/corruptionDetection.d.ts.map +1 -1
- package/dist/utils/corruptionDetection.js.map +1 -1
- package/dist/utils/dateFormatting.js.map +1 -1
- package/dist/utils/deepClone.js +1 -1
- package/dist/utils/deepClone.js.map +1 -1
- package/dist/utils/diagnostics.d.ts.map +1 -1
- package/dist/utils/diagnostics.js +1 -1
- package/dist/utils/diagnostics.js.map +1 -1
- package/dist/utils/errorHandling.js.map +1 -1
- package/dist/utils/formatting.d.ts.map +1 -1
- package/dist/utils/formatting.js +10 -2
- package/dist/utils/formatting.js.map +1 -1
- package/dist/utils/list-detection.d.ts +2 -2
- package/dist/utils/list-detection.d.ts.map +1 -1
- package/dist/utils/list-detection.js +21 -23
- package/dist/utils/list-detection.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +12 -7
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/parsingHelpers.js.map +1 -1
- package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
- package/dist/utils/stripTrackedChanges.js +3 -3
- package/dist/utils/stripTrackedChanges.js.map +1 -1
- package/dist/utils/textDiff.d.ts +1 -1
- package/dist/utils/textDiff.js +8 -8
- package/dist/utils/textDiff.js.map +1 -1
- package/dist/utils/units.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +24 -7
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/xmlSanitization.d.ts.map +1 -1
- package/dist/utils/xmlSanitization.js +3 -3
- package/dist/utils/xmlSanitization.js.map +1 -1
- package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
- package/dist/validation/RevisionAutoFixer.js +5 -5
- package/dist/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/validation/RevisionValidator.d.ts.map +1 -1
- package/dist/validation/RevisionValidator.js +7 -9
- package/dist/validation/RevisionValidator.js.map +1 -1
- package/dist/validation/ValidationRules.js +3 -3
- package/dist/validation/ValidationRules.js.map +1 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/xml/XMLBuilder.d.ts +1 -1
- package/dist/xml/XMLBuilder.d.ts.map +1 -1
- package/dist/xml/XMLBuilder.js +98 -100
- package/dist/xml/XMLBuilder.js.map +1 -1
- package/dist/xml/XMLParser.d.ts.map +1 -1
- package/dist/xml/XMLParser.js +61 -66
- package/dist/xml/XMLParser.js.map +1 -1
- package/dist/zip/ZipHandler.d.ts.map +1 -1
- package/dist/zip/ZipHandler.js.map +1 -1
- package/dist/zip/ZipReader.d.ts.map +1 -1
- package/dist/zip/ZipReader.js +1 -3
- package/dist/zip/ZipReader.js.map +1 -1
- package/dist/zip/ZipWriter.d.ts +1 -1
- package/dist/zip/ZipWriter.d.ts.map +1 -1
- package/dist/zip/ZipWriter.js +28 -36
- package/dist/zip/ZipWriter.js.map +1 -1
- package/dist/zip/types.js +1 -1
- package/dist/zip/types.js.map +1 -1
- package/package.json +92 -92
- package/src/__tests__/helper-methods.test.ts +512 -512
- package/src/constants/legacyCompatFlags.ts +138 -138
- package/src/constants/limits.ts +50 -50
- package/src/core/Document.ts +985 -1145
- package/src/core/DocumentContent.ts +461 -467
- package/src/core/DocumentGenerator.ts +1133 -1104
- package/src/core/DocumentIdManager.ts +158 -158
- package/src/core/DocumentParser.ts +2347 -2716
- package/src/core/DocumentValidator.ts +363 -372
- package/src/core/Relationship.ts +367 -367
- package/src/core/RelationshipManager.ts +429 -428
- package/src/elements/AlternateContent.ts +42 -42
- package/src/elements/Bookmark.ts +212 -210
- package/src/elements/BookmarkManager.ts +247 -250
- package/src/elements/Comment.ts +356 -359
- package/src/elements/CommentManager.ts +499 -502
- package/src/elements/CommonTypes.ts +524 -549
- package/src/elements/CustomXml.ts +36 -36
- package/src/elements/Endnote.ts +221 -217
- package/src/elements/EndnoteManager.ts +246 -249
- package/src/elements/Field.ts +1292 -1233
- package/src/elements/FieldHelpers.ts +329 -333
- package/src/elements/FontManager.ts +336 -339
- package/src/elements/Footer.ts +269 -269
- package/src/elements/Footnote.ts +221 -217
- package/src/elements/FootnoteManager.ts +246 -249
- package/src/elements/Header.ts +269 -269
- package/src/elements/HeaderFooterManager.ts +219 -219
- package/src/elements/Hyperlink.ts +1288 -1193
- package/src/elements/Image.ts +1982 -1756
- package/src/elements/ImageManager.ts +437 -432
- package/src/elements/ImageRun.ts +59 -59
- package/src/elements/MathElement.ts +65 -65
- package/src/elements/Paragraph.ts +4347 -4287
- package/src/elements/PreservedElement.ts +53 -53
- package/src/elements/PropertyChangeTypes.ts +458 -442
- package/src/elements/RangeMarker.ts +382 -400
- package/src/elements/Revision.ts +1198 -1217
- package/src/elements/RevisionContent.ts +73 -73
- package/src/elements/RevisionManager.ts +1070 -1070
- package/src/elements/Run.ts +3103 -3073
- package/src/elements/Section.ts +1521 -1421
- package/src/elements/Shape.ts +884 -873
- package/src/elements/StructuredDocumentTag.ts +1176 -1207
- package/src/elements/Table.ts +2468 -2524
- package/src/elements/TableCell.ts +1617 -1621
- package/src/elements/TableGridChange.ts +149 -151
- package/src/elements/TableOfContents.ts +701 -691
- package/src/elements/TableOfContentsElement.ts +89 -89
- package/src/elements/TableRow.ts +960 -929
- package/src/elements/TextBox.ts +766 -768
- package/src/formatting/AbstractNumbering.ts +580 -579
- package/src/formatting/NumberingInstance.ts +295 -299
- package/src/formatting/NumberingLevel.ts +981 -1040
- package/src/formatting/NumberingManager.ts +833 -827
- package/src/formatting/Style.ts +1785 -1879
- package/src/formatting/StylesManager.ts +1090 -1130
- package/src/helpers/CleanupHelper.ts +524 -524
- package/src/images/ImageOptimizer.ts +274 -274
- package/src/index.ts +559 -554
- package/src/managers/DrawingManager.ts +319 -319
- package/src/tracking/DocumentTrackingContext.ts +687 -674
- package/src/tracking/TrackingContext.ts +175 -173
- package/src/types/compatibility-types.ts +49 -49
- package/src/types/formatting.ts +210 -210
- package/src/types/list-types.ts +14 -14
- package/src/types/settings-types.ts +59 -59
- package/src/types/styleConfig.ts +189 -189
- package/src/utils/ChangelogGenerator.ts +1583 -1581
- package/src/utils/CompatibilityUpgrader.ts +235 -237
- package/src/utils/InMemoryRevisionAcceptor.ts +691 -696
- package/src/utils/MoveOperationHelper.ts +233 -238
- package/src/utils/RevisionAwareProcessor.ts +518 -526
- package/src/utils/RevisionWalker.ts +427 -457
- package/src/utils/SelectiveRevisionAcceptor.ts +662 -683
- package/src/utils/ShadingResolver.ts +105 -107
- package/src/utils/acceptRevisions.ts +723 -714
- package/src/utils/cnfStyleDecoder.ts +212 -217
- package/src/utils/corruptionDetection.ts +346 -345
- package/src/utils/dateFormatting.ts +20 -20
- package/src/utils/deepClone.ts +77 -78
- package/src/utils/diagnostics.ts +125 -129
- package/src/utils/errorHandling.ts +80 -80
- package/src/utils/formatting.ts +220 -213
- package/src/utils/list-detection.ts +32 -42
- package/src/utils/logger.ts +412 -404
- package/src/utils/parsingHelpers.ts +190 -190
- package/src/utils/stripTrackedChanges.ts +356 -353
- package/src/utils/textDiff.ts +100 -100
- package/src/utils/units.ts +421 -421
- package/src/utils/validation.ts +553 -542
- package/src/utils/xmlSanitization.ts +179 -182
- package/src/validation/RevisionAutoFixer.ts +541 -542
- package/src/validation/RevisionValidator.ts +470 -460
- package/src/validation/ValidationRules.ts +338 -338
- package/src/validation/index.ts +30 -30
- package/src/xml/XMLBuilder.ts +857 -871
- package/src/xml/XMLParser.ts +877 -919
- package/src/zip/ZipHandler.ts +629 -637
- package/src/zip/ZipReader.ts +295 -299
- package/src/zip/ZipWriter.ts +374 -390
- package/src/zip/types.ts +116 -116
package/src/utils/logger.ts
CHANGED
|
@@ -1,404 +1,412 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Logging interface for docXMLater
|
|
3
|
-
* Allows library consumers to control logging behavior
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Log severity levels
|
|
8
|
-
*/
|
|
9
|
-
export enum LogLevel {
|
|
10
|
-
/** Debugging information (most verbose) */
|
|
11
|
-
DEBUG = 'debug',
|
|
12
|
-
/** Informational messages */
|
|
13
|
-
INFO = 'info',
|
|
14
|
-
/** Warning messages - potential issues that don't prevent operation */
|
|
15
|
-
WARN = 'warn',
|
|
16
|
-
/** Error messages - serious issues that may cause failures */
|
|
17
|
-
ERROR = 'error',
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Log entry structure
|
|
22
|
-
*/
|
|
23
|
-
export interface LogEntry {
|
|
24
|
-
/** Timestamp when log was created */
|
|
25
|
-
timestamp: Date;
|
|
26
|
-
/** Severity level */
|
|
27
|
-
level: LogLevel;
|
|
28
|
-
/** Log message */
|
|
29
|
-
message: string;
|
|
30
|
-
/** Optional context data */
|
|
31
|
-
context?: Record<string, any>;
|
|
32
|
-
/** Source component that generated the log */
|
|
33
|
-
source?: string;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Logger interface that consumers can implement
|
|
38
|
-
* Provides full control over how logs are handled
|
|
39
|
-
*/
|
|
40
|
-
export interface ILogger {
|
|
41
|
-
/**
|
|
42
|
-
* Log a debug message
|
|
43
|
-
* @param message - Debug message
|
|
44
|
-
* @param context - Optional context data
|
|
45
|
-
*/
|
|
46
|
-
debug(message: string, context?: Record<string, any>): void;
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Log an informational message
|
|
50
|
-
* @param message - Info message
|
|
51
|
-
* @param context - Optional context data
|
|
52
|
-
*/
|
|
53
|
-
info(message: string, context?: Record<string, any>): void;
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Log a warning message
|
|
57
|
-
* @param message - Warning message
|
|
58
|
-
* @param context - Optional context data
|
|
59
|
-
*/
|
|
60
|
-
warn(message: string, context?: Record<string, any>): void;
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Log an error message
|
|
64
|
-
* @param message - Error message
|
|
65
|
-
* @param context - Optional context data
|
|
66
|
-
*/
|
|
67
|
-
error(message: string, context?: Record<string, any>): void;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Console-based logger implementation
|
|
72
|
-
* Uses standard console methods for output with timestamps and source prefixes
|
|
73
|
-
*/
|
|
74
|
-
export class ConsoleLogger implements ILogger {
|
|
75
|
-
private showTimestamp: boolean;
|
|
76
|
-
|
|
77
|
-
constructor(
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
// Add
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
// Add
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
getGlobalLogger().
|
|
261
|
-
},
|
|
262
|
-
|
|
263
|
-
getGlobalLogger().
|
|
264
|
-
},
|
|
265
|
-
|
|
266
|
-
getGlobalLogger().
|
|
267
|
-
},
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
*
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
logger.
|
|
283
|
-
},
|
|
284
|
-
|
|
285
|
-
logger.
|
|
286
|
-
},
|
|
287
|
-
|
|
288
|
-
logger.
|
|
289
|
-
},
|
|
290
|
-
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
case '
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
*
|
|
354
|
-
*
|
|
355
|
-
*
|
|
356
|
-
* @
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
*
|
|
364
|
-
*
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
*
|
|
374
|
-
*
|
|
375
|
-
*/
|
|
376
|
-
export function
|
|
377
|
-
globalLogger
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
/**
|
|
381
|
-
*
|
|
382
|
-
*
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
*
|
|
390
|
-
*
|
|
391
|
-
*
|
|
392
|
-
*
|
|
393
|
-
*
|
|
394
|
-
*
|
|
395
|
-
*
|
|
396
|
-
*
|
|
397
|
-
*
|
|
398
|
-
* //
|
|
399
|
-
*
|
|
400
|
-
*
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Logging interface for docXMLater
|
|
3
|
+
* Allows library consumers to control logging behavior
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Log severity levels
|
|
8
|
+
*/
|
|
9
|
+
export enum LogLevel {
|
|
10
|
+
/** Debugging information (most verbose) */
|
|
11
|
+
DEBUG = 'debug',
|
|
12
|
+
/** Informational messages */
|
|
13
|
+
INFO = 'info',
|
|
14
|
+
/** Warning messages - potential issues that don't prevent operation */
|
|
15
|
+
WARN = 'warn',
|
|
16
|
+
/** Error messages - serious issues that may cause failures */
|
|
17
|
+
ERROR = 'error',
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Log entry structure
|
|
22
|
+
*/
|
|
23
|
+
export interface LogEntry {
|
|
24
|
+
/** Timestamp when log was created */
|
|
25
|
+
timestamp: Date;
|
|
26
|
+
/** Severity level */
|
|
27
|
+
level: LogLevel;
|
|
28
|
+
/** Log message */
|
|
29
|
+
message: string;
|
|
30
|
+
/** Optional context data */
|
|
31
|
+
context?: Record<string, any>;
|
|
32
|
+
/** Source component that generated the log */
|
|
33
|
+
source?: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Logger interface that consumers can implement
|
|
38
|
+
* Provides full control over how logs are handled
|
|
39
|
+
*/
|
|
40
|
+
export interface ILogger {
|
|
41
|
+
/**
|
|
42
|
+
* Log a debug message
|
|
43
|
+
* @param message - Debug message
|
|
44
|
+
* @param context - Optional context data
|
|
45
|
+
*/
|
|
46
|
+
debug(message: string, context?: Record<string, any>): void;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Log an informational message
|
|
50
|
+
* @param message - Info message
|
|
51
|
+
* @param context - Optional context data
|
|
52
|
+
*/
|
|
53
|
+
info(message: string, context?: Record<string, any>): void;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Log a warning message
|
|
57
|
+
* @param message - Warning message
|
|
58
|
+
* @param context - Optional context data
|
|
59
|
+
*/
|
|
60
|
+
warn(message: string, context?: Record<string, any>): void;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Log an error message
|
|
64
|
+
* @param message - Error message
|
|
65
|
+
* @param context - Optional context data
|
|
66
|
+
*/
|
|
67
|
+
error(message: string, context?: Record<string, any>): void;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Console-based logger implementation
|
|
72
|
+
* Uses standard console methods for output with timestamps and source prefixes
|
|
73
|
+
*/
|
|
74
|
+
export class ConsoleLogger implements ILogger {
|
|
75
|
+
private showTimestamp: boolean;
|
|
76
|
+
|
|
77
|
+
constructor(
|
|
78
|
+
private minLevel: LogLevel = LogLevel.WARN,
|
|
79
|
+
options?: { showTimestamp?: boolean }
|
|
80
|
+
) {
|
|
81
|
+
this.showTimestamp = options?.showTimestamp ?? true;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
debug(message: string, context?: Record<string, any>): void {
|
|
85
|
+
if (this.shouldLog(LogLevel.DEBUG)) {
|
|
86
|
+
console.debug(this.formatMessage(LogLevel.DEBUG, message, context));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
info(message: string, context?: Record<string, any>): void {
|
|
91
|
+
if (this.shouldLog(LogLevel.INFO)) {
|
|
92
|
+
console.info(this.formatMessage(LogLevel.INFO, message, context));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
warn(message: string, context?: Record<string, any>): void {
|
|
97
|
+
if (this.shouldLog(LogLevel.WARN)) {
|
|
98
|
+
console.warn(this.formatMessage(LogLevel.WARN, message, context));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
error(message: string, context?: Record<string, any>): void {
|
|
103
|
+
if (this.shouldLog(LogLevel.ERROR)) {
|
|
104
|
+
console.error(this.formatMessage(LogLevel.ERROR, message, context));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
private shouldLog(level: LogLevel): boolean {
|
|
109
|
+
const levels = [LogLevel.DEBUG, LogLevel.INFO, LogLevel.WARN, LogLevel.ERROR];
|
|
110
|
+
const minIndex = levels.indexOf(this.minLevel);
|
|
111
|
+
const currentIndex = levels.indexOf(level);
|
|
112
|
+
return currentIndex >= minIndex;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
private formatMessage(level: LogLevel, message: string, context?: Record<string, any>): string {
|
|
116
|
+
const parts: string[] = [];
|
|
117
|
+
|
|
118
|
+
// Add timestamp if enabled
|
|
119
|
+
if (this.showTimestamp) {
|
|
120
|
+
const timestamp = new Date().toISOString().slice(11, 23); // HH:mm:ss.SSS
|
|
121
|
+
parts.push(timestamp);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Add level tag
|
|
125
|
+
parts.push(`[${level.toUpperCase().padEnd(5)}]`);
|
|
126
|
+
|
|
127
|
+
// Add source if present
|
|
128
|
+
if (context?.source) {
|
|
129
|
+
parts.push(`[${context.source}]`);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Add message
|
|
133
|
+
parts.push(message);
|
|
134
|
+
|
|
135
|
+
// Add context (excluding source which is already shown)
|
|
136
|
+
if (context && Object.keys(context).length > 0) {
|
|
137
|
+
const contextWithoutSource = { ...context };
|
|
138
|
+
delete contextWithoutSource.source;
|
|
139
|
+
if (Object.keys(contextWithoutSource).length > 0) {
|
|
140
|
+
// Format context as key=value pairs for readability
|
|
141
|
+
const contextStr = this.formatContext(contextWithoutSource);
|
|
142
|
+
if (contextStr) {
|
|
143
|
+
parts.push(contextStr);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return parts.join(' ');
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
private formatContext(context: Record<string, any>): string {
|
|
152
|
+
const pairs: string[] = [];
|
|
153
|
+
for (const [key, value] of Object.entries(context)) {
|
|
154
|
+
if (value === undefined || value === null) continue;
|
|
155
|
+
if (typeof value === 'object' && !Array.isArray(value)) {
|
|
156
|
+
// Nested object - use compact JSON
|
|
157
|
+
pairs.push(`${key}=${JSON.stringify(value)}`);
|
|
158
|
+
} else if (Array.isArray(value)) {
|
|
159
|
+
pairs.push(`${key}=[${value.length}]`);
|
|
160
|
+
} else {
|
|
161
|
+
pairs.push(`${key}=${value}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return pairs.length > 0 ? pairs.join(' ') : '';
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Silent logger that discards all log messages
|
|
170
|
+
* Useful for testing or when logging is not desired
|
|
171
|
+
*/
|
|
172
|
+
export class SilentLogger implements ILogger {
|
|
173
|
+
debug(): void {
|
|
174
|
+
// No-op
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
info(): void {
|
|
178
|
+
// No-op
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
warn(): void {
|
|
182
|
+
// No-op
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
error(): void {
|
|
186
|
+
// No-op
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Collecting logger that stores log entries in memory
|
|
192
|
+
* Useful for testing and diagnostics
|
|
193
|
+
*/
|
|
194
|
+
export class CollectingLogger implements ILogger {
|
|
195
|
+
private logs: LogEntry[] = [];
|
|
196
|
+
|
|
197
|
+
debug(message: string, context?: Record<string, any>): void {
|
|
198
|
+
this.addLog(LogLevel.DEBUG, message, context);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
info(message: string, context?: Record<string, any>): void {
|
|
202
|
+
this.addLog(LogLevel.INFO, message, context);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
warn(message: string, context?: Record<string, any>): void {
|
|
206
|
+
this.addLog(LogLevel.WARN, message, context);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
error(message: string, context?: Record<string, any>): void {
|
|
210
|
+
this.addLog(LogLevel.ERROR, message, context);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
private addLog(level: LogLevel, message: string, context?: Record<string, any>): void {
|
|
214
|
+
this.logs.push({
|
|
215
|
+
timestamp: new Date(),
|
|
216
|
+
level,
|
|
217
|
+
message,
|
|
218
|
+
context,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Get all collected log entries
|
|
224
|
+
*/
|
|
225
|
+
getLogs(): readonly LogEntry[] {
|
|
226
|
+
return [...this.logs];
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Get logs filtered by level
|
|
231
|
+
*/
|
|
232
|
+
getLogsByLevel(level: LogLevel): readonly LogEntry[] {
|
|
233
|
+
return this.logs.filter((log) => log.level === level);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Clear all collected logs
|
|
238
|
+
*/
|
|
239
|
+
clear(): void {
|
|
240
|
+
this.logs = [];
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Get count of logs by level
|
|
245
|
+
*/
|
|
246
|
+
getCount(level?: LogLevel): number {
|
|
247
|
+
if (level) {
|
|
248
|
+
return this.logs.filter((log) => log.level === level).length;
|
|
249
|
+
}
|
|
250
|
+
return this.logs.length;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Default logger instance
|
|
256
|
+
* Delegates to the global logger, respecting setGlobalLogger() and environment variables
|
|
257
|
+
*/
|
|
258
|
+
export const defaultLogger: ILogger = {
|
|
259
|
+
debug(message: string, context?: Record<string, any>): void {
|
|
260
|
+
getGlobalLogger().debug(message, context);
|
|
261
|
+
},
|
|
262
|
+
info(message: string, context?: Record<string, any>): void {
|
|
263
|
+
getGlobalLogger().info(message, context);
|
|
264
|
+
},
|
|
265
|
+
warn(message: string, context?: Record<string, any>): void {
|
|
266
|
+
getGlobalLogger().warn(message, context);
|
|
267
|
+
},
|
|
268
|
+
error(message: string, context?: Record<string, any>): void {
|
|
269
|
+
getGlobalLogger().error(message, context);
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Creates a scoped logger that adds source information
|
|
275
|
+
* @param logger - Base logger
|
|
276
|
+
* @param source - Source component name
|
|
277
|
+
* @returns Scoped logger with source context
|
|
278
|
+
*/
|
|
279
|
+
export function createScopedLogger(logger: ILogger, source: string): ILogger {
|
|
280
|
+
return {
|
|
281
|
+
debug(message: string, context?: Record<string, any>): void {
|
|
282
|
+
logger.debug(message, { ...context, source });
|
|
283
|
+
},
|
|
284
|
+
info(message: string, context?: Record<string, any>): void {
|
|
285
|
+
logger.info(message, { ...context, source });
|
|
286
|
+
},
|
|
287
|
+
warn(message: string, context?: Record<string, any>): void {
|
|
288
|
+
logger.warn(message, { ...context, source });
|
|
289
|
+
},
|
|
290
|
+
error(message: string, context?: Record<string, any>): void {
|
|
291
|
+
logger.error(message, { ...context, source });
|
|
292
|
+
},
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Parse log level from string
|
|
298
|
+
* @param level - Log level string (case-insensitive)
|
|
299
|
+
* @returns LogLevel or undefined if invalid
|
|
300
|
+
*/
|
|
301
|
+
function parseLogLevel(level: string | undefined): LogLevel | undefined {
|
|
302
|
+
if (!level) return undefined;
|
|
303
|
+
const normalized = level.toLowerCase();
|
|
304
|
+
switch (normalized) {
|
|
305
|
+
case 'debug':
|
|
306
|
+
return LogLevel.DEBUG;
|
|
307
|
+
case 'info':
|
|
308
|
+
return LogLevel.INFO;
|
|
309
|
+
case 'warn':
|
|
310
|
+
return LogLevel.WARN;
|
|
311
|
+
case 'error':
|
|
312
|
+
return LogLevel.ERROR;
|
|
313
|
+
default:
|
|
314
|
+
return undefined;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Create a logger based on environment variables
|
|
320
|
+
*
|
|
321
|
+
* Environment variables (in order of precedence):
|
|
322
|
+
* - DEBUG=docxmlater or DEBUG=docxmlater:* - Enables DEBUG level
|
|
323
|
+
* - DOCXMLATER_LOG_LEVEL=debug|info|warn|error|silent - Sets specific level
|
|
324
|
+
*
|
|
325
|
+
* @returns Logger configured from environment, or SilentLogger if not configured
|
|
326
|
+
*/
|
|
327
|
+
function createLoggerFromEnv(): ILogger {
|
|
328
|
+
// Check DEBUG environment variable first (highest precedence for debug mode)
|
|
329
|
+
const debugEnv = process.env.DEBUG || '';
|
|
330
|
+
if (debugEnv.includes('docxmlater')) {
|
|
331
|
+
return new ConsoleLogger(LogLevel.DEBUG);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Check DOCXMLATER_LOG_LEVEL environment variable
|
|
335
|
+
const envLevel = process.env.DOCXMLATER_LOG_LEVEL?.toLowerCase();
|
|
336
|
+
if (envLevel === 'silent') {
|
|
337
|
+
return new SilentLogger();
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
const parsedLevel = parseLogLevel(envLevel);
|
|
341
|
+
if (parsedLevel) {
|
|
342
|
+
return new ConsoleLogger(parsedLevel);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// Default: silent (no logging unless explicitly enabled)
|
|
346
|
+
return new SilentLogger();
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// Global logger instance - initialized from environment
|
|
350
|
+
let globalLogger: ILogger = createLoggerFromEnv();
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Set the global logger instance
|
|
354
|
+
* Use this to configure logging programmatically
|
|
355
|
+
*
|
|
356
|
+
* @example
|
|
357
|
+
* ```typescript
|
|
358
|
+
* import { setGlobalLogger, ConsoleLogger, LogLevel } from 'docxmlater';
|
|
359
|
+
*
|
|
360
|
+
* // Enable info-level logging
|
|
361
|
+
* setGlobalLogger(new ConsoleLogger(LogLevel.INFO));
|
|
362
|
+
* ```
|
|
363
|
+
*
|
|
364
|
+
* @param logger - Logger instance to use globally
|
|
365
|
+
*/
|
|
366
|
+
export function setGlobalLogger(logger: ILogger): void {
|
|
367
|
+
globalLogger = logger;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Get the global logger instance
|
|
372
|
+
* Used internally by framework components
|
|
373
|
+
*
|
|
374
|
+
* @returns Current global logger
|
|
375
|
+
*/
|
|
376
|
+
export function getGlobalLogger(): ILogger {
|
|
377
|
+
return globalLogger;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Reset the global logger to its default (environment-based) configuration
|
|
382
|
+
* Useful for testing cleanup
|
|
383
|
+
*/
|
|
384
|
+
export function resetGlobalLogger(): void {
|
|
385
|
+
globalLogger = createLoggerFromEnv();
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* Creates a component-scoped logger using the global logger.
|
|
390
|
+
* This is a convenience function that combines getGlobalLogger() and createScopedLogger()
|
|
391
|
+
* into a single call, reducing boilerplate in component files.
|
|
392
|
+
*
|
|
393
|
+
* @param componentName - Name of the component (appears in log output)
|
|
394
|
+
* @returns Scoped logger instance
|
|
395
|
+
*
|
|
396
|
+
* @example
|
|
397
|
+
* ```typescript
|
|
398
|
+
* // Instead of:
|
|
399
|
+
* function getLogger(): ILogger {
|
|
400
|
+
* return createScopedLogger(getGlobalLogger(), 'MyComponent');
|
|
401
|
+
* }
|
|
402
|
+
*
|
|
403
|
+
* // You can use:
|
|
404
|
+
* const logger = createComponentLogger('MyComponent');
|
|
405
|
+
*
|
|
406
|
+
* // Or for lazy initialization:
|
|
407
|
+
* const getLogger = () => createComponentLogger('MyComponent');
|
|
408
|
+
* ```
|
|
409
|
+
*/
|
|
410
|
+
export function createComponentLogger(componentName: string): ILogger {
|
|
411
|
+
return createScopedLogger(getGlobalLogger(), componentName);
|
|
412
|
+
}
|