@nxtedition/nxt-undici 5.2.1 → 6.0.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.
@@ -1,5 +1,5 @@
1
1
  import { SqliteCacheStore } from '../cache/sqlite-cache-store.js'
2
- import { DecoratorHandler, parseHeaders, parseCacheControl } from '../utils.js'
2
+ import { DecoratorHandler, parseCacheControl } from '../utils.js'
3
3
 
4
4
  const DEFAULT_STORE = new SqliteCacheStore({ location: ':memory:' })
5
5
 
@@ -21,15 +21,15 @@ class CacheHandler extends DecoratorHandler {
21
21
  super.onConnect(abort)
22
22
  }
23
23
 
24
- onHeaders(statusCode, rawHeaders, resume, statusMessage, headers = parseHeaders(rawHeaders)) {
24
+ onHeaders(statusCode, headers, resume) {
25
25
  if (statusCode !== 307) {
26
26
  // Only cache redirects...
27
- return super.onHeaders(statusCode, null, resume, null, headers)
27
+ return super.onHeaders(statusCode, headers, resume)
28
28
  }
29
29
 
30
30
  if (headers.vary === '*') {
31
31
  // Not cacheble...
32
- return super.onHeaders(statusCode, null, resume, null, headers)
32
+ return super.onHeaders(statusCode, headers, resume)
33
33
  }
34
34
 
35
35
  const cacheControl = parseCacheControl(headers['cache-control'])
@@ -37,7 +37,7 @@ class CacheHandler extends DecoratorHandler {
37
37
 
38
38
  if (contentLength) {
39
39
  // We don't support caching responses with body...
40
- return super.onHeaders(statusCode, null, resume, null, headers)
40
+ return super.onHeaders(statusCode, headers, resume)
41
41
  }
42
42
 
43
43
  if (
@@ -53,7 +53,7 @@ class CacheHandler extends DecoratorHandler {
53
53
  cacheControl['proxy-revalidate']
54
54
  ) {
55
55
  // Not cacheble...
56
- return super.onHeaders(statusCode, null, resume, null, headers)
56
+ return super.onHeaders(statusCode, headers, resume)
57
57
  }
58
58
 
59
59
  const vary = {}
@@ -64,20 +64,20 @@ class CacheHandler extends DecoratorHandler {
64
64
  const val = this.#opts.headers?.[key]
65
65
  if (!val) {
66
66
  // Expect vary headers to be present...
67
- return super.onHeaders(statusCode, null, resume, null, headers)
67
+ return super.onHeaders(statusCode, headers, resume)
68
68
  }
69
69
  vary[key] = val
70
70
  }
71
71
 
72
72
  // Unexpected vary header type...
73
- return super.onHeaders(statusCode, null, resume, null, headers)
73
+ return super.onHeaders(statusCode, headers, resume)
74
74
  }
75
75
 
76
76
  const ttl = cacheControl.immutable
77
77
  ? 31556952
78
78
  : Number(cacheControl['s-max-age'] ?? cacheControl['max-age'])
79
79
  if (!ttl || !Number.isFinite(ttl) || ttl <= 0) {
80
- return super.onHeaders(statusCode, null, resume, null, headers)
80
+ return super.onHeaders(statusCode, headers, resume)
81
81
  }
82
82
 
83
83
  const cachedAt = Date.now()
@@ -95,7 +95,7 @@ class CacheHandler extends DecoratorHandler {
95
95
  staleAt: 0,
96
96
  }
97
97
 
98
- return super.onHeaders(statusCode, null, resume, null, headers)
98
+ return super.onHeaders(statusCode, headers, resume)
99
99
  }
100
100
 
101
101
  onData(chunk) {
@@ -164,7 +164,7 @@ export default () => (dispatch) => (opts, handler) => {
164
164
  return true
165
165
  }
166
166
 
167
- if (handler.onHeaders(statusCode, null, resume, null, headers) === false) {
167
+ if (handler.onHeaders(statusCode, headers, resume) === false) {
168
168
  paused = true
169
169
  }
170
170
 
@@ -1,4 +1,4 @@
1
- import { DecoratorHandler, parseHeaders } from '../utils.js'
1
+ import { DecoratorHandler } from '../utils.js'
2
2
 
3
3
  class Handler extends DecoratorHandler {
4
4
  #opts
@@ -45,7 +45,7 @@ class Handler extends DecoratorHandler {
45
45
  })
46
46
  }
47
47
 
48
- onUpgrade(statusCode, rawHeaders, socket, headers = parseHeaders(rawHeaders)) {
48
+ onUpgrade(statusCode, headers, socket) {
49
49
  this.#timing.headers = performance.now() - this.#created
50
50
 
51
51
  this.#logger.debug(
@@ -63,13 +63,13 @@ class Handler extends DecoratorHandler {
63
63
  super.onUpgrade(statusCode, null, socket, headers)
64
64
  }
65
65
 
66
- onHeaders(statusCode, rawHeaders, resume, statusMessage, headers = parseHeaders(rawHeaders)) {
66
+ onHeaders(statusCode, headers, resume) {
67
67
  this.#timing.headers = performance.now() - this.#created
68
68
 
69
69
  this.#statusCode = statusCode
70
70
  this.#headers = headers
71
71
 
72
- return super.onHeaders(statusCode, null, resume, null, headers)
72
+ return super.onHeaders(statusCode, headers, resume)
73
73
  }
74
74
 
75
75
  onData(chunk) {
@@ -1,6 +1,6 @@
1
1
  import net from 'node:net'
2
2
  import createError from 'http-errors'
3
- import { DecoratorHandler, parseHeaders } from '../utils.js'
3
+ import { DecoratorHandler } from '../utils.js'
4
4
 
5
5
  class Handler extends DecoratorHandler {
6
6
  #opts
@@ -11,7 +11,7 @@ class Handler extends DecoratorHandler {
11
11
  this.#opts = proxyOpts
12
12
  }
13
13
 
14
- onUpgrade(statusCode, rawHeaders, socket, headers = parseHeaders(rawHeaders)) {
14
+ onUpgrade(statusCode, headers, socket) {
15
15
  super.onUpgrade(
16
16
  statusCode,
17
17
  reduceHeaders(
@@ -22,16 +22,16 @@ class Handler extends DecoratorHandler {
22
22
  proxyName: this.#opts.name,
23
23
  },
24
24
  (acc, key, val) => {
25
- acc.push(key, val)
25
+ acc[key] = val
26
26
  return acc
27
27
  },
28
- [],
28
+ {},
29
29
  ),
30
30
  socket,
31
31
  )
32
32
  }
33
33
 
34
- onHeaders(statusCode, rawHeaders, resume, statusMessage, headers = parseHeaders(rawHeaders)) {
34
+ onHeaders(statusCode, headers, resume) {
35
35
  return super.onHeaders(
36
36
  statusCode,
37
37
  reduceHeaders(
@@ -48,7 +48,6 @@ class Handler extends DecoratorHandler {
48
48
  [],
49
49
  ),
50
50
  resume,
51
- null,
52
51
  )
53
52
  }
54
53
  }
@@ -1,5 +1,5 @@
1
1
  import assert from 'node:assert'
2
- import { DecoratorHandler, isDisturbed, parseHeaders, parseURL } from '../utils.js'
2
+ import { DecoratorHandler, isDisturbed, parseURL } from '../utils.js'
3
3
 
4
4
  const redirectableStatusCodes = [300, 301, 302, 303, 307, 308]
5
5
 
@@ -45,11 +45,11 @@ class Handler extends DecoratorHandler {
45
45
  super.onUpgrade(statusCode, rawHeaders, socket, headers)
46
46
  }
47
47
 
48
- onHeaders(statusCode, rawHeaders, resume, statusMessage, headers = parseHeaders(rawHeaders)) {
48
+ onHeaders(statusCode, headers, resume) {
49
49
  if (redirectableStatusCodes.indexOf(statusCode) === -1) {
50
50
  assert(!this.#headersSent)
51
51
  this.#headersSent = true
52
- return super.onHeaders(statusCode, null, resume, null, headers)
52
+ return super.onHeaders(statusCode, headers, resume)
53
53
  }
54
54
 
55
55
  if (isDisturbed(this.#opts.body)) {
@@ -69,7 +69,7 @@ class Handler extends DecoratorHandler {
69
69
  if (!this.#opts.follow(this.#location, this.#count, this.#opts)) {
70
70
  assert(!this.#headersSent)
71
71
  this.#headersSent = true
72
- return super.onHeaders(statusCode, null, resume, null, headers)
72
+ return super.onHeaders(statusCode, headers, resume)
73
73
  }
74
74
  } else {
75
75
  if (this.#count >= this.#maxCount) {
@@ -1,5 +1,5 @@
1
1
  import createHttpError from 'http-errors'
2
- import { DecoratorHandler, parseHeaders } from '../utils.js'
2
+ import { DecoratorHandler } from '../utils.js'
3
3
 
4
4
  class Handler extends DecoratorHandler {
5
5
  #statusCode = 0
@@ -29,13 +29,13 @@ class Handler extends DecoratorHandler {
29
29
  super.onConnect(abort)
30
30
  }
31
31
 
32
- onHeaders(statusCode, rawHeaders, resume, statusMessage, headers = parseHeaders(rawHeaders)) {
32
+ onHeaders(statusCode, headers, resume) {
33
33
  this.#statusCode = statusCode
34
34
  this.#headers = headers
35
35
  this.#contentType = headers['content-type']
36
36
 
37
37
  if (this.#statusCode < 400) {
38
- return super.onHeaders(statusCode, null, resume, null, headers)
38
+ return super.onHeaders(statusCode, headers, resume)
39
39
  }
40
40
 
41
41
  if (this.#checkContentType('application/json') || this.#checkContentType('text/plain')) {
@@ -51,7 +51,7 @@ class Handler extends DecoratorHandler {
51
51
  this.#body += this.#decoder?.decode(chunk, { stream: true }) ?? ''
52
52
  }
53
53
 
54
- onComplete(rawTrailers) {
54
+ onComplete(trailers) {
55
55
  if (this.#statusCode >= 400) {
56
56
  this.#body += this.#decoder?.decode(undefined, { stream: false }) ?? ''
57
57
 
@@ -74,7 +74,7 @@ class Handler extends DecoratorHandler {
74
74
 
75
75
  super.onError(this.#decorateError(err))
76
76
  } else {
77
- super.onComplete(rawTrailers)
77
+ super.onComplete(trailers)
78
78
  }
79
79
  }
80
80
 
@@ -1,11 +1,5 @@
1
1
  import assert from 'node:assert'
2
- import {
3
- DecoratorHandler,
4
- isDisturbed,
5
- parseHeaders,
6
- parseRangeHeader,
7
- retry as retryFn,
8
- } from '../utils.js'
2
+ import { DecoratorHandler, isDisturbed, parseRangeHeader, retry as retryFn } from '../utils.js'
9
3
 
10
4
  // TODO (fix): What about onUpgrade?
11
5
  class Handler extends DecoratorHandler {
@@ -67,7 +61,7 @@ class Handler extends DecoratorHandler {
67
61
  }
68
62
  }
69
63
 
70
- onHeaders(statusCode, rawHeaders, resume, statusMessage, headers = parseHeaders(rawHeaders)) {
64
+ onHeaders(statusCode, headers, resume) {
71
65
  if (this.#error == null) {
72
66
  assert(this.#etag == null)
73
67
  assert(this.#pos == null)
@@ -75,18 +69,18 @@ class Handler extends DecoratorHandler {
75
69
  assert(this.#headersSent === false)
76
70
 
77
71
  if (headers.trailer) {
78
- return this.#onHeaders(statusCode, null, resume, null, headers)
72
+ return this.#onHeaders(statusCode, headers, resume)
79
73
  }
80
74
 
81
75
  const contentLength = headers['content-length'] ? Number(headers['content-length']) : null
82
76
  if (contentLength != null && !Number.isFinite(contentLength)) {
83
- return this.#onHeaders(statusCode, null, resume, null, headers)
77
+ return this.#onHeaders(statusCode, headers, resume)
84
78
  }
85
79
 
86
80
  if (statusCode === 206) {
87
81
  const range = parseRangeHeader(headers['content-range'])
88
82
  if (!range) {
89
- return this.#onHeaders(statusCode, null, resume, null, headers)
83
+ return this.#onHeaders(statusCode, headers, resume)
90
84
  }
91
85
 
92
86
  const { start, size, end = size } = range
@@ -106,7 +100,7 @@ class Handler extends DecoratorHandler {
106
100
  this.#end = contentLength
107
101
  this.#etag = headers.etag
108
102
  } else {
109
- return this.#onHeaders(statusCode, null, resume, null, headers)
103
+ return this.#onHeaders(statusCode, headers, resume)
110
104
  }
111
105
 
112
106
  // Weak etags are not useful for comparison nor cache
@@ -119,7 +113,7 @@ class Handler extends DecoratorHandler {
119
113
  assert(Number.isFinite(this.#pos))
120
114
  assert(this.#end == null || Number.isFinite(this.#end))
121
115
 
122
- return this.#onHeaders(statusCode, null, resume, null, headers)
116
+ return this.#onHeaders(statusCode, headers, resume)
123
117
  } else if (statusCode === 206 || (this.#pos === 0 && statusCode === 200)) {
124
118
  assert(this.#etag != null || !this.#pos)
125
119
 
@@ -213,10 +207,10 @@ class Handler extends DecoratorHandler {
213
207
  super.onError(err)
214
208
  }
215
209
 
216
- #onHeaders(...args) {
210
+ #onHeaders(statusCode, headers, resume) {
217
211
  assert(!this.#headersSent)
218
212
  this.#headersSent = true
219
- return super.onHeaders(...args)
213
+ return super.onHeaders(statusCode, headers, resume)
220
214
  }
221
215
  }
222
216
 
@@ -1,6 +1,6 @@
1
1
  import crypto from 'node:crypto'
2
2
  import assert from 'node:assert'
3
- import { DecoratorHandler, parseHeaders } from '../utils.js'
3
+ import { DecoratorHandler } from '../utils.js'
4
4
 
5
5
  class Handler extends DecoratorHandler {
6
6
  #verifyOpts
@@ -26,12 +26,12 @@ class Handler extends DecoratorHandler {
26
26
  super.onConnect(abort)
27
27
  }
28
28
 
29
- onHeaders(statusCode, rawHeaders, resume, statusMessage, headers = parseHeaders(rawHeaders)) {
29
+ onHeaders(statusCode, headers, resume) {
30
30
  this.#contentMD5 = this.#verifyOpts.hash ? headers['content-md5'] : null
31
31
  this.#contentLength = this.#verifyOpts.size ? headers['content-length'] : null
32
32
  this.#hasher = this.#contentMD5 != null ? crypto.createHash('md5') : null
33
33
 
34
- return super.onHeaders(statusCode, null, resume, null, headers)
34
+ return super.onHeaders(statusCode, headers, resume)
35
35
  }
36
36
 
37
37
  onData(chunk) {
package/lib/request.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import assert from 'node:assert'
2
2
  import { InvalidArgumentError, RequestAbortedError } from './errors.js'
3
- import { isStream, parseHeaders } from './utils.js'
3
+ import { isStream } from './utils.js'
4
4
  import { Readable } from '@nxtedition/undici'
5
5
 
6
6
  function noop() {}
@@ -70,7 +70,7 @@ export class RequestHandler {
70
70
  this.abort = abort
71
71
  }
72
72
 
73
- onHeaders(statusCode, rawHeaders, resume, statusMessage, headers = parseHeaders(rawHeaders)) {
73
+ onHeaders(statusCode, headers, resume) {
74
74
  const { resolve, abort, highWaterMark } = this
75
75
 
76
76
  if (statusCode < 200) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxtedition/nxt-undici",
3
- "version": "5.2.1",
3
+ "version": "6.0.0",
4
4
  "license": "MIT",
5
5
  "author": "Robert Nagy <robert.nagy@boffins.se>",
6
6
  "main": "lib/index.js",
@@ -9,7 +9,7 @@
9
9
  "lib/*"
10
10
  ],
11
11
  "dependencies": {
12
- "@nxtedition/undici": "^9.0.3",
12
+ "@nxtedition/undici": "^10.0.2",
13
13
  "cache-control-parser": "^2.0.6",
14
14
  "http-errors": "^2.0.0"
15
15
  },