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 ) {
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(),

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

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

Loading…
Cancel
Save