Skip to content

Commit f0f1d13

Browse files
committed
fix(transformer): Properly cover overloads where no signatures declare arguments
1 parent fcf95de commit f0f1d13

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

src/transformer/descriptor/method/method.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,15 +88,15 @@ function CreateUnionTypeOfEquality(signatureType: ts.TypeNode | undefined, prima
8888
}
8989

9090
function ResolveParameterBranch(declarations: ts.ParameterDeclaration[], allDeclarations: ts.ParameterDeclaration[], returnValue: ts.Expression, elseBranch: ts.Statement): ts.Statement {
91-
const [firstDeclaration, ...remainingDeclarations]: ts.ParameterDeclaration[] = declarations;
91+
const [firstDeclaration, ...remainingDeclarations]: Array<ts.ParameterDeclaration | undefined> = declarations;
9292

9393
const condition: ts.Expression = remainingDeclarations.reduce(
9494
(prevStatement: ts.Expression, declaration: ts.ParameterDeclaration, index: number) =>
9595
ts.createLogicalAnd(
9696
prevStatement,
9797
CreateUnionTypeOfEquality(declaration.type, allDeclarations[index + 1]),
9898
),
99-
CreateUnionTypeOfEquality(firstDeclaration.type, allDeclarations[0]),
99+
CreateUnionTypeOfEquality(firstDeclaration?.type, allDeclarations[0]),
100100
);
101101

102102
return ts.createIf(condition, ts.createReturn(returnValue), elseBranch);
@@ -105,16 +105,17 @@ function ResolveParameterBranch(declarations: ts.ParameterDeclaration[], allDecl
105105
export function ResolveSignatureElseBranch(signatures: MethodSignature[], longestParameterList: ts.ParameterDeclaration[]): ts.Statement {
106106
const transformOverloadsOption: TsAutoMockOverloadOptions = GetTsAutoMockOverloadOptions();
107107

108-
const [signature, ...remainingSignatures]: MethodSignature[] = signatures.filter((_: unknown, i: number) => transformOverloadsOption || i === 0);
108+
const [signature, ...remainingSignatures]: MethodSignature[] = signatures.filter((_: unknown, notFirst: number) => transformOverloadsOption || !notFirst);
109109

110-
if (remainingSignatures.length) {
111-
const elseBranch: ts.Statement = ResolveSignatureElseBranch(remainingSignatures, longestParameterList);
112-
113-
const currentParameters: ts.ParameterDeclaration[] = signature.parameters || [];
114-
return ResolveParameterBranch(currentParameters, longestParameterList, signature.returnValue, elseBranch);
115-
} else {
110+
const indistinctSignatures: boolean = signatures.every((sig: MethodSignature) => !sig.parameters?.length);
111+
if (!remainingSignatures.length || indistinctSignatures) {
116112
return ts.createReturn(signature.returnValue);
117113
}
114+
115+
const elseBranch: ts.Statement = ResolveSignatureElseBranch(remainingSignatures, longestParameterList);
116+
117+
const currentParameters: ts.ParameterDeclaration[] = signature.parameters || [];
118+
return ResolveParameterBranch(currentParameters, longestParameterList, signature.returnValue, elseBranch);
118119
}
119120

120121
function CreateProviderGetMethod(): ts.PropertyAccessExpression {

0 commit comments

Comments
 (0)