File tree 1 file changed +13
-2
lines changed 1 file changed +13
-2
lines changed Original file line number Diff line number Diff line change @@ -31,6 +31,18 @@ namespace ts {
31
31
}
32
32
33
33
export function createTypeChecker(host: TypeCheckerHost, produceDiagnostics: boolean): TypeChecker {
34
+ const getPackagesSet: () => Map<true> = memoize(() => {
35
+ const set = createMap<true>();
36
+ host.getSourceFiles().forEach(sf => {
37
+ if (!sf.resolvedModules) return;
38
+
39
+ forEachEntry(sf.resolvedModules, r => {
40
+ if (r && r.packageId) set.set(r.packageId.name, true);
41
+ });
42
+ });
43
+ return set;
44
+ });
45
+
34
46
// Cancellation that controls whether or not we can cancel in the middle of type checking.
35
47
// In general cancelling is *not* safe for the type checker. We might be in the middle of
36
48
// computing something, and we will leave our internals in an inconsistent state. Callers
@@ -2265,8 +2277,7 @@ namespace ts {
2265
2277
resolvedFileName));
2266
2278
}
2267
2279
function typesPackageExists(packageName: string): boolean {
2268
- return host.getSourceFiles().some(sf => !!sf.resolvedModules && !!forEachEntry(sf.resolvedModules, r =>
2269
- r && r.packageId && r.packageId.name === getTypesPackageName(packageName)));
2280
+ return getPackagesSet().has(getTypesPackageName(packageName));
2270
2281
}
2271
2282
2272
2283
// An external module with an 'export =' declaration resolves to the target of the 'export =' declaration,
You can’t perform that action at this time.
0 commit comments