diff --git a/.changeset/healthy-dancers-play.md b/.changeset/healthy-dancers-play.md new file mode 100644 index 0000000000..6fe572bb67 --- /dev/null +++ b/.changeset/healthy-dancers-play.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: improve prop binding warning validation for stores diff --git a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js index 82d49f0ad7..ef2cde82fd 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js @@ -214,6 +214,11 @@ export function client_component(analysis, options) { : b.thunk(store_get) ) ); + if (dev) { + store_setup.push( + b.stmt(b.assignment('=', b.member(binding.node, b.id('$is_store')), b.literal(true))) + ); + } } } diff --git a/packages/svelte/src/internal/client/validate.js b/packages/svelte/src/internal/client/validate.js index 415982a02b..16755f2517 100644 --- a/packages/svelte/src/internal/client/validate.js +++ b/packages/svelte/src/internal/client/validate.js @@ -105,7 +105,7 @@ export function validate_binding(binding, get_object, get_property, line, column var filename = dev_current_component_function?.[FILENAME]; render_effect(() => { - if (warned) return; + if (warned || get_object.$is_store) return; var object = get_object(); var property = get_property(); diff --git a/packages/svelte/tests/runtime-runes/samples/binding-property-store/Child.svelte b/packages/svelte/tests/runtime-runes/samples/binding-property-store/Child.svelte new file mode 100644 index 0000000000..93207db1bb --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/binding-property-store/Child.svelte @@ -0,0 +1,5 @@ + + + diff --git a/packages/svelte/tests/runtime-runes/samples/binding-property-store/_config.js b/packages/svelte/tests/runtime-runes/samples/binding-property-store/_config.js new file mode 100644 index 0000000000..e93067eb9d --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/binding-property-store/_config.js @@ -0,0 +1,11 @@ +import { test } from '../../test'; + +export default test({ + mode: ['client'], + compileOptions: { + dev: true + }, + async test({ warnings, assert }) { + assert.deepEqual(warnings, []); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/binding-property-store/main.svelte b/packages/svelte/tests/runtime-runes/samples/binding-property-store/main.svelte new file mode 100644 index 0000000000..a5477c914c --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/binding-property-store/main.svelte @@ -0,0 +1,9 @@ + + + +

{$stuff.count}