Skip to content

Commit ede1edd

Browse files
authored
fix: emit useful error on invalid binding to derived state (#9497)
closes #9495
1 parent 37f2493 commit ede1edd

File tree

5 files changed

+24
-0
lines changed

5 files changed

+24
-0
lines changed

.changeset/clean-eels-beg.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: emit useful error on invalid binding to derived state

packages/svelte/src/compiler/errors.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ const runes = {
187187
: ''
188188
}`,
189189
'invalid-derived-assignment': () => `Invalid assignment to derived state`,
190+
'invalid-derived-binding': () => `Invalid binding to derived state`,
190191
/**
191192
* @param {string} rune
192193
* @param {number[]} args

packages/svelte/src/compiler/phases/2-analyze/validation.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,10 @@ export const validation = {
274274
error(node.expression, 'invalid-binding-value');
275275
}
276276

277+
if (binding.kind === 'derived') {
278+
error(node.expression, 'invalid-derived-binding');
279+
}
280+
277281
// TODO handle mutations of non-state/props in runes mode
278282
}
279283

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
error: {
5+
code: 'invalid-derived-binding',
6+
message: 'Invalid binding to derived state'
7+
}
8+
});
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<script>
2+
let a = $state(0);
3+
let b = $derived({ a });
4+
</script>
5+
6+
<input type="number" bind:value={b} />

0 commit comments

Comments
 (0)