@@ -2,13 +2,14 @@ import * as fs from 'fs';
2
2
import { join } from 'path' ;
3
3
import * as ts from 'typescript' ;
4
4
5
- import { TypeScriptFileRefactor } from './refactor' ;
5
+ import { TypeScriptFileRefactor , getTypeScriptFileRefactor } from './refactor/refactor' ;
6
+ import { ProgramManager } from './program_manager' ;
6
7
7
8
8
9
function _recursiveSymbolExportLookup ( refactor : TypeScriptFileRefactor ,
9
10
symbolName : string ,
10
11
host : ts . CompilerHost ,
11
- program : ts . Program ) : string | null {
12
+ programManager : ProgramManager ) : string | null {
12
13
// Check this file.
13
14
const hasSymbol = refactor . findAstNodes ( null , ts . SyntaxKind . ClassDeclaration )
14
15
. some ( ( cd : ts . ClassDeclaration ) => {
@@ -29,15 +30,16 @@ function _recursiveSymbolExportLookup(refactor: TypeScriptFileRefactor,
29
30
30
31
const modulePath = ( decl . moduleSpecifier as ts . StringLiteral ) . text ;
31
32
const resolvedModule = ts . resolveModuleName (
32
- modulePath , refactor . fileName , program . getCompilerOptions ( ) , host ) ;
33
+ modulePath , refactor . fileName , programManager . program . getCompilerOptions ( ) , host ) ;
33
34
if ( ! resolvedModule . resolvedModule || ! resolvedModule . resolvedModule . resolvedFileName ) {
34
35
return null ;
35
36
}
36
37
37
38
const module = resolvedModule . resolvedModule . resolvedFileName ;
38
39
if ( ! decl . exportClause ) {
39
- const moduleRefactor = new TypeScriptFileRefactor ( module , host , program ) ;
40
- const maybeModule = _recursiveSymbolExportLookup ( moduleRefactor , symbolName , host , program ) ;
40
+ const moduleRefactor = getTypeScriptFileRefactor ( module , host , programManager ) ;
41
+ const maybeModule = _recursiveSymbolExportLookup (
42
+ moduleRefactor , symbolName , host , programManager ) ;
41
43
if ( maybeModule ) {
42
44
return maybeModule ;
43
45
}
@@ -51,17 +53,17 @@ function _recursiveSymbolExportLookup(refactor: TypeScriptFileRefactor,
51
53
if ( fs . statSync ( module ) . isDirectory ( ) ) {
52
54
const indexModule = join ( module , 'index.ts' ) ;
53
55
if ( fs . existsSync ( indexModule ) ) {
54
- const indexRefactor = new TypeScriptFileRefactor ( indexModule , host , program ) ;
56
+ const indexRefactor = getTypeScriptFileRefactor ( indexModule , host , programManager ) ;
55
57
const maybeModule = _recursiveSymbolExportLookup (
56
- indexRefactor , symbolName , host , program ) ;
58
+ indexRefactor , symbolName , host , programManager ) ;
57
59
if ( maybeModule ) {
58
60
return maybeModule ;
59
61
}
60
62
}
61
63
}
62
64
63
65
// Create the source and verify that the symbol is at least a class.
64
- const source = new TypeScriptFileRefactor ( module , host , program ) ;
66
+ const source = getTypeScriptFileRefactor ( module , host , programManager ) ;
65
67
const hasSymbol = source . findAstNodes ( null , ts . SyntaxKind . ClassDeclaration )
66
68
. some ( ( cd : ts . ClassDeclaration ) => {
67
69
return cd . name && cd . name . text == symbolName ;
@@ -80,7 +82,7 @@ function _recursiveSymbolExportLookup(refactor: TypeScriptFileRefactor,
80
82
function _symbolImportLookup ( refactor : TypeScriptFileRefactor ,
81
83
symbolName : string ,
82
84
host : ts . CompilerHost ,
83
- program : ts . Program ) : string | null {
85
+ programManager : ProgramManager ) : string | null {
84
86
// We found the bootstrap variable, now we just need to get where it's imported.
85
87
const imports = refactor . findAstNodes ( null , ts . SyntaxKind . ImportDeclaration )
86
88
. map ( node => node as ts . ImportDeclaration ) ;
@@ -95,7 +97,7 @@ function _symbolImportLookup(refactor: TypeScriptFileRefactor,
95
97
96
98
const resolvedModule = ts . resolveModuleName (
97
99
( decl . moduleSpecifier as ts . StringLiteral ) . text ,
98
- refactor . fileName , program . getCompilerOptions ( ) , host ) ;
100
+ refactor . fileName , programManager . program . getCompilerOptions ( ) , host ) ;
99
101
if ( ! resolvedModule . resolvedModule || ! resolvedModule . resolvedModule . resolvedFileName ) {
100
102
continue ;
101
103
}
@@ -112,8 +114,9 @@ function _symbolImportLookup(refactor: TypeScriptFileRefactor,
112
114
for ( const specifier of binding . elements ) {
113
115
if ( specifier . name . text == symbolName ) {
114
116
// Create the source and recursively lookup the import.
115
- const source = new TypeScriptFileRefactor ( module , host , program ) ;
116
- const maybeModule = _recursiveSymbolExportLookup ( source , symbolName , host , program ) ;
117
+ const source = getTypeScriptFileRefactor ( module , host , programManager ) ;
118
+ const maybeModule = _recursiveSymbolExportLookup (
119
+ source , symbolName , host , programManager ) ;
117
120
if ( maybeModule ) {
118
121
return maybeModule ;
119
122
}
@@ -127,8 +130,8 @@ function _symbolImportLookup(refactor: TypeScriptFileRefactor,
127
130
128
131
export function resolveEntryModuleFromMain ( mainPath : string ,
129
132
host : ts . CompilerHost ,
130
- program : ts . Program ) {
131
- const source = new TypeScriptFileRefactor ( mainPath , host , program ) ;
133
+ programManager : ProgramManager ) {
134
+ const source = getTypeScriptFileRefactor ( mainPath , host , programManager ) ;
132
135
133
136
const bootstrap = source . findAstNodes ( source . sourceFile , ts . SyntaxKind . CallExpression , true )
134
137
. map ( node => node as ts . CallExpression )
@@ -148,7 +151,7 @@ export function resolveEntryModuleFromMain(mainPath: string,
148
151
+ 'to the plugins options.' ) ;
149
152
}
150
153
const bootstrapSymbolName = bootstrap [ 0 ] . text ;
151
- const module = _symbolImportLookup ( source , bootstrapSymbolName , host , program ) ;
154
+ const module = _symbolImportLookup ( source , bootstrapSymbolName , host , programManager ) ;
152
155
if ( module ) {
153
156
return `${ module . replace ( / \. t s $ / , '' ) } #${ bootstrapSymbolName } ` ;
154
157
}
0 commit comments