Skip to content

Commit 0554fec

Browse files
authored
fix: use runes in when detecting Svelte 5 (#11028)
- fixes #11027 (not the underlying issue, but the problem within SvelteKit) - fixes #11022
1 parent aeaf164 commit 0554fec

File tree

2 files changed

+47
-13
lines changed

2 files changed

+47
-13
lines changed

.changeset/beige-ties-allow.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: use runes in generated root when detecting Svelte 5

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

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,28 +40,57 @@ export function write_root(manifest_data, output) {
4040
dedent`
4141
<!-- This file is generated by @sveltejs/kit — do not edit it! -->
4242
<script>
43-
import { setContext, afterUpdate, onMount, tick } from 'svelte';
43+
import { setContext, ${isSvelte5Plus() ? '' : 'afterUpdate, '}onMount, tick } from 'svelte';
4444
import { browser } from '$app/environment';
4545
4646
// stores
47-
export let stores;
48-
export let page;
49-
50-
export let constructors;
51-
export let components = [];
52-
export let form;
53-
${levels.map((l) => `export let data_${l} = null;`).join('\n')}
47+
${
48+
isSvelte5Plus()
49+
? dedent`
50+
let { stores, page, constructors, components = [], form, ${levels
51+
.map((l) => `data_${l} = null`)
52+
.join(', ')} } = $props();
53+
`
54+
: dedent`
55+
export let stores;
56+
export let page;
57+
58+
export let constructors;
59+
export let components = [];
60+
export let form;
61+
${levels.map((l) => `export let data_${l} = null;`).join('\n')}
62+
`
63+
}
5464
5565
if (!browser) {
5666
setContext('__svelte__', stores);
5767
}
5868
59-
$: stores.page.set(page);
60-
afterUpdate(stores.page.notify);
69+
${
70+
isSvelte5Plus()
71+
? dedent`
72+
if (browser) {
73+
$effect.pre(() => stores.page.set(page));
74+
} else {
75+
stores.page.set(page);
76+
}
77+
`
78+
: '$: stores.page.set(page);'
79+
}
80+
${
81+
isSvelte5Plus()
82+
? dedent`
83+
$effect(() => {
84+
stores;page;constructors;components;form;${levels.map((l) => `data_${l}`).join(';')};
85+
stores.page.notify();
86+
});
87+
`
88+
: 'afterUpdate(stores.page.notify);'
89+
}
6190
62-
let mounted = false;
63-
let navigated = false;
64-
let title = null;
91+
let mounted = ${isSvelte5Plus() ? '$state(false)' : 'false'};
92+
let navigated = ${isSvelte5Plus() ? '$state(false)' : 'false'};
93+
let title = ${isSvelte5Plus() ? '$state(null)' : 'null'};
6594
6695
onMount(() => {
6796
const unsubscribe = stores.page.subscribe(() => {

0 commit comments

Comments
 (0)