Skip to content

Commit 3fcbf42

Browse files
committed
while we're at it, remove unused stuff from generated SSR code
1 parent d2db41f commit 3fcbf42

File tree

4 files changed

+42
-21
lines changed

4 files changed

+42
-21
lines changed

src/generators/Generator.js

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ export default class Generator {
260260
};
261261
}
262262

263-
parseJs () {
263+
parseJs ( ssr ) {
264264
const { source } = this;
265265
const { js } = this.parsed;
266266

@@ -361,6 +361,27 @@ export default class Generator {
361361
}
362362
}
363363

364+
// Remove these after version 2
365+
if ( templateProperties.onrender ) {
366+
const { key } = templateProperties.onrender;
367+
this.code.overwrite( key.start, key.end, 'oncreate', true );
368+
templateProperties.oncreate = templateProperties.onrender;
369+
}
370+
371+
if ( templateProperties.onteardown ) {
372+
const { key } = templateProperties.onteardown;
373+
this.code.overwrite( key.start, key.end, 'ondestroy', true );
374+
templateProperties.ondestroy = templateProperties.onteardown;
375+
}
376+
377+
// in an SSR context, we don't need to include events, methods, oncreate or ondestroy
378+
if ( ssr ) {
379+
if ( templateProperties.oncreate ) removeNode( this.code, defaultExport.declaration, templateProperties.oncreate );
380+
if ( templateProperties.ondestroy ) removeNode( this.code, defaultExport.declaration, templateProperties.ondestroy );
381+
if ( templateProperties.methods ) removeNode( this.code, defaultExport.declaration, templateProperties.methods );
382+
if ( templateProperties.events ) removeNode( this.code, defaultExport.declaration, templateProperties.events );
383+
}
384+
364385
// now that we've analysed the default export, we can determine whether or not we need to keep it
365386
let hasDefaultExport = !!defaultExport;
366387
if ( defaultExport && defaultExport.declaration.properties.length === 0 ) {

src/generators/dom/index.js

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -153,19 +153,6 @@ export default function dom ( parsed, source, options ) {
153153

154154
const { computations, hasJs, templateProperties, namespace } = generator.parseJs();
155155

156-
// Remove these after version 2
157-
if ( templateProperties.onrender ) {
158-
const { key } = templateProperties.onrender;
159-
generator.code.overwrite( key.start, key.end, 'oncreate', true );
160-
templateProperties.oncreate = templateProperties.onrender;
161-
}
162-
163-
if ( templateProperties.onteardown ) {
164-
const { key } = templateProperties.onteardown;
165-
generator.code.overwrite( key.start, key.end, 'ondestroy', true );
166-
templateProperties.ondestroy = templateProperties.onteardown;
167-
}
168-
169156
const getUniqueName = generator.getUniqueNameMaker( [ 'root' ] );
170157
const component = getUniqueName( 'component' );
171158

src/generators/server-side-rendering/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export default function ssr ( parsed, source, options ) {
4040

4141
const generator = new SsrGenerator( parsed, source, name, visitors, options );
4242

43-
const { computations, hasJs, templateProperties } = generator.parseJs();
43+
const { computations, hasJs, templateProperties } = generator.parseJs( true );
4444

4545
const builders = {
4646
main: new CodeBuilder(),

test/server-side-rendering/index.js

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ function tryToReadFile ( file ) {
1313
}
1414
}
1515

16+
function capitalize ( str ) {
17+
return str[0].toUpperCase() + str.slice( 1 );
18+
}
19+
1620
describe( 'ssr', () => {
1721
before( () => {
1822
require( process.env.COVERAGE ?
@@ -25,8 +29,10 @@ describe( 'ssr', () => {
2529
fs.readdirSync( 'test/server-side-rendering/samples' ).forEach( dir => {
2630
if ( dir[0] === '.' ) return;
2731

28-
// add .solo to a sample directory name to only run that test
29-
const solo = /\.solo$/.test( dir );
32+
// add .solo to a sample directory name to only run that test, or
33+
// .show to always show the output. or both
34+
const solo = /\.solo/.test( dir );
35+
let show = /\.show/.test( dir );
3036

3137
if ( solo && process.env.CI ) {
3238
throw new Error( 'Forgot to remove `solo: true` from test' );
@@ -42,23 +48,30 @@ describe( 'ssr', () => {
4248
const data = tryToLoadJson( `${dir}/data.json` );
4349
let html;
4450
let css;
51+
let error;
4552

4653
try {
4754
html = component.render( data );
4855
css = component.renderCss().css;
49-
} catch ( err ) {
56+
} catch ( e ) {
57+
show = true;
58+
error = e;
59+
}
60+
61+
if ( show ) {
5062
fs.readdirSync( dir ).forEach( file => {
5163
if ( file[0] === '_' ) return;
5264
const source = fs.readFileSync( `${dir}/${file}`, 'utf-8' );
53-
const { code } = svelte.compile( source, { generate: 'ssr' });
65+
const name = capitalize( file.slice( 0, -path.extname( file ).length ) );
66+
const { code } = svelte.compile( source, { generate: 'ssr', name });
5467
console.group( file );
5568
console.log( addLineNumbers( code ) );
5669
console.groupEnd();
5770
});
58-
59-
throw err;
6071
}
6172

73+
if ( error ) throw error;
74+
6275
fs.writeFileSync( `${dir}/_actual.html`, html );
6376
if ( css ) fs.writeFileSync( `${dir}/_actual.css`, css );
6477

0 commit comments

Comments
 (0)