11const {
22 isTypeNode,
3- resolveQualifiedType,
43 extractRuntimeProps,
54 isTSTypeLiteral,
65 isTSTypeLiteralOrTSFunctionType,
7- extractRuntimeEmits
6+ extractRuntimeEmits,
7+ flattenTypeNodes,
8+ isTSInterfaceBody
89} = require ( './ts-ast' )
910const {
1011 getComponentPropsFromTypeDefineTypes,
@@ -36,15 +37,24 @@ module.exports = {
3637 * @return {(ComponentTypeProp|ComponentInferTypeProp|ComponentUnknownProp)[] } Array of component props
3738 */
3839function getComponentPropsFromTypeDefine ( context , propsNode ) {
39- const defNode = resolveQualifiedType (
40+ /** @type {(ComponentTypeProp|ComponentInferTypeProp|ComponentUnknownProp)[] } */
41+ const result = [ ]
42+ for ( const defNode of flattenTypeNodes (
4043 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+ }
4656 }
47- return [ ... extractRuntimeProps ( context , defNode ) ]
57+ return result
4858}
4959
5060/**
@@ -54,13 +64,25 @@ function getComponentPropsFromTypeDefine(context, propsNode) {
5464 * @return {(ComponentTypeEmit|ComponentInferTypeEmit|ComponentUnknownEmit)[] } Array of component emits
5565 */
5666function getComponentEmitsFromTypeDefine ( context , emitsNode ) {
57- const defNode = resolveQualifiedType (
67+ /** @type {(ComponentTypeEmit|ComponentInferTypeEmit|ComponentUnknownEmit)[] } */
68+ const result = [ ]
69+ for ( const defNode of flattenTypeNodes (
5870 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+ }
6486 }
65- return [ ... extractRuntimeEmits ( defNode ) ]
87+ return result
6688}
0 commit comments