Fix incorrect usage of package.json types/main in package subdirectories (#60696)

This commit is contained in:
Andrew Branch
2024-12-06 13:47:41 -08:00
committed by GitHub
parent 239a2a936f
commit 421f5c5458
5 changed files with 11 additions and 75 deletions

View File

@@ -2208,9 +2208,7 @@ function tryFileLookup(fileName: string, onlyRecordFailures: boolean, state: Mod
function loadNodeModuleFromDirectory(extensions: Extensions, candidate: string, onlyRecordFailures: boolean, state: ModuleResolutionState, considerPackageJson = true) {
const packageInfo = considerPackageJson ? getPackageJsonInfo(candidate, onlyRecordFailures, state) : undefined;
const packageJsonContent = packageInfo && packageInfo.contents.packageJsonContent;
const versionPaths = packageInfo && getVersionPathsOfPackageJsonInfo(packageInfo, state);
return withPackageId(packageInfo, loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, packageJsonContent, versionPaths), state);
return withPackageId(packageInfo, loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, packageInfo), state);
}
/** @internal */
@@ -2243,8 +2241,7 @@ export function getEntrypointsFromPackageJsonInfo(
packageJsonInfo.packageDirectory,
/*onlyRecordFailures*/ false,
loadPackageJsonMainState,
packageJsonInfo.contents.packageJsonContent,
getVersionPathsOfPackageJsonInfo(packageJsonInfo, loadPackageJsonMainState),
packageJsonInfo,
);
entrypoints = append(entrypoints, mainResolution?.path);
@@ -2481,15 +2478,16 @@ function getPackageJsonInfo(packageDirectory: string, onlyRecordFailures: boolea
}
}
function loadNodeModuleFromDirectoryWorker(extensions: Extensions, candidate: string, onlyRecordFailures: boolean, state: ModuleResolutionState, jsonContent: PackageJsonPathFields | undefined, versionPaths: VersionPaths | undefined): PathAndExtension | undefined {
function loadNodeModuleFromDirectoryWorker(extensions: Extensions, candidate: string, onlyRecordFailures: boolean, state: ModuleResolutionState, packageJson: PackageJsonInfo | undefined): PathAndExtension | undefined {
const versionPaths = packageJson && getVersionPathsOfPackageJsonInfo(packageJson, state);
let packageFile: string | undefined;
if (jsonContent) {
if (packageJson && arePathsEqual(packageJson?.packageDirectory, candidate, state.host)) {
if (state.isConfigLookup) {
packageFile = readPackageJsonTSConfigField(jsonContent, candidate, state);
packageFile = readPackageJsonTSConfigField(packageJson.contents.packageJsonContent, packageJson.packageDirectory, state);
}
else {
packageFile = extensions & Extensions.Declaration && readPackageJsonTypesFields(jsonContent, candidate, state) ||
extensions & (Extensions.ImplementationFiles | Extensions.Declaration) && readPackageJsonMainField(jsonContent, candidate, state) ||
packageFile = extensions & Extensions.Declaration && readPackageJsonTypesFields(packageJson.contents.packageJsonContent, packageJson.packageDirectory, state) ||
extensions & (Extensions.ImplementationFiles | Extensions.Declaration) && readPackageJsonMainField(packageJson.contents.packageJsonContent, packageJson.packageDirectory, state) ||
undefined;
}
}
@@ -2510,7 +2508,7 @@ function loadNodeModuleFromDirectoryWorker(extensions: Extensions, candidate: st
const features = state.features;
const candidateIsFromPackageJsonField = state.candidateIsFromPackageJsonField;
state.candidateIsFromPackageJsonField = true;
if (jsonContent?.type !== "module") {
if (packageJson?.contents.packageJsonContent.type !== "module") {
state.features &= ~NodeResolutionFeatures.EsmMode;
}
const result = nodeLoadModuleByRelativeName(expandedExtensions, candidate, onlyRecordFailures, state, /*considerPackageJson*/ false);
@@ -3100,8 +3098,7 @@ function loadModuleFromSpecificNodeModulesDirectory(extensions: Extensions, modu
candidate,
!nodeModulesDirectoryExists,
state,
packageInfo.contents.packageJsonContent,
getVersionPathsOfPackageJsonInfo(packageInfo, state),
packageInfo,
);
return withPackageId(packageInfo, fromDirectory, state);
}
@@ -3113,8 +3110,7 @@ function loadModuleFromSpecificNodeModulesDirectory(extensions: Extensions, modu
candidate,
onlyRecordFailures,
state,
packageInfo && packageInfo.contents.packageJsonContent,
packageInfo && getVersionPathsOfPackageJsonInfo(packageInfo, state),
packageInfo,
);
if (
!pathAndExtension && packageInfo