Skip to content

Commit 38cdd9c

Browse files
committed
correctly determine whether a route uses server data - fixes #6269
1 parent 9da551e commit 38cdd9c

File tree

9 files changed

+68
-6
lines changed

9 files changed

+68
-6
lines changed

.changeset/modern-files-watch.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+
Correctly determine whether route uses server data

packages/kit/src/core/sync/write_client_manifest.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,13 @@ export function write_client_manifest(manifest_data, output) {
5353
while (layouts.at(-1) === '') layouts.pop();
5454
while (errors.at(-1) === '') errors.pop();
5555
56-
/** @type {import('types').RouteData | null} */
57-
let current_route = route;
58-
5956
/** @type {import('types').PageNode | null} */
6057
let current_node = route.leaf;
6158
6259
let uses_server_data = false;
63-
while (current_route && !uses_server_data) {
60+
while (current_node && !uses_server_data) {
6461
uses_server_data = !!current_node?.server;
65-
current_route = current_route.parent;
66-
current_node = current_route?.layout ?? null;
62+
current_node = current_node?.parent ?? null;
6763
}
6864
6965
// encode whether or not the route uses the server data
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { increment } from './state';
2+
3+
export const load = () => {
4+
return {
5+
a: increment()
6+
};
7+
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<slot />
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { increment } from './state';
2+
3+
export const load = () => {
4+
return {
5+
b: increment()
6+
};
7+
};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<script>
2+
import { invalidate } from '$app/navigation';
3+
4+
/** @type {import('./$types').PageData} */
5+
export let data;
6+
</script>
7+
8+
<h1>a: {data.a}, b: {data.b}</h1>
9+
10+
<button on:click={() => invalidate()}>invalidate</button>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { reset } from '../state.js';
2+
3+
/** @type {import('./$types').RequestHandler} */
4+
export function GET() {
5+
reset();
6+
return new Response('ok');
7+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
let count = 0;
2+
3+
export function increment() {
4+
return count++;
5+
}
6+
7+
export function reset() {
8+
count = 0;
9+
}

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,4 +640,24 @@ test.describe.serial('Invalidation', () => {
640640
await clicknav('[href="?a=3"]');
641641
expect(await page.textContent('h1')).toBe('3');
642642
});
643+
644+
test('server-only load functions are re-run following forced invalidation', async ({
645+
page,
646+
request
647+
}) => {
648+
await request.get('/load/invalidation/forced/reset');
649+
650+
await page.goto('/load/invalidation/forced');
651+
expect(await page.textContent('h1')).toBe('a: 0, b: 1');
652+
653+
await page.click('button');
654+
await page.waitForLoadState('networkidle');
655+
await page.waitForTimeout(0); // apparently necessary
656+
expect(await page.textContent('h1')).toBe('a: 2, b: 3');
657+
658+
await page.click('button');
659+
await page.waitForLoadState('networkidle');
660+
await page.waitForTimeout(0);
661+
expect(await page.textContent('h1')).toBe('a: 4, b: 5');
662+
});
643663
});

0 commit comments

Comments
 (0)