From c3aabc148ad242ec11131fe2215305a82d6f7daf Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 3 Jul 2025 17:16:07 -0400 Subject: [PATCH] tweak logic to make it clearer why and when we commit a batch --- .../svelte/src/internal/client/reactivity/batch.js | 13 ++++++++----- packages/svelte/src/internal/client/runtime.js | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index 2a41b1813b..67d8e0a7ad 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -5,6 +5,7 @@ import { flush_queued_effects, flush_queued_root_effects, process_effects, + queued_root_effects, schedule_effect, set_queued_root_effects, set_signal_status, @@ -174,7 +175,7 @@ export class Batch { this.render_effects = []; this.effects = []; - this.commit(); + this.#commit(); flush_queued_effects(render_effects); flush_queued_effects(effects); @@ -227,7 +228,11 @@ export class Batch { } flush() { - flush_queued_root_effects(); + if (queued_root_effects.length > 0) { + flush_queued_root_effects(); + } else { + this.#commit(); + } if (current_batch !== this) { // this can happen if a `flushSync` occurred during `flush_queued_root_effects`, @@ -242,7 +247,7 @@ export class Batch { current_batch = null; } - commit() { + #commit() { for (const fn of this.#callbacks) { fn(); } @@ -270,8 +275,6 @@ export class Batch { this.render_effects = []; this.effects = []; - - this.commit(); } } diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 7985d2312f..061870daa2 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -68,7 +68,7 @@ export function set_is_destroying_effect(value) { // Handle effect queues /** @type {Effect[]} */ -let queued_root_effects = []; +export let queued_root_effects = []; /** @param {Effect[]} v */ export function set_queued_root_effects(v) {