diff --git a/packages/svelte/src/compiler/phases/3-transform/server/transform-server.js b/packages/svelte/src/compiler/phases/3-transform/server/transform-server.js index 26371c16fa..dc07733d9e 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/transform-server.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/transform-server.js @@ -1352,11 +1352,17 @@ const template_visitors = { context.visit(node.fragment, state) ); - const body = b.block([ - b.stmt(b.call('$.element', b.id('$$payload'), tag, b.thunk(attributes), b.thunk(children))) - ]); - - context.state.template.push(block_open, b.if(tag, body), block_close); + context.state.template.push( + b.stmt( + b.call( + '$.element', + b.id('$$payload'), + tag, + attributes.body.length > 0 && b.thunk(attributes), + children.body.length > 0 && b.thunk(children) + ) + ) + ); if (context.state.options.dev) { context.state.template.push(b.stmt(b.call('$.pop_element'))); diff --git a/packages/svelte/src/internal/server/index.js b/packages/svelte/src/internal/server/index.js index d520edc019..926f3ec0d2 100644 --- a/packages/svelte/src/internal/server/index.js +++ b/packages/svelte/src/internal/server/index.js @@ -72,18 +72,24 @@ export function assign_payload(p1, p2) { * @param {() => void} children_fn * @returns {void} */ -export function element(payload, tag, attributes_fn, children_fn) { - payload.out += `<${tag} `; - attributes_fn(); - payload.out += `>`; - - if (!VoidElements.has(tag)) { - children_fn(); - if (!RawTextElements.includes(tag)) { - payload.out += BLOCK_ANCHOR; +export function element(payload, tag, attributes_fn = noop, children_fn = noop) { + payload.out += ``; + + if (tag) { + payload.out += `<${tag} `; + attributes_fn(); + payload.out += `>`; + + if (!VoidElements.has(tag)) { + children_fn(); + if (!RawTextElements.includes(tag)) { + payload.out += BLOCK_ANCHOR; + } + payload.out += ``; } - payload.out += ``; } + + payload.out += ``; } /** diff --git a/packages/svelte/tests/server-side-rendering/samples/head-svelte-components-raw-content/_expected.html b/packages/svelte/tests/server-side-rendering/samples/head-svelte-components-raw-content/_expected.html index c382d388d8..290179a702 100644 --- a/packages/svelte/tests/server-side-rendering/samples/head-svelte-components-raw-content/_expected.html +++ b/packages/svelte/tests/server-side-rendering/samples/head-svelte-components-raw-content/_expected.html @@ -1,17 +1,17 @@ - + lorem - - + + - - + + - + diff --git a/packages/svelte/tests/snapshot/samples/svelte-element/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/svelte-element/_expected/server/index.svelte.js index e9dc078f3c..4a766f7de5 100644 --- a/packages/svelte/tests/snapshot/samples/svelte-element/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/svelte-element/_expected/server/index.svelte.js @@ -3,11 +3,5 @@ import * as $ from "svelte/internal/server"; export default function Svelte_element($$payload, $$props) { let { tag = 'hr' } = $$props; - $$payload.out += ``; - - if (tag) { - $.element($$payload, tag, () => {}, () => {}); - } - - $$payload.out += ``; + $.element($$payload, tag); } \ No newline at end of file