From 33d8a65a9539cb67d39c6ddc0d8850229038e35a Mon Sep 17 00:00:00 2001 From: "Benjamin W. Broersma" Date: Tue, 28 Apr 2020 18:27:03 +0200 Subject: [PATCH] WIP fix for #4731: preserveWhitespace in SSR --- src/compiler/compile/render_ssr/handlers/Element.ts | 6 +++++- .../compile/render_ssr/handlers/InlineComponent.ts | 6 +++++- src/compiler/compile/render_ssr/index.ts | 8 +++++++- .../samples/preserve-whitespace/_config.js | 5 +++++ .../samples/preserve-whitespace/_expected.html | 11 +++++++++++ .../samples/preserve-whitespace/main.svelte | 11 +++++++++++ 6 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 test/server-side-rendering/samples/preserve-whitespace/_config.js create mode 100644 test/server-side-rendering/samples/preserve-whitespace/_expected.html create mode 100644 test/server-side-rendering/samples/preserve-whitespace/main.svelte diff --git a/src/compiler/compile/render_ssr/handlers/Element.ts b/src/compiler/compile/render_ssr/handlers/Element.ts index ad5c421bc42..bd8d3eb02a5 100644 --- a/src/compiler/compile/render_ssr/handlers/Element.ts +++ b/src/compiler/compile/render_ssr/handlers/Element.ts @@ -12,7 +12,11 @@ export default function(node: Element, renderer: Renderer, options: RenderOption slot_scopes: Map; }) { - const children = remove_whitespace_children(node.children, node.next); + const children = ( + options.preserveWhitespace + ? node.children + : remove_whitespace_children(node.children, node.next) + ); // awkward special case let node_contents; diff --git a/src/compiler/compile/render_ssr/handlers/InlineComponent.ts b/src/compiler/compile/render_ssr/handlers/InlineComponent.ts index 37f05a941c4..e90ad2ad220 100644 --- a/src/compiler/compile/render_ssr/handlers/InlineComponent.ts +++ b/src/compiler/compile/render_ssr/handlers/InlineComponent.ts @@ -68,7 +68,11 @@ export default function(node: InlineComponent, renderer: Renderer, options: Rend const slot_fns = []; - const children = remove_whitespace_children(node.children, node.next); + const children = ( + options.preserveWhitespace + ? node.children + : remove_whitespace_children(node.children, node.next) + ); if (children.length) { const slot_scopes = new Map(); diff --git a/src/compiler/compile/render_ssr/index.ts b/src/compiler/compile/render_ssr/index.ts index c87fe3bdd92..156ee871211 100644 --- a/src/compiler/compile/render_ssr/index.ts +++ b/src/compiler/compile/render_ssr/index.ts @@ -18,8 +18,14 @@ export default function ssr( const { name } = component; + const children = ( + options.preserveWhitespace + ? component.fragment.children + : trim(component.fragment.children) + ); + // create $$render function - renderer.render(trim(component.fragment.children), Object.assign({ + renderer.render(children, Object.assign({ locate: component.locate }, options)); diff --git a/test/server-side-rendering/samples/preserve-whitespace/_config.js b/test/server-side-rendering/samples/preserve-whitespace/_config.js new file mode 100644 index 00000000000..bdc08c200be --- /dev/null +++ b/test/server-side-rendering/samples/preserve-whitespace/_config.js @@ -0,0 +1,5 @@ +export default { + compileOptions: { + preserveWhitespace: true + } +}; diff --git a/test/server-side-rendering/samples/preserve-whitespace/_expected.html b/test/server-side-rendering/samples/preserve-whitespace/_expected.html new file mode 100644 index 00000000000..dd1ac23c9dd --- /dev/null +++ b/test/server-side-rendering/samples/preserve-whitespace/_expected.html @@ -0,0 +1,11 @@ + +
+
+

Some text

+
+ +
+ diff --git a/test/server-side-rendering/samples/preserve-whitespace/main.svelte b/test/server-side-rendering/samples/preserve-whitespace/main.svelte new file mode 100644 index 00000000000..dd1ac23c9dd --- /dev/null +++ b/test/server-side-rendering/samples/preserve-whitespace/main.svelte @@ -0,0 +1,11 @@ + +
+
+

Some text

+
+ +
+