diff --git a/.changeset/petite-mammals-talk.md b/.changeset/petite-mammals-talk.md deleted file mode 100644 index 97edc1953a..0000000000 --- a/.changeset/petite-mammals-talk.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -chore: move DOM-related effect properties to `effect.nodes` diff --git a/.changeset/sad-paths-build.md b/.changeset/sad-paths-build.md deleted file mode 100644 index f64d6f766c..0000000000 --- a/.changeset/sad-paths-build.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: allow `$props.id()` to occur after an `await` diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index 2e8b9e814f..dc3b63ffd6 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -1,5 +1,15 @@ # svelte +## 5.45.4 + +### Patch Changes + +- chore: move DOM-related effect properties to `effect.nodes` ([#17293](https://github.com/sveltejs/svelte/pull/17293)) + +- fix: allow `$props.id()` to occur after an `await` ([#17285](https://github.com/sveltejs/svelte/pull/17285)) + +- fix: keep reactions up to date even when read outside of effect ([#17295](https://github.com/sveltejs/svelte/pull/17295)) + ## 5.45.3 ### Patch Changes diff --git a/packages/svelte/package.json b/packages/svelte/package.json index b3af271800..2bfc07031d 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -2,7 +2,7 @@ "name": "svelte", "description": "Cybernetically enhanced web apps", "license": "MIT", - "version": "5.45.3", + "version": "5.45.4", "type": "module", "types": "./types/index.d.ts", "engines": { diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 100804a974..64c8409b8f 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -278,7 +278,7 @@ export function update_reaction(reaction) { reaction.deps = deps = new_deps; } - if (is_updating_effect && effect_tracking() && (reaction.f & CONNECTED) !== 0) { + if (effect_tracking() && (reaction.f & CONNECTED) !== 0) { for (i = skipped_deps; i < deps.length; i++) { (deps[i].reactions ??= []).push(reaction); } diff --git a/packages/svelte/src/version.js b/packages/svelte/src/version.js index 69f6907a49..abfc05b688 100644 --- a/packages/svelte/src/version.js +++ b/packages/svelte/src/version.js @@ -4,5 +4,5 @@ * The current version, as set in package.json. * @type {string} */ -export const VERSION = '5.45.3'; +export const VERSION = '5.45.4'; export const PUBLIC_VERSION = '5'; diff --git a/packages/svelte/tests/signals/test.ts b/packages/svelte/tests/signals/test.ts index 13430609a8..23c4bb42f9 100644 --- a/packages/svelte/tests/signals/test.ts +++ b/packages/svelte/tests/signals/test.ts @@ -1418,6 +1418,31 @@ describe('signals', () => { }; }); + test('derived when connected should add new dependency to its reaction even when read outside effect', () => { + let count_a = state(0); + let count_b = state(0); + let which = state(true); + let double = derived(() => ($.get(which) ? $.get(count_a) * 2 : $.get(count_b) * 2)); + + render_effect(() => { + $.get(double); + }); + + return () => { + flushSync(); + assert.equal($.get(double!), 0); + + set(which, false); + $.get(double); // read before render effect has a chance to rerun + flushSync(); + assert.equal($.get(double!), 0); + + set(count_b, 1); + flushSync(); + assert.equal($.get(double!), 2); + }; + }); + test('$effect.root inside deriveds stay alive independently', () => { const log: any[] = []; const c = state(0);