use std::path::Path;
use super::common::report_installed;
use super::progress::Progress;
use super::Res;
use crate::install::{from_lockfile_observed, InstallEvent};
pub(super) fn run(dir: &Path, progress: &Progress) -> Res {
let task = progress.task("install", "installing packages");
let mut totaled = false;
let installed = from_lockfile_observed(&dir.join("package-lock.json"), dir, |event| {
let InstallEvent::Fetch {
total,
name,
version,
..
} = event;
if !totaled {
task.set_total(total as u64);
totaled = true;
}
task.inc(&format!("{name}@{version}"));
})?;
task.finish(&format!("{} packages", installed.len()));
report_installed(&installed);
Ok(())
}