Skip to content

Commit debc018

Browse files
authored
fix: remove empty nodes from serialized server load data (#14404)
* test * fix * remove only * __data.json needs all nodes * changeset * lint
1 parent 54e10cf commit debc018

File tree

7 files changed

+28
-3
lines changed

7 files changed

+28
-3
lines changed

.changeset/lazy-boats-stay.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
fix: remove empty nodes from serialized server load data

packages/kit/src/runtime/server/page/data_serializer.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import * as devalue from 'devalue';
2+
import { compact } from '../../../utils/array.js';
23
import { create_async_iterator } from '../../../utils/streaming.js';
34
import {
45
clarify_devalue_error,
@@ -96,7 +97,7 @@ export function server_data_serializer(event, event_state, options) {
9697
const close = `</script>\n`;
9798

9899
return {
99-
data: `[${strings.join(',')}]`,
100+
data: `[${compact(strings).join(',')}]`,
100101
chunks: promise_id > 1 ? iterator.iterate((str) => open + str + close) : null
101102
};
102103
}

packages/kit/src/runtime/server/page/index.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,10 @@ export async function render_page(
195195
}
196196
});
197197

198-
data_serializer.add_node(i, server_data);
198+
if (node) {
199+
data_serializer.add_node(i, server_data);
200+
}
201+
199202
data_serializer_json?.add_node(i, server_data);
200203

201204
return server_data;
@@ -348,7 +351,8 @@ export async function render_page(
348351
branch: ssr === false ? [] : compact(branch),
349352
action_result,
350353
fetched,
351-
data_serializer
354+
data_serializer:
355+
ssr === false ? server_data_serializer(event, event_state, options) : data_serializer
352356
});
353357
} catch (e) {
354358
// if we end up here, it means the data loaded successfully

packages/kit/test/apps/basics/src/routes/load/serialization-empty-node/+error.svelte

Whitespace-only changes.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/** @type {import('./$types').PageServerLoad} */
2+
export function load() {
3+
return { answer: 42 };
4+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<script>
2+
/** @type {import('./$types').PageData} */
3+
export let data;
4+
</script>
5+
6+
<h1>{data.answer}</h1>

packages/kit/test/apps/basics/test/test.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,11 @@ test.describe('Load', () => {
246246
);
247247
});
248248

249+
test('Server data serialization removes empty nodes', async ({ page }) => {
250+
await page.goto('/load/serialization-empty-node');
251+
expect(await page.textContent('h1')).toBe('42');
252+
});
253+
249254
test('POST fetches are serialized', async ({ page, javaScriptEnabled }) => {
250255
/** @type {string[]} */
251256
const requests = [];

0 commit comments

Comments
 (0)