@@ -40,16 +40,33 @@ const parseDirectives = (params: {
40
40
isComponent : boolean
41
41
} ) => {
42
42
const {
43
- name , path, value, state, tag, isComponent,
43
+ path, value, state, tag, isComponent,
44
44
} = params ;
45
45
const args : Array < t . Expression | t . NullLiteral > = [ ] ;
46
46
const vals : t . Expression [ ] = [ ] ;
47
47
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 / , '' )
51
64
. 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
+ }
53
70
54
71
const isVModels = directiveName === 'models' ;
55
72
const isVModel = directiveName === 'model' ;
@@ -64,7 +81,7 @@ const parseDirectives = (params: {
64
81
const shouldResolve = ! [ 'html' , 'text' , 'model' , 'models' ] . includes ( directiveName )
65
82
|| ( isVModel && ! isComponent ) ;
66
83
67
- let modifiers = underscoreModifiers ;
84
+ let modifiers = directiveModifiers ;
68
85
69
86
if ( t . isArrayExpression ( value ) ) {
70
87
const elementsList = isVModels ? value . elements ! : [ value ] ;
@@ -95,9 +112,9 @@ const parseDirectives = (params: {
95
112
} else if ( isVModel && ! shouldResolve ) {
96
113
// work as v-model={value}
97
114
args . push ( t . nullLiteral ( ) ) ;
98
- modifiersSet . push ( new Set ( underscoreModifiers ) ) ;
115
+ modifiersSet . push ( new Set ( directiveModifiers ) ) ;
99
116
} else {
100
- modifiersSet . push ( new Set ( underscoreModifiers ) ) ;
117
+ modifiersSet . push ( new Set ( directiveModifiers ) ) ;
101
118
}
102
119
103
120
return {
0 commit comments