Skip to content

Commit

Permalink
fix(deps): barrel file support for import finding strategy
Browse files Browse the repository at this point in the history
fix #566
  • Loading branch information
vogloblinsky committed May 20, 2018
1 parent a6c6e79 commit 780c065
Showing 1 changed file with 61 additions and 13 deletions.
74 changes: 61 additions & 13 deletions src/utils/imports.util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,11 +134,30 @@ export class ImportsUtil {
}
});

function hasFoundValues(variableDeclaration) {
let variableKind = variableDeclaration.getKind();

if (variableKind && variableKind === SyntaxKind.VariableDeclaration) {
let initializer = variableDeclaration.getInitializer();
if (initializer) {
let initializerKind = initializer.getKind();
if (
initializerKind &&
initializerKind === SyntaxKind.ObjectLiteralExpression
) {
let compilerNode = initializer.compilerNode as ts.ObjectLiteralExpression;
return compilerNode.properties;
}
}
}
}

if (typeof searchedImport !== 'undefined') {
let importPathReference = searchedImport.getModuleSpecifierSourceFile();
let importPath;
if (typeof importPathReference !== 'undefined') {
importPath = importPathReference.compilerNode.fileName;

const sourceFileImport =
typeof ast.getSourceFile(importPath) !== 'undefined'
? ast.getSourceFile(importPath)
Expand All @@ -147,19 +166,32 @@ export class ImportsUtil {
if (sourceFileImport) {
let variableName = foundWithAlias ? aliasOriginalName : metadataVariableName;
let variableDeclaration = sourceFileImport.getVariableDeclaration(variableName);

if (variableDeclaration) {
let variableKind = variableDeclaration.getKind();

if (variableKind && variableKind === SyntaxKind.VariableDeclaration) {
let initializer = variableDeclaration.getInitializer();
if (initializer) {
let initializerKind = initializer.getKind();
if (
initializerKind &&
initializerKind === SyntaxKind.ObjectLiteralExpression
) {
let compilerNode = initializer.compilerNode as ts.ObjectLiteralExpression;
return compilerNode.properties;
return hasFoundValues(variableDeclaration);
} else {
// Try with exports
const exportDeclarations = sourceFileImport.getExportDeclarations();
if (exportDeclarations && exportDeclarations.length > 0) {
let i = 0,
len = exportDeclarations.length;
for (i; i<len; i++) {
let exportDeclaration = exportDeclarations[i];
let sourceFileExportedReference = exportDeclaration.getModuleSpecifierSourceFile();
if (sourceFileExportedReference) {
let sourceFileExportedReferencePath = sourceFileExportedReference.getFilePath();

const sourceFileExported =
typeof ast.getSourceFile(sourceFileExportedReferencePath) !== 'undefined'
? ast.getSourceFile(sourceFileExportedReferencePath)
: ast.addExistingSourceFileIfExists(sourceFileExportedReferencePath);

if (sourceFileExported) {
variableDeclaration = sourceFileExported.getVariableDeclaration(variableName);
if (variableDeclaration) {
return hasFoundValues(variableDeclaration);
}
}
}
}
}
Expand All @@ -170,7 +202,23 @@ export class ImportsUtil {
// Find in local variables of the file
const variableDeclaration = file.getVariableDeclaration(metadataVariableName);
if (variableDeclaration) {
return variableDeclaration.compilerNode;
let variableKind = variableDeclaration.getKind();

if (variableKind && variableKind === SyntaxKind.VariableDeclaration) {
let initializer = variableDeclaration.getInitializer();
if (initializer) {
let initializerKind = initializer.getKind();
if (
initializerKind &&
initializerKind === SyntaxKind.ObjectLiteralExpression
) {
let compilerNode = initializer.compilerNode as ts.ObjectLiteralExpression;
return compilerNode.properties;
} else if (initializerKind) {
return variableDeclaration.compilerNode;
}
}
}
}
}

Expand Down

0 comments on commit 780c065

Please sign in to comment.