Skip to content

Commit c22c199

Browse files
authored
build(dependencies): update dependencies (#296)
1 parent 3a1112a commit c22c199

File tree

4 files changed

+37
-1
lines changed

4 files changed

+37
-1
lines changed

src/transformer/genericDeclaration/genericDeclarationSupported.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,12 @@ import * as ts from 'typescript';
22
import { InterfaceOrClassDeclaration } from '../scope/scope';
33

44
export type GenericDeclarationSupported = InterfaceOrClassDeclaration & ts.TypeAliasDeclaration;
5+
6+
export function extensionExpressionSupported(expression: ts.LeftHandSideExpression): expression is ts.Identifier {
7+
// This check is to prevent extends function() to die.
8+
// We don't have to support call expression in heritage extends because it will never have generics.
9+
// - You can only use extends with a function that return a constructor (new (...args: unknown[]) => unknown)
10+
// - You cannot pass generics to extends function
11+
// the test is in transformer/descriptor/extends/callExpression.test.ts
12+
return !ts.isCallExpression(expression);
13+
}

src/transformer/mockFactoryCall/mockFactoryCall.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ import * as ts from 'typescript';
22
import { TypescriptHelper } from '../descriptor/helper/helper';
33
import { GenericDeclaration } from '../genericDeclaration/genericDeclaration';
44
import { IGenericDeclaration } from '../genericDeclaration/genericDeclaration.interface';
5-
import { GenericDeclarationSupported } from '../genericDeclaration/genericDeclarationSupported';
5+
import {
6+
extensionExpressionSupported,
7+
GenericDeclarationSupported,
8+
} from '../genericDeclaration/genericDeclarationSupported';
69
import { MockDefiner } from '../mockDefiner/mockDefiner';
710
import { MockIdentifierGenericParameter } from '../mockIdentifier/mockIdentifier';
811
import { Scope } from '../scope/scope';
@@ -86,6 +89,10 @@ function addFromDeclarationExtensions(declaration: GenericDeclarationSupported,
8689
if (declaration.heritageClauses) {
8790
declaration.heritageClauses.forEach((clause: ts.HeritageClause) => {
8891
clause.types.forEach((extension: ts.ExpressionWithTypeArguments) => {
92+
if (!extensionExpressionSupported(extension.expression)) {
93+
return;
94+
}
95+
8996
const extensionDeclaration: ts.Declaration = TypescriptHelper.GetDeclarationFromNode(extension.expression);
9097

9198
const extensionDeclarationKey: string = MockDefiner.instance.getDeclarationKeyMap(extensionDeclaration);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { createMock } from 'ts-auto-mock';
2+
import { Test } from './declaration';
3+
4+
describe('extends callExpression', () => {
5+
it('should set all the values from both classes', () => {
6+
const type: Test = createMock<Test>();
7+
expect(type.a).toBe(0);
8+
expect(type.b).toBe('');
9+
});
10+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
2+
declare function TestFn(): new (...args: any[]) => Test2;
3+
4+
export class Test extends TestFn() {
5+
public a: number;
6+
}
7+
8+
class Test2 {
9+
public b: string;
10+
}

0 commit comments

Comments
 (0)