Skip to content

Commit fa4568f

Browse files
committed
Revert "deps: update undici to latest v7.x release only"
This reverts commit e0c73eb.
1 parent e0c73eb commit fa4568f

36 files changed

Lines changed: 543 additions & 967 deletions

deps/undici/src/.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ CLAUDE.md
9595

9696
# Ignore .pi
9797
.pi
98-
AGENTS.md
9998

10099
# Ignore .githuman
101100
.githuman

deps/undici/src/CONTRIBUTING.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,6 @@ Create a commit which includes all of the updated files in lib/llhttp.
9696

9797
### Steps:
9898

99-
`npm run test:wpt` and `node test/web-platform-tests/wpt-runner.mjs setup` will initialize the WPT submodule automatically when it is missing.
100-
101-
If you want to prepare the checkout explicitly, run:
102-
10399
```bash
104100
git submodule update --init --recursive
105101
```

deps/undici/src/README.md

Lines changed: 0 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -154,57 +154,6 @@ const { statusCode, body } = await request('https://api.example.com/data');
154154
const data = await body.json();
155155
```
156156

157-
### Keep `fetch` and `FormData` together
158-
159-
When you send a `FormData` body, keep `fetch` and `FormData` from the same
160-
implementation.
161-
162-
Use one of these patterns:
163-
164-
```js
165-
// Built-in globals
166-
const body = new FormData()
167-
body.set('name', 'some')
168-
await fetch('https://example.com', {
169-
method: 'POST',
170-
body
171-
})
172-
```
173-
174-
```js
175-
// undici module imports
176-
import { fetch, FormData } from 'undici'
177-
178-
const body = new FormData()
179-
body.set('name', 'some')
180-
await fetch('https://example.com', {
181-
method: 'POST',
182-
body
183-
})
184-
```
185-
186-
If you want the installed `undici` package to provide the globals, call
187-
`install()` first:
188-
189-
```js
190-
import { install } from 'undici'
191-
192-
install()
193-
194-
const body = new FormData()
195-
body.set('name', 'some')
196-
await fetch('https://example.com', {
197-
method: 'POST',
198-
body
199-
})
200-
```
201-
202-
`install()` replaces the global `fetch`, `Headers`, `Response`, `Request`, and
203-
`FormData` implementations with undici's versions, so they all match.
204-
205-
Avoid mixing a global `FormData` with `undici.fetch()`, or `undici.FormData`
206-
with the built-in global `fetch()`.
207-
208157
### Version Compatibility
209158

210159
You can check which version of undici is bundled with your Node.js version:
@@ -314,11 +263,6 @@ The `install()` function adds the following classes to `globalThis`:
314263
- `CloseEvent`, `ErrorEvent`, `MessageEvent` - WebSocket events
315264
- `EventSource` - Server-sent events client
316265

317-
When you call `install()`, these globals come from the same undici
318-
implementation. For example, global `fetch` and global `FormData` will both be
319-
undici's versions, which is the recommended setup if you want to use undici
320-
through globals.
321-
322266
This is useful for:
323267
- Polyfilling environments that don't have fetch
324268
- Ensuring consistent fetch behavior across different Node.js versions

deps/undici/src/docs/docs/api/DiagnosticsChannel.md

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -182,24 +182,22 @@ diagnosticsChannel.channel('undici:websocket:open').subscribe(({
182182
console.log(websocket) // the WebSocket instance
183183

184184
// Handshake response details
185-
console.log(handshakeResponse.status) // 101 for HTTP/1.1, 200 for HTTP/2 extended CONNECT
186-
console.log(handshakeResponse.statusText) // 'Switching Protocols' for HTTP/1.1, commonly 'OK' for HTTP/2 in Node.js
185+
console.log(handshakeResponse.status) // 101 for successful WebSocket upgrade
186+
console.log(handshakeResponse.statusText) // 'Switching Protocols'
187187
console.log(handshakeResponse.headers) // Object containing response headers
188188
})
189189
```
190190

191191
### Handshake Response Object
192192

