@ncfour-us/logging 0.0.24 → 0.0.28
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 +8 -0
- package/lib/logger-types.d.ts +117 -0
- package/lib/logger-types.js +1 -1
- package/lib/logger.d.ts +8 -1
- package/lib/logger.js +8 -1
- package/package.json +35 -31
- package/lib/logger-factory.d.ts +0 -4
- package/lib/logger-factory.js +0 -8
package/README.md
CHANGED
|
@@ -24,6 +24,7 @@ This project implements a simple logger and a proxy for winston logger.
|
|
|
24
24
|
|
|
25
25
|
- [Installation](#installation)
|
|
26
26
|
- [Getting Started](#getting-started)
|
|
27
|
+
- [API Documentation](#api-documentation)
|
|
27
28
|
- [Contributing](#contributing)
|
|
28
29
|
- [License](#license)
|
|
29
30
|
- [Authors](#authors)
|
|
@@ -39,6 +40,9 @@ pnpm add @ncfour-us/logging
|
|
|
39
40
|
|
|
40
41
|
## Getting Started
|
|
41
42
|
|
|
43
|
+
> More detailed documentation for this project is found at
|
|
44
|
+
> [@ncfour-us/logging](https://ncfour-us.github.io/logging/).
|
|
45
|
+
|
|
42
46
|
The package exports an `ILogger` interface along with a `createLogger()` function.
|
|
43
47
|
|
|
44
48
|
The return value from `createLogger()` is a `ILogger` which can then be used
|
|
@@ -54,6 +58,10 @@ import { ILogger, createLogger } from '@ncfour-us/logging';
|
|
|
54
58
|
const myLogger: ILogger = createLogger('simple');
|
|
55
59
|
```
|
|
56
60
|
|
|
61
|
+
## API Documentation
|
|
62
|
+
|
|
63
|
+
The API is documented at the [API documentation](./docs/api/index.md) page.
|
|
64
|
+
|
|
57
65
|
## Contributing
|
|
58
66
|
|
|
59
67
|
Fork this repository and submit a PR.
|
package/lib/logger-types.d.ts
CHANGED
|
@@ -1,29 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log level setting
|
|
3
|
+
*/
|
|
1
4
|
export type LoggerLevel = 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace';
|
|
5
|
+
/**
|
|
6
|
+
* Logger type for {@link createLogger} to create
|
|
7
|
+
*/
|
|
2
8
|
export type LoggerType = 'simple' | 'winston';
|
|
9
|
+
/**
|
|
10
|
+
* Options for creating/getting a logger. Used when calling `createLogger()`.
|
|
11
|
+
*
|
|
12
|
+
* @see {@link createLogger}
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
3
15
|
export interface LoggerProps {
|
|
16
|
+
/**
|
|
17
|
+
* The name for the logger
|
|
18
|
+
* @default 'default' (suppressed from log records)
|
|
19
|
+
*/
|
|
4
20
|
name?: string;
|
|
21
|
+
/**
|
|
22
|
+
* The logging level to use, (default: `'error'`)
|
|
23
|
+
* @default 'error'
|
|
24
|
+
*/
|
|
5
25
|
level?: LoggerLevel;
|
|
26
|
+
/**
|
|
27
|
+
* Use JSON or text output (default: `true`)
|
|
28
|
+
* @default true
|
|
29
|
+
*/
|
|
6
30
|
json?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Use color in text output (default: `false`)
|
|
33
|
+
* @default false
|
|
34
|
+
*/
|
|
7
35
|
color?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Suppress log output, regardless of level (default: `false`)
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
8
40
|
silent?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Include timestamps in text output (default: `true`)
|
|
43
|
+
* @default true
|
|
44
|
+
*/
|
|
9
45
|
timestamp?: boolean;
|
|
10
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Options for updating a logger configuration. Used when calling `ILogger.setLoggerProps()`.
|
|
49
|
+
* @see {@link ILogger.setLoggerProps}
|
|
50
|
+
*/
|
|
11
51
|
export interface LoggerSetLoggerProps {
|
|
52
|
+
/**
|
|
53
|
+
* The logging level to use, (default: `'error'`)
|
|
54
|
+
* @default 'error'
|
|
55
|
+
*/
|
|
12
56
|
level?: LoggerLevel;
|
|
57
|
+
/**
|
|
58
|
+
* Use JSON or text output (default: `true`)
|
|
59
|
+
* @default true
|
|
60
|
+
*/
|
|
13
61
|
json?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Use color in text output (default: `false`)
|
|
64
|
+
* @default false
|
|
65
|
+
*/
|
|
14
66
|
color?: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Suppress log output, regardless of level (default: `false`)
|
|
69
|
+
* @default false
|
|
70
|
+
*/
|
|
15
71
|
silent?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Include timestamps in text output (default: `true`)
|
|
74
|
+
* @default true
|
|
75
|
+
*/
|
|
16
76
|
timestamp?: boolean;
|
|
17
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Interface which represents a logger instance. Returned from call to `createLogger()`.
|
|
80
|
+
*/
|
|
18
81
|
export interface ILogger {
|
|
82
|
+
/**
|
|
83
|
+
* Return the name of the logger.
|
|
84
|
+
*/
|
|
19
85
|
getName(): string;
|
|
86
|
+
/**
|
|
87
|
+
* Return the logger type.
|
|
88
|
+
*/
|
|
20
89
|
getType(): LoggerType;
|
|
90
|
+
/**
|
|
91
|
+
* Update the logger configuration.
|
|
92
|
+
*
|
|
93
|
+
* @param props Adjustments to the logger configuration @see {@link LoggerSetLoggerProps}
|
|
94
|
+
*/
|
|
21
95
|
setLoggerProps(props: LoggerSetLoggerProps): void;
|
|
96
|
+
/**
|
|
97
|
+
* Create a log message with the specified log level.
|
|
98
|
+
*
|
|
99
|
+
* @param level Log level for this log message
|
|
100
|
+
* @param message text of the log message
|
|
101
|
+
* @param rest additional information to log (this will be appended as a JSON string to the message)
|
|
102
|
+
*/
|
|
22
103
|
log(level: LoggerLevel, message: string, ...rest: (string | number | boolean | object)[]): void;
|
|
104
|
+
/**
|
|
105
|
+
* Create a log message with log level **fatal**
|
|
106
|
+
*
|
|
107
|
+
* @param message text of the log message
|
|
108
|
+
* @param rest additional information to log (this will be appended as a JSON string to the message)
|
|
109
|
+
*/
|
|
23
110
|
fatal(message: string, ...rest: (string | number | boolean | object)[]): void;
|
|
111
|
+
/**
|
|
112
|
+
* Create a log message with log level **error**
|
|
113
|
+
*
|
|
114
|
+
* @param message text of the log message
|
|
115
|
+
* @param rest additional information to log (this will be appended as a JSON string to the message)
|
|
116
|
+
*/
|
|
24
117
|
error(message: string, ...rest: (string | number | boolean | object)[]): void;
|
|
118
|
+
/**
|
|
119
|
+
* Create a log message with log level **warn**
|
|
120
|
+
*
|
|
121
|
+
* @param message text of the log message
|
|
122
|
+
* @param rest additional information to log (this will be appended as a JSON string to the message)
|
|
123
|
+
*/
|
|
25
124
|
warn(message: string, ...rest: (string | number | boolean | object)[]): void;
|
|
125
|
+
/**
|
|
126
|
+
* Create a log message with log level **info**
|
|
127
|
+
*
|
|
128
|
+
* @param message text of the log message
|
|
129
|
+
* @param rest additional information to log (this will be appended as a JSON string to the message)
|
|
130
|
+
*/
|
|
26
131
|
info(message: string, ...rest: (string | number | boolean | object)[]): void;
|
|
132
|
+
/**
|
|
133
|
+
* Create a log message with log level **debug**
|
|
134
|
+
*
|
|
135
|
+
* @param message text of the log message
|
|
136
|
+
* @param rest additional information to log (this will be appended as a JSON string to the message)
|
|
137
|
+
*/
|
|
27
138
|
debug(message: string, ...rest: (string | number | boolean | object)[]): void;
|
|
139
|
+
/**
|
|
140
|
+
* Create a log message with log level **trace**
|
|
141
|
+
*
|
|
142
|
+
* @param message text of the log message
|
|
143
|
+
* @param rest additional information to log (this will be appended as a JSON string to the message)
|
|
144
|
+
*/
|
|
28
145
|
trace(message: string, ...rest: (string | number | boolean | object)[]): void;
|
|
29
146
|
}
|
package/lib/logger-types.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Copyright (C) 2025 Tim Hahn
|
|
2
2
|
export {};
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4QkFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKEMpIDIwMjUgVGltIEhhaG5cblxuLyoqXG4gKiBMb2cgbGV2ZWwgc2V0dGluZ1xuICovXG5leHBvcnQgdHlwZSBMb2dnZXJMZXZlbCA9ICdmYXRhbCcgfCAnZXJyb3InIHwgJ3dhcm4nIHwgJ2luZm8nIHwgJ2RlYnVnJyB8ICd0cmFjZSc7XG5cbi8qKlxuICogTG9nZ2VyIHR5cGUgZm9yIHtAbGluayBjcmVhdGVMb2dnZXJ9IHRvIGNyZWF0ZVxuICovXG5leHBvcnQgdHlwZSBMb2dnZXJUeXBlID0gJ3NpbXBsZScgfCAnd2luc3Rvbic7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcvZ2V0dGluZyBhIGxvZ2dlci4gIFVzZWQgd2hlbiBjYWxsaW5nIGBjcmVhdGVMb2dnZXIoKWAuXG4gKlxuICogQHNlZSB7QGxpbmsgY3JlYXRlTG9nZ2VyfVxuICpcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBmb3IgdGhlIGxvZ2dlclxuICAgKiBAZGVmYXVsdCAnZGVmYXVsdCcgKHN1cHByZXNzZWQgZnJvbSBsb2cgcmVjb3JkcylcbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2dnaW5nIGxldmVsIHRvIHVzZSwgKGRlZmF1bHQ6IGAnZXJyb3InYClcbiAgICogQGRlZmF1bHQgJ2Vycm9yJ1xuICAgKi9cbiAgbGV2ZWw/OiBMb2dnZXJMZXZlbDtcblxuICAvKipcbiAgICogVXNlIEpTT04gb3IgdGV4dCBvdXRwdXQgKGRlZmF1bHQ6IGB0cnVlYClcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAganNvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVzZSBjb2xvciBpbiB0ZXh0IG91dHB1dCAoZGVmYXVsdDogYGZhbHNlYClcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbG9yPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3VwcHJlc3MgbG9nIG91dHB1dCwgcmVnYXJkbGVzcyBvZiBsZXZlbCAoZGVmYXVsdDogYGZhbHNlYClcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNpbGVudD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgdGltZXN0YW1wcyBpbiB0ZXh0IG91dHB1dCAoZGVmYXVsdDogYHRydWVgKVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICB0aW1lc3RhbXA/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHVwZGF0aW5nIGEgbG9nZ2VyIGNvbmZpZ3VyYXRpb24uICBVc2VkIHdoZW4gY2FsbGluZyBgSUxvZ2dlci5zZXRMb2dnZXJQcm9wcygpYC5cbiAqIEBzZWUge0BsaW5rIElMb2dnZXIuc2V0TG9nZ2VyUHJvcHN9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyU2V0TG9nZ2VyUHJvcHMge1xuICAvKipcbiAgICogVGhlIGxvZ2dpbmcgbGV2ZWwgdG8gdXNlLCAoZGVmYXVsdDogYCdlcnJvcidgKVxuICAgKiBAZGVmYXVsdCAnZXJyb3InXG4gICAqL1xuICBsZXZlbD86IExvZ2dlckxldmVsO1xuXG4gIC8qKlxuICAgKiBVc2UgSlNPTiBvciB0ZXh0IG91dHB1dCAoZGVmYXVsdDogYHRydWVgKVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBqc29uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXNlIGNvbG9yIGluIHRleHQgb3V0cHV0IChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY29sb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTdXBwcmVzcyBsb2cgb3V0cHV0LCByZWdhcmRsZXNzIG9mIGxldmVsIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2lsZW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5jbHVkZSB0aW1lc3RhbXBzIGluIHRleHQgb3V0cHV0IChkZWZhdWx0OiBgdHJ1ZWApXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHRpbWVzdGFtcD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHdoaWNoIHJlcHJlc2VudHMgYSBsb2dnZXIgaW5zdGFuY2UuICBSZXR1cm5lZCBmcm9tIGNhbGwgdG8gYGNyZWF0ZUxvZ2dlcigpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTG9nZ2VyIHtcbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgbG9nZ2VyLlxuICAgKi9cbiAgZ2V0TmFtZSgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbG9nZ2VyIHR5cGUuXG4gICAqL1xuICBnZXRUeXBlKCk6IExvZ2dlclR5cGU7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgbG9nZ2VyIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBBZGp1c3RtZW50cyB0byB0aGUgbG9nZ2VyIGNvbmZpZ3VyYXRpb24gQHNlZSB7QGxpbmsgTG9nZ2VyU2V0TG9nZ2VyUHJvcHN9XG4gICAqL1xuICBzZXRMb2dnZXJQcm9wcyhwcm9wczogTG9nZ2VyU2V0TG9nZ2VyUHJvcHMpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBsb2cgbWVzc2FnZSB3aXRoIHRoZSBzcGVjaWZpZWQgbG9nIGxldmVsLlxuICAgKlxuICAgKiBAcGFyYW0gbGV2ZWwgTG9nIGxldmVsIGZvciB0aGlzIGxvZyBtZXNzYWdlXG4gICAqIEBwYXJhbSBtZXNzYWdlIHRleHQgb2YgdGhlIGxvZyBtZXNzYWdlXG4gICAqIEBwYXJhbSByZXN0IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gbG9nICh0aGlzIHdpbGwgYmUgYXBwZW5kZWQgYXMgYSBKU09OIHN0cmluZyB0byB0aGUgbWVzc2FnZSlcbiAgICovXG4gIGxvZyhsZXZlbDogTG9nZ2VyTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgLi4ucmVzdDogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QpW10pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBsb2cgbWVzc2FnZSB3aXRoIGxvZyBsZXZlbCAqKmZhdGFsKipcbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgdGV4dCBvZiB0aGUgbG9nIG1lc3NhZ2VcbiAgICogQHBhcmFtIHJlc3QgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBsb2cgKHRoaXMgd2lsbCBiZSBhcHBlbmRlZCBhcyBhIEpTT04gc3RyaW5nIHRvIHRoZSBtZXNzYWdlKVxuICAgKi9cbiAgZmF0YWwobWVzc2FnZTogc3RyaW5nLCAuLi5yZXN0OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdClbXSk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGxvZyBtZXNzYWdlIHdpdGggbG9nIGxldmVsICoqZXJyb3IqKlxuICAgKlxuICAgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IG9mIHRoZSBsb2cgbWVzc2FnZVxuICAgKiBAcGFyYW0gcmVzdCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIGxvZyAodGhpcyB3aWxsIGJlIGFwcGVuZGVkIGFzIGEgSlNPTiBzdHJpbmcgdG8gdGhlIG1lc3NhZ2UpXG4gICAqL1xuICBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIC4uLnJlc3Q6IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0KVtdKTogdm9pZDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbG9nIG1lc3NhZ2Ugd2l0aCBsb2cgbGV2ZWwgKip3YXJuKipcbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgdGV4dCBvZiB0aGUgbG9nIG1lc3NhZ2VcbiAgICogQHBhcmFtIHJlc3QgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBsb2cgKHRoaXMgd2lsbCBiZSBhcHBlbmRlZCBhcyBhIEpTT04gc3RyaW5nIHRvIHRoZSBtZXNzYWdlKVxuICAgKi9cbiAgd2FybihtZXNzYWdlOiBzdHJpbmcsIC4uLnJlc3Q6IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0KVtdKTogdm9pZDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbG9nIG1lc3NhZ2Ugd2l0aCBsb2cgbGV2ZWwgKippbmZvKipcbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgdGV4dCBvZiB0aGUgbG9nIG1lc3NhZ2VcbiAgICogQHBhcmFtIHJlc3QgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBsb2cgKHRoaXMgd2lsbCBiZSBhcHBlbmRlZCBhcyBhIEpTT04gc3RyaW5nIHRvIHRoZSBtZXNzYWdlKVxuICAgKi9cbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIC4uLnJlc3Q6IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0KVtdKTogdm9pZDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbG9nIG1lc3NhZ2Ugd2l0aCBsb2cgbGV2ZWwgKipkZWJ1ZyoqXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIHRleHQgb2YgdGhlIGxvZyBtZXNzYWdlXG4gICAqIEBwYXJhbSByZXN0IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gbG9nICh0aGlzIHdpbGwgYmUgYXBwZW5kZWQgYXMgYSBKU09OIHN0cmluZyB0byB0aGUgbWVzc2FnZSlcbiAgICovXG4gIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgLi4ucmVzdDogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QpW10pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBsb2cgbWVzc2FnZSB3aXRoIGxvZyBsZXZlbCAqKnRyYWNlKipcbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgdGV4dCBvZiB0aGUgbG9nIG1lc3NhZ2VcbiAgICogQHBhcmFtIHJlc3QgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBsb2cgKHRoaXMgd2lsbCBiZSBhcHBlbmRlZCBhcyBhIEpTT04gc3RyaW5nIHRvIHRoZSBtZXNzYWdlKVxuICAgKi9cbiAgdHJhY2UobWVzc2FnZTogc3RyaW5nLCAuLi5yZXN0OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdClbXSk6IHZvaWQ7XG59XG4iXX0=
|
package/lib/logger.d.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
1
|
import { ILogger, LoggerType, LoggerLevel, LoggerProps, LoggerSetLoggerProps } from './logger-types.js';
|
|
2
|
-
export { ILogger, LoggerLevel, LoggerProps, LoggerSetLoggerProps };
|
|
2
|
+
export type { ILogger, LoggerType, LoggerLevel, LoggerProps, LoggerSetLoggerProps };
|
|
3
|
+
/**
|
|
4
|
+
* Create (or get an existing) logger to use.
|
|
5
|
+
*
|
|
6
|
+
* @param type The type of logger to create
|
|
7
|
+
* @param props Initialization properties for the logger
|
|
8
|
+
* @returns an object that implements the {@link ILogger} interface
|
|
9
|
+
*/
|
|
3
10
|
export declare function createLogger(type: LoggerType, props?: LoggerProps): ILogger;
|
package/lib/logger.js
CHANGED
|
@@ -19,6 +19,13 @@ async function initializeLoggerClasses() {
|
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Create (or get an existing) logger to use.
|
|
24
|
+
*
|
|
25
|
+
* @param type The type of logger to create
|
|
26
|
+
* @param props Initialization properties for the logger
|
|
27
|
+
* @returns an object that implements the {@link ILogger} interface
|
|
28
|
+
*/
|
|
22
29
|
export function createLogger(type, props) {
|
|
23
30
|
const loggerName = props?.name ?? 'default'; // covers case where props.name === ''
|
|
24
31
|
const existingLogger = loggers.find((logger) => logger.getName() === loggerName);
|
|
@@ -46,4 +53,4 @@ export function createLogger(type, props) {
|
|
|
46
53
|
return newLogger;
|
|
47
54
|
}
|
|
48
55
|
await initializeLoggerClasses();
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4QkFBOEI7QUFjOUIsNEVBQTRFO0FBQzVFLE1BQU0sTUFBTSxHQUFHLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxVQUFVLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQztBQUVoRixNQUFNLGFBQWEsR0FBa0IsRUFBRSxDQUFDO0FBRXhDLE1BQU0sT0FBTyxHQUFjLEVBQUUsQ0FBQztBQUU5QixLQUFLLFVBQVUsdUJBQXVCO0lBQ3BDLElBQUksbUJBQW1CLENBQUM7SUFDeEIsSUFBSSxrQkFBa0IsQ0FBQztJQUV2QixDQUFDLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFFOUQsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHO1FBQ2pCLElBQUksRUFBRSxRQUFRO1FBQ2QsYUFBYSxFQUFFLGtCQUFrQjtLQUNsQyxDQUFDO0lBRUYsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUVoRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUc7WUFDakIsSUFBSSxFQUFFLFNBQVM7WUFDZixhQUFhLEVBQUUsbUJBQW1CO1NBQ25DLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBZ0IsRUFBRSxLQUFtQjtJQUNoRSxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQUUsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLHNDQUFzQztJQUVuRixNQUFNLGNBQWMsR0FBd0IsT0FBTyxDQUFDLElBQUksQ0FDdEQsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxVQUFVLENBQzVDLENBQUM7SUFFRixJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ25CLElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RDLGNBQWMsQ0FBQyxJQUFJLENBQ2pCLHNFQUFzRSxJQUFJLEVBQUUsQ0FDN0UsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsY0FBYyxDQUFDLElBQUksQ0FDakIsbUZBQW1GLENBQ3BGLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFnQixFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFDakQsY0FBYyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7SUFFakMsSUFBSSxXQUFXLEdBQTRCLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDNUYsSUFBSSxTQUFTLEdBQXdCLFNBQVMsQ0FBQztJQUMvQyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLFNBQVMsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7U0FBTSxDQUFDO1FBQ04sU0FBUyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDM0QsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsZUFBZSxJQUFJLDBDQUEwQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFeEIsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELE1BQU0sdUJBQXVCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoQykgMjAyNSBUaW0gSGFoblxuXG5pbXBvcnQge1xuICBJTG9nZ2VyLFxuICBMb2dnZXJUeXBlLFxuICBMb2dnZXJMZXZlbCxcbiAgTG9nZ2VyUHJvcHMsXG4gIExvZ2dlclNldExvZ2dlclByb3BzLFxufSBmcm9tICcuL2xvZ2dlci10eXBlcy5qcyc7XG5cbmV4cG9ydCB0eXBlIHsgSUxvZ2dlciwgTG9nZ2VyVHlwZSwgTG9nZ2VyTGV2ZWwsIExvZ2dlclByb3BzLCBMb2dnZXJTZXRMb2dnZXJQcm9wcyB9O1xuXG50eXBlIExvZ2dlckNsYXNzID0geyB0eXBlOiBMb2dnZXJUeXBlOyBsb2dnZXJDcmVhdG9yOiAocHJvcHM/OiBMb2dnZXJQcm9wcykgPT4gSUxvZ2dlciB9O1xuXG4vLyBjb25zdCBpc0Jyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzID09PSB3aW5kb3c7XG5jb25zdCBpc05vZGUgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzID09PSBwcm9jZXNzO1xuXG5jb25zdCBsb2dnZXJDbGFzc2VzOiBMb2dnZXJDbGFzc1tdID0gW107XG5cbmNvbnN0IGxvZ2dlcnM6IElMb2dnZXJbXSA9IFtdO1xuXG5hc3luYyBmdW5jdGlvbiBpbml0aWFsaXplTG9nZ2VyQ2xhc3NlcygpIHtcbiAgbGV0IGNyZWF0ZVdpbnN0b25Mb2dnZXI7XG4gIGxldCBjcmVhdGVTaW1wbGVMb2dnZXI7XG5cbiAgKHsgY3JlYXRlU2ltcGxlTG9nZ2VyIH0gPSBhd2FpdCBpbXBvcnQoJy4vc2ltcGxlLWxvZ2dlci5qcycpKTtcblxuICBsb2dnZXJDbGFzc2VzWzBdID0ge1xuICAgIHR5cGU6ICdzaW1wbGUnLFxuICAgIGxvZ2dlckNyZWF0b3I6IGNyZWF0ZVNpbXBsZUxvZ2dlcixcbiAgfTtcblxuICBpZiAoaXNOb2RlKSB7XG4gICAgKHsgY3JlYXRlV2luc3RvbkxvZ2dlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3dpbnN0b24tbG9nZ2VyLmpzJykpO1xuXG4gICAgbG9nZ2VyQ2xhc3Nlc1sxXSA9IHtcbiAgICAgIHR5cGU6ICd3aW5zdG9uJyxcbiAgICAgIGxvZ2dlckNyZWF0b3I6IGNyZWF0ZVdpbnN0b25Mb2dnZXIsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSAob3IgZ2V0IGFuIGV4aXN0aW5nKSBsb2dnZXIgdG8gdXNlLlxuICpcbiAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIGxvZ2dlciB0byBjcmVhdGVcbiAqIEBwYXJhbSBwcm9wcyBJbml0aWFsaXphdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgbG9nZ2VyXG4gKiBAcmV0dXJucyBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgSUxvZ2dlcn0gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2dnZXIodHlwZTogTG9nZ2VyVHlwZSwgcHJvcHM/OiBMb2dnZXJQcm9wcyk6IElMb2dnZXIge1xuICBjb25zdCBsb2dnZXJOYW1lID0gcHJvcHM/Lm5hbWUgPz8gJ2RlZmF1bHQnOyAvLyBjb3ZlcnMgY2FzZSB3aGVyZSBwcm9wcy5uYW1lID09PSAnJ1xuXG4gIGNvbnN0IGV4aXN0aW5nTG9nZ2VyOiBJTG9nZ2VyIHwgdW5kZWZpbmVkID0gbG9nZ2Vycy5maW5kKFxuICAgIChsb2dnZXIpID0+IGxvZ2dlci5nZXROYW1lKCkgPT09IGxvZ2dlck5hbWUsXG4gICk7XG5cbiAgaWYgKGV4aXN0aW5nTG9nZ2VyKSB7XG4gICAgaWYgKGV4aXN0aW5nTG9nZ2VyLmdldFR5cGUoKSAhPT0gdHlwZSkge1xuICAgICAgZXhpc3RpbmdMb2dnZXIud2FybihcbiAgICAgICAgYGNyZWF0ZUxvZ2dlcjogZXhpc3RpbmcgTG9nZ2VyIGZvdW5kIGRvZXMgbm90IG1hdGNoIHR5cGUgcmVxdWVzdGVkOiAke3R5cGV9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwcm9wcykge1xuICAgICAgZXhpc3RpbmdMb2dnZXIud2FybihcbiAgICAgICAgJ2NyZWF0ZUxvZ2dlcjogZXhpc3RpbmcgTG9nZ2VyIGZvdW5kLCBzdXBwbGllZCBwcm9wcyBpZ25vcmVkLCB1c2Ugc2V0TG9nZ2VyUHJvcHMoKScsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZXhpc3RpbmdMb2dnZXI7XG4gIH1cblxuICBjb25zdCBuZXdMb2dnZXJQcm9wczogTG9nZ2VyUHJvcHMgPSB7IC4uLnByb3BzIH07XG4gIG5ld0xvZ2dlclByb3BzLm5hbWUgPSBsb2dnZXJOYW1lO1xuXG4gIGxldCBsb2dnZXJDbGFzczogTG9nZ2VyQ2xhc3MgfCB1bmRlZmluZWQgPSBsb2dnZXJDbGFzc2VzLmZpbmQoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gdHlwZSk7XG4gIGxldCBuZXdMb2dnZXI6IElMb2dnZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGlmIChsb2dnZXJDbGFzcykge1xuICAgIG5ld0xvZ2dlciA9IGxvZ2dlckNsYXNzLmxvZ2dlckNyZWF0b3IobmV3TG9nZ2VyUHJvcHMpO1xuICB9IGVsc2Uge1xuICAgIG5ld0xvZ2dlciA9IGxvZ2dlckNsYXNzZXNbMF0ubG9nZ2VyQ3JlYXRvcihuZXdMb2dnZXJQcm9wcyk7XG4gICAgbmV3TG9nZ2VyLmxvZygnd2FybicsIGBsb2dnZXJUeXBlOiAke3R5cGV9IG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIFNpbXBsZUxvZ2dlcmApO1xuICB9XG5cbiAgbG9nZ2Vycy5wdXNoKG5ld0xvZ2dlcik7XG5cbiAgcmV0dXJuIG5ld0xvZ2dlcjtcbn1cblxuYXdhaXQgaW5pdGlhbGl6ZUxvZ2dlckNsYXNzZXMoKTtcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -11,30 +11,32 @@
|
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
13
|
"@eslint/compat": "^2.1.0",
|
|
14
|
-
"@eslint/eslintrc": "^3.3.
|
|
15
|
-
"@eslint/js": "^9.39.
|
|
14
|
+
"@eslint/eslintrc": "^3.3.6",
|
|
15
|
+
"@eslint/js": "^9.39.5",
|
|
16
16
|
"@jest/globals": "^29.7.0",
|
|
17
|
-
"@ncfour-us/projen-utils": "^0.
|
|
17
|
+
"@ncfour-us/projen-utils": "^0.3.3",
|
|
18
18
|
"@stylistic/eslint-plugin": "^5.10.0",
|
|
19
19
|
"@types/jest": "^29.5.14",
|
|
20
20
|
"@types/node": "^24",
|
|
21
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
22
|
-
"@typescript-eslint/parser": "^8.
|
|
21
|
+
"@typescript-eslint/eslint-plugin": "^8.67.0",
|
|
22
|
+
"@typescript-eslint/parser": "^8.67.0",
|
|
23
23
|
"commit-and-tag-version": "^12",
|
|
24
24
|
"constructs": "^10.0.0",
|
|
25
|
-
"eslint": "^9.
|
|
26
|
-
"eslint-import-resolver-typescript": "^
|
|
25
|
+
"eslint": "^10.9.0",
|
|
26
|
+
"eslint-import-resolver-typescript": "^4.4.5",
|
|
27
27
|
"eslint-plugin-import": "^2.32.0",
|
|
28
28
|
"globals": "^14.0.0",
|
|
29
|
-
"jest": "^
|
|
29
|
+
"jest": "^30.4.2",
|
|
30
30
|
"jest-junit": "^17",
|
|
31
31
|
"jiti": "^2.7.0",
|
|
32
|
-
"prettier": "^3.
|
|
33
|
-
"projen": "^0.
|
|
34
|
-
"ts-jest": "^29.4.
|
|
32
|
+
"prettier": "^3.9.6",
|
|
33
|
+
"projen": "^0.102.0",
|
|
34
|
+
"ts-jest": "^29.4.12",
|
|
35
35
|
"ts-node": "^10.9.2",
|
|
36
|
-
"tsx": "^4.
|
|
37
|
-
"
|
|
36
|
+
"tsx": "^4.23.12",
|
|
37
|
+
"typedoc": "^0.28.20",
|
|
38
|
+
"typedoc-plugin-markdown": "^4.12.0",
|
|
39
|
+
"typescript": "^6.0.3"
|
|
38
40
|
},
|
|
39
41
|
"dependencies": {
|
|
40
42
|
"chalk": "^4.1.2",
|
|
@@ -58,24 +60,9 @@
|
|
|
58
60
|
},
|
|
59
61
|
"main": "lib/index.js",
|
|
60
62
|
"license": "MIT",
|
|
61
|
-
"version": "0.0.
|
|
63
|
+
"version": "0.0.28",
|
|
62
64
|
"jest": {
|
|
63
65
|
"coverageProvider": "v8",
|
|
64
|
-
"extensionsToTreatAsEsm": [
|
|
65
|
-
".ts"
|
|
66
|
-
],
|
|
67
|
-
"moduleNameMapper": {
|
|
68
|
-
"^(\\.{1,2}/.*)\\.js$": "$1"
|
|
69
|
-
},
|
|
70
|
-
"transform": {
|
|
71
|
-
"^.+\\.(mt|t|cj|j)s$": [
|
|
72
|
-
"ts-jest",
|
|
73
|
-
{
|
|
74
|
-
"useESM": true,
|
|
75
|
-
"tsconfig": "tsconfig.dev.json"
|
|
76
|
-
}
|
|
77
|
-
]
|
|
78
|
-
},
|
|
79
66
|
"testMatch": [
|
|
80
67
|
"<rootDir>/@(src|test)/**/*(*.)@(spec|test).ts?(x)",
|
|
81
68
|
"<rootDir>/@(src|test)/**/__tests__/**/*.ts?(x)",
|
|
@@ -109,7 +96,22 @@
|
|
|
109
96
|
"outputDirectory": "test-reports"
|
|
110
97
|
}
|
|
111
98
|
]
|
|
112
|
-
]
|
|
99
|
+
],
|
|
100
|
+
"transform": {
|
|
101
|
+
"^.+\\.(mt|t|cj|j)s$": [
|
|
102
|
+
"ts-jest",
|
|
103
|
+
{
|
|
104
|
+
"useESM": true,
|
|
105
|
+
"tsconfig": "test/tsconfig.json"
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
"extensionsToTreatAsEsm": [
|
|
110
|
+
".ts"
|
|
111
|
+
],
|
|
112
|
+
"moduleNameMapper": {
|
|
113
|
+
"^(\\.{1,2}/.*)\\.js$": "$1"
|
|
114
|
+
}
|
|
113
115
|
},
|
|
114
116
|
"types": "lib/index.d.ts",
|
|
115
117
|
"type": "module",
|
|
@@ -120,6 +122,7 @@
|
|
|
120
122
|
"scripts": {
|
|
121
123
|
"build": "projen build",
|
|
122
124
|
"bump": "projen bump",
|
|
125
|
+
"bump:releasable-commits": "projen bump:releasable-commits",
|
|
123
126
|
"clobber": "projen clobber",
|
|
124
127
|
"compile": "projen compile",
|
|
125
128
|
"default": "projen default",
|
|
@@ -139,6 +142,7 @@
|
|
|
139
142
|
"unbump": "projen unbump",
|
|
140
143
|
"upgrade": "projen upgrade",
|
|
141
144
|
"watch": "projen watch",
|
|
142
|
-
"projen": "projen"
|
|
145
|
+
"projen": "projen",
|
|
146
|
+
"build:docs": "pnpm typedoc"
|
|
143
147
|
}
|
|
144
148
|
}
|
package/lib/logger-factory.d.ts
DELETED
package/lib/logger-factory.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
// Copyright (C) 2025 Tim Hahn
|
|
2
|
-
import { SimpleLogger } from './simple-logger.js';
|
|
3
|
-
import { WinstonLogger } from './winston-logger.js';
|
|
4
|
-
export function createLogger(type, props) {
|
|
5
|
-
const retService = type === 'simple' ? SimpleLogger.getSimpleLogger(props) : WinstonLogger.getWinstonLogger(props);
|
|
6
|
-
return retService;
|
|
7
|
-
}
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLWZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbG9nZ2VyLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOEJBQThCO0FBRzlCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFLcEQsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFnQixFQUFFLEtBQW1CO0lBQ2hFLE1BQU0sVUFBVSxHQUNkLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVsRyxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChDKSAyMDI1IFRpbSBIYWhuXG5cbmltcG9ydCB7IElMb2dnZXIsIExvZ2dlclByb3BzLCBMb2dnZXJTZXRMb2dnZXJQcm9wcyB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCB7IFNpbXBsZUxvZ2dlciB9IGZyb20gJy4vc2ltcGxlLWxvZ2dlci5qcyc7XG5pbXBvcnQgeyBXaW5zdG9uTG9nZ2VyIH0gZnJvbSAnLi93aW5zdG9uLWxvZ2dlci5qcyc7XG5cbmV4cG9ydCB7IElMb2dnZXIsIExvZ2dlclByb3BzLCBMb2dnZXJTZXRMb2dnZXJQcm9wcyB9O1xuZXhwb3J0IHR5cGUgTG9nZ2VyVHlwZSA9ICdzaW1wbGUnIHwgJ3dpbnN0b24nO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9nZ2VyKHR5cGU6IExvZ2dlclR5cGUsIHByb3BzPzogTG9nZ2VyUHJvcHMpOiBJTG9nZ2VyIHtcbiAgY29uc3QgcmV0U2VydmljZTogSUxvZ2dlciA9XG4gICAgdHlwZSA9PT0gJ3NpbXBsZScgPyBTaW1wbGVMb2dnZXIuZ2V0U2ltcGxlTG9nZ2VyKHByb3BzKSA6IFdpbnN0b25Mb2dnZXIuZ2V0V2luc3RvbkxvZ2dlcihwcm9wcyk7XG5cbiAgcmV0dXJuIHJldFNlcnZpY2U7XG59XG4iXX0=
|