From e0e48b392a03ee5bc592fd5ec7077788696ed385 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sat, 19 Apr 2025 18:12:05 -0400 Subject: [PATCH] WIP --- packages/svelte/src/internal/client/reactivity/effects.js | 4 +++- packages/svelte/src/internal/client/render.js | 2 -- packages/svelte/src/internal/client/runtime.js | 7 +++++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js index d506168e80..aa4d510730 100644 --- a/packages/svelte/src/internal/client/reactivity/effects.js +++ b/packages/svelte/src/internal/client/reactivity/effects.js @@ -41,7 +41,7 @@ import { get_next_sibling } from '../dom/operations.js'; import { async_derived, derived } from './deriveds.js'; import { capture } from '../dom/blocks/boundary.js'; import { component_context, dev_current_component_function } from '../context.js'; -import { active_fork } from './forks.js'; +import { active_fork, Fork } from './forks.js'; /** * @param {'$effect' | '$effect.pre' | '$inspect'} rune @@ -234,6 +234,7 @@ export function inspect_effect(fn) { * @returns {() => void} */ export function effect_root(fn) { + Fork.ensure(); const effect = create_effect(ROOT_EFFECT, fn, true); return () => { @@ -247,6 +248,7 @@ export function effect_root(fn) { * @returns {(options?: { outro?: boolean }) => Promise} */ export function component_root(fn) { + Fork.ensure(); const effect = create_effect(ROOT_EFFECT, fn, true); return (options = {}) => { diff --git a/packages/svelte/src/internal/client/render.js b/packages/svelte/src/internal/client/render.js index 3479c87a9d..404965d9ab 100644 --- a/packages/svelte/src/internal/client/render.js +++ b/packages/svelte/src/internal/client/render.js @@ -206,8 +206,6 @@ function _mount(Component, { target, anchor, props = {}, events, context, intro // @ts-expect-error will be defined because the render effect runs synchronously var component = undefined; - Fork.ensure(); - var unmount = component_root(() => { var anchor_node = anchor ?? target.appendChild(create_text()); diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index ecc3450aab..6015c39a74 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -684,6 +684,11 @@ function infinite_loop_guard() { function flush_queued_root_effects() { var was_updating_effect = is_updating_effect; + // TODO it should be impossible to get here without an active fork + if (!active_fork && queued_root_effects.length > 0) { + console.trace('here'); + } + try { var flush_count = 0; is_updating_effect = true; @@ -901,6 +906,8 @@ function process_effects(root, async_effects, render_effects, effects) { export function flushSync(fn) { var result; + Fork.ensure(); + if (fn) { is_flushing = true; flush_queued_root_effects();