pull/204/head
Rich Harris 9 years ago
parent 32317a07a0
commit fd655f8c5b

@ -102,7 +102,7 @@ export default class Generator {
} }
} }
generate ( result, options, { constructorName, format } ) { generate ( result, options, { name, format } ) {
if ( this.imports.length ) { if ( this.imports.length ) {
const statements = []; const statements = [];
@ -164,7 +164,7 @@ export default class Generator {
}); });
addString( finalChunk ); addString( finalChunk );
addString( '\n\n' + getOutro( format, constructorName, options, this.imports ) ); addString( '\n\n' + getOutro( format, name, options, this.imports ) );
return { return {
code: compiled.toString(), code: compiled.toString(),

@ -8,6 +8,7 @@ import Generator from '../Generator.js';
export default function dom ( parsed, source, options, names ) { export default function dom ( parsed, source, options, names ) {
const format = options.format || 'es'; const format = options.format || 'es';
const name = options.name || 'SvelteComponent';
const generator = new Generator( parsed, source, names, visitors ); const generator = new Generator( parsed, source, names, visitors );
@ -198,8 +199,6 @@ export default function dom ( parsed, source, options, names ) {
let i = renderers.length; let i = renderers.length;
while ( i-- ) builders.main.addBlock( renderers[i] ); while ( i-- ) builders.main.addBlock( renderers[i] );
const constructorName = options.name || 'SvelteComponent';
if ( parsed.css && options.css !== false ) { if ( parsed.css && options.css !== false ) {
builders.init.addLine( `if ( !addedCss ) addCss();` ); builders.init.addLine( `if ( !addedCss ) addCss();` );
} }
@ -249,7 +248,7 @@ export default function dom ( parsed, source, options, names ) {
const initialState = templateProperties.data ? `Object.assign( template.data(), options.data )` : `options.data || {}`; const initialState = templateProperties.data ? `Object.assign( template.data(), options.data )` : `options.data || {}`;
builders.main.addBlock( deindent` builders.main.addBlock( deindent`
function ${constructorName} ( options ) { function ${name} ( options ) {
options = options || {}; options = options || {};
var component = this;${generator.usesRefs ? `\nthis.refs = {}` : ``} var component = this;${generator.usesRefs ? `\nthis.refs = {}` : ``}
@ -354,8 +353,8 @@ export default function dom ( parsed, source, options, names ) {
` ); ` );
if ( templateProperties.methods ) { if ( templateProperties.methods ) {
builders.main.addBlock( `${constructorName}.prototype = template.methods;` ); builders.main.addBlock( `${name}.prototype = template.methods;` );
} }
return generator.generate( builders.main.toString(), options, { constructorName, format } ); return generator.generate( builders.main.toString(), options, { name, format } );
} }

@ -6,12 +6,19 @@ import Generator from '../Generator.js';
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 constructorName = options.name || 'SvelteComponent'; const name = options.name || 'SvelteComponent';
const generator = new Generator( parsed, source, names, visitors ); const generator = new Generator( parsed, source, names, visitors );
const { computations, templateProperties } = generator.parseJs(); const { computations, templateProperties } = generator.parseJs();
const builders = {
main: new CodeBuilder(),
render: new CodeBuilder(),
renderCss: new CodeBuilder()
};
// create main render() function
generator.push({ generator.push({
contexts: {}, contexts: {},
indexes: {} indexes: {}
@ -24,34 +31,21 @@ export default function ssr ( parsed, source, options, names ) {
parsed.html.children.forEach( node => generator.visit( node ) ); parsed.html.children.forEach( node => generator.visit( node ) );
const builders = {
main: new CodeBuilder(),
render: new CodeBuilder(),
renderCss: new CodeBuilder()
};
if ( parsed.js ) {
builders.main.addBlock( `[✂${parsed.js.content.start}-${parsed.js.content.end}✂]` );
}
builders.main.addBlock( `var ${constructorName} = {};` );
builders.render.addLine( builders.render.addLine(
templateProperties.data ? `root = Object.assign( template.data(), root || {} );` : `root = root || {};` templateProperties.data ? `root = Object.assign( template.data(), root || {} );` : `root = root || {};`
); );
if ( computations.length ) {
computations.forEach( ({ key, deps }) => { computations.forEach( ({ key, deps }) => {
builders.render.addLine( builders.render.addLine(
`root.${key} = template.computed.${key}( ${deps.map( dep => `root.${dep}` ).join( ', ' )} );` `root.${key} = template.computed.${key}( ${deps.map( dep => `root.${dep}` ).join( ', ' )} );`
); );
}); });
}
builders.render.addBlock( builders.render.addBlock(
`return \`${renderCode}\`;` `return \`${renderCode}\`;`
); );
// create renderCss() function
builders.renderCss.addBlock( builders.renderCss.addBlock(
`var components = [];` `var components = [];`
); );
@ -59,7 +53,7 @@ export default function ssr ( parsed, source, options, names ) {
if ( parsed.css ) { if ( parsed.css ) {
builders.renderCss.addBlock( deindent` builders.renderCss.addBlock( deindent`
components.push({ components.push({
filename: ${constructorName}.filename, filename: ${name}.filename,
css: ${JSON.stringify( processCss( parsed ) )}, css: ${JSON.stringify( processCss( parsed ) )},
map: null // TODO map: null // TODO
}); });
@ -93,14 +87,20 @@ export default function ssr ( parsed, source, options, names ) {
}; };
` ); ` );
if ( parsed.js ) {
builders.main.addBlock( `[✂${parsed.js.content.start}-${parsed.js.content.end}✂]` );
}
builders.main.addBlock( deindent` builders.main.addBlock( deindent`
${constructorName}.filename = ${JSON.stringify( options.filename )}; var ${name} = {};
${name}.filename = ${JSON.stringify( options.filename )};
${constructorName}.render = function ( root, options ) { ${name}.render = function ( root, options ) {
${builders.render} ${builders.render}
}; };
${constructorName}.renderCss = function () { ${name}.renderCss = function () {
${builders.renderCss} ${builders.renderCss}
}; };
@ -119,5 +119,5 @@ export default function ssr ( parsed, source, options, names ) {
const result = builders.main.toString(); const result = builders.main.toString();
return generator.generate( result, options, { constructorName, format } ); return generator.generate( result, options, { name, format } );
} }

Loading…
Cancel
Save