From 4257c2fa040b0c3787c392d76de52f8dcd868716 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 23 Feb 2018 15:08:18 -0800 Subject: [PATCH] Resolve the .json file only if module name contains the extension --- src/compiler/checker.ts | 2 +- src/compiler/commandLineParser.ts | 3 +- src/compiler/core.ts | 25 +++----- src/compiler/moduleNameResolver.ts | 7 ++- src/compiler/program.ts | 4 +- src/harness/fourslash.ts | 3 +- .../unittests/reuseProgramStructure.ts | 2 - src/services/jsTyping.ts | 4 +- ...sFileCompilationWithMapFileAsJs.errors.txt | 4 +- ...hMapFileAsJsWithInlineSourceMap.errors.txt | 4 +- ...lutionWithExtensions_unexpected.trace.json | 3 - ...utionWithExtensions_unexpected2.trace.json | 2 - .../packageJsonMain_isNonRecursive.trace.json | 4 -- .../baselines/reference/requireOfJsonFile.js | 4 +- .../reference/requireOfJsonFile.symbols | 2 +- .../reference/requireOfJsonFile.types | 2 +- .../reference/requireOfJsonFileNonRelative.js | 33 +++++++++++ .../requireOfJsonFileNonRelative.symbols | 47 +++++++++++++++ .../requireOfJsonFileNonRelative.types | 58 +++++++++++++++++++ ...FileNonRelativeWithoutExtension.errors.txt | 29 ++++++++++ ...reOfJsonFileNonRelativeWithoutExtension.js | 27 +++++++++ ...sonFileNonRelativeWithoutExtension.symbols | 7 +++ ...fJsonFileNonRelativeWithoutExtension.types | 7 +++ ...NonRelativeWithoutExtensionResolvesToTs.js | 23 ++++++++ ...lativeWithoutExtensionResolvesToTs.symbols | 11 ++++ ...RelativeWithoutExtensionResolvesToTs.types | 11 ++++ .../requireOfJsonFileWithEmptyObject.js | 4 +- .../requireOfJsonFileWithEmptyObject.symbols | 2 +- .../requireOfJsonFileWithEmptyObject.types | 2 +- ...onFileWithEmptyObjectWithErrors.errors.txt | 2 +- ...uireOfJsonFileWithEmptyObjectWithErrors.js | 4 +- ...fJsonFileWithEmptyObjectWithErrors.symbols | 2 +- ...eOfJsonFileWithEmptyObjectWithErrors.types | 2 +- .../requireOfJsonFileWithNoContent.errors.txt | 2 +- .../requireOfJsonFileWithNoContent.js | 4 +- .../requireOfJsonFileWithNoContent.symbols | 2 +- .../requireOfJsonFileWithNoContent.types | 2 +- .../requireOfJsonFileWithoutAllowJs.js | 9 ++- .../requireOfJsonFileWithoutAllowJs.symbols | 16 ++++- .../requireOfJsonFileWithoutAllowJs.types | 46 +++++++++------ ...quireOfJsonFileWithoutExtension.errors.txt | 19 ++++++ .../requireOfJsonFileWithoutExtension.js | 32 ++++++++++ .../requireOfJsonFileWithoutExtension.symbols | 34 +++++++++++ .../requireOfJsonFileWithoutExtension.types | 45 ++++++++++++++ ...eOfJsonFileWithoutExtensionResolvesToTs.js | 44 ++++++++++++++ ...onFileWithoutExtensionResolvesToTs.symbols | 44 ++++++++++++++ ...JsonFileWithoutExtensionResolvesToTs.types | 53 +++++++++++++++++ ...mMultipleNodeModulesDirectories.trace.json | 6 -- ...romNodeModulesInParentDirectory.trace.json | 1 - tests/cases/compiler/requireOfJsonFile.ts | 2 +- .../compiler/requireOfJsonFileNonRelative.ts | 24 ++++++++ ...reOfJsonFileNonRelativeWithoutExtension.ts | 25 ++++++++ ...NonRelativeWithoutExtensionResolvesToTs.ts | 16 +++++ .../requireOfJsonFileWithEmptyObject.ts | 2 +- ...uireOfJsonFileWithEmptyObjectWithErrors.ts | 2 +- .../requireOfJsonFileWithNoContent.ts | 2 +- .../requireOfJsonFileWithoutAllowJs.ts | 2 +- .../requireOfJsonFileWithoutExtension.ts | 18 ++++++ ...eOfJsonFileWithoutExtensionResolvesToTs.ts | 27 +++++++++ 59 files changed, 733 insertions(+), 92 deletions(-) create mode 100644 tests/baselines/reference/requireOfJsonFileNonRelative.js create mode 100644 tests/baselines/reference/requireOfJsonFileNonRelative.symbols create mode 100644 tests/baselines/reference/requireOfJsonFileNonRelative.types create mode 100644 tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtension.errors.txt create mode 100644 tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtension.js create mode 100644 tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtension.symbols create mode 100644 tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtension.types create mode 100644 tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.js create mode 100644 tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.symbols create mode 100644 tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.types create mode 100644 tests/baselines/reference/requireOfJsonFileWithoutExtension.errors.txt create mode 100644 tests/baselines/reference/requireOfJsonFileWithoutExtension.js create mode 100644 tests/baselines/reference/requireOfJsonFileWithoutExtension.symbols create mode 100644 tests/baselines/reference/requireOfJsonFileWithoutExtension.types create mode 100644 tests/baselines/reference/requireOfJsonFileWithoutExtensionResolvesToTs.js create mode 100644 tests/baselines/reference/requireOfJsonFileWithoutExtensionResolvesToTs.symbols create mode 100644 tests/baselines/reference/requireOfJsonFileWithoutExtensionResolvesToTs.types create mode 100644 tests/cases/compiler/requireOfJsonFileNonRelative.ts create mode 100644 tests/cases/compiler/requireOfJsonFileNonRelativeWithoutExtension.ts create mode 100644 tests/cases/compiler/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.ts create mode 100644 tests/cases/compiler/requireOfJsonFileWithoutExtension.ts create mode 100644 tests/cases/compiler/requireOfJsonFileWithoutExtensionResolvesToTs.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 5772e1a2241..977dcc7a8fc 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2084,7 +2084,7 @@ namespace ts { } // May be an untyped module. If so, ignore resolutionDiagnostic. - if (resolvedModule && !extensionIsTypeScript(resolvedModule.extension) && resolutionDiagnostic === undefined || resolutionDiagnostic === Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type) { + if (resolvedModule && !resolutionExtensionIsTypeScriptOrJson(resolvedModule.extension) && resolutionDiagnostic === undefined || resolutionDiagnostic === Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type) { if (isForAugmentation) { const diag = Diagnostics.Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented; error(errorNode, diag, moduleReference, resolvedModule.resolvedFileName); diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index c8e7bf8d19f..eddf40cc94b 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -2044,8 +2044,7 @@ namespace ts { // Rather than requery this for each file and filespec, we query the supported extensions // once and store it on the expansion context. - // When computing file names, do not include json files. Use only module resolution or explicit includes for them - const supportedExtensions = getSupportedExtensions(options, extraFileExtensions, /*excludeJson*/ true); + const supportedExtensions = getSupportedExtensions(options, extraFileExtensions); // Literal files are always included verbatim. An "include" or "exclude" specification cannot // remove a literal file. diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 52358737dcf..00a28dbbbcd 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -2674,21 +2674,14 @@ namespace ts { export const supportedTypescriptExtensionsForExtractExtension: ReadonlyArray = [Extension.Dts, Extension.Ts, Extension.Tsx]; export const supportedJavascriptExtensions: ReadonlyArray = [Extension.Js, Extension.Jsx]; const allSupportedExtensions: ReadonlyArray = [...supportedTypeScriptExtensions, ...supportedJavascriptExtensions]; - let allSupportedExtensionsIncludingJson: ReadonlyArray | undefined; - function getAllSupportedExtensionsIncludingJson() { - return allSupportedExtensionsIncludingJson || (allSupportedExtensionsIncludingJson = [...allSupportedExtensions, Extension.Json]); - } - export function getSupportedExtensions(options?: CompilerOptions, extraFileExtensions?: ReadonlyArray, excludeJson?: boolean): ReadonlyArray { + export function getSupportedExtensions(options?: CompilerOptions, extraFileExtensions?: ReadonlyArray): ReadonlyArray { const needAllExtensions = options && options.allowJs; - const useJsonExtension = needAllExtensions && !excludeJson && getEmitModuleResolutionKind(options) === ModuleResolutionKind.NodeJs; if (!extraFileExtensions || extraFileExtensions.length === 0 || !needAllExtensions) { - return useJsonExtension ? - getAllSupportedExtensionsIncludingJson() : - needAllExtensions ? allSupportedExtensions : supportedTypeScriptExtensions; + return needAllExtensions ? allSupportedExtensions : supportedTypeScriptExtensions; } return deduplicate( - [...(useJsonExtension ? getAllSupportedExtensionsIncludingJson() : allSupportedExtensions), ...extraFileExtensions.map(e => e.extension)], + [...allSupportedExtensions, ...extraFileExtensions.map(e => e.extension)], equateStringsCaseSensitive, compareStringsCaseSensitive ); @@ -2698,10 +2691,6 @@ namespace ts { return forEach(supportedJavascriptExtensions, extension => fileExtensionIs(fileName, extension)); } - export function hasJavaScriptOrJsonFileExtension(fileName: string) { - return hasJavaScriptFileExtension(fileName) || fileExtensionIs(fileName, Extension.Json); - } - export function hasTypeScriptFileExtension(fileName: string) { return forEach(supportedTypeScriptExtensions, extension => fileExtensionIs(fileName, extension)); } @@ -3102,6 +3091,10 @@ namespace ts { return ext === Extension.Ts || ext === Extension.Tsx || ext === Extension.Dts; } + export function resolutionExtensionIsTypeScriptOrJson(ext: Extension) { + return extensionIsTypeScript(ext) || ext === Extension.Json; + } + /** * Gets the extension from a path. * Path must have a valid extension. @@ -3119,9 +3112,7 @@ namespace ts { } export function tryGetExtensionFromPath(path: string): Extension | undefined { - return find(supportedTypescriptExtensionsForExtractExtension, e => fileExtensionIs(path, e)) || - find(supportedJavascriptExtensions, e => fileExtensionIs(path, e)) || - (fileExtensionIs(path, Extension.Json) ? Extension.Json : undefined); + return find(supportedTypescriptExtensionsForExtractExtension, e => fileExtensionIs(path, e)) || find(supportedJavascriptExtensions, e => fileExtensionIs(path, e)); } // Retrieves any string from the final "." onwards from a base file name. diff --git a/src/compiler/moduleNameResolver.ts b/src/compiler/moduleNameResolver.ts index f1d97b68404..7f2578e16df 100644 --- a/src/compiler/moduleNameResolver.ts +++ b/src/compiler/moduleNameResolver.ts @@ -882,6 +882,11 @@ namespace ts { * in cases when we know upfront that all load attempts will fail (because containing folder does not exists) however we still need to record all failed lookup locations. */ function loadModuleFromFile(extensions: Extensions, candidate: string, failedLookupLocations: Push, onlyRecordFailures: boolean, state: ModuleResolutionState): PathAndExtension | undefined { + if (extensions === Extensions.Json) { + const extensionLess = tryRemoveExtension(candidate, Extension.Json); + return extensionLess && tryAddingExtensions(extensionLess, extensions, failedLookupLocations, onlyRecordFailures, state); + } + // First, try adding an extension. An import of "foo" could be matched by a file "foo.ts", or "foo.js" by "foo.js.ts" const resolvedByAddingExtension = tryAddingExtensions(candidate, extensions, failedLookupLocations, onlyRecordFailures, state); if (resolvedByAddingExtension) { @@ -890,7 +895,7 @@ namespace ts { // If that didn't work, try stripping a ".js" or ".jsx" extension and replacing it with a TypeScript one; // e.g. "./foo.js" can be matched by "./foo.ts" or "./foo.d.ts" - if (hasJavaScriptOrJsonFileExtension(candidate)) { + if (hasJavaScriptFileExtension(candidate)) { const extensionless = removeFileExtension(candidate); if (state.traceEnabled) { const extension = candidate.substring(extensionless.length); diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 362aa258bb8..d5664e98fce 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1975,7 +1975,7 @@ namespace ts { } const isFromNodeModulesSearch = resolution.isExternalLibraryImport; - const isJsFile = !extensionIsTypeScript(resolution.extension); + const isJsFile = !resolutionExtensionIsTypeScriptOrJson(resolution.extension); const isJsFileFromNodeModules = isFromNodeModulesSearch && isJsFile; const resolvedFileName = resolution.resolvedFileName; @@ -2405,6 +2405,7 @@ namespace ts { switch (extension) { case Extension.Ts: case Extension.Dts: + case Extension.Json: // These are always allowed. return undefined; case Extension.Tsx: @@ -2412,7 +2413,6 @@ namespace ts { case Extension.Jsx: return needJsx() || needAllowJs(); case Extension.Js: - case Extension.Json: return needAllowJs(); } diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 1b849f36b3a..7fdbbbc9640 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -511,9 +511,8 @@ namespace FourSlash { } private getAllDiagnostics(): ts.Diagnostic[] { - const options = this.languageService.getProgram().getCompilerOptions(); return ts.flatMap(this.languageServiceAdapterHost.getFilenames(), fileName => - ts.fileExtensionIsOneOf(fileName, ts.getSupportedExtensions(options)) ? this.getDiagnostics(fileName) : []); + ts.isAnySupportedFileExtension(fileName) ? this.getDiagnostics(fileName) : []); } public verifyErrorExistsAfterMarker(markerName: string, shouldExist: boolean, after: boolean) { diff --git a/src/harness/unittests/reuseProgramStructure.ts b/src/harness/unittests/reuseProgramStructure.ts index c43fe2f5528..72528e7c71b 100644 --- a/src/harness/unittests/reuseProgramStructure.ts +++ b/src/harness/unittests/reuseProgramStructure.ts @@ -473,8 +473,6 @@ namespace ts { "File 'node_modules/a/index.jsx' does not exist.", "Loading module 'a' from 'node_modules' folder, target file type 'Json'.", "File 'node_modules/a/package.json' does not exist.", - "File 'node_modules/a.json' does not exist.", - "File 'node_modules/a/index.json' does not exist.", "======== Module name 'a' was not resolved. ========" ], "initialProgram: execute module resolution normally."); diff --git a/src/services/jsTyping.ts b/src/services/jsTyping.ts index a32be9802c2..bd6c2e5cb9f 100644 --- a/src/services/jsTyping.ts +++ b/src/services/jsTyping.ts @@ -98,7 +98,7 @@ namespace ts.JsTyping { // Only infer typings for .js and .jsx files fileNames = mapDefined(fileNames, fileName => { const path = normalizePath(fileName); - if (hasJavaScriptOrJsonFileExtension(path)) { + if (hasJavaScriptFileExtension(path)) { return path; } }); @@ -193,7 +193,7 @@ namespace ts.JsTyping { */ function getTypingNamesFromSourceFileNames(fileNames: string[]) { const fromFileNames = mapDefined(fileNames, j => { - if (!hasJavaScriptOrJsonFileExtension(j)) return undefined; + if (!hasJavaScriptFileExtension(j)) return undefined; const inferredTypingName = removeFileExtension(getBaseFileName(j.toLowerCase())); const cleanedTypingName = removeMinAndVersionNumbers(inferredTypingName); diff --git a/tests/baselines/reference/jsFileCompilationWithMapFileAsJs.errors.txt b/tests/baselines/reference/jsFileCompilationWithMapFileAsJs.errors.txt index 5e0ff050c12..f9d88bd2727 100644 --- a/tests/baselines/reference/jsFileCompilationWithMapFileAsJs.errors.txt +++ b/tests/baselines/reference/jsFileCompilationWithMapFileAsJs.errors.txt @@ -1,11 +1,11 @@ error TS5055: Cannot write file 'tests/cases/compiler/b.js' because it would overwrite input file. Adding a tsconfig.json file will help organize projects that contain both TypeScript and JavaScript files. Learn more at https://aka.ms/tsconfig. -error TS6054: File 'tests/cases/compiler/b.js.map' has unsupported extension. The only supported extensions are '.ts', '.tsx', '.d.ts', '.js', '.jsx', '.json'. +error TS6054: File 'tests/cases/compiler/b.js.map' has unsupported extension. The only supported extensions are '.ts', '.tsx', '.d.ts', '.js', '.jsx'. !!! error TS5055: Cannot write file 'tests/cases/compiler/b.js' because it would overwrite input file. !!! error TS5055: Adding a tsconfig.json file will help organize projects that contain both TypeScript and JavaScript files. Learn more at https://aka.ms/tsconfig. -!!! error TS6054: File 'tests/cases/compiler/b.js.map' has unsupported extension. The only supported extensions are '.ts', '.tsx', '.d.ts', '.js', '.jsx', '.json'. +!!! error TS6054: File 'tests/cases/compiler/b.js.map' has unsupported extension. The only supported extensions are '.ts', '.tsx', '.d.ts', '.js', '.jsx'. ==== tests/cases/compiler/a.ts (0 errors) ==== class c { } diff --git a/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithInlineSourceMap.errors.txt b/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithInlineSourceMap.errors.txt index 5e0ff050c12..f9d88bd2727 100644 --- a/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithInlineSourceMap.errors.txt +++ b/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithInlineSourceMap.errors.txt @@ -1,11 +1,11 @@ error TS5055: Cannot write file 'tests/cases/compiler/b.js' because it would overwrite input file. Adding a tsconfig.json file will help organize projects that contain both TypeScript and JavaScript files. Learn more at https://aka.ms/tsconfig. -error TS6054: File 'tests/cases/compiler/b.js.map' has unsupported extension. The only supported extensions are '.ts', '.tsx', '.d.ts', '.js', '.jsx', '.json'. +error TS6054: File 'tests/cases/compiler/b.js.map' has unsupported extension. The only supported extensions are '.ts', '.tsx', '.d.ts', '.js', '.jsx'. !!! error TS5055: Cannot write file 'tests/cases/compiler/b.js' because it would overwrite input file. !!! error TS5055: Adding a tsconfig.json file will help organize projects that contain both TypeScript and JavaScript files. Learn more at https://aka.ms/tsconfig. -!!! error TS6054: File 'tests/cases/compiler/b.js.map' has unsupported extension. The only supported extensions are '.ts', '.tsx', '.d.ts', '.js', '.jsx', '.json'. +!!! error TS6054: File 'tests/cases/compiler/b.js.map' has unsupported extension. The only supported extensions are '.ts', '.tsx', '.d.ts', '.js', '.jsx'. ==== tests/cases/compiler/a.ts (0 errors) ==== class c { } diff --git a/tests/baselines/reference/moduleResolutionWithExtensions_unexpected.trace.json b/tests/baselines/reference/moduleResolutionWithExtensions_unexpected.trace.json index f2cbd45826d..b5d62eb0a25 100644 --- a/tests/baselines/reference/moduleResolutionWithExtensions_unexpected.trace.json +++ b/tests/baselines/reference/moduleResolutionWithExtensions_unexpected.trace.json @@ -36,13 +36,10 @@ "'package.json' does not have a 'types' field.", "'package.json' has 'main' field 'normalize.css' that references '/node_modules/normalize.css/normalize.css'.", "Found 'package.json' at '/node_modules/normalize.css/package.json'.", - "File '/node_modules/normalize.css.json' does not exist.", "'package.json' has 'main' field 'normalize.css' that references '/node_modules/normalize.css/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.", "Loading module as file / folder, candidate module location '/node_modules/normalize.css/normalize.css', target file type 'Json'.", - "File '/node_modules/normalize.css/normalize.css.json' does not exist.", "Directory '/node_modules/normalize.css/normalize.css' does not exist, skipping all lookups in it.", - "File '/node_modules/normalize.css/index.json' does not exist.", "======== Module name 'normalize.css' was not resolved. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/moduleResolutionWithExtensions_unexpected2.trace.json b/tests/baselines/reference/moduleResolutionWithExtensions_unexpected2.trace.json index 3dd0a7861e3..36ef8252cc7 100644 --- a/tests/baselines/reference/moduleResolutionWithExtensions_unexpected2.trace.json +++ b/tests/baselines/reference/moduleResolutionWithExtensions_unexpected2.trace.json @@ -38,8 +38,6 @@ "'package.json' does not have a 'typings' field.", "'package.json' has 'types' field 'foo.js' that references '/node_modules/foo/foo.js'.", "Found 'package.json' at '/node_modules/foo/package.json'.", - "File '/node_modules/foo.json' does not exist.", "'package.json' does not have a 'main' field.", - "File '/node_modules/foo/index.json' does not exist.", "======== Module name 'foo' was not resolved. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/packageJsonMain_isNonRecursive.trace.json b/tests/baselines/reference/packageJsonMain_isNonRecursive.trace.json index 653f224b43a..2ee886f24c7 100644 --- a/tests/baselines/reference/packageJsonMain_isNonRecursive.trace.json +++ b/tests/baselines/reference/packageJsonMain_isNonRecursive.trace.json @@ -36,12 +36,8 @@ "'package.json' does not have a 'types' field.", "'package.json' has 'main' field 'oof' that references '/node_modules/foo/oof'.", "Found 'package.json' at '/node_modules/foo/package.json'.", - "File '/node_modules/foo.json' does not exist.", "'package.json' has 'main' field 'oof' that references '/node_modules/foo/oof'.", "File '/node_modules/foo/oof' does not exist.", "Loading module as file / folder, candidate module location '/node_modules/foo/oof', target file type 'Json'.", - "File '/node_modules/foo/oof.json' does not exist.", - "File '/node_modules/foo/oof/index.json' does not exist.", - "File '/node_modules/foo/index.json' does not exist.", "======== Module name 'foo' was not resolved. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/requireOfJsonFile.js b/tests/baselines/reference/requireOfJsonFile.js index 6d6498bf020..ee6cf710045 100644 --- a/tests/baselines/reference/requireOfJsonFile.js +++ b/tests/baselines/reference/requireOfJsonFile.js @@ -1,7 +1,7 @@ //// [tests/cases/compiler/requireOfJsonFile.ts] //// //// [file1.ts] -import b1 = require('./b'); +import b1 = require('./b.json'); let x = b1.a; import b2 = require('./b.json'); if (x) { @@ -23,7 +23,7 @@ if (x) { //// [file1.js] "use strict"; exports.__esModule = true; -var b1 = require("./b"); +var b1 = require("./b.json"); var x = b1.a; var b2 = require("./b.json"); if (x) { diff --git a/tests/baselines/reference/requireOfJsonFile.symbols b/tests/baselines/reference/requireOfJsonFile.symbols index 803c02e016a..a8f82b6b145 100644 --- a/tests/baselines/reference/requireOfJsonFile.symbols +++ b/tests/baselines/reference/requireOfJsonFile.symbols @@ -1,5 +1,5 @@ === tests/cases/compiler/file1.ts === -import b1 = require('./b'); +import b1 = require('./b.json'); >b1 : Symbol(b1, Decl(file1.ts, 0, 0)) let x = b1.a; diff --git a/tests/baselines/reference/requireOfJsonFile.types b/tests/baselines/reference/requireOfJsonFile.types index 7911e2eb1ab..c718c429408 100644 --- a/tests/baselines/reference/requireOfJsonFile.types +++ b/tests/baselines/reference/requireOfJsonFile.types @@ -1,5 +1,5 @@ === tests/cases/compiler/file1.ts === -import b1 = require('./b'); +import b1 = require('./b.json'); >b1 : { "a": boolean; "b": string; } let x = b1.a; diff --git a/tests/baselines/reference/requireOfJsonFileNonRelative.js b/tests/baselines/reference/requireOfJsonFileNonRelative.js new file mode 100644 index 00000000000..0b78328c707 --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileNonRelative.js @@ -0,0 +1,33 @@ +//// [tests/cases/compiler/requireOfJsonFileNonRelative.ts] //// + +//// [file1.ts] +import b1 = require('b.json'); +let x = b1.a; +import b2 = require('c.json'); +if (x) { + let b = b2.b; + x = (b1.b === b); +} + +//// [b.json] +{ + "a": true, + "b": "hello" +} + +//// [c.json] +{ + "a": true, + "b": "hello" +} + +//// [file1.js] +"use strict"; +exports.__esModule = true; +var b1 = require("b.json"); +var x = b1.a; +var b2 = require("c.json"); +if (x) { + var b = b2.b; + x = (b1.b === b); +} diff --git a/tests/baselines/reference/requireOfJsonFileNonRelative.symbols b/tests/baselines/reference/requireOfJsonFileNonRelative.symbols new file mode 100644 index 00000000000..4a381206204 --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileNonRelative.symbols @@ -0,0 +1,47 @@ +=== /src/projects/file1.ts === +import b1 = require('b.json'); +>b1 : Symbol(b1, Decl(file1.ts, 0, 0)) + +let x = b1.a; +>x : Symbol(x, Decl(file1.ts, 1, 3)) +>b1.a : Symbol("a", Decl(b.json, 0, 1)) +>b1 : Symbol(b1, Decl(file1.ts, 0, 0)) +>a : Symbol("a", Decl(b.json, 0, 1)) + +import b2 = require('c.json'); +>b2 : Symbol(b2, Decl(file1.ts, 1, 13)) + +if (x) { +>x : Symbol(x, Decl(file1.ts, 1, 3)) + + let b = b2.b; +>b : Symbol(b, Decl(file1.ts, 4, 7)) +>b2.b : Symbol("b", Decl(c.json, 1, 14)) +>b2 : Symbol(b2, Decl(file1.ts, 1, 13)) +>b : Symbol("b", Decl(c.json, 1, 14)) + + x = (b1.b === b); +>x : Symbol(x, Decl(file1.ts, 1, 3)) +>b1.b : Symbol("b", Decl(b.json, 1, 14)) +>b1 : Symbol(b1, Decl(file1.ts, 0, 0)) +>b : Symbol("b", Decl(b.json, 1, 14)) +>b : Symbol(b, Decl(file1.ts, 4, 7)) +} + +=== /src/projects/node_modules/b.json === +{ + "a": true, +>"a" : Symbol("a", Decl(b.json, 0, 1)) + + "b": "hello" +>"b" : Symbol("b", Decl(b.json, 1, 14)) +} + +=== /src/node_modules/c.json === +{ + "a": true, +>"a" : Symbol("a", Decl(c.json, 0, 1)) + + "b": "hello" +>"b" : Symbol("b", Decl(c.json, 1, 14)) +} diff --git a/tests/baselines/reference/requireOfJsonFileNonRelative.types b/tests/baselines/reference/requireOfJsonFileNonRelative.types new file mode 100644 index 00000000000..8f15e2282d9 --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileNonRelative.types @@ -0,0 +1,58 @@ +=== /src/projects/file1.ts === +import b1 = require('b.json'); +>b1 : { "a": boolean; "b": string; } + +let x = b1.a; +>x : boolean +>b1.a : boolean +>b1 : { "a": boolean; "b": string; } +>a : boolean + +import b2 = require('c.json'); +>b2 : { "a": boolean; "b": string; } + +if (x) { +>x : boolean + + let b = b2.b; +>b : string +>b2.b : string +>b2 : { "a": boolean; "b": string; } +>b : string + + x = (b1.b === b); +>x = (b1.b === b) : boolean +>x : boolean +>(b1.b === b) : boolean +>b1.b === b : boolean +>b1.b : string +>b1 : { "a": boolean; "b": string; } +>b : string +>b : string +} + +=== /src/projects/node_modules/b.json === +{ +>{ "a": true, "b": "hello"} : { "a": boolean; "b": string; } + + "a": true, +>"a" : boolean +>true : true + + "b": "hello" +>"b" : string +>"hello" : "hello" +} + +=== /src/node_modules/c.json === +{ +>{ "a": true, "b": "hello"} : { "a": boolean; "b": string; } + + "a": true, +>"a" : boolean +>true : true + + "b": "hello" +>"b" : string +>"hello" : "hello" +} diff --git a/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtension.errors.txt b/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtension.errors.txt new file mode 100644 index 00000000000..13660f8b836 --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtension.errors.txt @@ -0,0 +1,29 @@ +/src/projects/file1.ts(1,20): error TS2307: Cannot find module 'd.json'. +/src/projects/file1.ts(2,20): error TS2307: Cannot find module 'e'. + + +==== /src/projects/file1.ts (2 errors) ==== + import d = require("d.json"); // Should fail + ~~~~~~~~ +!!! error TS2307: Cannot find module 'd.json'. + import e = require("e"); // Should fail + ~~~ +!!! error TS2307: Cannot find module 'e'. + +==== /src/projects/node_modules/b.json (0 errors) ==== + { + "a": true, + "b": "hello" + } + +==== /src/projects/node_modules/e.json (0 errors) ==== + { + "a": true, + "b": "hello" + } + +==== /src/node_modules/c.json (0 errors) ==== + { + "a": true, + "b": "hello" + } \ No newline at end of file diff --git a/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtension.js b/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtension.js new file mode 100644 index 00000000000..c476d43efc1 --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtension.js @@ -0,0 +1,27 @@ +//// [tests/cases/compiler/requireOfJsonFileNonRelativeWithoutExtension.ts] //// + +//// [file1.ts] +import d = require("d.json"); // Should fail +import e = require("e"); // Should fail + +//// [b.json] +{ + "a": true, + "b": "hello" +} + +//// [e.json] +{ + "a": true, + "b": "hello" +} + +//// [c.json] +{ + "a": true, + "b": "hello" +} + +//// [file1.js] +"use strict"; +exports.__esModule = true; diff --git a/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtension.symbols b/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtension.symbols new file mode 100644 index 00000000000..0eedb44c3dc --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtension.symbols @@ -0,0 +1,7 @@ +=== /src/projects/file1.ts === +import d = require("d.json"); // Should fail +>d : Symbol(d, Decl(file1.ts, 0, 0)) + +import e = require("e"); // Should fail +>e : Symbol(e, Decl(file1.ts, 0, 29)) + diff --git a/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtension.types b/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtension.types new file mode 100644 index 00000000000..ec891ba6280 --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtension.types @@ -0,0 +1,7 @@ +=== /src/projects/file1.ts === +import d = require("d.json"); // Should fail +>d : any + +import e = require("e"); // Should fail +>e : any + diff --git a/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.js b/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.js new file mode 100644 index 00000000000..b4b8a449b2e --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.js @@ -0,0 +1,23 @@ +//// [tests/cases/compiler/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.ts] //// + +//// [file1.ts] +import f = require("f"); // should work to f.ts +let fnumber: number = f; + +//// [f.json] +{ + "a": true, + "b": "hello" +} + +//// [f.ts] +export = 10; + +//// [f.js] +"use strict"; +module.exports = 10; +//// [file1.js] +"use strict"; +exports.__esModule = true; +var f = require("f"); // should work to f.ts +var fnumber = f; diff --git a/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.symbols b/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.symbols new file mode 100644 index 00000000000..cf903d2fcfb --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.symbols @@ -0,0 +1,11 @@ +=== /src/projects/file1.ts === +import f = require("f"); // should work to f.ts +>f : Symbol(f, Decl(file1.ts, 0, 0)) + +let fnumber: number = f; +>fnumber : Symbol(fnumber, Decl(file1.ts, 1, 3)) +>f : Symbol(f, Decl(file1.ts, 0, 0)) + +=== /src/node_modules/f.ts === +export = 10; +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.types b/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.types new file mode 100644 index 00000000000..75c2db9bae9 --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.types @@ -0,0 +1,11 @@ +=== /src/projects/file1.ts === +import f = require("f"); // should work to f.ts +>f : 10 + +let fnumber: number = f; +>fnumber : number +>f : 10 + +=== /src/node_modules/f.ts === +export = 10; +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/requireOfJsonFileWithEmptyObject.js b/tests/baselines/reference/requireOfJsonFileWithEmptyObject.js index 12c912195d4..851a914d30e 100644 --- a/tests/baselines/reference/requireOfJsonFileWithEmptyObject.js +++ b/tests/baselines/reference/requireOfJsonFileWithEmptyObject.js @@ -1,7 +1,7 @@ //// [tests/cases/compiler/requireOfJsonFileWithEmptyObject.ts] //// //// [file1.ts] -import b1 = require('./b'); +import b1 = require('./b.json'); let x = b1; import b2 = require('./b.json'); if (x) { @@ -17,7 +17,7 @@ if (x) { //// [file1.js] "use strict"; exports.__esModule = true; -var b1 = require("./b"); +var b1 = require("./b.json"); var x = b1; var b2 = require("./b.json"); if (x) { diff --git a/tests/baselines/reference/requireOfJsonFileWithEmptyObject.symbols b/tests/baselines/reference/requireOfJsonFileWithEmptyObject.symbols index 4edf64ef720..84f4cc98c5b 100644 --- a/tests/baselines/reference/requireOfJsonFileWithEmptyObject.symbols +++ b/tests/baselines/reference/requireOfJsonFileWithEmptyObject.symbols @@ -1,5 +1,5 @@ === tests/cases/compiler/file1.ts === -import b1 = require('./b'); +import b1 = require('./b.json'); >b1 : Symbol(b1, Decl(file1.ts, 0, 0)) let x = b1; diff --git a/tests/baselines/reference/requireOfJsonFileWithEmptyObject.types b/tests/baselines/reference/requireOfJsonFileWithEmptyObject.types index 6a8bad1793b..5cbc36a7e54 100644 --- a/tests/baselines/reference/requireOfJsonFileWithEmptyObject.types +++ b/tests/baselines/reference/requireOfJsonFileWithEmptyObject.types @@ -1,5 +1,5 @@ === tests/cases/compiler/file1.ts === -import b1 = require('./b'); +import b1 = require('./b.json'); >b1 : {} let x = b1; diff --git a/tests/baselines/reference/requireOfJsonFileWithEmptyObjectWithErrors.errors.txt b/tests/baselines/reference/requireOfJsonFileWithEmptyObjectWithErrors.errors.txt index 258c4dd60b0..0f10e81f814 100644 --- a/tests/baselines/reference/requireOfJsonFileWithEmptyObjectWithErrors.errors.txt +++ b/tests/baselines/reference/requireOfJsonFileWithEmptyObjectWithErrors.errors.txt @@ -4,7 +4,7 @@ tests/cases/compiler/file1.ts(6,13): error TS2339: Property 'b' does not exist o ==== tests/cases/compiler/file1.ts (3 errors) ==== - import b1 = require('./b'); + import b1 = require('./b.json'); let x = b1.a; ~ !!! error TS2339: Property 'a' does not exist on type '{}'. diff --git a/tests/baselines/reference/requireOfJsonFileWithEmptyObjectWithErrors.js b/tests/baselines/reference/requireOfJsonFileWithEmptyObjectWithErrors.js index 996f0d4d2db..57122096da0 100644 --- a/tests/baselines/reference/requireOfJsonFileWithEmptyObjectWithErrors.js +++ b/tests/baselines/reference/requireOfJsonFileWithEmptyObjectWithErrors.js @@ -1,7 +1,7 @@ //// [tests/cases/compiler/requireOfJsonFileWithEmptyObjectWithErrors.ts] //// //// [file1.ts] -import b1 = require('./b'); +import b1 = require('./b.json'); let x = b1.a; import b2 = require('./b.json'); if (x) { @@ -18,7 +18,7 @@ if (x) { //// [file1.js] "use strict"; exports.__esModule = true; -var b1 = require("./b"); +var b1 = require("./b.json"); var x = b1.a; var b2 = require("./b.json"); if (x) { diff --git a/tests/baselines/reference/requireOfJsonFileWithEmptyObjectWithErrors.symbols b/tests/baselines/reference/requireOfJsonFileWithEmptyObjectWithErrors.symbols index b9edfe487ad..819d0c1aabd 100644 --- a/tests/baselines/reference/requireOfJsonFileWithEmptyObjectWithErrors.symbols +++ b/tests/baselines/reference/requireOfJsonFileWithEmptyObjectWithErrors.symbols @@ -1,5 +1,5 @@ === tests/cases/compiler/file1.ts === -import b1 = require('./b'); +import b1 = require('./b.json'); >b1 : Symbol(b1, Decl(file1.ts, 0, 0)) let x = b1.a; diff --git a/tests/baselines/reference/requireOfJsonFileWithEmptyObjectWithErrors.types b/tests/baselines/reference/requireOfJsonFileWithEmptyObjectWithErrors.types index 510acba9357..b0eb30cd307 100644 --- a/tests/baselines/reference/requireOfJsonFileWithEmptyObjectWithErrors.types +++ b/tests/baselines/reference/requireOfJsonFileWithEmptyObjectWithErrors.types @@ -1,5 +1,5 @@ === tests/cases/compiler/file1.ts === -import b1 = require('./b'); +import b1 = require('./b.json'); >b1 : {} let x = b1.a; diff --git a/tests/baselines/reference/requireOfJsonFileWithNoContent.errors.txt b/tests/baselines/reference/requireOfJsonFileWithNoContent.errors.txt index c1d050bdaad..e08b474466c 100644 --- a/tests/baselines/reference/requireOfJsonFileWithNoContent.errors.txt +++ b/tests/baselines/reference/requireOfJsonFileWithNoContent.errors.txt @@ -4,7 +4,7 @@ tests/cases/compiler/file1.ts(6,13): error TS2339: Property 'b' does not exist o ==== tests/cases/compiler/file1.ts (3 errors) ==== - import b1 = require('./b'); + import b1 = require('./b.json'); let x = b1.a; ~ !!! error TS2339: Property 'a' does not exist on type '{}'. diff --git a/tests/baselines/reference/requireOfJsonFileWithNoContent.js b/tests/baselines/reference/requireOfJsonFileWithNoContent.js index 2deed5a2d43..754e616ae49 100644 --- a/tests/baselines/reference/requireOfJsonFileWithNoContent.js +++ b/tests/baselines/reference/requireOfJsonFileWithNoContent.js @@ -1,7 +1,7 @@ //// [tests/cases/compiler/requireOfJsonFileWithNoContent.ts] //// //// [file1.ts] -import b1 = require('./b'); +import b1 = require('./b.json'); let x = b1.a; import b2 = require('./b.json'); if (x) { @@ -16,7 +16,7 @@ if (x) { //// [file1.js] "use strict"; exports.__esModule = true; -var b1 = require("./b"); +var b1 = require("./b.json"); var x = b1.a; var b2 = require("./b.json"); if (x) { diff --git a/tests/baselines/reference/requireOfJsonFileWithNoContent.symbols b/tests/baselines/reference/requireOfJsonFileWithNoContent.symbols index 6a7a1ebbc51..07d1466a57d 100644 --- a/tests/baselines/reference/requireOfJsonFileWithNoContent.symbols +++ b/tests/baselines/reference/requireOfJsonFileWithNoContent.symbols @@ -1,5 +1,5 @@ === tests/cases/compiler/file1.ts === -import b1 = require('./b'); +import b1 = require('./b.json'); >b1 : Symbol(b1, Decl(file1.ts, 0, 0)) let x = b1.a; diff --git a/tests/baselines/reference/requireOfJsonFileWithNoContent.types b/tests/baselines/reference/requireOfJsonFileWithNoContent.types index 5ead1cfc834..e23845e073e 100644 --- a/tests/baselines/reference/requireOfJsonFileWithNoContent.types +++ b/tests/baselines/reference/requireOfJsonFileWithNoContent.types @@ -1,5 +1,5 @@ === tests/cases/compiler/file1.ts === -import b1 = require('./b'); +import b1 = require('./b.json'); >b1 : {} let x = b1.a; diff --git a/tests/baselines/reference/requireOfJsonFileWithoutAllowJs.js b/tests/baselines/reference/requireOfJsonFileWithoutAllowJs.js index ab52cbb1494..eadcd2532f9 100644 --- a/tests/baselines/reference/requireOfJsonFileWithoutAllowJs.js +++ b/tests/baselines/reference/requireOfJsonFileWithoutAllowJs.js @@ -1,7 +1,7 @@ //// [tests/cases/compiler/requireOfJsonFileWithoutAllowJs.ts] //// //// [file1.ts] -import b1 = require('./b'); +import b1 = require('./b.json'); let x = b1.a; import b2 = require('./b.json'); if (x) { @@ -15,10 +15,15 @@ if (x) { "b": "hello" } +//// [b.json] +{ + "a": true, + "b": "hello" +} //// [file1.js] "use strict"; exports.__esModule = true; -var b1 = require("./b"); +var b1 = require("./b.json"); var x = b1.a; var b2 = require("./b.json"); if (x) { diff --git a/tests/baselines/reference/requireOfJsonFileWithoutAllowJs.symbols b/tests/baselines/reference/requireOfJsonFileWithoutAllowJs.symbols index 1729461ef07..a8f82b6b145 100644 --- a/tests/baselines/reference/requireOfJsonFileWithoutAllowJs.symbols +++ b/tests/baselines/reference/requireOfJsonFileWithoutAllowJs.symbols @@ -1,10 +1,12 @@ === tests/cases/compiler/file1.ts === -import b1 = require('./b'); +import b1 = require('./b.json'); >b1 : Symbol(b1, Decl(file1.ts, 0, 0)) let x = b1.a; >x : Symbol(x, Decl(file1.ts, 1, 3)) +>b1.a : Symbol("a", Decl(b.json, 0, 1)) >b1 : Symbol(b1, Decl(file1.ts, 0, 0)) +>a : Symbol("a", Decl(b.json, 0, 1)) import b2 = require('./b.json'); >b2 : Symbol(b2, Decl(file1.ts, 1, 13)) @@ -14,11 +16,23 @@ if (x) { let b = b2.b; >b : Symbol(b, Decl(file1.ts, 4, 7)) +>b2.b : Symbol("b", Decl(b.json, 1, 14)) >b2 : Symbol(b2, Decl(file1.ts, 1, 13)) +>b : Symbol("b", Decl(b.json, 1, 14)) x = (b1.b === b); >x : Symbol(x, Decl(file1.ts, 1, 3)) +>b1.b : Symbol("b", Decl(b.json, 1, 14)) >b1 : Symbol(b1, Decl(file1.ts, 0, 0)) +>b : Symbol("b", Decl(b.json, 1, 14)) >b : Symbol(b, Decl(file1.ts, 4, 7)) } +=== tests/cases/compiler/b.json === +{ + "a": true, +>"a" : Symbol("a", Decl(b.json, 0, 1)) + + "b": "hello" +>"b" : Symbol("b", Decl(b.json, 1, 14)) +} diff --git a/tests/baselines/reference/requireOfJsonFileWithoutAllowJs.types b/tests/baselines/reference/requireOfJsonFileWithoutAllowJs.types index 7984743550d..c718c429408 100644 --- a/tests/baselines/reference/requireOfJsonFileWithoutAllowJs.types +++ b/tests/baselines/reference/requireOfJsonFileWithoutAllowJs.types @@ -1,33 +1,45 @@ === tests/cases/compiler/file1.ts === -import b1 = require('./b'); ->b1 : any +import b1 = require('./b.json'); +>b1 : { "a": boolean; "b": string; } let x = b1.a; ->x : any ->b1.a : any ->b1 : any ->a : any +>x : boolean +>b1.a : boolean +>b1 : { "a": boolean; "b": string; } +>a : boolean import b2 = require('./b.json'); ->b2 : any +>b2 : { "a": boolean; "b": string; } if (x) { ->x : any +>x : boolean let b = b2.b; ->b : any ->b2.b : any ->b2 : any ->b : any +>b : string +>b2.b : string +>b2 : { "a": boolean; "b": string; } +>b : string x = (b1.b === b); >x = (b1.b === b) : boolean ->x : any +>x : boolean >(b1.b === b) : boolean >b1.b === b : boolean ->b1.b : any ->b1 : any ->b : any ->b : any +>b1.b : string +>b1 : { "a": boolean; "b": string; } +>b : string +>b : string } +=== tests/cases/compiler/b.json === +{ +>{ "a": true, "b": "hello"} : { "a": boolean; "b": string; } + + "a": true, +>"a" : boolean +>true : true + + "b": "hello" +>"b" : string +>"hello" : "hello" +} diff --git a/tests/baselines/reference/requireOfJsonFileWithoutExtension.errors.txt b/tests/baselines/reference/requireOfJsonFileWithoutExtension.errors.txt new file mode 100644 index 00000000000..799b78c26ee --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileWithoutExtension.errors.txt @@ -0,0 +1,19 @@ +tests/cases/compiler/file1.ts(1,21): error TS2307: Cannot find module './b'. + + +==== tests/cases/compiler/file1.ts (1 errors) ==== + import b1 = require('./b'); // This should not resolve + ~~~~~ +!!! error TS2307: Cannot find module './b'. + let x = b1.a; + import b2 = require('./b.json'); + if (x) { + let b = b2.b; + x = (b1.b === b); + } + +==== tests/cases/compiler/b.json (0 errors) ==== + { + "a": true, + "b": "hello" + } \ No newline at end of file diff --git a/tests/baselines/reference/requireOfJsonFileWithoutExtension.js b/tests/baselines/reference/requireOfJsonFileWithoutExtension.js new file mode 100644 index 00000000000..4e9bea900b8 --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileWithoutExtension.js @@ -0,0 +1,32 @@ +//// [tests/cases/compiler/requireOfJsonFileWithoutExtension.ts] //// + +//// [file1.ts] +import b1 = require('./b'); // This should not resolve +let x = b1.a; +import b2 = require('./b.json'); +if (x) { + let b = b2.b; + x = (b1.b === b); +} + +//// [b.json] +{ + "a": true, + "b": "hello" +} + +//// [b.json] +{ + "a": true, + "b": "hello" +} +//// [file1.js] +"use strict"; +exports.__esModule = true; +var b1 = require("./b"); // This should not resolve +var x = b1.a; +var b2 = require("./b.json"); +if (x) { + var b = b2.b; + x = (b1.b === b); +} diff --git a/tests/baselines/reference/requireOfJsonFileWithoutExtension.symbols b/tests/baselines/reference/requireOfJsonFileWithoutExtension.symbols new file mode 100644 index 00000000000..34125a48dd6 --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileWithoutExtension.symbols @@ -0,0 +1,34 @@ +=== tests/cases/compiler/file1.ts === +import b1 = require('./b'); // This should not resolve +>b1 : Symbol(b1, Decl(file1.ts, 0, 0)) + +let x = b1.a; +>x : Symbol(x, Decl(file1.ts, 1, 3)) +>b1 : Symbol(b1, Decl(file1.ts, 0, 0)) + +import b2 = require('./b.json'); +>b2 : Symbol(b2, Decl(file1.ts, 1, 13)) + +if (x) { +>x : Symbol(x, Decl(file1.ts, 1, 3)) + + let b = b2.b; +>b : Symbol(b, Decl(file1.ts, 4, 7)) +>b2.b : Symbol("b", Decl(b.json, 1, 14)) +>b2 : Symbol(b2, Decl(file1.ts, 1, 13)) +>b : Symbol("b", Decl(b.json, 1, 14)) + + x = (b1.b === b); +>x : Symbol(x, Decl(file1.ts, 1, 3)) +>b1 : Symbol(b1, Decl(file1.ts, 0, 0)) +>b : Symbol(b, Decl(file1.ts, 4, 7)) +} + +=== tests/cases/compiler/b.json === +{ + "a": true, +>"a" : Symbol("a", Decl(b.json, 0, 1)) + + "b": "hello" +>"b" : Symbol("b", Decl(b.json, 1, 14)) +} diff --git a/tests/baselines/reference/requireOfJsonFileWithoutExtension.types b/tests/baselines/reference/requireOfJsonFileWithoutExtension.types new file mode 100644 index 00000000000..5c09cd9063d --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileWithoutExtension.types @@ -0,0 +1,45 @@ +=== tests/cases/compiler/file1.ts === +import b1 = require('./b'); // This should not resolve +>b1 : any + +let x = b1.a; +>x : any +>b1.a : any +>b1 : any +>a : any + +import b2 = require('./b.json'); +>b2 : { "a": boolean; "b": string; } + +if (x) { +>x : any + + let b = b2.b; +>b : string +>b2.b : string +>b2 : { "a": boolean; "b": string; } +>b : string + + x = (b1.b === b); +>x = (b1.b === b) : boolean +>x : any +>(b1.b === b) : boolean +>b1.b === b : boolean +>b1.b : any +>b1 : any +>b : any +>b : string +} + +=== tests/cases/compiler/b.json === +{ +>{ "a": true, "b": "hello"} : { "a": boolean; "b": string; } + + "a": true, +>"a" : boolean +>true : true + + "b": "hello" +>"b" : string +>"hello" : "hello" +} diff --git a/tests/baselines/reference/requireOfJsonFileWithoutExtensionResolvesToTs.js b/tests/baselines/reference/requireOfJsonFileWithoutExtensionResolvesToTs.js new file mode 100644 index 00000000000..e6908a72a76 --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileWithoutExtensionResolvesToTs.js @@ -0,0 +1,44 @@ +//// [tests/cases/compiler/requireOfJsonFileWithoutExtensionResolvesToTs.ts] //// + +//// [file1.ts] +import c1 = require('./c'); // resolves to c.ts +let x2 = c1.a; +import c2 = require('./c.json'); // resolves to c.json +if (x2) { + let b = c2.b; + let x = (c1.b === b); +} + +//// [b.json] +{ + "a": true, + "b": "hello" +} + +//// [c.json] +{ + "a": true, + "b": "hello" +} + +//// [c.ts] +export = { a: true, b: "hello" }; + +//// [c.js] +"use strict"; +module.exports = { a: true, b: "hello" }; +//// [c.json] +{ + "a": true, + "b": "hello" +} +//// [file1.js] +"use strict"; +exports.__esModule = true; +var c1 = require("./c"); // resolves to c.ts +var x2 = c1.a; +var c2 = require("./c.json"); // resolves to c.json +if (x2) { + var b = c2.b; + var x = (c1.b === b); +} diff --git a/tests/baselines/reference/requireOfJsonFileWithoutExtensionResolvesToTs.symbols b/tests/baselines/reference/requireOfJsonFileWithoutExtensionResolvesToTs.symbols new file mode 100644 index 00000000000..fc45f789eac --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileWithoutExtensionResolvesToTs.symbols @@ -0,0 +1,44 @@ +=== tests/cases/compiler/file1.ts === +import c1 = require('./c'); // resolves to c.ts +>c1 : Symbol(c1, Decl(file1.ts, 0, 0)) + +let x2 = c1.a; +>x2 : Symbol(x2, Decl(file1.ts, 1, 3)) +>c1.a : Symbol(a, Decl(c.ts, 0, 10)) +>c1 : Symbol(c1, Decl(file1.ts, 0, 0)) +>a : Symbol(a, Decl(c.ts, 0, 10)) + +import c2 = require('./c.json'); // resolves to c.json +>c2 : Symbol(c2, Decl(file1.ts, 1, 14)) + +if (x2) { +>x2 : Symbol(x2, Decl(file1.ts, 1, 3)) + + let b = c2.b; +>b : Symbol(b, Decl(file1.ts, 4, 7)) +>c2.b : Symbol("b", Decl(c.json, 1, 14)) +>c2 : Symbol(c2, Decl(file1.ts, 1, 14)) +>b : Symbol("b", Decl(c.json, 1, 14)) + + let x = (c1.b === b); +>x : Symbol(x, Decl(file1.ts, 5, 7)) +>c1.b : Symbol(b, Decl(c.ts, 0, 19)) +>c1 : Symbol(c1, Decl(file1.ts, 0, 0)) +>b : Symbol(b, Decl(c.ts, 0, 19)) +>b : Symbol(b, Decl(file1.ts, 4, 7)) +} + +=== tests/cases/compiler/c.json === +{ + "a": true, +>"a" : Symbol("a", Decl(c.json, 0, 1)) + + "b": "hello" +>"b" : Symbol("b", Decl(c.json, 1, 14)) +} + +=== tests/cases/compiler/c.ts === +export = { a: true, b: "hello" }; +>a : Symbol(a, Decl(c.ts, 0, 10)) +>b : Symbol(b, Decl(c.ts, 0, 19)) + diff --git a/tests/baselines/reference/requireOfJsonFileWithoutExtensionResolvesToTs.types b/tests/baselines/reference/requireOfJsonFileWithoutExtensionResolvesToTs.types new file mode 100644 index 00000000000..a2faa9c834e --- /dev/null +++ b/tests/baselines/reference/requireOfJsonFileWithoutExtensionResolvesToTs.types @@ -0,0 +1,53 @@ +=== tests/cases/compiler/file1.ts === +import c1 = require('./c'); // resolves to c.ts +>c1 : { a: boolean; b: string; } + +let x2 = c1.a; +>x2 : boolean +>c1.a : boolean +>c1 : { a: boolean; b: string; } +>a : boolean + +import c2 = require('./c.json'); // resolves to c.json +>c2 : { "a": boolean; "b": string; } + +if (x2) { +>x2 : boolean + + let b = c2.b; +>b : string +>c2.b : string +>c2 : { "a": boolean; "b": string; } +>b : string + + let x = (c1.b === b); +>x : boolean +>(c1.b === b) : boolean +>c1.b === b : boolean +>c1.b : string +>c1 : { a: boolean; b: string; } +>b : string +>b : string +} + +=== tests/cases/compiler/c.json === +{ +>{ "a": true, "b": "hello"} : { "a": boolean; "b": string; } + + "a": true, +>"a" : boolean +>true : true + + "b": "hello" +>"b" : string +>"hello" : "hello" +} + +=== tests/cases/compiler/c.ts === +export = { a: true, b: "hello" }; +>{ a: true, b: "hello" } : { a: boolean; b: string; } +>a : boolean +>true : true +>b : string +>"hello" : "hello" + diff --git a/tests/baselines/reference/typeRootsFromMultipleNodeModulesDirectories.trace.json b/tests/baselines/reference/typeRootsFromMultipleNodeModulesDirectories.trace.json index bee93e5be25..277b27adb32 100644 --- a/tests/baselines/reference/typeRootsFromMultipleNodeModulesDirectories.trace.json +++ b/tests/baselines/reference/typeRootsFromMultipleNodeModulesDirectories.trace.json @@ -19,8 +19,6 @@ "File '/node_modules/xyz.jsx' does not exist.", "Loading module 'xyz' from 'node_modules' folder, target file type 'Json'.", "Directory '/foo/bar/node_modules' does not exist, skipping all lookups in it.", - "File '/foo/node_modules/xyz.json' does not exist.", - "File '/node_modules/xyz.json' does not exist.", "======== Module name 'xyz' was not resolved. ========", "======== Resolving module 'pdq' from '/foo/bar/a.ts'. ========", "Module resolution kind is not specified, using 'NodeJs'.", @@ -42,8 +40,6 @@ "File '/node_modules/pdq.jsx' does not exist.", "Loading module 'pdq' from 'node_modules' folder, target file type 'Json'.", "Directory '/foo/bar/node_modules' does not exist, skipping all lookups in it.", - "File '/foo/node_modules/pdq.json' does not exist.", - "File '/node_modules/pdq.json' does not exist.", "======== Module name 'pdq' was not resolved. ========", "======== Resolving module 'abc' from '/foo/bar/a.ts'. ========", "Module resolution kind is not specified, using 'NodeJs'.", @@ -65,8 +61,6 @@ "File '/node_modules/abc.jsx' does not exist.", "Loading module 'abc' from 'node_modules' folder, target file type 'Json'.", "Directory '/foo/bar/node_modules' does not exist, skipping all lookups in it.", - "File '/foo/node_modules/abc.json' does not exist.", - "File '/node_modules/abc.json' does not exist.", "======== Module name 'abc' was not resolved. ========", "======== Resolving type reference directive 'grumpy', containing file '/foo/bar/__inferred type names__.ts', root directory '/foo/node_modules/@types,/node_modules/@types'. ========", "Resolving with primary search path '/foo/node_modules/@types, /node_modules/@types'.", diff --git a/tests/baselines/reference/typeRootsFromNodeModulesInParentDirectory.trace.json b/tests/baselines/reference/typeRootsFromNodeModulesInParentDirectory.trace.json index 95fdca59f94..4a16a8e7afa 100644 --- a/tests/baselines/reference/typeRootsFromNodeModulesInParentDirectory.trace.json +++ b/tests/baselines/reference/typeRootsFromNodeModulesInParentDirectory.trace.json @@ -13,7 +13,6 @@ "File '/node_modules/xyz.jsx' does not exist.", "Loading module 'xyz' from 'node_modules' folder, target file type 'Json'.", "Directory '/src/node_modules' does not exist, skipping all lookups in it.", - "File '/node_modules/xyz.json' does not exist.", "======== Module name 'xyz' was not resolved. ========", "======== Resolving type reference directive 'foo', containing file '/src/__inferred type names__.ts', root directory '/node_modules/@types'. ========", "Resolving with primary search path '/node_modules/@types'.", diff --git a/tests/cases/compiler/requireOfJsonFile.ts b/tests/cases/compiler/requireOfJsonFile.ts index 016c0795620..6c10279aa6f 100644 --- a/tests/cases/compiler/requireOfJsonFile.ts +++ b/tests/cases/compiler/requireOfJsonFile.ts @@ -3,7 +3,7 @@ // @allowJs: true // @Filename: file1.ts -import b1 = require('./b'); +import b1 = require('./b.json'); let x = b1.a; import b2 = require('./b.json'); if (x) { diff --git a/tests/cases/compiler/requireOfJsonFileNonRelative.ts b/tests/cases/compiler/requireOfJsonFileNonRelative.ts new file mode 100644 index 00000000000..f769f04282a --- /dev/null +++ b/tests/cases/compiler/requireOfJsonFileNonRelative.ts @@ -0,0 +1,24 @@ +// @module: commonjs +// @outdir: out/ +// @allowJs: true + +// @Filename: /src/projects/file1.ts +import b1 = require('b.json'); +let x = b1.a; +import b2 = require('c.json'); +if (x) { + let b = b2.b; + x = (b1.b === b); +} + +// @Filename: /src/projects/node_modules/b.json +{ + "a": true, + "b": "hello" +} + +// @Filename: /src/node_modules/c.json +{ + "a": true, + "b": "hello" +} \ No newline at end of file diff --git a/tests/cases/compiler/requireOfJsonFileNonRelativeWithoutExtension.ts b/tests/cases/compiler/requireOfJsonFileNonRelativeWithoutExtension.ts new file mode 100644 index 00000000000..4e4b4dda6eb --- /dev/null +++ b/tests/cases/compiler/requireOfJsonFileNonRelativeWithoutExtension.ts @@ -0,0 +1,25 @@ +// @module: commonjs +// @outdir: out/ +// @allowJs: true + +// @Filename: /src/projects/file1.ts +import d = require("d.json"); // Should fail +import e = require("e"); // Should fail + +// @Filename: /src/projects/node_modules/b.json +{ + "a": true, + "b": "hello" +} + +// @Filename: /src/projects/node_modules/e.json +{ + "a": true, + "b": "hello" +} + +// @Filename: /src/node_modules/c.json +{ + "a": true, + "b": "hello" +} \ No newline at end of file diff --git a/tests/cases/compiler/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.ts b/tests/cases/compiler/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.ts new file mode 100644 index 00000000000..27126a14545 --- /dev/null +++ b/tests/cases/compiler/requireOfJsonFileNonRelativeWithoutExtensionResolvesToTs.ts @@ -0,0 +1,16 @@ +// @module: commonjs +// @outdir: out/ +// @allowJs: true + +// @Filename: /src/projects/file1.ts +import f = require("f"); // should work to f.ts +let fnumber: number = f; + +// @Filename: /src/node_modules/f.json +{ + "a": true, + "b": "hello" +} + +// @Filename: /src/node_modules/f.ts +export = 10; \ No newline at end of file diff --git a/tests/cases/compiler/requireOfJsonFileWithEmptyObject.ts b/tests/cases/compiler/requireOfJsonFileWithEmptyObject.ts index 05f1d2d637c..030ddf16a8b 100644 --- a/tests/cases/compiler/requireOfJsonFileWithEmptyObject.ts +++ b/tests/cases/compiler/requireOfJsonFileWithEmptyObject.ts @@ -3,7 +3,7 @@ // @allowJs: true // @Filename: file1.ts -import b1 = require('./b'); +import b1 = require('./b.json'); let x = b1; import b2 = require('./b.json'); if (x) { diff --git a/tests/cases/compiler/requireOfJsonFileWithEmptyObjectWithErrors.ts b/tests/cases/compiler/requireOfJsonFileWithEmptyObjectWithErrors.ts index 31ab0ea0a7c..6d8edd2c0cb 100644 --- a/tests/cases/compiler/requireOfJsonFileWithEmptyObjectWithErrors.ts +++ b/tests/cases/compiler/requireOfJsonFileWithEmptyObjectWithErrors.ts @@ -3,7 +3,7 @@ // @allowJs: true // @Filename: file1.ts -import b1 = require('./b'); +import b1 = require('./b.json'); let x = b1.a; import b2 = require('./b.json'); if (x) { diff --git a/tests/cases/compiler/requireOfJsonFileWithNoContent.ts b/tests/cases/compiler/requireOfJsonFileWithNoContent.ts index 4d3c63c6ffa..0f9bbbb28fb 100644 --- a/tests/cases/compiler/requireOfJsonFileWithNoContent.ts +++ b/tests/cases/compiler/requireOfJsonFileWithNoContent.ts @@ -3,7 +3,7 @@ // @allowJs: true // @Filename: file1.ts -import b1 = require('./b'); +import b1 = require('./b.json'); let x = b1.a; import b2 = require('./b.json'); if (x) { diff --git a/tests/cases/compiler/requireOfJsonFileWithoutAllowJs.ts b/tests/cases/compiler/requireOfJsonFileWithoutAllowJs.ts index d214bcda450..9043be7d44c 100644 --- a/tests/cases/compiler/requireOfJsonFileWithoutAllowJs.ts +++ b/tests/cases/compiler/requireOfJsonFileWithoutAllowJs.ts @@ -2,7 +2,7 @@ // @outdir: out/ // @Filename: file1.ts -import b1 = require('./b'); +import b1 = require('./b.json'); let x = b1.a; import b2 = require('./b.json'); if (x) { diff --git a/tests/cases/compiler/requireOfJsonFileWithoutExtension.ts b/tests/cases/compiler/requireOfJsonFileWithoutExtension.ts new file mode 100644 index 00000000000..7739b1eb7ce --- /dev/null +++ b/tests/cases/compiler/requireOfJsonFileWithoutExtension.ts @@ -0,0 +1,18 @@ +// @module: commonjs +// @outdir: out/ +// @allowJs: true + +// @Filename: file1.ts +import b1 = require('./b'); // This should not resolve +let x = b1.a; +import b2 = require('./b.json'); +if (x) { + let b = b2.b; + x = (b1.b === b); +} + +// @Filename: b.json +{ + "a": true, + "b": "hello" +} \ No newline at end of file diff --git a/tests/cases/compiler/requireOfJsonFileWithoutExtensionResolvesToTs.ts b/tests/cases/compiler/requireOfJsonFileWithoutExtensionResolvesToTs.ts new file mode 100644 index 00000000000..a3974eaf282 --- /dev/null +++ b/tests/cases/compiler/requireOfJsonFileWithoutExtensionResolvesToTs.ts @@ -0,0 +1,27 @@ +// @module: commonjs +// @outdir: out/ +// @allowJs: true + +// @Filename: file1.ts +import c1 = require('./c'); // resolves to c.ts +let x2 = c1.a; +import c2 = require('./c.json'); // resolves to c.json +if (x2) { + let b = c2.b; + let x = (c1.b === b); +} + +// @Filename: b.json +{ + "a": true, + "b": "hello" +} + +// @Filename: c.json +{ + "a": true, + "b": "hello" +} + +// @Filename: c.ts +export = { a: true, b: "hello" }; \ No newline at end of file