@decaf-ts/logging 0.2.3 → 0.3.0

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/lib/logging.d.ts CHANGED
@@ -2,121 +2,207 @@ import { LoggerFactory, LoggingConfig, LoggingContext, StringLike, Theme, Logger
2
2
  import { LogLevel } from "./constants";
3
3
  /**
4
4
  * @description A minimal logger implementation.
5
- * @summary MiniLogger is a lightweight logging class that implements the VerbosityLogger interface.
6
- * It provides basic logging functionality with support for different log levels and verbosity.
5
+ * @summary MiniLogger is a lightweight logging class that implements the Logger interface.
6
+ * It provides basic logging functionality with support for different log levels, verbosity,
7
+ * context-aware logging, and customizable formatting.
8
+ * @param {string} context - The context (typically class name) this logger is associated with
9
+ * @param {Partial<LoggingConfig>} conf - Optional configuration to override global settings
10
+ * @class MiniLogger
11
+ * @example
12
+ * // Create a new logger for a class
13
+ * const logger = new MiniLogger('MyClass');
7
14
  *
8
- * @class
15
+ * // Log messages at different levels
16
+ * logger.info('This is an info message');
17
+ * logger.debug('This is a debug message');
18
+ * logger.error('Something went wrong');
19
+ *
20
+ * // Create a child logger for a specific method
21
+ * const methodLogger = logger.for('myMethod');
22
+ * methodLogger.verbose('Detailed information', 2);
23
+ *
24
+ * // Log with custom configuration
25
+ * logger.for('specialMethod', { style: true }).info('Styled message');
9
26
  */
10
27
  export declare class MiniLogger implements Logger {
11
28
  protected context: string;
12
29
  protected conf?: Partial<LoggingConfig> | undefined;
13
- /**
14
- * @description Creates a new MiniLogger instance.
15
- * @summary Initializes a MiniLogger with the given class name, optional configuration, and method name.
16
- *
17
- * @param context - The name of the class using this logger.
18
- * @param [conf] - Optional logging configuration. Defaults to Info level and verbosity 0.
19
- * @param [id] - Optional unique identifier for the logger instance.
20
- */
21
30
  constructor(context: string, conf?: Partial<LoggingConfig> | undefined);
22
31
  protected config(key: keyof LoggingConfig): LoggingConfig[keyof LoggingConfig];
23
- for(method?: string | ((...args: any[]) => any), config?: Partial<LoggingConfig>, ...args: any[]): Logger;
24
32
  /**
25
- * @description Creates a formatted log string.
26
- * @summary Generates a log string with timestamp, colored log level, and message.
27
- *
28
- * @param level - The log level as a string.
29
- * @param message
30
- * @param stack
31
- * @return A formatted log string.
33
+ * @description Creates a child logger for a specific method or context
34
+ * @summary Returns a new logger instance with the current context extended by the specified method name
35
+ * @param {string | Function} method - The method name or function to create a logger for
36
+ * @param {Partial<LoggingConfig>} config - Optional configuration to override settings
37
+ * @param {...any} args - Additional arguments to pass to the logger factory
38
+ * @return {Logger} A new logger instance for the specified method
39
+ */
40
+ for(method?: string | ((...args: any[]) => any), config?: Partial<LoggingConfig>): Logger;
41
+ /**
42
+ * @description Creates a formatted log string
43
+ * @summary Generates a log string with timestamp, colored log level, context, and message
44
+ * @param {LogLevel} level - The log level for this message
45
+ * @param {StringLike | Error} message - The message to log or an Error object
46
+ * @param {string} [stack] - Optional stack trace to include in the log
47
+ * @return {string} A formatted log string with all components
32
48
  */
33
49
  protected createLog(level: LogLevel, message: StringLike | Error, stack?: string): string;
34
50
  /**
35
- * @description Logs a message with the specified log level.
51
+ * @description Logs a message with the specified log level
36
52
  * @summary Checks if the message should be logged based on the current log level,
37
- * then uses the appropriate console method to output the log.
38
- *
39
- * @param level - The log level of the message.
40
- * @param msg - The message to be logged.
41
- * @param stack
53
+ * then uses the appropriate console method to output the formatted log
54
+ * @param {LogLevel} level - The log level of the message
55
+ * @param {StringLike | Error} msg - The message to be logged or an Error object
56
+ * @param {string} [stack] - Optional stack trace to include in the log
57
+ * @return {void}
42
58
  */
43
59
  protected log(level: LogLevel, msg: StringLike | Error, stack?: string): void;
44
60
  /**
45
- * @description LLogs a `way too verbose` or a silly message.
46
- * @summary Logs a message at the Silly level if the current verbosity allows it.
47
- *
48
- * @param msg - The message to be logged.
49
- * @param verbosity - The verbosity level of the message (default: 0).
61
+ * @description Logs a message at the silly level
62
+ * @summary Logs a message at the silly level if the current verbosity setting allows it
63
+ * @param {StringLike} msg - The message to be logged
64
+ * @param {number} [verbosity=0] - The verbosity level of the message
65
+ * @return {void}
50
66
  */
51
67
  silly(msg: StringLike, verbosity?: number): void;
52
68
  /**
53
- * @description Logs a verbose message.
54
- * @summary Logs a message at the Verbose level if the current verbosity allows it.
55
- *
56
- * @param msg - The message to be logged.
57
- * @param verbosity - The verbosity level of the message (default: 0).
69
+ * @description Logs a message at the verbose level
70
+ * @summary Logs a message at the verbose level if the current verbosity setting allows it
71
+ * @param {StringLike} msg - The message to be logged
72
+ * @param {number} [verbosity=0] - The verbosity level of the message
73
+ * @return {void}
58
74
  */
59
75
  verbose(msg: StringLike, verbosity?: number): void;
60
76
  /**
61
- * @description Logs an info message.
62
- * @summary Logs a message at the Info level.
63
- *
64
- * @param msg - The message to be logged.
77
+ * @description Logs a message at the info level
78
+ * @summary Logs a message at the info level for general application information
79
+ * @param {StringLike} msg - The message to be logged
80
+ * @return {void}
65
81
  */
66
82
  info(msg: StringLike): void;
67
83
  /**
68
- * @description Logs a debug message.
69
- * @summary Logs a message at the Debug level.
70
- *
71
- * @param msg - The message to be logged.
84
+ * @description Logs a message at the debug level
85
+ * @summary Logs a message at the debug level for detailed troubleshooting information
86
+ * @param {StringLike} msg - The message to be logged
87
+ * @return {void}
72
88
  */
73
89
  debug(msg: StringLike): void;
74
90
  /**
75
- * @description Logs an error message.
76
- * @summary Logs a message at the Error level.
77
- *
78
- * @param msg - The message to be logged.
91
+ * @description Logs a message at the error level
92
+ * @summary Logs a message at the error level for errors and exceptions
93
+ * @param {StringLike | Error} msg - The message to be logged or an Error object
94
+ * @return {void}
79
95
  */
80
96
  error(msg: StringLike | Error): void;
97
+ /**
98
+ * @description Updates the logger configuration
99
+ * @summary Merges the provided configuration with the existing configuration
100
+ * @param {Partial<LoggingConfig>} config - The configuration options to apply
101
+ * @return {void}
102
+ */
81
103
  setConfig(config: Partial<LoggingConfig>): void;
82
104
  }
83
105
  /**
84
- * @description A static class for managing logging operations.
106
+ * @description A static class for managing logging operations
85
107
  * @summary The Logging class provides a centralized logging mechanism with support for
86
- * different log levels and verbosity. It uses a singleton pattern to maintain a global
108
+ * different log levels, verbosity, and styling. It uses a singleton pattern to maintain a global
87
109
  * logger instance and allows creating specific loggers for different classes and methods.
110
+ * @class Logging
111
+ * @example
112
+ * // Set global configuration
113
+ * Logging.setConfig({ level: LogLevel.debug, style: true });
114
+ *
115
+ * // Get a logger for a specific class
116
+ * const logger = Logging.for('MyClass');
117
+ *
118
+ * // Log messages at different levels
119
+ * logger.info('Application started');
120
+ * logger.debug('Processing data...');
121
+ *
122
+ * // Log with context
123
+ * const methodLogger = Logging.for('MyClass.myMethod');
124
+ * methodLogger.verbose('Detailed operation information', 1);
125
+ *
126
+ * // Log errors
127
+ * try {
128
+ * // some operation
129
+ * } catch (error) {
130
+ * logger.error(error);
131
+ * }
132
+ * @mermaid
133
+ * classDiagram
134
+ * class Logger {
135
+ * <<interface>>
136
+ * +for(method, config, ...args)
137
+ * +silly(msg, verbosity)
138
+ * +verbose(msg, verbosity)
139
+ * +info(msg)
140
+ * +debug(msg)
141
+ * +error(msg)
142
+ * +setConfig(config)
143
+ * }
144
+ *
145
+ * class Logging {
146
+ * -global: Logger
147
+ * -_factory: LoggerFactory
148
+ * -_config: LoggingConfig
149
+ * +setFactory(factory)
150
+ * +setConfig(config)
151
+ * +getConfig()
152
+ * +get()
153
+ * +verbose(msg, verbosity)
154
+ * +info(msg)
155
+ * +debug(msg)
156
+ * +silly(msg)
157
+ * +error(msg)
158
+ * +for(object, config, ...args)
159
+ * +because(reason, id)
160
+ * +theme(text, type, loggerLevel, template)
161
+ * }
88
162
  *
89
- * @class
163
+ * class MiniLogger {
164
+ * +constructor(context, conf?)
165
+ * }
166
+ *
167
+ * Logging ..> Logger : creates
168
+ * Logging ..> MiniLogger : creates by default
90
169
  */
91
170
  export declare class Logging {
92
171
  /**
93
- * @description The global logger instance.
94
- * @summary A singleton instance of VerbosityLogger used for global logging.
172
+ * @description The global logger instance
173
+ * @summary A singleton instance of Logger used for global logging
95
174
  */
96
175
  private static global?;
97
176
  /**
98
- * @description Factory function for creating logger instances.
99
- * @summary A function that creates new VerbosityLogger instances. By default, it creates a MiniLogger.
177
+ * @description Factory function for creating logger instances
178
+ * @summary A function that creates new Logger instances. By default, it creates a MiniLogger.
100
179
  */
101
180
  private static _factory;
102
181
  /**
103
- * @description Configuration for the logging system.
104
- * @summary Stores the global verbosity level and log level settings.
182
+ * @description Configuration for the logging system
183
+ * @summary Stores the global logging configuration including verbosity, log level, styling, and formatting settings
105
184
  */
106
185
  private static _config;
186
+ private constructor();
107
187
  /**
108
- * @description Private constructor to prevent instantiation.
109
- * @summary Ensures that the Logging class cannot be instantiated as it's designed to be used statically.
188
+ * @description Sets the factory function for creating logger instances
189
+ * @summary Allows customizing how logger instances are created
190
+ * @param {LoggerFactory} factory - The factory function to use for creating loggers
191
+ * @return {void}
110
192
  */
111
- private constructor();
112
193
  static setFactory(factory: LoggerFactory): void;
113
194
  /**
114
- * @description Setter for the logging configuration.
115
- * @summary Allows updating the global logging configuration.
116
- *
117
- * @param config - An object containing verbosity and log level settings.
195
+ * @description Updates the global logging configuration
196
+ * @summary Allows updating the global logging configuration with new settings
197
+ * @param {Partial<LoggingConfig>} config - The configuration options to apply
198
+ * @return {void}
118
199
  */
119
200
  static setConfig(config: Partial<LoggingConfig>): void;
201
+ /**
202
+ * @description Gets a copy of the current global logging configuration
203
+ * @summary Returns a copy of the current global logging configuration
204
+ * @return {LoggingConfig} A copy of the current configuration
205
+ */
120
206
  static getConfig(): LoggingConfig;
121
207
  /**
122
208
  * @description Retrieves or creates the global logger instance.
@@ -161,6 +247,14 @@ export declare class Logging {
161
247
  * @param msg - The message to be logged.
162
248
  */
163
249
  static error(msg: StringLike): void;
250
+ /**
251
+ * @description Creates a logger for a specific object or context
252
+ * @summary Creates a new logger instance for the given object or context using the factory function
253
+ * @param {LoggingContext} object - The object, class, or context to create a logger for
254
+ * @param {Partial<LoggingConfig>} [config] - Optional configuration to override global settings
255
+ * @param {...any} args - Additional arguments to pass to the logger factory
256
+ * @return {Logger} A new logger instance for the specified object or context
257
+ */
164
258
  static for(object: LoggingContext, config?: Partial<LoggingConfig>, ...args: any[]): Logger;
165
259
  /**
166
260
  * @description Creates a logger for a specific reason or context.
@@ -173,5 +267,38 @@ export declare class Logging {
173
267
  * @returns A new VerbosityLogger or ClassLogger instance.
174
268
  */
175
269
  static because(reason: string, id?: string): Logger;
270
+ /**
271
+ * @description Applies theme styling to text
272
+ * @summary Applies styling (colors, formatting) to text based on the theme configuration
273
+ * @param {string} text - The text to style
274
+ * @param {string} type - The type of element to style (e.g., "class", "message", "logLevel")
275
+ * @param {LogLevel} loggerLevel - The log level to use for styling
276
+ * @param {Theme} [template=DefaultTheme] - The theme to use for styling
277
+ * @return {string} The styled text
278
+ * @mermaid
279
+ * sequenceDiagram
280
+ * participant Caller
281
+ * participant Theme as Logging.theme
282
+ * participant Apply as apply function
283
+ * participant Style as styled-string-builder
284
+ *
285
+ * Caller->>Theme: theme(text, type, loggerLevel)
286
+ * Theme->>Theme: Check if styling is enabled
287
+ * alt styling disabled
288
+ * Theme-->>Caller: return original text
289
+ * else styling enabled
290
+ * Theme->>Theme: Get theme for type
291
+ * alt theme not found
292
+ * Theme-->>Caller: return original text
293
+ * else theme found
294
+ * Theme->>Theme: Determine actual theme based on log level
295
+ * Theme->>Apply: Apply each style property
296
+ * Apply->>Style: Apply colors and formatting
297
+ * Style-->>Apply: Return styled text
298
+ * Apply-->>Theme: Return styled text
299
+ * Theme-->>Caller: Return final styled text
300
+ * end
301
+ * end
302
+ */
176
303
  static theme(text: string, type: keyof Theme | keyof LogLevel, loggerLevel: LogLevel, template?: Theme): string;
177
304
  }
package/lib/types.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0eWxlcyB9IGZyb20gXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIjtcbmltcG9ydCB7IExvZ2dpbmdNb2RlLCBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgdHlwZSBTdHJpbmdMaWtlID0gc3RyaW5nIHwgeyB0b1N0cmluZzogKCkgPT4gc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdDb250ZXh0ID1cbiAgfCBzdHJpbmdcbiAgfCB7IG5ldyAoLi4uYXJnczogYW55W10pOiBhbnkgfVxuICB8ICgoLi4uYXJnczogYW55W10pID0+IGFueSk7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEludGVyZmFjZSBmb3IgYSBsb2dnZXIgd2l0aCB2ZXJib3NpdHkgbGV2ZWxzLlxuICogQHN1bW1hcnkgRGVmaW5lcyBtZXRob2RzIGZvciBsb2dnaW5nIGF0IGRpZmZlcmVudCB2ZXJib3NpdHkgbGV2ZWxzLlxuICogQGludGVyZmFjZSBMb2dnZXJcbiAqIEBtZW1iZXJPZiBAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dnZXIge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBgd2F5IHRvbyB2ZXJib3NlYCBvciBhIHNpbGx5IG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7U3RyaW5nTGlrZX0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gbG9nLlxuICAgKi9cbiAgc2lsbHkobXNnOiBTdHJpbmdMaWtlKTogdm9pZDtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGEgdmVyYm9zZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge1N0cmluZ0xpa2V9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGxvZy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHZlcmJvc2l0eSAtIFRoZSB2ZXJib3NpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UuXG4gICAqL1xuICB2ZXJib3NlKG1zZzogU3RyaW5nTGlrZSwgdmVyYm9zaXR5PzogbnVtYmVyKTogdm9pZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ3MgYW4gaW5mbyBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge1N0cmluZ0xpa2V9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGxvZy5cbiAgICovXG4gIGluZm8obXNnOiBTdHJpbmdMaWtlKTogdm9pZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ3MgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtTdHJpbmdMaWtlIHwgRXJyb3J9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGxvZy5cbiAgICovXG4gIGVycm9yKG1zZzogU3RyaW5nTGlrZSB8IEVycm9yKTogdm9pZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBkZWJ1ZyBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gbG9nLlxuICAgKi9cbiAgZGVidWcobXNnOiBTdHJpbmdMaWtlKTogdm9pZDtcblxuICBmb3IoXG4gICAgbWV0aG9kPzogc3RyaW5nIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4gYW55KSxcbiAgICBjb25maWc/OiBQYXJ0aWFsPExvZ2dpbmdDb25maWc+XG4gICk6IExvZ2dlcjtcblxuICBzZXRDb25maWcoY29uZmlnOiBQYXJ0aWFsPExvZ2dpbmdDb25maWc+KTogdm9pZDtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBmb3IgbG9nZ2luZy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGxvZyBsZXZlbCBhbmQgdmVyYm9zaXR5IGZvciBsb2dnaW5nLlxuICogQHR5cGVkZWYge09iamVjdH0gTG9nZ2luZ0NvbmZpZ1xuICogQHByb3BlcnR5IHtMb2dMZXZlbH0gbGV2ZWwgLSBUaGUgbG9nZ2luZyBsZXZlbC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB2ZXJib3NlIC0gVGhlIHZlcmJvc2l0eSBsZXZlbC5cbiAqIEBtZW1iZXJPZiBAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IHR5cGUgTG9nZ2luZ0NvbmZpZyA9IHtcbiAgbGV2ZWw6IExvZ0xldmVsO1xuICBsb2dMZXZlbD86IGJvb2xlYW47XG4gIHZlcmJvc2U6IG51bWJlcjtcbiAgbW9kZT86IExvZ2dpbmdNb2RlO1xuICBzZXBhcmF0b3I6IHN0cmluZztcbiAgc3R5bGU/OiBib29sZWFuO1xuICB0aW1lc3RhbXA/OiBib29sZWFuO1xuICB0aW1lc3RhbXBGb3JtYXQ/OiBzdHJpbmc7XG4gIGNvbnRleHQ/OiBib29sZWFuO1xuICB0aGVtZT86IFRoZW1lO1xuICBjb3JyZWxhdGlvbklkPzogc3RyaW5nIHwgbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgTG9nZ2VyRmFjdG9yeTxMIGV4dGVuZHMgTG9nZ2VyID0gTG9nZ2VyPiA9IChcbiAgb2JqZWN0OiBzdHJpbmcsXG4gIGNvbmZpZz86IFBhcnRpYWw8TG9nZ2luZ0NvbmZpZz4sXG4gIC4uLmFyZ3M6IGFueVtdXG4pID0+IEw7XG5cbi8qKlxuIC8qKlxuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSB0aGVtZSBvcHRpb24gZm9yIGNvbnNvbGUgb3V0cHV0IHN0eWxpbmcuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgZm9yIHN0eWxpbmcgYSBzcGVjaWZpYyBlbGVtZW50IGluIHRoZSBjb25zb2xlIG91dHB1dC5cbiAqIEl0IGFsbG93cyBmb3IgY3VzdG9taXphdGlvbiBvZiBmb3JlZ3JvdW5kIGNvbG9yLCBiYWNrZ3JvdW5kIGNvbG9yLCBhbmQgYWRkaXRpb25hbCBzdHlsZXMuXG4gKiBDb2xvcnMgY2FuIGJlIHNwZWNpZmllZCBhcyBhIHNpbmdsZSBudW1iZXIsIGFuIFJHQiBhcnJheSwgb3IgbGVmdCB1bmRlZmluZWQgZm9yIGRlZmF1bHQuXG4gKlxuICogQGludGVyZmFjZSBUaGVtZU9wdGlvblxuICogQG1lbWJlck9mIEBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lT3B0aW9uIHtcbiAgZmc/OiBudW1iZXIgfCBbbnVtYmVyXSB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuICBiZz86IG51bWJlciB8IFtudW1iZXJdIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG4gIHN0eWxlPzogbnVtYmVyW10gfCBba2V5b2YgdHlwZW9mIHN0eWxlc107XG59XG5cbmV4cG9ydCB0eXBlIFRoZW1lT3B0aW9uQnlMb2dMZXZlbCA9IFBhcnRpYWw8UmVjb3JkPExvZ0xldmVsLCBUaGVtZU9wdGlvbj4+O1xuXG4vKipcbiAvKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZpbmVzIHRoZSBjb2xvciB0aGVtZSBmb3IgY29uc29sZSBvdXRwdXQuXG4gKiBAc3VtbWFyeSBUaGlzIGludGVyZmFjZSBzcGVjaWZpZXMgdGhlIGNvbG9yIHNjaGVtZSBmb3IgdmFyaW91cyBlbGVtZW50cyBvZiBjb25zb2xlIG91dHB1dCxcbiAqIGluY2x1ZGluZyBzdHlsaW5nIGZvciBkaWZmZXJlbnQgbG9nIGxldmVscyBhbmQgY29tcG9uZW50cy4gSXQgdXNlcyBUaGVtZU9wdGlvbiB0b1xuICogZGVmaW5lIHRoZSBzdHlsaW5nIGZvciBlYWNoIGVsZW1lbnQsIGFsbG93aW5nIGZvciBjdXN0b21pemF0aW9uIG9mIGNvbG9ycyBhbmQgc3R5bGVzXG4gKiBmb3IgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBsb2cgb3V0cHV0LlxuICpcbiAqIEBpbnRlcmZhY2UgVGhlbWVcbiAqIEBtZW1iZXJPZiBAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZSB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3R5bGluZyBmb3IgY2xhc3MgbmFtZXMgaW4gdGhlIG91dHB1dC5cbiAgICovXG4gIGNsYXNzOiBUaGVtZU9wdGlvbiB8IFRoZW1lT3B0aW9uQnlMb2dMZXZlbDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0eWxpbmcgZm9yIHRpbWVzdGFtcHMgaW4gdGhlIG91dHB1dC5cbiAgICovXG4gIHRpbWVzdGFtcDogVGhlbWVPcHRpb24gfCBUaGVtZU9wdGlvbkJ5TG9nTGV2ZWw7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdHlsaW5nIGZvciB0aGUgbWFpbiBtZXNzYWdlIHRleHQgaW4gdGhlIG91dHB1dC5cbiAgICovXG4gIG1lc3NhZ2U6IFRoZW1lT3B0aW9uIHwgVGhlbWVPcHRpb25CeUxvZ0xldmVsO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3R5bGluZyBmb3IgbWV0aG9kIG5hbWVzIGluIHRoZSBvdXRwdXQuXG4gICAqL1xuICBtZXRob2Q6IFRoZW1lT3B0aW9uIHwgVGhlbWVPcHRpb25CeUxvZ0xldmVsO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3R5bGluZyBmb3IgaWRlbnRpZmllciBlbGVtZW50cyBpbiB0aGUgb3V0cHV0LlxuICAgKi9cbiAgaWQ6IFRoZW1lT3B0aW9uIHwgVGhlbWVPcHRpb25CeUxvZ0xldmVsO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3R5bGluZyBmb3IgaWRlbnRpZmllciBlbGVtZW50cyBpbiB0aGUgb3V0cHV0LlxuICAgKi9cbiAgc3RhY2s6IFRoZW1lT3B0aW9uO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3R5bGluZyBmb3IgZGlmZmVyZW50IGxvZyBsZXZlbHMgaW4gdGhlIG91dHB1dC5cbiAgICovXG4gIGxvZ0xldmVsOiBUaGVtZU9wdGlvbkJ5TG9nTGV2ZWw7XG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0eWxlcyB9IGZyb20gXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIjtcbmltcG9ydCB7IExvZ2dpbmdNb2RlLCBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIHR5cGUgcmVwcmVzZW50aW5nIHN0cmluZy1saWtlIHZhbHVlc1xuICogQHN1bW1hcnkgUmVwcmVzZW50cyBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gb2JqZWN0IHdpdGggYSB0b1N0cmluZyBtZXRob2QgdGhhdCByZXR1cm5zIGEgc3RyaW5nXG4gKiBAdHlwZWRlZiB7KHN0cmluZ3xPYmplY3QpfSBTdHJpbmdMaWtlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IHR5cGUgU3RyaW5nTGlrZSA9IHN0cmluZyB8IHsgdG9TdHJpbmc6ICgpID0+IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBBbnlGdW5jdGlvbiA9ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIHR5cGUgcmVwcmVzZW50aW5nIGxvZ2dpbmcgY29udGV4dFxuICogQHN1bW1hcnkgUmVwcmVzZW50cyBhIGNvbnRleHQgZm9yIGxvZ2dpbmcsIHdoaWNoIGNhbiBiZSBhIHN0cmluZywgYSBjbGFzcyBjb25zdHJ1Y3Rvciwgb3IgYSBmdW5jdGlvblxuICogQHR5cGVkZWYgeyhzdHJpbmd8RnVuY3Rpb258T2JqZWN0KX0gTG9nZ2luZ0NvbnRleHRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgdHlwZSBMb2dnaW5nQ29udGV4dCA9XG4gIHwgc3RyaW5nXG4gIHwgeyBuZXcgKC4uLmFyZ3M6IGFueVtdKTogYW55IH1cbiAgfCBBbnlGdW5jdGlvbjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBhIGxvZ2dlciB3aXRoIHZlcmJvc2l0eSBsZXZlbHMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG1ldGhvZHMgZm9yIGxvZ2dpbmcgYXQgZGlmZmVyZW50IHZlcmJvc2l0eSBsZXZlbHMuXG4gKiBAaW50ZXJmYWNlIExvZ2dlclxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyIHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGEgYHdheSB0b28gdmVyYm9zZWAgb3IgYSBzaWxseSBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge1N0cmluZ0xpa2V9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGxvZy5cbiAgICovXG4gIHNpbGx5KG1zZzogU3RyaW5nTGlrZSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIHZlcmJvc2UgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtTdHJpbmdMaWtlfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBsb2cuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2ZXJib3NpdHkgLSBUaGUgdmVyYm9zaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlLlxuICAgKi9cbiAgdmVyYm9zZShtc2c6IFN0cmluZ0xpa2UsIHZlcmJvc2l0eT86IG51bWJlcik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGFuIGluZm8gbWVzc2FnZS5cbiAgICogQHBhcmFtIHtTdHJpbmdMaWtlfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBsb2cuXG4gICAqL1xuICBpbmZvKG1zZzogU3RyaW5nTGlrZSk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7U3RyaW5nTGlrZSB8IEVycm9yfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBsb2cuXG4gICAqL1xuICBlcnJvcihtc2c6IFN0cmluZ0xpa2UgfCBFcnJvcik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGEgZGVidWcgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGxvZy5cbiAgICovXG4gIGRlYnVnKG1zZzogU3RyaW5nTGlrZSk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IGxvZ2dlciBmb3IgYSBzcGVjaWZpYyBtZXRob2Qgb3IgY29udGV4dFxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIGEgbmV3IGxvZ2dlciBpbnN0YW5jZSB0aGF0IGluY2x1ZGVzIHRoZSBzcGVjaWZpZWQgbWV0aG9kIG9yIGNvbnRleHQgaW4gaXRzIGxvZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFttZXRob2RdIC0gVGhlIG1ldGhvZCBuYW1lIG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGxvZ2dlciBmb3JcbiAgICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+fSBbY29uZmlnXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBuZXcgbG9nZ2VyXG4gICAqIEByZXR1cm4ge0xvZ2dlcn0gQSBuZXcgbG9nZ2VyIGluc3RhbmNlXG4gICAqL1xuICBmb3IoXG4gICAgbWV0aG9kPzogc3RyaW5nIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4gYW55KSxcbiAgICBjb25maWc/OiBQYXJ0aWFsPExvZ2dpbmdDb25maWc+XG4gICk6IExvZ2dlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZXMgdGhlIGxvZ2dlciBjb25maWd1cmF0aW9uXG4gICAqIEBzdW1tYXJ5IFNldHMgb3IgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIGxvZ2dlciBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz59IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYXBwbHlcbiAgICovXG4gIHNldENvbmZpZyhjb25maWc6IFBhcnRpYWw8TG9nZ2luZ0NvbmZpZz4pOiB2b2lkO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmF0aW9uIGZvciBsb2dnaW5nLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgbG9nIGxldmVsIGFuZCB2ZXJib3NpdHkgZm9yIGxvZ2dpbmcuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMb2dnaW5nQ29uZmlnXG4gKiBAcHJvcGVydHkge0xvZ0xldmVsfSBsZXZlbCAtIFRoZSBsb2dnaW5nIGxldmVsLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbbG9nTGV2ZWxdIC0gV2hldGhlciB0byBkaXNwbGF5IGxvZyBsZXZlbCBpbiBvdXRwdXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmVyYm9zZSAtIFRoZSB2ZXJib3NpdHkgbGV2ZWwuXG4gKiBAcHJvcGVydHkge0xvZ2dpbmdNb2RlfSBbbW9kZV0gLSBPdXRwdXQgZm9ybWF0IG1vZGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29udGV4dFNlcGFyYXRvciAtIFNlcGFyYXRvciBiZXR3ZWVuIGNvbnRleHQgZW50cmllcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZXBhcmF0b3IgLSBTZXBhcmF0b3IgYmV0d2VlbiBsb2cgY29tcG9uZW50cy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3N0eWxlXSAtIFdoZXRoZXIgdG8gYXBwbHkgc3R5bGluZyB0byBsb2cgb3V0cHV0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbdGltZXN0YW1wXSAtIFdoZXRoZXIgdG8gaW5jbHVkZSB0aW1lc3RhbXBzIGluIGxvZyBtZXNzYWdlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdGltZXN0YW1wRm9ybWF0XSAtIEZvcm1hdCBmb3IgdGltZXN0YW1wcy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2NvbnRleHRdIC0gV2hldGhlciB0byBpbmNsdWRlIGNvbnRleHQgaW5mb3JtYXRpb24gaW4gbG9nIG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHtUaGVtZX0gW3RoZW1lXSAtIFRoZSB0aGVtZSB0byB1c2UgZm9yIHN0eWxpbmcgbG9nIG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSBbY29ycmVsYXRpb25JZF0gLSBDb3JyZWxhdGlvbiBJRCBmb3IgdHJhY2tpbmcgcmVsYXRlZCBsb2cgbWVzc2FnZXMuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTG9nZ2luZ0NvbmZpZyA9IHtcbiAgbGV2ZWw6IExvZ0xldmVsO1xuICBsb2dMZXZlbD86IGJvb2xlYW47XG4gIHZlcmJvc2U6IG51bWJlcjtcbiAgbW9kZT86IExvZ2dpbmdNb2RlO1xuICBjb250ZXh0U2VwYXJhdG9yOiBzdHJpbmc7XG4gIHNlcGFyYXRvcjogc3RyaW5nO1xuICBzdHlsZT86IGJvb2xlYW47XG4gIHRpbWVzdGFtcD86IGJvb2xlYW47XG4gIHRpbWVzdGFtcEZvcm1hdD86IHN0cmluZztcbiAgY29udGV4dD86IGJvb2xlYW47XG4gIHRoZW1lPzogVGhlbWU7XG4gIGNvcnJlbGF0aW9uSWQ/OiBzdHJpbmcgfCBudW1iZXI7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIGZhY3RvcnkgZnVuY3Rpb24gdHlwZSBmb3IgY3JlYXRpbmcgbG9nZ2Vyc1xuICogQHN1bW1hcnkgRGVmaW5lcyBhIGZ1bmN0aW9uIHR5cGUgdGhhdCBjcmVhdGVzIGFuZCByZXR1cm5zIGEgbG9nZ2VyIGluc3RhbmNlIGZvciBhIGdpdmVuIG9iamVjdFxuICogQHRlbXBsYXRlIEwgLSBUaGUgbG9nZ2VyIHR5cGUsIGV4dGVuZGluZyB0aGUgYmFzZSBMb2dnZXIgaW50ZXJmYWNlXG4gKiBAdHlwZWRlZiB7RnVuY3Rpb259IExvZ2dlckZhY3RvcnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3QgLSBUaGUgb2JqZWN0IG9yIGNvbnRleHQgbmFtZSBmb3IgdGhlIGxvZ2dlclxuICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+fSBbY29uZmlnXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBsb2dnZXJcbiAqIEByZXR1cm4ge0x9IEEgbG9nZ2VyIGluc3RhbmNlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTG9nZ2VyRmFjdG9yeTxMIGV4dGVuZHMgTG9nZ2VyID0gTG9nZ2VyPiA9IChcbiAgb2JqZWN0OiBzdHJpbmcsXG4gIGNvbmZpZz86IFBhcnRpYWw8TG9nZ2luZ0NvbmZpZz4sXG4gIC4uLmFyZ3M6IGFueVtdXG4pID0+IEw7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSB0aGVtZSBvcHRpb24gZm9yIGNvbnNvbGUgb3V0cHV0IHN0eWxpbmcuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgZm9yIHN0eWxpbmcgYSBzcGVjaWZpYyBlbGVtZW50IGluIHRoZSBjb25zb2xlIG91dHB1dC5cbiAqIEl0IGFsbG93cyBmb3IgY3VzdG9taXphdGlvbiBvZiBmb3JlZ3JvdW5kIGNvbG9yLCBiYWNrZ3JvdW5kIGNvbG9yLCBhbmQgYWRkaXRpb25hbCBzdHlsZXMuXG4gKiBDb2xvcnMgY2FuIGJlIHNwZWNpZmllZCBhcyBhIHNpbmdsZSBudW1iZXIsIGFuIFJHQiBhcnJheSwgb3IgbGVmdCB1bmRlZmluZWQgZm9yIGRlZmF1bHQuXG4gKiBAaW50ZXJmYWNlIFRoZW1lT3B0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZU9wdGlvbiB7XG4gIGZnPzogbnVtYmVyIHwgW251bWJlcl0gfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbiAgYmc/OiBudW1iZXIgfCBbbnVtYmVyXSB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuICBzdHlsZT86IG51bWJlcltdIHwgW2tleW9mIHR5cGVvZiBzdHlsZXNdO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIHR5cGUgZm9yIHRoZW1lIG9wdGlvbnMgb3JnYW5pemVkIGJ5IGxvZyBsZXZlbFxuICogQHN1bW1hcnkgRGVmaW5lcyBhIHBhcnRpYWwgcmVjb3JkIG1hcHBpbmcgbG9nIGxldmVscyB0byB0aGVtZSBvcHRpb25zLCBhbGxvd2luZyBkaWZmZXJlbnQgc3R5bGluZyBmb3IgZGlmZmVyZW50IGxvZyBsZXZlbHNcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRoZW1lT3B0aW9uQnlMb2dMZXZlbFxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCB0eXBlIFRoZW1lT3B0aW9uQnlMb2dMZXZlbCA9IFBhcnRpYWw8UmVjb3JkPExvZ0xldmVsLCBUaGVtZU9wdGlvbj4+O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZpbmVzIHRoZSBjb2xvciB0aGVtZSBmb3IgY29uc29sZSBvdXRwdXQuXG4gKiBAc3VtbWFyeSBUaGlzIGludGVyZmFjZSBzcGVjaWZpZXMgdGhlIGNvbG9yIHNjaGVtZSBmb3IgdmFyaW91cyBlbGVtZW50cyBvZiBjb25zb2xlIG91dHB1dCxcbiAqIGluY2x1ZGluZyBzdHlsaW5nIGZvciBkaWZmZXJlbnQgbG9nIGxldmVscyBhbmQgY29tcG9uZW50cy4gSXQgdXNlcyBUaGVtZU9wdGlvbiB0b1xuICogZGVmaW5lIHRoZSBzdHlsaW5nIGZvciBlYWNoIGVsZW1lbnQsIGFsbG93aW5nIGZvciBjdXN0b21pemF0aW9uIG9mIGNvbG9ycyBhbmQgc3R5bGVzXG4gKiBmb3IgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBsb2cgb3V0cHV0LlxuICogQGludGVyZmFjZSBUaGVtZVxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWUge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0eWxpbmcgZm9yIGNsYXNzIG5hbWVzIGluIHRoZSBvdXRwdXQuXG4gICAqL1xuICBjbGFzczogVGhlbWVPcHRpb24gfCBUaGVtZU9wdGlvbkJ5TG9nTGV2ZWw7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdHlsaW5nIGZvciB0aW1lc3RhbXBzIGluIHRoZSBvdXRwdXQuXG4gICAqL1xuICB0aW1lc3RhbXA6IFRoZW1lT3B0aW9uIHwgVGhlbWVPcHRpb25CeUxvZ0xldmVsO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3R5bGluZyBmb3IgdGhlIG1haW4gbWVzc2FnZSB0ZXh0IGluIHRoZSBvdXRwdXQuXG4gICAqL1xuICBtZXNzYWdlOiBUaGVtZU9wdGlvbiB8IFRoZW1lT3B0aW9uQnlMb2dMZXZlbDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0eWxpbmcgZm9yIG1ldGhvZCBuYW1lcyBpbiB0aGUgb3V0cHV0LlxuICAgKi9cbiAgbWV0aG9kOiBUaGVtZU9wdGlvbiB8IFRoZW1lT3B0aW9uQnlMb2dMZXZlbDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0eWxpbmcgZm9yIGlkZW50aWZpZXIgZWxlbWVudHMgaW4gdGhlIG91dHB1dC5cbiAgICovXG4gIGlkOiBUaGVtZU9wdGlvbiB8IFRoZW1lT3B0aW9uQnlMb2dMZXZlbDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0eWxpbmcgZm9yIGlkZW50aWZpZXIgZWxlbWVudHMgaW4gdGhlIG91dHB1dC5cbiAgICovXG4gIHN0YWNrOiBUaGVtZU9wdGlvbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0eWxpbmcgZm9yIGRpZmZlcmVudCBsb2cgbGV2ZWxzIGluIHRoZSBvdXRwdXQuXG4gICAqL1xuICBsb2dMZXZlbDogVGhlbWVPcHRpb25CeUxvZ0xldmVsO1xufVxuIl19
package/lib/types.d.ts CHANGED
@@ -1,16 +1,29 @@
1
1
  import { styles } from "styled-string-builder";
2
2
  import { LoggingMode, LogLevel } from "./constants";
3
+ /**
4
+ * @description A type representing string-like values
5
+ * @summary Represents either a string or an object with a toString method that returns a string
6
+ * @typedef {(string|Object)} StringLike
7
+ * @memberOf module:Logging
8
+ */
3
9
  export type StringLike = string | {
4
10
  toString: () => string;
5
11
  };
12
+ export type AnyFunction = (...args: any[]) => any;
13
+ /**
14
+ * @description A type representing logging context
15
+ * @summary Represents a context for logging, which can be a string, a class constructor, or a function
16
+ * @typedef {(string|Function|Object)} LoggingContext
17
+ * @memberOf module:Logging
18
+ */
6
19
  export type LoggingContext = string | {
7
20
  new (...args: any[]): any;
8
- } | ((...args: any[]) => any);
21
+ } | AnyFunction;
9
22
  /**
10
23
  * @description Interface for a logger with verbosity levels.
11
24
  * @summary Defines methods for logging at different verbosity levels.
12
25
  * @interface Logger
13
- * @memberOf @decaf-ts/utils
26
+ * @memberOf module:Logging
14
27
  */
