@vvlad1973/simple-logger 2.1.10 → 2.2.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.
@@ -2,7 +2,7 @@
2
2
  * A module for simple logging with various logging levels.
3
3
  * @module SimpleLogger
4
4
  */
5
- import { type ExternalLogger, type LogFn, type LoggerFactory, type LoggerLevel, type LoggerOptions } from '../types/simple-logger.types.js';
5
+ import type { ExternalLogger, LogFn, LoggerFactory, LoggerLevel, LoggerOptions } from '../types/simple-logger.types.js';
6
6
  export default class SimpleLogger {
7
7
  private currentLevelIndex;
8
8
  private logger;
@@ -122,4 +122,11 @@ export default class SimpleLogger {
122
122
  * @return {void}
123
123
  */
124
124
  logFunctionEnd(name?: string): void;
125
+ /**
126
+ * Flushes the logger buffer if the external logger supports it.
127
+ * This is useful for ensuring all buffered log entries are written before the application exits.
128
+ *
129
+ * @return {Promise<void>} A promise that resolves when the flush is complete.
130
+ */
131
+ flush(): Promise<void>;
125
132
  }
@@ -42,12 +42,11 @@ export default class SimpleLogger {
42
42
  const levels = Object.values(LoggerLevels);
43
43
  if (explicitLevel)
44
44
  return explicitLevel;
45
- if (logger &&
46
- typeof logger === 'object' &&
47
- 'level' in logger &&
45
+ if ('level' in logger &&
48
46
  typeof logger.level === 'string') {
49
47
  const lvl = logger.level.toLowerCase();
50
- if (levels.includes(lvl))
48
+ const isValidLevel = (value) => levels.includes(value);
49
+ if (isValidLevel(lvl))
51
50
  return lvl;
52
51
  }
53
52
  return levels[this.currentLevelIndex];
@@ -69,9 +68,9 @@ export default class SimpleLogger {
69
68
  */
70
69
  initLogger(externalLogger, options = {}) {
71
70
  const { level, bindings = {}, msgPrefix, transport, ...restOptions } = options;
72
- const hasParams = level ||
73
- msgPrefix ||
74
- transport ||
71
+ const hasParams = level !== undefined ||
72
+ msgPrefix !== undefined ||
73
+ transport !== undefined ||
75
74
  Object.keys(bindings).length > 0 ||
76
75
  Object.keys(restOptions).length > 0;
77
76
  const effectiveBindings = {
@@ -173,7 +172,15 @@ export default class SimpleLogger {
173
172
  return;
174
173
  const prepared = prepareLogCall(args);
175
174
  if (prepared !== null) {
176
- method.apply(this.logger, prepared);
175
+ const [first, ...rest] = prepared;
176
+ if (typeof first === 'string') {
177
+ method(first, ...rest);
178
+ }
179
+ else if (typeof first === 'object') {
180
+ const [second, ...otherRest] = rest;
181
+ const msg = typeof second === 'string' ? second : undefined;
182
+ method(first, msg, ...otherRest);
183
+ }
177
184
  }
178
185
  else {
179
186
  console.warn(`Invalid log arguments for "${level}"`, args);
@@ -193,7 +200,7 @@ export default class SimpleLogger {
193
200
  const { msg, rest } = extractMessage(args);
194
201
  const fullMsg = util.format(msg, ...rest);
195
202
  const ctx = Object.entries({ ...this.bindings, ...context })
196
- .map(([k, v]) => `${k}=${v}`)
203
+ .map(([k, v]) => `${k}=${String(v)}`)
197
204
  .join(' ');
198
205
  const prefix = `[${time}] ${levelStr}`;
199
206
  const contextStr = ctx ? ` (${ctx})` : '';
@@ -253,9 +260,7 @@ export default class SimpleLogger {
253
260
  */
254
261
  child(newBindings) {
255
262
  const merged = { ...this.bindings, ...newBindings };
256
- if (this.isExternal &&
257
- typeof this.logger === 'object' &&
258
- this.logger !== null) {
263
+ if (this.isExternal) {
259
264
  const logger = this.logger;
260
265
  const childFn = logger.child;
261
266
  if (typeof childFn === 'function') {
@@ -288,8 +293,24 @@ export default class SimpleLogger {
288
293
  * @return {void}
289
294
  */
290
295
  logFunctionEnd(name) {
291
- const caller = name || getCallerName();
296
+ const caller = name ?? getCallerName();
292
297
  this.trace(`Function end: ${caller}`);
293
298
  }
299
+ /**
300
+ * Flushes the logger buffer if the external logger supports it.
301
+ * This is useful for ensuring all buffered log entries are written before the application exits.
302
+ *
303
+ * @return {Promise<void>} A promise that resolves when the flush is complete.
304
+ */
305
+ async flush() {
306
+ if (!this.isExternal) {
307
+ return;
308
+ }
309
+ const logger = this.logger;
310
+ if (typeof logger.flush === 'function') {
311
+ const flushAsync = util.promisify(logger.flush.bind(logger));
312
+ await flushAsync();
313
+ }
314
+ }
294
315
  }
295
316
  //# sourceMappingURL=simple-logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"simple-logger.js","sourceRoot":"","sources":["../../src/classes/simple-logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"simple-logger.js","sourceRoot":"","sources":["../../src/classes/simple-logger.ts"],"names":[],"mappings":"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"}
@@ -28,4 +28,10 @@ export declare function extractContext(args: unknown[]): Record<string, unknown>
28
28
  * @return {string} The colored label.
29
29
  */
30
30
  export declare function colorizeLevel(level: LoggerLevel, label: string): string;
31
+ /**
32
+ * Prepares the log call by rearranging the provided arguments into a standardized format.
33
+ *
34
+ * @param {unknown[]} args - The array of arguments to prepare for the log call.
35
+ * @return {PreparedLogCall} The prepared log call arguments, or null if the input is invalid.
36
+ */
31
37
  export declare function prepareLogCall(args: unknown[]): PreparedLogCall;
@@ -25,6 +25,19 @@ export function extractMessage(args) {
25
25
  }
26
26
  return { msg: '', rest: [] };
27
27
  }
28
+ /**
29
+ * Type guard to check if value is a plain object record.
30
+ *
31
+ * @param {unknown} value - The value to check.
32
+ * @return {value is Record<string, unknown>} True if the value is a plain object.
33
+ */
34
+ function isPlainObject(value) {
35
+ return (typeof value === 'object' &&
36
+ value !== null &&
37
+ !Array.isArray(value) &&
38
+ (Object.getPrototypeOf(value) === Object.prototype ||
39
+ Object.getPrototypeOf(value) === null));
40
+ }
28
41
  /**
29
42
  * Extracts the context object from the provided array of arguments.
30
43
  *
@@ -33,7 +46,7 @@ export function extractMessage(args) {
33
46
  */
34
47
  export function extractContext(args) {
35
48
  const [first] = args;
36
- if (typeof first === 'object' && first !== null && !Array.isArray(first)) {
49
+ if (isPlainObject(first)) {
37
50
  return first;
38
51
  }
39
52
  return {};
@@ -60,13 +73,13 @@ export function colorizeLevel(level, label) {
60
73
  default:
61
74
  return label;
62
75
  }
63
- /**
64
- * Prepares the log call by rearranging the provided arguments into a standardized format.
65
- *
66
- * @param {unknown[]} args - The array of arguments to prepare for the log call.
67
- * @return {PreparedLogCall} The prepared log call arguments, or null if the input is invalid.
68
- */
69
76
  }
77
+ /**
78
+ * Prepares the log call by rearranging the provided arguments into a standardized format.
79
+ *
80
+ * @param {unknown[]} args - The array of arguments to prepare for the log call.
81
+ * @return {PreparedLogCall} The prepared log call arguments, or null if the input is invalid.
82
+ */
70
83
  export function prepareLogCall(args) {
71
84
  if (typeof args[0] === 'string') {
72
85
  return [args[0], ...args.slice(1)];
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,IAAe;IAI5C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAEtC,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAO,MAAM,KAAK,QAAQ,EAC1B,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO;YACL,GAAG,EAAE,KAAK;YACV,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;SAC/D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAe;IAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACrB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzE,OAAO,KAAgC,CAAC;IAC1C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAAkB,EAAE,KAAa;IAC7D,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,YAAY,CAAC,KAAK,CAAC;QACxB,KAAK,YAAY,CAAC,KAAK;YACrB,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,KAAK,YAAY,CAAC,IAAI;YACpB,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,KAAK,YAAY,CAAC,IAAI;YACpB,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,KAAK,YAAY,CAAC,KAAK,CAAC;QACxB,KAAK,YAAY,CAAC,KAAK;YACrB,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;IACH;;;;;OAKG;AACH,CAAC;AAAA,MAAM,UAAU,cAAc,CAAC,IAAe;IAC7C,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,IAAe;IAI5C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAEtC,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAO,MAAM,KAAK,QAAQ,EAC1B,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO;YACL,GAAG,EAAE,KAAK;YACV,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;SAC/D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,SAAS;YAChD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CACzC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAe;IAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACrB,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAAkB,EAAE,KAAa;IAC7D,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,YAAY,CAAC,KAAK,CAAC;QACxB,KAAK,YAAY,CAAC,KAAK;YACrB,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,KAAK,YAAY,CAAC,IAAI;YACpB,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,KAAK,YAAY,CAAC,IAAI;YACpB,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,KAAK,YAAY,CAAC,KAAK,CAAC;QACxB,KAAK,YAAY,CAAC,KAAK;YACrB,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAe;IAC5C,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -10,8 +10,8 @@ export declare function isValidLogger(logger: unknown): logger is ExternalLogger
10
10
  * Checks if the provided logger is an ExternalLogger instance with a child method.
11
11
  *
12
12
  * @param {unknown} logger - The logger to check.
13
- * @return {logger is ExternalLogger & { child: Function }} True if the logger is an ExternalLogger with a child method, false otherwise.
13
+ * @return {logger is ExternalLogger & { child: (bindings: Record<string, unknown>, options?: Record<string, unknown>) => ExternalLogger }} True if the logger is an ExternalLogger with a child method, false otherwise.
14
14
  */
15
15
  export declare function hasChild(logger: unknown): logger is ExternalLogger & {
16
- child: Function;
16
+ child: (bindings: Record<string, unknown>, options?: Record<string, unknown>) => ExternalLogger;
17
17
  };
@@ -1,4 +1,13 @@
1
1
  import { LoggerLevels } from '../constants/constants.js';
2
+ /**
3
+ * Type guard to check if value is an object with properties.
4
+ *
5
+ * @param {unknown} value - The value to check.
6
+ * @return {value is Record<string, unknown>} True if the value is an object.
7
+ */
8
+ function isObjectWithProperties(value) {
9
+ return typeof value === 'object' && value !== null;
10
+ }
2
11
  /**
3
12
  * Checks if the provided logger is a valid ExternalLogger instance.
4
13
  *
@@ -7,21 +16,21 @@ import { LoggerLevels } from '../constants/constants.js';
7
16
  */
8
17
  export function isValidLogger(logger) {
9
18
  const levels = Object.values(LoggerLevels);
10
- if (typeof logger !== 'object' || logger === null) {
19
+ if (!isObjectWithProperties(logger)) {
11
20
  return false;
12
21
  }
13
- const candidate = logger;
14
- return levels.some((level) => typeof candidate[level] === 'function');
22
+ return levels.some((level) => typeof logger[level] === 'function');
15
23
  }
16
24
  /**
17
25
  * Checks if the provided logger is an ExternalLogger instance with a child method.
18
26
  *
19
27
  * @param {unknown} logger - The logger to check.
20
- * @return {logger is ExternalLogger & { child: Function }} True if the logger is an ExternalLogger with a child method, false otherwise.
28
+ * @return {logger is ExternalLogger & { child: (bindings: Record<string, unknown>, options?: Record<string, unknown>) => ExternalLogger }} True if the logger is an ExternalLogger with a child method, false otherwise.
21
29
  */
22
30
  export function hasChild(logger) {
23
31
  return (typeof logger === 'object' &&
24
32
  logger !== null &&
33
+ 'child' in logger &&
25
34
  typeof logger.child === 'function');
26
35
  }
27
36
  //# sourceMappingURL=validators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/helpers/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAe;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAE3C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,MAAiC,CAAC;IAEpD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,SAAS,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CACtB,MAAe;IAEf,OAAO,CACL,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,OAAQ,MAAc,CAAC,KAAK,KAAK,UAAU,CAC5C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/helpers/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAe;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAE3C,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC,CAAC;AACrE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CACtB,MAAe;IAEf,OAAO,CACL,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,OAAO,IAAI,MAAM;QACjB,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,CACnC,CAAC;AACJ,CAAC"}
@@ -1,8 +1,7 @@
1
1
  import type { LoggerLevels } from '../constants/constants';
2
2
  export type LoggerLevel = (typeof LoggerLevels)[keyof typeof LoggerLevels];
3
3
  export interface LogFn {
4
- <T extends object>(obj: T, msg?: string, ...args: unknown[]): void;
5
- (obj: unknown, msg?: string, ...args: unknown[]): void;
4
+ (obj: object, msg?: string, ...args: unknown[]): void;
6
5
  (msg: string, ...args: unknown[]): void;
7
6
  }
8
7
  export interface ExternalLogger {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vvlad1973/simple-logger",
3
- "version": "2.1.10",
3
+ "version": "2.2.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -13,13 +13,12 @@ import {
13
13
  prepareLogCall,
14
14
  } from '../helpers/helpers.js';
15
15
  import { LoggerLevels } from '../constants/constants.js';
16
- import {
17
- type ExternalLogger,
18
- type LogFn,
19
- type LoggerFactory,
20
- type LoggerLevel,
21
- type LoggerOptions,
22
- PreparedLogCall,
16
+ import type {
17
+ ExternalLogger,
18
+ LogFn,
19
+ LoggerFactory,
20
+ LoggerLevel,
21
+ LoggerOptions,
23
22
  } from '../types/simple-logger.types.js';
24
23
 
25
24
  export default class SimpleLogger {
@@ -69,13 +68,13 @@ export default class SimpleLogger {
69
68
  const levels = Object.values(LoggerLevels);
70
69
  if (explicitLevel) return explicitLevel;
71
70
  if (
72
- logger &&
73
- typeof logger === 'object' &&
74
71
  'level' in logger &&
75
- typeof (logger as any).level === 'string'
72
+ typeof logger.level === 'string'
76
73
  ) {
77
- const lvl = (logger as any).level.toLowerCase();
78
- if (levels.includes(lvl as LoggerLevel)) return lvl as LoggerLevel;
74
+ const lvl = logger.level.toLowerCase();
75
+ const isValidLevel = (value: string): value is LoggerLevel =>
76
+ (levels as readonly string[]).includes(value);
77
+ if (isValidLevel(lvl)) return lvl;
79
78
  }
80
79
  return levels[this.currentLevelIndex];
81
80
  }
@@ -108,9 +107,9 @@ export default class SimpleLogger {
108
107
  } = options;
109
108
 
110
109
  const hasParams =
111
- level ||
112
- msgPrefix ||
113
- transport ||
110
+ level !== undefined ||
111
+ msgPrefix !== undefined ||
112
+ transport !== undefined ||
114
113
  Object.keys(bindings).length > 0 ||
115
114
  Object.keys(restOptions).length > 0;
116
115
  const effectiveBindings = {
@@ -229,7 +228,14 @@ export default class SimpleLogger {
229
228
  const prepared = prepareLogCall(args);
230
229
 
231
230
  if (prepared !== null) {
232
- (method as (...args: unknown[]) => void).apply(this.logger, prepared);
231
+ const [first, ...rest] = prepared;
232
+ if (typeof first === 'string') {
233
+ method(first, ...rest);
234
+ } else if (typeof first === 'object') {
235
+ const [second, ...otherRest] = rest;
236
+ const msg = typeof second === 'string' ? second : undefined;
237
+ method(first, msg, ...otherRest);
238
+ }
233
239
  } else {
234
240
  console.warn(`Invalid log arguments for "${level}"`, args);
235
241
  }
@@ -250,7 +256,7 @@ export default class SimpleLogger {
250
256
  const fullMsg = util.format(msg, ...rest);
251
257
 
252
258
  const ctx = Object.entries({ ...this.bindings, ...context })
253
- .map(([k, v]) => `${k}=${v}`)
259
+ .map(([k, v]) => `${k}=${String(v)}`)
254
260
  .join(' ');
255
261
 
256
262
  const prefix = `[${time}] ${levelStr}`;
@@ -318,11 +324,7 @@ export default class SimpleLogger {
318
324
  public child(newBindings: Record<string, unknown>): SimpleLogger {
319
325
  const merged = { ...this.bindings, ...newBindings };
320
326
 
321
- if (
322
- this.isExternal &&
323
- typeof this.logger === 'object' &&
324
- this.logger !== null
325
- ) {
327
+ if (this.isExternal) {
326
328
  const logger = this.logger as ExternalLogger;
327
329
  const childFn = logger.child;
328
330
 
@@ -359,7 +361,25 @@ export default class SimpleLogger {
359
361
  * @return {void}
360
362
  */
361
363
  public logFunctionEnd(name?: string): void {
362
- const caller = name || getCallerName();
364
+ const caller = name ?? getCallerName();
363
365
  this.trace(`Function end: ${caller}`);
364
366
  }
367
+
368
+ /**
369
+ * Flushes the logger buffer if the external logger supports it.
370
+ * This is useful for ensuring all buffered log entries are written before the application exits.
371
+ *
372
+ * @return {Promise<void>} A promise that resolves when the flush is complete.
373
+ */
374
+ public async flush(): Promise<void> {
375
+ if (!this.isExternal) {
376
+ return;
377
+ }
378
+
379
+ const logger = this.logger as ExternalLogger & { flush?: (callback: () => void) => void };
380
+ if (typeof logger.flush === 'function') {
381
+ const flushAsync = util.promisify(logger.flush.bind(logger)) as () => Promise<void>;
382
+ await flushAsync();
383
+ }
384
+ }
365
385
  }
@@ -36,6 +36,22 @@ export function extractMessage(args: unknown[]): {
36
36
  return { msg: '', rest: [] };
37
37
  }
38
38
 
39
+ /**
40
+ * Type guard to check if value is a plain object record.
41
+ *
42
+ * @param {unknown} value - The value to check.
43
+ * @return {value is Record<string, unknown>} True if the value is a plain object.
44
+ */
45
+ function isPlainObject(value: unknown): value is Record<string, unknown> {
46
+ return (
47
+ typeof value === 'object' &&
48
+ value !== null &&
49
+ !Array.isArray(value) &&
50
+ (Object.getPrototypeOf(value) === Object.prototype ||
51
+ Object.getPrototypeOf(value) === null)
52
+ );
53
+ }
54
+
39
55
  /**
40
56
  * Extracts the context object from the provided array of arguments.
41
57
  *
@@ -44,8 +60,8 @@ export function extractMessage(args: unknown[]): {
44
60
  */
45
61
  export function extractContext(args: unknown[]): Record<string, unknown> {
46
62
  const [first] = args;
47
- if (typeof first === 'object' && first !== null && !Array.isArray(first)) {
48
- return first as Record<string, unknown>;
63
+ if (isPlainObject(first)) {
64
+ return first;
49
65
  }
50
66
  return {};
51
67
  }
@@ -72,13 +88,15 @@ export function colorizeLevel(level: LoggerLevel, label: string): string {
72
88
  default:
73
89
  return label;
74
90
  }
91
+ }
92
+
75
93
  /**
76
94
  * Prepares the log call by rearranging the provided arguments into a standardized format.
77
95
  *
78
96
  * @param {unknown[]} args - The array of arguments to prepare for the log call.
79
97
  * @return {PreparedLogCall} The prepared log call arguments, or null if the input is invalid.
80
98
  */
81
- }export function prepareLogCall(args: unknown[]): PreparedLogCall {
99
+ export function prepareLogCall(args: unknown[]): PreparedLogCall {
82
100
  if (typeof args[0] === 'string') {
83
101
  return [args[0], ...args.slice(1)];
84
102
  }
@@ -1,6 +1,16 @@
1
1
  import { LoggerLevels } from '../constants/constants.js';
2
2
  import type { ExternalLogger } from '../types/simple-logger.types.js';
3
3
 
4
+ /**
5
+ * Type guard to check if value is an object with properties.
6
+ *
7
+ * @param {unknown} value - The value to check.
8
+ * @return {value is Record<string, unknown>} True if the value is an object.
9
+ */
10
+ function isObjectWithProperties(value: unknown): value is Record<string, unknown> {
11
+ return typeof value === 'object' && value !== null;
12
+ }
13
+
4
14
  /**
5
15
  * Checks if the provided logger is a valid ExternalLogger instance.
6
16
  *
@@ -10,27 +20,26 @@ import type { ExternalLogger } from '../types/simple-logger.types.js';
10
20
  export function isValidLogger(logger: unknown): logger is ExternalLogger {
11
21
  const levels = Object.values(LoggerLevels);
12
22
 
13
- if (typeof logger !== 'object' || logger === null) {
23
+ if (!isObjectWithProperties(logger)) {
14
24
  return false;
15
25
  }
16
26
 
17
- const candidate = logger as Record<string, unknown>;
18
-
19
- return levels.some((level) => typeof candidate[level] === 'function');
27
+ return levels.some((level) => typeof logger[level] === 'function');
20
28
  }
21
29
 
22
30
  /**
23
31
  * Checks if the provided logger is an ExternalLogger instance with a child method.
24
32
  *
25
33
  * @param {unknown} logger - The logger to check.
26
- * @return {logger is ExternalLogger & { child: Function }} True if the logger is an ExternalLogger with a child method, false otherwise.
34
+ * @return {logger is ExternalLogger & { child: (bindings: Record<string, unknown>, options?: Record<string, unknown>) => ExternalLogger }} True if the logger is an ExternalLogger with a child method, false otherwise.
27
35
  */
28
36
  export function hasChild(
29
37
  logger: unknown
30
- ): logger is ExternalLogger & { child: Function } {
38
+ ): logger is ExternalLogger & { child: (bindings: Record<string, unknown>, options?: Record<string, unknown>) => ExternalLogger } {
31
39
  return (
32
40
  typeof logger === 'object' &&
33
41
  logger !== null &&
34
- typeof (logger as any).child === 'function'
42
+ 'child' in logger &&
43
+ typeof logger.child === 'function'
35
44
  );
36
45
  }
@@ -3,8 +3,7 @@ import type { LoggerLevels } from '../constants/constants';
3
3
  export type LoggerLevel = (typeof LoggerLevels)[keyof typeof LoggerLevels];
4
4
 
5
5
  export interface LogFn {
6
- <T extends object>(obj: T, msg?: string, ...args: unknown[]): void;
7
- (obj: unknown, msg?: string, ...args: unknown[]): void;
6
+ (obj: object, msg?: string, ...args: unknown[]): void;
8
7
  (msg: string, ...args: unknown[]): void;
9
8
  }
10
9