diff --git a/packages/kit/src/runtime/server/constants.js b/packages/kit/src/runtime/server/constants.js new file mode 100644 index 000000000000..fc1f7a06516f --- /dev/null +++ b/packages/kit/src/runtime/server/constants.js @@ -0,0 +1 @@ +export const NULL_BODY_STATUS = [101, 103, 204, 205, 304]; \ 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; }