@lilaquadrat/studio 10.0.0-beta.7 → 10.0.0-beta.8

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/lib/src/logger.js CHANGED
@@ -1,40 +1,113 @@
1
1
  import { createLogger, format, transports } from 'winston';
2
2
  import prettyjson from 'prettyjson';
3
- const { printf, } = format;
4
- let useFormat;
5
- const mainFormat = printf((info) => {
6
- let base = '';
7
- if (!info.stack) {
8
- base = `[${info.timestamp}][${info.level}] ${info.message}`;
9
- if (info.data)
10
- base = `${base}\n\n${prettyjson.render(info.data)}\n`;
3
+ const LOG_FORMAT = process.env.LOG_FORMAT ??
4
+ (process.env.NODE_ENV === 'production' ? 'json' : 'console');
5
+ const LOG_LEVEL = process.env.LOG_LEVEL ??
6
+ (process.env.NODE_ENV === 'production' ? 'info' : 'debug');
7
+ const REDACT_KEYS = new Set([
8
+ 'password',
9
+ 'passwd',
10
+ 'secret',
11
+ 'token',
12
+ 'access_token',
13
+ 'refresh_token',
14
+ 'api_key',
15
+ 'apikey',
16
+ 'authorization',
17
+ 'cookie',
18
+ 'set-cookie',
19
+ ]);
20
+ function redactDeep(value) {
21
+ if (!value || typeof value !== 'object')
22
+ return value;
23
+ if (Array.isArray(value))
24
+ return value.map(redactDeep);
25
+ const obj = value;
26
+ const out = {};
27
+ for (const [k, v] of Object.entries(obj)) {
28
+ if (REDACT_KEYS.has(k.toLowerCase()))
29
+ out[k] = '[REDACTED]';
30
+ else
31
+ out[k] = redactDeep(v);
11
32
  }
12
- if (info.stack) {
13
- base = `[${info.timestamp}][ERROR][STACK]`;
14
- base = `${base}\n${info.stack}\n`;
33
+ return out;
34
+ }
35
+ function toPlainObject(value) {
36
+ if (!value || typeof value !== 'object')
37
+ return undefined;
38
+ if (Array.isArray(value))
39
+ return { items: value };
40
+ return value;
41
+ }
42
+ function safePretty(value) {
43
+ try {
44
+ return prettyjson.render(value);
45
+ }
46
+ catch {
47
+ // fallback for circular/unsupported structures
48
+ try {
49
+ return JSON.stringify(value);
50
+ }
51
+ catch {
52
+ return String(value);
53
+ }
15
54
  }
16
- return base;
17
- });
18
- if (process.env.LOG_FORMAT === 'console') {
19
- useFormat = format.combine(format((info) => {
20
- info.level = info.level.toUpperCase();
21
- return info;
22
- })(), format.timestamp({
23
- format: 'HH:mm:ss',
24
- }),
25
- // format.colorize({ all: true, colors: { info: 'white', debug: 'magenta' } }),
26
- format.simple(), format.splat(), format.errors({ stack: true }), mainFormat);
27
55
  }
28
- else {
29
- useFormat = format.combine(format.errors({ stack: true }), format.json());
56
+ const normalize = format((info) => {
57
+ // Keep winston core fields, move everything else into `meta`
58
+ const { level, message, timestamp, stack, ...rest } = info;
59
+ // If message itself is an Error, normalize it
60
+ if (message instanceof Error) {
61
+ info.message = message.message;
62
+ info.stack = info.stack ?? message.stack;
63
+ }
64
+ const meta = toPlainObject(rest);
65
+ if (meta && Object.keys(meta).length > 0) {
66
+ info.meta = redactDeep(meta);
67
+ }
68
+ if (info.data) {
69
+ info.data = redactDeep(info.data);
70
+ }
71
+ // Ensure message is a string for printf/json loggers
72
+ if (typeof info.message !== 'string') {
73
+ try {
74
+ info.message = JSON.stringify(info.message);
75
+ }
76
+ catch {
77
+ info.message = String(info.message);
78
+ }
79
+ }
80
+ return info;
81
+ });
82
+ const consoleFormat = format.combine(format.colorize({ all: true }), format.timestamp({ format: 'HH:mm:ss' }), format.errors({ stack: true }), format.splat(), normalize(), format.printf((info) => {
83
+ const lvl = String(info.level).toUpperCase();
84
+ const header = `[${info.timestamp}][${lvl}] ${info.message}`;
85
+ const blocks = [];
86
+ if (info.data)
87
+ blocks.push(safePretty(info.data));
88
+ if (info.meta)
89
+ blocks.push(safePretty(info.meta));
90
+ if (info.stack)
91
+ blocks.push(String(info.stack));
92
+ return blocks.length ? `${header}\n\n${blocks.join('\n\n')}\n` : header;
93
+ }));
94
+ const jsonFormat = format.combine(format.timestamp(), format.errors({ stack: true }), format.splat(), normalize(), format.json());
95
+ function createConsoleTransport() {
96
+ return new transports.Console({
97
+ stderrLevels: ['error'],
98
+ handleExceptions: true,
99
+ });
30
100
  }
101
+ const consoleTransport = createConsoleTransport();
31
102
  const logger = createLogger({
32
- level: process.env.LOG_LEVEL ?? 'debug',
33
- format: useFormat,
34
- transports: [
35
- new transports.Console(),
36
- ],
103
+ level: LOG_LEVEL,
104
+ format: LOG_FORMAT === 'console' ? consoleFormat : jsonFormat,
37
105
  defaultMeta: { service: 'studio' },
106
+ transports: [consoleTransport],
107
+ exceptionHandlers: [createConsoleTransport()],
108
+ rejectionHandlers: [createConsoleTransport()],
109
+ exitOnError: false,
110
+ silent: process.env.NODE_ENV === 'test',
38
111
  });
39
112
  export default logger;
40
113
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,MAAM,EACJ,MAAM,GACP,GAAG,MAAM,CAAC;AAEX,IAAI,SAAS,CAAC;AAEd,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IAEjC,IAAI,IAAI,GAAW,EAAE,CAAC;IAEtB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAEhB,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5D,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,GAAG,GAAG,IAAI,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAEvE,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAEf,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,iBAAiB,CAAC;QAE3C,IAAI,GAAG,GAAG,IAAI,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC;IAEpC,CAAC;IAED,OAAO,IAAI,CAAC;AAEd,CAAC,CAAC,CAAC;AAEH,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;IAEzC,SAAS,GAAG,MAAM,CAAC,OAAO,CACxB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAEd,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IAEd,CAAC,CAAC,EAAE,EACJ,MAAM,CAAC,SAAS,CAAC;QACf,MAAM,EAAE,UAAU;KACnB,CAAC;IACF,+EAA+E;IAC/E,MAAM,CAAC,MAAM,EAAE,EACf,MAAM,CAAC,KAAK,EAAE,EACd,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAC9B,UAAU,CACX,CAAC;AAEJ,CAAC;KAAM,CAAC;IAEN,SAAS,GAAG,MAAM,CAAC,OAAO,CACxB,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAC9B,MAAM,CAAC,IAAI,EAAE,CACd,CAAC;AAEJ,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,CAAC;IAC1B,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO;IACvC,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE;QACV,IAAI,UAAU,CAAC,OAAO,EAAE;KACzB;IACD,WAAW,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;CACnC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lilaquadrat/studio",
3
- "version": "10.0.0-beta.7",
3
+ "version": "10.0.0-beta.8",
4
4
  "description": "classes and tools for STUDIO",
5
5
  "type": "module",
6
6
  "license": "MIT",