use SsrGenerator subclass

pull/204/head
Rich-Harris 9 years ago
parent 443d7d825a
commit 603d61729e

@ -4,11 +4,22 @@ import processCss from '../shared/css/process.js';
import visitors from './visitors/index.js'; import visitors from './visitors/index.js';
import Generator from '../Generator.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 ) { export default function ssr ( parsed, source, options, names ) {
const format = options.format || 'cjs'; const format = options.format || 'cjs';
const name = options.name || 'SvelteComponent'; 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(); const { computations, templateProperties } = generator.parseJs();
@ -24,11 +35,6 @@ export default function ssr ( parsed, source, options, names ) {
indexes: {} indexes: {}
}); });
let renderCode = '';
generator.on( 'append', str => {
renderCode += str;
});
parsed.html.children.forEach( node => generator.visit( node ) ); parsed.html.children.forEach( node => generator.visit( node ) );
builders.render.addLine( builders.render.addLine(
@ -42,7 +48,7 @@ export default function ssr ( parsed, source, options, names ) {
}); });
builders.render.addBlock( builders.render.addBlock(
`return \`${renderCode}\`;` `return \`${generator.renderCode}\`;`
); );
// create renderCss() function // create renderCss() function

@ -36,11 +36,11 @@ export default {
open += `, { yield: () => \``; open += `, { yield: () => \``;
} }
generator.fire( 'append', open ); generator.append( open );
}, },
leave ( generator, node ) { leave ( generator, node ) {
const close = node.children.length ? `\` })}` : ')}'; const close = node.children.length ? `\` })}` : ')}';
generator.fire( 'append', close ); generator.append( close );
} }
}; };

@ -3,7 +3,7 @@ export default {
const { dependencies, snippet } = generator.contextualise( node.expression ); const { dependencies, snippet } = generator.contextualise( node.expression );
const open = `\${ ${snippet}.map( ${ node.index ? `( ${node.context}, ${node.index} )` : node.context} => \``; 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 // TODO should this be the generator's job? It's duplicated between
// here and the equivalent DOM compiler visitor // here and the equivalent DOM compiler visitor
@ -25,7 +25,7 @@ export default {
leave ( generator ) { leave ( generator ) {
const close = `\` ).join( '' )}`; const close = `\` ).join( '' )}`;
generator.fire( 'append', close ); generator.append( close );
generator.pop(); generator.pop();
} }

@ -35,7 +35,7 @@ export default {
openingTag += '>'; openingTag += '>';
generator.fire( 'append', openingTag ); generator.append( openingTag );
}, },
leave ( generator, node ) { leave ( generator, node ) {
@ -45,7 +45,7 @@ export default {
} }
if ( !voidElementNames.test( node.name ) ) { if ( !voidElementNames.test( node.name ) ) {
generator.fire( 'append', `</${node.name}>` ); generator.append( `</${node.name}>` );
} }
} }
}; };

@ -1,12 +1,12 @@
export default { export default {
enter ( generator, node ) { enter ( generator, node ) {
const { snippet } = generator.contextualise( node.expression ); const { snippet } = generator.contextualise( node.expression );
generator.fire( 'append', '${ ' + snippet + ' ? `' ); generator.append( '${ ' + snippet + ' ? `' );
}, },
leave ( generator, node ) { leave ( generator, node ) {
generator.fire( 'append', '` : `' ); generator.append( '` : `' );
if ( node.else ) node.else.children.forEach( child => generator.visit( child ) ); if ( node.else ) node.else.children.forEach( child => generator.visit( child ) );
generator.fire( 'append', '` }' ); generator.append( '` }' );
} }
}; };

@ -1,6 +1,6 @@
export default { export default {
enter ( generator, node ) { enter ( generator, node ) {
const { snippet } = generator.contextualise( node.expression ); const { snippet } = generator.contextualise( node.expression );
generator.fire( 'append', '${__escape( ' + snippet + ' )}' ); generator.append( '${__escape( ' + snippet + ' )}' );
} }
}; };

@ -1,6 +1,6 @@
export default { export default {
enter ( generator, node ) { enter ( generator, node ) {
const { snippet } = generator.contextualise( node.expression ); const { snippet } = generator.contextualise( node.expression );
generator.fire( 'append', '${' + snippet + '}' ); generator.append( '${' + snippet + '}' );
} }
}; };

@ -1,5 +1,5 @@
export default { export default {
enter ( generator, node ) { enter ( generator, node ) {
generator.fire( 'append', node.data.replace( /\${/g, '\\${' ) ); generator.append( node.data.replace( /\${/g, '\\${' ) );
} }
}; };

@ -1,5 +1,5 @@
export default { export default {
enter ( generator ) { enter ( generator ) {
generator.fire( 'append', `\${options.yield()}` ); generator.append( `\${options.yield()}` );
} }
}; };

Loading…
Cancel
Save