From ac982ee840114fd1130b39bf9e1277877d69f8fb Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Thu, 24 Oct 2024 08:56:25 +0100 Subject: [PATCH 1/3] fix: internally wrap store subscribe in untrack --- .changeset/little-hotels-poke.md | 5 +++++ packages/svelte/src/store/utils.js | 5 +++-- .../store-unsubscribe-not-referenced-after/main.svelte | 5 +---- 3 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 .changeset/little-hotels-poke.md diff --git a/.changeset/little-hotels-poke.md b/.changeset/little-hotels-poke.md new file mode 100644 index 000000000000..50b60e214219 --- /dev/null +++ b/.changeset/little-hotels-poke.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: internally wrap store subscribe in untrack diff --git a/packages/svelte/src/store/utils.js b/packages/svelte/src/store/utils.js index d48036ea6746..ea2867ae5a58 100644 --- a/packages/svelte/src/store/utils.js +++ b/packages/svelte/src/store/utils.js @@ -1,4 +1,5 @@ /** @import { Readable } from './public' */ +import { untrack } from '../index-client.js'; import { noop } from '../internal/shared/utils.js'; /** @@ -20,11 +21,11 @@ export function subscribe_to_store(store, run, invalidate) { } // Svelte store takes a private second argument - const unsub = store.subscribe( + const unsub = untrack(() => store.subscribe( run, // @ts-expect-error invalidate - ); + )); // Also support RxJS // @ts-expect-error TODO fix this in the types? diff --git a/packages/svelte/tests/runtime-runes/samples/store-unsubscribe-not-referenced-after/main.svelte b/packages/svelte/tests/runtime-runes/samples/store-unsubscribe-not-referenced-after/main.svelte index e097c639f0c8..5f8b19f4c7ad 100644 --- a/packages/svelte/tests/runtime-runes/samples/store-unsubscribe-not-referenced-after/main.svelte +++ b/packages/svelte/tests/runtime-runes/samples/store-unsubscribe-not-referenced-after/main.svelte @@ -1,5 +1,4 @@