analyze method
Computes per-dependency graph metrics for nodes.
Implementation
Map<String, DependencyGraphMetrics> analyze(
Map<String, DependencyNode> nodes) {
final Map<String, Set<String>> reverse = <String, Set<String>>{};
for (final DependencyNode node in nodes.values) {
for (final String dep in node.dependencies) {
reverse.putIfAbsent(dep, () => <String>{}).add(node.name);
}
}
final Map<String, DependencyGraphMetrics> metrics =
<String, DependencyGraphMetrics>{};
for (final DependencyNode node in nodes.values) {
final _TraversalResult traversal = _traverse(node.name, nodes);
metrics[node.name] = DependencyGraphMetrics(
maxDepth: traversal.maxDepth,
transitiveCount: traversal.transitive.length,
directDependents: reverse[node.name]?.length ?? 0,
paths: traversal.paths,
centrality:
(reverse[node.name]?.length ?? 0) + (node.dependencies.length / 10),
);
}
return metrics;
}