UNPKG

635 BJavaScriptView Raw
1const toposort = require('toposort');
2
3module.exports = (reverse = false, packages = []) => {
4 const packageNames = new Set(packages.map(pkg => pkg.name));
5
6 const edges = packages.reduce((accumulator, pkg) => {
7 const localDependencies = pkg.allDependencies.filter(dependency => {
8 return packageNames.has(dependency);
9 });
10
11 return accumulator.concat(
12 localDependencies.map(dependency => [dependency, pkg.name]),
13 );
14 }, []);
15
16 const order = toposort.array([...packageNames], edges);
17
18 if (reverse) {
19 order.reverse();
20 }
21
22 return order.map(packageName => {
23 return packages.find(pkg => pkg.name === packageName);
24 });
25};