Skip to content

Commit c5dd2c6

Browse files
Add install scaffold, dist-keys
1 parent e646347 commit c5dd2c6

File tree

4 files changed

+40
-5
lines changed

4 files changed

+40
-5
lines changed
Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,39 @@
11
use color_eyre::Result;
22
use dinopkg_npm_registry::PackageInfo;
3+
use owo_colors::OwoColorize;
34

45
pub async fn install_cmd(name: String) -> Result<()> {
56
let client = reqwest::Client::new();
67

78
let package_info = PackageInfo::from_name(&name, &client).await?;
8-
dbg!(package_info);
9+
let latest_version = package_info.dist_keys.get("latest").unwrap();
10+
let latest_package = package_info.versions.get(latest_version).unwrap();
11+
print_dep_version(&latest_package.name, &latest_package.version, false);
12+
13+
if let Some(deps) = &latest_package.dependencies {
14+
for (dep_name, dep_version) in deps {
15+
print_dep_version(dep_name, dep_version, false);
16+
}
17+
}
18+
if let Some(deps) = &latest_package.dev_dependencies {
19+
for (dep_name, dep_version) in deps {
20+
print_dep_version(dep_name, dep_version, true);
21+
}
22+
}
23+
924
Ok(())
1025
}
26+
27+
fn print_dep_version(name: &String, version: &String, is_dev: bool) {
28+
println!(
29+
" {} {} {}{}",
30+
"Installing".green().bold(),
31+
name,
32+
version,
33+
if is_dev {
34+
format!("{}", " (dev)".dimmed().bold())
35+
} else {
36+
"".into()
37+
}
38+
);
39+
}

crates/dinopkg-npm-registry/src/lib.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@ const NPM_REGISTRY_ROOT_URL: &str = "https://registry.npmjs.org";
88
#[derive(Serialize, Deserialize, Debug)]
99
pub struct PackageInfo {
1010
/// The name of the package, for example `discord.js`.
11-
name: String,
11+
pub name: String,
1212

1313
/// A map of versions to their respective version info.
1414
///
1515
/// The key is the version string (e.g. `0.1.0`), and the value is the version's `package.json` info.
16-
versions: HashMap<String, PackageJson>,
16+
pub versions: HashMap<String, PackageJson>,
17+
18+
#[serde(rename = "dist-tags")]
19+
pub dist_keys: HashMap<String, String>,
1720
}
1821

1922
#[derive(thiserror::Error, Debug)]

crates/dinopkg-package-json/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,6 @@ tokio = { version = "1.38.0", features = ["fs"], optional = true }
1313
[dev-dependencies]
1414
maplit = "1.0.2"
1515
pretty_assertions = "1.4.0"
16+
17+
[lints.rust]
18+
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin_include)'] }

crates/dinopkg-package-json/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,14 @@ pub enum RepositoryVariant {
4444

4545
// serde :/
4646
#[allow(clippy::trivially_copy_pass_by_ref)]
47-
#[cfg(not(tarpaullin_include))]
47+
#[cfg(not(tarpaulin_include))]
4848
#[inline(always)]
4949
fn is_false(value: &bool) -> bool {
5050
!value
5151
}
5252

5353
#[inline(always)]
54-
#[cfg(not(tarpaullin_include))]
54+
#[cfg(not(tarpaulin_include))]
5555
const fn default_as_false() -> bool {
5656
false
5757
}

0 commit comments

Comments
 (0)