undici 6.5.0 → 6.6.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/docs/best-practices/client-certificate.md +3 -3
- package/lib/agent.js +5 -7
- package/lib/api/api-connect.js +2 -2
- package/lib/api/api-pipeline.js +4 -4
- package/lib/api/api-request.js +2 -2
- package/lib/api/api-stream.js +4 -4
- package/lib/api/api-upgrade.js +3 -3
- package/lib/api/readable.js +2 -2
- package/lib/api/util.js +1 -1
- package/lib/balanced-pool.js +1 -1
- package/lib/cache/cache.js +4 -10
- package/lib/cache/util.js +1 -1
- package/lib/client.js +14 -14
- package/lib/cookies/parse.js +1 -1
- package/lib/cookies/util.js +1 -1
- package/lib/core/connect.js +3 -3
- package/lib/core/diagnostics.js +2 -2
- package/lib/core/request.js +18 -13
- package/lib/core/tree.js +3 -5
- package/lib/core/util.js +15 -15
- package/lib/dispatcher.js +1 -1
- package/lib/eventsource/eventsource-stream.js +1 -1
- package/lib/eventsource/eventsource.js +2 -2
- package/lib/eventsource/util.js +9 -1
- package/lib/fetch/body.js +29 -21
- package/lib/fetch/dataURL.js +97 -17
- package/lib/fetch/file.js +5 -5
- package/lib/fetch/formdata.js +1 -1
- package/lib/fetch/headers.js +1 -1
- package/lib/fetch/index.js +28 -37
- package/lib/fetch/request.js +3 -2
- package/lib/fetch/response.js +31 -39
- package/lib/fetch/util.js +196 -36
- package/lib/fetch/webidl.js +1 -1
- package/lib/fileapi/util.js +2 -2
- package/lib/handler/RedirectHandler.js +2 -2
- package/lib/handler/RetryHandler.js +3 -3
- package/lib/llhttp/llhttp-wasm.js +3 -1
- package/lib/llhttp/llhttp_simd-wasm.js +3 -1
- package/lib/mock/mock-agent.js +2 -2
- package/lib/mock/mock-client.js +1 -1
- package/lib/mock/mock-pool.js +1 -1
- package/lib/mock/mock-utils.js +2 -2
- package/lib/mock/pending-interceptors-formatter.js +2 -2
- package/lib/pool.js +7 -8
- package/lib/proxy-agent.js +2 -2
- package/lib/timers.js +1 -1
- package/lib/websocket/connection.js +1 -1
- package/lib/websocket/events.js +1 -1
- package/lib/websocket/frame.js +1 -1
- package/lib/websocket/receiver.js +7 -6
- package/lib/websocket/util.js +1 -1
- package/lib/websocket/websocket.js +1 -1
- package/package.json +4 -7
|
@@ -11,9 +11,9 @@ The server option `rejectUnauthorized: false` allows us to handle any invalid ce
|
|
|
11
11
|
### Client Certificate Authentication
|
|
12
12
|
|
|
13
13
|
```js
|
|
14
|
-
const { readFileSync } = require('fs')
|
|
15
|
-
const { join } = require('path')
|
|
16
|
-
const { createServer } = require('https')
|
|
14
|
+
const { readFileSync } = require('node:fs')
|
|
15
|
+
const { join } = require('node:path')
|
|
16
|
+
const { createServer } = require('node:https')
|
|
17
17
|
const { Client } = require('undici')
|
|
18
18
|
|
|
19
19
|
const serverOptions = {
|
package/lib/agent.js
CHANGED
|
@@ -42,7 +42,7 @@ class Agent extends DispatcherBase {
|
|
|
42
42
|
connect = { ...connect }
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
this[kInterceptors] = options.interceptors
|
|
45
|
+
this[kInterceptors] = options.interceptors?.Agent && Array.isArray(options.interceptors.Agent)
|
|
46
46
|
? options.interceptors.Agent
|
|
47
47
|
: [createRedirectInterceptor({ maxRedirections })]
|
|
48
48
|
|
|
@@ -54,22 +54,20 @@ class Agent extends DispatcherBase {
|
|
|
54
54
|
this[kFactory] = factory
|
|
55
55
|
this[kClients] = new Map()
|
|
56
56
|
|
|
57
|
-
const agent = this
|
|
58
|
-
|
|
59
57
|
this[kOnDrain] = (origin, targets) => {
|
|
60
|
-
|
|
58
|
+
this.emit('drain', origin, [this, ...targets])
|
|
61
59
|
}
|
|
62
60
|
|
|
63
61
|
this[kOnConnect] = (origin, targets) => {
|
|
64
|
-
|
|
62
|
+
this.emit('connect', origin, [this, ...targets])
|
|
65
63
|
}
|
|
66
64
|
|
|
67
65
|
this[kOnDisconnect] = (origin, targets, err) => {
|
|
68
|
-
|
|
66
|
+
this.emit('disconnect', origin, [this, ...targets], err)
|
|
69
67
|
}
|
|
70
68
|
|
|
71
69
|
this[kOnConnectionError] = (origin, targets, err) => {
|
|
72
|
-
|
|
70
|
+
this.emit('connectionError', origin, [this, ...targets], err)
|
|
73
71
|
}
|
|
74
72
|
}
|
|
75
73
|
|
package/lib/api/api-connect.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { AsyncResource } = require('async_hooks')
|
|
3
|
+
const { AsyncResource } = require('node:async_hooks')
|
|
4
4
|
const { InvalidArgumentError, RequestAbortedError, SocketError } = require('../core/errors')
|
|
5
5
|
const util = require('../core/util')
|
|
6
6
|
const { addSignal, removeSignal } = require('./abort-signal')
|
|
@@ -96,7 +96,7 @@ function connect (opts, callback) {
|
|
|
96
96
|
if (typeof callback !== 'function') {
|
|
97
97
|
throw err
|
|
98
98
|
}
|
|
99
|
-
const opaque = opts
|
|
99
|
+
const opaque = opts?.opaque
|
|
100
100
|
queueMicrotask(() => callback(err, { opaque }))
|
|
101
101
|
}
|
|
102
102
|
}
|
package/lib/api/api-pipeline.js
CHANGED
|
@@ -4,16 +4,16 @@ const {
|
|
|
4
4
|
Readable,
|
|
5
5
|
Duplex,
|
|
6
6
|
PassThrough
|
|
7
|
-
} = require('stream')
|
|
7
|
+
} = require('node:stream')
|
|
8
8
|
const {
|
|
9
9
|
InvalidArgumentError,
|
|
10
10
|
InvalidReturnValueError,
|
|
11
11
|
RequestAbortedError
|
|
12
12
|
} = require('../core/errors')
|
|
13
13
|
const util = require('../core/util')
|
|
14
|
-
const { AsyncResource } = require('async_hooks')
|
|
14
|
+
const { AsyncResource } = require('node:async_hooks')
|
|
15
15
|
const { addSignal, removeSignal } = require('./abort-signal')
|
|
16
|
-
const assert = require('assert')
|
|
16
|
+
const assert = require('node:assert')
|
|
17
17
|
|
|
18
18
|
const kResume = Symbol('resume')
|
|
19
19
|
|
|
@@ -100,7 +100,7 @@ class PipelineHandler extends AsyncResource {
|
|
|
100
100
|
read: () => {
|
|
101
101
|
const { body } = this
|
|
102
102
|
|
|
103
|
-
if (body
|
|
103
|
+
if (body?.resume) {
|
|
104
104
|
body.resume()
|
|
105
105
|
}
|
|
106
106
|
},
|
package/lib/api/api-request.js
CHANGED
|
@@ -7,7 +7,7 @@ const {
|
|
|
7
7
|
} = require('../core/errors')
|
|
8
8
|
const util = require('../core/util')
|
|
9
9
|
const { getResolveErrorBodyCallback } = require('./util')
|
|
10
|
-
const { AsyncResource } = require('async_hooks')
|
|
10
|
+
const { AsyncResource } = require('node:async_hooks')
|
|
11
11
|
const { addSignal, removeSignal } = require('./abort-signal')
|
|
12
12
|
|
|
13
13
|
class RequestHandler extends AsyncResource {
|
|
@@ -171,7 +171,7 @@ function request (opts, callback) {
|
|
|
171
171
|
if (typeof callback !== 'function') {
|
|
172
172
|
throw err
|
|
173
173
|
}
|
|
174
|
-
const opaque = opts
|
|
174
|
+
const opaque = opts?.opaque
|
|
175
175
|
queueMicrotask(() => callback(err, { opaque }))
|
|
176
176
|
}
|
|
177
177
|
}
|
package/lib/api/api-stream.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { finished, PassThrough } = require('stream')
|
|
3
|
+
const { finished, PassThrough } = require('node:stream')
|
|
4
4
|
const {
|
|
5
5
|
InvalidArgumentError,
|
|
6
6
|
InvalidReturnValueError,
|
|
@@ -8,7 +8,7 @@ const {
|
|
|
8
8
|
} = require('../core/errors')
|
|
9
9
|
const util = require('../core/util')
|
|
10
10
|
const { getResolveErrorBodyCallback } = require('./util')
|
|
11
|
-
const { AsyncResource } = require('async_hooks')
|
|
11
|
+
const { AsyncResource } = require('node:async_hooks')
|
|
12
12
|
const { addSignal, removeSignal } = require('./abort-signal')
|
|
13
13
|
|
|
14
14
|
class StreamHandler extends AsyncResource {
|
|
@@ -148,7 +148,7 @@ class StreamHandler extends AsyncResource {
|
|
|
148
148
|
|
|
149
149
|
const needDrain = res.writableNeedDrain !== undefined
|
|
150
150
|
? res.writableNeedDrain
|
|
151
|
-
: res._writableState
|
|
151
|
+
: res._writableState?.needDrain
|
|
152
152
|
|
|
153
153
|
return needDrain !== true
|
|
154
154
|
}
|
|
@@ -212,7 +212,7 @@ function stream (opts, factory, callback) {
|
|
|
212
212
|
if (typeof callback !== 'function') {
|
|
213
213
|
throw err
|
|
214
214
|
}
|
|
215
|
-
const opaque = opts
|
|
215
|
+
const opaque = opts?.opaque
|
|
216
216
|
queueMicrotask(() => callback(err, { opaque }))
|
|
217
217
|
}
|
|
218
218
|
}
|
package/lib/api/api-upgrade.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const { InvalidArgumentError, RequestAbortedError, SocketError } = require('../core/errors')
|
|
4
|
-
const { AsyncResource } = require('async_hooks')
|
|
4
|
+
const { AsyncResource } = require('node:async_hooks')
|
|
5
5
|
const util = require('../core/util')
|
|
6
6
|
const { addSignal, removeSignal } = require('./abort-signal')
|
|
7
|
-
const assert = require('assert')
|
|
7
|
+
const assert = require('node:assert')
|
|
8
8
|
|
|
9
9
|
class UpgradeHandler extends AsyncResource {
|
|
10
10
|
constructor (opts, callback) {
|
|
@@ -97,7 +97,7 @@ function upgrade (opts, callback) {
|
|
|
97
97
|
if (typeof callback !== 'function') {
|
|
98
98
|
throw err
|
|
99
99
|
}
|
|
100
|
-
const opaque = opts
|
|
100
|
+
const opaque = opts?.opaque
|
|
101
101
|
queueMicrotask(() => callback(err, { opaque }))
|
|
102
102
|
}
|
|
103
103
|
}
|
package/lib/api/readable.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
'use strict'
|
|
4
4
|
|
|
5
|
-
const assert = require('assert')
|
|
6
|
-
const { Readable } = require('stream')
|
|
5
|
+
const assert = require('node:assert')
|
|
6
|
+
const { Readable } = require('node:stream')
|
|
7
7
|
const { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require('../core/errors')
|
|
8
8
|
const util = require('../core/util')
|
|
9
9
|
const { ReadableStreamFrom } = require('../core/util')
|
package/lib/api/util.js
CHANGED
package/lib/balanced-pool.js
CHANGED
|
@@ -53,7 +53,7 @@ class BalancedPool extends PoolBase {
|
|
|
53
53
|
throw new InvalidArgumentError('factory must be a function.')
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
this[kInterceptors] = opts.interceptors
|
|
56
|
+
this[kInterceptors] = opts.interceptors?.BalancedPool && Array.isArray(opts.interceptors.BalancedPool)
|
|
57
57
|
? opts.interceptors.BalancedPool
|
|
58
58
|
: []
|
|
59
59
|
this[kFactory] = factory
|
package/lib/cache/cache.js
CHANGED
|
@@ -3,15 +3,13 @@
|
|
|
3
3
|
const { kConstruct } = require('./symbols')
|
|
4
4
|
const { urlEquals, fieldValues: getFieldValues } = require('./util')
|
|
5
5
|
const { kEnumerableProperty, isDisturbed } = require('../core/util')
|
|
6
|
-
const { kHeadersList } = require('../core/symbols')
|
|
7
6
|
const { webidl } = require('../fetch/webidl')
|
|
8
|
-
const { Response, cloneResponse } = require('../fetch/response')
|
|
7
|
+
const { Response, cloneResponse, fromInnerResponse } = require('../fetch/response')
|
|
9
8
|
const { Request, fromInnerRequest } = require('../fetch/request')
|
|
10
|
-
const {
|
|
11
|
-
const { kState, kHeaders, kGuard } = require('../fetch/symbols')
|
|
9
|
+
const { kState } = require('../fetch/symbols')
|
|
12
10
|
const { fetching } = require('../fetch/index')
|
|
13
11
|
const { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = require('../fetch/util')
|
|
14
|
-
const assert = require('assert')
|
|
12
|
+
const assert = require('node:assert')
|
|
15
13
|
const { getGlobalDispatcher } = require('../global')
|
|
16
14
|
|
|
17
15
|
/**
|
|
@@ -783,11 +781,7 @@ class Cache {
|
|
|
783
781
|
// 5.5.2
|
|
784
782
|
for (const response of responses) {
|
|
785
783
|
// 5.5.2.1
|
|
786
|
-
const responseObject =
|
|
787
|
-
responseObject[kState] = response
|
|
788
|
-
responseObject[kHeaders] = new Headers(kConstruct)
|
|
789
|
-
responseObject[kHeaders][kHeadersList] = response.headersList
|
|
790
|
-
responseObject[kHeaders][kGuard] = 'immutable'
|
|
784
|
+
const responseObject = fromInnerResponse(response, 'immutable', { settingsObject: {} })
|
|
791
785
|
|
|
792
786
|
responseList.push(responseObject.clone())
|
|
793
787
|
|
package/lib/cache/util.js
CHANGED
package/lib/client.js
CHANGED
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
/* global WebAssembly */
|
|
6
6
|
|
|
7
|
-
const assert = require('assert')
|
|
8
|
-
const net = require('net')
|
|
9
|
-
const http = require('http')
|
|
10
|
-
const { pipeline } = require('stream')
|
|
7
|
+
const assert = require('node:assert')
|
|
8
|
+
const net = require('node:net')
|
|
9
|
+
const http = require('node:http')
|
|
10
|
+
const { pipeline } = require('node:stream')
|
|
11
11
|
const util = require('./core/util')
|
|
12
12
|
const { channels } = require('./core/diagnostics')
|
|
13
13
|
const timers = require('./timers')
|
|
@@ -84,7 +84,7 @@ const {
|
|
|
84
84
|
/** @type {import('http2')} */
|
|
85
85
|
let http2
|
|
86
86
|
try {
|
|
87
|
-
http2 = require('http2')
|
|
87
|
+
http2 = require('node:http2')
|
|
88
88
|
} catch {
|
|
89
89
|
// @ts-ignore
|
|
90
90
|
http2 = { constants: {} }
|
|
@@ -250,7 +250,7 @@ class Client extends DispatcherBase {
|
|
|
250
250
|
})
|
|
251
251
|
}
|
|
252
252
|
|
|
253
|
-
this[kInterceptors] = interceptors
|
|
253
|
+
this[kInterceptors] = interceptors?.Client && Array.isArray(interceptors.Client)
|
|
254
254
|
? interceptors.Client
|
|
255
255
|
: [createRedirectInterceptor({ maxRedirections })]
|
|
256
256
|
this[kUrl] = util.parseOrigin(url)
|
|
@@ -370,10 +370,10 @@ class Client extends DispatcherBase {
|
|
|
370
370
|
// TODO: for H2 we need to gracefully flush the remaining enqueued
|
|
371
371
|
// request and close each stream.
|
|
372
372
|
return new Promise((resolve) => {
|
|
373
|
-
if (
|
|
374
|
-
resolve(null)
|
|
375
|
-
} else {
|
|
373
|
+
if (this[kSize]) {
|
|
376
374
|
this[kClosedResolve] = resolve
|
|
375
|
+
} else {
|
|
376
|
+
resolve(null)
|
|
377
377
|
}
|
|
378
378
|
})
|
|
379
379
|
}
|
|
@@ -401,10 +401,10 @@ class Client extends DispatcherBase {
|
|
|
401
401
|
this[kHTTP2SessionState] = null
|
|
402
402
|
}
|
|
403
403
|
|
|
404
|
-
if (
|
|
405
|
-
queueMicrotask(callback)
|
|
406
|
-
} else {
|
|
404
|
+
if (this[kSocket]) {
|
|
407
405
|
util.destroy(this[kSocket].on('close', callback), err)
|
|
406
|
+
} else {
|
|
407
|
+
queueMicrotask(callback)
|
|
408
408
|
}
|
|
409
409
|
|
|
410
410
|
resume(this)
|
|
@@ -479,7 +479,7 @@ async function lazyllhttp () {
|
|
|
479
479
|
|
|
480
480
|
let mod
|
|
481
481
|
try {
|
|
482
|
-
mod = await WebAssembly.compile(
|
|
482
|
+
mod = await WebAssembly.compile(require('./llhttp/llhttp_simd-wasm.js'))
|
|
483
483
|
} catch (e) {
|
|
484
484
|
/* istanbul ignore next */
|
|
485
485
|
|
|
@@ -487,7 +487,7 @@ async function lazyllhttp () {
|
|
|
487
487
|
// being enabled, but the occurring of this other error
|
|
488
488
|
// * https://github.com/emscripten-core/emscripten/issues/11495
|
|
489
489
|
// got me to remove that check to avoid breaking Node 12.
|
|
490
|
-
mod = await WebAssembly.compile(
|
|
490
|
+
mod = await WebAssembly.compile(llhttpWasmData || require('./llhttp/llhttp-wasm.js'))
|
|
491
491
|
}
|
|
492
492
|
|
|
493
493
|
return await WebAssembly.instantiate(mod, {
|
package/lib/cookies/parse.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
const { maxNameValuePairSize, maxAttributeValueSize } = require('./constants')
|
|
4
4
|
const { isCTLExcludingHtab } = require('./util')
|
|
5
5
|
const { collectASequenceOfCodePointsFast } = require('../fetch/dataURL')
|
|
6
|
-
const assert = require('assert')
|
|
6
|
+
const assert = require('node:assert')
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* @description Parses the field-value attributes of a set-cookie header string.
|
package/lib/cookies/util.js
CHANGED
package/lib/core/connect.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const net = require('net')
|
|
4
|
-
const assert = require('assert')
|
|
3
|
+
const net = require('node:net')
|
|
4
|
+
const assert = require('node:assert')
|
|
5
5
|
const util = require('./util')
|
|
6
6
|
const { InvalidArgumentError, ConnectTimeoutError } = require('./errors')
|
|
7
7
|
|
|
@@ -86,7 +86,7 @@ function buildConnector ({ allowH2, maxCachedSessions, socketPath, timeout, ...o
|
|
|
86
86
|
let socket
|
|
87
87
|
if (protocol === 'https:') {
|
|
88
88
|
if (!tls) {
|
|
89
|
-
tls = require('tls')
|
|
89
|
+
tls = require('node:tls')
|
|
90
90
|
}
|
|
91
91
|
servername = servername || options.servername || util.getServerName(host) || null
|
|
92
92
|
|
package/lib/core/diagnostics.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
|
-
const diagnosticsChannel = require('diagnostics_channel')
|
|
3
|
-
const util = require('util')
|
|
2
|
+
const diagnosticsChannel = require('node:diagnostics_channel')
|
|
3
|
+
const util = require('node:util')
|
|
4
4
|
|
|
5
5
|
const undiciDebugLog = util.debuglog('undici')
|
|
6
6
|
const fetchDebuglog = util.debuglog('fetch')
|
package/lib/core/request.js
CHANGED
|
@@ -4,7 +4,7 @@ const {
|
|
|
4
4
|
InvalidArgumentError,
|
|
5
5
|
NotSupportedError
|
|
6
6
|
} = require('./errors')
|
|
7
|
-
const assert = require('assert')
|
|
7
|
+
const assert = require('node:assert')
|
|
8
8
|
const { kHTTP2BuildRequest, kHTTP2CopyHeaders, kHTTP1BuildRequest } = require('./symbols')
|
|
9
9
|
const util = require('./util')
|
|
10
10
|
const { channels } = require('./diagnostics.js')
|
|
@@ -369,8 +369,11 @@ class Request {
|
|
|
369
369
|
|
|
370
370
|
if (value == null || value.length === 0) continue
|
|
371
371
|
|
|
372
|
-
if (headers[key])
|
|
373
|
-
|
|
372
|
+
if (headers[key]) {
|
|
373
|
+
headers[key] += `,${value}`
|
|
374
|
+
} else {
|
|
375
|
+
headers[key] = value
|
|
376
|
+
}
|
|
374
377
|
}
|
|
375
378
|
|
|
376
379
|
return headers
|
|
@@ -433,20 +436,22 @@ function processHeader (request, key, val, skipAppend = false) {
|
|
|
433
436
|
}
|
|
434
437
|
} else if (headerName === 'expect') {
|
|
435
438
|
throw new NotSupportedError('expect header not supported')
|
|
436
|
-
} else {
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
if (
|
|
440
|
-
|
|
441
|
-
else request.headers[key] = processHeaderValue(key, val[i], skipAppend)
|
|
439
|
+
} else if (Array.isArray(val)) {
|
|
440
|
+
for (let i = 0; i < val.length; i++) {
|
|
441
|
+
if (skipAppend) {
|
|
442
|
+
if (request.headers[key]) {
|
|
443
|
+
request.headers[key] += `,${processHeaderValue(key, val[i], skipAppend)}`
|
|
442
444
|
} else {
|
|
443
|
-
request.headers
|
|
445
|
+
request.headers[key] = processHeaderValue(key, val[i], skipAppend)
|
|
444
446
|
}
|
|
447
|
+
} else {
|
|
448
|
+
request.headers += processHeaderValue(key, val[i])
|
|
445
449
|
}
|
|
446
|
-
} else {
|
|
447
|
-
if (skipAppend) request.headers[key] = processHeaderValue(key, val, skipAppend)
|
|
448
|
-
else request.headers += processHeaderValue(key, val)
|
|
449
450
|
}
|
|
451
|
+
} else if (skipAppend) {
|
|
452
|
+
request.headers[key] = processHeaderValue(key, val, skipAppend)
|
|
453
|
+
} else {
|
|
454
|
+
request.headers += processHeaderValue(key, val)
|
|
450
455
|
}
|
|
451
456
|
}
|
|
452
457
|
|
package/lib/core/tree.js
CHANGED
|
@@ -57,12 +57,10 @@ class TstNode {
|
|
|
57
57
|
} else {
|
|
58
58
|
this.left = new TstNode(key, value, index)
|
|
59
59
|
}
|
|
60
|
+
} else if (this.right !== null) {
|
|
61
|
+
this.right.add(key, value, index)
|
|
60
62
|
} else {
|
|
61
|
-
|
|
62
|
-
this.right.add(key, value, index)
|
|
63
|
-
} else {
|
|
64
|
-
this.right = new TstNode(key, value, index)
|
|
65
|
-
}
|
|
63
|
+
this.right = new TstNode(key, value, index)
|
|
66
64
|
}
|
|
67
65
|
}
|
|
68
66
|
|
package/lib/core/util.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const assert = require('assert')
|
|
3
|
+
const assert = require('node:assert')
|
|
4
4
|
const { kDestroyed, kBodyUsed } = require('./symbols')
|
|
5
|
-
const { IncomingMessage } = require('http')
|
|
6
|
-
const stream = require('stream')
|
|
7
|
-
const net = require('net')
|
|
5
|
+
const { IncomingMessage } = require('node:http')
|
|
6
|
+
const stream = require('node:stream')
|
|
7
|
+
const net = require('node:net')
|
|
8
8
|
const { InvalidArgumentError } = require('./errors')
|
|
9
|
-
const { Blob } = require('buffer')
|
|
10
|
-
const nodeUtil = require('util')
|
|
11
|
-
const { stringify } = require('querystring')
|
|
9
|
+
const { Blob } = require('node:buffer')
|
|
10
|
+
const nodeUtil = require('node:util')
|
|
11
|
+
const { stringify } = require('node:querystring')
|
|
12
12
|
const { headerNameLowerCasedRecord } = require('./constants')
|
|
13
13
|
const { tree } = require('./tree')
|
|
14
14
|
|
|
@@ -187,7 +187,7 @@ function isDestroyed (stream) {
|
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
function isReadableAborted (stream) {
|
|
190
|
-
const state = stream
|
|
190
|
+
const state = stream?._readableState
|
|
191
191
|
return isDestroyed(stream) && state && !state.endEmitted
|
|
192
192
|
}
|
|
193
193
|
|
|
@@ -254,19 +254,19 @@ function parseHeaders (headers, obj) {
|
|
|
254
254
|
const key = headerNameToString(headers[i])
|
|
255
255
|
let val = obj[key]
|
|
256
256
|
|
|
257
|
-
if (
|
|
257
|
+
if (val) {
|
|
258
|
+
if (typeof val === 'string') {
|
|
259
|
+
val = [val]
|
|
260
|
+
obj[key] = val
|
|
261
|
+
}
|
|
262
|
+
val.push(headers[i + 1].toString('utf8'))
|
|
263
|
+
} else {
|
|
258
264
|
const headersValue = headers[i + 1]
|
|
259
265
|
if (typeof headersValue === 'string') {
|
|
260
266
|
obj[key] = headersValue
|
|
261
267
|
} else {
|
|
262
268
|
obj[key] = Array.isArray(headersValue) ? headersValue.map(x => x.toString('utf8')) : headersValue.toString('utf8')
|
|
263
269
|
}
|
|
264
|
-
} else {
|
|
265
|
-
if (typeof val === 'string') {
|
|
266
|
-
val = [val]
|
|
267
|
-
obj[key] = val
|
|
268
|
-
}
|
|
269
|
-
val.push(headers[i + 1].toString('utf8'))
|
|
270
270
|
}
|
|
271
271
|
}
|
|
272
272
|
|
package/lib/dispatcher.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { setTimeout } = require('node:timers/promises')
|
|
4
3
|
const { pipeline } = require('node:stream')
|
|
5
4
|
const { fetching } = require('../fetch')
|
|
6
5
|
const { makeRequest } = require('../fetch/request')
|
|
@@ -11,6 +10,7 @@ const { parseMIMEType } = require('../fetch/dataURL')
|
|
|
11
10
|
const { MessageEvent } = require('../websocket/events')
|
|
12
11
|
const { isNetworkError } = require('../fetch/response')
|
|
13
12
|
const { getGlobalDispatcher } = require('../global')
|
|
13
|
+
const { delay } = require('./util')
|
|
14
14
|
|
|
15
15
|
let experimentalWarned = false
|
|
16
16
|
|
|
@@ -344,7 +344,7 @@ class EventSource extends EventTarget {
|
|
|
344
344
|
this.dispatchEvent(new Event('error'))
|
|
345
345
|
|
|
346
346
|
// 2. Wait a delay equal to the reconnection time of the event source.
|
|
347
|
-
await
|
|
347
|
+
await delay(this.#settings.reconnectionTime)
|
|
348
348
|
|
|
349
349
|
// 5. Queue a task to run the following steps:
|
|
350
350
|
|
package/lib/eventsource/util.js
CHANGED
|
@@ -23,7 +23,15 @@ function isASCIINumber (value) {
|
|
|
23
23
|
return true
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
// https://github.com/nodejs/undici/issues/2664
|
|
27
|
+
function delay (ms) {
|
|
28
|
+
return new Promise((resolve) => {
|
|
29
|
+
setTimeout(resolve, ms).unref()
|
|
30
|
+
})
|
|
31
|
+
}
|
|
32
|
+
|
|
26
33
|
module.exports = {
|
|
27
34
|
isValidLastEventId,
|
|
28
|
-
isASCIINumber
|
|
35
|
+
isASCIINumber,
|
|
36
|
+
delay
|
|
29
37
|
}
|