From 0bddfda5a42bdf599de6dd7170805d11c7cfe5ce Mon Sep 17 00:00:00 2001 From: "shoaib.akhtar" Date: Wed, 9 Jul 2025 11:06:46 +0530 Subject: [PATCH 1/2] fix: hydration for 204 response --- packages/kit/src/runtime/server/constants.js | 1 + packages/kit/src/runtime/server/page/load_data.js | 11 +++++++++-- packages/kit/src/runtime/server/page/types.d.ts | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 packages/kit/src/runtime/server/constants.js diff --git a/packages/kit/src/runtime/server/constants.js b/packages/kit/src/runtime/server/constants.js new file mode 100644 index 000000000000..5744fe1cd302 --- /dev/null +++ b/packages/kit/src/runtime/server/constants.js @@ -0,0 +1 @@ +export const NULL_BODY_STATUS = [204]; \ No newline at end of file diff --git a/packages/kit/src/runtime/server/page/load_data.js b/packages/kit/src/runtime/server/page/load_data.js index 74bd7444af4f..12f6526d5c61 100644 --- a/packages/kit/src/runtime/server/page/load_data.js +++ b/packages/kit/src/runtime/server/page/load_data.js @@ -3,6 +3,7 @@ import { disable_search, make_trackable } from '../../../utils/url.js'; import { validate_depends } from '../../shared.js'; import { b64_encode } from '../../utils.js'; import { with_event } from '../../app/server/event.js'; +import { NULL_BODY_STATUS } from '../constants.js'; /** * Calls the user's server `load` function. @@ -278,7 +279,7 @@ export function create_universal_fetch(event, state, fetched, csr, resolve_opts) const proxy = new Proxy(response, { get(response, key, _receiver) { /** - * @param {string} body + * @param {string | undefined} body * @param {boolean} is_b64 */ async function push_fetched(body, is_b64) { @@ -325,6 +326,11 @@ export function create_universal_fetch(event, state, fetched, csr, resolve_opts) async function text() { const body = await response.text(); + if (NULL_BODY_STATUS.includes(response.status) && typeof body === 'string' && body === '') { + await push_fetched(undefined, false); + return undefined; + } + if (!body || typeof body === 'string') { await push_fetched(body, false); } @@ -342,7 +348,8 @@ export function create_universal_fetch(event, state, fetched, csr, resolve_opts) if (key === 'json') { return async () => { - return JSON.parse(await text()); + const body = await text(); + return body ? JSON.parse(body) : undefined; }; } diff --git a/packages/kit/src/runtime/server/page/types.d.ts b/packages/kit/src/runtime/server/page/types.d.ts index 7e501b1ab418..300e05fefbe9 100644 --- a/packages/kit/src/runtime/server/page/types.d.ts +++ b/packages/kit/src/runtime/server/page/types.d.ts @@ -6,7 +6,7 @@ export interface Fetched { method: string; request_body?: string | ArrayBufferView | null; request_headers?: HeadersInit | undefined; - response_body: string; + response_body: string | undefined; response: Response; is_b64?: boolean; } From 192aea8947989df9a41b245cf4c960763b8fe27a Mon Sep 17 00:00:00 2001 From: "shoaib.akhtar" Date: Wed, 9 Jul 2025 11:17:55 +0530 Subject: [PATCH 2/2] Added null status body http codes --- packages/kit/src/runtime/server/constants.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/src/runtime/server/constants.js b/packages/kit/src/runtime/server/constants.js index 5744fe1cd302..fc1f7a06516f 100644 --- a/packages/kit/src/runtime/server/constants.js +++ b/packages/kit/src/runtime/server/constants.js @@ -1 +1 @@ -export const NULL_BODY_STATUS = [204]; \ No newline at end of file +export const NULL_BODY_STATUS = [101, 103, 204, 205, 304]; \ No newline at end of file