diff --git a/.changeset/polite-pugs-attend.md b/.changeset/polite-pugs-attend.md new file mode 100644 index 0000000000..4f27579a96 --- /dev/null +++ b/.changeset/polite-pugs-attend.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: ensure $inspect effects are fine-grain diff --git a/packages/svelte/src/internal/client/reactivity/sources.js b/packages/svelte/src/internal/client/reactivity/sources.js index c32cc450e1..92bc4f264d 100644 --- a/packages/svelte/src/internal/client/reactivity/sources.js +++ b/packages/svelte/src/internal/client/reactivity/sources.js @@ -16,7 +16,8 @@ import { update_effect, derived_sources, set_derived_sources, - flush_sync + flush_sync, + check_dirtiness } from '../runtime.js'; import { equals, safe_equals } from './equality.js'; import { @@ -178,7 +179,14 @@ export function set(source, value) { flush_sync(); } for (const effect of inspects) { - update_effect(effect); + // Mark clean inspect-effects as maybe dirty and then check their dirtiness + // instead of just updating the effects - this way we avoid overfiring. + if ((effect.f & CLEAN) !== 0) { + set_signal_status(effect, MAYBE_DIRTY); + } + if (check_dirtiness(effect)) { + update_effect(effect); + } } inspect_effects.clear(); } diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index dc103bbea6..1c004538b2 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -153,7 +153,7 @@ export function set_dev_current_component_function(fn) { } export function increment_version() { - return current_version++; + return ++current_version; } /** @returns {boolean} */ diff --git a/packages/svelte/tests/runtime-runes/samples/inspect-derived-3/Item.svelte b/packages/svelte/tests/runtime-runes/samples/inspect-derived-3/Item.svelte new file mode 100644 index 0000000000..4df92e720c --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/inspect-derived-3/Item.svelte @@ -0,0 +1,13 @@ + + +