use SsrGenerator subclass

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

@ -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

@ -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 );
}
};

@ -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();
}

@ -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', `</${node.name}>` );
generator.append( `</${node.name}>` );
}
}
};

@ -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( '` }' );
}
};

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

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

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

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

Loading…
Cancel
Save