@@ -131,8 +131,8 @@ export default function tag(parser: Parser) {
131131 const type = meta_tags . has ( name )
132132 ? meta_tags . get ( name )
133133 : ( / [ A - Z ] / . test ( name [ 0 ] ) || name === 'svelte:self' || name === 'svelte:component' ) ? 'InlineComponent'
134- : name === 'title' && parent_is_head ( parser . stack ) ? 'Title'
135- : name === 'slot' && ! parser . customElement ? 'Slot' : 'Element' ;
134+ : name === 'title' && parent_is_head ( parser . stack ) ? 'Title'
135+ : name === 'slot' && ! parser . customElement ? 'Slot' : 'Element' ;
136136
137137 const element : Node = {
138138 start,
@@ -360,14 +360,6 @@ function read_attribute(parser: Parser, unique_names: Set<string>) {
360360
361361 let name = parser . read_until ( / ( \s | = | \/ | > ) / ) ;
362362 if ( ! name ) return null ;
363- if ( unique_names . has ( name ) ) {
364- parser . error ( {
365- code : `duplicate-attribute` ,
366- message : 'Attributes need to be unique'
367- } , start ) ;
368- }
369-
370- unique_names . add ( name ) ;
371363
372364 let end = parser . index ;
373365
@@ -376,6 +368,17 @@ function read_attribute(parser: Parser, unique_names: Set<string>) {
376368 const colon_index = name . indexOf ( ':' ) ;
377369 const type = colon_index !== - 1 && get_directive_type ( name . slice ( 0 , colon_index ) ) ;
378370
371+ if ( unique_names . has ( name ) ) {
372+ parser . error ( {
373+ code : `duplicate-attribute` ,
374+ message : 'Attributes need to be unique'
375+ } , start ) ;
376+ }
377+
378+ if ( type !== "EventHandler" ) {
379+ unique_names . add ( name ) ;
380+ }
381+
379382 let value : any [ ] | true = true ;
380383 if ( parser . eat ( '=' ) ) {
381384 value = read_attribute_value ( parser ) ;
@@ -453,8 +456,8 @@ function read_attribute_value(parser: Parser) {
453456
454457 const regex = (
455458 quote_mark === `'` ? / ' / :
456- quote_mark === `"` ? / " / :
457- / ( \/ > | [ \s " ' = < > ` ] ) /
459+ quote_mark === `"` ? / " / :
460+ / ( \/ > | [ \s " ' = < > ` ] ) /
458461 ) ;
459462
460463 const value = read_sequence ( parser , ( ) => ! ! parser . match_regex ( regex ) ) ;
0 commit comments