@vvlad1973/simple-logger 2.2.0 → 2.3.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.
@@ -76,19 +76,81 @@ export function colorizeLevel(level, label) {
76
76
  }
77
77
  /**
78
78
  * Prepares the log call by rearranging the provided arguments into a standardized format.
79
+ * For external loggers (like pino), ensures context object comes BEFORE message string.
79
80
  *
80
81
  * @param {unknown[]} args - The array of arguments to prepare for the log call.
81
82
  * @return {PreparedLogCall} The prepared log call arguments, or null if the input is invalid.
82
83
  */
83
84
  export function prepareLogCall(args) {
84
- if (typeof args[0] === 'string') {
85
- return [args[0], ...args.slice(1)];
86
- }
85
+ // Case 1: First arg is object (context) - standard pino format
87
86
  if (typeof args[0] === 'object' && args[0] !== null) {
88
87
  const msg = typeof args[1] === 'string' ? args[1] : undefined;
89
88
  const rest = args.slice(msg ? 2 : 1);
90
89
  return [args[0], msg, ...rest];
91
90
  }
91
+ // Case 2: First arg is string (message)
92
+ if (typeof args[0] === 'string') {
93
+ const msg = args[0];
94
+ // Check if second arg is context object - if so, swap them for pino
95
+ if (typeof args[1] === 'object' && args[1] !== null && !Array.isArray(args[1])) {
96
+ const context = args[1];
97
+ const rest = args.slice(2);
98
+ return [context, msg, ...rest];
99
+ }
100
+ // Otherwise keep as is (message only or message with non-object args)
101
+ return [msg, ...args.slice(1)];
102
+ }
92
103
  return null;
93
104
  }
105
+ /**
106
+ * Safely wraps a value for logging to ensure it's a proper context object
107
+ *
108
+ * Use this helper ONLY for single values of unknown type that may be:
109
+ * - undefined/null
110
+ * - primitives (string, number, boolean)
111
+ * - Error objects (will be wrapped as an object with err property)
112
+ *
113
+ * DO NOT use for:
114
+ * - Composite objects with multiple fields (they're already safe)
115
+ * - Objects you construct yourself (use them directly)
116
+ *
117
+ * @param value - Value to wrap (can be Error, primitive, undefined, or object)
118
+ * @returns Safe object for logging or undefined if value is nullish
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * // Use for unknown single values
123
+ * catch (error) {
124
+ * logger.error(safeLogContext(error), 'Failed');
125
+ * }
126
+ *
127
+ * catch (reason) {
128
+ * logger.error(safeLogContext(reason), 'Rejected');
129
+ * }
130
+ *
131
+ * // DO NOT use for composite objects
132
+ * logger.error({ err, userId }, 'Failed'); // Direct, no helper needed
133
+ * ```
134
+ */
135
+ export function safeLogContext(value) {
136
+ // Nullish values - return empty record
137
+ if (value === null || value === undefined) {
138
+ return {};
139
+ }
140
+ // Error objects - wrap in standard "err" field
141
+ if (value instanceof Error) {
142
+ return { err: value };
143
+ }
144
+ // Already an object (not array) - validate it's a plain object
145
+ if (typeof value === 'object' && !Array.isArray(value)) {
146
+ // Use type guard to safely return the object
147
+ if (isPlainObject(value)) {
148
+ return value;
149
+ }
150
+ // For non-plain objects (class instances, etc), wrap them
151
+ return { value };
152
+ }
153
+ // Primitives or arrays - wrap in "value" field
154
+ return { value };
155
+ }
94
156
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers/helpers.ts"],"names":[],"mappings":"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"}
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;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAe;IAC5C,+DAA+D;IAC/D,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;IAED,wCAAwC;IACxC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,oEAAoE;QACpE,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QACjC,CAAC;QACD,sEAAsE;QACtE,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,uCAAuC;IACvC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,EAA6B,CAAC;IACvC,CAAC;IAED,+CAA+C;IAC/C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,+DAA+D;IAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,6CAA6C;QAC7C,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,0DAA0D;QAC1D,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,+CAA+C;IAC/C,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -3,3 +3,4 @@ export default SimpleLogger;
3
3
  export { SimpleLogger };
4
4
  export type * from './types/simple-logger.types.js';
5
5
  export * from './constants/constants.js';
6
+ export * from './helpers/helpers.js';
package/dist/index.js CHANGED
@@ -2,4 +2,5 @@ import SimpleLogger from './classes/simple-logger.js';
2
2
  export default SimpleLogger;
3
3
  export { SimpleLogger };
4
4
  export * from './constants/constants.js';
5
+ export * from './helpers/helpers.js';
5
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,4BAA4B,CAAC;AAEtD,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;AAGxB,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,4BAA4B,CAAC;AAEtD,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;AAGxB,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAA"}
package/eslint.config.js CHANGED
@@ -59,5 +59,19 @@ export default [
59
59
  'no-param-reassign': 'off',
60
60
  'complexity': ['warn', 25]
61
61
  }
62
+ },
63
+ {
64
+ files: ['src/**/*.test.ts'],
65
+ rules: {
66
+ '@typescript-eslint/no-unsafe-member-access': 'off',
67
+ '@typescript-eslint/no-unsafe-call': 'off',
68
+ '@typescript-eslint/no-unsafe-assignment': 'off',
69
+ '@typescript-eslint/no-unsafe-type-assertion': 'off',
70
+ '@typescript-eslint/no-explicit-any': 'off',
71
+ '@typescript-eslint/no-unsafe-return': 'off',
72
+ 'max-nested-callbacks': 'off',
73
+ '@typescript-eslint/no-confusing-void-expression': 'off',
74
+ 'no-new': 'off'
75
+ }
62
76
  }
63
77
  ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vvlad1973/simple-logger",
3
- "version": "2.2.0",
3
+ "version": "2.3.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -28,7 +28,7 @@
28
28
  "@eslint/compat": "^2.0.0",
29
29
  "@types/node": "^25.0.3",
30
30
  "@typescript-eslint/eslint-plugin": "^8.50.0",
31
- "@typescript-eslint/parser": "^8.50.0",
31
+ "@typescript-eslint/parser": "^8.50.1",
32
32
  "@vitest/coverage-v8": "^4.0.16",
33
33
  "@vvlad1973/gen-changelog": "^1.1.5",
34
34
  "eslint": "^9.39.2",