diff --git a/.changeset/spotty-crabs-give.md b/.changeset/spotty-crabs-give.md new file mode 100644 index 0000000000..e66efd52d8 --- /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 eb04cd9397..50044931d2 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 @@ -2059,7 +2059,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 7f7b0ebe98..a6c41df5ce 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) { - 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}`; } 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 c042178844..5eaa55aa49 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 += `