use console::style;
use super::deps::{DependencyIssue, DependencyReport, IssueSeverity};
pub fn print_dependency_report(report: &DependencyReport) {
println!(
"\n{} {} Dependency Analysis Report",
style("📦").bold(),
style("WASM").cyan().bold()
);
println!(
" {} Total dependencies: {}",
style("→").dim(),
style(report.total_deps).yellow()
);
println!(
" {} Direct dependencies: {}",
style("→").dim(),
style(report.direct_deps).yellow()
);
if !report.issues.is_empty() {
println!(
"\n{} {} Optimization Opportunities Found",
style("🔍").bold(),
style(report.issues.len()).yellow().bold()
);
let (min_kb, max_kb) = report.total_estimated_savings_kb();
if max_kb > 0 {
println!(
" {} Estimated savings: {}-{} KB",
style("→").dim(),
style(min_kb).green().bold(),
style(max_kb).green().bold()
);
}
for severity in &[
IssueSeverity::Critical,
IssueSeverity::High,
IssueSeverity::Medium,
IssueSeverity::Low,
] {
let severity_issues = report.issues_by_severity(*severity);
if !severity_issues.is_empty() {
println!(
"\n{} {} Issues ({} found):",
style(format!("[{}]", severity)).bold(),
match severity {
IssueSeverity::Critical => style("Critical").red().bold(),
IssueSeverity::High => style("High").red(),
IssueSeverity::Medium => style("Medium").yellow(),
IssueSeverity::Low => style("Low").cyan(),
},
severity_issues.len()
);
for issue in severity_issues {
print_issue(issue);
}
}
}
} else {
println!(
"\n{} {} All dependencies optimized!",
style("✅").bold(),
style("Great!").green().bold()
);
}
if !report.duplicates.is_empty() {
println!(
"\n{} {} Duplicate Versions Detected",
style("⚠️").bold(),
style("Warning").yellow().bold()
);
for (name, versions) in &report.duplicates {
println!(
" {} {}: {}",
style("→").dim(),
style(name).yellow(),
versions.join(", ")
);
}
}
}
fn print_issue(issue: &DependencyIssue) {
println!(
"\n {} {}@{}",
style("Package:").dim(),
style(&issue.package).bold(),
style(&issue.version).dim()
);
println!(" {} {}", style("Issue:").dim(), issue.issue);
if let Some((min_kb, max_kb)) = issue.size_impact_kb {
println!(
" {} {}-{} KB ({}% of bundle)",
style("Impact:").dim(),
style(min_kb).red(),
style(max_kb).red(),
issue.savings_percent.unwrap_or(0)
);
}
println!(
" {} {}",
style("Fix:").dim(),
style(&issue.suggestion).green()
);
}