|
@@ -1193,7 +1193,12 @@ function loadTSConfig(
|
|
|
return res
|
|
return res
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// `recordTypes` records different members onto the TypeScope depending on
|
|
|
|
|
+// `asGlobal`, so the two contexts must not share a cache entry — otherwise a
|
|
|
|
|
+// global-scope load can poison a later import-based resolution of the same
|
|
|
|
|
+// file.
|
|
|
const fileToScopeCache = createCache<TypeScope>()
|
|
const fileToScopeCache = createCache<TypeScope>()
|
|
|
|
|
+const fileToGlobalScopeCache = createCache<TypeScope>()
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* @private
|
|
* @private
|
|
@@ -1201,6 +1206,7 @@ const fileToScopeCache = createCache<TypeScope>()
|
|
|
export function invalidateTypeCache(filename: string): void {
|
|
export function invalidateTypeCache(filename: string): void {
|
|
|
filename = normalizePath(filename)
|
|
filename = normalizePath(filename)
|
|
|
fileToScopeCache.delete(filename)
|
|
fileToScopeCache.delete(filename)
|
|
|
|
|
+ fileToGlobalScopeCache.delete(filename)
|
|
|
tsConfigCache.delete(filename)
|
|
tsConfigCache.delete(filename)
|
|
|
const affectedConfig = tsConfigRefMap.get(filename)
|
|
const affectedConfig = tsConfigRefMap.get(filename)
|
|
|
if (affectedConfig) tsConfigCache.delete(affectedConfig)
|
|
if (affectedConfig) tsConfigCache.delete(affectedConfig)
|
|
@@ -1211,7 +1217,8 @@ export function fileToScope(
|
|
|
filename: string,
|
|
filename: string,
|
|
|
asGlobal = false,
|
|
asGlobal = false,
|
|
|
): TypeScope {
|
|
): TypeScope {
|
|
|
- const cached = fileToScopeCache.get(filename)
|
|
|
|
|
|
|
+ const cache = asGlobal ? fileToGlobalScopeCache : fileToScopeCache
|
|
|
|
|
+ const cached = cache.get(filename)
|
|
|
if (cached) {
|
|
if (cached) {
|
|
|
return cached
|
|
return cached
|
|
|
}
|
|
}
|
|
@@ -1221,7 +1228,7 @@ export function fileToScope(
|
|
|
const body = parseFile(filename, source, fs, ctx.options.babelParserPlugins)
|
|
const body = parseFile(filename, source, fs, ctx.options.babelParserPlugins)
|
|
|
const scope = new TypeScope(filename, source, 0, recordImports(body))
|
|
const scope = new TypeScope(filename, source, 0, recordImports(body))
|
|
|
recordTypes(ctx, body, scope, asGlobal)
|
|
recordTypes(ctx, body, scope, asGlobal)
|
|
|
- fileToScopeCache.set(filename, scope)
|
|
|
|
|
|
|
+ cache.set(filename, scope)
|
|
|
return scope
|
|
return scope
|
|
|
}
|
|
}
|
|
|
|
|
|