Skip to content

Commit c03411a

Browse files
authored
Merge pull request #96 from buehler/develop
Release
2 parents 9165171 + d937766 commit c03411a

22 files changed

+712
-55
lines changed

jest.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"transform": {
44
"^.+\\.tsx?$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
55
},
6+
"testURL": "http://localhost/",
67
"testMatch": [
78
"**/test/**/*.spec.ts"
89
],

package.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,23 +36,23 @@
3636
"homepage": "https://github.com/TypeScript-Heroes/node-typescript-parser#readme",
3737
"devDependencies": {
3838
"@smartive/tslint-config": "^4.0.0",
39-
"@types/jest": "^23.1.4",
40-
"@types/lodash-es": "^4.17.0",
39+
"@types/jest": "^23.3.1",
40+
"@types/lodash-es": "^4.17.1",
4141
"@types/mock-fs": "^3.6.30",
42-
"@types/node": "^10.5.1",
42+
"@types/node": "^10.9.4",
4343
"del-cli": "^1.1.0",
44-
"jest": "^23.3.0",
45-
"mock-fs": "^4.5.0",
46-
"semantic-release": "^15.6.3",
47-
"ts-jest": "^23.0.0",
48-
"tslint": "^5.10.0",
49-
"tsutils": "^2.27.2",
50-
"typedoc": "^0.11.1"
44+
"jest": "^23.5.0",
45+
"mock-fs": "^4.6.0",
46+
"semantic-release": "^15.9.12",
47+
"ts-jest": "^23.1.4",
48+
"tslint": "^5.11.0",
49+
"tsutils": "^3.0.0",
50+
"typedoc": "^0.12.0"
5151
},
5252
"dependencies": {
5353
"lodash": "^4.17.10",
5454
"lodash-es": "^4.17.10",
5555
"tslib": "^1.9.3",
56-
"typescript": "^2.9.2"
56+
"typescript": "^3.0.3"
5757
}
5858
}

src/code-generators/typescript-generators/propertyDeclaration.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ export function generatePropertyDeclaration(
1616
): string {
1717
return `${Array(tabSize + 1).join(' ')}` +
1818
`${property.visibility !== undefined ? getVisibilityText(property.visibility) + ' ' : ''}` +
19-
`${property.name}${property.type ? `: ${property.type}` : ''};\n`;
19+
`${property.name}${property.isOptional ? '?' : ''}${property.type ? `: ${property.type}` : ''};\n`;
2020
}

src/declarations/AccessorDeclaration.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { AbstractDeclaration, ScopedDeclaration, TypedDeclaration } from './Declaration';
1+
import { AbstractDeclaration, ScopedDeclaration, StaticDeclaration, TypedDeclaration } from './Declaration';
22
import { DeclarationVisibility } from './DeclarationVisibility';
33

