Skip to content

Commit 09cced0

Browse files
authored
Merge pull request #26 from pkgjs/refactor-arborist-tree-walk
2 parents e492f44 + 401f79f commit 09cced0

File tree

1 file changed

+8
-42
lines changed

1 file changed

+8
-42
lines changed

lib/deps.js

+8-42
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,8 @@ const internals = {};
1515
internals.log = Debug('detect-node-support');
1616

1717

18-
internals.walk = (node, callback) => {
19-
20-
callback(node);
21-
22-
node.children.forEach((child) => {
23-
24-
internals.walk(child, callback);
25-
});
26-
};
27-
28-
2918
internals.resolve = async ({ packageJson, lockfile }, options) => {
3019

31-
const { deep, dev } = options;
32-
3320
const tmpDir = Tmp.dirSync({ unsafeCleanup: true });
3421
const path = tmpDir.name;
3522

@@ -39,47 +26,26 @@ internals.resolve = async ({ packageJson, lockfile }, options) => {
3926
Fs.writeFileSync(Path.join(path, 'package-lock.json'), JSON.stringify(lockfile, null, ' '));
4027
}
4128

42-
const direct = new Set();
43-
['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'].forEach((depType) => {
44-
45-
if (!packageJson[depType]) {
46-
return;
47-
}
48-
49-
Object.keys(packageJson[depType]).forEach((dep) => direct.add(dep));
50-
});
51-
5229
const arborist = new Arborist({ path });
5330

5431
await arborist.buildIdealTree();
5532

5633
const map = {};
5734

58-
internals.walk(arborist.idealTree, (node) => {
59-
60-
if (node.isRoot) {
61-
return;
62-
}
35+
for (const dep of arborist.idealTree.inventory.values()) {
6336

64-
if (!dev && node.dev) {
37+
if (!options.dev && dep.dev) {
6538
// only include dev deps when `options.dev` flag is set
66-
return;
67-
}
68-
69-
if (!deep && !node.parent.isRoot) {
70-
// only include deep deps when `options.deep` flag is set
71-
return;
39+
continue;
7240
}
7341

74-
if (!deep && !direct.has(node.name)) {
75-
// only include deep deps when `options.deep` flag is set
76-
// workaround for https://github.com/npm/arborist/issues/60
77-
return;
42+
if (!options.deep && ![...dep.edgesIn].some(({ from }) => from === arborist.idealTree)) {
43+
continue;
7844
}
7945

80-
map[node.name] = map[node.name] || new Set();
81-
map[node.name].add(node.package.version);
82-
});
46+
map[dep.name] = map[dep.name] || new Set();
47+
map[dep.name].add(dep.package.version);
48+
}
8349

8450
const result = {};
8551

0 commit comments

Comments
 (0)