import { Packages, Package } from "@manypkg/get-packages"; import getDependencyGraph from "./get-dependency-graph"; export function getDependentsGraph( packages: Packages, opts?: { bumpVersionsWithWorkspaceProtocolOnly?: boolean } ) { const graph: Map = new Map(); const { graph: dependencyGraph } = getDependencyGraph(packages, { bumpVersionsWithWorkspaceProtocolOnly: opts?.bumpVersionsWithWorkspaceProtocolOnly === true, }); const dependentsLookup: { [key: string]: { pkg: Package; dependents: Array }; } = {}; packages.packages.forEach((pkg) => { dependentsLookup[pkg.packageJson.name] = { pkg, dependents: [], }; }); packages.packages.forEach((pkg) => { const dependent = pkg.packageJson.name; const valFromDependencyGraph = dependencyGraph.get(dependent); if (valFromDependencyGraph) { const dependencies = valFromDependencyGraph.dependencies; dependencies.forEach((dependency) => { dependentsLookup[dependency].dependents.push(dependent); }); } }); Object.keys(dependentsLookup).forEach((key) => { graph.set(key, dependentsLookup[key]); }); const simplifiedDependentsGraph: Map = new Map(); graph.forEach((pkgInfo, pkgName) => { simplifiedDependentsGraph.set(pkgName, pkgInfo.dependents); }); return simplifiedDependentsGraph; }