44
/**
@@ -11,12 +11,17 @@ import { DeclarationVisibility } from './DeclarationVisibility';
1111
* @implements {TypedDeclaration}
1212
* @implements {AbstractDeclaration}
1313
*/
14-
export abstract class AccessorDeclaration implements ScopedDeclaration, TypedDeclaration, AbstractDeclaration {
14+
export abstract class AccessorDeclaration implements
15+
ScopedDeclaration,
16+
StaticDeclaration,
17+
TypedDeclaration,
18+
AbstractDeclaration {
1519
constructor(
1620
public name: string,
1721
public visibility: DeclarationVisibility | undefined,
1822
public type: string | undefined,
1923
public isAbstract: boolean,
24+
public isStatic: boolean,
2025
public start?: number,
2126
public end?: number,
2227
) { }

src/declarations/Declaration.ts

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,3 +175,54 @@ export interface AbstractDeclaration extends Declaration {
175175
*/
176176
isAbstract: boolean;
177177
}
178+
179+
/**
180+
* Interface for possible optional declarations. Contains information if the element is optional or not.
181+
*
182+
* @export
183+
* @interface OptionalDeclaration
184+
* @extends {Declaration}
185+
*/
186+
export interface OptionalDeclaration extends Declaration {
187+
/**
188+
* Defines if the declaration is optional or not.
189+
*
190+
* @type {boolean}
191+
* @memberof OptionalDeclaration
192+
*/
193+
isOptional: boolean;
194+
}
195+
196+
/**
197+
* Interface for possible static declarations.
198+
*
199+
* @export
200+
* @interface StaticDeclaration
201+
* @extends {Declaration}
202+
*/
203+
export interface StaticDeclaration extends Declaration {
204+
/**
205+
* Defines if the declaration is static or not.
206+
*
207+
* @type {boolean}
208+
* @memberof StaticDeclaration
209+
*/
210+
isStatic: boolean;
211+
}
212+
213+
/**
214+
* Interface for possible async declarations.
215+
*
216+
* @export
217+
* @interface AsyncDeclaration
218+
* @extends {Declaration}
219+
*/
220+
export interface AsyncDeclaration extends Declaration {
221+
/**
222+
* Defines if the declaration is async or not.
223+
*
224+
* @type {boolean}
225+
* @memberof AsyncDeclaration
226+
*/
227+
isAsync: boolean;
228+
}

src/declarations/FunctionDeclaration.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { CallableDeclaration, ExportableDeclaration } from './Declaration';
1+
import { AsyncDeclaration, CallableDeclaration, ExportableDeclaration } from './Declaration';
22
import { ParameterDeclaration } from './ParameterDeclaration';
33
import { VariableDeclaration } from './VariableDeclaration';
44

@@ -11,13 +11,14 @@ import { VariableDeclaration } from './VariableDeclaration';
1111
* @implements {CallableDeclaration}
1212
* @implements {ExportableDeclaration}
1313
*/
14-
export class FunctionDeclaration implements CallableDeclaration, ExportableDeclaration {
14+
export class FunctionDeclaration implements AsyncDeclaration, CallableDeclaration, ExportableDeclaration {
1515
public parameters: ParameterDeclaration[] = [];
1616
public variables: VariableDeclaration[] = [];
1717

1818
constructor(
1919
public name: string,
2020
public isExported: boolean,
21+
public isAsync: boolean,
2122
public type?: string,
2223
public start?: number,
2324
public end?: number,

src/declarations/MethodDeclaration.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
import { AbstractDeclaration, CallableDeclaration, ScopedDeclaration, TypedDeclaration } from './Declaration';
1+
import {
2+
AbstractDeclaration,
3+
AsyncDeclaration,
4+
CallableDeclaration,
5+
OptionalDeclaration,
6+
ScopedDeclaration,
7+
StaticDeclaration,
8+
TypedDeclaration,
9+
} from './Declaration';
210
import { DeclarationVisibility } from './DeclarationVisibility';
311
import { ParameterDeclaration } from './ParameterDeclaration';
412
import { VariableDeclaration } from './VariableDeclaration';
@@ -13,7 +21,15 @@ import { VariableDeclaration } from './VariableDeclaration';
1321
* @implements {ScopedDeclaration}
1422
* @implements {TypedDeclaration}
1523
*/
16-
export class MethodDeclaration implements AbstractDeclaration, CallableDeclaration, ScopedDeclaration, TypedDeclaration {
24+
export class MethodDeclaration implements
25+
AbstractDeclaration,
26+
AsyncDeclaration,
27+
CallableDeclaration,
28+
OptionalDeclaration,
29+
ScopedDeclaration,
30+
StaticDeclaration,
31+
TypedDeclaration {
32+
1733
public parameters: ParameterDeclaration[] = [];
1834
public variables: VariableDeclaration[] = [];
1935

@@ -22,6 +38,9 @@ export class MethodDeclaration implements AbstractDeclaration, CallableDeclarati
2238
public isAbstract: boolean,
2339
public visibility: DeclarationVisibility | undefined,
2440
public type: string | undefined,
41+
public isOptional: boolean,
42+
public isStatic: boolean,
43+
public isAsync: boolean,
2544
public start?: number,
2645
public end?: number,
2746
) { }

src/declarations/PropertyDeclaration.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ScopedDeclaration, TypedDeclaration } from './Declaration';
1+
import { OptionalDeclaration, ScopedDeclaration, StaticDeclaration, TypedDeclaration } from './Declaration';
22
import { DeclarationVisibility } from './DeclarationVisibility';
33

44
/**
@@ -9,11 +9,13 @@ import { DeclarationVisibility } from './DeclarationVisibility';
99
* @implements {ScopedDeclaration}
1010
* @implements {TypedDeclaration}
1111
*/
12-
export class PropertyDeclaration implements ScopedDeclaration, TypedDeclaration {
12+
export class PropertyDeclaration implements OptionalDeclaration, ScopedDeclaration, StaticDeclaration, TypedDeclaration {
1313
constructor(
1414
public name: string,
1515
public visibility: DeclarationVisibility | undefined,
1616
public type: string | undefined,
17+
public isOptional: boolean,
18+
public isStatic: boolean,
1719
public start?: number,
1820
public end?: number,
1921
) { }

src/node-parser/class-parser.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {
2929
import { parseFunctionParts, parseMethodParams } from './function-parser';
3030
import { parseIdentifier } from './identifier-parser';
3131
import {
32+
containsModifier,
3233
getDefaultResourceIdentifier,
3334
getNodeType,
3435
getNodeVisibility,
@@ -88,6 +89,8 @@ export function parseCtorParams(
8889
(o.name as Identifier).text,
8990
getNodeVisibility(o),
9091
getNodeType(o.type),
92+
!!o.questionToken,
93+
containsModifier(o, SyntaxKind.StaticKeyword),
9194
o.getStart(),
9295
o.getEnd(),
9396
),
@@ -137,6 +140,8 @@ export function parseClass(tsResource: Resource, node: ClassDeclaration): void {
137140
(o.name as Identifier).text,
138141
getNodeVisibility(o),
139142
getNodeType(o.type),
143+
!!o.questionToken,
144+
containsModifier(o, SyntaxKind.StaticKeyword),
140145
o.getStart(),
141146
o.getEnd(),
142147
),
@@ -148,6 +153,8 @@ export function parseClass(tsResource: Resource, node: ClassDeclaration): void {
148153
(o.name as Identifier).text,
149154
getNodeVisibility(o),
150155
getNodeType(o.type),
156+
!!o.questionToken,
157+
containsModifier(o, SyntaxKind.StaticKeyword),
151158
o.getStart(),
152159
o.getEnd(),
153160
),
@@ -163,6 +170,7 @@ export function parseClass(tsResource: Resource, node: ClassDeclaration): void {
163170
getNodeVisibility(o),
164171
getNodeType(o.type),
165172
o.modifiers !== undefined && o.modifiers.some(m => m.kind === SyntaxKind.AbstractKeyword),
173+
containsModifier(o, SyntaxKind.StaticKeyword),
166174
o.getStart(),
167175
o.getEnd(),
168176
),
@@ -176,6 +184,7 @@ export function parseClass(tsResource: Resource, node: ClassDeclaration): void {
176184
getNodeVisibility(o),
177185
getNodeType(o.type),
178186
o.modifiers !== undefined && o.modifiers.some(m => m.kind === SyntaxKind.AbstractKeyword),
187+
containsModifier(o, SyntaxKind.StaticKeyword),
179188
o.getStart(),
180189
o.getEnd(),
181190
),
@@ -193,6 +202,9 @@ export function parseClass(tsResource: Resource, node: ClassDeclaration): void {
193202
o.modifiers !== undefined && o.modifiers.some(m => m.kind === SyntaxKind.AbstractKeyword),
194203
getNodeVisibility(o),
195204
getNodeType(o.type),
205+
!!o.questionToken,
206+
containsModifier(o, SyntaxKind.StaticKeyword),
207+
containsModifier(o, SyntaxKind.AsyncKeyword),
196208
o.getStart(),
197209
o.getEnd(),
198210
);

src/node-parser/function-parser.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,13 @@ import {
3030
isPropertySignature,
3131
} from '../type-guards/TypescriptGuards';
3232
import { parseIdentifier } from './identifier-parser';
33-
import { getDefaultResourceIdentifier, getNodeType, isNodeDefaultExported, isNodeExported } from './parse-utilities';
33+
import {
34+
containsModifier,
35+
getDefaultResourceIdentifier,
36+
getNodeType,
37+
isNodeDefaultExported,
38+
isNodeExported,
39+
} from './parse-utilities';
3440
import { parseVariable } from './variable-parser';
3541

3642
/**
@@ -137,7 +143,12 @@ export function parseMethodParams(
137143
export function parseFunction(resource: Resource, node: FunctionDeclaration): void {
138144
const name = node.name ? node.name.text : getDefaultResourceIdentifier(resource);
139145
const func = new TshFunction(
140-
name, isNodeExported(node), getNodeType(node.type), node.getStart(), node.getEnd(),
146+
name,
147+
isNodeExported(node),
148+
containsModifier(node, SyntaxKind.AsyncKeyword),
149+
getNodeType(node.type),
150+
node.getStart(),
151+
node.getEnd(),
141152
);
142153
if (isNodeDefaultExported(node)) {
143154
func.isExported = false;

src/node-parser/interface-parser.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Identifier, InterfaceDeclaration } from 'typescript';
1+
import { Identifier, InterfaceDeclaration, SyntaxKind } from 'typescript';
22

33
import { DeclarationVisibility } from '../declarations/DeclarationVisibility';
44
import { DefaultDeclaration } from '../declarations/DefaultDeclaration';
@@ -8,7 +8,13 @@ import { PropertyDeclaration } from '../declarations/PropertyDeclaration';
88
import { Resource } from '../resources/Resource';
99
import { isMethodSignature, isPropertySignature } from '../type-guards/TypescriptGuards';
1010
import { parseMethodParams } from './function-parser';
11-
import { getDefaultResourceIdentifier, getNodeType, isNodeDefaultExported, isNodeExported } from './parse-utilities';
11+
import {
12+
containsModifier,
13+
getDefaultResourceIdentifier,
14+
getNodeType,
15+
isNodeDefaultExported,
16+
isNodeExported,
17+
} from './parse-utilities';
1218

1319
/**
1420
* Parses an interface node into its declaration.
@@ -37,6 +43,8 @@ export function parseInterface(resource: Resource, node: InterfaceDeclaration):
3743
(o.name as Identifier).text,
3844
DeclarationVisibility.Public,
3945
getNodeType(o.type),
46+
!!o.questionToken,
47+
containsModifier(o, SyntaxKind.StaticKeyword),
4048
o.getStart(),
4149
o.getEnd(),
4250
),
@@ -47,6 +55,9 @@ export function parseInterface(resource: Resource, node: InterfaceDeclaration):
4755
true,
4856
DeclarationVisibility.Public,
4957
getNodeType(o.type),
58+
!!o.questionToken,
59+
containsModifier(o, SyntaxKind.StaticKeyword),
60+
containsModifier(o, SyntaxKind.AsyncKeyword),
5061
o.getStart(),
5162
o.getEnd(),
5263
);

src/node-parser/parse-utilities.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { getCombinedModifierFlags, ModifierFlags, Node, SyntaxKind, TypeNode } from 'typescript';
1+
import { Declaration, getCombinedModifierFlags, ModifierFlags, Node, SyntaxKind, TypeNode } from 'typescript';
22

33
import { DeclarationVisibility } from '../declarations/DeclarationVisibility';
44
import { File } from '../resources/File';
@@ -13,7 +13,7 @@ import { Resource } from '../resources/Resource';
1313
* @returns {boolean}
1414
*/
1515
export function isNodeExported(node: Node): boolean {
16-
const flags = getCombinedModifierFlags(node);
16+
const flags = getCombinedModifierFlags(node as Declaration);
1717
return (flags & ModifierFlags.Export) === ModifierFlags.Export;
1818
}
1919

@@ -26,7 +26,7 @@ export function isNodeExported(node: Node): boolean {
2626
* @returns {boolean}
2727
*/
2828
export function isNodeDefaultExported(node: Node): boolean {
29-
const flags = getCombinedModifierFlags(node);
29+
const flags = getCombinedModifierFlags(node as Declaration);
3030
return (flags & ModifierFlags.Default) === ModifierFlags.Default;
3131
}
3232

@@ -41,6 +41,19 @@ export function getNodeType(node: TypeNode | undefined): string | undefined {
4141
return node ? node.getText() : undefined;
4242
}
4343

44+
/**
45+
* Checks if a node contains a certain modifier (of a given kind)
46+
*
47+
* @export
48+
* @param {Node} node
49+
* @param {SyntaxKind} modifierKind
50+
* @returns {boolean}
51+
*/
52+
export function containsModifier(node: Node, modifierKind: SyntaxKind): boolean {
53+
if (!node.modifiers) return false;
54+
return node.modifiers.some(mod => mod.kind === modifierKind);
55+
}
56+
4457
/**
4558
* Returns the enum value (visibility) of a node.
4659
*

0 commit comments

Comments
 (0)