@c9up/spectrum 0.1.5 → 0.1.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../src/Logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAY,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGhE,YAAY,EAAE,QAAQ,EAAE,CAAC;AAEzB,qBAAa,MAAM;IAClB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAC,CAAS;gBAEnB,MAAM,EAAE,SAAS,EAAE,MAAM,SAAQ,EAAE,aAAa,CAAC,EAAE,MAAM;IAMrE;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAQnE;;;OAGG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIlC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,OAAO,CAAC,GAAG;CAgCX"}
1
+ {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../src/Logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAY,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGhE,YAAY,EAAE,QAAQ,EAAE,CAAC;AAwBzB,qBAAa,MAAM;IAClB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAC,CAAS;gBAEnB,MAAM,EAAE,SAAS,EAAE,MAAM,SAAQ,EAAE,aAAa,CAAC,EAAE,MAAM;IAMrE;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAQnE;;;OAGG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIlC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,OAAO,CAAC,GAAG;CAgCX"}
package/dist/Logger.js CHANGED
@@ -4,6 +4,26 @@
4
4
  * @implements FR54, FR55, FR56, FR58
5
5
  */
6
6
  import { LOG_LEVEL_ORDER } from "./types.js";
7
+ /**
8
+ * Serialize an `err`/`error` Error in the log data into a plain `{ name, message,
9
+ * stack }` (AdonisJS/pino `err` serializer parity) — Errors don't JSON-stringify
10
+ * usefully otherwise. Other data passes through untouched. Returns a new object;
11
+ * the caller's data is not mutated.
12
+ */
13
+ function serializeErr(data) {
14
+ if (!data)
15
+ return data;
16
+ for (const key of ["err", "error"]) {
17
+ const v = data[key];
18
+ if (v instanceof Error) {
19
+ return {
20
+ ...data,
21
+ [key]: { name: v.name, message: v.message, stack: v.stack },
22
+ };
23
+ }
24
+ }
25
+ return data;
26
+ }
7
27
  export class Logger {
8
28
  config;
9
29
  module;
@@ -57,7 +77,7 @@ export class Logger {
57
77
  module: this.module,
58
78
  correlationId: this.correlationId,
59
79
  timestamp: new Date().toISOString(),
60
- data,
80
+ data: serializeErr(data),
61
81
  };
62
82
  for (const channel of this.config.channels) {
63
83
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../src/Logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,OAAO,MAAM;IACV,MAAM,CAAY;IAClB,MAAM,CAAS;IACf,aAAa,CAAU;IAE/B,YAAY,MAAiB,EAAE,MAAM,GAAG,KAAK,EAAE,aAAsB;QACpE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAoD;QACzD,OAAO,IAAI,MAAM,CAChB,IAAI,CAAC,MAAM,EACX,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAC7B,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAC3C,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,EAAU;QAC1B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAA8B;QACpD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAA8B;QACpD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAA8B;QACnD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAA8B;QACnD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAA8B;QACpD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAA8B;QACpD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAEO,GAAG,CACV,KAAe,EACf,OAAe,EACf,IAA8B;QAE9B,MAAM,YAAY,GACjB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACzD,MAAM,cAAc,GACnB,eAAe,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QACrE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC;YACrE,OAAO;QACR,CAAC;QAED,MAAM,KAAK,GAAa;YACvB,KAAK;YACL,OAAO;YACP,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,IAAI;SACJ,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACJ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,MAAM,CAAC,KAAK,CACnB,uBAAuB,OAAO,CAAC,IAAI,iBAAiB,OAAO,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAChF,CAAC;YACH,CAAC;QACF,CAAC;IACF,CAAC;CACD"}
1
+ {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../src/Logger.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * import logger from '@c9up/spectrum/services/main'
6
6
  *
7
- * logger.info({ userId }, 'user logged in')
7
+ * logger.info('user logged in', { userId }) // message-first; data + `err` serialized
8
8
  *
9
9
  * Populated by `SpectrumProvider.boot()`.
10
10
  */
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * import logger from '@c9up/spectrum/services/main'
6
6
  *
7
- * logger.info({ userId }, 'user logged in')
7
+ * logger.info('user logged in', { userId }) // message-first; data + `err` serialized
8
8
  *
9
9
  * Populated by `SpectrumProvider.boot()`.
10
10
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c9up/spectrum",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "Spectrum — structured logging for the Ream framework",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/src/Logger.ts CHANGED
@@ -9,6 +9,28 @@ import { LOG_LEVEL_ORDER } from "./types.js";
9
9
 
10
10
  export type { LogLevel };
11
11
 
12
+ /**
13
+ * Serialize an `err`/`error` Error in the log data into a plain `{ name, message,
14
+ * stack }` (AdonisJS/pino `err` serializer parity) — Errors don't JSON-stringify
15
+ * usefully otherwise. Other data passes through untouched. Returns a new object;
16
+ * the caller's data is not mutated.
17
+ */
18
+ function serializeErr(
19
+ data?: Record<string, unknown>,
20
+ ): Record<string, unknown> | undefined {
21
+ if (!data) return data;
22
+ for (const key of ["err", "error"]) {
23
+ const v = data[key];
24
+ if (v instanceof Error) {
25
+ return {
26
+ ...data,
27
+ [key]: { name: v.name, message: v.message, stack: v.stack },
28
+ };
29
+ }
30
+ }
31
+ return data;
32
+ }
33
+
12
34
  export class Logger {
13
35
  private config: LogConfig;
14
36
  private module: string;
@@ -83,7 +105,7 @@ export class Logger {
83
105
  module: this.module,
84
106
  correlationId: this.correlationId,
85
107
  timestamp: new Date().toISOString(),
86
- data,
108
+ data: serializeErr(data),
87
109
  };
88
110
 
89
111
  for (const channel of this.config.channels) {
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * import logger from '@c9up/spectrum/services/main'
6
6
  *
7
- * logger.info({ userId }, 'user logged in')
7
+ * logger.info('user logged in', { userId }) // message-first; data + `err` serialized
8
8
  *
9
9
  * Populated by `SpectrumProvider.boot()`.
10
10
  */