@@ -40,16 +40,33 @@ const parseDirectives = (params: {
4040 isComponent : boolean
4141} ) => {
4242 const {
43- name , path, value, state, tag, isComponent,
43+ path, value, state, tag, isComponent,
4444 } = params ;
4545 const args : Array < t . Expression | t . NullLiteral > = [ ] ;
4646 const vals : t . Expression [ ] = [ ] ;
4747 const modifiersSet : Set < string > [ ] = [ ] ;
48- const underscoreModifiers = name . split ( '_' ) ;
49- const directiveName : string = underscoreModifiers . shift ( )
50- ?. replace ( / ^ v / , '' )
48+
49+ let directiveName ;
50+ let directiveArgument ;
51+ let directiveModifiers ;
52+ if ( 'namespace' in path . node . name ) {
53+ [ directiveName , directiveArgument ] = params . name . split ( ':' ) ;
54+ directiveName = path . node . name . namespace . name ;
55+ directiveArgument = path . node . name . name . name ;
56+ directiveModifiers = directiveArgument . split ( '_' ) . slice ( 1 ) ;
57+ } else {
58+ const underscoreModifiers = params . name . split ( '_' ) ;
59+ directiveName = underscoreModifiers . shift ( ) || '' ;
60+ directiveModifiers = underscoreModifiers ;
61+ }
62+ directiveName = directiveName
63+ . replace ( / ^ v / , '' )
5164 . replace ( / ^ - / , '' )
52- . replace ( / ^ \S / , ( s : string ) => s . toLowerCase ( ) ) || '' ;
65+ . replace ( / ^ \S / , ( s : string ) => s . toLowerCase ( ) ) ;
66+
67+ if ( directiveArgument ) {
68+ args . push ( t . stringLiteral ( directiveArgument ) ) ;
69+ }
5370
5471 const isVModels = directiveName === 'models' ;
5572 const isVModel = directiveName === 'model' ;
@@ -64,7 +81,7 @@ const parseDirectives = (params: {
6481 const shouldResolve = ! [ 'html' , 'text' , 'model' , 'models' ] . includes ( directiveName )
6582 || ( isVModel && ! isComponent ) ;
6683
67- let modifiers = underscoreModifiers ;
84+ let modifiers = directiveModifiers ;
6885
6986 if ( t . isArrayExpression ( value ) ) {
7087 const elementsList = isVModels ? value . elements ! : [ value ] ;
@@ -95,9 +112,9 @@ const parseDirectives = (params: {
95112 } else if ( isVModel && ! shouldResolve ) {
96113 // work as v-model={value}
97114 args . push ( t . nullLiteral ( ) ) ;
98- modifiersSet . push ( new Set ( underscoreModifiers ) ) ;
115+ modifiersSet . push ( new Set ( directiveModifiers ) ) ;
99116 } else {
100- modifiersSet . push ( new Set ( underscoreModifiers ) ) ;
117+ modifiersSet . push ( new Set ( directiveModifiers ) ) ;
101118 }
102119
103120 return {
0 commit comments