From c6eb00e764fbcec91af3459f2ac4d6bf01a16ee6 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 26 Mar 2024 10:05:17 -0400 Subject: [PATCH] fix head hydration --- packages/svelte/src/internal/client/dom/blocks/each.js | 8 +------- .../src/internal/client/dom/blocks/svelte-head.js | 10 ++++++++-- packages/svelte/src/internal/client/dom/hydration.js | 10 ---------- packages/svelte/src/internal/client/render.js | 3 +-- 4 files changed, 10 insertions(+), 21 deletions(-) diff --git a/packages/svelte/src/internal/client/dom/blocks/each.js b/packages/svelte/src/internal/client/dom/blocks/each.js index 359a504444..3620c21309 100644 --- a/packages/svelte/src/internal/client/dom/blocks/each.js +++ b/packages/svelte/src/internal/client/dom/blocks/each.js @@ -6,13 +6,7 @@ import { EACH_ITEM_REACTIVE, EACH_KEYED } from '../../../../constants.js'; -import { - hydrate_anchor, - hydrate_nodes, - hydrating, - set_hydrating, - update_hydrate_nodes -} from '../hydration.js'; +import { hydrate_anchor, hydrate_nodes, hydrating, set_hydrating } from '../hydration.js'; import { empty } from '../operations.js'; import { insert, remove } from '../reconciler.js'; import { untrack } from '../../runtime.js'; diff --git a/packages/svelte/src/internal/client/dom/blocks/svelte-head.js b/packages/svelte/src/internal/client/dom/blocks/svelte-head.js index 5ef9c53ea8..4a534dd101 100644 --- a/packages/svelte/src/internal/client/dom/blocks/svelte-head.js +++ b/packages/svelte/src/internal/client/dom/blocks/svelte-head.js @@ -1,4 +1,4 @@ -import { hydrate_nodes, hydrating, set_hydrate_nodes, update_hydrate_nodes } from '../hydration.js'; +import { hydrate_anchor, hydrate_nodes, hydrating, set_hydrate_nodes } from '../hydration.js'; import { empty } from '../operations.js'; import { render_effect } from '../../reactivity/effects.js'; import { remove } from '../reconciler.js'; @@ -15,7 +15,13 @@ export function head(render_fn) { if (hydrating) { previous_hydrate_nodes = hydrate_nodes; - update_hydrate_nodes(document.head.firstChild); + + let anchor = /** @type {import('#client').TemplateNode} */ (document.head.firstChild); + while (anchor.nodeType !== 8 || /** @type {Comment} */ (anchor).data !== '[') { + anchor = /** @type {import('#client').TemplateNode} */ (anchor.nextSibling); + } + + anchor = /** @type {import('#client').TemplateNode} */ (hydrate_anchor(anchor)); } var anchor = document.head.appendChild(empty()); diff --git a/packages/svelte/src/internal/client/dom/hydration.js b/packages/svelte/src/internal/client/dom/hydration.js index 100b69e2f4..e86b04514f 100644 --- a/packages/svelte/src/internal/client/dom/hydration.js +++ b/packages/svelte/src/internal/client/dom/hydration.js @@ -25,16 +25,6 @@ export function set_hydrate_nodes(nodes) { hydrate_nodes = /** @type {import('#client').TemplateNode[]} */ (nodes); } -/** - * @param {Node | null} first - * @param {boolean} [insert_text] Whether to insert an empty text node if `nodes` is empty - */ -export function update_hydrate_nodes(first, insert_text) { - const nodes = get_hydrate_nodes(first, insert_text); - set_hydrate_nodes(nodes); - return nodes; -} - /** * Returns all nodes between the first `...` comment tag pair encountered. * @param {Node} node diff --git a/packages/svelte/src/internal/client/render.js b/packages/svelte/src/internal/client/render.js index 0cd7813c9d..7f9a25a85b 100644 --- a/packages/svelte/src/internal/client/render.js +++ b/packages/svelte/src/internal/client/render.js @@ -15,8 +15,7 @@ import { hydrate_nodes, hydrating, set_hydrate_nodes, - set_hydrating, - update_hydrate_nodes + set_hydrating } from './dom/hydration.js'; import { array_from } from './utils.js'; import { handle_event_propagation } from './dom/elements/events.js';