From cb14c6dbd8e2e62bd68a85e4ecbdd049e22cbc00 Mon Sep 17 00:00:00 2001 From: Emil Tholin Date: Mon, 9 Jan 2023 02:01:00 +0100 Subject: [PATCH] Spread component props immutably during SSR --- .../compile/render_ssr/handlers/InlineComponent.ts | 2 +- .../Component.svelte | 0 .../ssr-spread-component-props-immutably/_config.js | 5 +++++ .../ssr-spread-component-props-immutably/expected.js | 11 +++++++++++ .../ssr-spread-component-props-immutably/input.svelte | 11 +++++++++++ 5 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 test/js/samples/ssr-spread-component-props-immutably/Component.svelte create mode 100644 test/js/samples/ssr-spread-component-props-immutably/_config.js create mode 100644 test/js/samples/ssr-spread-component-props-immutably/expected.js create mode 100644 test/js/samples/ssr-spread-component-props-immutably/input.svelte diff --git a/src/compiler/compile/render_ssr/handlers/InlineComponent.ts b/src/compiler/compile/render_ssr/handlers/InlineComponent.ts index 8287b46268..73d31940e2 100644 --- a/src/compiler/compile/render_ssr/handlers/InlineComponent.ts +++ b/src/compiler/compile/render_ssr/handlers/InlineComponent.ts @@ -36,7 +36,7 @@ export default function(node: InlineComponent, renderer: Renderer, options: Rend let props; if (uses_spread) { - props = x`@_Object.assign(${ + props = x`@_Object.assign({}, ${ node.attributes .map(attribute => { if (attribute.is_spread) { diff --git a/test/js/samples/ssr-spread-component-props-immutably/Component.svelte b/test/js/samples/ssr-spread-component-props-immutably/Component.svelte new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/js/samples/ssr-spread-component-props-immutably/_config.js b/test/js/samples/ssr-spread-component-props-immutably/_config.js new file mode 100644 index 0000000000..bee4ab630c --- /dev/null +++ b/test/js/samples/ssr-spread-component-props-immutably/_config.js @@ -0,0 +1,5 @@ +export default { + options: { + generate: 'ssr' + } +}; diff --git a/test/js/samples/ssr-spread-component-props-immutably/expected.js b/test/js/samples/ssr-spread-component-props-immutably/expected.js new file mode 100644 index 0000000000..34780d2af8 --- /dev/null +++ b/test/js/samples/ssr-spread-component-props-immutably/expected.js @@ -0,0 +1,11 @@ +/* generated by Svelte vX.Y.Z */ +import { create_ssr_component, validate_component } from "svelte/internal"; + +import Component from './Component.svelte'; + +const Component_1 = create_ssr_component(($$result, $$props, $$bindings, slots) => { + let props = { x: 1, y: 2, z: 3 }; + return `${validate_component(Component, "Component").$$render($$result, Object.assign({}, props, { x: 2 }), {}, {})}`; +}); + +export default Component_1; \ No newline at end of file diff --git a/test/js/samples/ssr-spread-component-props-immutably/input.svelte b/test/js/samples/ssr-spread-component-props-immutably/input.svelte new file mode 100644 index 0000000000..352cb915e6 --- /dev/null +++ b/test/js/samples/ssr-spread-component-props-immutably/input.svelte @@ -0,0 +1,11 @@ + + +