From fb413ab5e050e380173d76c86fa6630472c60d04 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sun, 1 Dec 2024 17:28:14 -0500 Subject: [PATCH 1/2] chore: better SSR output for --- .../3-transform/server/visitors/SvelteElement.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteElement.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteElement.js index d53a223dbe78..971c3b1fefc5 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteElement.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteElement.js @@ -14,13 +14,14 @@ import { build_template } from './shared/utils.js'; */ export function SvelteElement(node, context) { let tag = /** @type {Expression} */ (context.visit(node.tag)); - if (tag.type !== 'Identifier') { - const tag_id = context.state.scope.generate('$$tag'); - context.state.init.push(b.const(tag_id, tag)); - tag = b.id(tag_id); - } if (dev) { + if (tag.type !== 'Identifier') { + const tag_id = context.state.scope.generate('$$tag'); + context.state.init.push(b.const(tag_id, tag)); + tag = b.id(tag_id); + } + if (node.fragment.nodes.length > 0) { context.state.init.push(b.stmt(b.call('$.validate_void_dynamic_element', b.thunk(tag)))); } From fb2b10b85b655d9410fb7a9ad0f7b0f2ba062413 Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Mon, 2 Dec 2024 10:23:10 +0100 Subject: [PATCH 2/2] Update packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteElement.js --- .../phases/3-transform/server/visitors/SvelteElement.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteElement.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteElement.js index 971c3b1fefc5..9f6faa33c8eb 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteElement.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteElement.js @@ -16,6 +16,8 @@ export function SvelteElement(node, context) { let tag = /** @type {Expression} */ (context.visit(node.tag)); if (dev) { + // Ensure getters/function calls aren't called multiple times. + // If we ever start referencing `tag` more than once in prod, move this out of the if block. if (tag.type !== 'Identifier') { const tag_id = context.state.scope.generate('$$tag'); context.state.init.push(b.const(tag_id, tag));