Skip to content

Commit 5750def

Browse files
authored
fix(typeReference): log warning when type definition does not exists and cannot be located (#618)
1 parent cac0c17 commit 5750def

File tree

5 files changed

+50
-1
lines changed

5 files changed

+50
-1
lines changed

config/utils/devtool.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ const ProcessService = require('../../utils/process/process');
33
function DetermineDevToolFromDebugEnvironment() {
44
const processService = ProcessService(process);
55
const debug = processService.getEnvironmentValue('DEBUG');
6-
return debug ? "cheap-module-eval-source-map": undefined;
6+
return debug ? "eval-cheap-module-source-map": undefined;
77
}
88
module.exports = DetermineDevToolFromDebugEnvironment;

src/transformer/descriptor/typeReference/typeReference.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import * as ts from 'typescript';
2+
import { TransformerLogger } from '../../logger/transformerLogger';
23
import { MockDefiner } from '../../mockDefiner/mockDefiner';
34
import {
45
CreateMockFactory,
@@ -8,6 +9,7 @@ import { Scope } from '../../scope/scope';
89
import { isTypeReferenceReusable } from '../../typeReferenceReusable/typeReferenceReusable';
910
import { GetDescriptor } from '../descriptor';
1011
import { TypescriptHelper } from '../helper/helper';
12+
import { GetNullDescriptor } from '../null/null';
1113
import {
1214
GetTypescriptTypeDescriptor,
1315
IsTypescriptType,
@@ -21,6 +23,11 @@ export function GetTypeReferenceDescriptor(
2123
node.typeName
2224
);
2325

26+
if (!declaration) {
27+
TransformerLogger().missingTypeDefinition(node);
28+
return GetNullDescriptor();
29+
}
30+
2431
if (MockDefiner.instance.hasMockForDeclaration(declaration, scope)) {
2532
return GetMockFactoryCall(node, declaration, scope);
2633
}

src/transformer/logger/transformerLogger.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ export interface TransformerLogger {
1616

1717
typeOfPropertyNotFound(node: ts.Node): void;
1818

19+
missingTypeDefinition(node: ts.Node): void;
20+
1921
indexedAccessTypeFailed(
2022
propertyName: string,
2123
nodeText: string,
@@ -108,6 +110,17 @@ ${warningPositionLog(createMockFileUrl, currentNodeFileUrl)}`
108110

109111
logger.warning(
110112
`IndexedAccessType transformation failed: cannot find property ${propertyName} of - ${nodeText}
113+
${warningPositionLog(createMockFileUrl, currentNodeFileUrl)}`
114+
);
115+
},
116+
missingTypeDefinition(node: ts.Node): void {
117+
const createMockNode: ts.Node = GetCurrentCreateMock();
118+
119+
const createMockFileUrl: string = getNodeFileUrl(createMockNode);
120+
const currentNodeFileUrl: string = getNodeFileUrl(node);
121+
122+
logger.warning(
123+
`Type definition for type reference ${node.getText()} not found - it will convert to null
111124
${warningPositionLog(createMockFileUrl, currentNodeFileUrl)}`
112125
);
113126
},
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { createMock } from 'ts-auto-mock';
2+
import { getLogsByCreateMockFileName, UnsupportedTypeLog } from '../utils/log';
3+
import { WrapperOfNotExistingType } from './missingTypeDefinition.warning.type';
4+
5+
describe('Missing type definition', () => {
6+
it('should log a warning and apply null', async () => {
7+
const logs: UnsupportedTypeLog[] = await getLogsByCreateMockFileName(
8+
'missingTypeDefinition.warning.test.ts'
9+
);
10+
11+
createMock<WrapperOfNotExistingType>();
12+
expect(logs.length).toBe(1);
13+
14+
expect(logs[0].header).toContain(
15+
'WARNING: Transformer - Type definition for type reference NotExistingType not found - it will convert to null'
16+
);
17+
expect(logs[0].created).toMatch(
18+
/created file:\/\/.*missingTypeDefinition\.warning\.test\.ts:[0-9]*:[0-9]*/
19+
);
20+
expect(logs[0].usedBy).toMatch(
21+
/used by file:\/\/.*missingTypeDefinition\.warning\.type\.ts:[0-9]*:[0-9]*/
22+
);
23+
});
24+
});
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
2+
// @ts-ignore
3+
import { NotExistingType } from 'aModule';
4+
5+
export type WrapperOfNotExistingType = NotExistingType;

0 commit comments

Comments
 (0)