Releases: ardatan/whatwg-node
December 17, 2024
@whatwg-node/server@0.9.64
Patch Changes
-
#1899
a84e84a
Thanks @ardatan! - - NewonDispose
hook which is alias of
Symbol.asyncDispose
for Explicit Resource Management- Registration of the server adapter's disposal to the global process termination listener is now
opt-in and configurable.
const plugin: ServerAdapterPlugin = { onDispose() { console.log('Server adapter is disposed') } } const serverAdapter = createServerAdapter(() => new Response('Hello world!'), { plugins: [plugin], // Register the server adapter's disposal to the global process termination listener // Then the server adapter will be disposed when the process exit signals only in Node.js! disposeOnProcessTerminate: true }) await serverAdapter.dispose() // Prints 'Server adapter is disposed'
- Registration of the server adapter's disposal to the global process termination listener is now
December 13, 2024
December 12, 2024
December 10, 2024
@whatwg-node/node-fetch@0.7.5
Patch Changes
-
#1872
7fb47d8
Thanks @ardatan! - Fix the error thrown `ENOTFOUND` when a parsed
URL with IPV6 hostname is givenInstead of using the parsed URL passed to the
fetch
function, letnode:http
parse it again.
This way, the IPV6 hostname is correctly resolved. -
#1872
7fb47d8
Thanks @ardatan! -url.searchParams
parameter should reflect the
changes intoString()
const url = new URL('http://example.com/?a=b') url.searchParams.set('a', 'c') console.log(url.toString()) // http://example.com/?a=c
-
#1872
7fb47d8
Thanks @ardatan! - Fix IPV6 parsing in `URL`;new URL('http://[::1]')
should parse the host as `[::1]` not `::1`.
@whatwg-node/server@0.9.61
Patch Changes
-
#1872
7fb47d8
Thanks @ardatan! - Wait for remaining promises duringasyncDispose
correctlyThe
asyncDispose
function should wait for all remaining promises to resolve before returning.
This ensures that the server is fully disposed of before the function returns.import { createServerAdapter } from '@whatwg-node/server' const deferred = Promise.withResolvers() const adapter = createServerAdapter((req, ctx) => { ctx.waitUntil(deferred.promise) return new Response('Hello, world!') }) const res = await adapter.fetch('http://example.com') console.assert(res.status === 200) console.assert((await res.text()) === 'Hello, world!') let disposed = false adapter[Symbol.asyncDispose]().then(() => { disposed = true }) console.assert(!disposed) deferred.resolve() console.assert(disposed)
November 25, 2024
November 25, 2024
November 25, 2024
November 25, 2024
@whatwg-node/node-fetch@0.7.4
Patch Changes
e88ab4a
Thanks @ardatan! - dependencies updates:- Added dependency
@whatwg-node/disposablestack@^0.0.5
↗︎
(todependencies
)
- Added dependency
@whatwg-node/server@0.9.57
Patch Changes
-
e88ab4a
Thanks @ardatan! - dependencies updates:- Added dependency
@whatwg-node/disposablestack@^0.0.5
↗︎
(todependencies
)
- Added dependency
-
e88ab4a
Thanks @ardatan! - New Explicit Resource Management feature for the
server adapters;
Learn moreSymbol.dispose
andSymbol.asyncDispose
hooks When the server adapter plugin has these hooks,
it is added to the disposable stack of the server adapter. When the server adapter is disposed,
those hooks are triggereddisposableStack
in the server adapter The shared disposable stack that will be triggered when
Symbol.asyncDispose
is called.- Automatic disposal on Node and Node-compatible environments Even if the server adapter is not
disposed explicitly, the disposal logic will be triggered on the process termination (SIGINT,
SIGTERM etc) - ctx.waitUntil relation If it is an environment does not natively provide
waitUntil
, the
unresolved passed promises will be resolved by the disposable stack.