From ea0acceb3f0b0b9b4eaf96e88196b363ce0577d5 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 26 Jun 2024 21:44:13 -0400 Subject: [PATCH] tidy up --- .../src/internal/client/dom/blocks/each.js | 39 +------------------ .../src/internal/client/dom/blocks/if.js | 3 ++ .../src/internal/client/dom/template.js | 2 +- .../src/internal/client/reactivity/effects.js | 7 ++-- 4 files changed, 9 insertions(+), 42 deletions(-) diff --git a/packages/svelte/src/internal/client/dom/blocks/each.js b/packages/svelte/src/internal/client/dom/blocks/each.js index e20d4ec41f..1b863fb4ce 100644 --- a/packages/svelte/src/internal/client/dom/blocks/each.js +++ b/packages/svelte/src/internal/client/dom/blocks/each.js @@ -24,7 +24,8 @@ import { run_out_transitions, pause_children, pause_effect, - resume_effect + resume_effect, + get_first_node } from '../../reactivity/effects.js'; import { source, mutable_source, set } from '../../reactivity/sources.js'; import { is_array, is_frozen } from '../../utils.js'; @@ -480,42 +481,6 @@ function create_item(anchor, prev, next, value, key, index, render_fn, flags) { } } -/** - * @param {import('#client').TemplateNode} dom - * @param {import("#client").Effect} effect - * @returns {import('#client').TemplateNode} - */ -function get_adjusted_first_node(dom, effect) { - if ((dom.nodeType === 3 && /** @type {Text} */ (dom).data === '') || dom.nodeType === 8) { - var adjusted = effect.first; - var next; - while (adjusted !== null) { - next = adjusted.first; - if (adjusted.dom !== null) { - break; - } else if (next === null) { - return /** @type {import('#client').TemplateNode} */ (dom.previousSibling); - } - adjusted = next; - } - return get_first_node(/** @type {import("#client").Effect} */ (adjusted)); - } - return dom; -} - -/** - * - * @param {import('#client').Effect} effect - * @returns {import('#client').TemplateNode} - */ -function get_first_node(effect) { - var dom = effect.dom; - if (is_array(dom)) { - return get_adjusted_first_node(dom[0], effect); - } - return get_adjusted_first_node(/** @type {import('#client').TemplateNode} **/ (dom), effect); -} - /** * @param {import('#client').EachItem} item * @param {import('#client').EachItem | null} next diff --git a/packages/svelte/src/internal/client/dom/blocks/if.js b/packages/svelte/src/internal/client/dom/blocks/if.js index 80ed8c09f4..25b67ce189 100644 --- a/packages/svelte/src/internal/client/dom/blocks/if.js +++ b/packages/svelte/src/internal/client/dom/blocks/if.js @@ -3,6 +3,7 @@ import { hydrate_nodes, hydrating, set_hydrating } from '../hydration.js'; import { remove } from '../reconciler.js'; import { block, branch, pause_effect, resume_effect } from '../../reactivity/effects.js'; import { HYDRATION_END_ELSE } from '../../../../constants.js'; +import { assign_nodes } from '../template.js'; /** * @param {Comment} anchor @@ -31,6 +32,8 @@ export function if_block( var flags = elseif ? EFFECT_TRANSPARENT : 0; block(() => { + assign_nodes(null, anchor); // TODO `block(anchor, () => {...})` + if (condition === (condition = !!get_condition())) return; /** Whether or not there was a hydration mismatch. Needs to be a `let` or else it isn't treeshaken out */ diff --git a/packages/svelte/src/internal/client/dom/template.js b/packages/svelte/src/internal/client/dom/template.js index 264c5c1a4f..70b6cf16df 100644 --- a/packages/svelte/src/internal/client/dom/template.js +++ b/packages/svelte/src/internal/client/dom/template.js @@ -15,7 +15,7 @@ import { queue_micro_task } from './task.js'; * @param {T} dom * @param {import("#client").Effect} effect */ -export function push_template_node( +function push_template_node( dom, effect = /** @type {import('#client').Effect} */ (current_effect) ) { diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js index a12c9cc48c..24cebba41c 100644 --- a/packages/svelte/src/internal/client/reactivity/effects.js +++ b/packages/svelte/src/internal/client/reactivity/effects.js @@ -71,8 +71,6 @@ export function push_effect(effect, parent_effect) { } } -var uid = 1; - /** * @param {number} type * @param {null | (() => void | (() => void))} fn @@ -84,7 +82,6 @@ function create_effect(type, fn, sync) { /** @type {import('#client').Effect} */ var effect = { - id: uid++, ctx: current_component_context, deps: null, dom: null, @@ -388,8 +385,9 @@ export function destroy_effect(effect, remove_dom = true) { /** * @param {import('#client').Effect} effect + * @returns {import('#client').TemplateNode} */ -function get_first_node(effect) { +export function get_first_node(effect) { if (effect.nodes !== null) { if (effect.nodes.start != null) { return effect.nodes.start; @@ -411,6 +409,7 @@ function get_first_node(effect) { /** * @param {import('#client').Effect} effect + * @returns {import('#client').TemplateNode} */ function get_last_node(effect) { if (effect.nodes !== null) {