1
1
const {
2
2
isTypeNode,
3
- resolveQualifiedType,
4
3
extractRuntimeProps,
5
4
isTSTypeLiteral,
6
5
isTSTypeLiteralOrTSFunctionType,
7
- extractRuntimeEmits
6
+ extractRuntimeEmits,
7
+ flattenTypeNodes,
8
+ isTSInterfaceBody
8
9
} = require ( './ts-ast' )
9
10
const {
10
11
getComponentPropsFromTypeDefineTypes,
@@ -36,15 +37,24 @@ module.exports = {
36
37
* @return {(ComponentTypeProp|ComponentInferTypeProp|ComponentUnknownProp)[] } Array of component props
37
38
*/
38
39
function getComponentPropsFromTypeDefine ( context , propsNode ) {
39
- const defNode = resolveQualifiedType (
40
+ /** @type {(ComponentTypeProp|ComponentInferTypeProp|ComponentUnknownProp)[] } */
41
+ const result = [ ]
42
+ for ( const defNode of flattenTypeNodes (
40
43
context ,
41
- /** @type {TSESTreeTypeNode } */ ( propsNode ) ,
42
- isTSTypeLiteral
43
- )
44
- if ( ! defNode ) {
45
- return getComponentPropsFromTypeDefineTypes ( context , propsNode )
44
+ /** @type {TSESTreeTypeNode } */ ( propsNode )
45
+ ) ) {
46
+ if ( isTSInterfaceBody ( defNode ) || isTSTypeLiteral ( defNode ) ) {
47
+ result . push ( ...extractRuntimeProps ( context , defNode ) )
48
+ } else {
49
+ result . push (
50
+ ...getComponentPropsFromTypeDefineTypes (
51
+ context ,
52
+ /** @type {TypeNode } */ ( defNode )
53
+ )
54
+ )
55
+ }
46
56
}
47
- return [ ... extractRuntimeProps ( context , defNode ) ]
57
+ return result
48
58
}
49
59
50
60
/**
@@ -54,13 +64,25 @@ function getComponentPropsFromTypeDefine(context, propsNode) {
54
64
* @return {(ComponentTypeEmit|ComponentInferTypeEmit|ComponentUnknownEmit)[] } Array of component emits
55
65
*/
56
66
function getComponentEmitsFromTypeDefine ( context , emitsNode ) {
57
- const defNode = resolveQualifiedType (
67
+ /** @type {(ComponentTypeEmit|ComponentInferTypeEmit|ComponentUnknownEmit)[] } */
68
+ const result = [ ]
69
+ for ( const defNode of flattenTypeNodes (
58
70
context ,
59
- /** @type {TSESTreeTypeNode } */ ( emitsNode ) ,
60
- isTSTypeLiteralOrTSFunctionType
61
- )
62
- if ( ! defNode ) {
63
- return getComponentEmitsFromTypeDefineTypes ( context , emitsNode )
71
+ /** @type {TSESTreeTypeNode } */ ( emitsNode )
72
+ ) ) {
73
+ if (
74
+ isTSInterfaceBody ( defNode ) ||
75
+ isTSTypeLiteralOrTSFunctionType ( defNode )
76
+ ) {
77
+ result . push ( ...extractRuntimeEmits ( defNode ) )
78
+ } else {
79
+ result . push (
80
+ ...getComponentEmitsFromTypeDefineTypes (
81
+ context ,
82
+ /** @type {TypeNode } */ ( defNode )
83
+ )
84
+ )
85
+ }
64
86
}
65
- return [ ... extractRuntimeEmits ( defNode ) ]
87
+ return result
66
88
}
0 commit comments