From e2350578caeb821c94985db77400f4b73a8e4310 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 16 Jan 2025 17:36:59 -0500 Subject: [PATCH 1/2] fix: create fewer deriveds for concatenated strings --- .changeset/rich-donkeys-wink.md | 5 +++++ .../phases/3-transform/client/visitors/shared/utils.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/rich-donkeys-wink.md diff --git a/.changeset/rich-donkeys-wink.md b/.changeset/rich-donkeys-wink.md new file mode 100644 index 000000000000..be8d02b67052 --- /dev/null +++ b/.changeset/rich-donkeys-wink.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: create fewer deriveds for concatenated strings diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js index 1854baa1e964..bc18a8b7a431 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js @@ -47,7 +47,7 @@ export function build_template_chunk(values, visit, state) { quasi.value.cooked += node.expression.value + ''; } } else { - if (contains_multiple_call_expression) { + if (node.metadata.expression.has_call && contains_multiple_call_expression) { const id = b.id(state.scope.generate('stringified_text')); state.init.push( b.const( From ffbe368f287ca8386c3208d426b2e328a158f011 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 16 Jan 2025 17:41:52 -0500 Subject: [PATCH 2/2] stringified_text -> expression --- .../phases/3-transform/client/visitors/shared/utils.js | 2 +- .../text-nodes-deriveds/_expected/client/index.svelte.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js index bc18a8b7a431..69fd8832143f 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js @@ -48,7 +48,7 @@ export function build_template_chunk(values, visit, state) { } } else { if (node.metadata.expression.has_call && contains_multiple_call_expression) { - const id = b.id(state.scope.generate('stringified_text')); + const id = b.id(state.scope.generate('expression')); state.init.push( b.const( id, diff --git a/packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/client/index.svelte.js index 8e343fcf3602..2e0bd651da38 100644 --- a/packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/client/index.svelte.js @@ -16,11 +16,11 @@ export default function Text_nodes_deriveds($$anchor) { } var p = root(); - const stringified_text = $.derived(() => text1() ?? ''); - const stringified_text_1 = $.derived(() => text2() ?? ''); + const expression = $.derived(() => text1() ?? ''); + const expression_1 = $.derived(() => text2() ?? ''); var text = $.child(p); - $.template_effect(() => $.set_text(text, `${$.get(stringified_text)}${$.get(stringified_text_1)}`)); + $.template_effect(() => $.set_text(text, `${$.get(expression)}${$.get(expression_1)}`)); $.reset(p); $.append($$anchor, p); } \ No newline at end of file