From c644c24fab0b6d187052d5e35b2050e933ca7dda Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sun, 18 Feb 2024 11:40:03 -0500 Subject: [PATCH] chore: improve code generation for `bind:this` in SSR mode --- .changeset/brave-points-sleep.md | 5 +++++ packages/svelte/src/compiler/phases/2-analyze/index.js | 4 +++- .../compiler/phases/3-transform/server/transform-server.js | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 .changeset/brave-points-sleep.md diff --git a/.changeset/brave-points-sleep.md b/.changeset/brave-points-sleep.md new file mode 100644 index 0000000000..6412a09434 --- /dev/null +++ b/.changeset/brave-points-sleep.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +chore: improve code generation for `bind:this` in SSR mode diff --git a/packages/svelte/src/compiler/phases/2-analyze/index.js b/packages/svelte/src/compiler/phases/2-analyze/index.js index f19b60c03f..8b2b806ec7 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/index.js +++ b/packages/svelte/src/compiler/phases/2-analyze/index.js @@ -1060,7 +1060,9 @@ const common_visitors = { parent.type === 'SvelteComponent' || parent.type === 'SvelteSelf' ) { - context.state.analysis.uses_component_bindings = true; + if (node.name !== 'this') { + context.state.analysis.uses_component_bindings = true; + } break; } else if (is_element_node(parent)) { break; 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 5640a1f372..d197ae3e85 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 @@ -853,7 +853,7 @@ function serialize_inline_component(node, component_name, context) { const value = serialize_attribute_value(attribute.value, context, false, true); push_prop(b.prop('init', b.key(attribute.name), value)); - } else if (attribute.type === 'BindDirective') { + } else if (attribute.type === 'BindDirective' && attribute.name !== 'this') { // TODO this needs to turn the whole thing into a while loop because the binding could be mutated eagerly in the child push_prop( b.get(attribute.name, [