Skip to content

Commit cd2fd4a

Browse files
committed
fix: ensure $inspect.trace indicated dirty traced deps correctly
1 parent 49013d7 commit cd2fd4a

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

packages/svelte/src/internal/client/runtime.js

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -524,21 +524,34 @@ export function update_effect(effect) {
524524
destroy_effect_deriveds(effect);
525525

526526
execute_effect_teardown(effect);
527+
528+
var sources;
529+
var deps = effect.deps;
530+
531+
if (DEV && tracing_mode_flag && deps !== null) {
532+
sources = new Map();
533+
for (let i = 0; i < deps.length; i++) {
534+
var dep = deps[i];
535+
if ((dep.f & DERIVED) === 0) {
536+
sources.set(dep, dep.version);
537+
}
538+
}
539+
}
540+
527541
var teardown = update_reaction(effect);
528542
effect.teardown = typeof teardown === 'function' ? teardown : null;
529543
effect.version = current_version;
530544

531-
var version = current_version;
532-
var deps = effect.deps;
545+
deps = effect.deps;
533546

534547
// In DEV, we need to handle a case where $inspect.trace() might
535548
// incorrectly state a source dependency has not changed when it has.
536549
// That's beacuse that source was changed by the same effect, causing
537550
// the versions to match. We can avoid this by incrementing the version
538-
if (DEV && (effect.f & DIRTY) !== 0 && deps !== null) {
551+
if (DEV && tracing_mode_flag && (effect.f & DIRTY) !== 0 && deps !== null) {
539552
for (let i = 0; i < deps.length; i++) {
540-
var dep = deps[i];
541-
if ((dep.f & DERIVED) === 0 && dep.version === version) {
553+
dep = deps[i];
554+
if (sources?.has(dep) && sources.get(dep) !== dep.version) {
542555
dep.version = increment_version();
543556
}
544557
}

0 commit comments

Comments
 (0)