From d6548882fff7e5c10effe52ed4c5520bd1862dd3 Mon Sep 17 00:00:00 2001 From: Rich-Harris Date: Sat, 17 Dec 2016 12:01:34 -0500 Subject: [PATCH] use SsrGenerator subclass --- src/generators/server-side-rendering/index.js | 20 ++++++++++++------- .../visitors/Component.js | 4 ++-- .../visitors/EachBlock.js | 4 ++-- .../server-side-rendering/visitors/Element.js | 4 ++-- .../server-side-rendering/visitors/IfBlock.js | 6 +++--- .../visitors/MustacheTag.js | 2 +- .../visitors/RawMustacheTag.js | 2 +- .../server-side-rendering/visitors/Text.js | 2 +- .../visitors/YieldTag.js | 2 +- 9 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/generators/server-side-rendering/index.js b/src/generators/server-side-rendering/index.js index b8e9c23f48..d74c720036 100644 --- a/src/generators/server-side-rendering/index.js +++ b/src/generators/server-side-rendering/index.js @@ -4,11 +4,22 @@ import processCss from '../shared/css/process.js'; import visitors from './visitors/index.js'; import Generator from '../Generator.js'; +class SsrGenerator extends Generator { + constructor ( parsed, source, names, visitors ) { + super( parsed, source, names, visitors ); + this.renderCode = ''; + } + + append ( code ) { + this.renderCode += code; + } +} + export default function ssr ( parsed, source, options, names ) { const format = options.format || 'cjs'; const name = options.name || 'SvelteComponent'; - const generator = new Generator( parsed, source, names, visitors ); + const generator = new SsrGenerator( parsed, source, names, visitors ); const { computations, templateProperties } = generator.parseJs(); @@ -24,11 +35,6 @@ export default function ssr ( parsed, source, options, names ) { indexes: {} }); - let renderCode = ''; - generator.on( 'append', str => { - renderCode += str; - }); - parsed.html.children.forEach( node => generator.visit( node ) ); builders.render.addLine( @@ -42,7 +48,7 @@ export default function ssr ( parsed, source, options, names ) { }); builders.render.addBlock( - `return \`${renderCode}\`;` + `return \`${generator.renderCode}\`;` ); // create renderCss() function diff --git a/src/generators/server-side-rendering/visitors/Component.js b/src/generators/server-side-rendering/visitors/Component.js index 0fe2237e1d..e97ecaa5dd 100644 --- a/src/generators/server-side-rendering/visitors/Component.js +++ b/src/generators/server-side-rendering/visitors/Component.js @@ -36,11 +36,11 @@ export default { open += `, { yield: () => \``; } - generator.fire( 'append', open ); + generator.append( open ); }, leave ( generator, node ) { const close = node.children.length ? `\` })}` : ')}'; - generator.fire( 'append', close ); + generator.append( close ); } }; diff --git a/src/generators/server-side-rendering/visitors/EachBlock.js b/src/generators/server-side-rendering/visitors/EachBlock.js index 5a7a8f80a8..de4bfffe6d 100644 --- a/src/generators/server-side-rendering/visitors/EachBlock.js +++ b/src/generators/server-side-rendering/visitors/EachBlock.js @@ -3,7 +3,7 @@ export default { const { dependencies, snippet } = generator.contextualise( node.expression ); const open = `\${ ${snippet}.map( ${ node.index ? `( ${node.context}, ${node.index} )` : node.context} => \``; - generator.fire( 'append', open ); + generator.append( open ); // TODO should this be the generator's job? It's duplicated between // here and the equivalent DOM compiler visitor @@ -25,7 +25,7 @@ export default { leave ( generator ) { const close = `\` ).join( '' )}`; - generator.fire( 'append', close ); + generator.append( close ); generator.pop(); } diff --git a/src/generators/server-side-rendering/visitors/Element.js b/src/generators/server-side-rendering/visitors/Element.js index fd36bf8f39..863abf27db 100644 --- a/src/generators/server-side-rendering/visitors/Element.js +++ b/src/generators/server-side-rendering/visitors/Element.js @@ -35,7 +35,7 @@ export default { openingTag += '>'; - generator.fire( 'append', openingTag ); + generator.append( openingTag ); }, leave ( generator, node ) { @@ -45,7 +45,7 @@ export default { } if ( !voidElementNames.test( node.name ) ) { - generator.fire( 'append', `` ); + generator.append( `` ); } } }; diff --git a/src/generators/server-side-rendering/visitors/IfBlock.js b/src/generators/server-side-rendering/visitors/IfBlock.js index 892658b4f1..a473965afd 100644 --- a/src/generators/server-side-rendering/visitors/IfBlock.js +++ b/src/generators/server-side-rendering/visitors/IfBlock.js @@ -1,12 +1,12 @@ export default { enter ( generator, node ) { const { snippet } = generator.contextualise( node.expression ); - generator.fire( 'append', '${ ' + snippet + ' ? `' ); + generator.append( '${ ' + snippet + ' ? `' ); }, leave ( generator, node ) { - generator.fire( 'append', '` : `' ); + generator.append( '` : `' ); if ( node.else ) node.else.children.forEach( child => generator.visit( child ) ); - generator.fire( 'append', '` }' ); + generator.append( '` }' ); } }; diff --git a/src/generators/server-side-rendering/visitors/MustacheTag.js b/src/generators/server-side-rendering/visitors/MustacheTag.js index d724cb8d54..9052e2627f 100644 --- a/src/generators/server-side-rendering/visitors/MustacheTag.js +++ b/src/generators/server-side-rendering/visitors/MustacheTag.js @@ -1,6 +1,6 @@ export default { enter ( generator, node ) { const { snippet } = generator.contextualise( node.expression ); - generator.fire( 'append', '${__escape( ' + snippet + ' )}' ); + generator.append( '${__escape( ' + snippet + ' )}' ); } }; diff --git a/src/generators/server-side-rendering/visitors/RawMustacheTag.js b/src/generators/server-side-rendering/visitors/RawMustacheTag.js index 669d5c3455..c84de16e2a 100644 --- a/src/generators/server-side-rendering/visitors/RawMustacheTag.js +++ b/src/generators/server-side-rendering/visitors/RawMustacheTag.js @@ -1,6 +1,6 @@ export default { enter ( generator, node ) { const { snippet } = generator.contextualise( node.expression ); - generator.fire( 'append', '${' + snippet + '}' ); + generator.append( '${' + snippet + '}' ); } }; diff --git a/src/generators/server-side-rendering/visitors/Text.js b/src/generators/server-side-rendering/visitors/Text.js index 52e612e774..16630a709d 100644 --- a/src/generators/server-side-rendering/visitors/Text.js +++ b/src/generators/server-side-rendering/visitors/Text.js @@ -1,5 +1,5 @@ export default { enter ( generator, node ) { - generator.fire( 'append', node.data.replace( /\${/g, '\\${' ) ); + generator.append( node.data.replace( /\${/g, '\\${' ) ); } }; diff --git a/src/generators/server-side-rendering/visitors/YieldTag.js b/src/generators/server-side-rendering/visitors/YieldTag.js index bc73a727e6..732f96301b 100644 --- a/src/generators/server-side-rendering/visitors/YieldTag.js +++ b/src/generators/server-side-rendering/visitors/YieldTag.js @@ -1,5 +1,5 @@ export default { enter ( generator ) { - generator.fire( 'append', `\${options.yield()}` ); + generator.append( `\${options.yield()}` ); } };