Skip to content
This repository was archived by the owner on Nov 25, 2025. It is now read-only.

Commit a7d04aa

Browse files
author
Martynas Žilinskas
authored
Merge pull request #108 from SimplrJS/dev
v4.0.0-rc.4
2 parents 34fcb92 + bbf3c2d commit a7d04aa

File tree

16 files changed

+770
-416
lines changed

16 files changed

+770
-416
lines changed

examples/simple/index.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1 @@
1-
/**
2-
* @private
3-
*/
4-
export class Foo {
5-
private privateFoo: string = "";
6-
}
1+
export const a = Symbol("Hello");

package-lock.json

Lines changed: 427 additions & 381 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ts-extractor",
3-
"version": "4.0.0-rc.3",
3+
"version": "4.0.0-rc.4",
44
"description": "TypeScript AST extractor to useful JSON structure.",
55
"keywords": [
66
"typescript",
@@ -43,19 +43,19 @@
4343
"fs-extra": "^5.0.0",
4444
"read-package-json": "^2.0.12",
4545
"simplr-logger": "^1.0.1",
46-
"typescript": "^2.6.2"
46+
"typescript": "^2.7.1"
4747
},
4848
"devDependencies": {
4949
"@simplrjs/test-generator-cli": "^0.1.3",
5050
"@types/globby": "^6.1.0",
51-
"@types/jest": "^21.1.9",
51+
"@types/jest": "^22.1.1",
5252
"coveralls": "^3.0.0",
53-
"jest": "^22.0.3",
53+
"jest": "^22.1.4",
5454
"rimraf": "^2.6.2",
5555
"simplr-tslint": "0.0.1",
56-
"ts-jest": "^22.0.0",
57-
"ts-node": "^4.0.2",
58-
"tslint": "^5.8.0"
56+
"ts-jest": "^22.0.2",
57+
"ts-node": "^4.1.0",
58+
"tslint": "^5.9.1"
5959
},
6060
"files": [
6161
"dist",

src/abstractions/api-item.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export abstract class ApiItem<TDeclaration extends ts.Declaration = ts.Declarati
3131

3232
public GetItemMetadata(): ApiMetadataDto {
3333
return {
34-
DocumentationComment: ts.displayPartsToString(this.Symbol.getDocumentationComment()),
34+
DocumentationComment: ts.displayPartsToString(this.Symbol.getDocumentationComment(this.TypeChecker)),
3535
JSDocTags: this.Symbol.getJsDocTags()
3636
};
3737
}

src/api-type-helpers.ts

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,19 @@ export namespace ApiTypeHelpers {
150150
type: ts.Type,
151151
typeNode: ts.TypeNode
152152
): ApiBasicTypeDto {
153+
const typeChecker = options.Program.getTypeChecker();
154+
let text: string | undefined;
155+
if (TsHelpers.IsNodeSynthesized(typeNode)) {
156+
text = ts.tokenToString(typeNode.kind);
157+
}
158+
if (text == null) {
159+
text = typeChecker.typeToString(type);
160+
}
161+
153162
return {
154163
...typeNodeToBaseType(options, location, type, typeNode),
155-
ApiTypeKind: ApiTypeKind.Basic
164+
ApiTypeKind: ApiTypeKind.Basic,
165+
Text: text
156166
};
157167
}
158168

@@ -348,22 +358,32 @@ export namespace ApiTypeHelpers {
348358
typeNode: ts.TypeOperatorNode
349359
): TypeOperatorTypeDto {
350360
const typeChecker = options.Program.getTypeChecker();
351-
const apiType = ResolveApiType(options, location, typeChecker.getTypeFromTypeNode(typeNode.type), typeNode.type);
361+
const apiType: ApiType = ResolveApiType(options, location, typeChecker.getTypeFromTypeNode(typeNode.type), typeNode.type);
362+
363+
let text = typeChecker.typeToString(type);
352364
let operator: TypeKeywords;
353365

354366
switch (typeNode.operator) {
355367
case ts.SyntaxKind.KeyOfKeyword: {
356368
operator = TypeKeywords.Keyof;
369+
// Otherwise text will be union of keys.
370+
text = `${operator} ${apiType.Text}`;
371+
break;
372+
}
373+
case ts.SyntaxKind.UniqueKeyword: {
374+
operator = TypeKeywords.Unique;
357375
break;
358376
}
359377
default: {
378+
ApiHelpers.LogWithLocation(
379+
LogLevel.Debug,
380+
location,
381+
`Unknown TypeOperator "${ts.SyntaxKind[typeNode.operator]}" keyword.`
382+
);
360383
operator = TypeKeywords.Unknown;
361384
}
362385
}
363386

364-
// Otherwise text will be union.
365-
const text = `${operator} ${apiType.Text}`;
366-
367387
return {
368388
...typeNodeToBaseType(options, location, type, typeNode),
369389
ApiTypeKind: ApiTypeKind.TypeOperator,

src/contracts/api-types.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ export enum ApiTypeKind {
3939
export enum TypeKeywords {
4040
Unknown = "???",
4141
Keyof = "keyof",
42-
Typeof = "typeof"
42+
Typeof = "typeof",
43+
Unique = "unique"
4344
}
4445

4546
export interface TypeScriptTypeNodeDebug {
@@ -155,7 +156,7 @@ export interface TypePredicateTypeDto extends ApiBaseType {
155156
*/
156157
export interface TypeOperatorTypeDto extends ApiBaseType {
157158
ApiTypeKind: ApiTypeKind.TypeOperator;
158-
Keyword: TypeKeywords.Keyof | TypeKeywords.Unknown;
159+
Keyword: TypeKeywords.Keyof | TypeKeywords.Unique | TypeKeywords.Unknown;
159160
Type: ApiType;
160161
}
161162

src/extractor.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,12 @@ export class Extractor {
7373
// Go through all given files.
7474
const rootFiles = program.getRootFileNames();
7575
rootFiles.forEach(fileName => {
76-
const sourceFile: ts.SourceFile = program.getSourceFile(fileName);
77-
const symbol = typeChecker.getSymbolAtLocation(sourceFile);
76+
const sourceFile: ts.SourceFile | undefined = program.getSourceFile(fileName);
77+
if (sourceFile == null) {
78+
return;
79+
}
7880

81+
const symbol = typeChecker.getSymbolAtLocation(sourceFile);
7982
if (symbol == null) {
8083
Logger.Warn(`Source file "${fileName}" is skipped, because no exported members were found.`);
8184
return;

tests/cases/__tests__/__snapshots__/class-declaration1.test.ts.snap

Lines changed: 54 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/cases/__tests__/__snapshots__/class-declaration10.test.ts.snap

Lines changed: 42 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)