Skip to content
This repository was archived by the owner on Dec 1, 2019. It is now read-only.

Commit 27d799c

Browse files
committed
feat(*): update module resolution logic according to microsoft/TypeScript#4738
1 parent fe08642 commit 27d799c

File tree

2 files changed

+23
-21
lines changed

2 files changed

+23
-21
lines changed

src/checker.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export interface IInitPayload {
1919

2020
export interface ICompilePayload {
2121
files: {[fileName: string]: IFile};
22-
resolutionCache: {[fileName: string]: string};
22+
resolutionCache: {[fileName: string]: ts.ResolvedModule};
2323
}
2424

2525
export interface IEnv {
@@ -28,7 +28,7 @@ export interface IEnv {
2828
compilerInfo?: ICompilerInfo;
2929
host?: Host;
3030
files?: {[fileName: string]: IFile};
31-
resolutionCache?: {[fileName: string]: string};
31+
resolutionCache?: {[fileName: string]: ts.ResolvedModule};
3232
program?: ts.Program;
3333
service?: ts.LanguageService;
3434
}
@@ -67,15 +67,15 @@ export class Host implements ts.LanguageServiceHost {
6767
}
6868

6969
resolveModuleNames(moduleNames: string[], containingFile: string) {
70-
let resolvedFileNames: string[] = [];
70+
let resolvedModules: ts.ResolvedModule[] = [];
7171

7272
for (let moduleName of moduleNames) {
73-
resolvedFileNames.push(
73+
resolvedModules.push(
7474
env.resolutionCache[`${containingFile}::${moduleName}`]
7575
);
7676
}
7777

78-
return resolvedFileNames;
78+
return resolvedModules;
7979
}
8080

8181
getDefaultLibFileName(options) {
@@ -87,7 +87,6 @@ export class Host implements ts.LanguageServiceHost {
8787
log(message) {
8888
//console.log(message);
8989
}
90-
9190
}
9291

9392
function processInit(payload: IInitPayload) {

src/host.ts

+18-15
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export interface IEmitOutput extends ts.EmitOutput {
5959

6060
export class ModuleResolutionHost implements ts.ModuleResolutionHost {
6161
servicesHost: Host;
62-
resolutionCache: {[fileName: string]: string} = {};
62+
resolutionCache: {[fileName: string]: ts.ResolvedModuleWithFailedLookupLocations} = {};
6363

6464
constructor(servicesHost: Host) {
6565
this.servicesHost = servicesHost;
@@ -120,30 +120,33 @@ export class Host implements ts.LanguageServiceHost {
120120
}
121121

122122
resolveModuleNames(moduleNames: string[], containingFile: string) {
123-
let resolvedFileNames: string[] = [];
123+
let resolvedModules: ts.ResolvedModule[] = [];
124124

125125
for (let moduleName of moduleNames) {
126126
let resolvedFileName: string;
127+
let resolvedModule: ts.ResolvedModuleWithFailedLookupLocations;
127128
try {
128129
resolvedFileName = this.state.resolver(containingFile, moduleName)
129-
if (!resolvedFileName.match(/\.tsx?$/)) resolvedFileName = null;
130+
if (!resolvedFileName.match(/\.tsx?$/)) {
131+
resolvedFileName = null;
132+
}
130133
}
131-
catch (e) { resolvedFileName = null }
132-
133-
if (!resolvedFileName) {
134-
resolvedFileName = this.state.ts.resolveModuleName(
135-
moduleName,
136-
containingFile,
137-
this.state.options,
138-
this.moduleResolutionHost
139-
).resolvedFileName
134+
catch (e) {
135+
resolvedFileName = null
140136
}
141137

142-
this.moduleResolutionHost.resolutionCache[`${containingFile}::${moduleName}`] = resolvedFileName;
143-
resolvedFileNames.push(resolvedFileName);
138+
resolvedModule = this.state.ts.resolveModuleName(
139+
resolvedFileName || moduleName,
140+
containingFile,
141+
this.state.options,
142+
this.moduleResolutionHost
143+
);
144+
145+
this.moduleResolutionHost.resolutionCache[`${containingFile}::${moduleName}`] = resolvedModule;
146+
resolvedModules.push(resolvedModule.resolvedModule);
144147
}
145148

146-
return resolvedFileNames;
149+
return resolvedModules;
147150
}
148151

149152
log(message) {

0 commit comments

Comments
 (0)