Skip to content

Commit 16e3574

Browse files
committedMar 1, 2017
warn on onrender/onteardown, replace with oncreate/ondestroy (#40)
1 parent 54445fa commit 16e3574

File tree

10 files changed

+65
-27
lines changed

10 files changed

+65
-27
lines changed
 

‎src/generators/Generator.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ export default class Generator {
243243
}
244244

245245
defaultExport.declaration.properties.forEach( prop => {
246-
templateProperties[ prop.key.name ] = prop.value;
246+
templateProperties[ prop.key.name ] = prop;
247247
});
248248

249249
this.code.prependRight( js.content.start, 'var template = (function () {' );
@@ -255,7 +255,7 @@ export default class Generator {
255255

256256
[ 'helpers', 'events', 'components' ].forEach( key => {
257257
if ( templateProperties[ key ] ) {
258-
templateProperties[ key ].properties.forEach( prop => {
258+
templateProperties[ key ].value.properties.forEach( prop => {
259259
this[ key ][ prop.key.name ] = prop.value;
260260
});
261261
}
@@ -264,7 +264,7 @@ export default class Generator {
264264
if ( templateProperties.computed ) {
265265
const dependencies = new Map();
266266

267-
templateProperties.computed.properties.forEach( prop => {
267+
templateProperties.computed.value.properties.forEach( prop => {
268268
const key = prop.key.name;
269269
const value = prop.value;
270270

@@ -286,7 +286,7 @@ export default class Generator {
286286
computations.push({ key, deps });
287287
}
288288

289-
templateProperties.computed.properties.forEach( prop => visit( prop.key.name ) );
289+
templateProperties.computed.value.properties.forEach( prop => visit( prop.key.name ) );
290290
}
291291
}
292292

‎src/generators/dom/index.js

+18-5
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,19 @@ export default function dom ( parsed, source, options, names ) {
156156

157157
const { computations, templateProperties } = generator.parseJs();
158158

159+
// Remove these after version 2
160+
if ( templateProperties.onrender ) {
161+
const { key } = templateProperties.onrender;
162+
generator.code.overwrite( key.start, key.end, 'oncreate', true );
163+
templateProperties.oncreate = templateProperties.onrender;
164+
}
165+
166+
if ( templateProperties.onteardown ) {
167+
const { key } = templateProperties.onteardown;
168+
generator.code.overwrite( key.start, key.end, 'ondestroy', true );
169+
templateProperties.ondestroy = templateProperties.onteardown;
170+
}
171+
159172
generator.imports.forEach( node => {
160173
node.specifiers.forEach( specifier => {
161174
generator.importedNames[ specifier.local.name ] = true;
@@ -164,7 +177,7 @@ export default function dom ( parsed, source, options, names ) {
164177

165178
let namespace = null;
166179
if ( templateProperties.namespace ) {
167-
const ns = templateProperties.namespace.value;
180+
const ns = templateProperties.namespace.value.value;
168181
namespace = namespaces[ ns ] || ns;
169182

170183
// TODO remove the namespace property from the generated code, it's unused past this point
@@ -281,12 +294,12 @@ export default function dom ( parsed, source, options, names ) {
281294
builders._set.addBlock( statement );
282295
}
283296

284-
if ( templateProperties.onrender ) {
297+
if ( templateProperties.oncreate ) {
285298
builders.init.addBlock( deindent`
286299
if ( options._root ) {
287-
options._root._renderHooks.push({ fn: template.onrender, context: this });
300+
options._root._renderHooks.push({ fn: template.oncreate, context: this });
288301
} else {
289-
template.onrender.call( this );
302+
template.oncreate.call( this );
290303
}
291304
` );
292305
}
@@ -348,7 +361,7 @@ export default function dom ( parsed, source, options, names ) {
348361
};
349362
350363
${name}.prototype.teardown = function teardown ( detach ) {
351-
this.fire( 'teardown' );${templateProperties.onteardown ? `\ntemplate.onteardown.call( this );` : ``}
364+
this.fire( 'teardown' );${templateProperties.ondestroy ? `\ntemplate.ondestroy.call( this );` : ``}
352365
353366
this._fragment.teardown( detach !== false );
354367
this._fragment = null;

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ export default function ssr ( parsed, source, options, names ) {
114114
}
115115
` );
116116

117-
templateProperties.components.properties.forEach( prop => {
117+
templateProperties.components.value.properties.forEach( prop => {
118118
builders.renderCss.addLine( `addComponent( template.components.${prop.key.name} );` );
119119
});
120120
}

‎src/validate/index.js

-2
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ export default function validate ( parsed, source, { onerror, onwarn, name, file
3636
});
3737
},
3838

39-
templateProperties: {},
40-
4139
names: [],
4240

4341
namespace: null

‎src/validate/js/index.js

+14-3
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,21 @@ export default function validateJs ( validator, js ) {
2323
checkForComputedKeys( validator, node.declaration.properties );
2424
checkForDupes( validator, node.declaration.properties );
2525

26+
const templateProperties = {};
27+
2628
node.declaration.properties.forEach( prop => {
27-
validator.templateProperties[ prop.key.name ] = prop;
29+
templateProperties[ prop.key.name ] = prop;
2830
});
2931

32+
// Remove these checks in version 2
33+
if ( templateProperties.oncreate && templateProperties.onrender ) {
34+
validator.error( 'Cannot have both oncreate and onrender', templateProperties.onrender.start );
35+
}
36+
37+
if ( templateProperties.ondestroy && templateProperties.onteardown ) {
38+
validator.error( 'Cannot have both ondestroy and onteardown', templateProperties.onteardown.start );
39+
}
40+
3041
// ensure all exported props are valid
3142
node.declaration.properties.forEach( prop => {
3243
const propValidator = propValidators[ prop.key.name ];
@@ -45,8 +56,8 @@ export default function validateJs ( validator, js ) {
4556
}
4657
});
4758

48-
if ( validator.templateProperties.namespace ) {
49-
const ns = validator.templateProperties.namespace.value.value;
59+
if ( templateProperties.namespace ) {
60+
const ns = templateProperties.namespace.value.value;
5061
validator.namespace = namespaces[ ns ] || ns;
5162
}
5263

‎src/validate/js/propValidators/index.js

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import data from './data.js';
22
import computed from './computed.js';
3+
import oncreate from './oncreate.js';
4+
import ondestroy from './ondestroy.js';
35
import onrender from './onrender.js';
46
import onteardown from './onteardown.js';
57
import helpers from './helpers.js';
@@ -11,6 +13,8 @@ import namespace from './namespace.js';
1113
export default {
1214
data,
1315
computed,
16+
oncreate,
17+
ondestroy,
1418
onrender,
1519
onteardown,
1620
helpers,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import usesThisOrArguments from '../utils/usesThisOrArguments.js';
2+
3+
export default function oncreate ( validator, prop ) {
4+
if ( prop.value.type === 'ArrowFunctionExpression' ) {
5+
if ( usesThisOrArguments( prop.value.body ) ) {
6+
validator.error( `'oncreate' should be a function expression, not an arrow function expression`, prop.start );
7+
}
8+
}
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import usesThisOrArguments from '../utils/usesThisOrArguments.js';
2+
3+
export default function onteardown ( validator, prop ) {
4+
if ( prop.value.type === 'ArrowFunctionExpression' ) {
5+
if ( usesThisOrArguments( prop.value.body ) ) {
6+
validator.error( `'onteardown' should be a function expression, not an arrow function expression`, prop.start );
7+
}
8+
}
9+
}
+3-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
import usesThisOrArguments from '../utils/usesThisOrArguments.js';
1+
import oncreate from './oncreate.js';
22

33
export default function onrender ( validator, prop ) {
4-
if ( prop.value.type === 'ArrowFunctionExpression' ) {
5-
if ( usesThisOrArguments( prop.value.body ) ) {
6-
validator.error( `'onrender' should be a function expression, not an arrow function expression`, prop.start );
7-
}
8-
}
4+
validator.warn( `'onrender' has been deprecated in favour of 'oncreate', and will cause an error in Svelte 2.x`, prop.start );
5+
oncreate( validator, prop );
96
}
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
import usesThisOrArguments from '../utils/usesThisOrArguments.js';
1+
import ondestroy from './ondestroy.js';
22

33
export default function onteardown ( validator, prop ) {
4-
if ( prop.value.type === 'ArrowFunctionExpression' ) {
5-
if ( usesThisOrArguments( prop.value.body ) ) {
6-
validator.error( `'onteardown' should be a function expression, not an arrow function expression`, prop.start );
7-
}
8-
}
4+
validator.warn( `'onteardown' has been deprecated in favour of 'ondestroy', and will cause an error in Svelte 2.x`, prop.start );
5+
ondestroy( validator, prop );
96
}

0 commit comments

Comments
 (0)