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';