@nxtedition/lib 26.4.6 → 26.4.7

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxtedition/lib",
3
- "version": "26.4.6",
3
+ "version": "26.4.7",
4
4
  "license": "MIT",
5
5
  "author": "Robert Nagy <robert.nagy@boffins.se>",
6
6
  "type": "module",
package/serializers.js CHANGED
@@ -1,11 +1,12 @@
1
1
  import { SIGNALS } from './platform.js'
2
2
  import { parseHeaders } from '@nxtedition/nxt-undici'
3
3
  import requestTarget from 'request-target'
4
+ import querystring from 'fast-querystring'
4
5
 
5
6
  function getHeader(obj, key) {
6
7
  return !obj || !key
7
8
  ? undefined
8
- : obj.headers?.get?.(key) || obj.getHeader?.(key) || obj.headers?.[key]
9
+ : obj.headers?.[key] || obj.headers?.get?.(key) || obj.getHeader?.(key)
9
10
  }
10
11
 
11
12
  function getHeaders(obj) {
@@ -35,15 +36,15 @@ function getUrl(obj) {
35
36
 
36
37
  const { origin, path, hostname, protocol, port, url } = obj
37
38
 
39
+ if (typeof url === 'string' && url) {
40
+ return url
41
+ }
42
+
38
43
  const href = url?.href
39
44
  if (typeof href === 'string' && href) {
40
45
  return href
41
46
  }
42
47
 
43
- if (typeof url === 'string' && url) {
44
- return url
45
- }
46
-
47
48
  if (origin && (!path || typeof path === 'string')) {
48
49
  if (typeof origin === 'object') {
49
50
  return `${origin.protocol || 'http:'}//${origin.hostname}:${origin.port || { 'http:': 80, 'https:': 443 }[origin.protocol]}${path || ''}`
@@ -81,6 +82,18 @@ function getTarget(obj) {
81
82
  if (typeof obj.url === 'string') {
82
83
  // TODO(fix): What if url is a full url?
83
84
  return requestTarget({ url: obj.url, headers: obj.headers ?? {}, socket: obj.socket })
85
+ } else {
86
+ const { origin, path, hostname, protocol, port, search, query } = obj
87
+ return {
88
+ origin,
89
+ protocol: protocol || undefined,
90
+ hostname: hostname || undefined,
91
+ port: port || undefined,
92
+ pathname: path || undefined,
93
+ search:
94
+ search ||
95
+ (typeof query === 'object' && query != null ? querystring.stringify(query) : undefined),
96
+ }
84
97
  }
85
98
  } catch {
86
99
  return undefined
@@ -104,15 +117,17 @@ export default {
104
117
  },
105
118
  req: (req) =>
106
119
  req && {
120
+ id: req.id || getHeader(req, 'request-id'),
107
121
  method: req.method,
108
- headers: getHeaders(req),
109
122
  target: getTarget(req),
123
+ url: getUrl(req),
124
+ headers: getHeaders(req),
110
125
  timing: req.timing,
111
126
  bytesRead: req.bytesRead >= 0 ? req.bytesRead : undefined,
112
127
  bytesReadPerSecond:
113
128
  req.bytesReadPerSecond ??
114
- (req.timing?.complete > 0 && req.bytesRead > 0
115
- ? (req.bytesRead * 1e3) / req.timing.complete
129
+ (req.timing?.end > 0 && req.bytesRead > 0
130
+ ? (req.bytesRead * 1e3) / req.timing.end
116
131
  : undefined),
117
132
  remoteAddress: req.socket?.remoteAddress,
118
133
  remotePort: req.socket?.remotePort,
@@ -120,43 +135,45 @@ export default {
120
135
  closed: req.closed,
121
136
  destroyed: req.destroyed,
122
137
  },
138
+ ureq: (ureq) =>
139
+ ureq && {
140
+ id: ureq.id || getHeader(ureq, 'request-id'),
141
+ method: ureq.method,
142
+ target: getTarget(ureq),
143
+ url: getUrl(ureq),
144
+ headers: getHeaders(ureq),
145
+ timing: ureq.timing,
146
+ bytesWritten: ureq.bytesWritten,
147
+ bytesReadPerSecond:
148
+ ureq.bytesWrittenPerSecond ??
149
+ (ureq.timing && ureq.timing.data > 0 && ureq.timing.end > 0
150
+ ? (ureq.bytesWritten * 1e3) / (ureq.timing.end - ureq.timing.data)
151
+ : undefined),
152
+ body: typeof ureq.body === 'string' ? ureq.body : undefined,
153
+ },
123
154
  res: (res) =>
124
155
  res && {
156
+ id: res.id || getHeader(res, 'request-id') || getHeader(res.req, 'request-id'),
125
157
  headers: getHeaders(res),
126
158
  statusCode: res.statusCode || res.status,
127
159
  timing: res.timing,
128
160
  bytesWritten: res.bytesWritten >= 0 ? res.bytesWritten : undefined,
129
161
  bytesWrittenPerSecond:
130
162
  res.bytesWrittenPerSecond ??
131
- (res.timing?.complete > 0 && res.bytesWritten > 0
132
- ? (res.bytesWritten * 1e3) / res.timing.complete
163
+ (res.timing?.end > 0 && res.bytesWritten > 0
164
+ ? (res.bytesWritten * 1e3) / res.timing.end
133
165
  : undefined),
134
166
  headersSent: res.headersSent,
135
167
  aborted: res.aborted,
136
168
  closed: res.closed,
137
169
  destroyed: res.destroyed,
138
170
  },
139
- ureq: (ureq) =>
140
- ureq && {
141
- url: getUrl(ureq),
142
- id: ureq.id || getHeader(ureq, 'request-id'),
143
- timing: ureq.timing,
144
- method: ureq.method,
145
- body: typeof ureq.body === 'string' ? ureq.body : undefined,
146
- bytesWritten: ureq.bytesWritten,
147
- bytesReadPerSecond:
148
- ureq.bytesWrittenPerSecond ??
149
- (ureq.timing && ureq.timing.data > 0 && ureq.timing.end > 0
150
- ? (ureq.bytesWritten * 1e3) / (ureq.timing.end - ureq.timing.data)
151
- : undefined),
152
- headers: getHeaders(ureq),
153
- query: ureq.query,
154
- },
155
171
  ures: (ures) =>
156
172
  ures && {
157
173
  id: ures.id || getHeader(ures, 'request-id') || getHeader(ures.req, 'request-id'),
158
- timing: ures.timing,
174
+ headers: getHeaders(ures),
159
175
  statusCode: ures.statusCode ?? ures.status,
176
+ timing: ures.timing,
160
177
  bytesRead: ures.bytesRead,
161
178
  bytesReadPerSecond:
162
179
  ures.bytesReadPerSecond ??
@@ -164,7 +181,6 @@ export default {
164
181
  ? (ures.bytesRead * 1e3) / (ures.timing.end - ures.timing.data)
165
182
  : undefined),
166
183
  body: typeof ures.body === 'string' ? ures.body : undefined,
167
- headers: getHeaders(ures),
168
184
  },
169
185
  }
170
186
 
@@ -214,14 +214,18 @@ export function compareRevSliceSlice(a, b) {
214
214
  let lenA = endA
215
215
  a = a.buffer
216
216
 
217
- if (
218
- !Buffer.isBuffer(a) ||
219
- !Number.isInteger(idxA) ||
220
- idxA < 0 ||
221
- !Number.isInteger(lenA) ||
222
- lenA < 0
223
- ) {
224
- throw new Error('invalid argument: a')
217
+ if (!Buffer.isBuffer(a)) {
218
+ throw Object.assign(new Error('a is not a Buffer.'), {
219
+ data: a?.constructor?.name,
220
+ })
221
+ }
222
+
223
+ if (!Number.isInteger(idxA) || idxA < 0) {
224
+ throw Object.assign(new Error('a has invalid index'), { data: idxA })
225
+ }
226
+
227
+ if (!Number.isInteger(lenA) || lenA < 0) {
228
+ throw Object.assign(new Error('a has invalid length'), { data: lenA })
225
229
  }
226
230
 
227
231
  const endB = b.byteOffset + b.byteLength
@@ -229,14 +233,18 @@ export function compareRevSliceSlice(a, b) {
229
233
  let lenB = endB
230
234
  b = b.buffer
231
235
 
232
- if (
233
- !Buffer.isBuffer(b) ||
234
- !Number.isInteger(idxB) ||
235
- idxB < 0 ||
236
- !Number.isInteger(lenB) ||
237
- lenB < 0
238
- ) {
239
- throw new Error('invalid argument: b')
236
+ if (!Buffer.isBuffer(b)) {
237
+ throw Object.assign(new Error('b is not a Buffer.'), {
238
+ data: b?.constructor?.name,
239
+ })
240
+ }
241
+
242
+ if (!Number.isInteger(idxB) || idxB < 0) {
243
+ throw Object.assign(new Error('b has invalid index'), { data: idxB })
244
+ }
245
+
246
+ if (!Number.isInteger(lenB) || lenB < 0) {
247
+ throw Object.assign(new Error('b has invalid length'), { data: lenB })
240
248
  }
241
249
 
242
250
  // Handle INF-XXXXXXXX