From 0b18dd09443832134c8ee9e715210d789cfdbeb6 Mon Sep 17 00:00:00 2001 From: Patrick Date: Wed, 10 Sep 2025 19:34:08 +0200 Subject: [PATCH 1/6] test --- .../src/routes/load/serialization-empty-node/+error.svelte | 0 .../routes/load/serialization-empty-node/+page.server.js | 4 ++++ .../src/routes/load/serialization-empty-node/+page.svelte | 6 ++++++ packages/kit/test/apps/basics/test/test.js | 5 +++++ 4 files changed, 15 insertions(+) create mode 100644 packages/kit/test/apps/basics/src/routes/load/serialization-empty-node/+error.svelte create mode 100644 packages/kit/test/apps/basics/src/routes/load/serialization-empty-node/+page.server.js create mode 100644 packages/kit/test/apps/basics/src/routes/load/serialization-empty-node/+page.svelte diff --git a/packages/kit/test/apps/basics/src/routes/load/serialization-empty-node/+error.svelte b/packages/kit/test/apps/basics/src/routes/load/serialization-empty-node/+error.svelte new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/kit/test/apps/basics/src/routes/load/serialization-empty-node/+page.server.js b/packages/kit/test/apps/basics/src/routes/load/serialization-empty-node/+page.server.js new file mode 100644 index 000000000000..fc36614433de --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/load/serialization-empty-node/+page.server.js @@ -0,0 +1,4 @@ +/** @type {import('./$types').PageServerLoad} */ +export function load() { + return { answer: 42 }; +} diff --git a/packages/kit/test/apps/basics/src/routes/load/serialization-empty-node/+page.svelte b/packages/kit/test/apps/basics/src/routes/load/serialization-empty-node/+page.svelte new file mode 100644 index 000000000000..7c7268b87da6 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/load/serialization-empty-node/+page.svelte @@ -0,0 +1,6 @@ + + +

{data.answer}

diff --git a/packages/kit/test/apps/basics/test/test.js b/packages/kit/test/apps/basics/test/test.js index 36c6ed0ad9d8..ce6b7539cabc 100644 --- a/packages/kit/test/apps/basics/test/test.js +++ b/packages/kit/test/apps/basics/test/test.js @@ -246,6 +246,11 @@ test.describe('Load', () => { ); }); + test.only('Server data serialization removes empty nodes', async ({ page }) => { + await page.goto('/load/serialization-empty-node'); + expect(await page.textContent('h1')).toBe('42'); + }); + test('POST fetches are serialized', async ({ page, javaScriptEnabled }) => { /** @type {string[]} */ const requests = []; From fb97e9b010781170b8c59f7f9e7cba504407c7ec Mon Sep 17 00:00:00 2001 From: Patrick Date: Wed, 10 Sep 2025 19:34:37 +0200 Subject: [PATCH 2/6] fix --- packages/kit/src/runtime/server/page/data_serializer.js | 3 ++- packages/kit/src/runtime/server/page/index.js | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/kit/src/runtime/server/page/data_serializer.js b/packages/kit/src/runtime/server/page/data_serializer.js index 2f0197ae648b..36e064ba0d35 100644 --- a/packages/kit/src/runtime/server/page/data_serializer.js +++ b/packages/kit/src/runtime/server/page/data_serializer.js @@ -1,4 +1,5 @@ import * as devalue from 'devalue'; +import { compact } from '../../../utils/array.js'; import { create_async_iterator } from '../../../utils/streaming.js'; import { clarify_devalue_error, @@ -96,7 +97,7 @@ export function server_data_serializer(event, event_state, options) { const close = `\n`; return { - data: `[${strings.join(',')}]`, + data: `[${compact(strings).join(',')}]`, chunks: promise_id > 1 ? iterator.iterate((str) => open + str + close) : null }; } diff --git a/packages/kit/src/runtime/server/page/index.js b/packages/kit/src/runtime/server/page/index.js index 9e05ab3a4334..19ab92d826b9 100644 --- a/packages/kit/src/runtime/server/page/index.js +++ b/packages/kit/src/runtime/server/page/index.js @@ -195,8 +195,10 @@ export async function render_page( } }); - data_serializer.add_node(i, server_data); - data_serializer_json?.add_node(i, server_data); + if (node) { + data_serializer.add_node(i, server_data); + data_serializer_json?.add_node(i, server_data); + } return server_data; } catch (e) { @@ -348,7 +350,8 @@ export async function render_page( branch: ssr === false ? [] : compact(branch), action_result, fetched, - data_serializer + data_serializer: + ssr === false ? server_data_serializer(event, event_state, options) : data_serializer }); } catch (e) { // if we end up here, it means the data loaded successfully From 534af46221d6be3a647073e399b3ab5c9be59152 Mon Sep 17 00:00:00 2001 From: Patrick Date: Wed, 10 Sep 2025 19:37:52 +0200 Subject: [PATCH 3/6] remove only --- packages/kit/test/apps/basics/test/test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/test/apps/basics/test/test.js b/packages/kit/test/apps/basics/test/test.js index ce6b7539cabc..31b932107806 100644 --- a/packages/kit/test/apps/basics/test/test.js +++ b/packages/kit/test/apps/basics/test/test.js @@ -246,7 +246,7 @@ test.describe('Load', () => { ); }); - test.only('Server data serialization removes empty nodes', async ({ page }) => { + test('Server data serialization removes empty nodes', async ({ page }) => { await page.goto('/load/serialization-empty-node'); expect(await page.textContent('h1')).toBe('42'); }); From 998f88dbeb559c52b4c7f125784bd1d56e261e75 Mon Sep 17 00:00:00 2001 From: Patrick Date: Wed, 10 Sep 2025 19:43:59 +0200 Subject: [PATCH 4/6] __data.json needs all nodes --- packages/kit/src/runtime/server/page/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/kit/src/runtime/server/page/index.js b/packages/kit/src/runtime/server/page/index.js index 19ab92d826b9..a6ac6c5d9267 100644 --- a/packages/kit/src/runtime/server/page/index.js +++ b/packages/kit/src/runtime/server/page/index.js @@ -197,8 +197,9 @@ export async function render_page( if (node) { data_serializer.add_node(i, server_data); - data_serializer_json?.add_node(i, server_data); } + + data_serializer_json?.add_node(i, server_data); return server_data; } catch (e) { From 49553e30c19cac76d9f4a639377ee544968e3245 Mon Sep 17 00:00:00 2001 From: Patrick Date: Wed, 10 Sep 2025 19:47:02 +0200 Subject: [PATCH 5/6] changeset --- .changeset/lazy-boats-stay.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/lazy-boats-stay.md diff --git a/.changeset/lazy-boats-stay.md b/.changeset/lazy-boats-stay.md new file mode 100644 index 000000000000..c36a1154035a --- /dev/null +++ b/.changeset/lazy-boats-stay.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: remove empty nodes from serialized server load data From f1b59127827f4673ccf2613f8dd1787f9ce2cd59 Mon Sep 17 00:00:00 2001 From: Patrick Date: Wed, 10 Sep 2025 19:53:01 +0200 Subject: [PATCH 6/6] lint --- packages/kit/src/runtime/server/page/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/src/runtime/server/page/index.js b/packages/kit/src/runtime/server/page/index.js index a6ac6c5d9267..c0efedefd9a9 100644 --- a/packages/kit/src/runtime/server/page/index.js +++ b/packages/kit/src/runtime/server/page/index.js @@ -198,7 +198,7 @@ export async function render_page( if (node) { data_serializer.add_node(i, server_data); } - + data_serializer_json?.add_node(i, server_data); return server_data;