@@ -12,6 +12,7 @@ import { transformVFor } from './v-for'
12
12
import { transformVMemo } from './v-memo'
13
13
import { transformVHtml } from './v-html'
14
14
import { transformVSlot } from './v-slot'
15
+ import { transformVOn } from './v-on'
15
16
import type { JSXAttribute , JSXElement , Node , Program } from '@babel/types'
16
17
17
18
export type JsxDirectiveNode = {
@@ -51,7 +52,9 @@ export function transformJsxDirective(
51
52
52
53
const s = new MagicString ( code )
53
54
for ( const { ast, offset } of asts ) {
54
- if ( ! / \s v - ( i f | f o r | m e m o | o n c e | h t m l | s l o t ) / . test ( s . sliceNode ( ast , { offset } ) ) )
55
+ if (
56
+ ! / \s v - ( i f | f o r | m e m o | o n c e | h t m l | s l o t | o n ) / . test ( s . sliceNode ( ast , { offset } ) )
57
+ )
55
58
continue
56
59
57
60
const vIfMap = new Map < Node , JsxDirectiveNode [ ] > ( )
@@ -61,6 +64,7 @@ export function transformJsxDirective(
61
64
} ) [ ] = [ ]
62
65
const vHtmlNodes : JsxDirectiveNode [ ] = [ ]
63
66
const vSlotSet = new Set < JSXElement > ( )
67
+ const vOnNodes : JsxDirectiveNode [ ] = [ ]
64
68
walkAST < Node > ( ast , {
65
69
enter ( node , parent ) {
66
70
if ( node . type !== 'JSXElement' ) return
@@ -97,6 +101,12 @@ export function transformJsxDirective(
97
101
: node ,
98
102
)
99
103
}
104
+ if ( attribute . name . name === 'v-on' ) {
105
+ vOnNodes . push ( {
106
+ node,
107
+ attribute,
108
+ } )
109
+ }
100
110
}
101
111
102
112
if ( vIfAttribute ) {
@@ -131,6 +141,7 @@ export function transformJsxDirective(
131
141
version >= 3.2 && transformVMemo ( vMemoNodes , s , offset )
132
142
transformVHtml ( vHtmlNodes , s , offset , version )
133
143
transformVSlot ( Array . from ( vSlotSet ) , s , offset , version )
144
+ transformVOn ( vOnNodes , s , offset , version )
134
145
}
135
146
136
147
return generateTransform ( s , id )
0 commit comments