Skip to content

Commit 1f99935

Browse files
authored
feat: more efficient checking for missing SSR text node (#12891)
* feat: more efficient checking for missing SSR text node * update tests
1 parent b41300d commit 1f99935

File tree

6 files changed

+20
-12
lines changed

6 files changed

+20
-12
lines changed

.changeset/orange-laws-drop.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
feat: more efficient checking for missing SSR text node

packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/fragment.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,16 @@ export function process_children(nodes, expression, is_element, { visit, state }
3030

3131
if (node.type === 'Text') {
3232
let prev = expression;
33-
expression = () => b.call('$.sibling', prev(true));
33+
expression = () => b.call('$.sibling', prev(false));
3434
state.template.push(node.raw);
3535
return;
3636
}
3737
}
3838

39-
const id = get_node_id(expression(true), state, 'text');
39+
// if this is a standalone `{expression}`, make sure we handle the case where
40+
// no text node was created because the expression was empty during SSR
41+
const needs_hydration_check = sequence.length === 1;
42+
const id = get_node_id(expression(needs_hydration_check), state, 'text');
4043

4144
state.template.push(' ');
4245

packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/client/index.svelte.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export default function Bind_component_snippet($$anchor) {
2727
}
2828
});
2929

30-
var text_1 = $.sibling(node, true);
30+
var text_1 = $.sibling(node);
3131

3232
$.template_effect(() => $.set_text(text_1, ` value: ${$.get(value) ?? ""}`));
3333
$.append($$anchor, fragment);

packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/client/main.svelte.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,17 @@ export default function Main($$anchor) {
99
let y = () => 'test';
1010
var fragment = root();
1111
var div = $.first_child(fragment);
12-
var svg = $.sibling($.sibling(div, true));
13-
var custom_element = $.sibling($.sibling(svg, true));
14-
var div_1 = $.sibling($.sibling(custom_element, true));
12+
var svg = $.sibling($.sibling(div));
13+
var custom_element = $.sibling($.sibling(svg));
14+
var div_1 = $.sibling($.sibling(custom_element));
1515

1616
$.template_effect(() => $.set_attribute(div_1, "foobar", y()));
1717

18-
var svg_1 = $.sibling($.sibling(div_1, true));
18+
var svg_1 = $.sibling($.sibling(div_1));
1919

2020
$.template_effect(() => $.set_attribute(svg_1, "viewBox", y()));
2121

22-
var custom_element_1 = $.sibling($.sibling(svg_1, true));
22+
var custom_element_1 = $.sibling($.sibling(svg_1));
2323

2424
$.template_effect(() => $.set_custom_element_data(custom_element_1, "fooBar", y()));
2525

packages/svelte/tests/snapshot/samples/purity/_expected/client/index.svelte.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ export default function Purity($$anchor) {
1313

1414
p.textContent = Math.max(min, Math.min(max, number));
1515

16-
var p_1 = $.sibling($.sibling(p, true));
16+
var p_1 = $.sibling($.sibling(p));
1717

1818
p_1.textContent = location.href;
1919

20-
var node = $.sibling($.sibling(p_1, true));
20+
var node = $.sibling($.sibling(p_1));
2121

2222
Child(node, { prop: encodeURIComponent(value) });
2323
$.append($$anchor, fragment);

packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/client/index.svelte.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ export default function State_proxy_literal($$anchor) {
1818

1919
$.remove_input_defaults(input);
2020

21-
var input_1 = $.sibling($.sibling(input, true));
21+
var input_1 = $.sibling($.sibling(input));
2222

2323
$.remove_input_defaults(input_1);
2424

25-
var button = $.sibling($.sibling(input_1, true));
25+
var button = $.sibling($.sibling(input_1));
2626

2727
button.__click = [reset, str, tpl];
2828
$.bind_value(input, () => $.get(str), ($$value) => $.set(str, $$value));

0 commit comments

Comments
 (0)