@lichens-innovation/ts-common 1.15.5 → 1.16.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/dist/logger.cjs +64 -23
- package/dist/logger.cjs.map +1 -1
- package/dist/logger.d.cts +10 -4
- package/dist/logger.d.ts +10 -4
- package/dist/logger.js +63 -24
- package/dist/logger.js.map +1 -1
- package/package.json +1 -1
package/dist/logger.cjs
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var fs = require('fs');
|
|
4
|
+
var path = require('path');
|
|
3
5
|
var pino = require('pino');
|
|
4
6
|
|
|
5
7
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
8
|
|
|
9
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
7
10
|
var pino__default = /*#__PURE__*/_interopDefault(pino);
|
|
8
11
|
|
|
9
12
|
// src/logger/logger.utils.ts
|
|
@@ -87,39 +90,77 @@ var browserOptions = {
|
|
|
87
90
|
}
|
|
88
91
|
}
|
|
89
92
|
};
|
|
93
|
+
var createPrettyTransport = () => {
|
|
94
|
+
try {
|
|
95
|
+
return pino__default.default.transport({ target: "pino-pretty", options: { colorize: true } });
|
|
96
|
+
} catch (e) {
|
|
97
|
+
console.warn("pino-pretty not installed, using default pino output", e);
|
|
98
|
+
return pino__default.default.destination(1);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
var createNodePinoLogger = () => pino__default.default(baseOptions, createPrettyTransport());
|
|
90
102
|
var createPinoLogger = () => {
|
|
91
103
|
if (isRuntimeEnvNodeJs()) {
|
|
92
|
-
|
|
93
|
-
const transport = pino__default.default.transport({ target: "pino-pretty", options: { colorize: true } });
|
|
94
|
-
return pino__default.default(baseOptions, transport);
|
|
95
|
-
} catch (e) {
|
|
96
|
-
console.warn("pino-pretty not installed, using default pino output", e);
|
|
97
|
-
return pino__default.default(baseOptions);
|
|
98
|
-
}
|
|
104
|
+
return createNodePinoLogger();
|
|
99
105
|
}
|
|
100
106
|
return pino__default.default(browserOptions);
|
|
101
107
|
};
|
|
102
|
-
var
|
|
103
|
-
|
|
104
|
-
|
|
108
|
+
var createFileDestination = (logFile) => {
|
|
109
|
+
fs.mkdirSync(path__default.default.dirname(logFile), { recursive: true });
|
|
110
|
+
return pino__default.default.destination({ dest: logFile, append: true, mkdir: true });
|
|
105
111
|
};
|
|
106
|
-
var
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
112
|
+
var createNodePinoWithOptions = ({ logFile, console: useConsole = true }) => {
|
|
113
|
+
const streams = [];
|
|
114
|
+
if (!isNullish(logFile)) {
|
|
115
|
+
streams.push({ stream: createFileDestination(logFile) });
|
|
116
|
+
}
|
|
117
|
+
if (useConsole) {
|
|
118
|
+
streams.push({ stream: createPrettyTransport() });
|
|
119
|
+
}
|
|
120
|
+
if (streams.length === 0) {
|
|
121
|
+
return pino__default.default(baseOptions);
|
|
122
|
+
}
|
|
123
|
+
if (streams.length === 1) {
|
|
124
|
+
return pino__default.default(baseOptions, streams[0].stream);
|
|
111
125
|
}
|
|
126
|
+
return pino__default.default(baseOptions, pino__default.default.multistream(streams));
|
|
112
127
|
};
|
|
113
|
-
var
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
128
|
+
var buildLoggerApi = (pinoInstance) => {
|
|
129
|
+
const consoleMethodToPinoMethod = (level) => (message, payload) => {
|
|
130
|
+
if (isNullish(payload)) {
|
|
131
|
+
pinoInstance[level](message);
|
|
132
|
+
} else {
|
|
133
|
+
pinoInstance[level](payload, message);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
return {
|
|
137
|
+
trace: consoleMethodToPinoMethod("trace"),
|
|
138
|
+
debug: consoleMethodToPinoMethod("debug"),
|
|
139
|
+
info: consoleMethodToPinoMethod("info"),
|
|
140
|
+
warn: consoleMethodToPinoMethod("warn"),
|
|
141
|
+
error: consoleMethodToPinoMethod("error"),
|
|
142
|
+
fatal: consoleMethodToPinoMethod("fatal"),
|
|
143
|
+
log: consoleMethodToPinoMethod("info")
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
var createLogger = (options) => {
|
|
147
|
+
if (!isRuntimeEnvNodeJs()) {
|
|
148
|
+
return buildLoggerApi(pino__default.default(browserOptions));
|
|
149
|
+
}
|
|
150
|
+
const hasFile = !isNullish(options?.logFile);
|
|
151
|
+
const useConsole = options?.console ?? true;
|
|
152
|
+
if (!hasFile && useConsole) {
|
|
153
|
+
return buildLoggerApi(createNodePinoLogger());
|
|
154
|
+
}
|
|
155
|
+
return buildLoggerApi(createNodePinoWithOptions({ logFile: options?.logFile, console: useConsole }));
|
|
156
|
+
};
|
|
157
|
+
var pinoLogger = createPinoLogger();
|
|
158
|
+
var setLoggerMinimumLevel = (level) => {
|
|
159
|
+
pinoLogger.level = level;
|
|
121
160
|
};
|
|
161
|
+
var logger = buildLoggerApi(pinoLogger);
|
|
122
162
|
|
|
163
|
+
exports.createLogger = createLogger;
|
|
123
164
|
exports.logger = logger;
|
|
124
165
|
exports.setLoggerMinimumLevel = setLoggerMinimumLevel;
|
|
125
166
|
//# sourceMappingURL=logger.cjs.map
|
package/dist/logger.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/types.utils.ts","../src/utils/runtime-env.utils.ts","../src/logger/logger.utils.ts"],"names":["pino"],"mappings":"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","file":"logger.cjs","sourcesContent":["export const NO_OP: () => void = () => {};\n\nexport const isNullish = (value: unknown): value is null | undefined => value === null || value === undefined;\n\nexport const isNumber = (value?: unknown | null): value is number => {\n if (isNullish(value)) {\n return false;\n }\n\n if (typeof value !== 'number') {\n return false;\n }\n\n if (isNaN(value)) {\n return false;\n }\n\n return true;\n};\n\nexport const isString = (value?: unknown | null): value is string => {\n if (isNullish(value)) {\n return false;\n }\n\n if (typeof value !== 'string') {\n return false;\n }\n\n return true;\n};\n","import { isNullish } from \"./types.utils\";\n\n/**\n * Returns true when running in Node.js.\n * Checks for process.versions.node to avoid false positives in Web Workers.\n */\nexport const isRuntimeEnvNodeJs = (): boolean => {\n if (typeof window !== \"undefined\") return false;\n if (typeof process === \"undefined\") return false;\n if (isNullish(process?.versions?.node)) return false;\n\n return true;\n};\n","import pino from \"pino\";\nimport { isRuntimeEnvNodeJs } from \"../utils/runtime-env.utils\";\nimport { isNullish } from \"../utils/types.utils\";\n\nconst LEVEL_LABELS: Record<number, string> = {\n 10: \"trace\",\n 20: \"debug\",\n 30: \"info\",\n 40: \"warn\",\n 50: \"error\",\n 60: \"fatal\",\n};\n\nconst LEVEL_COLORS: Record<string, string> = {\n trace: \"color: #94a3b8\",\n debug: \"color: #22d3ee\",\n info: \"color: #4ade80\",\n warn: \"color: #fbbf24\",\n error: \"color: #f87171\",\n fatal: \"color: #dc2626; font-weight: bold\",\n};\n\nconst MESSAGE_KEY = \"msg\";\n\ntype LogObject = Record<string, unknown> & { level?: number; time?: string; [MESSAGE_KEY]?: string };\n\nconst getLevelLabel = (levelNum: number): string => LEVEL_LABELS[levelNum] ?? \"info\";\n\nconst getLevelColor = (label: string): string => LEVEL_COLORS[label] ?? LEVEL_COLORS.info;\n\nconst getLogTimestamp = ({ time }: LogObject): string => (typeof time === \"string\" ? time : new Date().toISOString());\n\ntype ConsoleMethod = \"log\" | \"warn\" | \"error\";\nconst getConsoleMethod = (levelNum: number): ConsoleMethod => {\n if (levelNum >= 50) return \"error\";\n if (levelNum >= 40) return \"warn\";\n return \"log\";\n};\n\nconst getRestPayload = (obj: LogObject): Record<string, unknown> =>\n Object.keys(obj)\n .filter((k) => k !== \"level\" && k !== \"time\" && k !== MESSAGE_KEY)\n .reduce<Record<string, unknown>>((acc, k) => {\n acc[k] = obj[k];\n return acc;\n }, {});\n\ntype BuildMainArgsParams = {\n timestamp: string;\n label: string;\n color: string;\n msg: unknown;\n extraArgs: unknown[];\n rest: Record<string, unknown>;\n};\n\nconst buildMainArgs = ({ timestamp, label, color, msg, extraArgs, rest }: BuildMainArgsParams): unknown[] => {\n const prefix = `[${timestamp}]`;\n const levelPart = ` ${label.toUpperCase()} `;\n const hasRest = Object.keys(rest).length > 0;\n const mainArgs: unknown[] = [`${prefix}%c${levelPart}%c`, color, \"color: inherit\"];\n\n if (!isNullish(msg)) mainArgs.push(msg);\n if (extraArgs.length > 0) mainArgs.push(...extraArgs);\n if (hasRest) mainArgs.push(rest);\n\n return mainArgs;\n};\n\nconst baseOptions: pino.LoggerOptions = {\n timestamp: pino.stdTimeFunctions.isoTime,\n messageKey: MESSAGE_KEY,\n};\n\nconst browserOptions: pino.LoggerOptions = {\n ...baseOptions,\n browser: {\n write: (logObj: object, ...args: unknown[]) => {\n const obj = logObj as LogObject;\n const levelNum = obj.level ?? 30;\n const label = getLevelLabel(levelNum);\n const color = getLevelColor(label);\n const timestamp = getLogTimestamp(obj);\n const msg = obj[MESSAGE_KEY];\n const rest = getRestPayload(obj);\n const consoleMethod = getConsoleMethod(levelNum);\n const mainArgs = buildMainArgs({\n timestamp,\n label,\n color,\n msg,\n extraArgs: args,\n rest,\n });\n (console[consoleMethod] as (...a: unknown[]) => void)(...mainArgs);\n },\n },\n};\n\nconst createPinoLogger = (): pino.Logger => {\n if (isRuntimeEnvNodeJs()) {\n try {\n const transport = pino.transport({ target: \"pino-pretty\", options: { colorize: true } });\n return pino(baseOptions, transport);\n } catch (e: unknown) {\n console.warn(\"pino-pretty not installed, using default pino output\", e);\n return pino(baseOptions);\n }\n }\n\n return pino(browserOptions);\n};\n\nconst pinoLogger = createPinoLogger();\n\nexport type Level = \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\";\n\nexport const setLoggerMinimumLevel = (level: Level) => {\n pinoLogger.level = level;\n};\n\nconst consoleMethodToPinoMethod = (level: Level) => (message: string, payload?: Record<string, unknown>) => {\n if (isNullish(payload)) {\n pinoLogger[level](message);\n } else {\n pinoLogger[level](payload, message);\n }\n};\n\nexport const logger = {\n trace: consoleMethodToPinoMethod(\"trace\"),\n debug: consoleMethodToPinoMethod(\"debug\"),\n info: consoleMethodToPinoMethod(\"info\"),\n warn: consoleMethodToPinoMethod(\"warn\"),\n error: consoleMethodToPinoMethod(\"error\"),\n fatal: consoleMethodToPinoMethod(\"fatal\"),\n log: consoleMethodToPinoMethod(\"info\"),\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/types.utils.ts","../src/utils/runtime-env.utils.ts","../src/logger/logger.utils.ts"],"names":["pino","mkdirSync","path"],"mappings":"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","file":"logger.cjs","sourcesContent":["export const NO_OP: () => void = () => {};\n\nexport const isNullish = (value: unknown): value is null | undefined => value === null || value === undefined;\n\nexport const isNumber = (value?: unknown | null): value is number => {\n if (isNullish(value)) {\n return false;\n }\n\n if (typeof value !== 'number') {\n return false;\n }\n\n if (isNaN(value)) {\n return false;\n }\n\n return true;\n};\n\nexport const isString = (value?: unknown | null): value is string => {\n if (isNullish(value)) {\n return false;\n }\n\n if (typeof value !== 'string') {\n return false;\n }\n\n return true;\n};\n","import { isNullish } from \"./types.utils\";\n\n/**\n * Returns true when running in Node.js.\n * Checks for process.versions.node to avoid false positives in Web Workers.\n */\nexport const isRuntimeEnvNodeJs = (): boolean => {\n if (typeof window !== \"undefined\") return false;\n if (typeof process === \"undefined\") return false;\n if (isNullish(process?.versions?.node)) return false;\n\n return true;\n};\n","import { mkdirSync } from \"node:fs\";\nimport path from \"node:path\";\nimport pino from \"pino\";\nimport { isRuntimeEnvNodeJs } from \"../utils/runtime-env.utils\";\nimport { isNullish } from \"../utils/types.utils\";\n\nconst LEVEL_LABELS: Record<number, string> = {\n 10: \"trace\",\n 20: \"debug\",\n 30: \"info\",\n 40: \"warn\",\n 50: \"error\",\n 60: \"fatal\",\n};\n\nconst LEVEL_COLORS: Record<string, string> = {\n trace: \"color: #94a3b8\",\n debug: \"color: #22d3ee\",\n info: \"color: #4ade80\",\n warn: \"color: #fbbf24\",\n error: \"color: #f87171\",\n fatal: \"color: #dc2626; font-weight: bold\",\n};\n\nconst MESSAGE_KEY = \"msg\";\n\ntype LogObject = Record<string, unknown> & { level?: number; time?: string; [MESSAGE_KEY]?: string };\n\nconst getLevelLabel = (levelNum: number): string => LEVEL_LABELS[levelNum] ?? \"info\";\n\nconst getLevelColor = (label: string): string => LEVEL_COLORS[label] ?? LEVEL_COLORS.info;\n\nconst getLogTimestamp = ({ time }: LogObject): string => (typeof time === \"string\" ? time : new Date().toISOString());\n\ntype ConsoleMethod = \"log\" | \"warn\" | \"error\";\nconst getConsoleMethod = (levelNum: number): ConsoleMethod => {\n if (levelNum >= 50) return \"error\";\n if (levelNum >= 40) return \"warn\";\n return \"log\";\n};\n\nconst getRestPayload = (obj: LogObject): Record<string, unknown> =>\n Object.keys(obj)\n .filter((k) => k !== \"level\" && k !== \"time\" && k !== MESSAGE_KEY)\n .reduce<Record<string, unknown>>((acc, k) => {\n acc[k] = obj[k];\n return acc;\n }, {});\n\ntype BuildMainArgsParams = {\n timestamp: string;\n label: string;\n color: string;\n msg: unknown;\n extraArgs: unknown[];\n rest: Record<string, unknown>;\n};\n\nconst buildMainArgs = ({ timestamp, label, color, msg, extraArgs, rest }: BuildMainArgsParams): unknown[] => {\n const prefix = `[${timestamp}]`;\n const levelPart = ` ${label.toUpperCase()} `;\n const hasRest = Object.keys(rest).length > 0;\n const mainArgs: unknown[] = [`${prefix}%c${levelPart}%c`, color, \"color: inherit\"];\n\n if (!isNullish(msg)) mainArgs.push(msg);\n if (extraArgs.length > 0) mainArgs.push(...extraArgs);\n if (hasRest) mainArgs.push(rest);\n\n return mainArgs;\n};\n\nconst baseOptions: pino.LoggerOptions = {\n timestamp: pino.stdTimeFunctions.isoTime,\n messageKey: MESSAGE_KEY,\n};\n\nconst browserOptions: pino.LoggerOptions = {\n ...baseOptions,\n browser: {\n write: (logObj: object, ...args: unknown[]) => {\n const obj = logObj as LogObject;\n const levelNum = obj.level ?? 30;\n const label = getLevelLabel(levelNum);\n const color = getLevelColor(label);\n const timestamp = getLogTimestamp(obj);\n const msg = obj[MESSAGE_KEY];\n const rest = getRestPayload(obj);\n const consoleMethod = getConsoleMethod(levelNum);\n const mainArgs = buildMainArgs({\n timestamp,\n label,\n color,\n msg,\n extraArgs: args,\n rest,\n });\n (console[consoleMethod] as (...a: unknown[]) => void)(...mainArgs);\n },\n },\n};\n\nconst createPrettyTransport = (): pino.DestinationStream => {\n try {\n return pino.transport({ target: \"pino-pretty\", options: { colorize: true } });\n } catch (e: unknown) {\n console.warn(\"pino-pretty not installed, using default pino output\", e);\n return pino.destination(1);\n }\n};\n\nconst createNodePinoLogger = (): pino.Logger => pino(baseOptions, createPrettyTransport());\n\nconst createPinoLogger = (): pino.Logger => {\n if (isRuntimeEnvNodeJs()) {\n return createNodePinoLogger();\n }\n\n return pino(browserOptions);\n};\n\nexport type CreateLoggerOptions = {\n logFile?: string;\n console?: boolean;\n};\n\nconst createFileDestination = (logFile: string): pino.DestinationStream => {\n mkdirSync(path.dirname(logFile), { recursive: true });\n return pino.destination({ dest: logFile, append: true, mkdir: true });\n};\n\nconst createNodePinoWithOptions = ({ logFile, console: useConsole = true }: CreateLoggerOptions): pino.Logger => {\n const streams: pino.StreamEntry[] = [];\n\n if (!isNullish(logFile)) {\n streams.push({ stream: createFileDestination(logFile) });\n }\n\n if (useConsole) {\n streams.push({ stream: createPrettyTransport() });\n }\n\n if (streams.length === 0) {\n return pino(baseOptions);\n }\n\n if (streams.length === 1) {\n return pino(baseOptions, streams[0]!.stream);\n }\n\n return pino(baseOptions, pino.multistream(streams));\n};\n\nexport type Logger = {\n trace: (message: string, payload?: Record<string, unknown>) => void;\n debug: (message: string, payload?: Record<string, unknown>) => void;\n info: (message: string, payload?: Record<string, unknown>) => void;\n warn: (message: string, payload?: Record<string, unknown>) => void;\n error: (message: string, payload?: Record<string, unknown>) => void;\n fatal: (message: string, payload?: Record<string, unknown>) => void;\n log: (message: string, payload?: Record<string, unknown>) => void;\n};\n\nconst buildLoggerApi = (pinoInstance: pino.Logger): Logger => {\n const consoleMethodToPinoMethod =\n (level: Level) =>\n (message: string, payload?: Record<string, unknown>): void => {\n if (isNullish(payload)) {\n pinoInstance[level](message);\n } else {\n pinoInstance[level](payload, message);\n }\n };\n\n return {\n trace: consoleMethodToPinoMethod(\"trace\"),\n debug: consoleMethodToPinoMethod(\"debug\"),\n info: consoleMethodToPinoMethod(\"info\"),\n warn: consoleMethodToPinoMethod(\"warn\"),\n error: consoleMethodToPinoMethod(\"error\"),\n fatal: consoleMethodToPinoMethod(\"fatal\"),\n log: consoleMethodToPinoMethod(\"info\"),\n };\n};\n\nexport const createLogger = (options?: CreateLoggerOptions): Logger => {\n if (!isRuntimeEnvNodeJs()) {\n return buildLoggerApi(pino(browserOptions));\n }\n\n const hasFile = !isNullish(options?.logFile);\n const useConsole = options?.console ?? true;\n\n if (!hasFile && useConsole) {\n return buildLoggerApi(createNodePinoLogger());\n }\n\n return buildLoggerApi(createNodePinoWithOptions({ logFile: options?.logFile, console: useConsole }));\n};\n\nconst pinoLogger = createPinoLogger();\n\nexport type Level = \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\";\n\nexport const setLoggerMinimumLevel = (level: Level) => {\n pinoLogger.level = level;\n};\n\nexport const logger = buildLoggerApi(pinoLogger);\n"]}
|
package/dist/logger.d.cts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
type
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
type CreateLoggerOptions = {
|
|
2
|
+
logFile?: string;
|
|
3
|
+
console?: boolean;
|
|
4
|
+
};
|
|
5
|
+
type Logger = {
|
|
4
6
|
trace: (message: string, payload?: Record<string, unknown>) => void;
|
|
5
7
|
debug: (message: string, payload?: Record<string, unknown>) => void;
|
|
6
8
|
info: (message: string, payload?: Record<string, unknown>) => void;
|
|
@@ -9,5 +11,9 @@ declare const logger: {
|
|
|
9
11
|
fatal: (message: string, payload?: Record<string, unknown>) => void;
|
|
10
12
|
log: (message: string, payload?: Record<string, unknown>) => void;
|
|
11
13
|
};
|
|
14
|
+
declare const createLogger: (options?: CreateLoggerOptions) => Logger;
|
|
15
|
+
type Level = "trace" | "debug" | "info" | "warn" | "error" | "fatal";
|
|
16
|
+
declare const setLoggerMinimumLevel: (level: Level) => void;
|
|
17
|
+
declare const logger: Logger;
|
|
12
18
|
|
|
13
|
-
export { type Level, logger, setLoggerMinimumLevel };
|
|
19
|
+
export { type CreateLoggerOptions, type Level, type Logger, createLogger, logger, setLoggerMinimumLevel };
|
package/dist/logger.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
type
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
type CreateLoggerOptions = {
|
|
2
|
+
logFile?: string;
|
|
3
|
+
console?: boolean;
|
|
4
|
+
};
|
|
5
|
+
type Logger = {
|
|
4
6
|
trace: (message: string, payload?: Record<string, unknown>) => void;
|
|
5
7
|
debug: (message: string, payload?: Record<string, unknown>) => void;
|
|
6
8
|
info: (message: string, payload?: Record<string, unknown>) => void;
|
|
@@ -9,5 +11,9 @@ declare const logger: {
|
|
|
9
11
|
fatal: (message: string, payload?: Record<string, unknown>) => void;
|
|
10
12
|
log: (message: string, payload?: Record<string, unknown>) => void;
|
|
11
13
|
};
|
|
14
|
+
declare const createLogger: (options?: CreateLoggerOptions) => Logger;
|
|
15
|
+
type Level = "trace" | "debug" | "info" | "warn" | "error" | "fatal";
|
|
16
|
+
declare const setLoggerMinimumLevel: (level: Level) => void;
|
|
17
|
+
declare const logger: Logger;
|
|
12
18
|
|
|
13
|
-
export { type Level, logger, setLoggerMinimumLevel };
|
|
19
|
+
export { type CreateLoggerOptions, type Level, type Logger, createLogger, logger, setLoggerMinimumLevel };
|
package/dist/logger.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { mkdirSync } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
1
3
|
import pino from 'pino';
|
|
2
4
|
|
|
3
5
|
// src/logger/logger.utils.ts
|
|
@@ -81,39 +83,76 @@ var browserOptions = {
|
|
|
81
83
|
}
|
|
82
84
|
}
|
|
83
85
|
};
|
|
86
|
+
var createPrettyTransport = () => {
|
|
87
|
+
try {
|
|
88
|
+
return pino.transport({ target: "pino-pretty", options: { colorize: true } });
|
|
89
|
+
} catch (e) {
|
|
90
|
+
console.warn("pino-pretty not installed, using default pino output", e);
|
|
91
|
+
return pino.destination(1);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
var createNodePinoLogger = () => pino(baseOptions, createPrettyTransport());
|
|
84
95
|
var createPinoLogger = () => {
|
|
85
96
|
if (isRuntimeEnvNodeJs()) {
|
|
86
|
-
|
|
87
|
-
const transport = pino.transport({ target: "pino-pretty", options: { colorize: true } });
|
|
88
|
-
return pino(baseOptions, transport);
|
|
89
|
-
} catch (e) {
|
|
90
|
-
console.warn("pino-pretty not installed, using default pino output", e);
|
|
91
|
-
return pino(baseOptions);
|
|
92
|
-
}
|
|
97
|
+
return createNodePinoLogger();
|
|
93
98
|
}
|
|
94
99
|
return pino(browserOptions);
|
|
95
100
|
};
|
|
96
|
-
var
|
|
97
|
-
|
|
98
|
-
|
|
101
|
+
var createFileDestination = (logFile) => {
|
|
102
|
+
mkdirSync(path.dirname(logFile), { recursive: true });
|
|
103
|
+
return pino.destination({ dest: logFile, append: true, mkdir: true });
|
|
99
104
|
};
|
|
100
|
-
var
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
+
var createNodePinoWithOptions = ({ logFile, console: useConsole = true }) => {
|
|
106
|
+
const streams = [];
|
|
107
|
+
if (!isNullish(logFile)) {
|
|
108
|
+
streams.push({ stream: createFileDestination(logFile) });
|
|
109
|
+
}
|
|
110
|
+
if (useConsole) {
|
|
111
|
+
streams.push({ stream: createPrettyTransport() });
|
|
112
|
+
}
|
|
113
|
+
if (streams.length === 0) {
|
|
114
|
+
return pino(baseOptions);
|
|
115
|
+
}
|
|
116
|
+
if (streams.length === 1) {
|
|
117
|
+
return pino(baseOptions, streams[0].stream);
|
|
105
118
|
}
|
|
119
|
+
return pino(baseOptions, pino.multistream(streams));
|
|
106
120
|
};
|
|
107
|
-
var
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
121
|
+
var buildLoggerApi = (pinoInstance) => {
|
|
122
|
+
const consoleMethodToPinoMethod = (level) => (message, payload) => {
|
|
123
|
+
if (isNullish(payload)) {
|
|
124
|
+
pinoInstance[level](message);
|
|
125
|
+
} else {
|
|
126
|
+
pinoInstance[level](payload, message);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
return {
|
|
130
|
+
trace: consoleMethodToPinoMethod("trace"),
|
|
131
|
+
debug: consoleMethodToPinoMethod("debug"),
|
|
132
|
+
info: consoleMethodToPinoMethod("info"),
|
|
133
|
+
warn: consoleMethodToPinoMethod("warn"),
|
|
134
|
+
error: consoleMethodToPinoMethod("error"),
|
|
135
|
+
fatal: consoleMethodToPinoMethod("fatal"),
|
|
136
|
+
log: consoleMethodToPinoMethod("info")
|
|
137
|
+
};
|
|
138
|
+
};
|
|
139
|
+
var createLogger = (options) => {
|
|
140
|
+
if (!isRuntimeEnvNodeJs()) {
|
|
141
|
+
return buildLoggerApi(pino(browserOptions));
|
|
142
|
+
}
|
|
143
|
+
const hasFile = !isNullish(options?.logFile);
|
|
144
|
+
const useConsole = options?.console ?? true;
|
|
145
|
+
if (!hasFile && useConsole) {
|
|
146
|
+
return buildLoggerApi(createNodePinoLogger());
|
|
147
|
+
}
|
|
148
|
+
return buildLoggerApi(createNodePinoWithOptions({ logFile: options?.logFile, console: useConsole }));
|
|
149
|
+
};
|
|
150
|
+
var pinoLogger = createPinoLogger();
|
|
151
|
+
var setLoggerMinimumLevel = (level) => {
|
|
152
|
+
pinoLogger.level = level;
|
|
115
153
|
};
|
|
154
|
+
var logger = buildLoggerApi(pinoLogger);
|
|
116
155
|
|
|
117
|
-
export { logger, setLoggerMinimumLevel };
|
|
156
|
+
export { createLogger, logger, setLoggerMinimumLevel };
|
|
118
157
|
//# sourceMappingURL=logger.js.map
|
|
119
158
|
//# sourceMappingURL=logger.js.map
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/types.utils.ts","../src/utils/runtime-env.utils.ts","../src/logger/logger.utils.ts"],"names":[],"mappings":";;;;;AAEO,IAAM,SAAA,GAAY,CAAC,KAAA,KAA8C,KAAA,KAAU,QAAQ,KAAA,KAAU,MAAA;;;ACI7F,IAAM,qBAAqB,MAAe;AAC/C,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAC1C,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,EAAa,OAAO,KAAA;AAC3C,EAAA,IAAI,SAAA,CAAU,OAAA,EAAS,QAAA,EAAU,IAAI,GAAG,OAAO,KAAA;AAE/C,EAAA,OAAO,IAAA;AACT,CAAA;;;ACRA,IAAM,YAAA,GAAuC;AAAA,EAC3C,EAAA,EAAI,OAAA;AAAA,EACJ,EAAA,EAAI,OAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,OAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEA,IAAM,YAAA,GAAuC;AAAA,EAC3C,KAAA,EAAO,gBAAA;AAAA,EACP,KAAA,EAAO,gBAAA;AAAA,EACP,IAAA,EAAM,gBAAA;AAAA,EACN,IAAA,EAAM,gBAAA;AAAA,EACN,KAAA,EAAO,gBAAA;AAAA,EACP,KAAA,EAAO;AACT,CAAA;AAEA,IAAM,WAAA,GAAc,KAAA;AAIpB,IAAM,aAAA,GAAgB,CAAC,QAAA,KAA6B,YAAA,CAAa,QAAQ,CAAA,IAAK,MAAA;AAE9E,IAAM,gBAAgB,CAAC,KAAA,KAA0B,YAAA,CAAa,KAAK,KAAK,YAAA,CAAa,IAAA;AAErF,IAAM,eAAA,GAAkB,CAAC,EAAE,IAAA,EAAK,KAA0B,OAAO,IAAA,KAAS,QAAA,GAAW,IAAA,GAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAGnH,IAAM,gBAAA,GAAmB,CAAC,QAAA,KAAoC;AAC5D,EAAA,IAAI,QAAA,IAAY,IAAI,OAAO,OAAA;AAC3B,EAAA,IAAI,QAAA,IAAY,IAAI,OAAO,MAAA;AAC3B,EAAA,OAAO,KAAA;AACT,CAAA;AAEA,IAAM,cAAA,GAAiB,CAAC,GAAA,KACtB,MAAA,CAAO,KAAK,GAAG,CAAA,CACZ,OAAO,CAAC,CAAA,KAAM,MAAM,OAAA,IAAW,CAAA,KAAM,UAAU,CAAA,KAAM,WAAW,EAChE,MAAA,CAAgC,CAAC,KAAK,CAAA,KAAM;AAC3C,EAAA,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA;AACd,EAAA,OAAO,GAAA;AACT,CAAA,EAAG,EAAE,CAAA;AAWT,IAAM,aAAA,GAAgB,CAAC,EAAE,SAAA,EAAW,OAAO,KAAA,EAAO,GAAA,EAAK,SAAA,EAAW,IAAA,EAAK,KAAsC;AAC3G,EAAA,MAAM,MAAA,GAAS,IAAI,SAAS,CAAA,CAAA,CAAA;AAC5B,EAAA,MAAM,SAAA,GAAY,CAAA,CAAA,EAAI,KAAA,CAAM,WAAA,EAAa,CAAA,CAAA,CAAA;AACzC,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,IAAI,EAAE,MAAA,GAAS,CAAA;AAC3C,EAAA,MAAM,QAAA,GAAsB,CAAC,CAAA,EAAG,MAAM,KAAK,SAAS,CAAA,EAAA,CAAA,EAAM,OAAO,gBAAgB,CAAA;AAEjF,EAAA,IAAI,CAAC,SAAA,CAAU,GAAG,CAAA,EAAG,QAAA,CAAS,KAAK,GAAG,CAAA;AACtC,EAAA,IAAI,UAAU,MAAA,GAAS,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,GAAG,SAAS,CAAA;AACpD,EAAA,IAAI,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAE/B,EAAA,OAAO,QAAA;AACT,CAAA;AAEA,IAAM,WAAA,GAAkC;AAAA,EACtC,SAAA,EAAW,KAAK,gBAAA,CAAiB,OAAA;AAAA,EACjC,UAAA,EAAY;AACd,CAAA;AAEA,IAAM,cAAA,GAAqC;AAAA,EACzC,GAAG,WAAA;AAAA,EACH,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,CAAC,MAAA,EAAA,GAAmB,IAAA,KAAoB;AAC7C,MAAA,MAAM,GAAA,GAAM,MAAA;AACZ,MAAA,MAAM,QAAA,GAAW,IAAI,KAAA,IAAS,EAAA;AAC9B,MAAA,MAAM,KAAA,GAAQ,cAAc,QAAQ,CAAA;AACpC,MAAA,MAAM,KAAA,GAAQ,cAAc,KAAK,CAAA;AACjC,MAAA,MAAM,SAAA,GAAY,gBAAgB,GAAG,CAAA;AACrC,MAAA,MAAM,GAAA,GAAM,IAAI,WAAW,CAAA;AAC3B,MAAA,MAAM,IAAA,GAAO,eAAe,GAAG,CAAA;AAC/B,MAAA,MAAM,aAAA,GAAgB,iBAAiB,QAAQ,CAAA;AAC/C,MAAA,MAAM,WAAW,aAAA,CAAc;AAAA,QAC7B,SAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA,GAAA;AAAA,QACA,SAAA,EAAW,IAAA;AAAA,QACX;AAAA,OACD,CAAA;AACD,MAAC,OAAA,CAAQ,aAAa,CAAA,CAAgC,GAAG,QAAQ,CAAA;AAAA,IACnE;AAAA;AAEJ,CAAA;AAEA,IAAM,mBAAmB,MAAmB;AAC1C,EAAA,IAAI,oBAAmB,EAAG;AACxB,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,EAAE,MAAA,EAAQ,aAAA,EAAe,OAAA,EAAS,EAAE,QAAA,EAAU,IAAA,EAAK,EAAG,CAAA;AACvF,MAAA,OAAO,IAAA,CAAK,aAAa,SAAS,CAAA;AAAA,IACpC,SAAS,CAAA,EAAY;AACnB,MAAA,OAAA,CAAQ,IAAA,CAAK,wDAAwD,CAAC,CAAA;AACtE,MAAA,OAAO,KAAK,WAAW,CAAA;AAAA,IACzB;AAAA,EACF;AAEA,EAAA,OAAO,KAAK,cAAc,CAAA;AAC5B,CAAA;AAEA,IAAM,aAAa,gBAAA,EAAiB;AAI7B,IAAM,qBAAA,GAAwB,CAAC,KAAA,KAAiB;AACrD,EAAA,UAAA,CAAW,KAAA,GAAQ,KAAA;AACrB;AAEA,IAAM,yBAAA,GAA4B,CAAC,KAAA,KAAiB,CAAC,SAAiB,OAAA,KAAsC;AAC1G,EAAA,IAAI,SAAA,CAAU,OAAO,CAAA,EAAG;AACtB,IAAA,UAAA,CAAW,KAAK,EAAE,OAAO,CAAA;AAAA,EAC3B,CAAA,MAAO;AACL,IAAA,UAAA,CAAW,KAAK,CAAA,CAAE,OAAA,EAAS,OAAO,CAAA;AAAA,EACpC;AACF,CAAA;AAEO,IAAM,MAAA,GAAS;AAAA,EACpB,KAAA,EAAO,0BAA0B,OAAO,CAAA;AAAA,EACxC,KAAA,EAAO,0BAA0B,OAAO,CAAA;AAAA,EACxC,IAAA,EAAM,0BAA0B,MAAM,CAAA;AAAA,EACtC,IAAA,EAAM,0BAA0B,MAAM,CAAA;AAAA,EACtC,KAAA,EAAO,0BAA0B,OAAO,CAAA;AAAA,EACxC,KAAA,EAAO,0BAA0B,OAAO,CAAA;AAAA,EACxC,GAAA,EAAK,0BAA0B,MAAM;AACvC","file":"logger.js","sourcesContent":["export const NO_OP: () => void = () => {};\n\nexport const isNullish = (value: unknown): value is null | undefined => value === null || value === undefined;\n\nexport const isNumber = (value?: unknown | null): value is number => {\n if (isNullish(value)) {\n return false;\n }\n\n if (typeof value !== 'number') {\n return false;\n }\n\n if (isNaN(value)) {\n return false;\n }\n\n return true;\n};\n\nexport const isString = (value?: unknown | null): value is string => {\n if (isNullish(value)) {\n return false;\n }\n\n if (typeof value !== 'string') {\n return false;\n }\n\n return true;\n};\n","import { isNullish } from \"./types.utils\";\n\n/**\n * Returns true when running in Node.js.\n * Checks for process.versions.node to avoid false positives in Web Workers.\n */\nexport const isRuntimeEnvNodeJs = (): boolean => {\n if (typeof window !== \"undefined\") return false;\n if (typeof process === \"undefined\") return false;\n if (isNullish(process?.versions?.node)) return false;\n\n return true;\n};\n","import pino from \"pino\";\nimport { isRuntimeEnvNodeJs } from \"../utils/runtime-env.utils\";\nimport { isNullish } from \"../utils/types.utils\";\n\nconst LEVEL_LABELS: Record<number, string> = {\n 10: \"trace\",\n 20: \"debug\",\n 30: \"info\",\n 40: \"warn\",\n 50: \"error\",\n 60: \"fatal\",\n};\n\nconst LEVEL_COLORS: Record<string, string> = {\n trace: \"color: #94a3b8\",\n debug: \"color: #22d3ee\",\n info: \"color: #4ade80\",\n warn: \"color: #fbbf24\",\n error: \"color: #f87171\",\n fatal: \"color: #dc2626; font-weight: bold\",\n};\n\nconst MESSAGE_KEY = \"msg\";\n\ntype LogObject = Record<string, unknown> & { level?: number; time?: string; [MESSAGE_KEY]?: string };\n\nconst getLevelLabel = (levelNum: number): string => LEVEL_LABELS[levelNum] ?? \"info\";\n\nconst getLevelColor = (label: string): string => LEVEL_COLORS[label] ?? LEVEL_COLORS.info;\n\nconst getLogTimestamp = ({ time }: LogObject): string => (typeof time === \"string\" ? time : new Date().toISOString());\n\ntype ConsoleMethod = \"log\" | \"warn\" | \"error\";\nconst getConsoleMethod = (levelNum: number): ConsoleMethod => {\n if (levelNum >= 50) return \"error\";\n if (levelNum >= 40) return \"warn\";\n return \"log\";\n};\n\nconst getRestPayload = (obj: LogObject): Record<string, unknown> =>\n Object.keys(obj)\n .filter((k) => k !== \"level\" && k !== \"time\" && k !== MESSAGE_KEY)\n .reduce<Record<string, unknown>>((acc, k) => {\n acc[k] = obj[k];\n return acc;\n }, {});\n\ntype BuildMainArgsParams = {\n timestamp: string;\n label: string;\n color: string;\n msg: unknown;\n extraArgs: unknown[];\n rest: Record<string, unknown>;\n};\n\nconst buildMainArgs = ({ timestamp, label, color, msg, extraArgs, rest }: BuildMainArgsParams): unknown[] => {\n const prefix = `[${timestamp}]`;\n const levelPart = ` ${label.toUpperCase()} `;\n const hasRest = Object.keys(rest).length > 0;\n const mainArgs: unknown[] = [`${prefix}%c${levelPart}%c`, color, \"color: inherit\"];\n\n if (!isNullish(msg)) mainArgs.push(msg);\n if (extraArgs.length > 0) mainArgs.push(...extraArgs);\n if (hasRest) mainArgs.push(rest);\n\n return mainArgs;\n};\n\nconst baseOptions: pino.LoggerOptions = {\n timestamp: pino.stdTimeFunctions.isoTime,\n messageKey: MESSAGE_KEY,\n};\n\nconst browserOptions: pino.LoggerOptions = {\n ...baseOptions,\n browser: {\n write: (logObj: object, ...args: unknown[]) => {\n const obj = logObj as LogObject;\n const levelNum = obj.level ?? 30;\n const label = getLevelLabel(levelNum);\n const color = getLevelColor(label);\n const timestamp = getLogTimestamp(obj);\n const msg = obj[MESSAGE_KEY];\n const rest = getRestPayload(obj);\n const consoleMethod = getConsoleMethod(levelNum);\n const mainArgs = buildMainArgs({\n timestamp,\n label,\n color,\n msg,\n extraArgs: args,\n rest,\n });\n (console[consoleMethod] as (...a: unknown[]) => void)(...mainArgs);\n },\n },\n};\n\nconst createPinoLogger = (): pino.Logger => {\n if (isRuntimeEnvNodeJs()) {\n try {\n const transport = pino.transport({ target: \"pino-pretty\", options: { colorize: true } });\n return pino(baseOptions, transport);\n } catch (e: unknown) {\n console.warn(\"pino-pretty not installed, using default pino output\", e);\n return pino(baseOptions);\n }\n }\n\n return pino(browserOptions);\n};\n\nconst pinoLogger = createPinoLogger();\n\nexport type Level = \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\";\n\nexport const setLoggerMinimumLevel = (level: Level) => {\n pinoLogger.level = level;\n};\n\nconst consoleMethodToPinoMethod = (level: Level) => (message: string, payload?: Record<string, unknown>) => {\n if (isNullish(payload)) {\n pinoLogger[level](message);\n } else {\n pinoLogger[level](payload, message);\n }\n};\n\nexport const logger = {\n trace: consoleMethodToPinoMethod(\"trace\"),\n debug: consoleMethodToPinoMethod(\"debug\"),\n info: consoleMethodToPinoMethod(\"info\"),\n warn: consoleMethodToPinoMethod(\"warn\"),\n error: consoleMethodToPinoMethod(\"error\"),\n fatal: consoleMethodToPinoMethod(\"fatal\"),\n log: consoleMethodToPinoMethod(\"info\"),\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/types.utils.ts","../src/utils/runtime-env.utils.ts","../src/logger/logger.utils.ts"],"names":[],"mappings":";;;;;;;AAEO,IAAM,SAAA,GAAY,CAAC,KAAA,KAA8C,KAAA,KAAU,QAAQ,KAAA,KAAU,MAAA;;;ACI7F,IAAM,qBAAqB,MAAe;AAC/C,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAC1C,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,EAAa,OAAO,KAAA;AAC3C,EAAA,IAAI,SAAA,CAAU,OAAA,EAAS,QAAA,EAAU,IAAI,GAAG,OAAO,KAAA;AAE/C,EAAA,OAAO,IAAA;AACT,CAAA;;;ACNA,IAAM,YAAA,GAAuC;AAAA,EAC3C,EAAA,EAAI,OAAA;AAAA,EACJ,EAAA,EAAI,OAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,OAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEA,IAAM,YAAA,GAAuC;AAAA,EAC3C,KAAA,EAAO,gBAAA;AAAA,EACP,KAAA,EAAO,gBAAA;AAAA,EACP,IAAA,EAAM,gBAAA;AAAA,EACN,IAAA,EAAM,gBAAA;AAAA,EACN,KAAA,EAAO,gBAAA;AAAA,EACP,KAAA,EAAO;AACT,CAAA;AAEA,IAAM,WAAA,GAAc,KAAA;AAIpB,IAAM,aAAA,GAAgB,CAAC,QAAA,KAA6B,YAAA,CAAa,QAAQ,CAAA,IAAK,MAAA;AAE9E,IAAM,gBAAgB,CAAC,KAAA,KAA0B,YAAA,CAAa,KAAK,KAAK,YAAA,CAAa,IAAA;AAErF,IAAM,eAAA,GAAkB,CAAC,EAAE,IAAA,EAAK,KAA0B,OAAO,IAAA,KAAS,QAAA,GAAW,IAAA,GAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAGnH,IAAM,gBAAA,GAAmB,CAAC,QAAA,KAAoC;AAC5D,EAAA,IAAI,QAAA,IAAY,IAAI,OAAO,OAAA;AAC3B,EAAA,IAAI,QAAA,IAAY,IAAI,OAAO,MAAA;AAC3B,EAAA,OAAO,KAAA;AACT,CAAA;AAEA,IAAM,cAAA,GAAiB,CAAC,GAAA,KACtB,MAAA,CAAO,KAAK,GAAG,CAAA,CACZ,OAAO,CAAC,CAAA,KAAM,MAAM,OAAA,IAAW,CAAA,KAAM,UAAU,CAAA,KAAM,WAAW,EAChE,MAAA,CAAgC,CAAC,KAAK,CAAA,KAAM;AAC3C,EAAA,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA;AACd,EAAA,OAAO,GAAA;AACT,CAAA,EAAG,EAAE,CAAA;AAWT,IAAM,aAAA,GAAgB,CAAC,EAAE,SAAA,EAAW,OAAO,KAAA,EAAO,GAAA,EAAK,SAAA,EAAW,IAAA,EAAK,KAAsC;AAC3G,EAAA,MAAM,MAAA,GAAS,IAAI,SAAS,CAAA,CAAA,CAAA;AAC5B,EAAA,MAAM,SAAA,GAAY,CAAA,CAAA,EAAI,KAAA,CAAM,WAAA,EAAa,CAAA,CAAA,CAAA;AACzC,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,IAAI,EAAE,MAAA,GAAS,CAAA;AAC3C,EAAA,MAAM,QAAA,GAAsB,CAAC,CAAA,EAAG,MAAM,KAAK,SAAS,CAAA,EAAA,CAAA,EAAM,OAAO,gBAAgB,CAAA;AAEjF,EAAA,IAAI,CAAC,SAAA,CAAU,GAAG,CAAA,EAAG,QAAA,CAAS,KAAK,GAAG,CAAA;AACtC,EAAA,IAAI,UAAU,MAAA,GAAS,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,GAAG,SAAS,CAAA;AACpD,EAAA,IAAI,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAE/B,EAAA,OAAO,QAAA;AACT,CAAA;AAEA,IAAM,WAAA,GAAkC;AAAA,EACtC,SAAA,EAAW,KAAK,gBAAA,CAAiB,OAAA;AAAA,EACjC,UAAA,EAAY;AACd,CAAA;AAEA,IAAM,cAAA,GAAqC;AAAA,EACzC,GAAG,WAAA;AAAA,EACH,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,CAAC,MAAA,EAAA,GAAmB,IAAA,KAAoB;AAC7C,MAAA,MAAM,GAAA,GAAM,MAAA;AACZ,MAAA,MAAM,QAAA,GAAW,IAAI,KAAA,IAAS,EAAA;AAC9B,MAAA,MAAM,KAAA,GAAQ,cAAc,QAAQ,CAAA;AACpC,MAAA,MAAM,KAAA,GAAQ,cAAc,KAAK,CAAA;AACjC,MAAA,MAAM,SAAA,GAAY,gBAAgB,GAAG,CAAA;AACrC,MAAA,MAAM,GAAA,GAAM,IAAI,WAAW,CAAA;AAC3B,MAAA,MAAM,IAAA,GAAO,eAAe,GAAG,CAAA;AAC/B,MAAA,MAAM,aAAA,GAAgB,iBAAiB,QAAQ,CAAA;AAC/C,MAAA,MAAM,WAAW,aAAA,CAAc;AAAA,QAC7B,SAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA,GAAA;AAAA,QACA,SAAA,EAAW,IAAA;AAAA,QACX;AAAA,OACD,CAAA;AACD,MAAC,OAAA,CAAQ,aAAa,CAAA,CAAgC,GAAG,QAAQ,CAAA;AAAA,IACnE;AAAA;AAEJ,CAAA;AAEA,IAAM,wBAAwB,MAA8B;AAC1D,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,EAAE,MAAA,EAAQ,aAAA,EAAe,SAAS,EAAE,QAAA,EAAU,IAAA,EAAK,EAAG,CAAA;AAAA,EAC9E,SAAS,CAAA,EAAY;AACnB,IAAA,OAAA,CAAQ,IAAA,CAAK,wDAAwD,CAAC,CAAA;AACtE,IAAA,OAAO,IAAA,CAAK,YAAY,CAAC,CAAA;AAAA,EAC3B;AACF,CAAA;AAEA,IAAM,oBAAA,GAAuB,MAAmB,IAAA,CAAK,WAAA,EAAa,uBAAuB,CAAA;AAEzF,IAAM,mBAAmB,MAAmB;AAC1C,EAAA,IAAI,oBAAmB,EAAG;AACxB,IAAA,OAAO,oBAAA,EAAqB;AAAA,EAC9B;AAEA,EAAA,OAAO,KAAK,cAAc,CAAA;AAC5B,CAAA;AAOA,IAAM,qBAAA,GAAwB,CAAC,OAAA,KAA4C;AACzE,EAAA,SAAA,CAAU,KAAK,OAAA,CAAQ,OAAO,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AACpD,EAAA,OAAO,IAAA,CAAK,YAAY,EAAE,IAAA,EAAM,SAAS,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA;AACtE,CAAA;AAEA,IAAM,4BAA4B,CAAC,EAAE,SAAS,OAAA,EAAS,UAAA,GAAa,MAAK,KAAwC;AAC/G,EAAA,MAAM,UAA8B,EAAC;AAErC,EAAA,IAAI,CAAC,SAAA,CAAU,OAAO,CAAA,EAAG;AACvB,IAAA,OAAA,CAAQ,KAAK,EAAE,MAAA,EAAQ,qBAAA,CAAsB,OAAO,GAAG,CAAA;AAAA,EACzD;AAEA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,MAAA,EAAQ,qBAAA,IAAyB,CAAA;AAAA,EAClD;AAEA,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,KAAK,WAAW,CAAA;AAAA,EACzB;AAEA,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,IAAA,CAAK,WAAA,EAAa,OAAA,CAAQ,CAAC,EAAG,MAAM,CAAA;AAAA,EAC7C;AAEA,EAAA,OAAO,IAAA,CAAK,WAAA,EAAa,IAAA,CAAK,WAAA,CAAY,OAAO,CAAC,CAAA;AACpD,CAAA;AAYA,IAAM,cAAA,GAAiB,CAAC,YAAA,KAAsC;AAC5D,EAAA,MAAM,yBAAA,GACJ,CAAC,KAAA,KACD,CAAC,SAAiB,OAAA,KAA4C;AAC5D,IAAA,IAAI,SAAA,CAAU,OAAO,CAAA,EAAG;AACtB,MAAA,YAAA,CAAa,KAAK,EAAE,OAAO,CAAA;AAAA,IAC7B,CAAA,MAAO;AACL,MAAA,YAAA,CAAa,KAAK,CAAA,CAAE,OAAA,EAAS,OAAO,CAAA;AAAA,IACtC;AAAA,EACF,CAAA;AAEF,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,0BAA0B,OAAO,CAAA;AAAA,IACxC,KAAA,EAAO,0BAA0B,OAAO,CAAA;AAAA,IACxC,IAAA,EAAM,0BAA0B,MAAM,CAAA;AAAA,IACtC,IAAA,EAAM,0BAA0B,MAAM,CAAA;AAAA,IACtC,KAAA,EAAO,0BAA0B,OAAO,CAAA;AAAA,IACxC,KAAA,EAAO,0BAA0B,OAAO,CAAA;AAAA,IACxC,GAAA,EAAK,0BAA0B,MAAM;AAAA,GACvC;AACF,CAAA;AAEO,IAAM,YAAA,GAAe,CAAC,OAAA,KAA0C;AACrE,EAAA,IAAI,CAAC,oBAAmB,EAAG;AACzB,IAAA,OAAO,cAAA,CAAe,IAAA,CAAK,cAAc,CAAC,CAAA;AAAA,EAC5C;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,SAAA,CAAU,OAAA,EAAS,OAAO,CAAA;AAC3C,EAAA,MAAM,UAAA,GAAa,SAAS,OAAA,IAAW,IAAA;AAEvC,EAAA,IAAI,CAAC,WAAW,UAAA,EAAY;AAC1B,IAAA,OAAO,cAAA,CAAe,sBAAsB,CAAA;AAAA,EAC9C;AAEA,EAAA,OAAO,cAAA,CAAe,0BAA0B,EAAE,OAAA,EAAS,SAAS,OAAA,EAAS,OAAA,EAAS,UAAA,EAAY,CAAC,CAAA;AACrG;AAEA,IAAM,aAAa,gBAAA,EAAiB;AAI7B,IAAM,qBAAA,GAAwB,CAAC,KAAA,KAAiB;AACrD,EAAA,UAAA,CAAW,KAAA,GAAQ,KAAA;AACrB;AAEO,IAAM,MAAA,GAAS,eAAe,UAAU","file":"logger.js","sourcesContent":["export const NO_OP: () => void = () => {};\n\nexport const isNullish = (value: unknown): value is null | undefined => value === null || value === undefined;\n\nexport const isNumber = (value?: unknown | null): value is number => {\n if (isNullish(value)) {\n return false;\n }\n\n if (typeof value !== 'number') {\n return false;\n }\n\n if (isNaN(value)) {\n return false;\n }\n\n return true;\n};\n\nexport const isString = (value?: unknown | null): value is string => {\n if (isNullish(value)) {\n return false;\n }\n\n if (typeof value !== 'string') {\n return false;\n }\n\n return true;\n};\n","import { isNullish } from \"./types.utils\";\n\n/**\n * Returns true when running in Node.js.\n * Checks for process.versions.node to avoid false positives in Web Workers.\n */\nexport const isRuntimeEnvNodeJs = (): boolean => {\n if (typeof window !== \"undefined\") return false;\n if (typeof process === \"undefined\") return false;\n if (isNullish(process?.versions?.node)) return false;\n\n return true;\n};\n","import { mkdirSync } from \"node:fs\";\nimport path from \"node:path\";\nimport pino from \"pino\";\nimport { isRuntimeEnvNodeJs } from \"../utils/runtime-env.utils\";\nimport { isNullish } from \"../utils/types.utils\";\n\nconst LEVEL_LABELS: Record<number, string> = {\n 10: \"trace\",\n 20: \"debug\",\n 30: \"info\",\n 40: \"warn\",\n 50: \"error\",\n 60: \"fatal\",\n};\n\nconst LEVEL_COLORS: Record<string, string> = {\n trace: \"color: #94a3b8\",\n debug: \"color: #22d3ee\",\n info: \"color: #4ade80\",\n warn: \"color: #fbbf24\",\n error: \"color: #f87171\",\n fatal: \"color: #dc2626; font-weight: bold\",\n};\n\nconst MESSAGE_KEY = \"msg\";\n\ntype LogObject = Record<string, unknown> & { level?: number; time?: string; [MESSAGE_KEY]?: string };\n\nconst getLevelLabel = (levelNum: number): string => LEVEL_LABELS[levelNum] ?? \"info\";\n\nconst getLevelColor = (label: string): string => LEVEL_COLORS[label] ?? LEVEL_COLORS.info;\n\nconst getLogTimestamp = ({ time }: LogObject): string => (typeof time === \"string\" ? time : new Date().toISOString());\n\ntype ConsoleMethod = \"log\" | \"warn\" | \"error\";\nconst getConsoleMethod = (levelNum: number): ConsoleMethod => {\n if (levelNum >= 50) return \"error\";\n if (levelNum >= 40) return \"warn\";\n return \"log\";\n};\n\nconst getRestPayload = (obj: LogObject): Record<string, unknown> =>\n Object.keys(obj)\n .filter((k) => k !== \"level\" && k !== \"time\" && k !== MESSAGE_KEY)\n .reduce<Record<string, unknown>>((acc, k) => {\n acc[k] = obj[k];\n return acc;\n }, {});\n\ntype BuildMainArgsParams = {\n timestamp: string;\n label: string;\n color: string;\n msg: unknown;\n extraArgs: unknown[];\n rest: Record<string, unknown>;\n};\n\nconst buildMainArgs = ({ timestamp, label, color, msg, extraArgs, rest }: BuildMainArgsParams): unknown[] => {\n const prefix = `[${timestamp}]`;\n const levelPart = ` ${label.toUpperCase()} `;\n const hasRest = Object.keys(rest).length > 0;\n const mainArgs: unknown[] = [`${prefix}%c${levelPart}%c`, color, \"color: inherit\"];\n\n if (!isNullish(msg)) mainArgs.push(msg);\n if (extraArgs.length > 0) mainArgs.push(...extraArgs);\n if (hasRest) mainArgs.push(rest);\n\n return mainArgs;\n};\n\nconst baseOptions: pino.LoggerOptions = {\n timestamp: pino.stdTimeFunctions.isoTime,\n messageKey: MESSAGE_KEY,\n};\n\nconst browserOptions: pino.LoggerOptions = {\n ...baseOptions,\n browser: {\n write: (logObj: object, ...args: unknown[]) => {\n const obj = logObj as LogObject;\n const levelNum = obj.level ?? 30;\n const label = getLevelLabel(levelNum);\n const color = getLevelColor(label);\n const timestamp = getLogTimestamp(obj);\n const msg = obj[MESSAGE_KEY];\n const rest = getRestPayload(obj);\n const consoleMethod = getConsoleMethod(levelNum);\n const mainArgs = buildMainArgs({\n timestamp,\n label,\n color,\n msg,\n extraArgs: args,\n rest,\n });\n (console[consoleMethod] as (...a: unknown[]) => void)(...mainArgs);\n },\n },\n};\n\nconst createPrettyTransport = (): pino.DestinationStream => {\n try {\n return pino.transport({ target: \"pino-pretty\", options: { colorize: true } });\n } catch (e: unknown) {\n console.warn(\"pino-pretty not installed, using default pino output\", e);\n return pino.destination(1);\n }\n};\n\nconst createNodePinoLogger = (): pino.Logger => pino(baseOptions, createPrettyTransport());\n\nconst createPinoLogger = (): pino.Logger => {\n if (isRuntimeEnvNodeJs()) {\n return createNodePinoLogger();\n }\n\n return pino(browserOptions);\n};\n\nexport type CreateLoggerOptions = {\n logFile?: string;\n console?: boolean;\n};\n\nconst createFileDestination = (logFile: string): pino.DestinationStream => {\n mkdirSync(path.dirname(logFile), { recursive: true });\n return pino.destination({ dest: logFile, append: true, mkdir: true });\n};\n\nconst createNodePinoWithOptions = ({ logFile, console: useConsole = true }: CreateLoggerOptions): pino.Logger => {\n const streams: pino.StreamEntry[] = [];\n\n if (!isNullish(logFile)) {\n streams.push({ stream: createFileDestination(logFile) });\n }\n\n if (useConsole) {\n streams.push({ stream: createPrettyTransport() });\n }\n\n if (streams.length === 0) {\n return pino(baseOptions);\n }\n\n if (streams.length === 1) {\n return pino(baseOptions, streams[0]!.stream);\n }\n\n return pino(baseOptions, pino.multistream(streams));\n};\n\nexport type Logger = {\n trace: (message: string, payload?: Record<string, unknown>) => void;\n debug: (message: string, payload?: Record<string, unknown>) => void;\n info: (message: string, payload?: Record<string, unknown>) => void;\n warn: (message: string, payload?: Record<string, unknown>) => void;\n error: (message: string, payload?: Record<string, unknown>) => void;\n fatal: (message: string, payload?: Record<string, unknown>) => void;\n log: (message: string, payload?: Record<string, unknown>) => void;\n};\n\nconst buildLoggerApi = (pinoInstance: pino.Logger): Logger => {\n const consoleMethodToPinoMethod =\n (level: Level) =>\n (message: string, payload?: Record<string, unknown>): void => {\n if (isNullish(payload)) {\n pinoInstance[level](message);\n } else {\n pinoInstance[level](payload, message);\n }\n };\n\n return {\n trace: consoleMethodToPinoMethod(\"trace\"),\n debug: consoleMethodToPinoMethod(\"debug\"),\n info: consoleMethodToPinoMethod(\"info\"),\n warn: consoleMethodToPinoMethod(\"warn\"),\n error: consoleMethodToPinoMethod(\"error\"),\n fatal: consoleMethodToPinoMethod(\"fatal\"),\n log: consoleMethodToPinoMethod(\"info\"),\n };\n};\n\nexport const createLogger = (options?: CreateLoggerOptions): Logger => {\n if (!isRuntimeEnvNodeJs()) {\n return buildLoggerApi(pino(browserOptions));\n }\n\n const hasFile = !isNullish(options?.logFile);\n const useConsole = options?.console ?? true;\n\n if (!hasFile && useConsole) {\n return buildLoggerApi(createNodePinoLogger());\n }\n\n return buildLoggerApi(createNodePinoWithOptions({ logFile: options?.logFile, console: useConsole }));\n};\n\nconst pinoLogger = createPinoLogger();\n\nexport type Level = \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\";\n\nexport const setLoggerMinimumLevel = (level: Level) => {\n pinoLogger.level = level;\n};\n\nexport const logger = buildLoggerApi(pinoLogger);\n"]}
|