From 47a073e0dbe2bfd76bfec55fb1500ddd5e8ffdf7 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 10 Jul 2024 00:28:13 -0700 Subject: [PATCH 1/2] fix: destroy effect on error (#12376) fixes #12360 --------- Co-authored-by: Simon Holthausen --- .changeset/small-chefs-sing.md | 5 +++++ .../src/internal/client/reactivity/effects.js | 3 +++ packages/svelte/tests/runtime-legacy/shared.ts | 5 ++++- .../_config.js | 13 +++++++++++++ .../main.svelte | 5 +++++ .../event-global-mount-error-cleanup/Inner.svelte | 3 +++ .../event-global-mount-error-cleanup/Outer.svelte | 9 +++++++++ .../event-global-mount-error-cleanup/_config.js | 11 +++++++++++ .../event-global-mount-error-cleanup/main.svelte | 14 ++++++++++++++ 9 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 .changeset/small-chefs-sing.md create mode 100644 packages/svelte/tests/runtime-runes/samples/event-global-hydration-error-cleanup/_config.js create mode 100644 packages/svelte/tests/runtime-runes/samples/event-global-hydration-error-cleanup/main.svelte create mode 100644 packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/Inner.svelte create mode 100644 packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/Outer.svelte create mode 100644 packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/_config.js create mode 100644 packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/main.svelte diff --git a/.changeset/small-chefs-sing.md b/.changeset/small-chefs-sing.md new file mode 100644 index 000000000000..ea63f4686e14 --- /dev/null +++ b/.changeset/small-chefs-sing.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: destroy effects that error on creation diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js index c0cb2191b9aa..a642d4fbacc8 100644 --- a/packages/svelte/src/internal/client/reactivity/effects.js +++ b/packages/svelte/src/internal/client/reactivity/effects.js @@ -109,6 +109,9 @@ function create_effect(type, fn, sync, push = true) { set_is_flushing_effect(true); update_effect(effect); effect.f |= EFFECT_RAN; + } catch (e) { + destroy_effect(effect); + throw e; } finally { set_is_flushing_effect(previously_flushing_effect); } diff --git a/packages/svelte/tests/runtime-legacy/shared.ts b/packages/svelte/tests/runtime-legacy/shared.ts index 62a85c182f6c..6d98e06c16b9 100644 --- a/packages/svelte/tests/runtime-legacy/shared.ts +++ b/packages/svelte/tests/runtime-legacy/shared.ts @@ -104,7 +104,10 @@ export function runtime_suite(runes: boolean) { if (config.skip_mode?.includes('hydrate')) return true; } - if (variant === 'dom' && config.skip_mode?.includes('client')) { + if ( + variant === 'dom' && + (config.skip_mode?.includes('client') || (config.mode && !config.mode.includes('client'))) + ) { return 'no-test'; } diff --git a/packages/svelte/tests/runtime-runes/samples/event-global-hydration-error-cleanup/_config.js b/packages/svelte/tests/runtime-runes/samples/event-global-hydration-error-cleanup/_config.js new file mode 100644 index 000000000000..62d0aae0b8e5 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/event-global-hydration-error-cleanup/_config.js @@ -0,0 +1,13 @@ +import { flushSync } from 'svelte'; +import { test } from '../../test'; + +export default test({ + html: '

invalid

', + mode: ['hydrate'], + recover: true, + test({ assert, target, logs }) { + target.click(); + flushSync(); + assert.deepEqual(logs, ['body', 'document', 'window']); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/event-global-hydration-error-cleanup/main.svelte b/packages/svelte/tests/runtime-runes/samples/event-global-hydration-error-cleanup/main.svelte new file mode 100644 index 000000000000..3109b83cd6a4 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/event-global-hydration-error-cleanup/main.svelte @@ -0,0 +1,5 @@ + console.log('window')} /> + console.log('document')} /> + console.log('body')} /> + +

{@html '

invalid

'}

diff --git a/packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/Inner.svelte b/packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/Inner.svelte new file mode 100644 index 000000000000..0fb7efdad760 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/Inner.svelte @@ -0,0 +1,3 @@ + diff --git a/packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/Outer.svelte b/packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/Outer.svelte new file mode 100644 index 000000000000..86848025f11b --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/Outer.svelte @@ -0,0 +1,9 @@ + + + console.log('window')} /> + console.log('document')} /> + console.log('body')} /> + + diff --git a/packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/_config.js b/packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/_config.js new file mode 100644 index 000000000000..fbf92711c52a --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/_config.js @@ -0,0 +1,11 @@ +import { flushSync } from 'svelte'; +import { test } from '../../test'; + +export default test({ + mode: ['client'], + test({ assert, target, logs }) { + target.click(); + flushSync(); + assert.deepEqual(logs, []); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/main.svelte b/packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/main.svelte new file mode 100644 index 000000000000..f1944089b918 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/main.svelte @@ -0,0 +1,14 @@ + + +
From db0ca664f1234910e9fdac9df13708a361240e45 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 10 Jul 2024 07:29:08 +0000 Subject: [PATCH 2/2] Version Packages (next) --- .changeset/pre.json | 4 ++++ packages/svelte/CHANGELOG.md | 12 ++++++++++++ packages/svelte/package.json | 2 +- packages/svelte/src/version.js | 2 +- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index e52b69d873e2..22e14b1df4d2 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -339,6 +339,7 @@ "many-rockets-give", "many-trees-fix", "mean-jokes-exist", + "mean-numbers-cry", "metal-clouds-raise", "metal-lobsters-burn", "metal-pans-trade", @@ -526,6 +527,7 @@ "slow-plums-chew", "slow-wombats-reply", "small-apples-eat", + "small-chefs-sing", "small-owls-remain", "small-papayas-laugh", "small-sheep-type", @@ -550,6 +552,7 @@ "sour-geese-listen", "sour-jeans-collect", "sour-rules-march", + "sour-tomatoes-knock", "sour-weeks-fix", "spicy-jeans-deliver", "spicy-peas-vanish", @@ -691,6 +694,7 @@ "witty-hornets-think", "witty-phones-retire", "witty-readers-provide", + "witty-sloths-impress", "witty-steaks-dream", "witty-tomatoes-care", "witty-years-crash", diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index d7181fded973..00db2204b4ec 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -1,5 +1,17 @@ # svelte +## 5.0.0-next.180 + +### Patch Changes + +- fix: handle nested `:global(...)` selectors ([#12365](https://github.com/sveltejs/svelte/pull/12365)) + +- fix: destroy effects that error on creation ([#12376](https://github.com/sveltejs/svelte/pull/12376)) + +- breaking: rename `legacy.componentApi` to `compatibility.componentApi` ([#12370](https://github.com/sveltejs/svelte/pull/12370)) + +- fix: correctly validate `` with `bind:this` ([#12368](https://github.com/sveltejs/svelte/pull/12368)) + ## 5.0.0-next.179 ### Patch Changes diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 469f87ed482b..cb775f4c6ec9 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -2,7 +2,7 @@ "name": "svelte", "description": "Cybernetically enhanced web apps", "license": "MIT", - "version": "5.0.0-next.179", + "version": "5.0.0-next.180", "type": "module", "types": "./types/index.d.ts", "engines": { diff --git a/packages/svelte/src/version.js b/packages/svelte/src/version.js index 77657bc5c595..019d564909ca 100644 --- a/packages/svelte/src/version.js +++ b/packages/svelte/src/version.js @@ -6,5 +6,5 @@ * https://svelte.dev/docs/svelte-compiler#svelte-version * @type {string} */ -export const VERSION = '5.0.0-next.179'; +export const VERSION = '5.0.0-next.180'; export const PUBLIC_VERSION = '5';