From e02606a1e64ed1b05622f8e7f18fbc02fd3ee225 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Tue, 11 Feb 2025 15:47:07 +0000 Subject: [PATCH] fix bug --- packages/svelte/src/internal/client/dom/blocks/boundary.js | 2 +- packages/svelte/src/internal/client/reactivity/sources.js | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/svelte/src/internal/client/dom/blocks/boundary.js b/packages/svelte/src/internal/client/dom/blocks/boundary.js index 99c73d35e9..a5d1ff4646 100644 --- a/packages/svelte/src/internal/client/dom/blocks/boundary.js +++ b/packages/svelte/src/internal/client/dom/blocks/boundary.js @@ -171,7 +171,7 @@ export function boundary(node, props, children) { for (var [signal, entry] of forks) { if (signal.v !== entry.v) { if ((signal.f & (DERIVED | ASYNC_DERIVED)) === 0) { - mark_reactions(signal, DIRTY, undefined, true); + mark_reactions(signal, DIRTY, true); signal.wv = increment_write_version(); } } diff --git a/packages/svelte/src/internal/client/reactivity/sources.js b/packages/svelte/src/internal/client/reactivity/sources.js index b2bd8aa9b4..549be19ce2 100644 --- a/packages/svelte/src/internal/client/reactivity/sources.js +++ b/packages/svelte/src/internal/client/reactivity/sources.js @@ -261,10 +261,9 @@ export function update_pre(source, d = 1) { /** * @param {Value} signal * @param {number} status should be DIRTY or MAYBE_DIRTY - * @param {Value} [parent] * @returns {void} */ -export function mark_reactions(signal, status, parent, only_boundary = false) { +export function mark_reactions(signal, status, only_boundary = false) { var reactions = signal.reactions; if (reactions === null) return; @@ -293,7 +292,7 @@ export function mark_reactions(signal, status, parent, only_boundary = false) { if (boundary) { // @ts-ignore var forks = boundary.fn.forks; - if (forks.has(signal) || forks.has(parent)) { + if (reaction.deps?.every((d) => forks.has(d))) { continue; } } @@ -310,7 +309,7 @@ export function mark_reactions(signal, status, parent, only_boundary = false) { // If the signal a) was previously clean or b) is an unowned derived, then mark it if ((flags & (CLEAN | UNOWNED)) !== 0) { if ((flags & DERIVED) !== 0) { - mark_reactions(/** @type {Derived} */ (reaction), MAYBE_DIRTY, signal, only_boundary); + mark_reactions(/** @type {Derived} */ (reaction), MAYBE_DIRTY, only_boundary); } else { schedule_effect(/** @type {Effect} */ (reaction)); }