diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index 6ea395936b..f0583b9155 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -256,13 +256,13 @@ export class Batch { flush() { if (queued_root_effects.length > 0) { - flush_queued_root_effects(); + this.flush_effects(); } else { this.#commit(); } if (current_batch !== this) { - // this can happen if a `flushSync` occurred during `flush_queued_root_effects`, + // this can happen if a `flushSync` occurred during `this.flush_effects()`, // which is permitted in legacy mode despite being a terrible idea return; } @@ -274,6 +274,32 @@ export class Batch { current_batch = null; } + flush_effects() { + var was_updating_effect = is_updating_effect; + + try { + var flush_count = 0; + set_is_updating_effect(true); + + while (queued_root_effects.length > 0) { + if (flush_count++ > 1000) { + infinite_loop_guard(); + } + + this.process(queued_root_effects); + + old_values.clear(); + } + } finally { + set_is_updating_effect(was_updating_effect); + + last_scheduled_effect = null; + if (DEV) { + dev_effect_stack.length = 0; + } + } + } + #commit() { for (const fn of this.#callbacks) { fn(); @@ -368,7 +394,7 @@ export function flushSync(fn) { const batch = Batch.ensure(); if (fn) { - flush_queued_root_effects(); + batch.flush_effects(); result = fn(); } @@ -381,7 +407,7 @@ export function flushSync(fn) { batch.flush(); } - // this would be reset in `flush_queued_root_effects` but since we are early returning here, + // this would be reset in `batch.flush_effects()` but since we are early returning here, // we need to reset it here as well in case the first time there's 0 queued root effects last_scheduled_effect = null; @@ -392,7 +418,7 @@ export function flushSync(fn) { return /** @type {T} */ (result); } - flush_queued_root_effects(); + batch.flush_effects(); } } @@ -438,33 +464,6 @@ function infinite_loop_guard() { } } -export function flush_queued_root_effects() { - var was_updating_effect = is_updating_effect; - var batch = /** @type {Batch} */ (current_batch); - - try { - var flush_count = 0; - set_is_updating_effect(true); - - while (queued_root_effects.length > 0) { - if (flush_count++ > 1000) { - infinite_loop_guard(); - } - - batch.process(queued_root_effects); - - old_values.clear(); - } - } finally { - set_is_updating_effect(was_updating_effect); - - last_scheduled_effect = null; - if (DEV) { - dev_effect_stack.length = 0; - } - } -} - /** * @param {Array} effects * @returns {void}