nested
diff --git a/.changeset/six-files-speak.md b/.changeset/six-files-speak.md new file mode 100644 index 000000000000..1667b164c66c --- /dev/null +++ b/.changeset/six-files-speak.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: remove outer hydration markers diff --git a/packages/svelte/src/internal/client/render.js b/packages/svelte/src/internal/client/render.js index ecd22a1db6f1..f5e32a219699 100644 --- a/packages/svelte/src/internal/client/render.js +++ b/packages/svelte/src/internal/client/render.js @@ -120,19 +120,9 @@ export function hydrate(component, options) { set_hydrating(true); set_hydrate_node(/** @type {Comment} */ (anchor)); - hydrate_next(); const instance = _mount(component, { ...options, anchor }); - if ( - hydrate_node === null || - hydrate_node.nodeType !== COMMENT_NODE || - /** @type {Comment} */ (hydrate_node).data !== HYDRATION_END - ) { - w.hydration_mismatch(); - throw HYDRATION_ERROR; - } - set_hydrating(false); return /** @type {Exports} */ (instance); @@ -247,6 +237,15 @@ function _mount(Component, { target, anchor, props = {}, events, context, intro if (hydrating) { /** @type {Effect} */ (active_effect).nodes_end = hydrate_node; + + if ( + hydrate_node === null || + hydrate_node.nodeType !== COMMENT_NODE || + /** @type {Comment} */ (hydrate_node).data !== HYDRATION_END + ) { + w.hydration_mismatch(); + throw HYDRATION_ERROR; + } } if (context) { diff --git a/packages/svelte/src/internal/server/renderer.js b/packages/svelte/src/internal/server/renderer.js index 21ae91fbb75b..a77afd68b3b9 100644 --- a/packages/svelte/src/internal/server/renderer.js +++ b/packages/svelte/src/internal/server/renderer.js @@ -516,8 +516,7 @@ export class Renderer { } let head = content.head + renderer.global.get_title(); - - const body = BLOCK_OPEN + content.body + BLOCK_CLOSE; // this inserts a fake boundary so hydration matches + let body = content.body; for (const { hash, code } of renderer.global.css) { head += ``; diff --git a/packages/svelte/src/internal/server/renderer.test.ts b/packages/svelte/src/internal/server/renderer.test.ts index 2b2bf14cf769..7112bacd7578 100644 --- a/packages/svelte/src/internal/server/renderer.test.ts +++ b/packages/svelte/src/internal/server/renderer.test.ts @@ -14,7 +14,7 @@ test('collects synchronous body content by default', () => { const { head, body } = Renderer.render(component as unknown as Component); expect(head).toBe(''); - expect(body).toBe('abc'); + expect(body).toBe('abc'); }); test('child type switches content area (head vs body)', () => { @@ -28,7 +28,7 @@ test('child type switches content area (head vs body)', () => { const { head, body } = Renderer.render(component as unknown as Component); expect(head).toBe('
Hello world!
+Hello world!
diff --git a/packages/svelte/tests/hydration/samples/dynamic-text-changed/_expected.html b/packages/svelte/tests/hydration/samples/dynamic-text-changed/_expected.html index 04266bf7f36f..11e3f55d6b56 100644 --- a/packages/svelte/tests/hydration/samples/dynamic-text-changed/_expected.html +++ b/packages/svelte/tests/hydration/samples/dynamic-text-changed/_expected.html @@ -1 +1 @@ -a
empty
+a
empty
diff --git a/packages/svelte/tests/hydration/samples/each-block-less-nodes-on-client/_expected.html b/packages/svelte/tests/hydration/samples/each-block-less-nodes-on-client/_expected.html index 4b28b305d5d2..2b2a31b92633 100644 --- a/packages/svelte/tests/hydration/samples/each-block-less-nodes-on-client/_expected.html +++ b/packages/svelte/tests/hydration/samples/each-block-less-nodes-on-client/_expected.html @@ -1 +1 @@ -foo
+foo
diff --git a/packages/svelte/tests/hydration/samples/input-checked-attribute-sibling/_expected.html b/packages/svelte/tests/hydration/samples/input-checked-attribute-sibling/_expected.html index 521f9c52b857..bcd53f878357 100644 --- a/packages/svelte/tests/hydration/samples/input-checked-attribute-sibling/_expected.html +++ b/packages/svelte/tests/hydration/samples/input-checked-attribute-sibling/_expected.html @@ -1 +1 @@ -. +. diff --git a/packages/svelte/tests/hydration/samples/input-value-changed/_expected.html b/packages/svelte/tests/hydration/samples/input-value-changed/_expected.html index c9bc1409d78b..c5384e717e67 100644 --- a/packages/svelte/tests/hydration/samples/input-value-changed/_expected.html +++ b/packages/svelte/tests/hydration/samples/input-value-changed/_expected.html @@ -1 +1 @@ - + diff --git a/packages/svelte/tests/hydration/samples/noscript/_expected.html b/packages/svelte/tests/hydration/samples/noscript/_expected.html index a587a13af1b8..990ce87303d2 100644 --- a/packages/svelte/tests/hydration/samples/noscript/_expected.html +++ b/packages/svelte/tests/hydration/samples/noscript/_expected.html @@ -1 +1 @@ -Count: 1
+Count: 1
diff --git a/packages/svelte/tests/hydration/samples/pre-first-node-newline/_expected.html b/packages/svelte/tests/hydration/samples/pre-first-node-newline/_expected.html index a4d2df2147a7..26de34d1ed27 100644 --- a/packages/svelte/tests/hydration/samples/pre-first-node-newline/_expected.html +++ b/packages/svelte/tests/hydration/samples/pre-first-node-newline/_expected.html @@ -1,7 +1,7 @@ -static content no line
static content ignored line +diff --git a/packages/svelte/tests/hydration/samples/removes-undefined-attributes/_expected.html b/packages/svelte/tests/hydration/samples/removes-undefined-attributes/_expected.html index 4af6885faf60..cc789c8f5142 100644 --- a/packages/svelte/tests/hydration/samples/removes-undefined-attributes/_expected.html +++ b/packages/svelte/tests/hydration/samples/removes-undefined-attributes/_expected.html @@ -1 +1 @@ - + diff --git a/packages/svelte/tests/hydration/samples/repair-mismatched-a-href/_expected.html b/packages/svelte/tests/hydration/samples/repair-mismatched-a-href/_expected.html index 1755e9bfe23b..e1076af2ec8b 100644 --- a/packages/svelte/tests/hydration/samples/repair-mismatched-a-href/_expected.html +++ b/packages/svelte/tests/hydration/samples/repair-mismatched-a-href/_expected.html @@ -1 +1 @@ -foo foo +foo foo diff --git a/packages/svelte/tests/hydration/samples/safari-borking/_override.html b/packages/svelte/tests/hydration/samples/safari-borking/_override.html index b3665d1f80eb..876815e7a9ef 100644 --- a/packages/svelte/tests/hydration/samples/safari-borking/_override.html +++ b/packages/svelte/tests/hydration/samples/safari-borking/_override.html @@ -1 +1 @@ -static content no linestatic content ignored linestatic content relevant line+-
hydrated
+hydrated
diff --git a/packages/svelte/tests/hydration/samples/standalone-component/_expected.html b/packages/svelte/tests/hydration/samples/standalone-component/_expected.html index 119576aa7360..96850f7bdf73 100644 --- a/packages/svelte/tests/hydration/samples/standalone-component/_expected.html +++ b/packages/svelte/tests/hydration/samples/standalone-component/_expected.html @@ -1 +1 @@ -child
child
child
child
+child
child
child
child
diff --git a/packages/svelte/tests/hydration/samples/standalone-snippet/_expected.html b/packages/svelte/tests/hydration/samples/standalone-snippet/_expected.html index 61fc31a95e7d..acb14818c2c9 100644 --- a/packages/svelte/tests/hydration/samples/standalone-snippet/_expected.html +++ b/packages/svelte/tests/hydration/samples/standalone-snippet/_expected.html @@ -1 +1 @@ -thing
thing
thing
thing
+thing
thing
thing
thing
diff --git a/packages/svelte/tests/hydration/samples/surrounding-whitespace/_expected.html b/packages/svelte/tests/hydration/samples/surrounding-whitespace/_expected.html index 7b51bed662eb..e728b682d0cd 100644 --- a/packages/svelte/tests/hydration/samples/surrounding-whitespace/_expected.html +++ b/packages/svelte/tests/hydration/samples/surrounding-whitespace/_expected.html @@ -1,2 +1,2 @@ - hello + hello diff --git a/packages/svelte/tests/hydration/samples/surrounding-whitespace/_override.html b/packages/svelte/tests/hydration/samples/surrounding-whitespace/_override.html index 7b51bed662eb..e728b682d0cd 100644 --- a/packages/svelte/tests/hydration/samples/surrounding-whitespace/_override.html +++ b/packages/svelte/tests/hydration/samples/surrounding-whitespace/_override.html @@ -1,2 +1,2 @@ - hello + hello diff --git a/packages/svelte/tests/hydration/samples/text-empty-2/_expected.html b/packages/svelte/tests/hydration/samples/text-empty-2/_expected.html index e14014c2f057..ff12f10bfb75 100644 --- a/packages/svelte/tests/hydration/samples/text-empty-2/_expected.html +++ b/packages/svelte/tests/hydration/samples/text-empty-2/_expected.html @@ -1 +1 @@ - + diff --git a/packages/svelte/tests/hydration/samples/text-empty/_expected.html b/packages/svelte/tests/hydration/samples/text-empty/_expected.html index c4d823410f6c..2e03580f422c 100644 --- a/packages/svelte/tests/hydration/samples/text-empty/_expected.html +++ b/packages/svelte/tests/hydration/samples/text-empty/_expected.html @@ -1 +1 @@ -x +x diff --git a/packages/svelte/tests/hydration/samples/whitespace-at-block-start/_override.html b/packages/svelte/tests/hydration/samples/whitespace-at-block-start/_override.html index 7402247877d7..24b6bae7b8f1 100644 --- a/packages/svelte/tests/hydration/samples/whitespace-at-block-start/_override.html +++ b/packages/svelte/tests/hydration/samples/whitespace-at-block-start/_override.html @@ -1,2 +1,2 @@ - -nested
nested