check-packages
Version:
CLI tool to check your npm dependencies against a list of allowed/forbidden packages.
58 lines (44 loc) • 1.43 kB
JavaScript
;
const hasPgkWithVersion = (result, pkgName, version) => result[pkgName] && result[pkgName].includes(version);
const flattenDependencyTree = tree => {
const result = {};
if (!tree || !tree.name || !tree.version) {
return result;
}
/* istanbul ignore if */
if (hasPgkWithVersion(result, tree.name, tree.version)) {
return result;
}
if (!tree.isRoot) {
result[tree.name] = result[tree.name] || [];
result[tree.name].push(tree.version);
}
if (tree.dependencies) {
Object.keys(tree.dependencies).
forEach(key => {
const child = {
name: key,
version: tree.dependencies[key].version,
dependencies: tree.dependencies[key].dependencies
};
/* istanbul ignore if */
if (hasPgkWithVersion(result, child.name, child.version)) {
return result;
}
const childResult = flattenDependencyTree(child);
Object.keys(childResult).forEach(childKey => {
result[childKey] = result[childKey] || childResult[childKey];
result[childKey] = [ ...result[childKey], ...childResult[childKey] ].
sort().
reduce((acc, curr) => {
if (!acc.includes(curr)) {
acc.push(curr);
}
return acc;
}, []);
});
});
}
return result;
};
module.exports = flattenDependencyTree;