-
Notifications
You must be signed in to change notification settings - Fork 37
/
createDependencyMap.ts
36 lines (31 loc) · 1.13 KB
/
createDependencyMap.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import { getPackageDependencies, PackageDependenciesOptions } from "./getPackageDependencies";
import { PackageInfos } from "../types/PackageInfo";
import { getPackageInfos, getPackageInfosAsync } from "../getPackageInfos";
export interface DependencyMap {
dependencies: Map<string, Set<string>>;
dependents: Map<string, Set<string>>;
}
export function createDependencyMap(
packages: PackageInfos,
options: PackageDependenciesOptions = { withDevDependencies: true, withPeerDependencies: false }
): DependencyMap {
const map = {
dependencies: new Map<string, Set<string>>(),
dependents: new Map<string, Set<string>>(),
};
const internalPackages = new Set(Object.keys(packages));
for (const [pkg, info] of Object.entries(packages)) {
const deps = getPackageDependencies(info, internalPackages, options);
for (const dep of deps) {
if (!map.dependencies.has(pkg)) {
map.dependencies.set(pkg, new Set());
}
map.dependencies.get(pkg)!.add(dep);
if (!map.dependents.has(dep)) {
map.dependents.set(dep, new Set());
}
map.dependents.get(dep)!.add(pkg);
}
}
return map;
}