From ce6cbd13db2b3069cde4a6dae739ee0aee9fa425 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sun, 29 Mar 2026 22:02:38 -0400 Subject: [PATCH] WIP --- .../svelte/src/internal/client/reactivity/batch.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index cbc8778405..a530859624 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -618,8 +618,10 @@ export class Batch { /** @type {Map} */ var checked = new Map(); + var scheduled = []; + for (var source of sources) { - mark_effects(source, others, marked, checked); + mark_effects(source, others, marked, checked, scheduled); } checked = new Map(); @@ -1074,7 +1076,7 @@ function flush_queued_effects(effects) { * @param {Set} marked * @param {Map} checked */ -function mark_effects(value, sources, marked, checked) { +function mark_effects(value, sources, marked, checked, scheduled = []) { if (marked.has(value)) return; marked.add(value); @@ -1083,13 +1085,15 @@ function mark_effects(value, sources, marked, checked) { const flags = reaction.f; if ((flags & DERIVED) !== 0) { - mark_effects(/** @type {Derived} */ (reaction), sources, marked, checked); + mark_effects(/** @type {Derived} */ (reaction), sources, marked, checked, scheduled); } else if ( (flags & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags & DIRTY) === 0 && depends_on(reaction, sources, checked) ) { + scheduled.push(reaction); schedule_effect(/** @type {Effect} */ (reaction)); + current_batch?.cvs.set(reaction, -1); } } }