Skip to content

Commit

Permalink
improve
Browse files Browse the repository at this point in the history
  • Loading branch information
ota-meshi committed May 11, 2023
1 parent d99a1d4 commit ae8bcdc
Show file tree
Hide file tree
Showing 5 changed files with 375 additions and 103 deletions.
54 changes: 38 additions & 16 deletions lib/utils/ts-utils/index.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
const {
isTypeNode,
resolveQualifiedType,
extractRuntimeProps,
isTSTypeLiteral,
isTSTypeLiteralOrTSFunctionType,
extractRuntimeEmits
extractRuntimeEmits,
flattenTypeNodes,
isTSInterfaceBody
} = require('./ts-ast')
const {
getComponentPropsFromTypeDefineTypes,
Expand Down Expand Up @@ -36,15 +37,24 @@ module.exports = {
* @return {(ComponentTypeProp|ComponentInferTypeProp|ComponentUnknownProp)[]} Array of component props
*/
function getComponentPropsFromTypeDefine(context, propsNode) {
const defNode = resolveQualifiedType(
/** @type {(ComponentTypeProp|ComponentInferTypeProp|ComponentUnknownProp)[]} */
const result = []
for (const defNode of flattenTypeNodes(
context,
/** @type {TSESTreeTypeNode} */ (propsNode),
isTSTypeLiteral
)
if (!defNode) {
return getComponentPropsFromTypeDefineTypes(context, propsNode)
/** @type {TSESTreeTypeNode} */ (propsNode)
)) {
if (isTSInterfaceBody(defNode) || isTSTypeLiteral(defNode)) {
result.push(...extractRuntimeProps(context, defNode))
} else {
result.push(
...getComponentPropsFromTypeDefineTypes(
context,
/** @type {TypeNode} */ (defNode)
)
)
}
}
return [...extractRuntimeProps(context, defNode)]
return result
}

/**
Expand All @@ -54,13 +64,25 @@ function getComponentPropsFromTypeDefine(context, propsNode) {
* @return {(ComponentTypeEmit|ComponentInferTypeEmit|ComponentUnknownEmit)[]} Array of component emits
*/
function getComponentEmitsFromTypeDefine(context, emitsNode) {
const defNode = resolveQualifiedType(
/** @type {(ComponentTypeEmit|ComponentInferTypeEmit|ComponentUnknownEmit)[]} */
const result = []
for (const defNode of flattenTypeNodes(
context,
/** @type {TSESTreeTypeNode} */ (emitsNode),
isTSTypeLiteralOrTSFunctionType
)
if (!defNode) {
return getComponentEmitsFromTypeDefineTypes(context, emitsNode)
/** @type {TSESTreeTypeNode} */ (emitsNode)
)) {
if (
isTSInterfaceBody(defNode) ||
isTSTypeLiteralOrTSFunctionType(defNode)
) {
result.push(...extractRuntimeEmits(defNode))
} else {
result.push(
...getComponentEmitsFromTypeDefineTypes(
context,
/** @type {TypeNode} */ (defNode)
)
)
}
}
return [...extractRuntimeEmits(defNode)]
return result
}

0 comments on commit ae8bcdc

Please sign in to comment.