From 90c04a311743335d9030c80b218efa210e93063e Mon Sep 17 00:00:00 2001 From: checkerschaf Date: Wed, 28 Jan 2026 17:46:41 +0100 Subject: [PATCH 1/2] fix: AbortError in renderToReadableStream --- .../src/ssr/renderRouterToStream.tsx | 47 ++++++++++++------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/packages/react-router/src/ssr/renderRouterToStream.tsx b/packages/react-router/src/ssr/renderRouterToStream.tsx index 147a13a9a93..ce46aa56cd7 100644 --- a/packages/react-router/src/ssr/renderRouterToStream.tsx +++ b/packages/react-router/src/ssr/renderRouterToStream.tsx @@ -21,24 +21,39 @@ export const renderRouterToStream = async ({ children: ReactNode }) => { if (typeof ReactDOMServer.renderToReadableStream === 'function') { - const stream = await ReactDOMServer.renderToReadableStream(children, { - signal: request.signal, - nonce: router.options.ssr?.nonce, - progressiveChunkSize: Number.POSITIVE_INFINITY, - }) + try { + const stream = await ReactDOMServer.renderToReadableStream(children, { + signal: request.signal, + nonce: router.options.ssr?.nonce, + progressiveChunkSize: Number.POSITIVE_INFINITY, + onError: (error) => { + if (error instanceof DOMException && error.name === 'AbortError') { + return + } - if (isbot(request.headers.get('User-Agent'))) { - await stream.allReady - } + console.error('Error in renderToReadableStream:', error) + }, + }) - const responseStream = transformReadableStreamWithRouter( - router, - stream as unknown as ReadableStream, - ) - return new Response(responseStream as any, { - status: router.state.statusCode, - headers: responseHeaders, - }) + if (isbot(request.headers.get('User-Agent'))) { + await stream.allReady + } + + const responseStream = transformReadableStreamWithRouter( + router, + stream as unknown as ReadableStream, + ) + return new Response(responseStream as any, { + status: router.state.statusCode, + headers: responseHeaders, + }) + } catch (e) { + if (e instanceof DOMException && e.name === 'AbortError') { + return new Response(null, { status: 499, headers: responseHeaders }) + } + console.error('Error in renderToReadableStream:', e) + return new Response(null, { status: 500, headers: responseHeaders }) + } } if (typeof ReactDOMServer.renderToPipeableStream === 'function') { From 7a080d6182ca93405aa09950bdeea0fb7e531785 Mon Sep 17 00:00:00 2001 From: checkerschaf Date: Wed, 18 Feb 2026 00:56:48 +0100 Subject: [PATCH 2/2] chore: minor renaming --- packages/react-router/src/ssr/renderRouterToStream.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-router/src/ssr/renderRouterToStream.tsx b/packages/react-router/src/ssr/renderRouterToStream.tsx index ce46aa56cd7..b6c1f3b4cfd 100644 --- a/packages/react-router/src/ssr/renderRouterToStream.tsx +++ b/packages/react-router/src/ssr/renderRouterToStream.tsx @@ -31,7 +31,7 @@ export const renderRouterToStream = async ({ return } - console.error('Error in renderToReadableStream:', error) + console.error('onError in renderToReadableStream:', error) }, })