Skip to content

Commit

Permalink
Refactor code to prepare for future support of enums for example
Browse files Browse the repository at this point in the history
  • Loading branch information
danez committed Apr 24, 2024
1 parent 39d2271 commit bf68a56
Showing 1 changed file with 26 additions and 11 deletions.
37 changes: 26 additions & 11 deletions packages/react-docgen/src/utils/getTSType.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import type {
TypeScript,
TSQualifiedName,
TSLiteralType,
TSTypeAliasDeclaration,
} from '@babel/types';
import { getDocblock } from './docblock.js';

Expand All @@ -54,6 +55,8 @@ const tsTypes: Record<string, string> = {
TSVoidKeyword: 'void',
};

const UNKNOWN_TYPE = Object.freeze({ name: 'unknown' }) as SimpleType;

const namedTypes: Record<
string,
(
Expand All @@ -71,6 +74,7 @@ const namedTypes: Record<
TSIntersectionType: handleTSIntersectionType,
TSMappedType: handleTSMappedType,
TSTupleType: handleTSTupleType,
TSTypeAliasDeclaration: handleTSTypeAliasDeclaration,
TSTypeQuery: handleTSTypeQuery,
TSTypeOperator: handleTSTypeOperator,
TSIndexedAccessType: handleTSIndexedAccessType,
Expand Down Expand Up @@ -113,6 +117,15 @@ function handleTSArrayType(
};
}

function handleTSTypeAliasDeclaration(
path: NodePath<TSTypeAliasDeclaration>,
typeParams: TypeParameters | null,
): TypeDescriptor<TSFunctionSignatureType> {
const resolvedTypeAnnotation = path.get('typeAnnotation');

return getTSTypeWithResolvedTypes(resolvedTypeAnnotation, typeParams);
}

function handleTSTypeReference(
path: NodePath<TSTypeReference>,
typeParams: TypeParameters | null,
Expand All @@ -127,8 +140,7 @@ function handleTSTypeReference(
}

const resolvedPath =
(typeParams && typeParams[type.name]) ||
resolveToValue(path.get('typeName'));
(typeParams && typeParams[type.name]) || resolveToValue(typeName);

const typeParameters = path.get('typeParameters');
const resolvedTypeParameters = resolvedPath.get('typeParameters') as NodePath<
Expand All @@ -149,15 +161,18 @@ function handleTSTypeReference(
resolvedPath as NodePath<TSType | TSTypeAnnotation>,
null,
);
}
} else if (resolvedPath !== typeName) {
const resolvedType = getTSTypeWithResolvedTypes(
resolvedPath as NodePath<TSType | TSTypeAnnotation>,
typeParams,
);

const resolvedTypeAnnotation = resolvedPath.get('typeAnnotation') as NodePath<
TSType | TSTypeAnnotation | null | undefined
>;
if (resolvedType !== UNKNOWN_TYPE) {
return resolvedType;
}
}

if (resolvedTypeAnnotation.hasNode()) {
type = getTSTypeWithResolvedTypes(resolvedTypeAnnotation, typeParams);
} else if (typeParameters.hasNode()) {
if (typeParameters.hasNode()) {
const params = typeParameters.get('params');

type = {
Expand Down Expand Up @@ -479,7 +494,7 @@ function handleTSIndexedAccessType(
});

if (!resolvedType) {
return { name: 'unknown' };
return UNKNOWN_TYPE;
}

return {
Expand Down Expand Up @@ -533,7 +548,7 @@ function getTSTypeWithResolvedTypes(
}

if (!type) {
type = { name: 'unknown' };
type = UNKNOWN_TYPE;
}

if (typeAliasName) {
Expand Down

0 comments on commit bf68a56

Please sign in to comment.