From ff10c4a07aff3e47e8f7c8bdc786dabd702aa10d Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Tue, 2 Sep 2025 16:39:34 +0200 Subject: [PATCH] fix: treat handle hook redirect as part of remote function call as json redirect fixes #14212 --- .changeset/shaggy-peas-dig.md | 5 +++++ packages/kit/src/runtime/server/remote.js | 12 +++++++----- packages/kit/src/runtime/server/respond.js | 11 ++++++----- 3 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 .changeset/shaggy-peas-dig.md diff --git a/.changeset/shaggy-peas-dig.md b/.changeset/shaggy-peas-dig.md new file mode 100644 index 000000000000..ca30911fe156 --- /dev/null +++ b/.changeset/shaggy-peas-dig.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: treat handle hook redirect as part of remote function call as json redirect diff --git a/packages/kit/src/runtime/server/remote.js b/packages/kit/src/runtime/server/remote.js index a09031d17a61..59804a8211d1 100644 --- a/packages/kit/src/runtime/server/remote.js +++ b/packages/kit/src/runtime/server/remote.js @@ -124,11 +124,13 @@ async function handle_remote_call_internal(event, state, options, manifest, id) ); } catch (error) { if (error instanceof Redirect) { - return json({ - type: 'redirect', - location: error.location, - refreshes: await serialize_refreshes(form_client_refreshes ?? []) - }); + return json( + /** @type {RemoteFunctionResponse} */ ({ + type: 'redirect', + location: error.location, + refreshes: await serialize_refreshes(form_client_refreshes ?? []) + }) + ); } return json( diff --git a/packages/kit/src/runtime/server/respond.js b/packages/kit/src/runtime/server/respond.js index 2e97adaaf441..e162a0f894cc 100644 --- a/packages/kit/src/runtime/server/respond.js +++ b/packages/kit/src/runtime/server/respond.js @@ -505,11 +505,12 @@ export async function internal_respond(request, options, manifest, state) { return response; } catch (e) { if (e instanceof Redirect) { - const response = is_data_request - ? redirect_json_response(e) - : route?.page && is_action_json_request(event) - ? action_json_redirect(e) - : redirect_response(e.status, e.location); + const response = + is_data_request || remote_id + ? redirect_json_response(e) + : route?.page && is_action_json_request(event) + ? action_json_redirect(e) + : redirect_response(e.status, e.location); add_cookies_to_headers(response.headers, new_cookies.values()); return response; }