15
28
  export interface Logger {
16
29
  /**
@@ -39,7 +52,19 @@ export interface Logger {
39
52
  * @param {string} msg - The message to log.
40
53
  */
41
54
  debug(msg: StringLike): void;
55
+ /**
56
+ * @description Creates a new logger for a specific method or context
57
+ * @summary Returns a new logger instance that includes the specified method or context in its logs
58
+ * @param {string|Function} [method] - The method name or function to create a logger for
59
+ * @param {Partial<LoggingConfig>} [config] - Optional configuration for the new logger
60
+ * @return {Logger} A new logger instance
61
+ */
42
62
  for(method?: string | ((...args: any[]) => any), config?: Partial<LoggingConfig>): Logger;
63
+ /**
64
+ * @description Updates the logger configuration
65
+ * @summary Sets or updates the configuration options for this logger instance
66
+ * @param {Partial<LoggingConfig>} config - The configuration options to apply
67
+ */
43
68
  setConfig(config: Partial<LoggingConfig>): void;
44
69
  }
45
70
  /**
@@ -47,14 +72,25 @@ export interface Logger {
47
72
  * @summary Defines the log level and verbosity for logging.
48
73
  * @typedef {Object} LoggingConfig
49
74
  * @property {LogLevel} level - The logging level.
75
+ * @property {boolean} [logLevel] - Whether to display log level in output.
50
76
  * @property {number} verbose - The verbosity level.
51
- * @memberOf @decaf-ts/utils
77
+ * @property {LoggingMode} [mode] - Output format mode.
78
+ * @property {string} contextSeparator - Separator between context entries.
79
+ * @property {string} separator - Separator between log components.
80
+ * @property {boolean} [style] - Whether to apply styling to log output.
81
+ * @property {boolean} [timestamp] - Whether to include timestamps in log messages.
82
+ * @property {string} [timestampFormat] - Format for timestamps.
83
+ * @property {boolean} [context] - Whether to include context information in log messages.
84
+ * @property {Theme} [theme] - The theme to use for styling log messages.
85
+ * @property {string|number} [correlationId] - Correlation ID for tracking related log messages.
86
+ * @memberOf module:Logging
52
87
  */
