Skip to content

Commit 697df6f

Browse files
TypeScript Botandrewbranch
TypeScript Bot
andauthored
Cherry-pick PR #49233 into release-4.7 (#49244)
Component commits: 1ab6396 Fix extensions for noDtsResolution in node16/nodenext Co-authored-by: Andrew Branch <[email protected]>
1 parent cfd1a6e commit 697df6f

File tree

2 files changed

+44
-5
lines changed

2 files changed

+44
-5
lines changed

src/compiler/moduleNameResolver.ts

+9-5
Original file line numberDiff line numberDiff line change
@@ -1288,18 +1288,22 @@ namespace ts {
12881288
);
12891289
}
12901290

1291+
const jsOnlyExtensions = [Extensions.JavaScript];
1292+
const tsExtensions = [Extensions.TypeScript, Extensions.JavaScript];
1293+
const tsPlusJsonExtensions = [...tsExtensions, Extensions.Json];
1294+
const tsconfigExtensions = [Extensions.TSConfig];
12911295
function nodeNextModuleNameResolverWorker(features: NodeResolutionFeatures, moduleName: string, containingFile: string, compilerOptions: CompilerOptions, host: ModuleResolutionHost, cache?: ModuleResolutionCache, redirectedReference?: ResolvedProjectReference, resolutionMode?: ModuleKind.CommonJS | ModuleKind.ESNext): ResolvedModuleWithFailedLookupLocations {
12921296
const containingDirectory = getDirectoryPath(containingFile);
12931297

12941298
// es module file or cjs-like input file, use a variant of the legacy cjs resolver that supports the selected modern features
12951299
const esmMode = resolutionMode === ModuleKind.ESNext ? NodeResolutionFeatures.EsmMode : 0;
1296-
return nodeModuleNameResolverWorker(features | esmMode, moduleName, containingDirectory, compilerOptions, host, cache, compilerOptions.resolveJsonModule ? tsPlusJsonExtensions : tsExtensions, redirectedReference);
1300+
let extensions = compilerOptions.noDtsResolution ? [Extensions.TsOnly, Extensions.JavaScript] : tsExtensions;
1301+
if (compilerOptions.resolveJsonModule) {
1302+
extensions = [...extensions, Extensions.Json];
1303+
}
1304+
return nodeModuleNameResolverWorker(features | esmMode, moduleName, containingDirectory, compilerOptions, host, cache, extensions, redirectedReference);
12971305
}
12981306

1299-
const jsOnlyExtensions = [Extensions.JavaScript];
1300-
const tsExtensions = [Extensions.TypeScript, Extensions.JavaScript];
1301-
const tsPlusJsonExtensions = [...tsExtensions, Extensions.Json];
1302-
const tsconfigExtensions = [Extensions.TSConfig];
13031307
function tryResolveJSModuleWorker(moduleName: string, initialDir: string, host: ModuleResolutionHost): ResolvedModuleWithFailedLookupLocations {
13041308
return nodeModuleNameResolverWorker(NodeResolutionFeatures.None, moduleName, initialDir, { moduleResolution: ModuleResolutionKind.NodeJs, allowJs: true }, host, /*cache*/ undefined, jsOnlyExtensions, /*redirectedReferences*/ undefined);
13051309
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/// <reference path="../fourslash.ts" />
2+
3+
// @Filename: /node_modules/left-pad/package.json
4+
//// {
5+
//// "name": "left-pad",
6+
//// "version": "1.3.0",
7+
//// "description": "String left pad",
8+
//// "main": "index.js",
9+
//// "types": "index.d.ts"
10+
//// }
11+
12+
// @Filename: /node_modules/left-pad/index.d.ts
13+
//// declare function leftPad(str: string|number, len: number, ch?: string|number): string;
14+
//// declare namespace leftPad { }
15+
//// export = leftPad;
16+
17+
// @Filename: /node_modules/left-pad/index.js
18+
//// module.exports = leftPad;
19+
//// function /*end*/leftPad(str, len, ch) {}
20+
21+
// @Filename: /tsconfig.json
22+
//// {
23+
//// "compilerOptions": {
24+
//// "module": "node16",
25+
//// "strict": true,
26+
//// "outDir": "./out",
27+
////
28+
//// }
29+
//// }
30+
31+
// @Filename: /index.mts
32+
//// import leftPad = require("left-pad");
33+
//// /*start*/leftPad("", 4);
34+
35+
verify.goToSourceDefinition("start", "end");

0 commit comments

Comments
 (0)