From 49013d7bfa81a966d449fb0509be71b51ad05263 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Sat, 21 Dec 2024 21:49:00 +0000 Subject: [PATCH] fix: ensure $inspect.trace indicated dirty traced deps correctly --- packages/svelte/src/internal/client/runtime.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 4a90a21971..dc0d7dd1b0 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -528,6 +528,22 @@ export function update_effect(effect) { effect.teardown = typeof teardown === 'function' ? teardown : null; effect.version = current_version; + var version = current_version; + var deps = effect.deps; + + // In DEV, we need to handle a case where $inspect.trace() might + // incorrectly state a source dependency has not changed when it has. + // That's beacuse that source was changed by the same effect, causing + // the versions to match. We can avoid this by incrementing the version + if (DEV && (effect.f & DIRTY) !== 0 && deps !== null) { + for (let i = 0; i < deps.length; i++) { + var dep = deps[i]; + if ((dep.f & DERIVED) === 0 && dep.version === version) { + dep.version = increment_version(); + } + } + } + if (DEV) { dev_effect_stack.push(effect); }