From 6f3828e11ec49c00a4af717fea6dc5865def888c Mon Sep 17 00:00:00 2001 From: paoloricciuti Date: Thu, 15 Jan 2026 17:52:44 +0100 Subject: [PATCH] fix: don't reset static elements with debug/snippets --- .changeset/little-aliens-pick.md | 5 +++++ .../phases/3-transform/client/visitors/RegularElement.js | 7 ++++--- .../phases/3-transform/client/visitors/shared/fragment.js | 5 ++--- .../tests/hydration/samples/no-reset-debug/_config.js | 3 +++ .../tests/hydration/samples/no-reset-debug/main.svelte | 8 ++++++++ .../tests/hydration/samples/no-reset-snippet/_config.js | 3 +++ .../tests/hydration/samples/no-reset-snippet/main.svelte | 6 ++++++ 7 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 .changeset/little-aliens-pick.md create mode 100644 packages/svelte/tests/hydration/samples/no-reset-debug/_config.js create mode 100644 packages/svelte/tests/hydration/samples/no-reset-debug/main.svelte create mode 100644 packages/svelte/tests/hydration/samples/no-reset-snippet/_config.js create mode 100644 packages/svelte/tests/hydration/samples/no-reset-snippet/main.svelte diff --git a/.changeset/little-aliens-pick.md b/.changeset/little-aliens-pick.md new file mode 100644 index 0000000000..1433625551 --- /dev/null +++ b/.changeset/little-aliens-pick.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: don't reset static elements with debug/snippets diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js index 690715df84..c780350d3e 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js @@ -21,7 +21,7 @@ import { build_set_class, build_set_style } from './shared/element.js'; -import { process_children } from './shared/fragment.js'; +import { process_children, is_static_element } from './shared/fragment.js'; import { build_render_statement, build_template_chunk, Memoizer } from './shared/utils.js'; import { visit_event_attribute } from './shared/events.js'; @@ -356,8 +356,9 @@ export function RegularElement(node, context) { let arg = context.state.node; // If `hydrate_node` is set inside the element, we need to reset it - // after the element has been hydrated - let needs_reset = trimmed.some((node) => node.type !== 'Text'); + // after the element has been hydrated. We need to check if any child + // would actually advance the hydrate_node cursor - static elements don't. + let needs_reset = trimmed.some((node) => node.type !== 'Text' && !is_static_element(node)); // The same applies if it's a `