Skip to content

Commit a0c672a

Browse files
author
Andy
authored
Add assertion that module / type reference names are defined (microsoft#17124)
1 parent 38db79d commit a0c672a

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

src/compiler/program.ts

+9-4
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ namespace ts {
447447
let moduleResolutionCache: ModuleResolutionCache;
448448
let resolveModuleNamesWorker: (moduleNames: string[], containingFile: string) => ResolvedModuleFull[];
449449
if (host.resolveModuleNames) {
450-
resolveModuleNamesWorker = (moduleNames, containingFile) => host.resolveModuleNames(moduleNames, containingFile).map(resolved => {
450+
resolveModuleNamesWorker = (moduleNames, containingFile) => host.resolveModuleNames(checkAllDefined(moduleNames), containingFile).map(resolved => {
451451
// An older host may have omitted extension, in which case we should infer it from the file extension of resolvedFileName.
452452
if (!resolved || (resolved as ResolvedModuleFull).extension !== undefined) {
453453
return resolved as ResolvedModuleFull;
@@ -460,16 +460,16 @@ namespace ts {
460460
else {
461461
moduleResolutionCache = createModuleResolutionCache(currentDirectory, x => host.getCanonicalFileName(x));
462462
const loader = (moduleName: string, containingFile: string) => resolveModuleName(moduleName, containingFile, options, host, moduleResolutionCache).resolvedModule;
463-
resolveModuleNamesWorker = (moduleNames, containingFile) => loadWithLocalCache(moduleNames, containingFile, loader);
463+
resolveModuleNamesWorker = (moduleNames, containingFile) => loadWithLocalCache(checkAllDefined(moduleNames), containingFile, loader);
464464
}
465465

466466
let resolveTypeReferenceDirectiveNamesWorker: (typeDirectiveNames: string[], containingFile: string) => ResolvedTypeReferenceDirective[];
467467
if (host.resolveTypeReferenceDirectives) {
468-
resolveTypeReferenceDirectiveNamesWorker = (typeDirectiveNames, containingFile) => host.resolveTypeReferenceDirectives(typeDirectiveNames, containingFile);
468+
resolveTypeReferenceDirectiveNamesWorker = (typeDirectiveNames, containingFile) => host.resolveTypeReferenceDirectives(checkAllDefined(typeDirectiveNames), containingFile);
469469
}
470470
else {
471471
const loader = (typesRef: string, containingFile: string) => resolveTypeReferenceDirective(typesRef, containingFile, options, host).resolvedTypeReferenceDirective;
472-
resolveTypeReferenceDirectiveNamesWorker = (typeReferenceDirectiveNames, containingFile) => loadWithLocalCache(typeReferenceDirectiveNames, containingFile, loader);
472+
resolveTypeReferenceDirectiveNamesWorker = (typeReferenceDirectiveNames, containingFile) => loadWithLocalCache(checkAllDefined(typeReferenceDirectiveNames), containingFile, loader);
473473
}
474474

475475
const filesByName = createMap<SourceFile | undefined>();
@@ -2127,4 +2127,9 @@ namespace ts {
21272127
return options.allowJs ? undefined : Diagnostics.Module_0_was_resolved_to_1_but_allowJs_is_not_set;
21282128
}
21292129
}
2130+
2131+
function checkAllDefined(names: string[]): string[] {
2132+
Debug.assert(names.every(name => name !== undefined), "A name is undefined.", () => JSON.stringify(names));
2133+
return names;
2134+
}
21302135
}

0 commit comments

Comments
 (0)