@nxtedition/lib 14.0.16 → 14.0.18
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/package.json +2 -1
- package/serializers.js +3 -162
- package/util/template/index.js +10 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nxtedition/lib",
|
|
3
|
-
"version": "14.0.
|
|
3
|
+
"version": "14.0.18",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Robert Nagy <robert.nagy@boffins.se>",
|
|
6
6
|
"files": [
|
|
@@ -81,6 +81,7 @@
|
|
|
81
81
|
"nconf": "^0.12.0",
|
|
82
82
|
"nested-error-stacks": "^2.1.1",
|
|
83
83
|
"object-hash": "^3.0.0",
|
|
84
|
+
"pino-std-serializers": "^6.2.2",
|
|
84
85
|
"qs": "^6.11.1",
|
|
85
86
|
"request-target": "^1.0.2",
|
|
86
87
|
"smpte-timecode": "^1.3.3",
|
package/serializers.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
const serializers = require('pino-std-serializers')
|
|
2
|
+
|
|
1
3
|
function getHeader(obj, key) {
|
|
2
4
|
return obj?.headers?.get?.(key) || obj?.getHeader?.(key) || obj?.headers?.[key]
|
|
3
5
|
}
|
|
@@ -25,169 +27,8 @@ function getHeaders(obj) {
|
|
|
25
27
|
)
|
|
26
28
|
}
|
|
27
29
|
|
|
28
|
-
const isErrorLike = (err) => {
|
|
29
|
-
return err && typeof err.message === 'string'
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const getErrorCause = (err) => {
|
|
33
|
-
if (!err) {
|
|
34
|
-
return
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const cause = err.cause
|
|
38
|
-
|
|
39
|
-
if (typeof cause === 'function') {
|
|
40
|
-
const causeResult = err.cause()
|
|
41
|
-
return isErrorLike(causeResult) ? causeResult : undefined
|
|
42
|
-
} else {
|
|
43
|
-
return isErrorLike(cause) ? cause : undefined
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const _stackWithCauses = (err, seen) => {
|
|
48
|
-
if (!isErrorLike(err)) {
|
|
49
|
-
return ''
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const stack = err.stack || ''
|
|
53
|
-
|
|
54
|
-
// Ensure we don't go circular or crazily deep
|
|
55
|
-
if (seen.has(err)) {
|
|
56
|
-
return stack + '\ncauses have become circular...'
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const cause = getErrorCause(err)
|
|
60
|
-
|
|
61
|
-
if (cause) {
|
|
62
|
-
seen.add(err)
|
|
63
|
-
return stack + '\ncaused by: ' + _stackWithCauses(cause, seen)
|
|
64
|
-
} else {
|
|
65
|
-
return stack
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const stackWithCauses = (err) => _stackWithCauses(err, new Set())
|
|
70
|
-
|
|
71
|
-
const _messageWithCauses = (err, seen, skip) => {
|
|
72
|
-
if (!isErrorLike(err)) {
|
|
73
|
-
return ''
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
const message = skip ? '' : err.message || ''
|
|
77
|
-
|
|
78
|
-
// Ensure we don't go circular or crazily deep
|
|
79
|
-
if (seen.has(err)) {
|
|
80
|
-
return message + ': ...'
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const cause = getErrorCause(err)
|
|
84
|
-
|
|
85
|
-
if (cause) {
|
|
86
|
-
seen.add(err)
|
|
87
|
-
|
|
88
|
-
const skipIfVErrorStyleCause = typeof err.cause === 'function'
|
|
89
|
-
|
|
90
|
-
return (
|
|
91
|
-
message +
|
|
92
|
-
(skipIfVErrorStyleCause ? '' : ': ') +
|
|
93
|
-
_messageWithCauses(cause, seen, skipIfVErrorStyleCause)
|
|
94
|
-
)
|
|
95
|
-
} else {
|
|
96
|
-
return message
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
const messageWithCauses = (err) => _messageWithCauses(err, new Set())
|
|
101
|
-
|
|
102
|
-
const { toString } = Object.prototype
|
|
103
|
-
const seen = Symbol('circular-ref-tag')
|
|
104
|
-
const rawSymbol = Symbol('pino-raw-err-ref')
|
|
105
|
-
const pinoErrProto = Object.create(
|
|
106
|
-
{},
|
|
107
|
-
{
|
|
108
|
-
type: {
|
|
109
|
-
enumerable: true,
|
|
110
|
-
writable: true,
|
|
111
|
-
value: undefined,
|
|
112
|
-
},
|
|
113
|
-
message: {
|
|
114
|
-
enumerable: true,
|
|
115
|
-
writable: true,
|
|
116
|
-
value: undefined,
|
|
117
|
-
},
|
|
118
|
-
stack: {
|
|
119
|
-
enumerable: true,
|
|
120
|
-
writable: true,
|
|
121
|
-
value: undefined,
|
|
122
|
-
},
|
|
123
|
-
aggregateErrors: {
|
|
124
|
-
enumerable: true,
|
|
125
|
-
writable: true,
|
|
126
|
-
value: undefined,
|
|
127
|
-
},
|
|
128
|
-
raw: {
|
|
129
|
-
enumerable: false,
|
|
130
|
-
get: function () {
|
|
131
|
-
return this[rawSymbol]
|
|
132
|
-
},
|
|
133
|
-
set: function (val) {
|
|
134
|
-
this[rawSymbol] = val
|
|
135
|
-
},
|
|
136
|
-
},
|
|
137
|
-
}
|
|
138
|
-
)
|
|
139
|
-
Object.defineProperty(pinoErrProto, rawSymbol, {
|
|
140
|
-
writable: true,
|
|
141
|
-
value: {},
|
|
142
|
-
})
|
|
143
|
-
|
|
144
|
-
function errSerializer(err) {
|
|
145
|
-
if (!err) {
|
|
146
|
-
return undefined
|
|
147
|
-
} else if (typeof err === 'string') {
|
|
148
|
-
err = new Error(err)
|
|
149
|
-
} else if (Array.isArray(err)) {
|
|
150
|
-
err = new AggregateError(err)
|
|
151
|
-
} else if (!isErrorLike(err)) {
|
|
152
|
-
err = Object.assign(new Error('invalid error object'), { data: JSON.stringify(err) })
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
err[seen] = undefined // tag to prevent re-looking at this
|
|
156
|
-
const _err = Object.create(pinoErrProto)
|
|
157
|
-
_err.type =
|
|
158
|
-
toString.call(err.constructor) === '[object Function]' ? err.constructor.name : err.name
|
|
159
|
-
_err.message = messageWithCauses(err)
|
|
160
|
-
_err.stack = stackWithCauses(err)
|
|
161
|
-
|
|
162
|
-
if (Array.isArray(err.errors)) {
|
|
163
|
-
_err.aggregateErrors = err.errors.map((err) => errSerializer(err))
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
for (const key in err) {
|
|
167
|
-
if (/^[A-Z_]+$/.test(key)) {
|
|
168
|
-
// Ignore constants.
|
|
169
|
-
} else if (_err[key] === undefined) {
|
|
170
|
-
const val = err[key]
|
|
171
|
-
if (isErrorLike(val)) {
|
|
172
|
-
// We append cause messages and stacks to _err, therefore skipping causes here
|
|
173
|
-
if (key !== 'cause' && !Object.prototype.hasOwnProperty.call(val, seen)) {
|
|
174
|
-
_err[key] = errSerializer(val)
|
|
175
|
-
}
|
|
176
|
-
} else if (key === 'data' && typeof val !== 'string') {
|
|
177
|
-
_err[key] = JSON.stringify(val)
|
|
178
|
-
} else {
|
|
179
|
-
_err[key] = val
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
delete err[seen] // clean up tag in case err is serialized again later
|
|
185
|
-
_err.raw = err
|
|
186
|
-
return _err
|
|
187
|
-
}
|
|
188
|
-
|
|
189
30
|
module.exports = {
|
|
190
|
-
err:
|
|
31
|
+
err: serializers.err,
|
|
191
32
|
res: (res) =>
|
|
192
33
|
res && {
|
|
193
34
|
id: res.id || res.req?.id || getHeader(res, 'request-id') || getHeader(res.req, 'request-id'),
|
package/util/template/index.js
CHANGED
|
@@ -165,7 +165,16 @@ module.exports = ({ ds, proxify }) => {
|
|
|
165
165
|
return (str, args$) => expr(args$)
|
|
166
166
|
}
|
|
167
167
|
|
|
168
|
-
return (str, args$) =>
|
|
168
|
+
return (str, args$) =>
|
|
169
|
+
rxjs
|
|
170
|
+
.combineLatest([
|
|
171
|
+
compileStringTemplate(pre)?.(str, args$) ?? rxjs.of(pre),
|
|
172
|
+
expr(args$),
|
|
173
|
+
compileStringTemplate(post)?.(str, args$) ?? rxjs.of(post),
|
|
174
|
+
])
|
|
175
|
+
.pipe(
|
|
176
|
+
rx.map(([pre, body, post]) => (pre || post ? `${pre}${stringify(body)}${post}` : body))
|
|
177
|
+
)
|
|
169
178
|
} else if (type === 'nxt') {
|
|
170
179
|
const expr = compilers.nxt(body)
|
|
171
180
|
|