From 797165b5a86634eee2d52e05c630f2656acc008f Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sun, 10 Dec 2017 10:04:22 -0500 Subject: [PATCH] trim SSR'd output more intelligently - fixes #998 --- src/generators/server-side-rendering/index.ts | 26 +++++++++++++++++-- .../ssr-no-oncreate-etc/expected-bundle.js | 2 +- .../samples/ssr-no-oncreate-etc/expected.js | 2 +- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/generators/server-side-rendering/index.ts b/src/generators/server-side-rendering/index.ts index 779f975028..db2e8085d6 100644 --- a/src/generators/server-side-rendering/index.ts +++ b/src/generators/server-side-rendering/index.ts @@ -61,7 +61,7 @@ export default function ssr( conditions: [], }); - parsed.html.children.forEach((node: Node) => { + trim(parsed.html.children).forEach((node: Node) => { visit(generator, mainBlock, node); }); @@ -122,7 +122,7 @@ export default function ssr( } `} - return \`${generator.renderCode}\`.trim(); + return \`${generator.renderCode}\`; }; ${name}.renderCss = function() { @@ -202,3 +202,25 @@ export default function ssr( return generator.generate(result, options, { name, format }); } + +function trim(nodes) { + let start = 0; + for (; start < nodes.length; start += 1) { + const node = nodes[start]; + if (node.type !== 'Text') break; + + node.data = node.data.replace(/^\s+/, ''); + if (node.data) break; + } + + let end = nodes.length; + for (; end > start; end -= 1) { + const node = nodes[end - 1]; + if (node.type !== 'Text') break; + + node.data = node.data.replace(/\s+$/, ''); + if (node.data) break; + } + + return nodes.slice(start, end); +} diff --git a/test/js/samples/ssr-no-oncreate-etc/expected-bundle.js b/test/js/samples/ssr-no-oncreate-etc/expected-bundle.js index 1dfa59b423..b570c5687c 100644 --- a/test/js/samples/ssr-no-oncreate-etc/expected-bundle.js +++ b/test/js/samples/ssr-no-oncreate-etc/expected-bundle.js @@ -7,7 +7,7 @@ SvelteComponent.data = function() { SvelteComponent.render = function(state, options = {}) { state = Object.assign({}, state); - return ``.trim(); + return ``; }; SvelteComponent.renderCss = function() { diff --git a/test/js/samples/ssr-no-oncreate-etc/expected.js b/test/js/samples/ssr-no-oncreate-etc/expected.js index 511e5dd74e..3a5162aaf3 100644 --- a/test/js/samples/ssr-no-oncreate-etc/expected.js +++ b/test/js/samples/ssr-no-oncreate-etc/expected.js @@ -9,7 +9,7 @@ SvelteComponent.data = function() { SvelteComponent.render = function(state, options = {}) { state = Object.assign({}, state); - return ``.trim(); + return ``; }; SvelteComponent.renderCss = function() {