From d86251cdb961e5828be16fe18cbe43fc5868fb0e Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sat, 25 Nov 2023 16:53:30 -0500 Subject: [PATCH 1/4] improve output for --- .../3-transform/client/visitors/template.js | 13 ++++++++- .../samples/svelte-element/_config.js | 3 +++ .../_expected/client/index.svelte.js | 17 ++++++++++++ .../_expected/server/index.svelte.js | 27 +++++++++++++++++++ .../samples/svelte-element/index.svelte | 5 ++++ 5 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 packages/svelte/tests/snapshot/samples/svelte-element/_config.js create mode 100644 packages/svelte/tests/snapshot/samples/svelte-element/_expected/client/index.svelte.js create mode 100644 packages/svelte/tests/snapshot/samples/svelte-element/_expected/server/index.svelte.js create mode 100644 packages/svelte/tests/snapshot/samples/svelte-element/index.svelte diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js index b5b58c34dc8b..818d83d869c2 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js @@ -347,6 +347,15 @@ function serialize_element_spread_attributes(attributes, context, element, eleme * @returns {boolean} */ function serialize_dynamic_element_spread_attributes(attributes, context, element_id) { + if (attributes.length === 0) { + if (context.state.analysis.stylesheet.id) { + context.state.init.push( + b.stmt(b.call('$.class_name', element_id, b.literal(context.state.analysis.stylesheet.id))) + ); + } + return false; + } + let is_reactive = false; /** @type {import('estree').Expression[]} */ @@ -2101,7 +2110,9 @@ export const template_visitors = { '$.element', context.state.node, get_tag, - b.arrow([element_id, b.id('$$anchor')], b.block(inner)), + inner.length === 0 + ? /** @type {any} */ (undefined) + : b.arrow([element_id, b.id('$$anchor')], b.block(inner)), namespace === 'http://www.w3.org/2000/svg' ? b.literal(true) : /** @type {any} */ (undefined) diff --git a/packages/svelte/tests/snapshot/samples/svelte-element/_config.js b/packages/svelte/tests/snapshot/samples/svelte-element/_config.js new file mode 100644 index 000000000000..f47bee71df87 --- /dev/null +++ b/packages/svelte/tests/snapshot/samples/svelte-element/_config.js @@ -0,0 +1,3 @@ +import { test } from '../../test'; + +export default test({}); diff --git a/packages/svelte/tests/snapshot/samples/svelte-element/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/svelte-element/_expected/client/index.svelte.js new file mode 100644 index 000000000000..1726d2f0f674 --- /dev/null +++ b/packages/svelte/tests/snapshot/samples/svelte-element/_expected/client/index.svelte.js @@ -0,0 +1,17 @@ +// index.svelte (Svelte v5.0.0-next.13) +// Note: compiler output will change before 5.0 is released! +import "svelte/internal/disclose-version"; +import * as $ from "svelte/internal"; + +export default function Svelte_element($$anchor, $$props) { + $.push($$props, true); + + let tag = $.prop_source($$props, "tag", 'hr', false); + /* Init */ + var fragment = $.comment($$anchor); + var node = $.child_frag(fragment); + + $.element(node, () => $.get(tag)); + $.close_frag($$anchor, fragment); + $.pop(); +} \ No newline at end of file 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 new file mode 100644 index 000000000000..33f61d5dca02 --- /dev/null +++ b/packages/svelte/tests/snapshot/samples/svelte-element/_expected/server/index.svelte.js @@ -0,0 +1,27 @@ +// index.svelte (Svelte v5.0.0-next.13) +// Note: compiler output will change before 5.0 is released! +import * as $ from "svelte/internal/server"; + +export default function Svelte_element($$payload, $$props) { + $.push(true); + + let { tag = 'hr' } = $$props; + const anchor = $.create_anchor($$payload); + + $$payload.out += `${anchor}`; + + if (tag) { + const anchor_1 = $.create_anchor($$payload); + + $$payload.out += `<${tag}>`; + + if (!$.VoidElements.has(tag)) { + $$payload.out += `${anchor_1}`; + $$payload.out += `${anchor_1}`; + } + } + + $$payload.out += `${anchor}`; + $.bind_props($$props, { tag }); + $.pop(); +} \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/svelte-element/index.svelte b/packages/svelte/tests/snapshot/samples/svelte-element/index.svelte new file mode 100644 index 000000000000..cd543173a181 --- /dev/null +++ b/packages/svelte/tests/snapshot/samples/svelte-element/index.svelte @@ -0,0 +1,5 @@ + + + From 697748420fa095a14d3359760aa34958d82cb54f Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sat, 25 Nov 2023 17:32:22 -0500 Subject: [PATCH 2/4] fix --- packages/svelte/src/internal/client/render.js | 4 ++-- .../samples/svelte-element/_expected/client/index.svelte.js | 4 ++-- .../samples/svelte-element/_expected/server/index.svelte.js | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/svelte/src/internal/client/render.js b/packages/svelte/src/internal/client/render.js index afb060639a54..6b5408a40792 100644 --- a/packages/svelte/src/internal/client/render.js +++ b/packages/svelte/src/internal/client/render.js @@ -1542,7 +1542,7 @@ function swap_block_dom(block, from, to) { /** * @param {Comment} anchor_node * @param {() => string} tag_fn - * @param {null | ((element: Element, anchor: Node) => void)} render_fn + * @param {undefined | ((element: Element, anchor: Node) => void)} render_fn * @param {any} is_svg * @returns {void} */ @@ -1582,7 +1582,7 @@ export function element(anchor_node, tag_fn, render_fn, is_svg = false) { block.d = null; } element = next_element; - if (element !== null && render_fn !== null) { + if (element !== null && render_fn !== undefined) { let anchor; if (current_hydration_fragment !== null) { // Use the existing ssr comment as the anchor so that the inner open and close diff --git a/packages/svelte/tests/snapshot/samples/svelte-element/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/svelte-element/_expected/client/index.svelte.js index 1726d2f0f674..263b00e5269d 100644 --- a/packages/svelte/tests/snapshot/samples/svelte-element/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/svelte-element/_expected/client/index.svelte.js @@ -1,4 +1,4 @@ -// index.svelte (Svelte v5.0.0-next.13) +// index.svelte (Svelte VERSION) // Note: compiler output will change before 5.0 is released! import "svelte/internal/disclose-version"; import * as $ from "svelte/internal"; @@ -14,4 +14,4 @@ export default function Svelte_element($$anchor, $$props) { $.element(node, () => $.get(tag)); $.close_frag($$anchor, fragment); $.pop(); -} \ No newline at end of file +} 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 33f61d5dca02..6c4e6ee8b03d 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 @@ -1,4 +1,4 @@ -// index.svelte (Svelte v5.0.0-next.13) +// index.svelte (Svelte VERSION) // Note: compiler output will change before 5.0 is released! import * as $ from "svelte/internal/server"; @@ -24,4 +24,4 @@ export default function Svelte_element($$payload, $$props) { $$payload.out += `${anchor}`; $.bind_props($$props, { tag }); $.pop(); -} \ No newline at end of file +} From bbf4f79167be1deaf11a8245038154d1bae86ab6 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 27 Nov 2023 12:54:15 -0500 Subject: [PATCH 3/4] changeset --- .changeset/thin-foxes-lick.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/thin-foxes-lick.md diff --git a/.changeset/thin-foxes-lick.md b/.changeset/thin-foxes-lick.md new file mode 100644 index 000000000000..73f86e1bb800 --- /dev/null +++ b/.changeset/thin-foxes-lick.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +chore: improve generated code From 2ecc0bf34f0f1f7a15c97d962e83d93a9a1ba826 Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Mon, 27 Nov 2023 19:14:37 +0100 Subject: [PATCH 4/4] Update .changeset/thin-foxes-lick.md --- .changeset/thin-foxes-lick.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/thin-foxes-lick.md b/.changeset/thin-foxes-lick.md index 73f86e1bb800..904c84cc5cbe 100644 --- a/.changeset/thin-foxes-lick.md +++ b/.changeset/thin-foxes-lick.md @@ -2,4 +2,4 @@ 'svelte': patch --- -chore: improve generated code +chore: improve `` generated code