use crate::Resolver;
use aube_lockfile::LockfileGraph;
use std::collections::HashMap;
#[derive(Debug, Clone, Default)]
pub struct DirectDepInfo {
pub deprecated: bool,
pub latest: Option<String>,
}
impl Resolver {
pub fn direct_dep_info(&self, graph: &LockfileGraph) -> HashMap<String, DirectDepInfo> {
let mut out: HashMap<String, DirectDepInfo> = HashMap::new();
for deps in graph.importers.values() {
for dep in deps {
let Some(pkg) = graph.packages.get(&dep.dep_path) else {
continue;
};
if pkg.local_source.is_some() {
continue;
}
let Some(packument) = self.cache.get(pkg.registry_name()) else {
continue;
};
let deprecated = packument
.versions
.get(&pkg.version)
.is_some_and(|v| v.deprecated.is_some());
let latest = packument
.dist_tags
.get("latest")
.filter(|l| l.as_str() != pkg.version.as_str())
.cloned();
if deprecated || latest.is_some() {
out.insert(dep.dep_path.clone(), DirectDepInfo { deprecated, latest });
}
}
}
out
}
}