Skip to content

Commit 4a33a34

Browse files
Merge branch 'feat/reuse-mod-res-cache' into fix/vue-5818
Co-authored-by: Johnson Chu <johnsoncodehk@gmail.com>
2 parents 5da07c5 + e107a30 commit 4a33a34

File tree

2 files changed

+3
-44
lines changed

2 files changed

+3
-44
lines changed

packages/typescript/lib/node/decorateLanguageServiceHost.ts

Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ export function decorateLanguageServiceHost(
2525
const resolveModuleNames = languageServiceHost.resolveModuleNames?.bind(languageServiceHost);
2626
const getScriptSnapshot = languageServiceHost.getScriptSnapshot.bind(languageServiceHost);
2727
const getScriptKind = languageServiceHost.getScriptKind?.bind(languageServiceHost);
28-
const getScriptFileNames = languageServiceHost.getScriptFileNames?.bind(languageServiceHost);
2928

3029
// path completion
3130
if (readDirectory) {
@@ -49,45 +48,7 @@ export function decorateLanguageServiceHost(
4948
language.plugins,
5049
fileName => language.scripts.get(fileName),
5150
);
52-
const getCanonicalFileName = languageServiceHost.useCaseSensitiveFileNames?.()
53-
? (fileName: string) => fileName
54-
: (fileName: string) => fileName.toLowerCase();
55-
const moduleResolutionCache = ts.createModuleResolutionCache(
56-
languageServiceHost.getCurrentDirectory(),
57-
getCanonicalFileName,
58-
languageServiceHost.getCompilationSettings(),
59-
);
60-
61-
let moduleResolutionProjectVersion: string | undefined;
62-
let moduleResolutionProjectFileNames: Set<string> | undefined;
63-
const tryClearModuleResolutionCache = () => {
64-
const projectVersion = languageServiceHost.getProjectVersion?.();
65-
const scriptFileNames = getScriptFileNames?.();
66-
const canonicalScriptFileNames = scriptFileNames?.map(getCanonicalFileName);
67-
const filesUnchanged = Boolean(
68-
canonicalScriptFileNames
69-
&& moduleResolutionProjectFileNames
70-
&& canonicalScriptFileNames.length === moduleResolutionProjectFileNames.size
71-
&& canonicalScriptFileNames.every(name => moduleResolutionProjectFileNames?.has(name)),
72-
);
73-
74-
if (projectVersion === moduleResolutionProjectVersion && (!scriptFileNames || filesUnchanged)) {
75-
return;
76-
}
77-
78-
moduleResolutionProjectVersion = projectVersion;
79-
80-
if (!scriptFileNames) {
81-
moduleResolutionProjectFileNames = undefined;
82-
moduleResolutionCache.clear();
83-
return;
84-
}
85-
86-
if (!filesUnchanged) {
87-
moduleResolutionCache.clear();
88-
}
89-
moduleResolutionProjectFileNames = new Set(canonicalScriptFileNames ?? []);
90-
};
51+
const moduleResolutionCache = languageServiceHost.getModuleResolutionCache?.();
9152

9253
if (resolveModuleNameLiterals) {
9354
languageServiceHost.resolveModuleNameLiterals = (
@@ -102,12 +63,11 @@ export function decorateLanguageServiceHost(
10263
ts,
10364
pluginExtensions,
10465
containingSourceFile,
105-
moduleResolutionCache.getPackageJsonInfoCache(),
66+
moduleResolutionCache?.getPackageJsonInfoCache(),
10667
languageServiceHost,
10768
options,
10869
);
10970
try {
110-
tryClearModuleResolutionCache();
11171
if (moduleLiterals.every(name => !pluginExtensions.some(ext => name.text.endsWith(ext)))) {
11272
return resolveModuleNameLiterals(
11373
moduleLiterals,
@@ -144,7 +104,6 @@ export function decorateLanguageServiceHost(
144104
options,
145105
containingSourceFile,
146106
) => {
147-
tryClearModuleResolutionCache();
148107
if (moduleNames.every(name => !pluginExtensions.some(ext => name.endsWith(ext)))) {
149108
return resolveModuleNames(
150109
moduleNames,

packages/typescript/lib/node/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export function fixupImpliedNodeFormatForFile(
3939
ts: typeof import('typescript'),
4040
pluginExtensions: string[],
4141
sourceFile: ts.SourceFile,
42-
packageJsonInfoCache: ts.PackageJsonInfoCache,
42+
packageJsonInfoCache: ts.PackageJsonInfoCache | undefined,
4343
host: ts.ModuleResolutionHost,
4444
options: ts.CompilerOptions,
4545
) {

0 commit comments

Comments
 (0)