Skip to content

Commit 49388d7

Browse files
committed
Fix tsconfig import extensions
This aligns tsconfig relative and package import behaviour: to enable all extensions (e.g. .jsonc, .tsconfig, ...). This fixes bug #43121
1 parent 5ea81d7 commit 49388d7

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

src/compiler/commandLineParser.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ import {
8888
NewLineKind,
8989
Node,
9090
NodeArray,
91-
nodeNextJsonConfigResolver,
91+
nodeNextTsconfigResolver,
9292
normalizePath,
9393
normalizeSlashes,
9494
NumericLiteral,
@@ -3630,7 +3630,7 @@ function getExtendsConfigPath(
36303630
return extendedConfigPath;
36313631
}
36323632
// If the path isn't a rooted or relative path, resolve like a module
3633-
const resolved = nodeNextJsonConfigResolver(extendedConfig, combinePaths(basePath, "tsconfig.json"), host);
3633+
const resolved = nodeNextTsconfigResolver(extendedConfig, combinePaths(basePath, "tsconfig.json"), host);
36343634
if (resolved.resolvedModule) {
36353635
return resolved.resolvedModule.resolvedFileName;
36363636
}

src/compiler/moduleNameResolver.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ const enum Extensions {
185185
Json = 1 << 3, // '.json'
186186

187187
ImplementationFiles = TypeScript | JavaScript,
188+
Any = (TypeScript | JavaScript | Declaration | Json | 1 << 4),
188189
}
189190

190191
function formatExtensions(extensions: Extensions) {
@@ -193,6 +194,7 @@ function formatExtensions(extensions: Extensions) {
193194
if (extensions & Extensions.JavaScript) result.push("JavaScript");
194195
if (extensions & Extensions.Declaration) result.push("Declaration");
195196
if (extensions & Extensions.Json) result.push("JSON");
197+
if (extensions & Extensions.Any) result.push("Any");
196198
return result.join(", ");
197199
}
198200

@@ -1772,7 +1774,7 @@ export function nodeModuleNameResolver(moduleName: string, containingFile: strin
17721774
export function nodeModuleNameResolver(moduleName: string, containingFile: string, compilerOptions: CompilerOptions, host: ModuleResolutionHost, cache?: ModuleResolutionCache, redirectedReference?: ResolvedProjectReference, conditions?: string[], isConfigLookup?: boolean): ResolvedModuleWithFailedLookupLocations {
17731775
let extensions;
17741776
if (isConfigLookup) {
1775-
extensions = Extensions.Json;
1777+
extensions = Extensions.Any;
17761778
}
17771779
else if (compilerOptions.noDtsResolution) {
17781780
extensions = Extensions.ImplementationFiles;
@@ -1788,8 +1790,8 @@ export function nodeModuleNameResolver(moduleName: string, containingFile: strin
17881790
}
17891791

17901792
/** @internal */
1791-
export function nodeNextJsonConfigResolver(moduleName: string, containingFile: string, host: ModuleResolutionHost): ResolvedModuleWithFailedLookupLocations {
1792-
return nodeModuleNameResolverWorker(NodeResolutionFeatures.NodeNextDefault, moduleName, getDirectoryPath(containingFile), { moduleResolution: ModuleResolutionKind.NodeNext }, host, /*cache*/ undefined, Extensions.Json, /*isConfigLookup*/ true, /*redirectedReference*/ undefined, /*conditions*/ undefined);
1793+
export function nodeNextTsconfigResolver(moduleName: string, containingFile: string, host: ModuleResolutionHost): ResolvedModuleWithFailedLookupLocations {
1794+
return nodeModuleNameResolverWorker(NodeResolutionFeatures.NodeNextDefault, moduleName, getDirectoryPath(containingFile), { moduleResolution: ModuleResolutionKind.NodeNext }, host, /*cache*/ undefined, Extensions.Any, /*isConfigLookup*/ true, /*redirectedReference*/ undefined, /*conditions*/ undefined);
17931795
}
17941796

17951797
function nodeModuleNameResolverWorker(
@@ -2111,9 +2113,9 @@ function loadFileNameFromPackageJsonField(extensions: Extensions, candidate: str
21112113
return result !== undefined ? { path: candidate, ext, resolvedUsingTsExtension: packageJsonValue ? !endsWith(packageJsonValue, ext) : undefined } : undefined;
21122114
}
21132115

2114-
if (state.isConfigLookup && extensions === Extensions.Json && fileExtensionIs(candidate, Extension.Json)) {
2116+
if (state.isConfigLookup && (extensions === Extensions.Any || extensionsToExtensionsArray(extensions).some(ext => fileExtensionIs(candidate, ext)))) {
21152117
const result = tryFile(candidate, onlyRecordFailures, state);
2116-
return result !== undefined ? { path: candidate, ext: Extension.Json, resolvedUsingTsExtension: undefined } : undefined;
2118+
return result !== undefined ? { path: candidate, ext: getAnyExtensionFromPath(candidate), resolvedUsingTsExtension: undefined } : undefined;
21172119
}
21182120

21192121
return loadModuleFromFileNoImplicitExtensions(extensions, candidate, onlyRecordFailures, state);
@@ -2168,6 +2170,7 @@ function tryAddingExtensions(candidate: string, extensions: Extensions, original
21682170
|| undefined;
21692171
default:
21702172
return extensions & Extensions.Declaration && !isDeclarationFileName(candidate + originalExtension) && tryExtension(`.d${originalExtension}.ts`)
2173+
|| extensions & Extensions.Any && tryExtension(originalExtension)
21712174
|| undefined;
21722175
}
21732176

0 commit comments

Comments
 (0)