Skip to content

Commit a2c2e3f

Browse files
committed
fix: moving deriveds during migration deletes part of the inserted code
1 parent 76067a5 commit a2c2e3f

File tree

4 files changed

+39
-1
lines changed

4 files changed

+39
-1
lines changed

.changeset/cool-apes-confess.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: moving deriveds during migration deletes part of the inserted code

packages/svelte/src/compiler/migrate/index.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,12 @@ export function migrate(source, { filename } = {}) {
273273
const { start, end } = get_node_range(source, node);
274274
str.appendLeft(end, '\n');
275275
str.move(start, end, /** @type {number} */ (parsed.instance?.content.end));
276-
str.remove(start - (source[start - 2] === '\r' ? 2 : 1), start);
276+
const carriage_idx = start - (source[start - 2] === '\r' ? 2 : 1);
277+
// we might end up injecting something at the position we are about to remove
278+
// since we only want to remove the carriage if we add the trimmed length
279+
// of the transformed string to prevent removing something we added.
280+
const transformed = state.str.snip(carriage_idx, start).toString().trim();
281+
str.remove(carriage_idx + transformed.length, start);
277282
}
278283
}
279284

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<script>
2+
export let data
3+
$: ({ foo } = data)
4+
5+
import { blah } from './blah.js'
6+
7+
let bar
8+
$: {
9+
bar = []
10+
let baz
11+
}
12+
</script>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<script>
2+
import { run } from 'svelte/legacy';
3+
4+
5+
import { blah } from './blah.js'
6+
/** @type {{data: any}} */
7+
let { data } = $props();
8+
9+
let bar = $state()
10+
11+
let { foo } = $derived(data)
12+
run(() => {
13+
bar = []
14+
let baz
15+
});
16+
</script>

0 commit comments

Comments
 (0)