diff --git a/src/compiler/compile/render_ssr/handlers/Element.ts b/src/compiler/compile/render_ssr/handlers/Element.ts index ad5c421bc421..bd8d3eb02a57 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 37f05a941c42..e90ad2ad2200 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 c87fe3bdd92b..156ee871211c 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/index.js b/test/server-side-rendering/index.js index ee1319845dfe..9b6ac848c30b 100644 --- a/test/server-side-rendering/index.js +++ b/test/server-side-rendering/index.js @@ -76,7 +76,11 @@ describe("ssr", () => { if (css.code) fs.writeFileSync(`${dir}/_actual.css`, css.code); try { - assert.htmlEqual(html, expectedHtml); + if (compileOptions.preserveWhitespace) { + assert.equal(html, expectedHtml); + } else { + assert.htmlEqual(html, expectedHtml); + } } catch (error) { if (shouldUpdateExpected()) { fs.writeFileSync(`${dir}/_expected.html`, html); 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 000000000000..bdc08c200be9 --- /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 000000000000..dd1ac23c9dd0 --- /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 000000000000..d5e1550966fe --- /dev/null +++ b/test/server-side-rendering/samples/preserve-whitespace/main.svelte @@ -0,0 +1,12 @@ + +
+
+

Some text

+
+ +
+