Skip to content

Commit

Permalink
Handle more places where package direcroy is converted to canonical f…
Browse files Browse the repository at this point in the history
…ile path
  • Loading branch information
sheetalkamat committed Sep 12, 2022
1 parent 8c62477 commit e1b1c47
Show file tree
Hide file tree
Showing 12 changed files with 82 additions and 87 deletions.
2 changes: 1 addition & 1 deletion src/compiler/checker.ts
Expand Up @@ -3629,7 +3629,7 @@ namespace ts {
if (ext === Extension.Ts || ext === Extension.Js || ext === Extension.Tsx || ext === Extension.Jsx) {
const scope = currentSourceFile.packageJsonScope;
const targetExt = ext === Extension.Ts ? Extension.Mts : ext === Extension.Js ? Extension.Mjs : undefined;
if (scope && !scope.packageJsonContent.type) {
if (scope && !scope.contents.packageJsonContent.type) {
if (targetExt) {
diagnosticDetails = chainDiagnosticMessages(
/*details*/ undefined,
Expand Down
82 changes: 43 additions & 39 deletions src/compiler/moduleNameResolver.ts

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/compiler/moduleSpecifiers.ts
Expand Up @@ -807,7 +807,7 @@ namespace ts.moduleSpecifiers {
let maybeBlockedByTypesVersions = false;
const cachedPackageJson = host.getPackageJsonInfoCache?.()?.getPackageJsonInfo(packageJsonPath);
if (typeof cachedPackageJson === "object" || cachedPackageJson === undefined && host.fileExists(packageJsonPath)) {
const packageJsonContent = cachedPackageJson?.packageJsonContent || JSON.parse(host.readFile!(packageJsonPath)!);
const packageJsonContent = cachedPackageJson?.contents.packageJsonContent || JSON.parse(host.readFile!(packageJsonPath)!);
const importMode = overrideMode || importingSourceFile.impliedNodeFormat;
if (getEmitModuleResolutionKind(options) === ModuleResolutionKind.Node16 || getEmitModuleResolutionKind(options) === ModuleResolutionKind.NodeNext) {
const conditions = ["node", importMode === ModuleKind.ESNext ? "import" : "require", "types"];
Expand Down
6 changes: 3 additions & 3 deletions src/compiler/program.ts
Expand Up @@ -849,7 +849,7 @@ namespace ts {

/*@internal*/
export function getImpliedNodeFormatForFileWorker(
fileName: Path,
fileName: string,
packageJsonInfoCache: PackageJsonInfoCache | undefined,
host: ModuleResolutionHost,
options: CompilerOptions,
Expand All @@ -870,7 +870,7 @@ namespace ts {
state.failedLookupLocations = packageJsonLocations;
state.affectingLocations = packageJsonLocations;
const packageJsonScope = getPackageScopeForPath(fileName, state);
const impliedNodeFormat = packageJsonScope?.packageJsonContent.type === "module" ? ModuleKind.ESNext : ModuleKind.CommonJS;
const impliedNodeFormat = packageJsonScope?.contents.packageJsonContent.type === "module" ? ModuleKind.ESNext : ModuleKind.CommonJS;
return { impliedNodeFormat, packageJsonLocations, packageJsonScope };
}
}
Expand Down Expand Up @@ -2834,7 +2834,7 @@ namespace ts {
// It's a _little odd_ that we can't set `impliedNodeFormat` until the program step - but it's the first and only time we have a resolution cache
// and a freshly made source file node on hand at the same time, and we need both to set the field. Persisting the resolution cache all the way
// to the check and emit steps would be bad - so we much prefer detecting and storing the format information on the source file node upfront.
const result = getImpliedNodeFormatForFileWorker(toPath(fileName), moduleResolutionCache?.getPackageJsonInfoCache(), host, options);
const result = getImpliedNodeFormatForFileWorker(getNormalizedAbsolutePath(fileName, currentDirectory), moduleResolutionCache?.getPackageJsonInfoCache(), host, options);
const languageVersion = getEmitScriptTarget(options);
const setExternalModuleIndicator = getSetExternalModuleIndicator(options);
return typeof result === "object" ?
Expand Down
2 changes: 1 addition & 1 deletion src/compiler/watch.ts
Expand Up @@ -262,7 +262,7 @@ namespace ts {
if (file.packageJsonScope) {
(result ??= []).push(chainDiagnosticMessages(
/*details*/ undefined,
file.packageJsonScope.packageJsonContent.type ?
file.packageJsonScope.contents.packageJsonContent.type ?
Diagnostics.File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module :
Diagnostics.File_is_CommonJS_module_because_0_does_not_have_field_type,
toFileName(last(file.packageJsonLocations!), fileNameConvertor)
Expand Down
2 changes: 1 addition & 1 deletion src/server/session.ts
Expand Up @@ -1378,7 +1378,7 @@ namespace ts.server {
const packageDirectory = fileName.substring(0, nodeModulesPathParts.packageRootIndex);
const packageJsonCache = project.getModuleResolutionCache()?.getPackageJsonInfoCache();
const compilerOptions = project.getCompilationSettings();
const packageJson = getPackageScopeForPath(project.toPath(packageDirectory + "/package.json"), getTemporaryModuleResolutionState(packageJsonCache, project, compilerOptions));
const packageJson = getPackageScopeForPath(getNormalizedAbsolutePath(packageDirectory + "/package.json", project.getCurrentDirectory()), getTemporaryModuleResolutionState(packageJsonCache, project, compilerOptions));
if (!packageJson) return undefined;
// Use fake options instead of actual compiler options to avoid following export map if the project uses node16 or nodenext -
// Mapping from an export map entry across packages is out of scope for now. Returned entrypoints will only be what can be
Expand Down
Expand Up @@ -25,15 +25,15 @@
"'package.json' does not have a 'typings' field.",
"'package.json' has 'types' field 'index.d.ts' that references 'tests/cases/compiler/node_modules/@types/react/index.d.ts'.",
"File 'tests/cases/compiler/node_modules/@types/react/index.d.ts' exist - use it as a name resolution result.",
"======== Module name './' was successfully resolved to 'tests/cases/compiler/node_modules/@types/react/index.d.ts' with Package ID '@types/react/index.d.ts@0.0.1'. ========",
"======== Module name './' was successfully resolved to 'tests/cases/compiler/node_modules/@types/react/index.d.ts' with Package ID '@types/react/ndex.d.ts@0.0.1'. ========",
"File 'tests/cases/compiler/node_modules/@types/react/package.json' exists according to earlier cached lookups.",
"======== Resolving module './' from 'tests/cases/compiler/node_modules/@types/react/jsx-runtime.d.ts'. ========",
"Resolution for module './' was found in cache from location 'tests/cases/compiler/node_modules/@types/react'.",
"======== Module name './' was successfully resolved to 'tests/cases/compiler/node_modules/@types/react/index.d.ts' with Package ID '@types/react/index.d.ts@0.0.1'. ========",
"======== Module name './' was successfully resolved to 'tests/cases/compiler/node_modules/@types/react/index.d.ts' with Package ID '@types/react/ndex.d.ts@0.0.1'. ========",
"File 'tests/cases/compiler/node_modules/@types/react/package.json' exists according to earlier cached lookups.",
"======== Resolving module './' from 'tests/cases/compiler/node_modules/@types/react/jsx-dev-runtime.d.ts'. ========",
"Resolution for module './' was found in cache from location 'tests/cases/compiler/node_modules/@types/react'.",
"======== Module name './' was successfully resolved to 'tests/cases/compiler/node_modules/@types/react/index.d.ts' with Package ID '@types/react/index.d.ts@0.0.1'. ========",
"======== Module name './' was successfully resolved to 'tests/cases/compiler/node_modules/@types/react/index.d.ts' with Package ID '@types/react/ndex.d.ts@0.0.1'. ========",
"File 'package.json' does not exist.",
"File '/package.json' does not exist according to earlier cached lookups.",
"File 'package.json' does not exist according to earlier cached lookups.",
Expand Down
Expand Up @@ -19,15 +19,15 @@
"'package.json' does not have a 'typings' field.",
"'package.json' has 'types' field 'index.d.ts' that references 'tests/cases/compiler/node_modules/@types/react/index.d.ts'.",
"File 'tests/cases/compiler/node_modules/@types/react/index.d.ts' exist - use it as a name resolution result.",
"======== Module name './' was successfully resolved to 'tests/cases/compiler/node_modules/@types/react/index.d.ts' with Package ID '@types/react/index.d.ts@0.0.1'. ========",
"======== Module name './' was successfully resolved to 'tests/cases/compiler/node_modules/@types/react/index.d.ts' with Package ID '@types/react/ndex.d.ts@0.0.1'. ========",
"File 'tests/cases/compiler/node_modules/@types/react/package.json' exists according to earlier cached lookups.",
"======== Resolving module './' from 'tests/cases/compiler/node_modules/@types/react/jsx-runtime.d.ts'. ========",
"Resolution for module './' was found in cache from location 'tests/cases/compiler/node_modules/@types/react'.",
"======== Module name './' was successfully resolved to 'tests/cases/compiler/node_modules/@types/react/index.d.ts' with Package ID '@types/react/index.d.ts@0.0.1'. ========",
"======== Module name './' was successfully resolved to 'tests/cases/compiler/node_modules/@types/react/index.d.ts' with Package ID '@types/react/ndex.d.ts@0.0.1'. ========",
"File 'tests/cases/compiler/node_modules/@types/react/package.json' exists according to earlier cached lookups.",
"======== Resolving module './' from 'tests/cases/compiler/node_modules/@types/react/jsx-dev-runtime.d.ts'. ========",
"Resolution for module './' was found in cache from location 'tests/cases/compiler/node_modules/@types/react'.",
"======== Module name './' was successfully resolved to 'tests/cases/compiler/node_modules/@types/react/index.d.ts' with Package ID '@types/react/index.d.ts@0.0.1'. ========",
"======== Module name './' was successfully resolved to 'tests/cases/compiler/node_modules/@types/react/index.d.ts' with Package ID '@types/react/ndex.d.ts@0.0.1'. ========",
"File 'package.json' does not exist.",
"File '/package.json' does not exist.",
"File 'package.json' does not exist according to earlier cached lookups.",
Expand Down
Expand Up @@ -32,30 +32,21 @@ Output::
>> Screen clear
[12:00:29 AM] Starting compilation in watch mode...

File '/users/name/projects/lib-boilerplate/src/package.json' does not exist.
Found 'package.json' at '/users/name/projects/lib-boilerplate/package.json'.
File '/Users/name/projects/lib-boilerplate/src/package.json' does not exist.
Found 'package.json' at '/Users/name/projects/lib-boilerplate/package.json'.
'package.json' does not have a 'typesVersions' field.
File '/users/name/projects/lib-boilerplate/test/package.json' does not exist.
File '/users/name/projects/lib-boilerplate/package.json' exists according to earlier cached lookups.
File '/Users/name/projects/lib-boilerplate/test/package.json' does not exist.
File '/Users/name/projects/lib-boilerplate/package.json' exists according to earlier cached lookups.
======== Resolving module 'lib-boilerplate' from '/Users/name/projects/lib-boilerplate/test/basic.spec.ts'. ========
Module resolution kind is not specified, using 'Node16'.
File '/users/name/projects/lib-boilerplate/test/package.json' does not exist according to earlier cached lookups.
File '/users/name/projects/lib-boilerplate/package.json' exists according to earlier cached lookups.
File '/users/name/projects/lib-boilerplate/src/index.ts' exist - use it as a name resolution result.
Resolving real path for '/users/name/projects/lib-boilerplate/src/index.ts', result '/Users/name/projects/lib-boilerplate/src/index.ts'.
======== Module name 'lib-boilerplate' was successfully resolved to '/users/name/projects/lib-boilerplate/src/index.ts' with Package ID 'lib-boilerplate/src/index.ts@0.0.2'. ========
File '/Users/name/projects/lib-boilerplate/test/package.json' does not exist according to earlier cached lookups.
File '/Users/name/projects/lib-boilerplate/package.json' exists according to earlier cached lookups.
File '/Users/name/projects/lib-boilerplate/src/index.ts' exist - use it as a name resolution result.
Resolving real path for '/Users/name/projects/lib-boilerplate/src/index.ts', result '/Users/name/projects/lib-boilerplate/src/index.ts'.
======== Module name 'lib-boilerplate' was successfully resolved to '/Users/name/projects/lib-boilerplate/src/index.ts' with Package ID 'lib-boilerplate/src/index.ts@0.0.2'. ========
File '/a/lib/package.json' does not exist.
File '/a/package.json' does not exist.
File '/package.json' does not exist.
test/basic.spec.ts:1:23 - error TS1149: File name '/users/name/projects/lib-boilerplate/src/index.ts' differs from already included file name '/Users/name/projects/lib-boilerplate/src/index.ts' only in casing.
The file is in the program because:
Matched by default include pattern '**/*'
Imported via 'lib-boilerplate' from file '/Users/name/projects/lib-boilerplate/test/basic.spec.ts' with packageId 'lib-boilerplate/src/index.ts@0.0.2'
File is ECMAScript module because '/users/name/projects/lib-boilerplate/package.json' has field "type" with value "module"

1 import { thing } from 'lib-boilerplate'
   ~~~~~~~~~~~~~~~~~

../../../../a/lib/lib.es2021.full.d.ts
Default library for target 'es2021'
src/index.ts
Expand All @@ -65,7 +56,7 @@ src/index.ts
test/basic.spec.ts
Matched by default include pattern '**/*'
File is ECMAScript module because 'package.json' has field "type" with value "module"
[[90m12:00:34 AM[0m] Found 1 error. Watching for file changes.
[[90m12:00:34 AM[0m] Found 0 errors. Watching for file changes.



Expand Down
Expand Up @@ -30,11 +30,11 @@ Output::
>> Screen clear
[12:00:23 AM] Starting compilation in watch mode...

Found 'package.json' at '/users/name/projects/web/package.json'.
Found 'package.json' at '/Users/name/projects/web/package.json'.
'package.json' does not have a 'typesVersions' field.
======== Resolving module '@this/package' from '/Users/name/projects/web/index.ts'. ========
Module resolution kind is not specified, using 'NodeNext'.
File '/users/name/projects/web/package.json' exists according to earlier cached lookups.
File '/Users/name/projects/web/package.json' exists according to earlier cached lookups.
File '/Users/name/projects/web/index.ts' exist - use it as a name resolution result.
Resolving real path for '/Users/name/projects/web/index.ts', result '/Users/name/projects/web/index.ts'.
======== Module name '@this/package' was successfully resolved to '/Users/name/projects/web/index.ts'. ========
Expand Down
Expand Up @@ -33,19 +33,19 @@ Output::
>> Screen clear
[12:00:35 AM] Starting compilation in watch mode...

File '/users/name/projects/web/src/package.json' does not exist.
File '/users/name/projects/web/package.json' does not exist.
File '/users/name/projects/package.json' does not exist.
File '/users/name/package.json' does not exist.
File '/users/package.json' does not exist.
File '/Users/name/projects/web/src/package.json' does not exist.
File '/Users/name/projects/web/package.json' does not exist.
File '/Users/name/projects/package.json' does not exist.
File '/Users/name/package.json' does not exist.
File '/Users/package.json' does not exist.
File '/package.json' does not exist.
======== Resolving module 'yargs' from '/Users/name/projects/web/src/bin.ts'. ========
Explicitly specified module resolution kind: 'NodeNext'.
File '/users/name/projects/web/src/package.json' does not exist according to earlier cached lookups.
File '/users/name/projects/web/package.json' does not exist according to earlier cached lookups.
File '/users/name/projects/package.json' does not exist according to earlier cached lookups.
File '/users/name/package.json' does not exist according to earlier cached lookups.
File '/users/package.json' does not exist according to earlier cached lookups.
File '/Users/name/projects/web/src/package.json' does not exist according to earlier cached lookups.
File '/Users/name/projects/web/package.json' does not exist according to earlier cached lookups.
File '/Users/name/projects/package.json' does not exist according to earlier cached lookups.
File '/Users/name/package.json' does not exist according to earlier cached lookups.
File '/Users/package.json' does not exist according to earlier cached lookups.
File '/package.json' does not exist according to earlier cached lookups.
Loading module 'yargs' from 'node_modules' folder, target file type 'TypeScript'.
Directory '/Users/name/projects/web/src/node_modules' does not exist, skipping all lookups in it.
Expand All @@ -57,7 +57,7 @@ Found 'package.json' at '/Users/name/projects/web/node_modules/@types/yargs/pack
File '/Users/name/projects/web/node_modules/@types/yargs/index.d.ts' exist - use it as a name resolution result.
Resolving real path for '/Users/name/projects/web/node_modules/@types/yargs/index.d.ts', result '/Users/name/projects/web/node_modules/@types/yargs/index.d.ts'.
======== Module name 'yargs' was successfully resolved to '/Users/name/projects/web/node_modules/@types/yargs/index.d.ts' with Package ID 'yargs/index.d.ts@17.0.12'. ========
File '/users/name/projects/web/node_modules/@types/yargs/package.json' exists according to earlier cached lookups.
File '/Users/name/projects/web/node_modules/@types/yargs/package.json' exists according to earlier cached lookups.
======== Resolving type reference directive 'yargs', containing file '/Users/name/projects/web/__inferred type names__.ts', root directory '/Users/name/projects/web/node_modules/@types'. ========
Resolving with primary search path '/Users/name/projects/web/node_modules/@types'.
File '/Users/name/projects/web/node_modules/@types/yargs/package.json' exists according to earlier cached lookups.
Expand Down

0 comments on commit e1b1c47

Please sign in to comment.