diff --git a/.changeset/four-beers-like.md b/.changeset/four-beers-like.md
deleted file mode 100644
index 967d76af66..0000000000
--- a/.changeset/four-beers-like.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': patch
----
-
-fix: prevent hydration error on async `{@html ...}`
diff --git a/documentation/docs/98-reference/.generated/compile-errors.md b/documentation/docs/98-reference/.generated/compile-errors.md
index 1c874436de..01b2dd1494 100644
--- a/documentation/docs/98-reference/.generated/compile-errors.md
+++ b/documentation/docs/98-reference/.generated/compile-errors.md
@@ -396,7 +396,7 @@ Invalid selector
### declaration_duplicate_module_import
```
-Cannot declare a variable with the same name as an import inside `
+
+
+ {data}
+
diff --git a/packages/svelte/tests/runtime-runes/samples/async-hydration-binding/Binding.svelte b/packages/svelte/tests/runtime-runes/samples/async-hydration-binding/Binding.svelte
new file mode 100644
index 0000000000..3deba21acc
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/async-hydration-binding/Binding.svelte
@@ -0,0 +1,7 @@
+
+
+
diff --git a/packages/svelte/tests/runtime-runes/samples/async-hydration-binding/Bound.svelte b/packages/svelte/tests/runtime-runes/samples/async-hydration-binding/Bound.svelte
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/packages/svelte/tests/runtime-runes/samples/async-hydration-binding/_config.js b/packages/svelte/tests/runtime-runes/samples/async-hydration-binding/_config.js
new file mode 100644
index 0000000000..d4d36b007f
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/async-hydration-binding/_config.js
@@ -0,0 +1,10 @@
+import { test } from '../../test';
+
+// Tests that renderer.subsume (which is used when bindings are present) works correctly
+export default test({
+ mode: ['hydrate'],
+ html: '
test
',
+ async test({ assert, warnings }) {
+ assert.deepEqual(warnings, []);
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/async-hydration-binding/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-hydration-binding/main.svelte
new file mode 100644
index 0000000000..a38806be7c
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/async-hydration-binding/main.svelte
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-1/_config.js b/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-1/_config.js
index 0af275009c..dee8af2446 100644
--- a/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-1/_config.js
+++ b/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-1/_config.js
@@ -2,7 +2,6 @@ import { tick } from 'svelte';
import { test } from '../../test';
export default test({
- skip: true, // TODO works on https://github.com/sveltejs/svelte/pull/17971
async test({ assert, target, logs }) {
const [x, y, resolve] = target.querySelectorAll('button');
@@ -17,12 +16,20 @@ export default test({
- ` // if this shows world world - that would also be ok
+ world
+ ` // if this does not show world - that would also be ok
);
resolve.click();
await tick();
- assert.deepEqual(logs, ['universe', 'universe', '$effect: universe', '$effect: universe']);
+ assert.deepEqual(logs, [
+ 'universe',
+ 'world',
+ '$effect: world',
+ '$effect: universe',
+ '$effect: universe'
+ ]);
+ // assert.deepEqual(logs, ['universe', 'universe', '$effect: universe', '$effect: universe']); // this would also be ok
assert.htmlEqual(
target.innerHTML,
`
diff --git a/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-2/_config.js b/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-2/_config.js
index 035616dfb6..d99f0df731 100644
--- a/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-2/_config.js
+++ b/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-2/_config.js
@@ -2,7 +2,6 @@ import { tick } from 'svelte';
import { test } from '../../test';
export default test({
- skip: true, // TODO works on https://github.com/sveltejs/svelte/pull/17971
async test({ assert, target }) {
const [x, y, resolve] = target.querySelectorAll('button');
@@ -18,7 +17,13 @@ export default test({
- ` // if this shows world world "world" world world world "world" - then this would also be ok
+ world
+ "world"
+ world
+ world
+ world
+ "world"
+ ` // if this does not show world "world" world world world "world" - then this would also be ok
);
resolve.click();
diff --git a/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-3/_config.js b/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-3/_config.js
index a2d615b6e5..eb4485e8a6 100644
--- a/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-3/_config.js
+++ b/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-3/_config.js
@@ -2,7 +2,6 @@ import { tick } from 'svelte';
import { test } from '../../test';
export default test({
- skip: true, // TODO works on https://github.com/sveltejs/svelte/pull/17971
async test({ assert, target }) {
const [x, y, resolve] = target.querySelectorAll('button');
@@ -30,9 +29,17 @@ export default test({
- ` // if this shows world world "world" world world world "world" - then this would also be ok
+ world
+ "world"
+ world
+ world
+ world
+ "world"
+ ` // if this does not show world "world" world world world "world" - then this would also be ok
);
+ resolve.click();
+ await tick();
resolve.click();
await tick();
assert.htmlEqual(
diff --git a/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-3/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-3/main.svelte
index b02ab20995..c8a4ca587f 100644
--- a/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-3/main.svelte
+++ b/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-3/main.svelte
@@ -31,4 +31,3 @@
{#if y > 0}
{/if}
-
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-2/_config.js b/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-2/_config.js
index a712e70630..74df968d82 100644
--- a/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-2/_config.js
+++ b/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-2/_config.js
@@ -2,7 +2,6 @@ import { tick } from 'svelte';
import { test } from '../../test';
export default test({
- skip: true, // TODO works on https://github.com/sveltejs/svelte/pull/17971
async test({ assert, target }) {
const [x, y, shift, pop, commit] = target.querySelectorAll('button');
@@ -43,6 +42,8 @@ export default test({
await tick();
shift.click();
await tick();
+ shift.click(); // would be ok to not need this one
+ await tick();
assert.htmlEqual(
target.innerHTML,
`
diff --git a/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-5/_config.js b/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-5/_config.js
index 9221a96c2e..e8f16ade3c 100644
--- a/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-5/_config.js
+++ b/packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-5/_config.js
@@ -2,7 +2,6 @@ import { tick } from 'svelte';
import { test } from '../../test';
export default test({
- skip: true, // TODO works on https://github.com/sveltejs/svelte/pull/17971
async test({ assert, target }) {
const [x, y, resolve, commit] = target.querySelectorAll('button');
diff --git a/packages/svelte/tests/runtime-runes/samples/async-state-new-branch/_config.js b/packages/svelte/tests/runtime-runes/samples/async-state-new-branch/_config.js
index f2091eb6ab..f4b6cc777b 100644
--- a/packages/svelte/tests/runtime-runes/samples/async-state-new-branch/_config.js
+++ b/packages/svelte/tests/runtime-runes/samples/async-state-new-branch/_config.js
@@ -2,7 +2,6 @@ import { tick } from 'svelte';
import { test } from '../../test';
export default test({
- skip: true, // this fails on main, too; skip for now
async test({ assert, target, logs }) {
const [x, y, resolve] = target.querySelectorAll('button');
diff --git a/packages/svelte/tests/runtime-runes/samples/typescript/main.svelte b/packages/svelte/tests/runtime-runes/samples/typescript/main.svelte
index 4fc7c4ec38..0286f2c0fd 100644
--- a/packages/svelte/tests/runtime-runes/samples/typescript/main.svelte
+++ b/packages/svelte/tests/runtime-runes/samples/typescript/main.svelte
@@ -27,6 +27,11 @@
abstract x(): void;
y() {}
}
+ class Subclass extends Foo {
+ constructor(value: string) {
+ super(value);
+ }
+ }
declare const declared_const: number;
declare function declared_fn(): void;
diff --git a/packages/svelte/tests/validator/samples/illegal-variable-declaration/errors.json b/packages/svelte/tests/validator/samples/illegal-variable-declaration/errors.json
index 850880e744..cf413c39df 100644
--- a/packages/svelte/tests/validator/samples/illegal-variable-declaration/errors.json
+++ b/packages/svelte/tests/validator/samples/illegal-variable-declaration/errors.json
@@ -1,7 +1,7 @@
[
{
"code": "declaration_duplicate_module_import",
- "message": "Cannot declare a variable with the same name as an import inside `