Skip to content

Commit 5f8cf1a

Browse files
committed
Don't emit source files found under node_modules
1 parent b524795 commit 5f8cf1a

File tree

4 files changed

+13
-18
lines changed

4 files changed

+13
-18
lines changed

src/compiler/program.ts

+10-8
Original file line numberDiff line numberDiff line change
@@ -1097,7 +1097,7 @@ namespace ts {
10971097
const modulesWithElidedImports: Map<boolean> = {};
10981098

10991099
// Track source files that are JavaScript files found by searching under node_modules, as these shouldn't be compiled.
1100-
const jsFilesFoundSearchingNodeModules: Map<boolean> = {};
1100+
const sourceFilesFoundSearchingNodeModules: Map<boolean> = {};
11011101

11021102
const start = new Date().getTime();
11031103

@@ -1378,7 +1378,7 @@ namespace ts {
13781378
getSourceFile: program.getSourceFile,
13791379
getSourceFileByPath: program.getSourceFileByPath,
13801380
getSourceFiles: program.getSourceFiles,
1381-
getFilesFromNodeModules: () => jsFilesFoundSearchingNodeModules,
1381+
isSourceFileFromNodeModules: (file: SourceFile) => !!lookUp(sourceFilesFoundSearchingNodeModules, file.path),
13821382
writeFile: writeFileCallback || (
13831383
(fileName, data, writeByteOrderMark, onError, sourceFiles) => host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles)),
13841384
isEmitBlocked,
@@ -2066,15 +2066,17 @@ namespace ts {
20662066
// - noResolve is falsy
20672067
// - module name comes from the list of imports
20682068
// - it's not a top level JavaScript module that exceeded the search max
2069-
const isJsFileUnderNodeModules = resolution && resolution.isExternalLibraryImport &&
2070-
hasJavaScriptFileExtension(resolution.resolvedFileName);
2069+
const isFromNodeModulesSearch = resolution && resolution.isExternalLibraryImport;
2070+
const isJsFileFromNodeModules = isFromNodeModulesSearch && hasJavaScriptFileExtension(resolution.resolvedFileName);
20712071

2072-
if (isJsFileUnderNodeModules) {
2073-
jsFilesFoundSearchingNodeModules[resolvedPath] = true;
2072+
if (isFromNodeModulesSearch) {
2073+
sourceFilesFoundSearchingNodeModules[resolvedPath] = true;
2074+
}
2075+
if (isJsFileFromNodeModules) {
20742076
currentNodeModulesJsDepth++;
20752077
}
20762078

2077-
const elideImport = isJsFileUnderNodeModules && currentNodeModulesJsDepth > maxNodeModulesJsDepth;
2079+
const elideImport = isJsFileFromNodeModules && currentNodeModulesJsDepth > maxNodeModulesJsDepth;
20782080
const shouldAddFile = resolution && !options.noResolve && i < file.imports.length && !elideImport;
20792081

20802082
if (elideImport) {
@@ -2089,7 +2091,7 @@ namespace ts {
20892091
file.imports[i].end);
20902092
}
20912093

2092-
if (isJsFileUnderNodeModules) {
2094+
if (isJsFileFromNodeModules) {
20932095
currentNodeModulesJsDepth--;
20942096
}
20952097
}

src/compiler/utilities.ts

+3-5
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ namespace ts {
3636
getSourceFiles(): SourceFile[];
3737

3838
/* @internal */
39-
getFilesFromNodeModules(): Map<boolean>;
39+
isSourceFileFromNodeModules(file: SourceFile): boolean;
4040

4141
getCommonSourceDirectory(): string;
4242
getCanonicalFileName(fileName: string): string;
@@ -2277,10 +2277,9 @@ namespace ts {
22772277
}
22782278
else {
22792279
const sourceFiles = targetSourceFile === undefined ? host.getSourceFiles() : [targetSourceFile];
2280-
const nodeModulesFiles = host.getFilesFromNodeModules();
22812280
for (const sourceFile of sourceFiles) {
22822281
// Don't emit if source file is a declaration file, or was located under node_modules
2283-
if (!isDeclarationFile(sourceFile) && !lookUp(nodeModulesFiles, sourceFile.path)) {
2282+
if (!isDeclarationFile(sourceFile) && !host.isSourceFileFromNodeModules(sourceFile)) {
22842283
onSingleFileEmit(host, sourceFile);
22852284
}
22862285
}
@@ -2314,10 +2313,9 @@ namespace ts {
23142313
function onBundledEmit(host: EmitHost) {
23152314
// Can emit only sources that are not declaration file and are either non module code or module with
23162315
// --module or --target es6 specified. Files included by searching under node_modules are also not emitted.
2317-
const nodeModulesFiles = host.getFilesFromNodeModules();
23182316
const bundledSources = filter(host.getSourceFiles(),
23192317
sourceFile => !isDeclarationFile(sourceFile) &&
2320-
!lookUp(nodeModulesFiles, sourceFile.path) &&
2318+
!host.isSourceFileFromNodeModules(sourceFile) &&
23212319
(!isExternalModule(sourceFile) ||
23222320
!!getEmitModuleKind(options)));
23232321
if (bundledSources.length) {

tests/baselines/reference/moduleAugmentationInDependency2.js

-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ export {};
88
//// [app.ts]
99
import "A"
1010

11-
//// [index.js]
12-
"use strict";
1311
//// [app.js]
1412
"use strict";
1513
require("A");

tests/baselines/reference/pathMappingBasedModuleResolution5_node.js

-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ exports.x = 1;
3131
//// [file2.js]
3232
"use strict";
3333
exports.y = 1;
34-
//// [file4.js]
35-
"use strict";
36-
exports.z1 = 1;
3734
//// [file1.js]
3835
"use strict";
3936
var file1_1 = require("folder2/file1");

0 commit comments

Comments
 (0)