From 2c061e8cc237c66bc4da4469aebc86463e2ea0d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manolo=20Cant=C3=B3n?= <59761854+m-canton@users.noreply.github.com> Date: Sat, 25 Jul 2026 05:33:19 +0200 Subject: [PATCH 1/2] Calls Action.onSettled with falsy response values It calls Action.onSettled when response is not a redirect. --- src/data/action.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/data/action.ts b/src/data/action.ts index bf5eb5bd..7ddcff5a 100644 --- a/src/data/action.ts +++ b/src/data/action.ts @@ -427,12 +427,14 @@ function applyResponseMetadata( metadata: Response | undefined, navigate: Navigator, flightData?: Record -) { +): Promise { + let redirected = false; let keys: string[] | undefined; if (metadata) { if (metadata.headers.has("X-Revalidate")) keys = metadata.headers.get("X-Revalidate")!.split(","); if (metadata.headers.has("Location")) { + redirected = true; const locationUrl = metadata.headers.get("Location") || "/"; if (locationUrl.startsWith("http")) { window.location.href = locationUrl; @@ -447,6 +449,8 @@ function applyResponseMetadata( flightData && Object.keys(flightData).forEach(k => query.set(k, flightData[k])); // trigger revalidation revalidate(keys, false); + + return redirected; } async function handleResponse( @@ -482,7 +486,9 @@ async function handleResponse( // The transport consumer applies metadata before returning a server // function's unwrapped value. Do not treat that value as a second plain // action response and invalidate the freshly seeded query cache again. - if (!metadataHandled || metadata || flightData) - applyResponseMetadata(metadata, navigate, flightData); - return data != null ? { data } : undefined; + if (!metadataHandled || metadata || flightData) { + if (applyResponseMetadata(metadata, navigate, flightData)) + return undefined; + } + return { data }; } From 63dae9a6b9606a19d95cfcbeba86129fc28aef43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manolo=20Cant=C3=B3n?= <59761854+m-canton@users.noreply.github.com> Date: Sat, 25 Jul 2026 05:40:47 +0200 Subject: [PATCH 2/2] Fixes return type of applyResponseMetadata function --- src/data/action.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/action.ts b/src/data/action.ts index 7ddcff5a..1fe1fd64 100644 --- a/src/data/action.ts +++ b/src/data/action.ts @@ -412,7 +412,7 @@ let flightApplications = 0; export function setupFlightDataConsumer(router: RouterContext) { return subscribeFlightData>((data, { response }) => { flightApplications++; - return applyResponseMetadata(response, router.navigatorFactory(), data); + applyResponseMetadata(response, router.navigatorFactory(), data); }); } @@ -427,7 +427,7 @@ function applyResponseMetadata( metadata: Response | undefined, navigate: Navigator, flightData?: Record -): Promise { +): boolean { let redirected = false; let keys: string[] | undefined; if (metadata) {