diff --git a/.changeset/rich-turtles-learn.md b/.changeset/rich-turtles-learn.md new file mode 100644 index 0000000000..99f87ecb17 --- /dev/null +++ b/.changeset/rich-turtles-learn.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: ensure derived reactions have their version kept in sync with the reactive graph diff --git a/packages/svelte/tests/runtime-runes/samples/derived-version-sync/_config.js b/packages/svelte/tests/runtime-runes/samples/derived-version-sync/_config.js new file mode 100644 index 0000000000..30012f4d03 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/derived-version-sync/_config.js @@ -0,0 +1,28 @@ +import { flushSync } from 'svelte'; +import { test } from '../../test'; + +export default test({ + async test({ assert, target, logs }) { + let [btn1] = target.querySelectorAll('button'); + + btn1?.click(); + flushSync(); + + btn1?.click(); + flushSync(); + + logs.length = 0; + + btn1?.click(); + flushSync(); + + assert.deepEqual(logs, ['a', { value: 1 }]); + + logs.length = 0; + + btn1?.click(); + flushSync(); + + assert.deepEqual(logs, ['a', { value: 2 }, 'b', { a: 2 }, 'c', { b: 2 }]); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/derived-version-sync/main.svelte b/packages/svelte/tests/runtime-runes/samples/derived-version-sync/main.svelte new file mode 100644 index 0000000000..8450d2f16e --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/derived-version-sync/main.svelte @@ -0,0 +1,28 @@ + + +