From 2c6a09d622ae7094d7a37efd6f152db2e521bacc Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 6 Jun 2024 22:51:29 -0400 Subject: [PATCH 1/2] feat: more efficient output for attributes in SSR --- .changeset/spotty-crabs-give.md | 5 +++++ .../compiler/phases/3-transform/server/transform-server.js | 2 +- packages/svelte/src/internal/server/index.js | 4 ++-- .../_expected/server/main.svelte.js | 2 +- .../state-proxy-literal/_expected/server/index.svelte.js | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 .changeset/spotty-crabs-give.md diff --git a/.changeset/spotty-crabs-give.md b/.changeset/spotty-crabs-give.md new file mode 100644 index 000000000000..e66efd52d8f3 --- /dev/null +++ b/.changeset/spotty-crabs-give.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +feat: more efficient output for attributes in SSR 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 6deb02385ff4..160285fb1cd9 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 @@ -2068,7 +2068,7 @@ function serialize_element_attributes(node, context) { ); context.state.template.push( - t_expression(b.call('$.attr', b.literal(name), value, b.literal(is_boolean))) + t_expression(b.call('$.attr', b.literal(name), value, is_boolean && b.literal(is_boolean))) ); } } diff --git a/packages/svelte/src/internal/server/index.js b/packages/svelte/src/internal/server/index.js index 3b6a0158b351..da0d97593517 100644 --- a/packages/svelte/src/internal/server/index.js +++ b/packages/svelte/src/internal/server/index.js @@ -143,10 +143,10 @@ export function head(payload, fn) { * @template V * @param {string} name * @param {V} value - * @param {boolean} boolean + * @param {boolean} [boolean] * @returns {string} */ -export function attr(name, value, boolean) { +export function attr(name, value, boolean = false) { if (value == null || (!value && boolean) || (value === '' && name === 'class')) return ''; const assignment = boolean ? '' : `="${escape_html(value, true)}"`; return ` ${name}${assignment}`; diff --git a/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/server/main.svelte.js b/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/server/main.svelte.js index c04217884414..5eaa55aa4970 100644 --- a/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/server/main.svelte.js +++ b/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/server/main.svelte.js @@ -5,5 +5,5 @@ export default function Main($$payload) { let x = 'test'; let y = () => 'test'; - $$payload.out += ` `; + $$payload.out += ` `; } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/server/index.svelte.js index 6e96cf823858..3424f807ab01 100644 --- a/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/server/index.svelte.js @@ -11,5 +11,5 @@ export default function State_proxy_literal($$payload) { tpl = ``; } - $$payload.out += ` `; + $$payload.out += ` `; } \ No newline at end of file From bdb231288df4a64e61faa64f79c0cd3d2c8c1b40 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 6 Jun 2024 22:53:16 -0400 Subject: [PATCH 2/2] rename arg --- packages/svelte/src/internal/server/index.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/svelte/src/internal/server/index.js b/packages/svelte/src/internal/server/index.js index da0d97593517..ac69577305e3 100644 --- a/packages/svelte/src/internal/server/index.js +++ b/packages/svelte/src/internal/server/index.js @@ -143,12 +143,12 @@ export function head(payload, fn) { * @template V * @param {string} name * @param {V} value - * @param {boolean} [boolean] + * @param {boolean} [is_boolean] * @returns {string} */ -export function attr(name, value, boolean = false) { - if (value == null || (!value && boolean) || (value === '' && name === 'class')) return ''; - const assignment = boolean ? '' : `="${escape_html(value, true)}"`; +export function attr(name, value, is_boolean = false) { + if (value == null || (!value && is_boolean) || (value === '' && name === 'class')) return ''; + const assignment = is_boolean ? '' : `="${escape_html(value, true)}"`; return ` ${name}${assignment}`; }