johnny-dependency
Version:
npm -ls for remote packages
44 lines (35 loc) • 1.34 kB
JavaScript
function resolveDependencies({ dependencies, resolvedDependencies }) {
return dependencies.map(dependency => {
// eslint-disable-next-line no-param-reassign
dependency.deps = Object.keys(dependency.deps).reduce((acc, name) => {
const version = dependency.deps[name];
acc[name] = resolvedDependencies[`${name}@${version}`];
return acc;
}, {});
return dependency;
});
}
function matchPackageNameAndVersion(a, b) {
return a.name === b.name && a.version === b.version;
}
function formatGraphWithoutCircularDeps(initialRoot, resolvedDependencies, latestVersions) {
const hits = [];
function buildGraph(root) {
if (!hits.find(name => name === root.name)) {
hits.push(root.name);
const rootPackage = resolvedDependencies.find(npmPackage => matchPackageNameAndVersion(npmPackage, root));
return {
name: root.name,
version: root.version,
latestVersion: latestVersions[root.name],
children: rootPackage && Object.keys(rootPackage.deps).map(dependency => buildGraph({ name: dependency, version: rootPackage.deps[dependency] }))
};
}
return Object.assign({}, { latestVersion: latestVersions[root.name] }, root);
}
return buildGraph(initialRoot);
}
module.exports = {
resolveDependencies,
formatGraphWithoutCircularDeps
};