From 12f1d19fa4fb030f914ca067ebe8553f3562fb74 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Wed, 21 Dec 2016 15:45:37 -0800 Subject: [PATCH] Revert "Refactor the package.json property lookup" This reverts commit 0e16657468d94e151927a3a23406a25d0b9c75f7. --- src/compiler/moduleNameResolver.ts | 42 ++++++++----------- ...lutionWithExtensions_unexpected.trace.json | 4 +- ...utionWithExtensions_unexpected2.trace.json | 1 - 3 files changed, 19 insertions(+), 28 deletions(-) diff --git a/src/compiler/moduleNameResolver.ts b/src/compiler/moduleNameResolver.ts index dd4b5434c2b..391aca96a04 100644 --- a/src/compiler/moduleNameResolver.ts +++ b/src/compiler/moduleNameResolver.ts @@ -67,13 +67,23 @@ namespace ts { } /** Reads from "main" or "types"/"typings" depending on `extensions`. */ - function tryReadPackageJsonMainAndTypes(packageJsonPath: string, baseDirectory: string, state: ModuleResolutionState): {types: string, main: string} { + function tryReadPackageJsonMainOrTypes(extensions: Extensions, packageJsonPath: string, baseDirectory: string, state: ModuleResolutionState): string { const jsonContent = readJson(packageJsonPath, state.host); - return { - types: tryReadFromField("typings") || tryReadFromField("types"), - main: tryReadFromField("main") - }; + switch (extensions) { + case Extensions.DtsOnly: + case Extensions.TypeScript: + return tryReadFromField("typings") || tryReadFromField("types"); + + case Extensions.JavaScript: + if (typeof jsonContent.main === "string") { + if (state.traceEnabled) { + trace(state.host, Diagnostics.No_types_specified_in_package_json_so_returning_main_value_of_0, jsonContent.main); + } + return normalizePath(combinePaths(baseDirectory, jsonContent.main)); + } + return undefined; + } function tryReadFromField(fieldName: string) { if (hasProperty(jsonContent, fieldName)) { @@ -700,21 +710,7 @@ namespace ts { if (state.traceEnabled) { trace(state.host, Diagnostics.Found_package_json_at_0, packageJsonPath); } - - const {types, main} = tryReadPackageJsonMainAndTypes(packageJsonPath, candidate, state); - let mainOrTypesFile; - if (extensions === Extensions.DtsOnly || extensions === Extensions.TypeScript) { - mainOrTypesFile = types; - } - else if (extensions === Extensions.JavaScript) { - mainOrTypesFile = main; - if (main) { - if (state.traceEnabled) { - trace(state.host, Diagnostics.No_types_specified_in_package_json_so_returning_main_value_of_0, main); - } - } - } - + const mainOrTypesFile = tryReadPackageJsonMainOrTypes(extensions, packageJsonPath, candidate, state); if (mainOrTypesFile) { const onlyRecordFailures = !directoryProbablyExists(getDirectoryPath(mainOrTypesFile), state.host); // A package.json "typings" may specify an exact filename, or may choose to omit an extension. @@ -731,10 +727,8 @@ namespace ts { return resolved; } - // A package.json "main" may specify an exact filename, or may choose to omit an extension. - // We tried the ts extensions erlier, now try the js extensions - if (main && extensions === Extensions.JavaScript) { - const resolved = tryAddingExtensions(main, Extensions.JavaScript, failedLookupLocations, onlyRecordFailures, state); + if (extensions === Extensions.JavaScript) { + const resolved = tryAddingExtensions(mainOrTypesFile, Extensions.JavaScript, failedLookupLocations, onlyRecordFailures, state); if (resolved) { return resolved; } diff --git a/tests/baselines/reference/moduleResolutionWithExtensions_unexpected.trace.json b/tests/baselines/reference/moduleResolutionWithExtensions_unexpected.trace.json index f25c3654233..8ee33a5286a 100644 --- a/tests/baselines/reference/moduleResolutionWithExtensions_unexpected.trace.json +++ b/tests/baselines/reference/moduleResolutionWithExtensions_unexpected.trace.json @@ -6,7 +6,6 @@ "File '/node_modules/normalize.css.tsx' does not exist.", "File '/node_modules/normalize.css.d.ts' does not exist.", "Found 'package.json' at '/node_modules/normalize.css/package.json'.", - "'package.json' has 'main' field 'normalize.css' that references '/node_modules/normalize.css/normalize.css'.", "'package.json' does not have a 'types' or 'main' field.", "File '/node_modules/normalize.css/index.ts' does not exist.", "File '/node_modules/normalize.css/index.tsx' does not exist.", @@ -18,8 +17,7 @@ "File '/node_modules/normalize.css.js' does not exist.", "File '/node_modules/normalize.css.jsx' does not exist.", "Found 'package.json' at '/node_modules/normalize.css/package.json'.", - "'package.json' has 'main' field 'normalize.css' that references '/node_modules/normalize.css/normalize.css'.", - "No types specified in 'package.json', so returning 'main' value of '/node_modules/normalize.css/normalize.css'", + "No types specified in 'package.json', so returning 'main' value of 'normalize.css'", "File '/node_modules/normalize.css/normalize.css' exist - use it as a name resolution result.", "File '/node_modules/normalize.css/normalize.css' has an unsupported extension, so skipping it.", "File '/node_modules/normalize.css/normalize.css.ts' does not exist.", diff --git a/tests/baselines/reference/moduleResolutionWithExtensions_unexpected2.trace.json b/tests/baselines/reference/moduleResolutionWithExtensions_unexpected2.trace.json index 57219250f0c..27c9d2243e5 100644 --- a/tests/baselines/reference/moduleResolutionWithExtensions_unexpected2.trace.json +++ b/tests/baselines/reference/moduleResolutionWithExtensions_unexpected2.trace.json @@ -22,7 +22,6 @@ "File '/node_modules/foo.js' does not exist.", "File '/node_modules/foo.jsx' does not exist.", "Found 'package.json' at '/node_modules/foo/package.json'.", - "'package.json' has 'types' field 'foo.js' that references '/node_modules/foo/foo.js'.", "'package.json' does not have a 'types' or 'main' field.", "File '/node_modules/foo/index.js' does not exist.", "File '/node_modules/foo/index.jsx' does not exist.",