Skip to content

Commit 5d2c64b

Browse files
committed
improve
1 parent cbf1711 commit 5d2c64b

File tree

5 files changed

+375
-103
lines changed

5 files changed

+375
-103
lines changed

lib/utils/ts-utils/index.js

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
const {
22
isTypeNode,
3-
resolveQualifiedType,
43
extractRuntimeProps,
54
isTSTypeLiteral,
65
isTSTypeLiteralOrTSFunctionType,
7-
extractRuntimeEmits
6+
extractRuntimeEmits,
7+
flattenTypeNodes,
8+
isTSInterfaceBody
89
} = require('./ts-ast')
910
const {
1011
getComponentPropsFromTypeDefineTypes,
@@ -36,15 +37,24 @@ module.exports = {
3637
* @return {(ComponentTypeProp|ComponentInferTypeProp|ComponentUnknownProp)[]} Array of component props
3738
*/
3839
function 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
*/
5666
function 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

Comments
 (0)