@@ -22,7 +22,9 @@ export function genSetEvent(
2222 const { element, key, keyOverride, value, modifiers, delegate, effect } = oper
2323
2424 const name = genName ( )
25- const handler = genEventHandler ( context , value )
25+ let handler = genEventHandler ( context , value )
26+ handler = genWithModifiers ( context , handler , modifiers . nonKeys )
27+ handler = genWithKeys ( context , handler , modifiers . keys )
2628 const eventOptions = genEventOptions ( )
2729
2830 if ( delegate ) {
@@ -36,7 +38,7 @@ export function genSetEvent(
3638 vaporHelper ( delegate ? 'delegate' : 'on' ) ,
3739 `n${ element } ` ,
3840 name ,
39- handler ,
41+ [ '() => ' , ... handler ] ,
4042 eventOptions ,
4143 ) ,
4244 ]
@@ -55,13 +57,11 @@ export function genSetEvent(
5557 }
5658
5759 function genEventOptions ( ) : CodeFragment [ ] | undefined {
58- let { options, keys , nonKeys } = modifiers
59- if ( ! options . length && ! nonKeys . length && ! keys . length && ! effect ) return
60+ let { options } = modifiers
61+ if ( ! options . length && ! effect ) return
6062
6163 return genMulti (
6264 DELIMITERS_OBJECT_NEWLINE ,
63- ! ! nonKeys . length && [ 'modifiers: ' , genArrayExpression ( nonKeys ) ] ,
64- ! ! keys . length && [ 'keys: ' , genArrayExpression ( keys ) ] ,
6565 effect && [ 'effect: true' ] ,
6666 ...options . map ( ( option ) : CodeFragment [ ] => [ `${ option } : true` ] ) ,
6767 )
@@ -83,10 +83,6 @@ export function genSetDynamicEvents(
8383 ]
8484}
8585
86- function genArrayExpression ( elements : string [ ] ) {
87- return `[${ elements . map ( it => JSON . stringify ( it ) ) . join ( ', ' ) } ]`
88- }
89-
9086export function genEventHandler (
9187 context : CodegenContext ,
9288 value : SimpleExpressionNode | undefined ,
@@ -103,15 +99,39 @@ export function genEventHandler(
10399 } )
104100 const hasMultipleStatements = value . content . includes ( `;` )
105101 return [
106- '() => $event => ' ,
102+ '$event => ' ,
107103 hasMultipleStatements ? '{' : '(' ,
108104 ...expr ,
109105 hasMultipleStatements ? '}' : ')' ,
110106 ]
111107 } else {
112- return [ '() => ' , ...genExpression ( value , context ) ]
108+ return [ ...genExpression ( value , context ) ]
113109 }
114110 }
115111
116112 return [ '() => {}' ]
117113}
114+
115+ function genWithModifiers (
116+ context : CodegenContext ,
117+ handler : CodeFragment [ ] ,
118+ nonKeys : string [ ] ,
119+ ) : CodeFragment [ ] {
120+ if ( ! nonKeys . length ) return handler
121+
122+ return genCall (
123+ context . helper ( 'withModifiers' ) ,
124+ handler ,
125+ JSON . stringify ( nonKeys ) ,
126+ )
127+ }
128+
129+ function genWithKeys (
130+ context : CodegenContext ,
131+ handler : CodeFragment [ ] ,
132+ keys : string [ ] ,
133+ ) : CodeFragment [ ] {
134+ if ( ! keys . length ) return handler
135+
136+ return genCall ( context . helper ( 'withKeys' ) , handler , JSON . stringify ( keys ) )
137+ }
0 commit comments