GeezerVison is showing github.com — deps: update undici to 7.2.0 · nodejs/node@67b647e
File treeExpand file treeCollapse file tree Open diff view settings Expand file treeCollapse file tree Open diff view settings Collapse file Copy file name to clipboardExpand all lines: deps/undici/src/README.md +25-9Lines changed: 25 additions & 9 deletions - Display the source diff
- Display the rich diff
| Original file line number | Diff line number | Diff line change |
|---|
@@ -281,17 +281,23 @@ stalls or deadlocks when running out of connections. | 281 | 281 |
| 282 | 282 | ```js | 283 | 283 | // Do | 284 | | -const headers = await fetch(url) | 285 | | - .then(async res => { | 286 | | - for await (const chunk of res.body) { | 287 | | - // force consumption of body | 288 | | - } | 289 | | - return res.headers | 290 | | - }) | | 284 | +const { body, headers } = await fetch(url); | | 285 | +for await (const chunk of body) { | | 286 | + // force consumption of body | | 287 | +} | 291 | 288 |
| 292 | 289 | // Do not | 293 | | -const headers = await fetch(url) | 294 | | - .then(res => res.headers) | | 290 | +const { headers } = await fetch(url); | | 291 | +``` | | 292 | + | | 293 | +The same applies for `request` too: | | 294 | +```js | | 295 | +// Do | | 296 | +const { body, headers } = await request(url); | | 297 | +await res.body.dump(); // force consumption of body | | 298 | + | | 299 | +// Do not | | 300 | +const { headers } = await request(url); | 295 | 301 | ``` | 296 | 302 |
| 297 | 303 | However, if you want to get only headers, it might be better to use `HEAD` request method. Usage of this method will obviate the need for consumption or cancelling of the response body. See [MDN - HTTP - HTTP request methods - HEAD](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/HEAD) for more details. | @@ -445,6 +451,16 @@ and `undici.Agent`) which will enable the family autoselection algorithm when es | 445 | 451 | * [__Robert Nagy__](https://github.com/ronag), <https://www.npmjs.com/~ronag> | 446 | 452 | * [__Matthew Aitken__](https://github.com/KhafraDev), <https://www.npmjs.com/~khaf> | 447 | 453 |
| | 454 | +## Long Term Support | | 455 | + | | 456 | +Undici aligns with the Node.js LTS schedule. The following table shows the supported versions: | | 457 | + | | 458 | +| Version | Node.js | End of Life | | | 459 | +|---------|-------------|-------------| | | 460 | +| 5.x | v18.x | 2024-04-30 | | | 461 | +| 6.x | v20.x v22.x | 2026-04-30 | | | 462 | +| 7.x | v24.x | 2027-04-30 | | | 463 | + | 448 | 464 | ## License | 449 | 465 |
| 450 | 466 | MIT |
Collapse file Copy file name to clipboardExpand all lines: deps/undici/src/docs/docs/api/ProxyAgent.md +10-2Lines changed: 10 additions & 2 deletions - Display the source diff
- Display the rich diff
| Original file line number | Diff line number | Diff line change |
|---|
@@ -15,15 +15,16 @@ Returns: `ProxyAgent` | 15 | 15 | ### Parameter: `ProxyAgentOptions` | 16 | 16 |
| 17 | 17 | Extends: [`AgentOptions`](/docs/docs/api/Agent.md#parameter-agentoptions) | | 18 | +> It ommits `AgentOptions#connect`. | 18 | 19 |
| 19 | 20 | * **uri** `string | URL` (required) - The URI of the proxy server. This can be provided as a string, as an instance of the URL class, or as an object with a `uri` property of type string. | 20 | 21 | If the `uri` is provided as a string or `uri` is an object with an `uri` property of type string, then it will be parsed into a `URL` object according to the [WHATWG URL Specification](https://url.spec.whatwg.org). | 21 | 22 | For detailed information on the parsing process and potential validation errors, please refer to the ["Writing" section](https://url.spec.whatwg.org/#writing) of the WHATWG URL Specification. | 22 | 23 | * **token** `string` (optional) - It can be passed by a string of token for authentication. | 23 | 24 | * **auth** `string` (**deprecated**) - Use token. | 24 | 25 | * **clientFactory** `(origin: URL, opts: Object) => Dispatcher` (optional) - Default: `(origin, opts) => new Pool(origin, opts)` | 25 | | -* **requestTls** `BuildOptions` (optional) - Options object passed when creating the underlying socket via the connector builder for the request. See [TLS](https://nodejs.org/api/tls.html#tlsconnectoptions-callback). | 26 | | -* **proxyTls** `BuildOptions` (optional) - Options object passed when creating the underlying socket via the connector builder for the proxy server. See [TLS](https://nodejs.org/api/tls.html#tlsconnectoptions-callback). | | 26 | +* **requestTls** `BuildOptions` (optional) - Options object passed when creating the underlying socket via the connector builder for the request. It extends from [`Client#ConnectOptions`](/docs/docs/api/Client.md#parameter-connectoptions). | | 27 | +* **proxyTls** `BuildOptions` (optional) - Options object passed when creating the underlying socket via the connector builder for the proxy server. It extends from [`Client#ConnectOptions`](/docs/docs/api/Client.md#parameter-connectoptions). | 27 | 28 |
| 28 | 29 | Examples: | 29 | 30 |
| @@ -35,6 +36,13 @@ const proxyAgent = new ProxyAgent('my.proxy.server') | 35 | 36 | const proxyAgent = new ProxyAgent(new URL('my.proxy.server')) | 36 | 37 | // or | 37 | 38 | const proxyAgent = new ProxyAgent({ uri: 'my.proxy.server' }) | | 39 | +// or | | 40 | +const proxyAgent = new ProxyAgent({ | | 41 | + uri: new URL('my.proxy.server'), | | 42 | + proxyTls: { | | 43 | + signal: AbortSignal.timeout(1000) | | 44 | + } | | 45 | +}) | 38 | 46 | ``` | 39 | 47 |
| 40 | 48 | #### Example - Basic ProxyAgent instantiation | |
Collapse file Copy file name to clipboardExpand all lines: deps/undici/src/index.js +2-9Lines changed: 2 additions & 9 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -49,15 +49,8 @@ module.exports.cacheStores = { | 49 | 49 | MemoryCacheStore: require('./lib/cache/memory-cache-store') | 50 | 50 | } | 51 | 51 |
| 52 | | -try { | 53 | | - const SqliteCacheStore = require('./lib/cache/sqlite-cache-store') | 54 | | - module.exports.cacheStores.SqliteCacheStore = SqliteCacheStore | 55 | | -} catch (err) { | 56 | | - // Most likely node:sqlite was not present, since SqliteCacheStore is | 57 | | - // optional, don't throw. Don't check specific error codes here because while | 58 | | - // ERR_UNKNOWN_BUILTIN_MODULE is expected, users have seen other codes like | 59 | | - // MODULE_NOT_FOUND | 60 | | -} | | 52 | +const SqliteCacheStore = require('./lib/cache/sqlite-cache-store') | | 53 | +module.exports.cacheStores.SqliteCacheStore = SqliteCacheStore | 61 | 54 |
| 62 | 55 | module.exports.buildConnector = buildConnector | 63 | 56 | module.exports.errors = errors | |
Collapse file Copy file name to clipboardExpand all lines: deps/undici/src/lib/cache/sqlite-cache-store.js +5-1Lines changed: 5 additions & 1 deletion | Original file line number | Diff line number | Diff line change |
|---|
| 1 | 1 | 'use strict' | 2 | 2 |
| 3 | | -const { DatabaseSync } = require('node:sqlite') | 4 | 3 | const { Writable } = require('stream') | 5 | 4 | const { assertCacheKey, assertCacheValue } = require('../util/cache.js') | 6 | 5 |
| | 6 | +let DatabaseSync | | 7 | + | 7 | 8 | const VERSION = 3 | 8 | 9 |
| 9 | 10 | // 2gb | @@ -101,6 +102,9 @@ module.exports = class SqliteCacheStore { | 101 | 102 | } | 102 | 103 | } | 103 | 104 |
| | 105 | + if (!DatabaseSync) { | | 106 | + DatabaseSync = require('node:sqlite').DatabaseSync | | 107 | + } | 104 | 108 | this.#db = new DatabaseSync(opts?.location ?? ':memory:') | 105 | 109 |
| 106 | 110 | this.#db.exec(` | |
Collapse file Copy file name to clipboardExpand all lines: deps/undici/src/lib/dispatcher/client-h2.js +9Lines changed: 9 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -30,6 +30,7 @@ const { | 30 | 30 | kClosed, | 31 | 31 | kBodyTimeout | 32 | 32 | } = require('../core/symbols.js') | | 33 | +const { channels } = require('../core/diagnostics.js') | 33 | 34 |
| 34 | 35 | const kOpenStreams = Symbol('open streams') | 35 | 36 |
| @@ -448,6 +449,14 @@ function writeH2 (client, request) { | 448 | 449 |
| 449 | 450 | session.ref() | 450 | 451 |
| | 452 | + if (channels.sendHeaders.hasSubscribers) { | | 453 | + let header = '' | | 454 | + for (const key in headers) { | | 455 | + header += `${key}: ${headers[key]}\r\n` | | 456 | + } | | 457 | + channels.sendHeaders.publish({ request, headers: header, socket: session[kSocket] }) | | 458 | + } | | 459 | + | 451 | 460 | // TODO(metcoder95): add support for sending trailers | 452 | 461 | const shouldEndStream = method === 'GET' || method === 'HEAD' || body === null | 453 | 462 | if (expectContinue) { | |
|