53
88
  export type LoggingConfig = {
54
89
  level: LogLevel;
55
90
  logLevel?: boolean;
56
91
  verbose: number;
57
92
  mode?: LoggingMode;
93
+ contextSeparator: string;
58
94
  separator: string;
59
95
  style?: boolean;
60
96
  timestamp?: boolean;
@@ -63,33 +99,45 @@ export type LoggingConfig = {
63
99
  theme?: Theme;
64
100
  correlationId?: string | number;
65
101
  };
102
+ /**
103
+ * @description A factory function type for creating loggers
104
+ * @summary Defines a function type that creates and returns a logger instance for a given object
105
+ * @template L - The logger type, extending the base Logger interface
106
+ * @typedef {Function} LoggerFactory
107
+ * @param {string} object - The object or context name for the logger
108
+ * @param {Partial<LoggingConfig>} [config] - Optional configuration for the logger
109
+ * @return {L} A logger instance
110
+ * @memberOf module:Logging
111
+ */
66
112
  export type LoggerFactory<L extends Logger = Logger> = (object: string, config?: Partial<LoggingConfig>, ...args: any[]) => L;
67
113
  /**
68
- /**
69
114
  * @description Represents a theme option for console output styling.
70
115
  * @summary Defines the structure for styling a specific element in the console output.
71
116
  * It allows for customization of foreground color, background color, and additional styles.
72
117
  * Colors can be specified as a single number, an RGB array, or left undefined for default.
73
- *
74
118
  * @interface ThemeOption
75
- * @memberOf @decaf-ts/utils
119
+ * @memberOf module:Logging
76
120
  */
77
121
  export interface ThemeOption {
78
122
  fg?: number | [number] | [number, number, number];
79
123
  bg?: number | [number] | [number, number, number];
80
124
  style?: number[] | [keyof typeof styles];
81
125
  }
126
+ /**
127
+ * @description A type for theme options organized by log level
128
+ * @summary Defines a partial record mapping log levels to theme options, allowing different styling for different log levels
129
+ * @typedef {Object} ThemeOptionByLogLevel
130
+ * @memberOf module:Logging
131
+ */
82
132
  export type ThemeOptionByLogLevel = Partial<Record<LogLevel, ThemeOption>>;
83
133
  /**
84
- /**
85
134
  * @description Defines the color theme for console output.
86
135
  * @summary This interface specifies the color scheme for various elements of console output,
87
136
  * including styling for different log levels and components. It uses ThemeOption to
88
137
  * define the styling for each element, allowing for customization of colors and styles
89
138
  * for different parts of the log output.
90
- *
91
139
  * @interface Theme
92
- * @memberOf @decaf-ts/utils
140
+ * @memberOf module:Logging
93
141
  */
94
142
  export interface Theme {
95
143
  /**
File without changes
File without changes
@@ -6,6 +6,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.WinstonFactory = exports.WinstonLogger = void 0;
7
7
  const winston_1 = __importDefault(require("winston"));
8
8
  const logging_1 = require("./../logging.cjs");
9
+ /**
10
+ * @description A logger implementation using Winston
11
+ * @summary WinstonLogger extends MiniLogger to provide logging functionality using the Winston library.
12
+ * It configures Winston with appropriate transports and formats based on the logging configuration.
13
+ * @param {string} cont - The context (typically class name) this logger is associated with
14
+ * @param {Partial<LoggingConfig>} [conf] - Optional configuration to override global settings
15
+ * @param {Transport[]|Transport} [transports] - Winston transports to use for logging
16
+ * @class WinstonLogger
17
+ * @example
18
+ * // Create a Winston logger for a class
19
+ * const logger = new WinstonLogger('MyClass');
20
+ *
21
+ * // Log messages at different levels
22
+ * logger.info('Application started');
23
+ * logger.error(new Error('Something went wrong'));
24
+ *
25
+ * // Create a child logger for a specific method
26
+ * const methodLogger = logger.for('myMethod');
27
+ * methodLogger.debug('Processing data...');
28
+ */
9
29
  class WinstonLogger extends logging_1.MiniLogger {
10
30
  constructor(cont, conf, transports) {
11
31
  super(cont, conf);
@@ -36,6 +56,14 @@ class WinstonLogger extends logging_1.MiniLogger {
36
56
  };
37
57
  this.winston = winston_1.default.createLogger(winstonConfig);
38
58
  }
59
+ /**
60
+ * @description Logs a message with the specified log level using Winston
61
+ * @summary Overrides the base log method to use Winston for logging
62
+ * @param {LogLevel} level - The log level of the message
63
+ * @param {StringLike | Error} msg - The message to be logged or an Error object
64
+ * @param {string} [stack] - Optional stack trace to include in the log
65
+ * @return {void}
66
+ */
39
67
  log(level, msg, stack) {
40
68
  const logData = {
41
69
  level: level,
@@ -47,6 +75,17 @@ class WinstonLogger extends logging_1.MiniLogger {
47
75
  }
48
76
  }
49
77
  exports.WinstonLogger = WinstonLogger;
78
+ /**
79
+ * @description Factory function for creating Winston loggers
80
+ * @summary A LoggerFactory implementation that creates WinstonLogger instances
81
+ * @const WinstonFactory
82
+ * @type {LoggerFactory}
83
+ * @param {string} context - The context (typically class name) for the logger
84
+ * @param {Partial<LoggingConfig>} [conf] - Optional configuration to override global settings
85
+ * @param {...any} args - Additional arguments to pass to the WinstonLogger constructor
86
+ * @return {WinstonLogger} A new WinstonLogger instance
87
+ * @memberOf module:Logging
88
+ */
50
89
  const WinstonFactory = (context, conf, ...args) => new WinstonLogger(context, conf, ...args);
51
90
  exports.WinstonFactory = WinstonFactory;
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luc3Rvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aW5zdG9uL3dpbnN0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsc0RBQTJEO0FBRzNELDhDQUFpRDtBQUdqRCxNQUFhLGFBQWMsU0FBUSxvQkFBVTtJQUczQyxZQUNFLElBQVksRUFDWixJQUE2QixFQUNuQixVQUFvQztRQUU5QyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRlIsZUFBVSxHQUFWLFVBQVUsQ0FBMEI7UUFHOUMsTUFBTSxNQUFNLEdBQWtCLE1BQU0sQ0FBQyxNQUFNLENBQ3pDLEVBQUUsRUFDRixJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFDZixpQkFBTyxDQUFDLFNBQVMsRUFBRSxDQUNwQixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRTtZQUM3QyxLQUFLLEVBQUUsS0FBSztZQUNaLFFBQVEsRUFBRSxLQUFLO1lBQ2YsU0FBUyxFQUFFLEtBQUs7WUFDaEIsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7UUFDSCxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUVyRSxNQUFNLE9BQU8sR0FBRyxDQUFDLGlCQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLGlCQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxTQUFTO1lBQ1gsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksS0FBSztZQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUk7WUFDbkMsSUFBSSxpQkFBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQzdCLE1BQU0sRUFBRSxpQkFBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUM7YUFDM0MsQ0FBQztTQUNILENBQUM7UUFFRixNQUFNLGFBQWEsR0FBa0I7WUFDbkMsS0FBSyxFQUFFLEtBQUs7WUFDWixXQUFXLEVBQUUsT0FBTztZQUNwQixNQUFNLEVBQUUsaUJBQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQzdCLFVBQVUsRUFBRSxVQUFVO1NBQ3ZCLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxHQUFHLGlCQUFPLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFa0IsR0FBRyxDQUNwQixLQUFlLEVBQ2YsR0FBdUIsRUFDdkIsS0FBYztRQUVkLE1BQU0sT0FBTyxHQUFhO1lBQ3hCLEtBQUssRUFBRSxLQUFLO1lBQ1osT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUM7U0FDM0MsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDOUIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBdkRELHNDQXVEQztBQUVNLE1BQU0sY0FBYyxHQUFrQixDQUMzQyxPQUFlLEVBQ2YsSUFBNkIsRUFDN0IsR0FBRyxJQUFXLEVBQ2QsRUFBRSxDQUFDLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUpsQyxRQUFBLGNBQWMsa0JBSW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHdpbnN0b24sIHsgTG9nRW50cnksIExvZ2dlck9wdGlvbnMgfSBmcm9tIFwid2luc3RvblwiO1xuaW1wb3J0IFRyYW5zcG9ydCBmcm9tIFwid2luc3Rvbi10cmFuc3BvcnRcIjtcbmltcG9ydCB7IExvZ2dlciwgTG9nZ2VyRmFjdG9yeSwgTG9nZ2luZ0NvbmZpZywgU3RyaW5nTGlrZSB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgTG9nZ2luZywgTWluaUxvZ2dlciB9IGZyb20gXCIuLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNsYXNzIFdpbnN0b25Mb2dnZXIgZXh0ZW5kcyBNaW5pTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyIHtcbiAgcHJvdGVjdGVkIHdpbnN0b246IHdpbnN0b24uTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbnQ6IHN0cmluZyxcbiAgICBjb25mPzogUGFydGlhbDxMb2dnaW5nQ29uZmlnPixcbiAgICBwcm90ZWN0ZWQgdHJhbnNwb3J0cz86IFRyYW5zcG9ydFtdIHwgVHJhbnNwb3J0XG4gICkge1xuICAgIHN1cGVyKGNvbnQsIGNvbmYpO1xuICAgIGNvbnN0IGNvbmZpZzogTG9nZ2luZ0NvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHRoaXMuY29uZiB8fCB7fSxcbiAgICAgIExvZ2dpbmcuZ2V0Q29uZmlnKClcbiAgICApO1xuICAgIHRoaXMuY29uZiA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29uZiB8fCB7fSwge1xuICAgICAgc3R5bGU6IGZhbHNlLFxuICAgICAgbG9nTGV2ZWw6IGZhbHNlLFxuICAgICAgdGltZXN0YW1wOiBmYWxzZSxcbiAgICAgIGNvbnRleHQ6IGZhbHNlLFxuICAgIH0pO1xuICAgIGNvbnN0IHsgbGV2ZWwsIGNvbnRleHQsIHN0eWxlLCB0aW1lc3RhbXAsIHRpbWVzdGFtcEZvcm1hdCB9ID0gY29uZmlnO1xuXG4gICAgY29uc3QgZm9ybWF0cyA9IFt3aW5zdG9uLmZvcm1hdC5zcGxhdCgpLCB3aW5zdG9uLmZvcm1hdC5zaW1wbGUoKV07XG4gICAgaWYgKHRpbWVzdGFtcClcbiAgICAgIGZvcm1hdHMudW5zaGlmdCh3aW5zdG9uLmZvcm1hdC50aW1lc3RhbXAoeyBmb3JtYXQ6IHRpbWVzdGFtcEZvcm1hdCB9KSk7XG4gICAgaWYgKHN0eWxlKSBmb3JtYXRzLnVuc2hpZnQod2luc3Rvbi5mb3JtYXQuY29sb3JpemUoKSk7XG5cbiAgICB0aGlzLnRyYW5zcG9ydHMgPSB0aGlzLnRyYW5zcG9ydHMgfHwgW1xuICAgICAgbmV3IHdpbnN0b24udHJhbnNwb3J0cy5Db25zb2xlKHtcbiAgICAgICAgZm9ybWF0OiB3aW5zdG9uLmZvcm1hdC5jb21iaW5lKC4uLmZvcm1hdHMpLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIGNvbnN0IHdpbnN0b25Db25maWc6IExvZ2dlck9wdGlvbnMgPSB7XG4gICAgICBsZXZlbDogbGV2ZWwsXG4gICAgICBkZWZhdWx0TWV0YTogY29udGV4dCxcbiAgICAgIGZvcm1hdDogd2luc3Rvbi5mb3JtYXQuanNvbigpLFxuICAgICAgdHJhbnNwb3J0czogdHJhbnNwb3J0cyxcbiAgICB9O1xuICAgIHRoaXMud2luc3RvbiA9IHdpbnN0b24uY3JlYXRlTG9nZ2VyKHdpbnN0b25Db25maWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGxvZyhcbiAgICBsZXZlbDogTG9nTGV2ZWwsXG4gICAgbXNnOiBTdHJpbmdMaWtlIHwgRXJyb3IsXG4gICAgc3RhY2s/OiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgbG9nRGF0YTogTG9nRW50cnkgPSB7XG4gICAgICBsZXZlbDogbGV2ZWwsXG4gICAgICBtZXNzYWdlOiB0aGlzLmNyZWF0ZUxvZyhsZXZlbCwgbXNnLCBzdGFjayksXG4gICAgfTtcbiAgICBpZiAodGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpKVxuICAgICAgbG9nRGF0YVtcImNvcnJlbGF0aW9uSWRcIl0gPSB0aGlzLmNvbmZpZyhcImNvcnJlbGF0aW9uSWRcIik7XG4gICAgdGhpcy53aW5zdG9uLmxvZyhsb2dEYXRhKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgV2luc3RvbkZhY3Rvcnk6IExvZ2dlckZhY3RvcnkgPSAoXG4gIGNvbnRleHQ6IHN0cmluZyxcbiAgY29uZj86IFBhcnRpYWw8TG9nZ2luZ0NvbmZpZz4sXG4gIC4uLmFyZ3M6IGFueVtdXG4pID0+IG5ldyBXaW5zdG9uTG9nZ2VyKGNvbnRleHQsIGNvbmYsIC4uLmFyZ3MpO1xuIl19
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luc3Rvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aW5zdG9uL3dpbnN0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsc0RBQTJEO0FBRzNELDhDQUFpRDtBQUdqRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQWEsYUFBYyxTQUFRLG9CQUFVO0lBRzNDLFlBQ0UsSUFBWSxFQUNaLElBQTZCLEVBQ25CLFVBQW9DO1FBRTlDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFGUixlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUc5QyxNQUFNLE1BQU0sR0FBa0IsTUFBTSxDQUFDLE1BQU0sQ0FDekMsRUFBRSxFQUNGLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUNmLGlCQUFPLENBQUMsU0FBUyxFQUFFLENBQ3BCLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFO1lBQzdDLEtBQUssRUFBRSxLQUFLO1lBQ1osUUFBUSxFQUFFLEtBQUs7WUFDZixTQUFTLEVBQUUsS0FBSztZQUNoQixPQUFPLEVBQUUsS0FBSztTQUNmLENBQUMsQ0FBQztRQUNILE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBRXJFLE1BQU0sT0FBTyxHQUFHLENBQUMsaUJBQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsaUJBQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNsRSxJQUFJLFNBQVM7WUFDWCxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxLQUFLO1lBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRXRELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSTtZQUNuQyxJQUFJLGlCQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDN0IsTUFBTSxFQUFFLGlCQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQzthQUMzQyxDQUFDO1NBQ0gsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFrQjtZQUNuQyxLQUFLLEVBQUUsS0FBSztZQUNaLFdBQVcsRUFBRSxPQUFPO1lBQ3BCLE1BQU0sRUFBRSxpQkFBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDN0IsVUFBVSxFQUFFLFVBQVU7U0FDdkIsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsaUJBQU8sQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDZ0IsR0FBRyxDQUNwQixLQUFlLEVBQ2YsR0FBdUIsRUFDdkIsS0FBYztRQUVkLE1BQU0sT0FBTyxHQUFhO1lBQ3hCLEtBQUssRUFBRSxLQUFLO1lBQ1osT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUM7U0FDM0MsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDOUIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBL0RELHNDQStEQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSSxNQUFNLGNBQWMsR0FBa0IsQ0FDM0MsT0FBZSxFQUNmLElBQTZCLEVBQzdCLEdBQUcsSUFBVyxFQUNkLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFKbEMsUUFBQSxjQUFjLGtCQUlvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB3aW5zdG9uLCB7IExvZ0VudHJ5LCBMb2dnZXJPcHRpb25zIH0gZnJvbSBcIndpbnN0b25cIjtcbmltcG9ydCBUcmFuc3BvcnQgZnJvbSBcIndpbnN0b24tdHJhbnNwb3J0XCI7XG5pbXBvcnQgeyBMb2dnZXIsIExvZ2dlckZhY3RvcnksIExvZ2dpbmdDb25maWcsIFN0cmluZ0xpa2UgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IExvZ2dpbmcsIE1pbmlMb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgTG9nTGV2ZWwgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgbG9nZ2VyIGltcGxlbWVudGF0aW9uIHVzaW5nIFdpbnN0b25cbiAqIEBzdW1tYXJ5IFdpbnN0b25Mb2dnZXIgZXh0ZW5kcyBNaW5pTG9nZ2VyIHRvIHByb3ZpZGUgbG9nZ2luZyBmdW5jdGlvbmFsaXR5IHVzaW5nIHRoZSBXaW5zdG9uIGxpYnJhcnkuXG4gKiBJdCBjb25maWd1cmVzIFdpbnN0b24gd2l0aCBhcHByb3ByaWF0ZSB0cmFuc3BvcnRzIGFuZCBmb3JtYXRzIGJhc2VkIG9uIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udCAtIFRoZSBjb250ZXh0ICh0eXBpY2FsbHkgY2xhc3MgbmFtZSkgdGhpcyBsb2dnZXIgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz59IFtjb25mXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdG8gb3ZlcnJpZGUgZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0ge1RyYW5zcG9ydFtdfFRyYW5zcG9ydH0gW3RyYW5zcG9ydHNdIC0gV2luc3RvbiB0cmFuc3BvcnRzIHRvIHVzZSBmb3IgbG9nZ2luZ1xuICogQGNsYXNzIFdpbnN0b25Mb2dnZXJcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBXaW5zdG9uIGxvZ2dlciBmb3IgYSBjbGFzc1xuICogY29uc3QgbG9nZ2VyID0gbmV3IFdpbnN0b25Mb2dnZXIoJ015Q2xhc3MnKTtcbiAqXG4gKiAvLyBMb2cgbWVzc2FnZXMgYXQgZGlmZmVyZW50IGxldmVsc1xuICogbG9nZ2VyLmluZm8oJ0FwcGxpY2F0aW9uIHN0YXJ0ZWQnKTtcbiAqIGxvZ2dlci5lcnJvcihuZXcgRXJyb3IoJ1NvbWV0aGluZyB3ZW50IHdyb25nJykpO1xuICpcbiAqIC8vIENyZWF0ZSBhIGNoaWxkIGxvZ2dlciBmb3IgYSBzcGVjaWZpYyBtZXRob2RcbiAqIGNvbnN0IG1ldGhvZExvZ2dlciA9IGxvZ2dlci5mb3IoJ215TWV0aG9kJyk7XG4gKiBtZXRob2RMb2dnZXIuZGVidWcoJ1Byb2Nlc3NpbmcgZGF0YS4uLicpO1xuICovXG5leHBvcnQgY2xhc3MgV2luc3RvbkxvZ2dlciBleHRlbmRzIE1pbmlMb2dnZXIgaW1wbGVtZW50cyBMb2dnZXIge1xuICBwcm90ZWN0ZWQgd2luc3Rvbjogd2luc3Rvbi5Mb2dnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY29udDogc3RyaW5nLFxuICAgIGNvbmY/OiBQYXJ0aWFsPExvZ2dpbmdDb25maWc+LFxuICAgIHByb3RlY3RlZCB0cmFuc3BvcnRzPzogVHJhbnNwb3J0W10gfCBUcmFuc3BvcnRcbiAgKSB7XG4gICAgc3VwZXIoY29udCwgY29uZik7XG4gICAgY29uc3QgY29uZmlnOiBMb2dnaW5nQ29uZmlnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgdGhpcy5jb25mIHx8IHt9LFxuICAgICAgTG9nZ2luZy5nZXRDb25maWcoKVxuICAgICk7XG4gICAgdGhpcy5jb25mID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb25mIHx8IHt9LCB7XG4gICAgICBzdHlsZTogZmFsc2UsXG4gICAgICBsb2dMZXZlbDogZmFsc2UsXG4gICAgICB0aW1lc3RhbXA6IGZhbHNlLFxuICAgICAgY29udGV4dDogZmFsc2UsXG4gICAgfSk7XG4gICAgY29uc3QgeyBsZXZlbCwgY29udGV4dCwgc3R5bGUsIHRpbWVzdGFtcCwgdGltZXN0YW1wRm9ybWF0IH0gPSBjb25maWc7XG5cbiAgICBjb25zdCBmb3JtYXRzID0gW3dpbnN0b24uZm9ybWF0LnNwbGF0KCksIHdpbnN0b24uZm9ybWF0LnNpbXBsZSgpXTtcbiAgICBpZiAodGltZXN0YW1wKVxuICAgICAgZm9ybWF0cy51bnNoaWZ0KHdpbnN0b24uZm9ybWF0LnRpbWVzdGFtcCh7IGZvcm1hdDogdGltZXN0YW1wRm9ybWF0IH0pKTtcbiAgICBpZiAoc3R5bGUpIGZvcm1hdHMudW5zaGlmdCh3aW5zdG9uLmZvcm1hdC5jb2xvcml6ZSgpKTtcblxuICAgIHRoaXMudHJhbnNwb3J0cyA9IHRoaXMudHJhbnNwb3J0cyB8fCBbXG4gICAgICBuZXcgd2luc3Rvbi50cmFuc3BvcnRzLkNvbnNvbGUoe1xuICAgICAgICBmb3JtYXQ6IHdpbnN0b24uZm9ybWF0LmNvbWJpbmUoLi4uZm9ybWF0cyksXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgY29uc3Qgd2luc3RvbkNvbmZpZzogTG9nZ2VyT3B0aW9ucyA9IHtcbiAgICAgIGxldmVsOiBsZXZlbCxcbiAgICAgIGRlZmF1bHRNZXRhOiBjb250ZXh0LFxuICAgICAgZm9ybWF0OiB3aW5zdG9uLmZvcm1hdC5qc29uKCksXG4gICAgICB0cmFuc3BvcnRzOiB0cmFuc3BvcnRzLFxuICAgIH07XG4gICAgdGhpcy53aW5zdG9uID0gd2luc3Rvbi5jcmVhdGVMb2dnZXIod2luc3RvbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIHdpdGggdGhlIHNwZWNpZmllZCBsb2cgbGV2ZWwgdXNpbmcgV2luc3RvblxuICAgKiBAc3VtbWFyeSBPdmVycmlkZXMgdGhlIGJhc2UgbG9nIG1ldGhvZCB0byB1c2UgV2luc3RvbiBmb3IgbG9nZ2luZ1xuICAgKiBAcGFyYW0ge0xvZ0xldmVsfSBsZXZlbCAtIFRoZSBsb2cgbGV2ZWwgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtTdHJpbmdMaWtlIHwgRXJyb3J9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZCBvciBhbiBFcnJvciBvYmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdGFja10gLSBPcHRpb25hbCBzdGFjayB0cmFjZSB0byBpbmNsdWRlIGluIHRoZSBsb2dcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBsb2coXG4gICAgbGV2ZWw6IExvZ0xldmVsLFxuICAgIG1zZzogU3RyaW5nTGlrZSB8IEVycm9yLFxuICAgIHN0YWNrPzogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IGxvZ0RhdGE6IExvZ0VudHJ5ID0ge1xuICAgICAgbGV2ZWw6IGxldmVsLFxuICAgICAgbWVzc2FnZTogdGhpcy5jcmVhdGVMb2cobGV2ZWwsIG1zZywgc3RhY2spLFxuICAgIH07XG4gICAgaWYgKHRoaXMuY29uZmlnKFwiY29ycmVsYXRpb25JZFwiKSlcbiAgICAgIGxvZ0RhdGFbXCJjb3JyZWxhdGlvbklkXCJdID0gdGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpO1xuICAgIHRoaXMud2luc3Rvbi5sb2cobG9nRGF0YSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgV2luc3RvbiBsb2dnZXJzXG4gKiBAc3VtbWFyeSBBIExvZ2dlckZhY3RvcnkgaW1wbGVtZW50YXRpb24gdGhhdCBjcmVhdGVzIFdpbnN0b25Mb2dnZXIgaW5zdGFuY2VzXG4gKiBAY29uc3QgV2luc3RvbkZhY3RvcnlcbiAqIEB0eXBlIHtMb2dnZXJGYWN0b3J5fVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHQgLSBUaGUgY29udGV4dCAodHlwaWNhbGx5IGNsYXNzIG5hbWUpIGZvciB0aGUgbG9nZ2VyXG4gKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz59IFtjb25mXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdG8gb3ZlcnJpZGUgZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0gey4uLmFueX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIFdpbnN0b25Mb2dnZXIgY29uc3RydWN0b3JcbiAqIEByZXR1cm4ge1dpbnN0b25Mb2dnZXJ9IEEgbmV3IFdpbnN0b25Mb2dnZXIgaW5zdGFuY2VcbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgY29uc3QgV2luc3RvbkZhY3Rvcnk6IExvZ2dlckZhY3RvcnkgPSAoXG4gIGNvbnRleHQ6IHN0cmluZyxcbiAgY29uZj86IFBhcnRpYWw8TG9nZ2luZ0NvbmZpZz4sXG4gIC4uLmFyZ3M6IGFueVtdXG4pID0+IG5ldyBXaW5zdG9uTG9nZ2VyKGNvbnRleHQsIGNvbmYsIC4uLmFyZ3MpO1xuIl19
@@ -3,10 +3,49 @@ import Transport from "winston-transport";
3
3
  import { Logger, LoggerFactory, LoggingConfig, StringLike } from "../types";
4
4
  import { MiniLogger } from "../logging";
5
5
  import { LogLevel } from "../constants";
6
+ /**
7
+ * @description A logger implementation using Winston
8
+ * @summary WinstonLogger extends MiniLogger to provide logging functionality using the Winston library.
9
+ * It configures Winston with appropriate transports and formats based on the logging configuration.
10
+ * @param {string} cont - The context (typically class name) this logger is associated with
11
+ * @param {Partial<LoggingConfig>} [conf] - Optional configuration to override global settings
12
+ * @param {Transport[]|Transport} [transports] - Winston transports to use for logging
13
+ * @class WinstonLogger
14
+ * @example
15
+ * // Create a Winston logger for a class
16
+ * const logger = new WinstonLogger('MyClass');
17
+ *
18
+ * // Log messages at different levels
19
+ * logger.info('Application started');
20
+ * logger.error(new Error('Something went wrong'));
21
+ *
22
+ * // Create a child logger for a specific method
23
+ * const methodLogger = logger.for('myMethod');
24
+ * methodLogger.debug('Processing data...');
25
+ */
6
26
  export declare class WinstonLogger extends MiniLogger implements Logger {
7
27
  protected transports?: (Transport[] | Transport) | undefined;
8
28
  protected winston: winston.Logger;
9
29
  constructor(cont: string, conf?: Partial<LoggingConfig>, transports?: (Transport[] | Transport) | undefined);
30
+ /**
31
+ * @description Logs a message with the specified log level using Winston
32
+ * @summary Overrides the base log method to use Winston for logging
33
+ * @param {LogLevel} level - The log level of the message
34
+ * @param {StringLike | Error} msg - The message to be logged or an Error object
35
+ * @param {string} [stack] - Optional stack trace to include in the log
36
+ * @return {void}
37
+ */
10
38
  protected log(level: LogLevel, msg: StringLike | Error, stack?: string): void;
11
39
  }
40
+ /**
41
+ * @description Factory function for creating Winston loggers
42
+ * @summary A LoggerFactory implementation that creates WinstonLogger instances
43
+ * @const WinstonFactory
44
+ * @type {LoggerFactory}
45
+ * @param {string} context - The context (typically class name) for the logger
46
+ * @param {Partial<LoggingConfig>} [conf] - Optional configuration to override global settings
47
+ * @param {...any} args - Additional arguments to pass to the WinstonLogger constructor
48
+ * @return {WinstonLogger} A new WinstonLogger instance
49
+ * @memberOf module:Logging
50
+ */
12
51
  export declare const WinstonFactory: LoggerFactory;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decaf-ts/logging",
3
- "version": "0.2.3",
3
+ "version": "0.3.0",
4
4
  "description": "simple winston inspired wrapper for cross lib logging",
5
5
  "type": "module",
6
6
  "exports": {