@kindgi/log 0.1.8-rc.0 → 0.1.9-rc.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.
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +67 -4
- package/dist/logger.js.map +1 -1
- package/dist/types.d.ts +6 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/logger.ts +67 -3
- package/src/types.ts +6 -1
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,QAAQ,EAAoC,MAAM,aAAa,CAAC;AAE9E,OAAO,KAAK,EAEV,SAAS,EAGT,MAAM,EAEP,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;IAC1B,uFAAuF;IACvF,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrD,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,sEAAsE;IACtE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,yBAAyB;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,QAAQ,EAAoC,MAAM,aAAa,CAAC;AAE9E,OAAO,KAAK,EAEV,SAAS,EAGT,MAAM,EAEP,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;IAC1B,uFAAuF;IACvF,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrD,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,sEAAsE;IACtE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,yBAAyB;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAwMD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAWjE;AAKD,eAAO,MAAM,UAAU,EAAE,MAQxB,CAAC"}
|
package/dist/logger.js
CHANGED
|
@@ -25,15 +25,78 @@ const CORRELATION = [
|
|
|
25
25
|
const FIXED = new Set(['time', 'level', 'severity', 'subsystem', 'message']);
|
|
26
26
|
/** Names a field can't take: the fixed five and `inMessage`, the record's own. */
|
|
27
27
|
const RESERVED = new Set([...FIXED, 'inMessage']);
|
|
28
|
+
/** `err[key]`, or undefined when reading it throws (a getter, a revoked proxy). */
|
|
29
|
+
function fieldOf(err, key) {
|
|
30
|
+
try {
|
|
31
|
+
return err[key];
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** A string or numeric `code`, as a string. */
|
|
38
|
+
function codeOf(err) {
|
|
39
|
+
const code = fieldOf(err, 'code');
|
|
40
|
+
return typeof code === 'string' || typeof code === 'number' ? { code: String(code) } : {};
|
|
41
|
+
}
|
|
42
|
+
/** `err instanceof Error`, and false where asking throws (a revoked proxy). */
|
|
43
|
+
function isError(err) {
|
|
44
|
+
try {
|
|
45
|
+
return err instanceof Error;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* `String(value)`, for a value that isn't an error. One that can't be made
|
|
53
|
+
* a string (no prototype, a throwing `toString`) is its
|
|
54
|
+
* `Object.prototype.toString` tag, and a revoked proxy `[unreadable]`:
|
|
55
|
+
* logging it never throws.
|
|
56
|
+
*/
|
|
57
|
+
function textOf(value) {
|
|
58
|
+
try {
|
|
59
|
+
return String(value);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
try {
|
|
63
|
+
return Object.prototype.toString.call(value);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return '[unreadable]';
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* A plain object in an error's place (a storage error is
|
|
72
|
+
* `{ code, message, cause }`): its name when that's a non-empty string
|
|
73
|
+
* (else `Object`), its code and its message, and nothing else. Its own
|
|
74
|
+
* cause isn't walked: a storage error's is the database driver's, whose
|
|
75
|
+
* text can carry the query and the values it was bound to. With neither a
|
|
76
|
+
* code nor a message, it's `String(err)`. A field that throws when read
|
|
77
|
+
* counts as missing.
|
|
78
|
+
*/
|
|
79
|
+
function serializePlain(err) {
|
|
80
|
+
const name = fieldOf(err, 'name');
|
|
81
|
+
const message = fieldOf(err, 'message');
|
|
82
|
+
const code = codeOf(err);
|
|
83
|
+
if (typeof message !== 'string' && code.code === undefined)
|
|
84
|
+
return scrubText(textOf(err));
|
|
85
|
+
return {
|
|
86
|
+
name: typeof name === 'string' && name !== '' ? name : 'Object',
|
|
87
|
+
message: typeof message === 'string' ? scrubText(message) : '',
|
|
88
|
+
...code,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
28
91
|
function serializeError(err, withStack, depth = 0) {
|
|
29
|
-
if (!(err
|
|
30
|
-
return scrubText(
|
|
31
|
-
|
|
92
|
+
if (!isError(err)) {
|
|
93
|
+
return typeof err === 'object' && err !== null ? serializePlain(err) : scrubText(textOf(err));
|
|
94
|
+
}
|
|
32
95
|
const cause = err.cause;
|
|
33
96
|
return {
|
|
34
97
|
name: err.name,
|
|
35
98
|
message: scrubText(err.message),
|
|
36
|
-
...(
|
|
99
|
+
...codeOf(err),
|
|
37
100
|
...(withStack && err.stack !== undefined && { stack: scrubText(err.stack) }),
|
|
38
101
|
...(cause !== undefined && depth < 3 && { cause: serializeError(cause, withStack, depth + 1) }),
|
|
39
102
|
};
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAiB,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA6BrD,oFAAoF;AACpF,MAAM,WAAW,GAAG;IAClB,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,UAAU;IACV,WAAW;IACX,OAAO;IACP,OAAO;IACP,aAAa;IACb,SAAS;IACT,cAAc;IACd,QAAQ;IACR,aAAa;IACb,QAAQ;IACR,gBAAgB;IAChB,YAAY;CACJ,CAAC;AAEX,MAAM,KAAK,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;AAClG,kFAAkF;AAClF,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;AAEvE,SAAS,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -28,7 +28,12 @@ export interface LogRecord {
|
|
|
28
28
|
readonly inMessage?: readonly string[];
|
|
29
29
|
readonly [field: string]: unknown;
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* An error, as a record carries it. `stack` at `error`, or when the logger
|
|
33
|
+
* is at `debug` or below. A plain object in an error's place (a storage
|
|
34
|
+
* error) carries its non-empty string name (else `Object`), code and
|
|
35
|
+
* message only: no stack, and its own cause isn't walked.
|
|
36
|
+
*/
|
|
32
37
|
export interface SerializedError {
|
|
33
38
|
readonly name: string;
|
|
34
39
|
readonly message: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,qEAAqE;AACrE,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,qEAAqE;AACrE,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;CAC3C;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED;;;;;GAKG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACvE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACtE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACtE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACvE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACvE,KAAK,CAAC,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAC;IACnC,kGAAkG;IAClG,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC1C;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kindgi/log",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9-rc.0",
|
|
4
4
|
"description": "Kindgi™ structured logging: levels per subsystem (with dotted inheritance), JSON and pretty formats, redaction of secret keys and token shapes, and W3C trace-context helpers. The runtime and @kindgi/api write the same records. Zero runtime dependencies.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
package/src/logger.ts
CHANGED
|
@@ -56,14 +56,78 @@ const FIXED: ReadonlySet<string> = new Set(['time', 'level', 'severity', 'subsys
|
|
|
56
56
|
/** Names a field can't take: the fixed five and `inMessage`, the record's own. */
|
|
57
57
|
const RESERVED: ReadonlySet<string> = new Set([...FIXED, 'inMessage']);
|
|
58
58
|
|
|
59
|
+
/** `err[key]`, or undefined when reading it throws (a getter, a revoked proxy). */
|
|
60
|
+
function fieldOf(err: object, key: 'name' | 'message' | 'code'): unknown {
|
|
61
|
+
try {
|
|
62
|
+
return (err as Readonly<Record<string, unknown>>)[key];
|
|
63
|
+
} catch {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** A string or numeric `code`, as a string. */
|
|
69
|
+
function codeOf(err: object): { readonly code?: string } {
|
|
70
|
+
const code = fieldOf(err, 'code');
|
|
71
|
+
return typeof code === 'string' || typeof code === 'number' ? { code: String(code) } : {};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** `err instanceof Error`, and false where asking throws (a revoked proxy). */
|
|
75
|
+
function isError(err: unknown): err is Error {
|
|
76
|
+
try {
|
|
77
|
+
return err instanceof Error;
|
|
78
|
+
} catch {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* `String(value)`, for a value that isn't an error. One that can't be made
|
|
85
|
+
* a string (no prototype, a throwing `toString`) is its
|
|
86
|
+
* `Object.prototype.toString` tag, and a revoked proxy `[unreadable]`:
|
|
87
|
+
* logging it never throws.
|
|
88
|
+
*/
|
|
89
|
+
function textOf(value: unknown): string {
|
|
90
|
+
try {
|
|
91
|
+
return String(value);
|
|
92
|
+
} catch {
|
|
93
|
+
try {
|
|
94
|
+
return Object.prototype.toString.call(value);
|
|
95
|
+
} catch {
|
|
96
|
+
return '[unreadable]';
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* A plain object in an error's place (a storage error is
|
|
103
|
+
* `{ code, message, cause }`): its name when that's a non-empty string
|
|
104
|
+
* (else `Object`), its code and its message, and nothing else. Its own
|
|
105
|
+
* cause isn't walked: a storage error's is the database driver's, whose
|
|
106
|
+
* text can carry the query and the values it was bound to. With neither a
|
|
107
|
+
* code nor a message, it's `String(err)`. A field that throws when read
|
|
108
|
+
* counts as missing.
|
|
109
|
+
*/
|
|
110
|
+
function serializePlain(err: object): SerializedError | string {
|
|
111
|
+
const name = fieldOf(err, 'name');
|
|
112
|
+
const message = fieldOf(err, 'message');
|
|
113
|
+
const code = codeOf(err);
|
|
114
|
+
if (typeof message !== 'string' && code.code === undefined) return scrubText(textOf(err));
|
|
115
|
+
return {
|
|
116
|
+
name: typeof name === 'string' && name !== '' ? name : 'Object',
|
|
117
|
+
message: typeof message === 'string' ? scrubText(message) : '',
|
|
118
|
+
...code,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
59
122
|
function serializeError(err: unknown, withStack: boolean, depth = 0): SerializedError | string {
|
|
60
|
-
if (!(err
|
|
61
|
-
|
|
123
|
+
if (!isError(err)) {
|
|
124
|
+
return typeof err === 'object' && err !== null ? serializePlain(err) : scrubText(textOf(err));
|
|
125
|
+
}
|
|
62
126
|
const cause = (err as { readonly cause?: unknown }).cause;
|
|
63
127
|
return {
|
|
64
128
|
name: err.name,
|
|
65
129
|
message: scrubText(err.message),
|
|
66
|
-
...(
|
|
130
|
+
...codeOf(err),
|
|
67
131
|
...(withStack && err.stack !== undefined && { stack: scrubText(err.stack) }),
|
|
68
132
|
...(cause !== undefined && depth < 3 && { cause: serializeError(cause, withStack, depth + 1) }),
|
|
69
133
|
};
|
package/src/types.ts
CHANGED
|
@@ -34,7 +34,12 @@ export interface LogRecord {
|
|
|
34
34
|
readonly [field: string]: unknown;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* An error, as a record carries it. `stack` at `error`, or when the logger
|
|
39
|
+
* is at `debug` or below. A plain object in an error's place (a storage
|
|
40
|
+
* error) carries its non-empty string name (else `Object`), code and
|
|
41
|
+
* message only: no stack, and its own cause isn't walked.
|
|
42
|
+
*/
|
|
38
43
|
export interface SerializedError {
|
|
39
44
|
readonly name: string;
|
|
40
45
|
readonly message: string;
|