From b360ad5f3c8db53f397943999200cc39fcb993dd Mon Sep 17 00:00:00 2001 From: Bill Ticehurst Date: Sun, 10 Jul 2016 16:11:42 -0700 Subject: [PATCH 1/7] Fix module tracking (cherry picked from commit ca874bdd17c0c5e5e8b70c0db7bb847e2711b8f3) --- src/compiler/program.ts | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 2e4492efa7b14..5d636847045b8 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1095,13 +1095,13 @@ namespace ts { // As all these operations happen - and are nested - within the createProgram call, they close over the below variables. // The current resolution depth is tracked by incrementing/decrementing as the depth first search progresses. const maxNodeModulesJsDepth = typeof options.maxNodeModuleJsDepth === "number" ? options.maxNodeModuleJsDepth : 2; - let currentNodeModulesJsDepth = 0; + let currentNodeModulesDepth = 0; // If a module has some of its imports skipped due to being at the depth limit under node_modules, then track // this, as it may be imported at a shallower depth later, and then it will need its skipped imports processed. const modulesWithElidedImports: Map = {}; - // Track source files that are JavaScript files found by searching under node_modules, as these shouldn't be compiled. + // Track source files that are source files found by searching under node_modules, as these shouldn't be compiled. const sourceFilesFoundSearchingNodeModules: Map = {}; const start = new Date().getTime(); @@ -1918,9 +1918,20 @@ namespace ts { reportFileNamesDifferOnlyInCasingError(fileName, file.fileName, refFile, refPos, refEnd); } + // If the file was previously found via a node_modules search, but is now being processed as a root file, + // then everything it sucks in may also be marked incorrectly, and needs to be checked again. + if (file && lookUp(sourceFilesFoundSearchingNodeModules, file.path) && currentNodeModulesDepth == 0) { + if (!options.noResolve) { + processReferencedFiles(file, getDirectoryPath(fileName), isDefaultLib); + processTypeReferenceDirectives(file); + } + + modulesWithElidedImports[file.path] = false; + processImportedModules(file, getDirectoryPath(fileName)); + } // See if we need to reprocess the imports due to prior skipped imports - if (file && lookUp(modulesWithElidedImports, file.path)) { - if (currentNodeModulesJsDepth < maxNodeModulesJsDepth) { + else if (file && lookUp(modulesWithElidedImports, file.path)) { + if (currentNodeModulesDepth < maxNodeModulesJsDepth) { modulesWithElidedImports[file.path] = false; processImportedModules(file, getDirectoryPath(fileName)); } @@ -2075,13 +2086,17 @@ namespace ts { const isJsFileFromNodeModules = isFromNodeModulesSearch && hasJavaScriptFileExtension(resolution.resolvedFileName); if (isFromNodeModulesSearch) { - sourceFilesFoundSearchingNodeModules[resolvedPath] = true; + currentNodeModulesDepth++; } - if (isJsFileFromNodeModules) { - currentNodeModulesJsDepth++; + + if (currentNodeModulesDepth > 0) { + // If its already present with false, its a root file also. Don't override this. + if (!hasProperty(sourceFilesFoundSearchingNodeModules, resolvedPath)) { + sourceFilesFoundSearchingNodeModules[resolvedPath] = true; + } } - const elideImport = isJsFileFromNodeModules && currentNodeModulesJsDepth > maxNodeModulesJsDepth; + const elideImport = isJsFileFromNodeModules && currentNodeModulesDepth > maxNodeModulesJsDepth; const shouldAddFile = resolution && !options.noResolve && i < file.imports.length && !elideImport; if (elideImport) { @@ -2096,8 +2111,8 @@ namespace ts { file.imports[i].end); } - if (isJsFileFromNodeModules) { - currentNodeModulesJsDepth--; + if (isFromNodeModulesSearch) { + currentNodeModulesDepth--; } } } From ab45a56eda597aea72d0f3ec92b6d812e2cf714f Mon Sep 17 00:00:00 2001 From: Bill Ticehurst Date: Sun, 10 Jul 2016 16:38:21 -0700 Subject: [PATCH 2/7] Updated test with relative import (cherry picked from commit db54bda17b86e3a81f2d45e57e4fca732d66725b) --- .../amd/maxDepthExceeded/root.js | 1 + .../amd/nodeModulesMaxDepthExceeded.errors.txt | 13 ++++++++++++- .../amd/nodeModulesMaxDepthExceeded.json | 1 + .../node/maxDepthExceeded/root.js | 1 + .../node/nodeModulesMaxDepthExceeded.errors.txt | 13 ++++++++++++- .../node/nodeModulesMaxDepthExceeded.json | 1 + .../maxDepthExceeded/node_modules/m1/index.js | 3 +++ .../maxDepthExceeded/node_modules/m1/relative.js | 1 + .../NodeModulesSearch/maxDepthExceeded/root.ts | 2 ++ 9 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/relative.js diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/root.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/root.js index 73cef6fc02caa..5a3916f07d1fa 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/root.js +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/root.js @@ -2,5 +2,6 @@ define(["require", "exports", "m1"], function (require, exports, m1) { "use strict"; m1.f1("test"); m1.f2.a = "10"; // Error: Should be number + m1.rel = 42; // Error: Should be boolean m1.f2.person.age = "10"; // OK if stopped at 2 modules: person will be "any". }); diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt index f03b958275b27..52c3611ceda0b 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt @@ -1,4 +1,5 @@ maxDepthExceeded/root.ts(3,1): error TS2322: Type 'string' is not assignable to type 'number'. +maxDepthExceeded/root.ts(4,1): error TS2322: Type 'number' is not assignable to type 'boolean'. ==== entry.js (0 errors) ==== @@ -10,8 +11,12 @@ maxDepthExceeded/root.ts(3,1): error TS2322: Type 'string' is not assignable to "person": m3.person }; +==== relative.js (0 errors) ==== + exports.relativeProp = true; + ==== index.js (0 errors) ==== var m2 = require('m2'); + var rel = require('./relative'); /** * @param {string} p1 The first param @@ -22,11 +27,17 @@ maxDepthExceeded/root.ts(3,1): error TS2322: Type 'string' is not assignable to exports.f2 = m2; -==== maxDepthExceeded/root.ts (1 errors) ==== + exports.rel = rel.relativeProp; + +==== maxDepthExceeded/root.ts (2 errors) ==== import * as m1 from "m1"; m1.f1("test"); m1.f2.a = "10"; // Error: Should be number ~~~~~~~ !!! error TS2322: Type 'string' is not assignable to type 'number'. + m1.rel = 42; // Error: Should be boolean + ~~~~~~ +!!! error TS2322: Type 'number' is not assignable to type 'boolean'. + m1.f2.person.age = "10"; // OK if stopped at 2 modules: person will be "any". \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json index 80a0a0fb93dcd..a4ac37bb2a334 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json @@ -8,6 +8,7 @@ "resolvedInputFiles": [ "lib.d.ts", "maxDepthExceeded/node_modules/m2/entry.js", + "maxDepthExceeded/node_modules/m1/relative.js", "maxDepthExceeded/node_modules/m1/index.js", "maxDepthExceeded/root.ts" ], diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/root.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/root.js index 28f91fb9b916e..fb4faf236b29a 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/root.js +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/root.js @@ -2,4 +2,5 @@ var m1 = require("m1"); m1.f1("test"); m1.f2.a = "10"; // Error: Should be number +m1.rel = 42; // Error: Should be boolean m1.f2.person.age = "10"; // OK if stopped at 2 modules: person will be "any". diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt index f03b958275b27..52c3611ceda0b 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt @@ -1,4 +1,5 @@ maxDepthExceeded/root.ts(3,1): error TS2322: Type 'string' is not assignable to type 'number'. +maxDepthExceeded/root.ts(4,1): error TS2322: Type 'number' is not assignable to type 'boolean'. ==== entry.js (0 errors) ==== @@ -10,8 +11,12 @@ maxDepthExceeded/root.ts(3,1): error TS2322: Type 'string' is not assignable to "person": m3.person }; +==== relative.js (0 errors) ==== + exports.relativeProp = true; + ==== index.js (0 errors) ==== var m2 = require('m2'); + var rel = require('./relative'); /** * @param {string} p1 The first param @@ -22,11 +27,17 @@ maxDepthExceeded/root.ts(3,1): error TS2322: Type 'string' is not assignable to exports.f2 = m2; -==== maxDepthExceeded/root.ts (1 errors) ==== + exports.rel = rel.relativeProp; + +==== maxDepthExceeded/root.ts (2 errors) ==== import * as m1 from "m1"; m1.f1("test"); m1.f2.a = "10"; // Error: Should be number ~~~~~~~ !!! error TS2322: Type 'string' is not assignable to type 'number'. + m1.rel = 42; // Error: Should be boolean + ~~~~~~ +!!! error TS2322: Type 'number' is not assignable to type 'boolean'. + m1.f2.person.age = "10"; // OK if stopped at 2 modules: person will be "any". \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json index 80a0a0fb93dcd..a4ac37bb2a334 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json @@ -8,6 +8,7 @@ "resolvedInputFiles": [ "lib.d.ts", "maxDepthExceeded/node_modules/m2/entry.js", + "maxDepthExceeded/node_modules/m1/relative.js", "maxDepthExceeded/node_modules/m1/index.js", "maxDepthExceeded/root.ts" ], diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/index.js b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/index.js index 7ff454a240273..0433199ffd596 100644 --- a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/index.js +++ b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/index.js @@ -1,4 +1,5 @@ var m2 = require('m2'); +var rel = require('./relative'); /** * @param {string} p1 The first param @@ -8,3 +9,5 @@ exports.f1 = function(p1) { }; exports.f2 = m2; + +exports.rel = rel.relativeProp; diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/relative.js b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/relative.js new file mode 100644 index 0000000000000..8b051584b856d --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/relative.js @@ -0,0 +1 @@ +exports.relativeProp = true; diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/root.ts b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/root.ts index 6260440864805..f847ea6048a97 100644 --- a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/root.ts +++ b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/root.ts @@ -1,4 +1,6 @@ import * as m1 from "m1"; m1.f1("test"); m1.f2.a = "10"; // Error: Should be number +m1.rel = 42; // Error: Should be boolean + m1.f2.person.age = "10"; // OK if stopped at 2 modules: person will be "any". From 5eba2e09fb8ab58be895e93c16daf2571ef14f65 Mon Sep 17 00:00:00 2001 From: Bill Ticehurst Date: Sun, 10 Jul 2016 20:54:07 -0700 Subject: [PATCH 3/7] Fixed the node tracking and a harness bug (cherry picked from commit 2ab1143f1cb694f43cd2622fc3fddbbe304a805b) --- src/compiler/program.ts | 2 ++ src/harness/projectsRunner.ts | 28 +++++++++++++------ .../moduleAugmentationInDependency2.js | 2 ++ tests/baselines/reference/nodeResolution6.js | 2 -- tests/baselines/reference/nodeResolution8.js | 2 -- .../pathMappingBasedModuleResolution5_node.js | 3 ++ .../amd/maxDepthExceeded/{ => built}/root.js | 0 .../nodeModulesMaxDepthExceeded.errors.txt | 2 +- .../amd/nodeModulesMaxDepthExceeded.json | 4 ++- .../node/maxDepthExceeded/{ => built}/root.js | 0 .../nodeModulesMaxDepthExceeded.errors.txt | 2 +- .../node/nodeModulesMaxDepthExceeded.json | 4 ++- .../maxDepthExceeded/tsconfig.json | 8 ++++-- 13 files changed, 40 insertions(+), 19 deletions(-) rename tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/{ => built}/root.js (100%) rename tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/{ => built}/root.js (100%) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 5d636847045b8..57bb3d6ae42f0 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1921,6 +1921,7 @@ namespace ts { // If the file was previously found via a node_modules search, but is now being processed as a root file, // then everything it sucks in may also be marked incorrectly, and needs to be checked again. if (file && lookUp(sourceFilesFoundSearchingNodeModules, file.path) && currentNodeModulesDepth == 0) { + sourceFilesFoundSearchingNodeModules[file.path] = false; if (!options.noResolve) { processReferencedFiles(file, getDirectoryPath(fileName), isDefaultLib); processTypeReferenceDirectives(file); @@ -1953,6 +1954,7 @@ namespace ts { filesByName.set(path, file); if (file) { + sourceFilesFoundSearchingNodeModules[path] = (currentNodeModulesDepth > 0); file.path = path; if (host.useCaseSensitiveFileNames()) { diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index fb92ff4dfab20..4baf423a7baa9 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -479,17 +479,27 @@ class ProjectRunner extends RunnerBase { it("Baseline of emitted result (" + moduleNameToString(moduleKind) + "): " + testCaseFileName, () => { if (testCase.baselineCheck) { + let errs = []; ts.forEach(compilerResult.outputFiles, outputFile => { - - Harness.Baseline.runBaseline("Baseline of emitted result (" + moduleNameToString(compilerResult.moduleKind) + "): " + testCaseFileName, getBaselineFolder(compilerResult.moduleKind) + outputFile.fileName, () => { - try { - return Harness.IO.readFile(getProjectOutputFolder(outputFile.fileName, compilerResult.moduleKind)); - } - catch (e) { - return undefined; - } - }); + // There may be multiple files with different baselines. Run all and report at the end, else + // it stops copying the remaining emitted files from 'local/projectOutput' to 'local/project'. + try { + Harness.Baseline.runBaseline("Baseline of emitted result (" + moduleNameToString(compilerResult.moduleKind) + "): " + testCaseFileName, getBaselineFolder(compilerResult.moduleKind) + outputFile.fileName, () => { + try { + return Harness.IO.readFile(getProjectOutputFolder(outputFile.fileName, compilerResult.moduleKind)); + } + catch (e) { + return undefined; + } + }); + } + catch (e) { + errs.push(e); + } }); + if (errs.length) { + throw Error(errs.join("\n ")); + } } }); diff --git a/tests/baselines/reference/moduleAugmentationInDependency2.js b/tests/baselines/reference/moduleAugmentationInDependency2.js index 0a5d83695a34f..381f1e72d8f31 100644 --- a/tests/baselines/reference/moduleAugmentationInDependency2.js +++ b/tests/baselines/reference/moduleAugmentationInDependency2.js @@ -8,6 +8,8 @@ export {}; //// [app.ts] import "A" +//// [index.js] +"use strict"; //// [app.js] "use strict"; require("A"); diff --git a/tests/baselines/reference/nodeResolution6.js b/tests/baselines/reference/nodeResolution6.js index 58a9b907250d2..196e8ae57cf54 100644 --- a/tests/baselines/reference/nodeResolution6.js +++ b/tests/baselines/reference/nodeResolution6.js @@ -13,7 +13,5 @@ export declare var y; import y = require("a"); -//// [ref.js] -var x = 1; //// [b.js] "use strict"; diff --git a/tests/baselines/reference/nodeResolution8.js b/tests/baselines/reference/nodeResolution8.js index 36b53eec553ef..1d90399ff706e 100644 --- a/tests/baselines/reference/nodeResolution8.js +++ b/tests/baselines/reference/nodeResolution8.js @@ -12,7 +12,5 @@ export declare var y; //// [b.ts] import y = require("a"); -//// [ref.js] -var x = 1; //// [b.js] "use strict"; diff --git a/tests/baselines/reference/pathMappingBasedModuleResolution5_node.js b/tests/baselines/reference/pathMappingBasedModuleResolution5_node.js index e4440299cc75c..1958800f91893 100644 --- a/tests/baselines/reference/pathMappingBasedModuleResolution5_node.js +++ b/tests/baselines/reference/pathMappingBasedModuleResolution5_node.js @@ -31,6 +31,9 @@ exports.x = 1; //// [file2.js] "use strict"; exports.y = 1; +//// [file4.js] +"use strict"; +exports.z1 = 1; //// [file1.js] "use strict"; var file1_1 = require("folder2/file1"); diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/root.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/root.js similarity index 100% rename from tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/root.js rename to tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/root.js diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt index 52c3611ceda0b..7099c05d57708 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt @@ -14,7 +14,7 @@ maxDepthExceeded/root.ts(4,1): error TS2322: Type 'number' is not assignable to ==== relative.js (0 errors) ==== exports.relativeProp = true; -==== index.js (0 errors) ==== +==== maxDepthExceeded/node_modules/m1/index.js (0 errors) ==== var m2 = require('m2'); var rel = require('./relative'); diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json index a4ac37bb2a334..86e856dc7b840 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json @@ -13,6 +13,8 @@ "maxDepthExceeded/root.ts" ], "emittedFiles": [ - "maxDepthExceeded/root.js" + "maxDepthExceeded/built/node_modules/m1/relative.js", + "maxDepthExceeded/built/node_modules/m1/index.js", + "maxDepthExceeded/built/root.js" ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/root.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/root.js similarity index 100% rename from tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/root.js rename to tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/root.js diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt index 52c3611ceda0b..7099c05d57708 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt @@ -14,7 +14,7 @@ maxDepthExceeded/root.ts(4,1): error TS2322: Type 'number' is not assignable to ==== relative.js (0 errors) ==== exports.relativeProp = true; -==== index.js (0 errors) ==== +==== maxDepthExceeded/node_modules/m1/index.js (0 errors) ==== var m2 = require('m2'); var rel = require('./relative'); diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json index a4ac37bb2a334..86e856dc7b840 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json @@ -13,6 +13,8 @@ "maxDepthExceeded/root.ts" ], "emittedFiles": [ - "maxDepthExceeded/root.js" + "maxDepthExceeded/built/node_modules/m1/relative.js", + "maxDepthExceeded/built/node_modules/m1/index.js", + "maxDepthExceeded/built/root.js" ] } \ No newline at end of file diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/tsconfig.json b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/tsconfig.json index 0aafe67d68893..52633bb5a98f9 100644 --- a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/tsconfig.json +++ b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/tsconfig.json @@ -1,5 +1,9 @@ { "compilerOptions": { - "allowJs": true - } + "allowJs": true, + "maxNodeModuleJsDepth": 1, // Note: Module m1 is already included as a root file + "outDir": "built" + }, + "include": ["**/*"], + "exclude": ["node_modules/m2/**/*"] } From f8a92611eba079036501086aaa075a68c36320fc Mon Sep 17 00:00:00 2001 From: Bill Ticehurst Date: Sun, 10 Jul 2016 21:40:38 -0700 Subject: [PATCH 4/7] fixed lint error (cherry picked from commit a7467a1d2b5795a1bae38885ee5127cce37a9682) --- src/harness/projectsRunner.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index 4baf423a7baa9..083f7a7bf3912 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -479,7 +479,7 @@ class ProjectRunner extends RunnerBase { it("Baseline of emitted result (" + moduleNameToString(moduleKind) + "): " + testCaseFileName, () => { if (testCase.baselineCheck) { - let errs = []; + const errs = []; ts.forEach(compilerResult.outputFiles, outputFile => { // There may be multiple files with different baselines. Run all and report at the end, else // it stops copying the remaining emitted files from 'local/projectOutput' to 'local/project'. From f5769875e5f53a9379b2b882ff6f540dda927f40 Mon Sep 17 00:00:00 2001 From: Bill Ticehurst Date: Sun, 10 Jul 2016 21:49:13 -0700 Subject: [PATCH 5/7] Fixed implicit any (cherry picked from commit b75053cae3733d0c402a36fab0d7fd2366ed9dc8) --- src/harness/projectsRunner.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index 083f7a7bf3912..cf3c78d885996 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -479,7 +479,7 @@ class ProjectRunner extends RunnerBase { it("Baseline of emitted result (" + moduleNameToString(moduleKind) + "): " + testCaseFileName, () => { if (testCase.baselineCheck) { - const errs = []; + const errs: Error[] = []; ts.forEach(compilerResult.outputFiles, outputFile => { // There may be multiple files with different baselines. Run all and report at the end, else // it stops copying the remaining emitted files from 'local/projectOutput' to 'local/project'. From dd86be4e085095d6f6100f56f2693488f63f644c Mon Sep 17 00:00:00 2001 From: Bill Ticehurst Date: Sun, 10 Jul 2016 22:25:31 -0700 Subject: [PATCH 6/7] Added missing test files (cherry picked from commit 97025d026da460bd7dd76b2f175813fde2791f34) --- .gitignore | 1 + .../maxDepthExceeded/built/node_modules/m1/index.js | 10 ++++++++++ .../maxDepthExceeded/built/node_modules/m1/relative.js | 1 + .../maxDepthExceeded/built/node_modules/m1/index.js | 10 ++++++++++ .../maxDepthExceeded/built/node_modules/m1/relative.js | 1 + 5 files changed, 23 insertions(+) create mode 100644 tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/index.js create mode 100644 tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/relative.js create mode 100644 tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/index.js create mode 100644 tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/relative.js diff --git a/.gitignore b/.gitignore index bbb2e62c8bcc5..3d78e3b641183 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,4 @@ internal/ !**/.vscode/tasks.json !tests/cases/projects/projectOption/**/node_modules !tests/cases/projects/NodeModulesSearch/**/* +!tests/baselines/reference/project/nodeModules*/**/* diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/index.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/index.js new file mode 100644 index 0000000000000..46d38afba6fa2 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/index.js @@ -0,0 +1,10 @@ +var m2 = require('m2'); +var rel = require('./relative'); +/** + * @param {string} p1 The first param + */ +exports.f1 = function (p1) { + return 42; +}; +exports.f2 = m2; +exports.rel = rel.relativeProp; diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/relative.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/relative.js new file mode 100644 index 0000000000000..13432076541ac --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/relative.js @@ -0,0 +1 @@ +exports.relativeProp = true; diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/index.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/index.js new file mode 100644 index 0000000000000..46d38afba6fa2 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/index.js @@ -0,0 +1,10 @@ +var m2 = require('m2'); +var rel = require('./relative'); +/** + * @param {string} p1 The first param + */ +exports.f1 = function (p1) { + return 42; +}; +exports.f2 = m2; +exports.rel = rel.relativeProp; diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/relative.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/relative.js new file mode 100644 index 0000000000000..13432076541ac --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/relative.js @@ -0,0 +1 @@ +exports.relativeProp = true; From 5f6eb5bb126e5a5cdbfe023604a4d769a8964b94 Mon Sep 17 00:00:00 2001 From: Bill Ticehurst Date: Sun, 10 Jul 2016 23:07:45 -0700 Subject: [PATCH 7/7] Removed duplicate logic (cherry picked from commit 21bf801c6cd98063ebcbd7439a49c1152717188f) --- src/compiler/program.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 57bb3d6ae42f0..670d30b7d3391 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -2091,13 +2091,6 @@ namespace ts { currentNodeModulesDepth++; } - if (currentNodeModulesDepth > 0) { - // If its already present with false, its a root file also. Don't override this. - if (!hasProperty(sourceFilesFoundSearchingNodeModules, resolvedPath)) { - sourceFilesFoundSearchingNodeModules[resolvedPath] = true; - } - } - const elideImport = isJsFileFromNodeModules && currentNodeModulesDepth > maxNodeModulesJsDepth; const shouldAddFile = resolution && !options.noResolve && i < file.imports.length && !elideImport;