Avatar for the middleapi user
middleapi
standard-server
BlogDocsChangelog

Performance History

Latest Results

feat(fetch)!: throw when an event stream ends without a close event (#169) `toAsyncIteratorObject` now only finishes cleanly on a `close` event, or throws `ErrorEvent` on an `error` event. A stream that ends without either now rejects with `EventStreamDecoderError('Event Stream ended before complete')`. That is the same error a stream gets when it ends partway through a message. The rule also covers a missing (`null`) body. Since #125, `toEventStream` always sends a `close` event, so streams from standard-server senders are unaffected. This change lets the client actually use that signal: a dropped connection no longer looks like a finished stream. ## Why When the server's pipeline errors, the client already sees a network error. Many cut-offs still reach the client as a clean end of stream, though, and before this change they read as a finished stream. In a local probe with Node's `fetch` and `http2` client: - an HTTP/1.1 response ended early (`res.end()`) - a connection-close-delimited body (an HTTP/1.0 hop) whose connection drops - an HTTP/2 stream ended early, or its session torn down Proxy timeouts, serverless time limits and graceful shutdowns can end responses in these ways. ## Scope - Applies to `@standard-server/fetch`, `@standard-server/node` and `@standard-server/aws-lambda`, which share the fetch implementation. - `@standard-server/peer` is unchanged. It already rejects when its queue closes before a `close` event. - Stopping early with `return()` still resolves as done. ## Breaking change - Reading an event stream that ends without a `close` event now throws instead of resolving `{ done: true, value: undefined }`. - This affects SSE senders that never send `event: close`: generic SSE APIs, and standard-server senders that set the old `emptyCloseEventEnabled: false` option. - `toAsyncIteratorObject(null)` now throws on the first `next()`. This happens, for example, with a HEAD or 204 response labelled `text/event-stream`. ## Testing - Updated the tests that relied on a close-less stream finishing quietly. They now either send `event: close` or expect the error. - Added an empty-stream case and changed the null-stream case to expect the error. - `pnpm run check` (sherif, oxlint, oxfmt, tsc) and the full vitest suite pass locally. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01NYpqRELEp4zdwCYWeqRMAj --------- Co-authored-by: Claude <noreply@anthropic.com>
main
10 hours ago
chore(deps-dev): bump the dev-dependencies-minor-patch group across 1 directory with 4 updates Bumps the dev-dependencies-minor-patch group with 4 updates in the / directory: [@hono/node-server](https://github.com/honojs/node-server), [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [fastify](https://github.com/fastify/fastify) and [@types/bun](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/bun). Updates `@hono/node-server` from 2.1.4 to 2.1.5 - [Release notes](https://github.com/honojs/node-server/releases) - [Commits](https://github.com/honojs/node-server/compare/v2.1.4...v2.1.5) Updates `@types/node` from 26.6.4 to 26.6.5 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `fastify` from 5.12.5 to 5.12.7 - [Release notes](https://github.com/fastify/fastify/releases) - [Commits](https://github.com/fastify/fastify/compare/v5.12.5...v5.12.7) Updates `@types/bun` from 1.4.2 to 1.4.3 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/bun) --- updated-dependencies: - dependency-name: "@hono/node-server" dependency-version: 2.1.5 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies-minor-patch - dependency-name: "@types/bun" dependency-version: 1.4.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies-minor-patch - dependency-name: "@types/node" dependency-version: 26.6.5 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies-minor-patch - dependency-name: fastify dependency-version: 5.12.7 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies-minor-patch ... Signed-off-by: dependabot[bot] <support@github.com>
dependabot/npm_and_yarn/dev-dependencies-minor-patch-b2a3be9c91
15 hours ago
chore(deps-dev): bump @remix-run/node-fetch-server from 0.14.1 to 1.0.0 (#167) Bumps [@remix-run/node-fetch-server](https://github.com/remix-run/remix/tree/HEAD/packages/node-fetch-server) from 0.14.1 to 1.0.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/remix-run/remix/releases">@​remix-run/node-fetch-server's releases</a>.</em></p> <blockquote> <h2>test v1.0.0</h2> <h3>Major Changes</h3> <ul> <li>First stable release.</li> </ul> <h3>Patch Changes</h3> <ul> <li>Bumped <code>@remix-run/*</code> dependencies: <ul> <li><a href="https://github.com/remix-run/remix/releases/tag/node-tsx@1.0.0"><code>node-tsx@1.0.0</code></a></li> <li><a href="https://github.com/remix-run/remix/releases/tag/terminal@1.0.0"><code>terminal@1.0.0</code></a></li> </ul> </li> </ul> <h2>terminal v1.0.0</h2> <h3>Major Changes</h3> <ul> <li>First stable release.</li> </ul> <h2>tar-parser v1.0.0</h2> <h3>Major Changes</h3> <ul> <li>First stable release.</li> </ul> <h2>static-middleware v1.0.0</h2> <h3>Major Changes</h3> <ul> <li>First stable release.</li> </ul> <h3>Patch Changes</h3> <ul> <li>Bumped <code>@remix-run/*</code> dependencies: <ul> <li><a href="https://github.com/remix-run/remix/releases/tag/fetch-router@1.0.0"><code>fetch-router@1.0.0</code></a></li> <li><a href="https://github.com/remix-run/remix/releases/tag/fs@1.0.0"><code>fs@1.0.0</code></a></li> <li><a href="https://github.com/remix-run/remix/releases/tag/html-template@1.0.0"><code>html-template@1.0.0</code></a></li> <li><a href="https://github.com/remix-run/remix/releases/tag/mime@1.0.0"><code>mime@1.0.0</code></a></li> <li><a href="https://github.com/remix-run/remix/releases/tag/response@1.0.0"><code>response@1.0.0</code></a></li> </ul> </li> </ul> <h2>spa v1.0.0</h2> <h3>Major Changes</h3> <ul> <li>First stable release.</li> </ul> <h3>Patch Changes</h3> <ul> <li>Bumped <code>@remix-run/*</code> dependencies: <ul> <li><a href="https://github.com/remix-run/remix/releases/tag/component@1.0.0"><code>component@1.0.0</code></a></li> <li><a href="https://github.com/remix-run/remix/releases/tag/fetch-router@1.0.0"><code>fetch-router@1.0.0</code></a></li> <li><a href="https://github.com/remix-run/remix/releases/tag/render-middleware@1.0.0"><code>render-middleware@1.0.0</code></a></li> </ul> </li> </ul> <h2>session-storage-redis v1.0.0</h2> <h3>Major Changes</h3> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/remix-run/remix/blob/main/packages/node-fetch-server/CHANGELOG.md">@​remix-run/node-fetch-server's changelog</a>.</em></p> <blockquote> <h2>v1.0.0</h2> <h3>Major Changes</h3> <ul> <li>First stable release.</li> </ul> <h2>v0.14.2</h2> <h3>Patch Changes</h3> <ul> <li> <p>Use HTTP/2 <code>:authority</code> before <code>Host</code> when constructing request URLs. Requests whose <code>Host</code> and <code>:authority</code> identify different hosts now receive a 400 response by default from <code>createRequestListener()</code>, with custom responses supported through <code>onError</code>. Equivalent hostnames and default ports remain accepted.</p> </li> <li> <p><code>createRequestListener()</code> now accepts request-only handlers separately from handlers that read client address information, so handlers such as <code>router.fetch</code> can be passed directly.</p> </li> <li> <p>Declare package modules as side-effect-free.</p> </li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/remix-run/remix/commit/70cdc64df8faac968b360512f86e44199dc39660"><code>70cdc64</code></a> Release v3.0.0 (<a href="https://github.com/remix-run/remix/tree/HEAD/packages/node-fetch-server/issues/11954">#11954</a>)</li> <li><a href="https://github.com/remix-run/remix/commit/d93b6ae22b6710cdc16fdc59e3aa54e2bcb286d4"><code>d93b6ae</code></a> Prepare Remix 3 stable release (<a href="https://github.com/remix-run/remix/tree/HEAD/packages/node-fetch-server/issues/11952">#11952</a>)</li> <li><a href="https://github.com/remix-run/remix/commit/c9c89398474801f13f1e10dd86fad71ef3ca16f1"><code>c9c8939</code></a> Release v3.0.0-rc.4 (<a href="https://github.com/remix-run/remix/tree/HEAD/packages/node-fetch-server/issues/11910">#11910</a>)</li> <li><a href="https://github.com/remix-run/remix/commit/ad4fcbc790585d5f311e80cd353a78e6a1b0032f"><code>ad4fcbc</code></a> Pass router.fetch directly to server listeners (<a href="https://github.com/remix-run/remix/tree/HEAD/packages/node-fetch-server/issues/11934">#11934</a>)</li> <li><a href="https://github.com/remix-run/remix/commit/2be0b2e686b34afea7219131b7ebe33de32f444d"><code>2be0b2e</code></a> Optimize barrel file imports in browser assets (<a href="https://github.com/remix-run/remix/tree/HEAD/packages/node-fetch-server/issues/11861">#11861</a>)</li> <li><a href="https://github.com/remix-run/remix/commit/9bb376346cb7cf84bf73a9bc7072c9644523a286"><code>9bb3763</code></a> Normalize HTTP/2 request authority and proxy headers (<a href="https://github.com/remix-run/remix/tree/HEAD/packages/node-fetch-server/issues/11902">#11902</a>)</li> <li><a href="https://github.com/remix-run/remix/commit/2949a5994ab98d0847abd3ed75c6473736375c7e"><code>2949a59</code></a> Release (<a href="https://github.com/remix-run/remix/tree/HEAD/packages/node-fetch-server/issues/11586">#11586</a>)</li> <li><a href="https://github.com/remix-run/remix/commit/89092ad19b660ab2326edf5f2883f6a56b63baf9"><code>89092ad</code></a> Use stable TypeScript 7 compiler (<a href="https://github.com/remix-run/remix/tree/HEAD/packages/node-fetch-server/issues/11666">#11666</a>)</li> <li><a href="https://github.com/remix-run/remix/commit/fae38729edac916a77bc5ffebe3bd85f87a7006b"><code>fae3872</code></a> Use native Requests in node-fetch-server handlers (<a href="https://github.com/remix-run/remix/tree/HEAD/packages/node-fetch-server/issues/11627">#11627</a>)</li> <li><a href="https://github.com/remix-run/remix/commit/9b722bfe640eac6f305b2ea736ec1e4736cbf1d3"><code>9b722bf</code></a> Release (<a href="https://github.com/remix-run/remix/tree/HEAD/packages/node-fetch-server/issues/11545">#11545</a>)</li> <li>Additional commits viewable in <a href="https://github.com/remix-run/remix/commits/fs@1.0.0/packages/node-fetch-server">compare view</a></li> </ul> </details> <br /> [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@remix-run/node-fetch-server&package-manager=npm_and_yarn&previous-version=0.14.1&new-version=1.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
main
15 hours ago
chore(deps-dev): bump the dev-dependencies-minor-patch group with 4 updates Bumps the dev-dependencies-minor-patch group with 4 updates: [@hono/node-server](https://github.com/honojs/node-server), [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [fastify](https://github.com/fastify/fastify) and [@types/bun](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/bun). Updates `@hono/node-server` from 2.1.4 to 2.1.5 - [Release notes](https://github.com/honojs/node-server/releases) - [Commits](https://github.com/honojs/node-server/compare/v2.1.4...v2.1.5) Updates `@types/node` from 26.6.4 to 26.6.5 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `fastify` from 5.12.5 to 5.12.7 - [Release notes](https://github.com/fastify/fastify/releases) - [Commits](https://github.com/fastify/fastify/compare/v5.12.5...v5.12.7) Updates `@types/bun` from 1.4.2 to 1.4.3 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/bun) --- updated-dependencies: - dependency-name: "@hono/node-server" dependency-version: 2.1.5 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies-minor-patch - dependency-name: "@types/node" dependency-version: 26.6.5 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies-minor-patch - dependency-name: fastify dependency-version: 5.12.7 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies-minor-patch - dependency-name: "@types/bun" dependency-version: 1.4.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies-minor-patch ... Signed-off-by: dependabot[bot] <support@github.com>
dependabot/npm_and_yarn/dev-dependencies-minor-patch-b2a3be9c91
2 days ago

Latest Branches

CodSpeed Performance Gauge
0%
feat(fetch)!: throw when an event stream ends without a close event#169
10 hours ago
07cbb4e
claude/serene-wozniak-qotci6
CodSpeed Performance Gauge
0%
chore(deps-dev): bump the dev-dependencies-minor-patch group across 1 directory with 4 updates#165
15 hours ago
8d7ca95
dependabot/npm_and_yarn/dev-dependencies-minor-patch-b2a3be9c91
CodSpeed Performance Gauge
0%
2 days ago
d0f10d3
dependabot/npm_and_yarn/remix-run/node-fetch-server-1.0.0
© 2026 CodSpeed Technology
Home Terms Privacy Docs