Skip to content

Commit 82e7a58

Browse files
committed
Refactoring and cleaning up
1 parent ff45fd5 commit 82e7a58

File tree

5 files changed

+28
-16
lines changed

5 files changed

+28
-16
lines changed

src/parsers/exportParser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ export function parseExport(
149149
type: ts.Type,
150150
parentNamespaces: string[],
151151
) {
152-
const parsedType = resolveType(type, parserContext);
152+
const parsedType = resolveType(type, undefined, parserContext);
153153
if (parsedType) {
154154
// Patch parentNamespaces if the type supports it
155155
if (parsedType && 'parentNamespaces' in parsedType) {

src/parsers/functionParser.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ function parseFunctionSignature(
7575
parseParameter(parameterSymbol, context, skipResolvingComplexTypes),
7676
);
7777

78-
const returnValueType = resolveType(signature.getReturnType(), context);
78+
const returnValueType = resolveType(signature.getReturnType(), undefined, context);
7979

8080
return new CallSignature(parameters, returnValueType);
8181
}
@@ -93,8 +93,8 @@ function parseParameter(
9393

9494
const parameterType = resolveType(
9595
checker.getTypeOfSymbolAtLocation(parameterSymbol, parameterSymbol.valueDeclaration!),
96-
context,
9796
parameterDeclaration.type,
97+
context,
9898
skipResolvingComplexTypes,
9999
);
100100

src/parsers/propertyParser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ export function parseProperty(
3131

3232
const parsedType = resolveType(
3333
type,
34-
context,
3534
isTypeParameterLike(type) ? undefined : propertySignature?.type,
35+
context,
3636
skipResolvingComplexTypes,
3737
);
3838

src/parsers/typeResolver.ts

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,17 @@ import {
1919
import { resolveUnionType } from './unionTypeResolver';
2020
import { getTypeName } from './common';
2121

22+
/**
23+
*
24+
* @param type TypeScript type to resolve
25+
* @param typeNode TypeScript TypeNode associated with the type, if available. It can be used to preserve the authored type name.
26+
* @param context Parser context containing TypeScript checker and other utilities.
27+
* @param skipResolvingComplexTypes If true, complex types like functions and objects will be resolved to their intrinsic types (e.g., 'function', 'object').
28+
*/
2229
export function resolveType(
2330
type: ts.Type,
31+
typeNode: ts.TypeNode | undefined,
2432
context: ParserContext,
25-
typeNode?: ts.TypeNode,
2633
skipResolvingComplexTypes: boolean = false,
2734
): TypeNode {
2835
const { checker, typeStack, includeExternalTypes } = context;
@@ -73,15 +80,19 @@ export function resolveType(
7380
namespaces,
7481
declaration?.constraint?.getText(),
7582
declaration?.default
76-
? resolveType(checker.getTypeAtLocation(declaration.default), context)
83+
? resolveType(checker.getTypeAtLocation(declaration.default), undefined, context)
7784
: undefined,
7885
);
7986
}
8087

8188
if (checker.isArrayType(type)) {
8289
// @ts-expect-error - Private method
8390
const arrayType: ts.Type = checker.getElementTypeOfArrayType(type);
84-
return new ArrayNode(type.aliasSymbol?.name, namespaces, resolveType(arrayType, context));
91+
return new ArrayNode(
92+
type.aliasSymbol?.name,
93+
namespaces,
94+
resolveType(arrayType, undefined, context),
95+
);
8596
}
8697

8798
if (!includeExternalTypes && isTypeExternal(type, checker)) {
@@ -126,7 +137,7 @@ export function resolveType(
126137
const typeName = getTypeName(type, typeSymbol, checker, false);
127138

128139
for (const memberType of type.types) {
129-
memberTypes.push(resolveType(memberType, context));
140+
memberTypes.push(resolveType(memberType, undefined, context));
130141
}
131142

132143
if (memberTypes.length === 0) {
@@ -160,7 +171,7 @@ export function resolveType(
160171
return new TupleNode(
161172
typeSymbol?.name ?? type.aliasSymbol?.name,
162173
namespaces,
163-
(type as ts.TupleType).typeArguments?.map((x) => resolveType(x, context)) ?? [],
174+
(type as ts.TupleType).typeArguments?.map((x) => resolveType(x, undefined, context)) ?? [],
164175
);
165176
}
166177

@@ -235,14 +246,15 @@ export function resolveType(
235246
undefined,
236247
[],
237248
[
238-
resolveType((type as ts.ConditionalType).resolvedTrueType!, context),
239-
resolveType((type as ts.ConditionalType).resolvedFalseType!, context),
249+
// TODO: Pass TypeNode here to resolve aliases correctly
250+
resolveType((type as ts.ConditionalType).resolvedTrueType!, undefined, context),
251+
resolveType((type as ts.ConditionalType).resolvedFalseType!, undefined, context),
240252
],
241253
);
242254
} else if (conditionalType.resolvedTrueType) {
243-
return resolveType(conditionalType.resolvedTrueType, context);
255+
return resolveType(conditionalType.resolvedTrueType, undefined, context);
244256
} else if (conditionalType.resolvedFalseType) {
245-
return resolveType(conditionalType.resolvedFalseType, context);
257+
return resolveType(conditionalType.resolvedFalseType, undefined, context);
246258
}
247259
}
248260

src/parsers/unionTypeResolver.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export function resolveUnionType(
6060
memberTypeNode = typeNode.types[index];
6161
}
6262

63-
result.push(resolveType(memberType, context, memberTypeNode || typeNode));
63+
result.push(resolveType(memberType, memberTypeNode || typeNode, context));
6464
}
6565
} else {
6666
// Type is an union type, but TypeNode is not.
@@ -74,11 +74,11 @@ export function resolveUnionType(
7474
// In such case propagate the parent TypeNode to the member types.
7575
// It will help to resolve T correctly and won't have any effect on the `undefined` type.
7676
for (const memberType of memberTypes) {
77-
result.push(resolveType(memberType, context, typeNode));
77+
result.push(resolveType(memberType, typeNode, context));
7878
}
7979
} else {
8080
for (const memberType of memberTypes) {
81-
result.push(resolveType(memberType, context));
81+
result.push(resolveType(memberType, undefined, context));
8282
}
8383
}
8484
}

0 commit comments

Comments
 (0)