Skip to content

Releases: ardatan/whatwg-node

February 05, 2025

Choose a tag to compare

@theguild-bot theguild-bot released this 05 Feb 16:11
aecdc2e

@whatwg-node/node-fetch@0.7.8

Patch Changes

  • 337e605
    Thanks @ardatan! - - Use native AbortSignal and AbortController for
    Request.signal
    • Remove custom AbortSignal implementation (ServerAdapterAbortSignal)

@whatwg-node/server@0.9.66

Patch Changes

  • 337e605
    Thanks @ardatan! - - Use native AbortSignal and AbortController for
    Request.signal
    • Remove custom AbortSignal implementation (ServerAdapterAbortSignal)

January 10, 2025

Choose a tag to compare

@theguild-bot theguild-bot released this 10 Jan 09:40
02c97ae

@whatwg-node/fetch@0.10.3

Patch Changes

  • #1961
    2785c80
    Thanks @ardatan! - ReadableStream's Symbol.asyncIterator now
    returns AsyncIterableIterator like before even if it is ok to return AsyncIterator right now.
    It is safer to return AsyncIterableIterator because it is a common mistake to use
    AsyncIterator as AsyncIterable.
  • Updated dependencies
    [2785c80]:
    • @whatwg-node/node-fetch@0.7.7

@whatwg-node/node-fetch@0.7.7

Patch Changes

  • #1961
    2785c80
    Thanks @ardatan! - ReadableStream's Symbol.asyncIterator now
    returns AsyncIterableIterator like before even if it is ok to return AsyncIterator right now.
    It is safer to return AsyncIterableIterator because it is a common mistake to use
    AsyncIterator as AsyncIterable.

January 10, 2025

Choose a tag to compare

@theguild-bot theguild-bot released this 10 Jan 07:33
6dc3d3f

@whatwg-node/fetch@0.10.2

Patch Changes

@whatwg-node/node-fetch@0.7.6

Patch Changes

  • #1929
    b88b85c
    Thanks @ardatan! - dependencies updates:

  • #1947
    9b39c3e
    Thanks @ardatan! - Remove the event listener on the provided
    AbortSignal when node-libcurl is used, the connection finishes to prevent potential memory
    leaks;

    const res = await fetch(URL, { signal: new AbortController().signal })
    // AbortController is never aborted, and HTTP request is done as expected successfully
  • #1929
    b88b85c
    Thanks @ardatan! - - Remove URL ponyfill implementation based on
    fast-url-parser and fast-querystring, because Node now uses Ada URL parser which is fast
    enough.

    • Fix ReadableStream[Symbol.asyncIterator]

    ReadableStream uses Readable so it uses Symbol.asyncIterator method of Readable but the
    returned iterator's .return method doesn't handle cancellation correctly. So we need to call
    readable.destroy(optionalError) manually to cancel the stream.

    This allows ReadableStream to use implementations relying on AsyncIterable.cancel to handle
    cancellation like Readable.from

    Previously the following was not handling cancellation;

    const res = new ReadableStream({
      start(controller) {
        controller.enqueue('Hello')
        controller.enqueue('World')
      },
      cancel(reason) {
        console.log('cancelled', reason)
      }
    })
    
    const readable = Readable.from(res)
    
    readable.destroy(new Error('MY REASON'))
    
    // Should log 'cancelled MY REASON'

December 24, 2024

Choose a tag to compare

@theguild-bot theguild-bot released this 24 Dec 14:57
fdf8ac0

@whatwg-node/server@0.9.65

Patch Changes

  • #1926
    bae5de1
    Thanks @ardatan! - While calling handleNodeRequest or
    handleNodeRequestAndResponse, waitUntil is not added automatically as in requestListener for
    Node.js integration. This change adds waitUntil into the serverContext if not present.

    Fixes the issue with Fastify integration that uses the mentioned methods

December 17, 2024

Choose a tag to compare

@theguild-bot theguild-bot released this 17 Dec 13:51
dd8f5d1

@whatwg-node/server@0.9.64

Patch Changes

  • #1899
    a84e84a
    Thanks @ardatan! - - New onDispose 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'

December 13, 2024

Choose a tag to compare

@theguild-bot theguild-bot released this 13 Dec 08:28
77f5c26

@whatwg-node/server@0.9.63

Patch Changes

  • c75e6e3
    Thanks @ardatan! - Export `DisposableSymbols` for disposable
    plugins

December 12, 2024

Choose a tag to compare

@theguild-bot theguild-bot released this 12 Dec 14:13
6a42223

@whatwg-node/server@0.9.62

Patch Changes

December 10, 2024

Choose a tag to compare

@theguild-bot theguild-bot released this 10 Dec 21:24
ded85ee

@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 given

    Instead of using the parsed URL passed to the fetch function, let node:http parse it again.
    This way, the IPV6 hostname is correctly resolved.

  • #1872
    7fb47d8
    Thanks @ardatan! - url.searchParams parameter should reflect the
    changes in toString()

    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 during asyncDispose
    correctly

    The 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

Choose a tag to compare

@theguild-bot theguild-bot released this 25 Nov 20:59
7ec7cc4

@whatwg-node/server@0.9.60

Patch Changes

November 25, 2024

Choose a tag to compare

@theguild-bot theguild-bot released this 25 Nov 18:49
5d67e83

@whatwg-node/server@0.9.59

Patch Changes

  • b4ab548
    Thanks @ardatan! - Remove SIGTERM from termination events to prevent
    hangs, and always add disposable stack to the termination events