diff --git a/.changeset/fuzzy-fans-hammer.md b/.changeset/fuzzy-fans-hammer.md
new file mode 100644
index 0000000000..24af7fa8f5
--- /dev/null
+++ b/.changeset/fuzzy-fans-hammer.md
@@ -0,0 +1,5 @@
+---
+'svelte': patch
+---
+
+fix: correctly migrate named self closing slots
diff --git a/packages/svelte/src/compiler/migrate/index.js b/packages/svelte/src/compiler/migrate/index.js
index eb0e4eff8c..0d4691e9d6 100644
--- a/packages/svelte/src/compiler/migrate/index.js
+++ b/packages/svelte/src/compiler/migrate/index.js
@@ -1058,8 +1058,6 @@ const template = {
handle_identifier(node, state, path);
},
RegularElement(node, { state, path, next }) {
- migrate_slot_usage(node, path, state);
- handle_events(node, state);
// Strip off any namespace from the beginning of the node name.
const node_name = node.name.replace(/[a-zA-Z-]*:/g, '');
@@ -1067,8 +1065,12 @@ const template = {
let trimmed_position = node.end - 2;
while (state.str.original.charAt(trimmed_position - 1) === ' ') trimmed_position--;
state.str.remove(trimmed_position, node.end - 1);
- state.str.appendRight(node.end, `${node.name}>`);
+ state.str.appendLeft(node.end, `${node.name}>`);
}
+
+ migrate_slot_usage(node, path, state);
+ handle_events(node, state);
+
next();
},
SvelteSelf(node, { state, next }) {
diff --git a/packages/svelte/tests/migrate/samples/self-closing-named-slot/input.svelte b/packages/svelte/tests/migrate/samples/self-closing-named-slot/input.svelte
new file mode 100644
index 0000000000..33ca4e3b9f
--- /dev/null
+++ b/packages/svelte/tests/migrate/samples/self-closing-named-slot/input.svelte
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/packages/svelte/tests/migrate/samples/self-closing-named-slot/output.svelte b/packages/svelte/tests/migrate/samples/self-closing-named-slot/output.svelte
new file mode 100644
index 0000000000..6655bc9dd2
--- /dev/null
+++ b/packages/svelte/tests/migrate/samples/self-closing-named-slot/output.svelte
@@ -0,0 +1,5 @@
+
+ {#snippet test()}
+
+ {/snippet}
+
\ No newline at end of file