Skip to content

Commit

Permalink
Cherry-pick PR microsoft#49233 into release-4.7 (microsoft#49244)
Browse files Browse the repository at this point in the history
Component commits:
1ab6396 Fix extensions for noDtsResolution in node16/nodenext

Co-authored-by: Andrew Branch <andrew@wheream.io>
  • Loading branch information
typescript-bot and andrewbranch committed May 25, 2022
1 parent cfd1a6e commit 697df6f
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 5 deletions.
14 changes: 9 additions & 5 deletions src/compiler/moduleNameResolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1288,18 +1288,22 @@ namespace ts {
);
}

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

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

const jsOnlyExtensions = [Extensions.JavaScript];
const tsExtensions = [Extensions.TypeScript, Extensions.JavaScript];
const tsPlusJsonExtensions = [...tsExtensions, Extensions.Json];
const tsconfigExtensions = [Extensions.TSConfig];
function tryResolveJSModuleWorker(moduleName: string, initialDir: string, host: ModuleResolutionHost): ResolvedModuleWithFailedLookupLocations {
return nodeModuleNameResolverWorker(NodeResolutionFeatures.None, moduleName, initialDir, { moduleResolution: ModuleResolutionKind.NodeJs, allowJs: true }, host, /*cache*/ undefined, jsOnlyExtensions, /*redirectedReferences*/ undefined);
}
Expand Down
35 changes: 35 additions & 0 deletions tests/cases/fourslash/server/goToSource13_nodenext.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/// <reference path="../fourslash.ts" />

// @Filename: /node_modules/left-pad/package.json
//// {
//// "name": "left-pad",
//// "version": "1.3.0",
//// "description": "String left pad",
//// "main": "index.js",
//// "types": "index.d.ts"
//// }

// @Filename: /node_modules/left-pad/index.d.ts
//// declare function leftPad(str: string|number, len: number, ch?: string|number): string;
//// declare namespace leftPad { }
//// export = leftPad;

// @Filename: /node_modules/left-pad/index.js
//// module.exports = leftPad;
//// function /*end*/leftPad(str, len, ch) {}

// @Filename: /tsconfig.json
//// {
//// "compilerOptions": {
//// "module": "node16",
//// "strict": true,
//// "outDir": "./out",
////
//// }
//// }

// @Filename: /index.mts
//// import leftPad = require("left-pad");
//// /*start*/leftPad("", 4);

verify.goToSourceDefinition("start", "end");

0 comments on commit 697df6f

Please sign in to comment.