diff --git a/packages/svelte/src/internal/client/dom/blocks/async.js b/packages/svelte/src/internal/client/dom/blocks/async.js index 8d92cc30ed..627e3c7d23 100644 --- a/packages/svelte/src/internal/client/dom/blocks/async.js +++ b/packages/svelte/src/internal/client/dom/blocks/async.js @@ -1,5 +1,5 @@ /** @import { Effect, TemplateNode, Value } from '#client' */ - +/** @import { Fork } from '../../reactivity/forks.js' */ import { async_derived } from '../../reactivity/deriveds.js'; import { active_fork } from '../../reactivity/forks.js'; import { active_effect, schedule_effect } from '../../runtime.js'; @@ -13,15 +13,16 @@ import { capture } from './boundary.js'; export function async(node, expressions, fn) { // TODO handle hydration - var fork = active_fork; + var fork = /** @type {Fork} */ (active_fork); var effect = /** @type {Effect} */ (active_effect); + var restore = capture(); Promise.all(expressions.map((fn) => async_derived(fn))).then((result) => { restore(); fn(node, ...result); - fork?.run(() => { + fork.run(() => { schedule_effect(effect); }); }); diff --git a/packages/svelte/src/internal/client/dom/blocks/boundary.js b/packages/svelte/src/internal/client/dom/blocks/boundary.js index 386eff9766..b6ecbf0582 100644 --- a/packages/svelte/src/internal/client/dom/blocks/boundary.js +++ b/packages/svelte/src/internal/client/dom/blocks/boundary.js @@ -24,7 +24,7 @@ import { queue_boundary_micro_task } from '../task.js'; import * as e from '../../../shared/errors.js'; import { DEV } from 'esm-env'; import { from_async_derived, set_from_async_derived } from '../../reactivity/deriveds.js'; -import { active_fork, Fork } from '../../reactivity/forks.js'; +import { Fork } from '../../reactivity/forks.js'; /** * @typedef {{ diff --git a/packages/svelte/src/internal/client/dom/blocks/each.js b/packages/svelte/src/internal/client/dom/blocks/each.js index 8379b109a9..8168eddd87 100644 --- a/packages/svelte/src/internal/client/dom/blocks/each.js +++ b/packages/svelte/src/internal/client/dom/blocks/each.js @@ -1,4 +1,5 @@ /** @import { EachItem, EachState, Effect, MaybeSource, Source, TemplateNode, TransitionManager, Value } from '#client' */ +/** @import { Fork } from '../../reactivity/forks.js'; */ import { EACH_INDEX_REACTIVE, EACH_IS_ANIMATED, @@ -266,8 +267,9 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f fallback = branch(() => fallback_fn(anchor)); } } else { - if (active_fork !== null && should_defer_append()) { + if (should_defer_append()) { var keys = new Set(); + var fork = /** @type {Fork} */ (active_fork); for (i = 0; i < length; i += 1) { value = array[i]; @@ -303,11 +305,11 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f for (const [key, item] of state.items) { if (!keys.has(key)) { - active_fork.skipped_effects.add(item.e); + fork.skipped_effects.add(item.e); } } - active_fork?.add_callback(commit); + fork.add_callback(commit); } else { commit(); } diff --git a/packages/svelte/src/internal/client/dom/blocks/if.js b/packages/svelte/src/internal/client/dom/blocks/if.js index e9861e570a..32a39392f2 100644 --- a/packages/svelte/src/internal/client/dom/blocks/if.js +++ b/packages/svelte/src/internal/client/dom/blocks/if.js @@ -1,4 +1,5 @@ /** @import { Effect, TemplateNode } from '#client' */ +/** @import { Fork } from '../../reactivity/forks.js'; */ import { EFFECT_TRANSPARENT } from '#client/constants'; import { hydrate_next, @@ -112,7 +113,7 @@ export function if_block(node, fn, elseif = false) { } } - var defer = active_fork !== null && should_defer_append(); + var defer = should_defer_append(); var target = anchor; if (defer) { @@ -125,13 +126,15 @@ export function if_block(node, fn, elseif = false) { } if (defer) { + var fork = /** @type {Fork} */ (active_fork); + const skipped = condition ? alternate_effect : consequent_effect; if (skipped !== null) { // TODO need to do this for other kinds of blocks - active_fork?.skipped_effects.add(skipped); + fork.skipped_effects.add(skipped); } - active_fork?.add_callback(commit); + fork.add_callback(commit); } else { commit(); } diff --git a/packages/svelte/src/internal/client/dom/blocks/key.js b/packages/svelte/src/internal/client/dom/blocks/key.js index 021d9dec9e..d3b9d0a987 100644 --- a/packages/svelte/src/internal/client/dom/blocks/key.js +++ b/packages/svelte/src/internal/client/dom/blocks/key.js @@ -1,4 +1,5 @@ /** @import { Effect, TemplateNode } from '#client' */ +/** @import { Fork } from '../../reactivity/forks.js'; */ import { UNINITIALIZED } from '../../../../constants.js'; import { block, branch, pause_effect } from '../../reactivity/effects.js'; import { not_equal, safe_not_equal } from '../../reactivity/equality.js'; @@ -55,7 +56,7 @@ export function key_block(node, get_key, render_fn) { if (changed(key, (key = get_key()))) { var target = anchor; - var defer = active_fork !== null && should_defer_append(); + var defer = should_defer_append(); if (defer) { offscreen_fragment = document.createDocumentFragment(); @@ -65,7 +66,7 @@ export function key_block(node, get_key, render_fn) { pending_effect = branch(() => render_fn(target)); if (defer) { - active_fork?.add_callback(commit); + /** @type {Fork} */ (active_fork).add_callback(commit); } else { commit(); } diff --git a/packages/svelte/src/internal/client/dom/blocks/svelte-component.js b/packages/svelte/src/internal/client/dom/blocks/svelte-component.js index 921f04670e..fdd635b061 100644 --- a/packages/svelte/src/internal/client/dom/blocks/svelte-component.js +++ b/packages/svelte/src/internal/client/dom/blocks/svelte-component.js @@ -1,4 +1,5 @@ /** @import { TemplateNode, Dom, Effect } from '#client' */ +/** @import { Fork } from '../../reactivity/forks.js'; */ import { EFFECT_TRANSPARENT } from '#client/constants'; import { block, branch, pause_effect } from '../../reactivity/effects.js'; import { active_fork } from '../../reactivity/forks.js'; @@ -53,7 +54,7 @@ export function component(node, get_component, render_fn) { block(() => { if (component === (component = get_component())) return; - var defer = active_fork !== null && should_defer_append(); + var defer = should_defer_append(); if (component) { var target = anchor; @@ -67,7 +68,7 @@ export function component(node, get_component, render_fn) { } if (defer) { - active_fork?.add_callback(commit); + /** @type {Fork} */ (active_fork).add_callback(commit); } else { commit(); } diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js index aa4d510730..c4b0883607 100644 --- a/packages/svelte/src/internal/client/reactivity/effects.js +++ b/packages/svelte/src/internal/client/reactivity/effects.js @@ -343,7 +343,7 @@ export function template_effect(fn, sync = [], async = [], d = derived) { var parent = /** @type {Effect} */ (active_effect); if (async.length > 0) { - var fork = active_fork; + var fork = /** @type {Fork} */ (active_fork); var restore = capture(); Promise.all(async.map((expression) => async_derived(expression))).then((result) => { @@ -355,11 +355,9 @@ export function template_effect(fn, sync = [], async = [], d = derived) { var effect = create_template_effect(fn, [...sync.map(d), ...result]); - if (fork !== null) { - fork.run(() => { - schedule_effect(effect); - }); - } + fork.run(() => { + schedule_effect(effect); + }); }); } else { create_template_effect(fn, sync.map(d));