diff --git a/.changeset/beige-bobcats-eat.md b/.changeset/beige-bobcats-eat.md deleted file mode 100644 index 95390c3c2e..0000000000 --- a/.changeset/beige-bobcats-eat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: unlink errored and otherwise finished batch diff --git a/.changeset/event-walk-composed-path.md b/.changeset/event-walk-composed-path.md deleted file mode 100644 index 8b24573930..0000000000 --- a/.changeset/event-walk-composed-path.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -perf: walk composedPath() directly in delegated event propagation diff --git a/.changeset/evil-stars-wave.md b/.changeset/evil-stars-wave.md deleted file mode 100644 index b199afe1dd..0000000000 --- a/.changeset/evil-stars-wave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: transfer effects when merging batches diff --git a/.changeset/fine-corners-lay.md b/.changeset/fine-corners-lay.md deleted file mode 100644 index badbc6f81f..0000000000 --- a/.changeset/fine-corners-lay.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: allow `$derived(await ...)` in disconnected effect roots diff --git a/.changeset/gentle-styles-hydrate.md b/.changeset/gentle-styles-hydrate.md deleted file mode 100644 index f63d4e274c..0000000000 --- a/.changeset/gentle-styles-hydrate.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: remove temporary raw-text hydration markers diff --git a/.changeset/iife-await-const-blocker.md b/.changeset/iife-await-const-blocker.md deleted file mode 100644 index 2b5c4f0323..0000000000 --- a/.changeset/iife-await-const-blocker.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: propagate async `@const` blockers through closure references so template expressions like `{(() => host)()}` correctly wait for the awaited value diff --git a/.changeset/khaki-states-train.md b/.changeset/khaki-states-train.md deleted file mode 100644 index 5d4054fb15..0000000000 --- a/.changeset/khaki-states-train.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: properly unlink batches diff --git a/.changeset/neat-groups-grin.md b/.changeset/neat-groups-grin.md deleted file mode 100644 index 1d615216f0..0000000000 --- a/.changeset/neat-groups-grin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: settle discarded batch diff --git a/.changeset/quiet-rivers-melt.md b/.changeset/quiet-rivers-melt.md deleted file mode 100644 index 7ce1b9b2d3..0000000000 --- a/.changeset/quiet-rivers-melt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: declare `let:` directives before `{@const}` declarations on slotted elements diff --git a/.changeset/sad-shoes-help.md b/.changeset/sad-shoes-help.md deleted file mode 100644 index 76db87ba95..0000000000 --- a/.changeset/sad-shoes-help.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: resume outro-ed branches if they were kept around diff --git a/.changeset/swift-terms-exist.md b/.changeset/swift-terms-exist.md deleted file mode 100644 index cc69f1b3b1..0000000000 --- a/.changeset/swift-terms-exist.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: avoid waterfall-warning when async resolves to same value diff --git a/.changeset/tasty-tires-wait.md b/.changeset/tasty-tires-wait.md deleted file mode 100644 index 0f3fd2d671..0000000000 --- a/.changeset/tasty-tires-wait.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: correctly coordinate component-level effects inside async blocks diff --git a/.changeset/tired-socks-brake.md b/.changeset/tired-socks-brake.md deleted file mode 100644 index 1d302ffa60..0000000000 --- a/.changeset/tired-socks-brake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: make unnecessary commit work less likely diff --git a/.changeset/true-dancers-tell.md b/.changeset/true-dancers-tell.md deleted file mode 100644 index bd50b2ddc9..0000000000 --- a/.changeset/true-dancers-tell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"svelte": patch ---- - -chore: add tag name to `a11y_click_events_have_key_events` warning diff --git a/.changeset/true-pigs-go.md b/.changeset/true-pigs-go.md deleted file mode 100644 index b4900b38fa..0000000000 --- a/.changeset/true-pigs-go.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: catch rejected promises while merging/committing diff --git a/documentation/docs/98-reference/.generated/client-errors.md b/documentation/docs/98-reference/.generated/client-errors.md index 182d8659a9..ca536ec5c6 100644 --- a/documentation/docs/98-reference/.generated/client-errors.md +++ b/documentation/docs/98-reference/.generated/client-errors.md @@ -88,6 +88,10 @@ Effect cannot be created inside a `$derived` value that was not itself created i `%rune%` can only be used inside an effect (e.g. during component initialisation) ``` +Effects can only be created while a parent effect is running. This means that they cannot, for example, be created inside an event handler or after an `await` expression (unless the `await` occurs directly inside a component's ` diff --git a/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/_config.js b/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/_config.js new file mode 100644 index 0000000000..b76ea85bfd --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/_config.js @@ -0,0 +1,12 @@ +import { tick } from 'svelte'; +import { test } from '../../test'; + +export default test({ + async test({ assert, logs }) { + await tick(); + + assert.deepEqual(logs, [ + `effect_orphan\n\`$effect\` can only be used inside an effect (e.g. during component initialisation)\nhttps://svelte.dev/e/effect_orphan` + ]); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/main.svelte new file mode 100644 index 0000000000..086a048025 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/main.svelte @@ -0,0 +1,14 @@ + diff --git a/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/_config.js b/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/_config.js deleted file mode 100644 index ad543e91ae..0000000000 --- a/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/_config.js +++ /dev/null @@ -1,14 +0,0 @@ -import { tick } from 'svelte'; -import { test } from '../../test'; - -export default test({ - async test({ assert, logs }) { - await new Promise((resolve) => setTimeout(resolve, 10)); - assert.deepEqual(logs, [1, 1]); - const [button] = document.querySelectorAll('button'); - - button.click(); - await tick(); - assert.deepEqual(logs, [1, 1, 2]); - } -}); diff --git a/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/main.svelte deleted file mode 100644 index a39c75fb94..0000000000 --- a/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/main.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - - diff --git a/playgrounds/sandbox/run.js b/playgrounds/sandbox/run.js index f79243d4e7..3b0602f716 100644 --- a/playgrounds/sandbox/run.js +++ b/playgrounds/sandbox/run.js @@ -59,19 +59,21 @@ for (const generate of /** @type {const} */ (['client', 'server'])) { mkdirp(path.dirname(output_js)); if (generate === 'client') { - if (AST) { + if (AST || PRINT) { const ast = parse(source, { modern: true }); - write( - `${cwd}/output/ast/${file}.json`, - JSON.stringify( - ast, - (key, value) => (typeof value === 'bigint' ? ['BigInt', value.toString()] : value), - '\t' - ) - ); + if (AST) { + write( + `${cwd}/output/ast/${file}.json`, + JSON.stringify( + ast, + (key, value) => (typeof value === 'bigint' ? ['BigInt', value.toString()] : value), + '\t' + ) + ); + } if (PRINT) { const printed = print(ast);