From 943f6459588a77502b77ff389f6fcee7ee31804d Mon Sep 17 00:00:00 2001 From: Alexander Konstantinov Date: Thu, 22 Feb 2024 16:54:31 +0300 Subject: [PATCH 1/4] fix 10602 --- .../render_dom/wrappers/InlineComponent/index.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/svelte/src/compiler/compile/render_dom/wrappers/InlineComponent/index.js b/packages/svelte/src/compiler/compile/render_dom/wrappers/InlineComponent/index.js index d5cf8341dcdd..e29050bdc588 100644 --- a/packages/svelte/src/compiler/compile/render_dom/wrappers/InlineComponent/index.js +++ b/packages/svelte/src/compiler/compile/render_dom/wrappers/InlineComponent/index.js @@ -277,14 +277,13 @@ export default class InlineComponentWrapper extends Wrapper { // statements will become switch_props function body // rewrite last statement, add props update logic statements[statements.length - 1] = b` + for (let #i = 0; #i < ${levels}.length; #i += 1) { + ${props} = @assign(${props}, ${levels}[#i]); + } if (#dirty !== undefined && ${condition}) { - ${props} = @get_spread_update(${levels}, [ + ${props} = @assign(${props}, @get_spread_update(${levels}, [ ${changes} - ]); - } else { - for (let #i = 0; #i < ${levels}.length; #i += 1) { - ${props} = @assign(${props}, ${levels}[#i]); - } + ])); } `; } From 2f2faf5826f29647b39a2263561b93b916dc7e7d Mon Sep 17 00:00:00 2001 From: Alexander Konstantinov Date: Thu, 22 Feb 2024 17:37:10 +0300 Subject: [PATCH 2/4] test --- .../samples/dynamic-component-spread-props/Comp1.svelte | 4 ++++ .../samples/dynamic-component-spread-props/Comp2.svelte | 4 ++++ .../samples/dynamic-component-spread-props/_config.js | 6 ++++++ .../samples/dynamic-component-spread-props/main.svelte | 4 +++- 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/svelte/test/runtime/samples/dynamic-component-spread-props/Comp1.svelte b/packages/svelte/test/runtime/samples/dynamic-component-spread-props/Comp1.svelte index d4fe28a8a370..e87e7ec69912 100644 --- a/packages/svelte/test/runtime/samples/dynamic-component-spread-props/Comp1.svelte +++ b/packages/svelte/test/runtime/samples/dynamic-component-spread-props/Comp1.svelte @@ -1,5 +1,9 @@

value(1) = {value}

+

foo={foo}

+

typeof cb={typeof cb}

diff --git a/packages/svelte/test/runtime/samples/dynamic-component-spread-props/Comp2.svelte b/packages/svelte/test/runtime/samples/dynamic-component-spread-props/Comp2.svelte index 07d41f3d8464..06c4c7acfe74 100644 --- a/packages/svelte/test/runtime/samples/dynamic-component-spread-props/Comp2.svelte +++ b/packages/svelte/test/runtime/samples/dynamic-component-spread-props/Comp2.svelte @@ -1,5 +1,9 @@

value(2) = {value}

+

foo={foo}

+

typeof cb={typeof cb}

diff --git a/packages/svelte/test/runtime/samples/dynamic-component-spread-props/_config.js b/packages/svelte/test/runtime/samples/dynamic-component-spread-props/_config.js index d5ba1ef64b58..c09efb851bc7 100644 --- a/packages/svelte/test/runtime/samples/dynamic-component-spread-props/_config.js +++ b/packages/svelte/test/runtime/samples/dynamic-component-spread-props/_config.js @@ -1,6 +1,8 @@ export default { html: `

value(1) = 1

+

foo=bar

+

typeof cb=function

`, @@ -11,6 +13,8 @@ export default { target.innerHTML, `

value(2) = 2

+

foo=bar

+

typeof cb=function

` ); @@ -19,6 +23,8 @@ export default { target.innerHTML, `

value(1) = 1

+

foo=bar

+

typeof cb=function

` ); diff --git a/packages/svelte/test/runtime/samples/dynamic-component-spread-props/main.svelte b/packages/svelte/test/runtime/samples/dynamic-component-spread-props/main.svelte index b8c45c83a084..082ebbcda26e 100644 --- a/packages/svelte/test/runtime/samples/dynamic-component-spread-props/main.svelte +++ b/packages/svelte/test/runtime/samples/dynamic-component-spread-props/main.svelte @@ -5,8 +5,10 @@ let view = Comp1; $: props = view === Comp1 ? { value: 1 } : { value: 2 }; + const bar = "bar"; + function cb() {} - + From 1f2428d5a428ba8f3edabc2172e71a5e986392ac Mon Sep 17 00:00:00 2001 From: Alexander Konstantinov Date: Thu, 22 Feb 2024 18:15:06 +0300 Subject: [PATCH 3/4] changeset --- .changeset/popular-wombats-try.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/popular-wombats-try.md diff --git a/.changeset/popular-wombats-try.md b/.changeset/popular-wombats-try.md new file mode 100644 index 000000000000..1a37c14709b0 --- /dev/null +++ b/.changeset/popular-wombats-try.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +Fix `svelte:component` props are not properly updated when there are spread props From 47de201fd7ce3dbec41680be4c9a0ba8c7c6451b Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Thu, 22 Feb 2024 17:48:54 +0100 Subject: [PATCH 4/4] Update .changeset/popular-wombats-try.md --- .changeset/popular-wombats-try.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/popular-wombats-try.md b/.changeset/popular-wombats-try.md index 1a37c14709b0..ae8ca9364734 100644 --- a/.changeset/popular-wombats-try.md +++ b/.changeset/popular-wombats-try.md @@ -2,4 +2,4 @@ 'svelte': patch --- -Fix `svelte:component` props are not properly updated when there are spread props +fix: properly update `svelte:component` props when there are spread props