Ensure that only one {{yield}} can be used

pull/86/head
Fabrice Weinberg 9 years ago
parent 0179ee154c
commit 57ae613b6a

@ -490,7 +490,7 @@ export default function generate ( parsed, source, options ) {
}; };
this.appendChild = function appendChild ( child ) { this.appendChild = function appendChild ( child ) {
this.yield.appendChild(child) this.yield.appendChild(child);
} }
${initStatements.join( '\n\n' )} ${initStatements.join( '\n\n' )}

@ -8,9 +8,14 @@ export default {
generator.addSourcemapLocations( node.expression ); generator.addSourcemapLocations( node.expression );
if (node.expression.name === 'yield') { if (node.expression.name === 'yield') {
if (generator.hasYield === undefined) {
generator.hasYield = true;
generator.current.initStatements.push( deindent` generator.current.initStatements.push( deindent`
component.yield = ${generator.current.target}; component.yield = ${generator.current.target};
` ); ` );
} else {
throw new Error( `Only one {{yield}} per component.` );
}
} else { } else {
generator.addElement( name, `document.createTextNode( ${snippet} )`, true ); generator.addElement( name, `document.createTextNode( ${snippet} )`, true );

@ -0,0 +1,5 @@
export default {
compileError: function ( assert, err ) {
assert.equal('Error: Only one {{yield}} per component.', err)
}
};

@ -0,0 +1,2 @@
<p>{{yield}}</p>
<p>{{yield}}</p>

@ -228,7 +228,7 @@ describe( 'svelte', () => {
compiled = svelte.compile( source ); compiled = svelte.compile( source );
} catch ( err ) { } catch ( err ) {
if ( config.compileError ) { if ( config.compileError ) {
config.compileError( err ); config.compileError( assert, err );
return; return;
} else { } else {
throw err; throw err;

Loading…
Cancel
Save