@ncfour-us/logging 0.0.8

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/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2024 Tim Hahn
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # replace this
package/lib/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export { LogLevel, Logger } from './logging.js';
package/lib/index.js ADDED
@@ -0,0 +1,3 @@
1
+ // Copyright (c) 2024 Tim Hahn
2
+ export { LogLevel, Logger } from './logging.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOEJBQThCO0FBRTlCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDI0IFRpbSBIYWhuXG5cbmV4cG9ydCB7IExvZ0xldmVsLCBMb2dnZXIgfSBmcm9tICcuL2xvZ2dpbmcuanMnO1xuIl19
@@ -0,0 +1,4 @@
1
+ import { ILogger, LoggerProps, LoggerSetLoggerProps } from './logger.js';
2
+ export { ILogger, LoggerProps, LoggerSetLoggerProps };
3
+ export type LoggerType = 'simple' | 'winston';
4
+ export declare function createLogger(type: LoggerType, props?: LoggerProps): ILogger;
@@ -0,0 +1,8 @@
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=
@@ -0,0 +1,29 @@
1
+ export type LoggerLevel = 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace';
2
+ export type LoggerType = 'simple' | 'winston';
3
+ export interface LoggerProps {
4
+ name?: string;
5
+ level?: LoggerLevel;
6
+ json?: boolean;
7
+ color?: boolean;
8
+ silent?: boolean;
9
+ timestamp?: boolean;
10
+ }
11
+ export interface LoggerSetLoggerProps {
12
+ level?: LoggerLevel;
13
+ json?: boolean;
14
+ color?: boolean;
15
+ silent?: boolean;
16
+ timestamp?: boolean;
17
+ }
18
+ export interface ILogger {
19
+ getName(): string;
20
+ getType(): LoggerType;
21
+ setLoggerProps(props: LoggerSetLoggerProps): void;
22
+ log(level: LoggerLevel, message: string, ...rest: (string | number | boolean | object)[]): void;
23
+ fatal(message: string, ...rest: (string | number | boolean | object)[]): void;
24
+ error(message: string, ...rest: (string | number | boolean | object)[]): void;
25
+ warn(message: string, ...rest: (string | number | boolean | object)[]): void;
26
+ info(message: string, ...rest: (string | number | boolean | object)[]): void;
27
+ debug(message: string, ...rest: (string | number | boolean | object)[]): void;
28
+ trace(message: string, ...rest: (string | number | boolean | object)[]): void;
29
+ }
@@ -0,0 +1,3 @@
1
+ // Copyright (C) 2025 Tim Hahn
2
+ export {};
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4QkFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKEMpIDIwMjUgVGltIEhhaG5cblxuZXhwb3J0IHR5cGUgTG9nZ2VyTGV2ZWwgPSAnZmF0YWwnIHwgJ2Vycm9yJyB8ICd3YXJuJyB8ICdpbmZvJyB8ICdkZWJ1ZycgfCAndHJhY2UnO1xuXG5leHBvcnQgdHlwZSBMb2dnZXJUeXBlID0gJ3NpbXBsZScgfCAnd2luc3Rvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyUHJvcHMge1xuICBuYW1lPzogc3RyaW5nO1xuICBsZXZlbD86IExvZ2dlckxldmVsO1xuICBqc29uPzogYm9vbGVhbjtcbiAgY29sb3I/OiBib29sZWFuO1xuICBzaWxlbnQ/OiBib29sZWFuO1xuICB0aW1lc3RhbXA/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlclNldExvZ2dlclByb3BzIHtcbiAgbGV2ZWw/OiBMb2dnZXJMZXZlbDtcbiAganNvbj86IGJvb2xlYW47XG4gIGNvbG9yPzogYm9vbGVhbjtcbiAgc2lsZW50PzogYm9vbGVhbjtcbiAgdGltZXN0YW1wPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTG9nZ2VyIHtcbiAgZ2V0TmFtZSgpOiBzdHJpbmc7XG5cbiAgZ2V0VHlwZSgpOiBMb2dnZXJUeXBlO1xuXG4gIHNldExvZ2dlclByb3BzKHByb3BzOiBMb2dnZXJTZXRMb2dnZXJQcm9wcyk6IHZvaWQ7XG5cbiAgbG9nKGxldmVsOiBMb2dnZXJMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCAuLi5yZXN0OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdClbXSk6IHZvaWQ7XG5cbiAgZmF0YWwobWVzc2FnZTogc3RyaW5nLCAuLi5yZXN0OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdClbXSk6IHZvaWQ7XG5cbiAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCAuLi5yZXN0OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdClbXSk6IHZvaWQ7XG5cbiAgd2FybihtZXNzYWdlOiBzdHJpbmcsIC4uLnJlc3Q6IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0KVtdKTogdm9pZDtcblxuICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgLi4ucmVzdDogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QpW10pOiB2b2lkO1xuXG4gIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgLi4ucmVzdDogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QpW10pOiB2b2lkO1xuXG4gIHRyYWNlKG1lc3NhZ2U6IHN0cmluZywgLi4ucmVzdDogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QpW10pOiB2b2lkO1xufVxuIl19
@@ -0,0 +1,3 @@
1
+ import { ILogger, LoggerType, LoggerLevel, LoggerProps, LoggerSetLoggerProps } from './logger-types.js';
2
+ export { ILogger, LoggerLevel, LoggerProps, LoggerSetLoggerProps };
3
+ export declare function createLogger(type: LoggerType, props?: LoggerProps): ILogger;
package/lib/logger.js ADDED
@@ -0,0 +1,49 @@
1
+ // Copyright (C) 2025 Tim Hahn
2
+ // const isBrowser = typeof window !== 'undefined' && globalThis === window;
3
+ const isNode = typeof process !== 'undefined' && globalThis.process === process;
4
+ const loggerClasses = [];
5
+ const loggers = [];
6
+ async function initializeLoggerClasses() {
7
+ let createWinstonLogger;
8
+ let createSimpleLogger;
9
+ ({ createSimpleLogger } = await import('./simple-logger.js'));
10
+ loggerClasses[0] = {
11
+ type: 'simple',
12
+ loggerCreator: createSimpleLogger,
13
+ };
14
+ if (isNode) {
15
+ ({ createWinstonLogger } = await import('./winston-logger.js'));
16
+ loggerClasses[1] = {
17
+ type: 'winston',
18
+ loggerCreator: createWinstonLogger,
19
+ };
20
+ }
21
+ }
22
+ export function createLogger(type, props) {
23
+ const loggerName = props?.name ?? 'default'; // covers case where props.name === ''
24
+ const existingLogger = loggers.find((logger) => logger.getName() === loggerName);
25
+ if (existingLogger) {
26
+ if (existingLogger.getType() !== type) {
27
+ existingLogger.warn(`createLogger: existing Logger found does not match type requested: ${type}`);
28
+ }
29
+ if (props) {
30
+ existingLogger.warn('createLogger: existing Logger found, supplied props ignored, use setLoggerProps()');
31
+ }
32
+ return existingLogger;
33
+ }
34
+ const newLoggerProps = { ...props };
35
+ newLoggerProps.name = loggerName;
36
+ let loggerClass = loggerClasses.find((item) => item.type === type);
37
+ let newLogger = undefined;
38
+ if (loggerClass) {
39
+ newLogger = loggerClass.loggerCreator(newLoggerProps);
40
+ }
41
+ else {
42
+ newLogger = loggerClasses[0].loggerCreator(newLoggerProps);
43
+ newLogger.log('warn', `loggerType: ${type} not found, falling back to SimpleLogger`);
44
+ }
45
+ loggers.push(newLogger);
46
+ return newLogger;
47
+ }
48
+ await initializeLoggerClasses();
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4QkFBOEI7QUFjOUIsNEVBQTRFO0FBQzVFLE1BQU0sTUFBTSxHQUFHLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxVQUFVLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQztBQUVoRixNQUFNLGFBQWEsR0FBa0IsRUFBRSxDQUFDO0FBRXhDLE1BQU0sT0FBTyxHQUFjLEVBQUUsQ0FBQztBQUU5QixLQUFLLFVBQVUsdUJBQXVCO0lBQ3BDLElBQUksbUJBQW1CLENBQUM7SUFDeEIsSUFBSSxrQkFBa0IsQ0FBQztJQUV2QixDQUFDLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFFOUQsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHO1FBQ2pCLElBQUksRUFBRSxRQUFRO1FBQ2QsYUFBYSxFQUFFLGtCQUFrQjtLQUNsQyxDQUFDO0lBRUYsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUVoRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUc7WUFDakIsSUFBSSxFQUFFLFNBQVM7WUFDZixhQUFhLEVBQUUsbUJBQW1CO1NBQ25DLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBZ0IsRUFBRSxLQUFtQjtJQUNoRSxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQUUsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLHNDQUFzQztJQUVuRixNQUFNLGNBQWMsR0FBd0IsT0FBTyxDQUFDLElBQUksQ0FDdEQsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxVQUFVLENBQzVDLENBQUM7SUFFRixJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ25CLElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RDLGNBQWMsQ0FBQyxJQUFJLENBQ2pCLHNFQUFzRSxJQUFJLEVBQUUsQ0FDN0UsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsY0FBYyxDQUFDLElBQUksQ0FDakIsbUZBQW1GLENBQ3BGLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFnQixFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFDakQsY0FBYyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7SUFFakMsSUFBSSxXQUFXLEdBQTRCLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDNUYsSUFBSSxTQUFTLEdBQXdCLFNBQVMsQ0FBQztJQUMvQyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLFNBQVMsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7U0FBTSxDQUFDO1FBQ04sU0FBUyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDM0QsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsZUFBZSxJQUFJLDBDQUEwQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFeEIsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELE1BQU0sdUJBQXVCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoQykgMjAyNSBUaW0gSGFoblxuXG5pbXBvcnQge1xuICBJTG9nZ2VyLFxuICBMb2dnZXJUeXBlLFxuICBMb2dnZXJMZXZlbCxcbiAgTG9nZ2VyUHJvcHMsXG4gIExvZ2dlclNldExvZ2dlclByb3BzLFxufSBmcm9tICcuL2xvZ2dlci10eXBlcy5qcyc7XG5cbmV4cG9ydCB7IElMb2dnZXIsIExvZ2dlckxldmVsLCBMb2dnZXJQcm9wcywgTG9nZ2VyU2V0TG9nZ2VyUHJvcHMgfTtcblxudHlwZSBMb2dnZXJDbGFzcyA9IHsgdHlwZTogTG9nZ2VyVHlwZTsgbG9nZ2VyQ3JlYXRvcjogKHByb3BzPzogTG9nZ2VyUHJvcHMpID0+IElMb2dnZXIgfTtcblxuLy8gY29uc3QgaXNCcm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcyA9PT0gd2luZG93O1xuY29uc3QgaXNOb2RlID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMucHJvY2VzcyA9PT0gcHJvY2VzcztcblxuY29uc3QgbG9nZ2VyQ2xhc3NlczogTG9nZ2VyQ2xhc3NbXSA9IFtdO1xuXG5jb25zdCBsb2dnZXJzOiBJTG9nZ2VyW10gPSBbXTtcblxuYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZUxvZ2dlckNsYXNzZXMoKSB7XG4gIGxldCBjcmVhdGVXaW5zdG9uTG9nZ2VyO1xuICBsZXQgY3JlYXRlU2ltcGxlTG9nZ2VyO1xuXG4gICh7IGNyZWF0ZVNpbXBsZUxvZ2dlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3NpbXBsZS1sb2dnZXIuanMnKSk7XG5cbiAgbG9nZ2VyQ2xhc3Nlc1swXSA9IHtcbiAgICB0eXBlOiAnc2ltcGxlJyxcbiAgICBsb2dnZXJDcmVhdG9yOiBjcmVhdGVTaW1wbGVMb2dnZXIsXG4gIH07XG5cbiAgaWYgKGlzTm9kZSkge1xuICAgICh7IGNyZWF0ZVdpbnN0b25Mb2dnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi93aW5zdG9uLWxvZ2dlci5qcycpKTtcblxuICAgIGxvZ2dlckNsYXNzZXNbMV0gPSB7XG4gICAgICB0eXBlOiAnd2luc3RvbicsXG4gICAgICBsb2dnZXJDcmVhdG9yOiBjcmVhdGVXaW5zdG9uTG9nZ2VyLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxvZ2dlcih0eXBlOiBMb2dnZXJUeXBlLCBwcm9wcz86IExvZ2dlclByb3BzKTogSUxvZ2dlciB7XG4gIGNvbnN0IGxvZ2dlck5hbWUgPSBwcm9wcz8ubmFtZSA/PyAnZGVmYXVsdCc7IC8vIGNvdmVycyBjYXNlIHdoZXJlIHByb3BzLm5hbWUgPT09ICcnXG5cbiAgY29uc3QgZXhpc3RpbmdMb2dnZXI6IElMb2dnZXIgfCB1bmRlZmluZWQgPSBsb2dnZXJzLmZpbmQoXG4gICAgKGxvZ2dlcikgPT4gbG9nZ2VyLmdldE5hbWUoKSA9PT0gbG9nZ2VyTmFtZSxcbiAgKTtcblxuICBpZiAoZXhpc3RpbmdMb2dnZXIpIHtcbiAgICBpZiAoZXhpc3RpbmdMb2dnZXIuZ2V0VHlwZSgpICE9PSB0eXBlKSB7XG4gICAgICBleGlzdGluZ0xvZ2dlci53YXJuKFxuICAgICAgICBgY3JlYXRlTG9nZ2VyOiBleGlzdGluZyBMb2dnZXIgZm91bmQgZG9lcyBub3QgbWF0Y2ggdHlwZSByZXF1ZXN0ZWQ6ICR7dHlwZX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHByb3BzKSB7XG4gICAgICBleGlzdGluZ0xvZ2dlci53YXJuKFxuICAgICAgICAnY3JlYXRlTG9nZ2VyOiBleGlzdGluZyBMb2dnZXIgZm91bmQsIHN1cHBsaWVkIHByb3BzIGlnbm9yZWQsIHVzZSBzZXRMb2dnZXJQcm9wcygpJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBleGlzdGluZ0xvZ2dlcjtcbiAgfVxuXG4gIGNvbnN0IG5ld0xvZ2dlclByb3BzOiBMb2dnZXJQcm9wcyA9IHsgLi4ucHJvcHMgfTtcbiAgbmV3TG9nZ2VyUHJvcHMubmFtZSA9IGxvZ2dlck5hbWU7XG5cbiAgbGV0IGxvZ2dlckNsYXNzOiBMb2dnZXJDbGFzcyB8IHVuZGVmaW5lZCA9IGxvZ2dlckNsYXNzZXMuZmluZCgoaXRlbSkgPT4gaXRlbS50eXBlID09PSB0eXBlKTtcbiAgbGV0IG5ld0xvZ2dlcjogSUxvZ2dlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgaWYgKGxvZ2dlckNsYXNzKSB7XG4gICAgbmV3TG9nZ2VyID0gbG9nZ2VyQ2xhc3MubG9nZ2VyQ3JlYXRvcihuZXdMb2dnZXJQcm9wcyk7XG4gIH0gZWxzZSB7XG4gICAgbmV3TG9nZ2VyID0gbG9nZ2VyQ2xhc3Nlc1swXS5sb2dnZXJDcmVhdG9yKG5ld0xvZ2dlclByb3BzKTtcbiAgICBuZXdMb2dnZXIubG9nKCd3YXJuJywgYGxvZ2dlclR5cGU6ICR7dHlwZX0gbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gU2ltcGxlTG9nZ2VyYCk7XG4gIH1cblxuICBsb2dnZXJzLnB1c2gobmV3TG9nZ2VyKTtcblxuICByZXR1cm4gbmV3TG9nZ2VyO1xufVxuXG5hd2FpdCBpbml0aWFsaXplTG9nZ2VyQ2xhc3NlcygpO1xuIl19
@@ -0,0 +1,28 @@
1
+ export declare enum LogLevel {
2
+ SEVERE = 10,
3
+ ERROR = 20,
4
+ INFO = 30,
5
+ DEBUG = 40,
6
+ ALL = 100
7
+ }
8
+ export declare class Logger {
9
+ static getLogger(component?: string): Logger;
10
+ private component;
11
+ private logLevel;
12
+ private insertPrefix;
13
+ private insertTimestamp;
14
+ private insertLevel;
15
+ private useColor;
16
+ private constructor();
17
+ setLevel(logLevel: LogLevel): void;
18
+ setInsertPrefix(insertPrefix: boolean): void;
19
+ setInsertTimestamp(insertTimestamp: boolean): void;
20
+ setInsertLevel(insertLevel: boolean): void;
21
+ setUseColor(useColor: boolean): void;
22
+ debug(message: string): void;
23
+ info(message: string): void;
24
+ error(message: string): void;
25
+ severe(message: string): void;
26
+ log(level: LogLevel, message: string): void;
27
+ private emitMessage;
28
+ }
package/lib/logging.js ADDED
@@ -0,0 +1,97 @@
1
+ // Copyright (c) 2024 Tim Hahn
2
+ export var LogLevel;
3
+ (function (LogLevel) {
4
+ LogLevel[LogLevel["SEVERE"] = 10] = "SEVERE";
5
+ LogLevel[LogLevel["ERROR"] = 20] = "ERROR";
6
+ LogLevel[LogLevel["INFO"] = 30] = "INFO";
7
+ LogLevel[LogLevel["DEBUG"] = 40] = "DEBUG";
8
+ LogLevel[LogLevel["ALL"] = 100] = "ALL";
9
+ })(LogLevel || (LogLevel = {}));
10
+ const logLevelStrings = {
11
+ 10: 'SEV',
12
+ 20: 'ERR',
13
+ 30: 'INF',
14
+ 40: 'DEB',
15
+ 100: 'ALL',
16
+ };
17
+ const loggers = {};
18
+ export class Logger {
19
+ // Factory method (static)
20
+ static getLogger(component) {
21
+ let logger = loggers.root;
22
+ if (component) {
23
+ if (!(component in loggers)) {
24
+ loggers[component] = new Logger(component);
25
+ }
26
+ logger = loggers[component];
27
+ }
28
+ return logger;
29
+ }
30
+ component;
31
+ logLevel;
32
+ insertPrefix;
33
+ insertTimestamp;
34
+ insertLevel;
35
+ useColor;
36
+ // callable only from static methods
37
+ constructor(component) {
38
+ this.component = component;
39
+ this.logLevel = LogLevel.INFO;
40
+ this.insertPrefix = true;
41
+ this.insertTimestamp = false;
42
+ this.insertLevel = false;
43
+ this.useColor = false;
44
+ }
45
+ setLevel(logLevel) {
46
+ this.logLevel = logLevel;
47
+ }
48
+ setInsertPrefix(insertPrefix) {
49
+ this.insertPrefix = insertPrefix;
50
+ }
51
+ setInsertTimestamp(insertTimestamp) {
52
+ this.insertTimestamp = insertTimestamp;
53
+ }
54
+ setInsertLevel(insertLevel) {
55
+ this.insertLevel = insertLevel;
56
+ }
57
+ setUseColor(useColor) {
58
+ this.useColor = useColor;
59
+ }
60
+ debug(message) {
61
+ this.log(LogLevel.DEBUG, message);
62
+ }
63
+ info(message) {
64
+ this.log(LogLevel.INFO, message);
65
+ }
66
+ error(message) {
67
+ this.log(LogLevel.ERROR, message);
68
+ }
69
+ severe(message) {
70
+ this.log(LogLevel.SEVERE, message);
71
+ }
72
+ log(level, message) {
73
+ if (this.logLevel >= level) {
74
+ this.emitMessage(level, message);
75
+ }
76
+ }
77
+ emitMessage(level, message) {
78
+ let prefixStr = '';
79
+ let levelStr = '';
80
+ let timestampStr = '';
81
+ if (this.insertPrefix) {
82
+ if (this.insertLevel) {
83
+ levelStr = `[${logLevelStrings[level]}] `;
84
+ }
85
+ if (this.insertTimestamp) {
86
+ const date = new Date();
87
+ timestampStr = `[${date.toISOString()}] `;
88
+ }
89
+ if (this.useColor) {
90
+ }
91
+ prefixStr = `${levelStr}${timestampStr}(${this.component}): `;
92
+ }
93
+ console.log(`${prefixStr}${message}`);
94
+ }
95
+ }
96
+ loggers.root = Logger.getLogger('root');
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2dnaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhCQUE4QjtBQUU5QixNQUFNLENBQU4sSUFBWSxRQU1YO0FBTkQsV0FBWSxRQUFRO0lBQ2xCLDRDQUFXLENBQUE7SUFDWCwwQ0FBVSxDQUFBO0lBQ1Ysd0NBQVMsQ0FBQTtJQUNULDBDQUFVLENBQUE7SUFDVix1Q0FBUyxDQUFBO0FBQ1gsQ0FBQyxFQU5XLFFBQVEsS0FBUixRQUFRLFFBTW5CO0FBRUQsTUFBTSxlQUFlLEdBQTZCO0lBQ2hELEVBQUUsRUFBRSxLQUFLO0lBQ1QsRUFBRSxFQUFFLEtBQUs7SUFDVCxFQUFFLEVBQUUsS0FBSztJQUNULEVBQUUsRUFBRSxLQUFLO0lBQ1QsR0FBRyxFQUFFLEtBQUs7Q0FDWCxDQUFDO0FBRUYsTUFBTSxPQUFPLEdBQTZCLEVBQUUsQ0FBQztBQUU3QyxNQUFNLE9BQU8sTUFBTTtJQUNqQiwwQkFBMEI7SUFDMUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFrQjtRQUNqQyxJQUFJLE1BQU0sR0FBVyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBRWxDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFDRCxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sU0FBUyxDQUFTO0lBQ2xCLFFBQVEsQ0FBVztJQUNuQixZQUFZLENBQVU7SUFDdEIsZUFBZSxDQUFVO0lBQ3pCLFdBQVcsQ0FBVTtJQUNyQixRQUFRLENBQVU7SUFFMUIsb0NBQW9DO0lBQ3BDLFlBQW9CLFNBQWlC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aG5cblxuZXhwb3J0IGVudW0gTG9nTGV2ZWwge1xuICBTRVZFUkUgPSAxMCxcbiAgRVJST1IgPSAyMCxcbiAgSU5GTyA9IDMwLFxuICBERUJVRyA9IDQwLFxuICBBTEwgPSAxMDAsXG59XG5cbmNvbnN0IGxvZ0xldmVsU3RyaW5nczogeyBbaWQ6IG51bWJlcl06IHN0cmluZyB9ID0ge1xuICAxMDogJ1NFVicsXG4gIDIwOiAnRVJSJyxcbiAgMzA6ICdJTkYnLFxuICA0MDogJ0RFQicsXG4gIDEwMDogJ0FMTCcsXG59O1xuXG5jb25zdCBsb2dnZXJzOiB7IFtpZDogc3RyaW5nXTogTG9nZ2VyIH0gPSB7fTtcblxuZXhwb3J0IGNsYXNzIExvZ2dlciB7XG4gIC8vIEZhY3RvcnkgbWV0aG9kIChzdGF0aWMpXG4gIHN0YXRpYyBnZXRMb2dnZXIoY29tcG9uZW50Pzogc3RyaW5nKTogTG9nZ2VyIHtcbiAgICBsZXQgbG9nZ2VyOiBMb2dnZXIgPSBsb2dnZXJzLnJvb3Q7XG5cbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICBpZiAoIShjb21wb25lbnQgaW4gbG9nZ2VycykpIHtcbiAgICAgICAgbG9nZ2Vyc1tjb21wb25lbnRdID0gbmV3IExvZ2dlcihjb21wb25lbnQpO1xuICAgICAgfVxuICAgICAgbG9nZ2VyID0gbG9nZ2Vyc1tjb21wb25lbnRdO1xuICAgIH1cblxuICAgIHJldHVybiBsb2dnZXI7XG4gIH1cblxuICBwcml2YXRlIGNvbXBvbmVudDogc3RyaW5nO1xuICBwcml2YXRlIGxvZ0xldmVsOiBMb2dMZXZlbDtcbiAgcHJpdmF0ZSBpbnNlcnRQcmVmaXg6IGJvb2xlYW47XG4gIHByaXZhdGUgaW5zZXJ0VGltZXN0YW1wOiBib29sZWFuO1xuICBwcml2YXRlIGluc2VydExldmVsOiBib29sZWFuO1xuICBwcml2YXRlIHVzZUNvbG9yOiBib29sZWFuO1xuXG4gIC8vIGNhbGxhYmxlIG9ubHkgZnJvbSBzdGF0aWMgbWV0aG9kc1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKGNvbXBvbmVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgdGhpcy5sb2dMZXZlbCA9IExvZ0xldmVsLklORk87XG4gICAgdGhpcy5pbnNlcnRQcmVmaXggPSB0cnVlO1xuICAgIHRoaXMuaW5zZXJ0VGltZXN0YW1wID0gZmFsc2U7XG4gICAgdGhpcy5pbnNlcnRMZXZlbCA9IGZhbHNlO1xuICAgIHRoaXMudXNlQ29sb3IgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRMZXZlbChsb2dMZXZlbDogTG9nTGV2ZWwpIHtcbiAgICB0aGlzLmxvZ0xldmVsID0gbG9nTGV2ZWw7XG4gIH1cblxuICBwdWJsaWMgc2V0SW5zZXJ0UHJlZml4KGluc2VydFByZWZpeDogYm9vbGVhbikge1xuICAgIHRoaXMuaW5zZXJ0UHJlZml4ID0gaW5zZXJ0UHJlZml4O1xuICB9XG5cbiAgcHVibGljIHNldEluc2VydFRpbWVzdGFtcChpbnNlcnRUaW1lc3RhbXA6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmluc2VydFRpbWVzdGFtcCA9IGluc2VydFRpbWVzdGFtcDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbnNlcnRMZXZlbChpbnNlcnRMZXZlbDogYm9vbGVhbikge1xuICAgIHRoaXMuaW5zZXJ0TGV2ZWwgPSBpbnNlcnRMZXZlbDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRVc2VDb2xvcih1c2VDb2xvcjogYm9vbGVhbikge1xuICAgIHRoaXMudXNlQ29sb3IgPSB1c2VDb2xvcjtcbiAgfVxuXG4gIHB1YmxpYyBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvZyhMb2dMZXZlbC5ERUJVRywgbWVzc2FnZSk7XG4gIH1cblxuICBwdWJsaWMgaW5mbyhtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvZyhMb2dMZXZlbC5JTkZPLCBtZXNzYWdlKTtcbiAgfVxuXG4gIHB1YmxpYyBlcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvZyhMb2dMZXZlbC5FUlJPUiwgbWVzc2FnZSk7XG4gIH1cblxuICBwdWJsaWMgc2V2ZXJlKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMubG9nKExvZ0xldmVsLlNFVkVSRSwgbWVzc2FnZSk7XG4gIH1cblxuICBwdWJsaWMgbG9nKGxldmVsOiBMb2dMZXZlbCwgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubG9nTGV2ZWwgPj0gbGV2ZWwpIHtcbiAgICAgIHRoaXMuZW1pdE1lc3NhZ2UobGV2ZWwsIG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdE1lc3NhZ2UobGV2ZWw6IExvZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBsZXQgcHJlZml4U3RyID0gJyc7XG4gICAgbGV0IGxldmVsU3RyID0gJyc7XG4gICAgbGV0IHRpbWVzdGFtcFN0ciA9ICcnO1xuXG4gICAgaWYgKHRoaXMuaW5zZXJ0UHJlZml4KSB7XG4gICAgICBpZiAodGhpcy5pbnNlcnRMZXZlbCkge1xuICAgICAgICBsZXZlbFN0ciA9IGBbJHtsb2dMZXZlbFN0cmluZ3NbbGV2ZWxdfV0gYDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmluc2VydFRpbWVzdGFtcCkge1xuICAgICAgICBjb25zdCBkYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgdGltZXN0YW1wU3RyID0gYFske2RhdGUudG9JU09TdHJpbmcoKX1dIGA7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy51c2VDb2xvcikge1xuICAgICAgfVxuICAgICAgcHJlZml4U3RyID0gYCR7bGV2ZWxTdHJ9JHt0aW1lc3RhbXBTdHJ9KCR7dGhpcy5jb21wb25lbnR9KTogYDtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgJHtwcmVmaXhTdHJ9JHttZXNzYWdlfWApO1xuICB9XG59XG5cbmxvZ2dlcnMucm9vdCA9IExvZ2dlci5nZXRMb2dnZXIoJ3Jvb3QnKTtcbiJdfQ==
@@ -0,0 +1,23 @@
1
+ import { ILogger, LoggerType, LoggerLevel, LoggerProps, LoggerSetLoggerProps } from './logger-types.js';
2
+ export declare class SimpleLogger implements ILogger {
3
+ name: string;
4
+ level: string;
5
+ json: boolean;
6
+ color: boolean;
7
+ silent: boolean;
8
+ timestamp: boolean;
9
+ private numericLevel;
10
+ constructor(props?: LoggerProps);
11
+ private stringifyLogRecord;
12
+ getName(): string;
13
+ getType(): LoggerType;
14
+ setLoggerProps(props: LoggerSetLoggerProps): void;
15
+ log(level: LoggerLevel, message: string, ...rest: (string | number | boolean | object)[]): void;
16
+ fatal(message: string, ...rest: (string | number | boolean | object)[]): void;
17
+ error(message: string, ...rest: (string | number | boolean | object)[]): void;
18
+ warn(message: string, ...rest: (string | number | boolean | object)[]): void;
19
+ info(message: string, ...rest: (string | number | boolean | object)[]): void;
20
+ debug(message: string, ...rest: (string | number | boolean | object)[]): void;
21
+ trace(message: string, ...rest: (string | number | boolean | object)[]): void;
22
+ }
23
+ export declare function createSimpleLogger(props?: LoggerProps): ILogger;
@@ -0,0 +1,113 @@
1
+ // Copyright (C) 2025 Tim Hahn
2
+ // import { Date } from 'date';
3
+ import chalk from 'chalk';
4
+ const logLevels = {
5
+ fatal: {
6
+ numericLevel: 10,
7
+ colorizer: chalk.magenta,
8
+ },
9
+ error: {
10
+ numericLevel: 20,
11
+ colorizer: chalk.red,
12
+ },
13
+ warn: {
14
+ numericLevel: 30,
15
+ colorizer: chalk.yellow,
16
+ },
17
+ info: {
18
+ numericLevel: 40,
19
+ colorizer: chalk.green,
20
+ },
21
+ debug: {
22
+ numericLevel: 50,
23
+ colorizer: chalk.white,
24
+ },
25
+ trace: {
26
+ numericLevel: 60,
27
+ colorizer: chalk.gray,
28
+ },
29
+ };
30
+ export class SimpleLogger {
31
+ name;
32
+ level;
33
+ json;
34
+ color;
35
+ silent;
36
+ timestamp;
37
+ numericLevel;
38
+ constructor(props) {
39
+ this.name = props?.name ?? 'default';
40
+ this.level = props?.level ?? 'error';
41
+ this.json = props?.json ?? true;
42
+ this.color = props?.color ?? false;
43
+ this.silent = props?.silent ?? false;
44
+ this.timestamp = props?.timestamp ?? true;
45
+ this.numericLevel = logLevels[this.level].numericLevel;
46
+ }
47
+ stringifyLogRecord(level, message, ...rest) {
48
+ let messageString = '';
49
+ if (this.json) {
50
+ messageString = JSON.stringify({
51
+ level: level,
52
+ timestamp: new Date(Date.now()).toISOString(),
53
+ name: this.name,
54
+ message: message,
55
+ ...rest,
56
+ });
57
+ }
58
+ else {
59
+ // messageString = messageString + this.timestamp ? '[' + new Date(Date.now()).toISOString() : "[";
60
+ messageString =
61
+ messageString + (this.timestamp ? `[${new Date(Date.now()).toISOString()} ` : '[');
62
+ messageString = messageString + (this.name !== 'default' ? `${this.name} ` : '');
63
+ messageString =
64
+ messageString + `(${this.color ? logLevels[level].colorizer(level) : level})]`;
65
+ messageString =
66
+ messageString + ` ${this.color ? logLevels[level].colorizer(message) : message}`;
67
+ messageString =
68
+ rest.length > 0 ? messageString + ` ${JSON.stringify({ ...rest })}` : messageString;
69
+ }
70
+ return messageString;
71
+ }
72
+ getName() {
73
+ return this.name;
74
+ }
75
+ getType() {
76
+ return 'simple';
77
+ }
78
+ setLoggerProps(props) {
79
+ this.level = props?.level ?? this.level;
80
+ this.json = props?.json ?? this.json;
81
+ this.color = props?.color ?? this.color;
82
+ this.silent = props?.silent ?? this.silent;
83
+ this.timestamp = props?.timestamp ?? this.timestamp;
84
+ this.numericLevel = logLevels[this.level].numericLevel;
85
+ }
86
+ log(level, message, ...rest) {
87
+ if (!this.silent && logLevels[level].numericLevel <= this.numericLevel) {
88
+ console.log(this.stringifyLogRecord(level, message, ...rest));
89
+ }
90
+ }
91
+ fatal(message, ...rest) {
92
+ this.log('fatal', message, ...rest);
93
+ }
94
+ error(message, ...rest) {
95
+ this.log('error', message, ...rest);
96
+ }
97
+ warn(message, ...rest) {
98
+ this.log('warn', message, ...rest);
99
+ }
100
+ info(message, ...rest) {
101
+ this.log('info', message, ...rest);
102
+ }
103
+ debug(message, ...rest) {
104
+ this.log('debug', message, ...rest);
105
+ }
106
+ trace(message, ...rest) {
107
+ this.log('trace', message, ...rest);
108
+ }
109
+ }
110
+ export function createSimpleLogger(props) {
111
+ return new SimpleLogger(props);
112
+ }
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLWxvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zaW1wbGUtbG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhCQUE4QjtBQUU5QiwrQkFBK0I7QUFDL0IsT0FBTyxLQUFnQixNQUFNLE9BQU8sQ0FBQztBQVVyQyxNQUFNLFNBQVMsR0FBa0U7SUFDL0UsS0FBSyxFQUFFO1FBQ0wsWUFBWSxFQUFFLEVBQUU7UUFDaEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPO0tBQ3pCO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsWUFBWSxFQUFFLEVBQUU7UUFDaEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHO0tBQ3JCO0lBQ0QsSUFBSSxFQUFFO1FBQ0osWUFBWSxFQUFFLEVBQUU7UUFDaEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNO0tBQ3hCO0lBQ0QsSUFBSSxFQUFFO1FBQ0osWUFBWSxFQUFFLEVBQUU7UUFDaEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxLQUFLO0tBQ3ZCO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsWUFBWSxFQUFFLEVBQUU7UUFDaEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxLQUFLO0tBQ3ZCO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsWUFBWSxFQUFFLEVBQUU7UUFDaEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJO0tBQ3RCO0NBQ0YsQ0FBQztBQUVGLE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLElBQUksQ0FBUztJQUNiLEtBQUssQ0FBUztJQUNkLElBQUksQ0FBVTtJQUNkLEtBQUssQ0FBVTtJQUNmLE1BQU0sQ0FBVTtJQUNoQixTQUFTLENBQVU7SUFFWCxZQUFZLENBQVM7SUFFN0IsWUFBWSxLQUFtQjtRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssRUFBRSxJQUFJLElBQUksU0FBUyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLEtBQUssSUFBSSxPQUFPLENBQUM7UUFDckMs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LENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBZSxFQUFFLEdBQUcsSUFBNEM7UUFDM0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQW1CO0lBQ3BELE9BQU8sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoQykgMjAyNSBUaW0gSGFoblxuXG4vLyBpbXBvcnQgeyBEYXRlIH0gZnJvbSAnZGF0ZSc7XG5pbXBvcnQgY2hhbGssIHsgQ2hhbGsgfSBmcm9tICdjaGFsayc7XG5cbmltcG9ydCB7XG4gIElMb2dnZXIsXG4gIExvZ2dlclR5cGUsXG4gIExvZ2dlckxldmVsLFxuICBMb2dnZXJQcm9wcyxcbiAgTG9nZ2VyU2V0TG9nZ2VyUHJvcHMsXG59IGZyb20gJy4vbG9nZ2VyLXR5cGVzLmpzJztcblxuY29uc3QgbG9nTGV2ZWxzOiB7IFtrZXk6IHN0cmluZ106IHsgbnVtZXJpY0xldmVsOiBudW1iZXI7IGNvbG9yaXplcjogQ2hhbGsgfSB9ID0ge1xuICBmYXRhbDoge1xuICAgIG51bWVyaWNMZXZlbDogMTAsXG4gICAgY29sb3JpemVyOiBjaGFsay5tYWdlbnRhLFxuICB9LFxuICBlcnJvcjoge1xuICAgIG51bWVyaWNMZXZlbDogMjAsXG4gICAgY29sb3JpemVyOiBjaGFsay5yZWQsXG4gIH0sXG4gIHdhcm46IHtcbiAgICBudW1lcmljTGV2ZWw6IDMwLFxuICAgIGNvbG9yaXplcjogY2hhbGsueWVsbG93LFxuICB9LFxuICBpbmZvOiB7XG4gICAgbnVtZXJpY0xldmVsOiA0MCxcbiAgICBjb2xvcml6ZXI6IGNoYWxrLmdyZWVuLFxuICB9LFxuICBkZWJ1Zzoge1xuICAgIG51bWVyaWNMZXZlbDogNTAsXG4gICAgY29sb3JpemVyOiBjaGFsay53aGl0ZSxcbiAgfSxcbiAgdHJhY2U6IHtcbiAgICBudW1lcmljTGV2ZWw6IDYwLFxuICAgIGNvbG9yaXplcjogY2hhbGsuZ3JheSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjbGFzcyBTaW1wbGVMb2dnZXIgaW1wbGVtZW50cyBJTG9nZ2VyIHtcbiAgbmFtZTogc3RyaW5nO1xuICBsZXZlbDogc3RyaW5nO1xuICBqc29uOiBib29sZWFuO1xuICBjb2xvcjogYm9vbGVhbjtcbiAgc2lsZW50OiBib29sZWFuO1xuICB0aW1lc3RhbXA6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBudW1lcmljTGV2ZWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcz86IExvZ2dlclByb3BzKSB7XG4gICAgdGhpcy5uYW1lID0gcHJvcHM/Lm5hbWUgPz8gJ2RlZmF1bHQnO1xuICAgIHRoaXMubGV2ZWwgPSBwcm9wcz8ubGV2ZWwgPz8gJ2Vycm9yJztcbiAgICB0aGlzLmpzb24gPSBwcm9wcz8uanNvbiA/PyB0cnVlO1xuICAgIHRoaXMuY29sb3IgPSBwcm9wcz8uY29sb3IgPz8gZmFsc2U7XG4gICAgdGhpcy5zaWxlbnQgPSBwcm9wcz8uc2lsZW50ID8/IGZhbHNlO1xuICAgIHRoaXMudGltZXN0YW1wID0gcHJvcHM/LnRpbWVzdGFtcCA/PyB0cnVlO1xuXG4gICAgdGhpcy5udW1lcmljTGV2ZWwgPSBsb2dMZXZlbHNbdGhpcy5sZXZlbF0ubnVtZXJpY0xldmVsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnlMb2dSZWNvcmQoXG4gICAgbGV2ZWw6IExvZ2dlckxldmVsLFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAuLi5yZXN0OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdClbXVxuICApOiBzdHJpbmcge1xuICAgIGxldCBtZXNzYWdlU3RyaW5nID0gJyc7XG5cbiAgICBpZiAodGhpcy5qc29uKSB7XG4gICAgICBtZXNzYWdlU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBsZXZlbDogbGV2ZWwsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoRGF0ZS5ub3coKSkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICAuLi5yZXN0LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlU3RyaW5nICsgdGhpcy50aW1lc3RhbXAgPyAnWycgKyBuZXcgRGF0ZShEYXRlLm5vdygpKS50b0lTT1N0cmluZygpIDogXCJbXCI7XG5cbiAgICAgIG1lc3NhZ2VTdHJpbmcgPVxuICAgICAgICBtZXNzYWdlU3RyaW5nICsgKHRoaXMudGltZXN0YW1wID8gYFske25ldyBEYXRlKERhdGUubm93KCkpLnRvSVNPU3RyaW5nKCl9IGAgOiAnWycpO1xuICAgICAgbWVzc2FnZVN0cmluZyA9IG1lc3NhZ2VTdHJpbmcgKyAodGhpcy5uYW1lICE9PSAnZGVmYXVsdCcgPyBgJHt0aGlzLm5hbWV9IGAgOiAnJyk7XG4gICAgICBtZXNzYWdlU3RyaW5nID1cbiAgICAgICAgbWVzc2FnZVN0cmluZyArIGAoJHt0aGlzLmNvbG9yID8gbG9nTGV2ZWxzW2xldmVsXS5jb2xvcml6ZXIobGV2ZWwpIDogbGV2ZWx9KV1gO1xuICAgICAgbWVzc2FnZVN0cmluZyA9XG4gICAgICAgIG1lc3NhZ2VTdHJpbmcgKyBgICR7dGhpcy5jb2xvciA/IGxvZ0xldmVsc1tsZXZlbF0uY29sb3JpemVyKG1lc3NhZ2UpIDogbWVzc2FnZX1gO1xuICAgICAgbWVzc2FnZVN0cmluZyA9XG4gICAgICAgIHJlc3QubGVuZ3RoID4gMCA/IG1lc3NhZ2VTdHJpbmcgKyBgICR7SlNPTi5zdHJpbmdpZnkoeyAuLi5yZXN0IH0pfWAgOiBtZXNzYWdlU3RyaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBtZXNzYWdlU3RyaW5nO1xuICB9XG5cbiAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgcHVibGljIGdldFR5cGUoKTogTG9nZ2VyVHlwZSB7XG4gICAgcmV0dXJuICdzaW1wbGUnO1xuICB9XG5cbiAgcHVibGljIHNldExvZ2dlclByb3BzKHByb3BzOiBMb2dnZXJTZXRMb2dnZXJQcm9wcykge1xuICAgIHRoaXMubGV2ZWwgPSBwcm9wcz8ubGV2ZWwgPz8gdGhpcy5sZXZlbDtcbiAgICB0aGlzLmpzb24gPSBwcm9wcz8uanNvbiA/PyB0aGlzLmpzb247XG4gICAgdGhpcy5jb2xvciA9IHByb3BzPy5jb2xvciA/PyB0aGlzLmNvbG9yO1xuICAgIHRoaXMuc2lsZW50ID0gcHJvcHM/LnNpbGVudCA/PyB0aGlzLnNpbGVudDtcbiAgICB0aGlzLnRpbWVzdGFtcCA9IHByb3BzPy50aW1lc3RhbXAgPz8gdGhpcy50aW1lc3RhbXA7XG5cbiAgICB0aGlzLm51bWVyaWNMZXZlbCA9IGxvZ0xldmVsc1t0aGlzLmxldmVsXS5udW1lcmljTGV2ZWw7XG4gIH1cblxuICBwdWJsaWMgbG9nKFxuICAgIGxldmVsOiBMb2dnZXJMZXZlbCxcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgLi4ucmVzdDogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QpW11cbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNpbGVudCAmJiBsb2dMZXZlbHNbbGV2ZWxdLm51bWVyaWNMZXZlbCA8PSB0aGlzLm51bWVyaWNMZXZlbCkge1xuICAgICAgY29uc29sZS5sb2codGhpcy5zdHJpbmdpZnlMb2dSZWNvcmQobGV2ZWwsIG1lc3NhZ2UsIC4uLnJlc3QpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmF0YWwobWVzc2FnZTogc3RyaW5nLCAuLi5yZXN0OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdClbXSk6IHZvaWQge1xuICAgIHRoaXMubG9nKCdmYXRhbCcsIG1lc3NhZ2UsIC4uLnJlc3QpO1xuICB9XG5cbiAgcHVibGljIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgLi4ucmVzdDogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QpW10pOiB2b2lkIHtcbiAgICB0aGlzLmxvZygnZXJyb3InLCBtZXNzYWdlLCAuLi5yZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyB3YXJuKG1lc3NhZ2U6IHN0cmluZywgLi4ucmVzdDogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QpW10pOiB2b2lkIHtcbiAgICB0aGlzLmxvZygnd2FybicsIG1lc3NhZ2UsIC4uLnJlc3QpO1xuICB9XG5cbiAgcHVibGljIGluZm8obWVzc2FnZTogc3RyaW5nLCAuLi5yZXN0OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdClbXSk6IHZvaWQge1xuICAgIHRoaXMubG9nKCdpbmZvJywgbWVzc2FnZSwgLi4ucmVzdCk7XG4gIH1cblxuICBwdWJsaWMgZGVidWcobWVzc2FnZTogc3RyaW5nLCAuLi5yZXN0OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdClbXSk6IHZvaWQge1xuICAgIHRoaXMubG9nKCdkZWJ1ZycsIG1lc3NhZ2UsIC4uLnJlc3QpO1xuICB9XG5cbiAgcHVibGljIHRyYWNlKG1lc3NhZ2U6IHN0cmluZywgLi4ucmVzdDogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QpW10pOiB2b2lkIHtcbiAgICB0aGlzLmxvZygndHJhY2UnLCBtZXNzYWdlLCAuLi5yZXN0KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2ltcGxlTG9nZ2VyKHByb3BzPzogTG9nZ2VyUHJvcHMpOiBJTG9nZ2VyIHtcbiAgcmV0dXJuIG5ldyBTaW1wbGVMb2dnZXIocHJvcHMpO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ import { ILogger, LoggerProps } from './logger-types.js';
2
+ export declare function createWinstonLogger(props?: LoggerProps): ILogger;
@@ -0,0 +1,103 @@
1
+ // Copyright (C) 2025 Tim Hahn
2
+ import winston from 'winston';
3
+ const logLevels = {
4
+ fatal: 0,
5
+ error: 1,
6
+ warn: 2,
7
+ info: 3,
8
+ debug: 4,
9
+ trace: 5,
10
+ };
11
+ const logLevelColors = {
12
+ fatal: 'magenta',
13
+ error: 'red',
14
+ warn: 'yellow',
15
+ info: 'green',
16
+ debug: 'white',
17
+ trace: 'gray',
18
+ };
19
+ class WinstonLogger {
20
+ logger;
21
+ name;
22
+ level;
23
+ json;
24
+ color;
25
+ silent;
26
+ timestamp;
27
+ // private numericLevel: number;
28
+ constructor(props) {
29
+ this.name = props?.name ?? 'default';
30
+ this.level = props?.level ?? 'error';
31
+ this.json = props?.json ?? true;
32
+ this.color = props?.color ?? false;
33
+ this.silent = props?.silent ?? false;
34
+ this.timestamp = props?.timestamp ?? true;
35
+ this.logger = winston.createLogger(); // create an initial in the constructor, overwritten by initializeWinstonLogger()
36
+ this.initializeWinstonLogger();
37
+ }
38
+ getName() {
39
+ return this.name;
40
+ }
41
+ getType() {
42
+ return 'winston';
43
+ }
44
+ setLoggerProps(props) {
45
+ this.level = props?.level ?? this.level;
46
+ this.json = props?.json ?? this.json;
47
+ this.color = props?.color ?? this.color;
48
+ this.silent = props?.silent ?? this.silent;
49
+ this.timestamp = props?.timestamp ?? this.timestamp;
50
+ // Replace the logger completely, using the new configuration
51
+ this.initializeWinstonLogger();
52
+ }
53
+ initializeWinstonLogger() {
54
+ winston.addColors(logLevelColors); // set colors for the custom levels defined in the logger
55
+ // Build the output log format specification
56
+ // Order of how formats are combined matters here!!
57
+ let format = winston.format.combine();
58
+ if (this.timestamp) {
59
+ format = winston.format.combine(format, winston.format.timestamp());
60
+ }
61
+ if (this.json) {
62
+ format = winston.format.combine(format, winston.format.json());
63
+ }
64
+ else {
65
+ if (this.color) {
66
+ format = winston.format.combine(format, winston.format.colorize({ all: true }));
67
+ }
68
+ format = winston.format.combine(format, winston.format.printf((info) => `[${info.timestamp} ${this.name !== 'default' ? `${this.name} ` : ''}(${info.level})] ${info.message}`));
69
+ }
70
+ // Now create the logger
71
+ this.logger = winston.createLogger({
72
+ levels: logLevels,
73
+ level: this.level ?? 'error',
74
+ format: format,
75
+ transports: [new winston.transports.Console()],
76
+ });
77
+ }
78
+ log(level, message, ...rest) {
79
+ this.logger.log(level, message, ...rest);
80
+ }
81
+ fatal(message, ...rest) {
82
+ this.log('fatal', message, ...rest);
83
+ }
84
+ error(message, ...rest) {
85
+ this.log('error', message, ...rest);
86
+ }
87
+ warn(message, ...rest) {
88
+ this.log('warn', message, ...rest);
89
+ }
90
+ info(message, ...rest) {
91
+ this.log('info', message, ...rest);
92
+ }
93
+ debug(message, ...rest) {
94
+ this.log('debug', message, ...rest);
95
+ }
96
+ trace(message, ...rest) {
97
+ this.log('trace', message, ...rest);
98
+ }
99
+ }
100
+ export function createWinstonLogger(props) {
101
+ return new WinstonLogger(props);
102
+ }
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luc3Rvbi1sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd2luc3Rvbi1sb2dnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOEJBQThCO0FBRTlCLE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQztBQVU5QixNQUFNLFNBQVMsR0FBOEI7SUFDM0MsS0FBSyxFQUFFLENBQUM7SUFDUixLQUFLLEVBQUUsQ0FBQztJQUNSLElBQUksRUFBRSxDQUFDO0lBQ1AsSUFBSSxFQUFFLENBQUM7SUFDUCxLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssRUFBRSxDQUFDO0NBQ1QsQ0FBQztBQUVGLE1BQU0sY0FBYyxHQUE4QjtJQUNoRCxLQUFLLEVBQUUsU0FBUztJQUNoQixLQUFLLEVBQUUsS0FBSztJQUNaLElBQUksRUFBRSxRQUFRO0lBQ2QsSUFBSSxFQUFFLE9BQU87SUFDYixLQUFLLEVBQUUsT0FBTztJQUNkLEtBQUssRUFBRSxNQUFNO0NBQ2QsQ0FBQztBQUVGLE1BQU0sYUFBYTtJQUNULE1BQU0sQ0FBaUI7SUFFL0IsSUFBSSxDQUFTO0lBQ2IsS0FBSyxDQUFTO0lBQ2QsSUFBSSxDQUFVO0lBQ2QsS0FBSyxDQUFVO0lBQ2YsTUFBTSxDQUFVO0lBQ2hCLFNBQVMsQ0FBVTtJQUVuQixnQ0FBZ0M7SUFFaEMsWUFBWSxLQUFtQjtRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssRUFBRSxJQUFJLElBQUksU0FBUyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLEtBQUssSUFBSSxPQUFPLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxLQUFLLElBQUksS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUM7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QyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoQykgMjAyNSBUaW0gSGFoblxuXG5pbXBvcnQgd2luc3RvbiBmcm9tICd3aW5zdG9uJztcblxuaW1wb3J0IHtcbiAgSUxvZ2dlcixcbiAgTG9nZ2VyVHlwZSxcbiAgTG9nZ2VyTGV2ZWwsXG4gIExvZ2dlclByb3BzLFxuICBMb2dnZXJTZXRMb2dnZXJQcm9wcyxcbn0gZnJvbSAnLi9sb2dnZXItdHlwZXMuanMnO1xuXG5jb25zdCBsb2dMZXZlbHM6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7XG4gIGZhdGFsOiAwLFxuICBlcnJvcjogMSxcbiAgd2FybjogMixcbiAgaW5mbzogMyxcbiAgZGVidWc6IDQsXG4gIHRyYWNlOiA1LFxufTtcblxuY29uc3QgbG9nTGV2ZWxDb2xvcnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gIGZhdGFsOiAnbWFnZW50YScsXG4gIGVycm9yOiAncmVkJyxcbiAgd2FybjogJ3llbGxvdycsXG4gIGluZm86ICdncmVlbicsXG4gIGRlYnVnOiAnd2hpdGUnLFxuICB0cmFjZTogJ2dyYXknLFxufTtcblxuY2xhc3MgV2luc3RvbkxvZ2dlciBpbXBsZW1lbnRzIElMb2dnZXIge1xuICBwcml2YXRlIGxvZ2dlcjogd2luc3Rvbi5Mb2dnZXI7XG5cbiAgbmFtZTogc3RyaW5nO1xuICBsZXZlbDogc3RyaW5nO1xuICBqc29uOiBib29sZWFuO1xuICBjb2xvcjogYm9vbGVhbjtcbiAgc2lsZW50OiBib29sZWFuO1xuICB0aW1lc3RhbXA6IGJvb2xlYW47XG5cbiAgLy8gcHJpdmF0ZSBudW1lcmljTGV2ZWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcz86IExvZ2dlclByb3BzKSB7XG4gICAgdGhpcy5uYW1lID0gcHJvcHM/Lm5hbWUgPz8gJ2RlZmF1bHQnO1xuICAgIHRoaXMubGV2ZWwgPSBwcm9wcz8ubGV2ZWwgPz8gJ2Vycm9yJztcbiAgICB0aGlzLmpzb24gPSBwcm9wcz8uanNvbiA/PyB0cnVlO1xuICAgIHRoaXMuY29sb3IgPSBwcm9wcz8uY29sb3IgPz8gZmFsc2U7XG4gICAgdGhpcy5zaWxlbnQgPSBwcm9wcz8uc2lsZW50ID8/IGZhbHNlO1xuICAgIHRoaXMudGltZXN0YW1wID0gcHJvcHM/LnRpbWVzdGFtcCA/PyB0cnVlO1xuXG4gICAgdGhpcy5sb2dnZXIgPSB3aW5zdG9uLmNyZWF0ZUxvZ2dlcigpOyAvLyBjcmVhdGUgYW4gaW5pdGlhbCBpbiB0aGUgY29uc3RydWN0b3IsIG92ZXJ3cml0dGVuIGJ5IGluaXRpYWxpemVXaW5zdG9uTG9nZ2VyKClcbiAgICB0aGlzLmluaXRpYWxpemVXaW5zdG9uTG9nZ2VyKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgcHVibGljIGdldFR5cGUoKTogTG9nZ2VyVHlwZSB7XG4gICAgcmV0dXJuICd3aW5zdG9uJztcbiAgfVxuXG4gIHB1YmxpYyBzZXRMb2dnZXJQcm9wcyhwcm9wczogTG9nZ2VyU2V0TG9nZ2VyUHJvcHMpIHtcbiAgICB0aGlzLmxldmVsID0gcHJvcHM/LmxldmVsID8/IHRoaXMubGV2ZWw7XG4gICAgdGhpcy5qc29uID0gcHJvcHM/Lmpzb24gPz8gdGhpcy5qc29uO1xuICAgIHRoaXMuY29sb3IgPSBwcm9wcz8uY29sb3IgPz8gdGhpcy5jb2xvcjtcbiAgICB0aGlzLnNpbGVudCA9IHByb3BzPy5zaWxlbnQgPz8gdGhpcy5zaWxlbnQ7XG4gICAgdGhpcy50aW1lc3RhbXAgPSBwcm9wcz8udGltZXN0YW1wID8/IHRoaXMudGltZXN0YW1wO1xuXG4gICAgLy8gUmVwbGFjZSB0aGUgbG9nZ2VyIGNvbXBsZXRlbHksIHVzaW5nIHRoZSBuZXcgY29uZmlndXJhdGlvblxuICAgIHRoaXMuaW5pdGlhbGl6ZVdpbnN0b25Mb2dnZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVdpbnN0b25Mb2dnZXIoKSB7XG4gICAgd2luc3Rvbi5hZGRDb2xvcnMobG9nTGV2ZWxDb2xvcnMpOyAvLyBzZXQgY29sb3JzIGZvciB0aGUgY3VzdG9tIGxldmVscyBkZWZpbmVkIGluIHRoZSBsb2dnZXJcblxuICAgIC8vIEJ1aWxkIHRoZSBvdXRwdXQgbG9nIGZvcm1hdCBzcGVjaWZpY2F0aW9uXG4gICAgLy8gT3JkZXIgb2YgaG93IGZvcm1hdHMgYXJlIGNvbWJpbmVkIG1hdHRlcnMgaGVyZSEhXG4gICAgbGV0IGZvcm1hdDogd2luc3Rvbi5Mb2dmb3JtLkZvcm1hdCA9IHdpbnN0b24uZm9ybWF0LmNvbWJpbmUoKTtcblxuICAgIGlmICh0aGlzLnRpbWVzdGFtcCkge1xuICAgICAgZm9ybWF0ID0gd2luc3Rvbi5mb3JtYXQuY29tYmluZShmb3JtYXQsIHdpbnN0b24uZm9ybWF0LnRpbWVzdGFtcCgpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuanNvbikge1xuICAgICAgZm9ybWF0ID0gd2luc3Rvbi5mb3JtYXQuY29tYmluZShmb3JtYXQsIHdpbnN0b24uZm9ybWF0Lmpzb24oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmNvbG9yKSB7XG4gICAgICAgIGZvcm1hdCA9IHdpbnN0b24uZm9ybWF0LmNvbWJpbmUoZm9ybWF0LCB3aW5zdG9uLmZvcm1hdC5jb2xvcml6ZSh7IGFsbDogdHJ1ZSB9KSk7XG4gICAgICB9XG4gICAgICBmb3JtYXQgPSB3aW5zdG9uLmZvcm1hdC5jb21iaW5lKFxuICAgICAgICBmb3JtYXQsXG4gICAgICAgIHdpbnN0b24uZm9ybWF0LnByaW50ZihcbiAgICAgICAgICAoaW5mbykgPT5cbiAgICAgICAgICAgIGBbJHtpbmZvLnRpbWVzdGFtcCBhcyBzdHJpbmd9ICR7dGhpcy5uYW1lICE9PSAnZGVmYXVsdCcgPyBgJHt0aGlzLm5hbWV9IGAgOiAnJ30oJHtpbmZvLmxldmVsfSldICR7aW5mby5tZXNzYWdlIGFzIHN0cmluZ31gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgY3JlYXRlIHRoZSBsb2dnZXJcblxuICAgIHRoaXMubG9nZ2VyID0gd2luc3Rvbi5jcmVhdGVMb2dnZXIoe1xuICAgICAgbGV2ZWxzOiBsb2dMZXZlbHMsXG4gICAgICBsZXZlbDogdGhpcy5sZXZlbCA/PyAnZXJyb3InLFxuICAgICAgZm9ybWF0OiBmb3JtYXQsXG4gICAgICB0cmFuc3BvcnRzOiBbbmV3IHdpbnN0b24udHJhbnNwb3J0cy5Db25zb2xlKCldLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGxvZyhcbiAgICBsZXZlbDogTG9nZ2VyTGV2ZWwsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIC4uLnJlc3Q6IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0KVtdXG4gICk6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyLmxvZyhsZXZlbCwgbWVzc2FnZSwgLi4ucmVzdCk7XG4gIH1cblxuICBwdWJsaWMgZmF0YWwobWVzc2FnZTogc3RyaW5nLCAuLi5yZXN0OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdClbXSk6IHZvaWQge1xuICAgIHRoaXMubG9nKCdmYXRhbCcsIG1lc3NhZ2UsIC4uLnJlc3QpO1xuICB9XG5cbiAgcHVibGljIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgLi4ucmVzdDogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QpW10pOiB2b2lkIHtcbiAgICB0aGlzLmxvZygnZXJyb3InLCBtZXNzYWdlLCAuLi5yZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyB3YXJuKG1lc3NhZ2U6IHN0cmluZywgLi4ucmVzdDogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QpW10pOiB2b2lkIHtcbiAgICB0aGlzLmxvZygnd2FybicsIG1lc3NhZ2UsIC4uLnJlc3QpO1xuICB9XG5cbiAgcHVibGljIGluZm8obWVzc2FnZTogc3RyaW5nLCAuLi5yZXN0OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdClbXSk6IHZvaWQge1xuICAgIHRoaXMubG9nKCdpbmZvJywgbWVzc2FnZSwgLi4ucmVzdCk7XG4gIH1cblxuICBwdWJsaWMgZGVidWcobWVzc2FnZTogc3RyaW5nLCAuLi5yZXN0OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdClbXSk6IHZvaWQge1xuICAgIHRoaXMubG9nKCdkZWJ1ZycsIG1lc3NhZ2UsIC4uLnJlc3QpO1xuICB9XG5cbiAgcHVibGljIHRyYWNlKG1lc3NhZ2U6IHN0cmluZywgLi4ucmVzdDogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QpW10pOiB2b2lkIHtcbiAgICB0aGlzLmxvZygndHJhY2UnLCBtZXNzYWdlLCAuLi5yZXN0KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2luc3RvbkxvZ2dlcihwcm9wcz86IExvZ2dlclByb3BzKTogSUxvZ2dlciB7XG4gIHJldHVybiBuZXcgV2luc3RvbkxvZ2dlcihwcm9wcyk7XG59XG4iXX0=
package/package.json ADDED
@@ -0,0 +1,137 @@
1
+ {
2
+ "name": "@ncfour-us/logging",
3
+ "repository": {
4
+ "type": "git",
5
+ "url": "https://github.com/ncfour-us/logging.git"
6
+ },
7
+ "author": {
8
+ "name": "Tim Hahn",
9
+ "email": "hahntj@gmail.com",
10
+ "organization": false
11
+ },
12
+ "devDependencies": {
13
+ "@eslint/compat": "^2.1.0",
14
+ "@eslint/eslintrc": "^3.3.5",
15
+ "@eslint/js": "^9.39.4",
16
+ "@jest/globals": "^29.7.0",
17
+ "@ncfour-us/projen-utils": "^0.1.9",
18
+ "@stylistic/eslint-plugin": "^5.10.0",
19
+ "@types/jest": "^29.5.14",
20
+ "@types/node": "^24",
21
+ "@typescript-eslint/eslint-plugin": "^8.59.4",
22
+ "@typescript-eslint/parser": "^8.59.4",
23
+ "commit-and-tag-version": "^12",
24
+ "constructs": "^10.0.0",
25
+ "eslint": "^9.39.4",
26
+ "eslint-import-resolver-typescript": "^3.10.1",
27
+ "eslint-plugin-import": "^2.32.0",
28
+ "globals": "^14.0.0",
29
+ "jest": "^29.7.0",
30
+ "jest-junit": "^17",
31
+ "jiti": "^2.7.0",
32
+ "prettier": "^3.8.3",
33
+ "projen": "^0.99.70",
34
+ "ts-jest": "^29.4.11",
35
+ "ts-node": "^10.9.2",
36
+ "tsx": "^4.22.3",
37
+ "typescript": "^5.9.3"
38
+ },
39
+ "dependencies": {
40
+ "chalk": "^4.1.2",
41
+ "winston": "^3.19.0"
42
+ },
43
+ "engines": {
44
+ "node": ">= 24.0.0"
45
+ },
46
+ "devEngines": {
47
+ "packageManager": {
48
+ "name": "pnpm",
49
+ "version": ">=10",
50
+ "onFail": "ignore"
51
+ }
52
+ },
53
+ "main": "lib/index.js",
54
+ "license": "MIT",
55
+ "version": "0.0.8",
56
+ "jest": {
57
+ "coverageProvider": "v8",
58
+ "extensionsToTreatAsEsm": [
59
+ ".ts"
60
+ ],
61
+ "moduleNameMapper": {
62
+ "^(\\.{1,2}/.*)\\.js$": "$1"
63
+ },
64
+ "transform": {
65
+ "^.+\\.(mt|t|cj|j)s$": [
66
+ "ts-jest",
67
+ {
68
+ "useESM": true,
69
+ "tsconfig": "tsconfig.dev.json"
70
+ }
71
+ ]
72
+ },
73
+ "testMatch": [
74
+ "<rootDir>/@(src|test)/**/*(*.)@(spec|test).ts?(x)",
75
+ "<rootDir>/@(src|test)/**/__tests__/**/*.ts?(x)",
76
+ "<rootDir>/@(projenrc)/**/*(*.)@(spec|test).ts?(x)",
77
+ "<rootDir>/@(projenrc)/**/__tests__/**/*.ts?(x)"
78
+ ],
79
+ "clearMocks": true,
80
+ "collectCoverage": true,
81
+ "coverageReporters": [
82
+ "json",
83
+ "lcov",
84
+ "clover",
85
+ "cobertura",
86
+ "text"
87
+ ],
88
+ "coverageDirectory": "coverage",
89
+ "coveragePathIgnorePatterns": [
90
+ "/node_modules/"
91
+ ],
92
+ "testPathIgnorePatterns": [
93
+ "/node_modules/"
94
+ ],
95
+ "watchPathIgnorePatterns": [
96
+ "/node_modules/"
97
+ ],
98
+ "reporters": [
99
+ "default",
100
+ [
101
+ "jest-junit",
102
+ {
103
+ "outputDirectory": "test-reports"
104
+ }
105
+ ]
106
+ ]
107
+ },
108
+ "types": "lib/index.d.ts",
109
+ "type": "module",
110
+ "exports": {
111
+ ".": "./lib/logger.js"
112
+ },
113
+ "//": "~~ Generated by projen. To modify, edit .projenrc.ts and run \"pnpm exec projen\".",
114
+ "scripts": {
115
+ "build": "projen build",
116
+ "bump": "projen bump",
117
+ "clobber": "projen clobber",
118
+ "compile": "projen compile",
119
+ "default": "projen default",
120
+ "eject": "projen eject",
121
+ "eslint": "projen eslint",
122
+ "package": "projen package",
123
+ "post-compile": "projen post-compile",
124
+ "post-upgrade": "projen post-upgrade",
125
+ "pre-compile": "projen pre-compile",
126
+ "publish:git": "projen publish:git",
127
+ "publish:local": "projen publish:local",
128
+ "publish:npm": "projen publish:npm",
129
+ "release": "projen release",
130
+ "test": "projen test",
131
+ "test:watch": "projen test:watch",
132
+ "unbump": "projen unbump",
133
+ "upgrade": "projen upgrade",
134
+ "watch": "projen watch",
135
+ "projen": "projen"
136
+ }
137
+ }