From 4d6aa3026c7340228d6c7cc61a2ab6bdee1ab88c Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 19 Mar 2024 16:15:18 -0400 Subject: [PATCH] simplify --- .../src/internal/client/dom/blocks/each.js | 5 +-- .../src/internal/client/dom/hydration.js | 39 ++++++++----------- .../src/internal/client/dom/template.js | 2 +- 3 files changed, 19 insertions(+), 27 deletions(-) diff --git a/packages/svelte/src/internal/client/dom/blocks/each.js b/packages/svelte/src/internal/client/dom/blocks/each.js index 0545264ece..06c5025a68 100644 --- a/packages/svelte/src/internal/client/dom/blocks/each.js +++ b/packages/svelte/src/internal/client/dom/blocks/each.js @@ -41,8 +41,6 @@ const LIS_BLOCK = -2; * @returns {void} */ function each(anchor_node, collection, flags, key_fn, render_fn, fallback_fn, reconcile_fn) { - const is_controlled = (flags & EACH_IS_CONTROLLED) !== 0; - /** @type {import('#client').EachBlock} */ const block = { // dom @@ -56,7 +54,8 @@ function each(anchor_node, collection, flags, key_fn, render_fn, fallback_fn, re p: /** @type {import('#client').Block} */ (current_block) }; - hydrate_block_anchor(anchor_node, is_controlled); + const is_controlled = (flags & EACH_IS_CONTROLLED) !== 0; + hydrate_block_anchor(is_controlled ? /** @type {Node} */ (anchor_node.firstChild) : anchor_node); /** @type {import('#client').Effect | null} */ let fallback = null; diff --git a/packages/svelte/src/internal/client/dom/hydration.js b/packages/svelte/src/internal/client/dom/hydration.js index 1b15a9ddbb..c896454659 100644 --- a/packages/svelte/src/internal/client/dom/hydration.js +++ b/packages/svelte/src/internal/client/dom/hydration.js @@ -73,33 +73,26 @@ export function get_hydration_fragment(node, insert_text = false) { } /** - * @param {Text | Comment | Element} anchor_node - * @param {boolean} [is_controlled] + * @param {Node} node * @returns {void} */ -export function hydrate_block_anchor(anchor_node, is_controlled) { - if (hydrating) { - /** @type {Node} */ - let target_node = anchor_node; +export function hydrate_block_anchor(node) { + if (!hydrating) return; - if (is_controlled) { - target_node = /** @type {Node} */ (target_node.firstChild); - } - if (target_node.nodeType === 8) { - // @ts-ignore - let fragment = target_node.$$fragment; - if (fragment === undefined) { - fragment = get_hydration_fragment(target_node); - } else { - schedule_task(() => { - // @ts-expect-error clean up memory - target_node.$$fragment = undefined; - }); - } - set_current_hydration_fragment(fragment); + if (node.nodeType === 8) { + // @ts-ignore + let fragment = node.$$fragment; + if (fragment === undefined) { + fragment = get_hydration_fragment(node); } else { - const first_child = /** @type {Element | null} */ (target_node.firstChild); - set_current_hydration_fragment(first_child === null ? [] : [first_child]); + schedule_task(() => { + // @ts-expect-error clean up memory + node.$$fragment = undefined; + }); } + set_current_hydration_fragment(fragment); + } else { + const first_child = /** @type {Element | null} */ (node.firstChild); + set_current_hydration_fragment(first_child === null ? [] : [first_child]); } } diff --git a/packages/svelte/src/internal/client/dom/template.js b/packages/svelte/src/internal/client/dom/template.js index 6ec040a317..7090420c07 100644 --- a/packages/svelte/src/internal/client/dom/template.js +++ b/packages/svelte/src/internal/client/dom/template.js @@ -90,7 +90,7 @@ export function svg_template_with_script(svg, return_fragment) { function open_template(is_fragment, use_clone_node, anchor, template_element_fn) { if (hydrating) { if (anchor !== null) { - hydrate_block_anchor(anchor, false); + hydrate_block_anchor(anchor); } // In ssr+hydration optimization mode, we might remove the template_element, // so we need to is_fragment flag to properly handle hydrated content accordingly.