Skip to content

Commit 56b709d

Browse files
committed
Swap from nodeModuleNamesOnly boolean nodeModuleNames (keeps backwards compatibility with old prop).
New `nodeModuleNames` options are: "exclude", "include", or "only". nodeModuleNamesOnly: false maps to "exclude" (default) nodeModuleNamesOnly: true maps to "only" New option is "include"
1 parent 447d86a commit 56b709d

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

main.js

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,20 @@ function getNodeModuleName(filename) {
3636

3737
/* unordered */
3838
function getDependenciesFor(filename, avoidCircular, optionsArg = {}) {
39+
// backwards compatibility with `nodeModuleNamesOnly` boolean option
40+
// Using `nodeModuleNames` property moving forward
41+
if(("nodeModuleNamesOnly" in optionsArg) && !("nodeModuleNames" in optionsArg)) {
42+
if(optionsArg.nodeModuleNamesOnly === true) {
43+
optionsArg.nodeModuleNames = "only";
44+
}
45+
if(optionsArg.nodeModuleNamesOnly === false) {
46+
optionsArg.nodeModuleNames = "exclude";
47+
}
48+
}
49+
3950
let options = Object.assign({
4051
allowNotFound: false,
41-
nodeModuleNamesOnly: false,
52+
nodeModuleNames: "exclude", // also "include" or "only"
4253
}, optionsArg);
4354
let absoluteFilename = getAbsolutePath(filename)
4455

@@ -71,7 +82,7 @@ function getDependenciesFor(filename, avoidCircular, optionsArg = {}) {
7182
let relativeFilename = getRelativePath(mod.filename);
7283
if(!avoidCircular) {
7384
avoidCircular = {};
74-
} else if(!options.nodeModuleNamesOnly) {
85+
} else if(options.nodeModuleNames !== "only") {
7586
dependencies.add(relativeFilename);
7687
}
7788

@@ -82,13 +93,16 @@ function getDependenciesFor(filename, avoidCircular, optionsArg = {}) {
8293
let relativeChildFilename = getRelativePath(child.filename);
8394
let nodeModuleName = getNodeModuleName(child.filename);
8495

85-
if(options.nodeModuleNamesOnly && nodeModuleName) {
96+
if(options.nodeModuleNames !== "exclude" && nodeModuleName) {
8697
dependencies.add(nodeModuleName);
87-
} else if(nodeModuleName === false && // filter out node_modules
88-
!dependencies.has(relativeChildFilename) && // avoid infinite looping with circular deps
89-
!avoidCircular[relativeChildFilename] ) {
90-
for(let dependency of getDependenciesFor(relativeChildFilename, avoidCircular, options)) {
91-
dependencies.add(dependency);
98+
}
99+
// Add dependencies of this dependency (not top level node_modules)
100+
if(nodeModuleName === false) {
101+
if(!dependencies.has(relativeChildFilename) && // avoid infinite looping with circular deps
102+
!avoidCircular[relativeChildFilename] ) {
103+
for(let dependency of getDependenciesFor(relativeChildFilename, avoidCircular, options)) {
104+
dependencies.add(dependency);
105+
}
92106
}
93107
}
94108
}

test/mainTest.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,16 @@ test("only node_modules", t => {
7777
test("getNodeModuleName", t => {
7878
t.is(DependencyTree.getNodeModuleName("./eleventy-dependency-tree/node_modules/lodash/lodash.js"), "lodash");
7979
t.is(DependencyTree.getNodeModuleName("./eleventy-dependency-tree/node_modules/@sindresorhus/is/dist/index.js"), "@sindresorhus/is");
80+
});
81+
82+
test("both files and node_modules", t => {
83+
t.deepEqual(DependencyTree("./test/stubs/uses_node_modules.js", {
84+
nodeModuleNames: "include"
85+
}).sort(), [
86+
"./test/stubs/parent/child1.js",
87+
"./test/stubs/parent/grandchild.js",
88+
"./test/stubs/parent/greatgrandchild.js",
89+
"@sindresorhus/is",
90+
"lodash",
91+
]);
8092
});

0 commit comments

Comments
 (0)