Skip to content

Commit

Permalink
fix(routes): Routes not scanned for Node.js 7 & 6
Browse files Browse the repository at this point in the history
fix #463
  • Loading branch information
vogloblinsky committed Feb 15, 2018
1 parent 80af63b commit 9435422
Show file tree
Hide file tree
Showing 7 changed files with 40 additions and 34 deletions.
13 changes: 4 additions & 9 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -82,7 +82,7 @@
"marked": "^0.3.12",
"os-name": "^2.0.1",
"traverse": "^0.6.6",
"ts-simple-ast": "^7.0.1",
"ts-simple-ast": "6.12.0",
"typescript": "2.4.2"
},
"devDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion src/app/compiler/dependencies.interfaces.ts
Expand Up @@ -2,7 +2,7 @@
export interface IDep {
id?: string;
type?: string;
ctype: string;
ctype?: string;
name: string;
}

Expand Down
39 changes: 19 additions & 20 deletions src/app/compiler/dependencies.ts
Expand Up @@ -237,15 +237,17 @@ export class Dependencies {
outputSymbols.classes.push(deps);
}

private getSourceFileDecorators(srcFile: ts.SourceFile, outputSymbols: any): void {
private getSourceFileDecorators(initialSrcFile: ts.SourceFile, outputSymbols: any): void {

let cleaner = (process.cwd() + path.sep).replace(/\\/g, '/');
let file = srcFile.fileName.replace(cleaner, '');
let scannedFile = srcFile;
let fileName = initialSrcFile.fileName.replace(cleaner, '');
let scannedFile = initialSrcFile;

// Search in file for variable statement as routes definitions

const astFile = (typeof ast.getSourceFile(srcFile.fileName) !== 'undefined') ? ast.getSourceFile(srcFile.fileName) : ast.addExistingSourceFile(srcFile.fileName);
const astFile = (typeof ast.getSourceFile(initialSrcFile.fileName) !== 'undefined') ?
ast.getSourceFile(initialSrcFile.fileName) :
ast.addExistingSourceFile(initialSrcFile.fileName);

const variableRoutesStatements = astFile.getVariableStatements();
let hasRoutesStatements = false;
Expand All @@ -272,17 +274,17 @@ export class Dependencies {
logger.info('Analysing routes definitions and clean them if necessary');

// scannedFile = this.routerParser.cleanFileIdentifiers(astFile).compilerNode;
scannedFile = this.routerParser.cleanFileSpreads(astFile).compilerNode;
let firstClean = this.routerParser.cleanFileSpreads(astFile);
scannedFile = firstClean.compilerNode;
scannedFile = this.routerParser.cleanFileDynamics(astFile).compilerNode;

srcFile = scannedFile;
scannedFile.kind = ts.SyntaxKind.SourceFile;
}

ts.forEachChild(srcFile, (node: ts.Node) => {
if (this.jsDocHelper.hasJSDocInternalTag(file, srcFile, node) && this.configuration.mainData.disableInternal) {
ts.forEachChild(scannedFile, (initialNode: ts.Node) => {
if (this.jsDocHelper.hasJSDocInternalTag(fileName, scannedFile, initialNode) && this.configuration.mainData.disableInternal) {
return;
}

let parseNode = (file, srcFile, node, fileBody) => {
if (node.decorators) {
let classWithCustomDecorator = false;
Expand All @@ -296,8 +298,7 @@ export class Dependencies {
let IO = this.componentHelper.getComponentIO(file, srcFile, node, fileBody);

if (this.isModule(metadata)) {
const moduleDep = new ModuleDepFactory(this.moduleHelper)
.create(file, srcFile, name, props, IO);
const moduleDep = new ModuleDepFactory(this.moduleHelper).create(file, srcFile, name, props, IO);
if (this.routerParser.hasRouterModuleInImports(moduleDep.imports)) {
this.routerParser.addModuleWithRoutes(name, this.moduleHelper.getModuleImportsRaw(props, srcFile), file);
}
Expand All @@ -309,8 +310,7 @@ export class Dependencies {
if (props.length === 0) {
return;
}
const componentDep = new ComponentDepFactory(this.componentHelper, this.configuration)
.create(file, srcFile, name, props, IO);
const componentDep = new ComponentDepFactory(this.componentHelper, this.configuration).create(file, srcFile, name, props, IO);
$componentsTreeEngine.addComponent(componentDep);
outputSymbols.components.push(componentDep);
deps = componentDep;
Expand Down Expand Up @@ -369,8 +369,7 @@ export class Dependencies {
if (props.length === 0) {
return;
}
let directiveDeps = new DirectiveDepFactory(this.componentHelper, this.configuration)
.create(file, srcFile, name, props, IO);
let directiveDeps = new DirectiveDepFactory(this.componentHelper, this.configuration).create(file, srcFile, name, props, IO);
outputSymbols.directives.push(directiveDeps);
deps = directiveDeps;
} else {
Expand Down Expand Up @@ -625,7 +624,7 @@ export class Dependencies {
}
}

parseNode(file, srcFile, node);
parseNode(fileName, scannedFile, initialNode);

});

Expand Down Expand Up @@ -734,9 +733,10 @@ export class Dependencies {
}

private findProperties(visitedNode: ts.Decorator, sourceFile: ts.SourceFile): ReadonlyArray<ts.ObjectLiteralElementLike> {
if (ts.isCallExpression(visitedNode.expression) && visitedNode.expression.arguments.length > 0) {
if (visitedNode.expression && visitedNode.expression.arguments && visitedNode.expression.arguments.length > 0) {
let pop = visitedNode.expression.arguments[0];
if (ts.isObjectLiteralExpression(pop)) {

if (pop && pop.properties && pop.properties.length >= 0) {
return pop.properties;
} else {
logger.warn('Empty metadatas, trying to found it with imports.');
Expand Down Expand Up @@ -940,8 +940,7 @@ export class Dependencies {
let res;
if (sourceFile.statements) {
res = sourceFile.statements.reduce((directive, statement) => {

if (ts.isVariableStatement(statement) && this.routerParser.isVariableRoutes(statement)) {
if (this.routerParser.isVariableRoutes(statement)) {
if (statement.pos === node.pos && statement.end === node.end) {
return directive.concat(this.visitEnumDeclarationForRoutes(filename, statement));
}
Expand Down
14 changes: 13 additions & 1 deletion src/app/compiler/deps/helpers/symbol-helper.ts
Expand Up @@ -126,7 +126,9 @@ export class SymbolHelper {
*/
public parseSymbolElements(node: ts.CallExpression | ts.Identifier | ts.StringLiteral | ts.PropertyAccessExpression | ts.SpreadElement): string {
// parse expressions such as: AngularFireModule.initializeApp(firebaseConfig)
if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression)) {
// if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression)) {
if ( (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression)) ||
(ts.isNewExpression(node) && ts.isElementAccessExpression(node.expression)) ) {
let className = this.buildIdentifierName(node.expression);

// function arguments could be really complex. There are so
Expand All @@ -138,6 +140,13 @@ export class SymbolHelper {
return text;
} else if (ts.isPropertyAccessExpression(node)) { // parse expressions such as: Shared.Module
return this.buildIdentifierName(node);
} else if (ts.isIdentifier(node)) { // parse expressions such as: MyComponent
if (node.text) {
return node.text;
}
if (node.escapedText) {
return node.escapedText;
}
} else if (ts.isSpreadElement(node)) { // parse expressions such as: ...MYARRAY
// Resolve MYARRAY in imports or local file variables after full scan, just return the name of the variable
if (node.expression && node.expression.text) {
Expand Down Expand Up @@ -174,6 +183,9 @@ export class SymbolHelper {
];
} else if (ts.isArrayLiteralExpression(localNode.initializer)) {
return localNode.initializer.elements.map(x => this.parseSymbolElements(x));
} else if (localNode.initializer && localNode.initializer.elements && localNode.initializer.elements.length > 0) {
// Node replaced by ts-simple-ast & kind = 265
return localNode.initializer.elements.map(x => this.parseSymbolElements(x));
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/app/compiler/deps/module-dep.factory.ts
Expand Up @@ -30,7 +30,7 @@ export class ModuleDepFactory {
bootstrap: this.moduleHelper.getModuleBootstrap(properties, srcFile),
type: 'module',
description: IO.description,
sourceCode: srcFile.getText()
sourceCode: srcFile.text
} as IModuleDep;
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/utils/router-parser.util.ts
Expand Up @@ -360,7 +360,7 @@ export class RouterParserUtil {

public isVariableRoutes(node) {
let result = false;
if (node.declarationList.declarations) {
if (node.declarationList && node.declarationList.declarations) {
let i = 0;
let len = node.declarationList.declarations.length;
for (i; i < len; i++) {
Expand Down

0 comments on commit 9435422

Please sign in to comment.