diff --git a/src/generators/Generator.js b/src/generators/Generator.js index 8653a1ad89..84bd2be367 100644 --- a/src/generators/Generator.js +++ b/src/generators/Generator.js @@ -102,7 +102,7 @@ export default class Generator { } } - generate ( result, options, { constructorName, format } ) { + generate ( result, options, { name, format } ) { if ( this.imports.length ) { const statements = []; @@ -164,7 +164,7 @@ export default class Generator { }); addString( finalChunk ); - addString( '\n\n' + getOutro( format, constructorName, options, this.imports ) ); + addString( '\n\n' + getOutro( format, name, options, this.imports ) ); return { code: compiled.toString(), diff --git a/src/generators/dom/index.js b/src/generators/dom/index.js index f5c8ac19b4..58cb848a5b 100644 --- a/src/generators/dom/index.js +++ b/src/generators/dom/index.js @@ -8,6 +8,7 @@ import Generator from '../Generator.js'; export default function dom ( parsed, source, options, names ) { const format = options.format || 'es'; + const name = options.name || 'SvelteComponent'; const generator = new Generator( parsed, source, names, visitors ); @@ -198,8 +199,6 @@ export default function dom ( parsed, source, options, names ) { let i = renderers.length; while ( i-- ) builders.main.addBlock( renderers[i] ); - const constructorName = options.name || 'SvelteComponent'; - if ( parsed.css && options.css !== false ) { 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 || {}`; builders.main.addBlock( deindent` - function ${constructorName} ( options ) { + function ${name} ( options ) { options = options || {}; var component = this;${generator.usesRefs ? `\nthis.refs = {}` : ``} @@ -354,8 +353,8 @@ export default function dom ( parsed, source, options, names ) { ` ); 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 } ); } diff --git a/src/generators/server-side-rendering/index.js b/src/generators/server-side-rendering/index.js index f79961712f..b8e9c23f48 100644 --- a/src/generators/server-side-rendering/index.js +++ b/src/generators/server-side-rendering/index.js @@ -6,12 +6,19 @@ import Generator from '../Generator.js'; export default function ssr ( parsed, source, options, names ) { const format = options.format || 'cjs'; - const constructorName = options.name || 'SvelteComponent'; + const name = options.name || 'SvelteComponent'; const generator = new Generator( parsed, source, names, visitors ); const { computations, templateProperties } = generator.parseJs(); + const builders = { + main: new CodeBuilder(), + render: new CodeBuilder(), + renderCss: new CodeBuilder() + }; + + // create main render() function generator.push({ contexts: {}, indexes: {} @@ -24,34 +31,21 @@ export default function ssr ( parsed, source, options, names ) { 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( templateProperties.data ? `root = Object.assign( template.data(), root || {} );` : `root = root || {};` ); - if ( computations.length ) { - computations.forEach( ({ key, deps }) => { - builders.render.addLine( - `root.${key} = template.computed.${key}( ${deps.map( dep => `root.${dep}` ).join( ', ' )} );` - ); - }); - } + computations.forEach( ({ key, deps }) => { + builders.render.addLine( + `root.${key} = template.computed.${key}( ${deps.map( dep => `root.${dep}` ).join( ', ' )} );` + ); + }); builders.render.addBlock( `return \`${renderCode}\`;` ); + // create renderCss() function builders.renderCss.addBlock( `var components = [];` ); @@ -59,7 +53,7 @@ export default function ssr ( parsed, source, options, names ) { if ( parsed.css ) { builders.renderCss.addBlock( deindent` components.push({ - filename: ${constructorName}.filename, + filename: ${name}.filename, css: ${JSON.stringify( processCss( parsed ) )}, 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` - ${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} }; - ${constructorName}.renderCss = function () { + ${name}.renderCss = function () { ${builders.renderCss} }; @@ -119,5 +119,5 @@ export default function ssr ( parsed, source, options, names ) { const result = builders.main.toString(); - return generator.generate( result, options, { constructorName, format } ); + return generator.generate( result, options, { name, format } ); }