diff --git a/packages/svelte/src/internal/client/reactivity/sources.js b/packages/svelte/src/internal/client/reactivity/sources.js index 0dc55f97ba..54e3bf4ddd 100644 --- a/packages/svelte/src/internal/client/reactivity/sources.js +++ b/packages/svelte/src/internal/client/reactivity/sources.js @@ -44,6 +44,9 @@ export function set_inspect_effects(v) { inspect_effects = v; } +/** @type {Set} */ +export const changeset = new Set(); + /** * @template V * @param {V} v @@ -181,6 +184,10 @@ export function internal_set(source, value) { } } + if (!changeset.has(source)) { + changeset.add(source); + } + mark_reactions(source, DIRTY); // It's possible that the current reaction might not have up-to-date dependencies diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index d872503ab6..5b2e4de50b 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -31,7 +31,7 @@ import { flush_boundary_micro_tasks, flush_post_micro_tasks } from './dom/task.js'; -import { internal_set } from './reactivity/sources.js'; +import { changeset, internal_set } from './reactivity/sources.js'; import { destroy_derived_effects, from_async_derived, @@ -705,6 +705,7 @@ function flush_queued_root_effects(root_effects) { } } finally { is_flushing_effect = previously_flushing_effect; + changeset.clear(); } } @@ -825,6 +826,8 @@ function process_effects(effect, collected_effects, boundary) { } else if ((flags & BOUNDARY_EFFECT) !== 0) { var b = /** @type {Boundary} */ (current_effect.b); + console.log([...changeset].map((s) => s.v)); + process_effects(current_effect, collected_effects, b); if (!b.suspended) {