193-
The `handshakeResponse` object contains the HTTP response that established the WebSocket connection:
193+
The `handshakeResponse` object contains the HTTP response that upgraded the connection to WebSocket:
194194

195-
- `status` (number): The HTTP status code (`101` for HTTP/1.1 upgrade, `200` for HTTP/2 extended CONNECT)
196-
- `statusText` (string): The HTTP status message (`'Switching Protocols'` for HTTP/1.1, commonly `'OK'` for HTTP/2 in Node.js)
195+
- `status` (number): The HTTP status code (101 for successful WebSocket upgrade)
196+
- `statusText` (string): The HTTP status message ('Switching Protocols' for successful upgrade)
197197
- `headers` (object): The HTTP response headers from the server, including:
198-
- `sec-websocket-accept` and other WebSocket-related headers
199198
- `upgrade: 'websocket'`
200199
- `connection: 'upgrade'`
201-
202-
The `upgrade` and `connection` headers are only present for HTTP/1.1 handshakes.
200+
- `sec-websocket-accept` and other WebSocket-related headers
203201

204202
This information is particularly useful for debugging and monitoring WebSocket connections, as it provides access to the initial HTTP handshake response that established the WebSocket connection.
205203

deps/undici/src/docs/docs/api/Dispatcher.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ client.dispatch({
364364

365365
### `Dispatcher.pipeline(options, handler)`
366366

367-
For easy use with [stream.pipeline](https://nodejs.org/api/stream.html#streampipelinesource-transforms-destination-options). The `handler` argument should return a `Readable` from which the result will be read. Usually it should just return the `body` argument unless some kind of transformation needs to be performed based on e.g. `headers` or `statusCode`. The `handler` should validate the response and save any required state. If there is an error, it should be thrown. The function returns a `Duplex` which writes to the request and reads from the response.
367+
For easy use with [stream.pipeline](https://nodejs.org/api/stream.html#stream_stream_pipeline_source_transforms_destination_callback). The `handler` argument should return a `Readable` from which the result will be read. Usually it should just return the `body` argument unless some kind of transformation needs to be performed based on e.g. `headers` or `statusCode`. The `handler` should validate the response and save any required state. If there is an error, it should be thrown. The function returns a `Duplex` which writes to the request and reads from the response.
368368

369369
Arguments:
370370

@@ -963,7 +963,7 @@ const { Client, interceptors } = require("undici");
963963
const { redirect } = interceptors;
964964

965965
const client = new Client("http://service.example").compose(
966-
redirect({ maxRedirections: 3, throwOnMaxRedirect: true })
966+
redirect({ maxRedirections: 3, throwOnMaxRedirects: true })
967967
);
968968
client.request({ path: "/" })
969969
```
@@ -1036,10 +1036,10 @@ The `dns` interceptor enables you to cache DNS lookups for a given duration, per
10361036
- `dualStack` - Whether to resolve both IPv4 and IPv6 addresses. Default: `true`.
10371037
- It will also attempt a happy-eyeballs-like approach to connect to the available addresses in case of a connection failure.
10381038
- `affinity` - Whether to use IPv4 or IPv6 addresses. Default: `4`.
1039-
- It can be either `4` or `6`.
1039+
- It can be either `'4` or `6`.
10401040
- It will only take effect if `dualStack` is `false`.
10411041
- `lookup: (hostname: string, options: LookupOptions, callback: (err: NodeJS.ErrnoException | null, addresses: DNSInterceptorRecord[]) => void) => void` - Custom lookup function. Default: `dns.lookup`.
1042-
- For more info see [dns.lookup](https://nodejs.org/api/dns.html#dnslookuphostname-options-callback).
1042+
- For more info see [dns.lookup](https://nodejs.org/api/dns.html#dns_dns_lookup_hostname_options_callback).
10431043
- `pick: (origin: URL, records: DNSInterceptorRecords, affinity: 4 | 6) => DNSInterceptorRecord` - Custom pick function. Default: `RoundRobin`.
10441044
- The function should return a single record from the records array.
10451045
- By default a simplified version of Round Robin is used.

deps/undici/src/docs/docs/api/Fetch.md

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,6 @@ This API is implemented as per the standard, you can find documentation on [MDN]
1010

1111
If any parameters are passed to the FormData constructor other than `undefined`, an error will be thrown. Other parameters are ignored.
1212

13-
When you use `FormData` as a request body, keep `fetch` and `FormData` from the
14-
same implementation. Use the built-in global `FormData` with the built-in
15-
global `fetch()`, and use `undici`'s `FormData` with `undici.fetch()`.
16-
17-
If you want the installed `undici` package to provide the globals, call
18-
[`install()`](/docs/api/GlobalInstallation.md) so `fetch`, `Headers`,
19-
`Response`, `Request`, and `FormData` are installed together as a matching set.
20-
2113
## Response
2214

2315
This API is implemented as per the standard, you can find documentation on [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Response)

deps/undici/src/docs/docs/api/GlobalInstallation.md

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -43,54 +43,6 @@ The `install()` function adds the following classes to `globalThis`:
4343
| `MessageEvent` | WebSocket message event |
4444
| `EventSource` | Server-sent events client |
4545

46-
## Using `FormData` with `fetch`
47-
48-
If you send a `FormData` body, use matching implementations for `fetch` and
49-
`FormData`.
50-
51-
These two patterns are safe:
52-
53-
```js
54-
// Built-in globals from Node.js
55-
const body = new FormData()
56-
await fetch('https://example.com', {
57-
method: 'POST',
58-
body
59-
})
60-
```
61-
62-
```js
63-
// Globals installed from the undici package
64-
import { install } from 'undici'
65-
66-
install()
67-
68-
const body = new FormData()
69-
await fetch('https://example.com', {
70-
method: 'POST',
71-
body
72-
})
73-
```
74-
75-
After `install()`, `fetch`, `Headers`, `Response`, `Request`, and `FormData`
76-
all come from the installed `undici` package, so they work as a matching set.
77-
78-
If you do not want to install globals, import both from `undici` instead:
79-
80-
```js
81-
import { fetch, FormData } from 'undici'
82-
83-
const body = new FormData()
84-
await fetch('https://example.com', {
85-
method: 'POST',
86-
body
87-
})
88-
```
89-
90-
Avoid mixing a global `FormData` with `undici.fetch()`, or `undici.FormData`
91-
with the built-in global `fetch()`. Keeping them paired avoids surprising
92-
multipart behavior across Node.js and undici versions.
93-
9446
## Use Cases
9547

9648
Global installation is useful for:

deps/undici/src/docs/docs/api/RedirectHandler.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22

33
A class that handles redirection logic for HTTP requests.
44

5-
## `new RedirectHandler(dispatch, maxRedirections, opts, handler)`
5+
## `new RedirectHandler(dispatch, maxRedirections, opts, handler, redirectionLimitReached)`
66

77
Arguments:
88

99
- **dispatch** `function` - The dispatch function to be called after every retry.
1010
- **maxRedirections** `number` - Maximum number of redirections allowed.
1111
- **opts** `object` - Options for handling redirection.
1212
- **handler** `object` - An object containing handlers for different stages of the request lifecycle.
13+
- **redirectionLimitReached** `boolean` (default: `false`) - A flag that the implementer can provide to enable or disable the feature. If set to `false`, it indicates that the caller doesn't want to use the feature and prefers the old behavior.
1314

1415
Returns: `RedirectHandler`
1516

@@ -19,6 +20,7 @@ Returns: `RedirectHandler`
1920
- **maxRedirections** `number` (required) - Maximum number of redirections allowed.
2021
- **opts** `object` (required) - Options for handling redirection.
2122
- **handler** `object` (required) - Handlers for different stages of the request lifecycle.
23+
- **redirectionLimitReached** `boolean` (default: `false`) - A flag that the implementer can provide to enable or disable the feature. If set to `false`, it indicates that the caller doesn't want to use the feature and prefers the old behavior.
2224

2325
### Properties
2426

@@ -28,6 +30,7 @@ Returns: `RedirectHandler`
2830
- **maxRedirections** `number` - Maximum number of redirections allowed.
2931
- **handler** `object` - Handlers for different stages of the request lifecycle.
3032
- **history** `Array` - An array representing the history of URLs during redirection.
33+
- **redirectionLimitReached** `boolean` - Indicates whether the redirection limit has been reached.
3134

3235
### Methods
3336

deps/undici/src/docs/docs/best-practices/undici-vs-builtin-fetch.md

Lines changed: 3 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -19,93 +19,6 @@ When you install undici from npm, you get the full library with all of its
1919
additional APIs, and potentially a newer release than what your Node.js version
2020
bundles.
2121

22-
## Keep `fetch` and `FormData` from the same implementation
23-
24-
When you send a `FormData` body, keep `fetch` and `FormData` together from the
25-
same implementation.
26-
27-
Use one of these patterns:
28-
29-
### Built-in globals
30-
31-
```js
32-
const body = new FormData()
33-
body.set('name', 'some')
34-
body.set('someOtherProperty', '8000')
35-
36-
await fetch('https://example.com', {
37-
method: 'POST',
38-
body
39-
})
40-
```
41-
42-
### `undici` module imports
43-
44-
```js
45-
import { fetch, FormData } from 'undici'
46-
47-
const body = new FormData()
48-
body.set('name', 'some')
49-
body.set('someOtherProperty', '8000')
50-
51-
await fetch('https://example.com', {
52-
method: 'POST',
53-
body
54-
})
55-
```
56-
57-
### `undici.install()` globals
58-
59-
If you want the installed `undici` package to provide the globals, call
60-
[`install()`](/docs/api/GlobalInstallation.md):
61-
62-
```js
63-
import { install } from 'undici'
64-
65-
install()
66-
67-
const body = new FormData()
68-
body.set('name', 'some')
69-
body.set('someOtherProperty', '8000')
70-
71-
await fetch('https://example.com', {
72-
method: 'POST',
73-
body
74-
})
75-
```
76-
77-
`install()` replaces the global `fetch`, `Headers`, `Response`, `Request`, and
78-
`FormData` implementations with undici's versions, and also installs undici's
79-
`WebSocket`, `CloseEvent`, `ErrorEvent`, `MessageEvent`, and `EventSource`
80-
globals.
81-
82-
Avoid mixing implementations in the same request, for example:
83-
84-
```js
85-
import { fetch } from 'undici'
86-
87-
const body = new FormData()
88-
89-
await fetch('https://example.com', {
90-
method: 'POST',
91-
body
92-
})
93-
```
94-
95-
```js
96-
import { FormData } from 'undici'
97-
98-
const body = new FormData()
99-
100-
await fetch('https://example.com', {
101-
method: 'POST',
102-
body
103-
})
104-
```
105-
106-
Those combinations may behave differently across Node.js and undici versions.
107-
Using matching pairs keeps multipart handling predictable.
108-
10922
## When you do NOT need to install undici
11023

11124
If all of the following are true, you can rely on the built-in globals and skip
@@ -206,12 +119,12 @@ You can always check the exact bundled version at runtime with
206119
`process.versions.undici`.
207120

208121
Installing undici from npm does not replace the built-in globals. If you want
209-
your installed version to replace the global `fetch` and related classes, use
210-
[`install()`](/docs/api/GlobalInstallation.md). Otherwise, import `fetch`
122+
your installed version to override the global `fetch`, use
123+
[`setGlobalDispatcher`](/docs/api/GlobalInstallation.md) or import `fetch`
211124
directly from `'undici'`:
212125

213126
```js
214-
import { fetch } from 'undici' // uses your installed version, not the built-in
127+
import { fetch } from 'undici'; // uses your installed version, not the built-in
215128
```
216129

217130
## Further reading

0 commit comments

Comments
 (0)