@levrbet/shared 0.2.14 → 0.2.16
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.
|
@@ -58,67 +58,63 @@ const colors = {
|
|
|
58
58
|
silly: "\x1b[90m", // gray
|
|
59
59
|
};
|
|
60
60
|
const reset = "\x1b[0m";
|
|
61
|
-
// Helper to detect if object is array-like with numeric keys
|
|
62
|
-
const isArrayLikeObject = (obj) => {
|
|
63
|
-
if (typeof obj !== "object" || obj === null)
|
|
64
|
-
return false;
|
|
65
|
-
const keys = Object.keys(obj);
|
|
66
|
-
return keys.length > 0 && keys.every((key) => /^\d+$/.test(key));
|
|
67
|
-
};
|
|
68
|
-
// Safe stringify that handles array-like objects
|
|
69
|
-
const safeStringify = (value) => {
|
|
70
|
-
if (value === null || value === undefined)
|
|
71
|
-
return "";
|
|
72
|
-
if (typeof value === "string")
|
|
73
|
-
return value;
|
|
74
|
-
if (typeof value === "number" || typeof value === "boolean")
|
|
75
|
-
return String(value);
|
|
76
|
-
// Check if it's an array-like object (string that got converted to object)
|
|
77
|
-
if (isArrayLikeObject(value)) {
|
|
78
|
-
// Reconstruct the original string
|
|
79
|
-
const keys = Object.keys(value).sort((a, b) => parseInt(a) - parseInt(b));
|
|
80
|
-
return keys.map((key) => value[key]).join("");
|
|
81
|
-
}
|
|
82
|
-
try {
|
|
83
|
-
return JSON.stringify(value);
|
|
84
|
-
}
|
|
85
|
-
catch (err) {
|
|
86
|
-
return String(value);
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
61
|
// Custom format for console output in non-production
|
|
90
|
-
const consoleFormat = printf((
|
|
62
|
+
const consoleFormat = printf((info) => {
|
|
63
|
+
const { level, message, timestamp, stack, service, ...metadata } = info;
|
|
91
64
|
const color = colors[level] || "";
|
|
92
65
|
const coloredLevel = dotenv_1.LEVR_ENV === "prod" ? level : `${color}${level}${reset}`;
|
|
93
66
|
let msg = `${timestamp} [${coloredLevel}]`;
|
|
94
67
|
if (service) {
|
|
95
68
|
msg += ` [${service}]`;
|
|
96
69
|
}
|
|
97
|
-
//
|
|
98
|
-
|
|
99
|
-
|
|
70
|
+
// Simple message handling
|
|
71
|
+
if (typeof message === "string") {
|
|
72
|
+
msg += `: ${message}`;
|
|
73
|
+
}
|
|
74
|
+
else if (message !== undefined && message !== null) {
|
|
75
|
+
try {
|
|
76
|
+
msg += `: ${JSON.stringify(message)}`;
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
msg += `: ${String(message)}`;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
100
82
|
// Add stack trace if error
|
|
101
83
|
if (stack) {
|
|
102
84
|
msg += `\n${stack}`;
|
|
103
85
|
}
|
|
104
|
-
//
|
|
105
|
-
const
|
|
106
|
-
if (
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
86
|
+
// Handle splat metadata (printf-style arguments)
|
|
87
|
+
const splatData = metadata[Symbol.for("splat")];
|
|
88
|
+
if (Array.isArray(splatData) && splatData.length > 0) {
|
|
89
|
+
splatData.forEach((item) => {
|
|
90
|
+
try {
|
|
91
|
+
msg += ` ${typeof item === "string" ? item : JSON.stringify(item)}`;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
msg += ` ${String(item)}`;
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
// Add remaining metadata if present
|
|
99
|
+
const relevantKeys = Object.keys(metadata).filter((key) => !["level", "message", "timestamp", "service", "environment", "splat"].includes(key));
|
|
100
|
+
if (relevantKeys.length > 0) {
|
|
101
|
+
const metaObj = Object.fromEntries(relevantKeys.map((key) => [key, metadata[key]]));
|
|
102
|
+
try {
|
|
103
|
+
msg += `\n${JSON.stringify(metaObj, null, 2)}`;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
msg += `\n${String(metaObj)}`;
|
|
110
107
|
}
|
|
111
|
-
msg += `\n${JSON.stringify(filteredMeta, null, 2)}`;
|
|
112
108
|
}
|
|
113
109
|
return msg;
|
|
114
110
|
});
|
|
115
111
|
// Production format (structured JSON for OTEL)
|
|
116
112
|
const productionFormat = combine(timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), errors({ stack: true }), splat(), json());
|
|
117
|
-
// Development format (human-readable)
|
|
113
|
+
// Development format (human-readable) - WITH splat() to handle multiple arguments
|
|
118
114
|
const developmentFormat = combine(timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), errors({ stack: true }), splat(), consoleFormat);
|
|
119
115
|
const createLogger = (options = {}) => {
|
|
120
116
|
const { service = "@levrbet/shared", level = getLogLevel(), additionalMeta = {} } = options;
|
|
121
|
-
const
|
|
117
|
+
const winstonLogger = winston_1.default.createLogger({
|
|
122
118
|
level,
|
|
123
119
|
levels: winston_1.default.config.npm.levels,
|
|
124
120
|
format: dotenv_1.LEVR_ENV === "prod" ? productionFormat : developmentFormat,
|
|
@@ -134,7 +130,7 @@ const createLogger = (options = {}) => {
|
|
|
134
130
|
],
|
|
135
131
|
exitOnError: false,
|
|
136
132
|
});
|
|
137
|
-
return
|
|
133
|
+
return winstonLogger;
|
|
138
134
|
};
|
|
139
135
|
exports.createLogger = createLogger;
|
|
140
136
|
// Default logger instance
|
|
@@ -142,7 +138,6 @@ const logger = (0, exports.createLogger)();
|
|
|
142
138
|
// Create stream for Morgan (HTTP logging)
|
|
143
139
|
const createStream = (loggerInstance = logger) => ({
|
|
144
140
|
write: (message) => {
|
|
145
|
-
// Trim and ensure message is a string, not an array or object
|
|
146
141
|
const msg = typeof message === "string" ? message.trim() : String(message);
|
|
147
142
|
if (msg.length > 0) {
|
|
148
143
|
loggerInstance.info(msg);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"winston.js","sourceRoot":"","sources":["../../../src/server/config/winston.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA6B;AAC7B,qCAAmC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAA;AAE1E,2CAA2C;AAC3C,MAAM,WAAW,GAAG,GAAW,EAAE;IAC7B,QAAQ,iBAAQ,EAAE,CAAC;QACf,KAAK,OAAO;YACR,OAAO,OAAO,CAAA;QAClB,KAAK,KAAK;YACN,OAAO,OAAO,CAAA;QAClB,KAAK,SAAS;YACV,OAAO,MAAM,CAAA;QACjB,KAAK,MAAM;YACP,OAAO,OAAO,CAAA;QAClB;YACI,OAAO,MAAM,CAAA;IACrB,CAAC;AACL,CAAC,CAAA;AAED,wCAAwC;AACxC,MAAM,MAAM,GAA2B;IACnC,KAAK,EAAE,UAAU,EAAE,MAAM;IACzB,IAAI,EAAE,UAAU,EAAE,SAAS;IAC3B,IAAI,EAAE,UAAU,EAAE,OAAO;IACzB,IAAI,EAAE,UAAU,EAAE,UAAU;IAC5B,OAAO,EAAE,UAAU,EAAE,OAAO;IAC5B,KAAK,EAAE,UAAU,EAAE,OAAO;IAC1B,KAAK,EAAE,UAAU,EAAE,OAAO;CAC7B,CAAA;AAED,MAAM,KAAK,GAAG,SAAS,CAAA;AAEvB,
|
|
1
|
+
{"version":3,"file":"winston.js","sourceRoot":"","sources":["../../../src/server/config/winston.ts"],"names":[],"mappings":"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"}
|