Skip to content

Commit e21ae36

Browse files
authored
fix: update module resolution for non-relative paths (#229)
1 parent 2e50207 commit e21ae36

File tree

1 file changed

+22
-13
lines changed

1 file changed

+22
-13
lines changed

src/index.ts

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,12 @@ const init: tsModule.server.PluginModuleFactory = ({ typescript: ts }) => {
142142

143143
const createModuleResolver =
144144
(containingFile: string) =>
145-
(moduleName: string): tsModule.ResolvedModuleFull | undefined => {
145+
(
146+
moduleName: string,
147+
resolveModule: () =>
148+
| tsModule.ResolvedModuleWithFailedLookupLocations
149+
| undefined,
150+
): tsModule.ResolvedModuleFull | undefined => {
146151
if (isRelativeCSS(moduleName)) {
147152
return {
148153
extension: ts.Extension.Dts,
@@ -152,25 +157,21 @@ const init: tsModule.server.PluginModuleFactory = ({ typescript: ts }) => {
152157
moduleName,
153158
),
154159
};
155-
} else if (
156-
isCSS(moduleName) &&
157-
languageServiceHost.getResolvedModuleWithFailedLookupLocationsFromCache
158-
) {
160+
}
161+
if (isCSS(moduleName)) {
159162
// TODO: Move this section to a separate file and add basic tests.
160163
// Attempts to locate the module using TypeScript's previous search paths. These include "baseUrl" and "paths".
161-
const failedModule =
162-
languageServiceHost.getResolvedModuleWithFailedLookupLocationsFromCache(
163-
moduleName,
164-
containingFile,
165-
);
164+
const resolvedModule = resolveModule();
165+
if (!resolvedModule) return;
166+
166167
const baseUrl = info.project.getCompilerOptions().baseUrl;
167168
const match = '/index.ts';
168169

169170
// An array of paths TypeScript searched for the module. All include .ts, .tsx, .d.ts, or .json extensions.
170171
// NOTE: TypeScript doesn't expose this in their interfaces, which is why the type is unknown.
171172
// https://github.com/microsoft/TypeScript/issues/28770
172173
const failedLocations: readonly string[] = (
173-
failedModule as unknown as {
174+
resolvedModule as unknown as {
174175
failedLookupLocations: readonly string[];
175176
}
176177
).failedLookupLocations;
@@ -227,7 +228,10 @@ const init: tsModule.server.PluginModuleFactory = ({ typescript: ts }) => {
227228

228229
return moduleNames.map(({ text: moduleName }, index) => {
229230
try {
230-
const resolvedModule = moduleResolver(moduleName);
231+
const resolvedModule = moduleResolver(
232+
moduleName,
233+
() => resolvedModules[index],
234+
);
231235
if (resolvedModule) return { resolvedModule };
232236
} catch (e) {
233237
logger.error(e);
@@ -259,7 +263,12 @@ const init: tsModule.server.PluginModuleFactory = ({ typescript: ts }) => {
259263

260264
return moduleNames.map((moduleName, index) => {
261265
try {
262-
const resolvedModule = moduleResolver(moduleName);
266+
const resolvedModule = moduleResolver(moduleName, () =>
267+
languageServiceHost.getResolvedModuleWithFailedLookupLocationsFromCache?.(
268+
moduleName,
269+
containingFile,
270+
),
271+
);
263272
if (resolvedModule) return resolvedModule;
264273
} catch (e) {
265274
logger.error(e);

0 commit comments

Comments
 (0)