The mooncakes.io registry as a dependency graph: what depends on what, ranked by direct, transitive and other-owner dependents, with a tree(1)-like CLI.
moon update
moonx gaato/mooncakes-graph/cmd/mooncakes-graph dependents gaato/http| command | output |
|---|---|
| dependents MODULE... | What depends on MODULE, as a tree like tree(1) |
| deps MODULE... | What MODULE depends on, as a tree |
| top [-n N] [--by direct\|transitive\|owners] | The most depended-on modules, as TSV |
| stats | Counts of modules, versions and edges, as JSON |
| versions, modules | Every version, and each module's description, as JSONL |
let index = @fs.read(@fs.index_dir().unwrap())
let graph = @graph.Graph::new(index.modules)
let metrics = graph.metrics()
for node in metrics.ranking(Transitive)[:10] {
println("\{graph.name(node)}: \{metrics.get(node, Transitive)}")
}type Graphtest {
let g = @graph.Graph::from_records([
@mooncakes_index.VersionRecord::new("a/core", version="0.1.0"),
@mooncakes_index.VersionRecord::new("b/app", version="0.1.0", deps=[
@mooncakes_index.Dep::new("a/core", version="0.1.0"),
]),
])
let core = g.find("a/core").unwrap()
assert_eq(g.dependents(core).map(n => g.name(n)), ["b/app"])
}test {
let g = @graph.Graph::from_records([
@mooncakes_index.VersionRecord::new("a/core", version="0.1.0"),
@mooncakes_index.VersionRecord::new("b/app", version="0.1.0", deps=[
@mooncakes_index.Dep::new("a/core", version="0.1.0"),
]),
])
let f = g.forest([g.find("a/core").unwrap()], Dependents)
assert_eq(f.modules, 1)
assert_eq(g.name(f.roots[0].children[0].node), "b/app")
}test {
let g = @graph.Graph::from_records([
@mooncakes_index.VersionRecord::new("a/core", version="0.1.0"),
@mooncakes_index.VersionRecord::new("a/core", version="0.2.0"),
@mooncakes_index.VersionRecord::new("b/app", version="0.1.0", deps=[
@mooncakes_index.Dep::new("a/core", version="0.1.0"),
]),
])
let r = g
.requirement(
dependent=g.find("b/app").unwrap(),
dependency=g.find("a/core").unwrap(),
)
.unwrap()
assert_eq(r.asked, Some("0.1.0"))
assert_true(r.behind)
}type Metricstest {
let g = @graph.Graph::from_records([
@mooncakes_index.VersionRecord::new("a/core", version="0.1.0"),
@mooncakes_index.VersionRecord::new("b/app", version="0.1.0", deps=[
@mooncakes_index.Dep::new("a/core", version="0.1.0"),
]),
])
let top = g.metrics().ranking(Transitive)
assert_eq(top.map(n => g.name(n)), ["a/core", "b/app"])
}Install
Download zipThe mooncakes.io registry as a dependency graph: what depends on what, ranked by direct, transitive and other-owner dependents, with a tree(1)-like CLI.