diff --git a/.changeset/keep-has-check-sources.md b/.changeset/keep-has-check-sources.md new file mode 100644 index 0000000000..2ba811c4e8 --- /dev/null +++ b/.changeset/keep-has-check-sources.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: keep creating state sources for property checks during component init diff --git a/packages/svelte/src/internal/client/proxy.js b/packages/svelte/src/internal/client/proxy.js index db58459fd9..08233472dd 100644 --- a/packages/svelte/src/internal/client/proxy.js +++ b/packages/svelte/src/internal/client/proxy.js @@ -2,6 +2,7 @@ import { DEV } from 'esm-env'; import { get, + active_effect, update_version, active_reaction, set_update_version, @@ -240,7 +241,8 @@ export function proxy(value) { if ( s !== undefined || - (active_reaction !== null && (!has || get_descriptor(target, prop)?.writable)) + ((active_effect !== null || active_reaction !== null) && + (!has || get_descriptor(target, prop)?.writable)) ) { if (s === undefined) { s = with_parent(() => { diff --git a/packages/svelte/tests/runtime-runes/samples/async-fork-discard-after-in-check/_config.js b/packages/svelte/tests/runtime-runes/samples/async-fork-discard-after-in-check/_config.js new file mode 100644 index 0000000000..cf3cd1b1a3 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-fork-discard-after-in-check/_config.js @@ -0,0 +1,18 @@ +import { tick } from 'svelte'; +import { test } from '../../test'; + +export default test({ + async test({ assert, target, logs }) { + await tick(); + + const [rerun, discard] = target.querySelectorAll('button'); + + rerun.click(); + await tick(); + + discard.click(); + await tick(); + + assert.deepEqual(logs, [1, false, 1, 1, 1]); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/async-fork-discard-after-in-check/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-fork-discard-after-in-check/main.svelte new file mode 100644 index 0000000000..95e0bf09f4 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-fork-discard-after-in-check/main.svelte @@ -0,0 +1,49 @@ + + + + +