From ede2f12dad64a25cafd58ea7ccf4a9c1e93d0312 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Wed, 22 Feb 2023 11:10:09 -0500 Subject: [PATCH 1/3] feat: start caching npm package version's "bin" entry from npm registry --- cli/npm/registry.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cli/npm/registry.rs b/cli/npm/registry.rs index 510f581322baa5..70e2d44a644946 100644 --- a/cli/npm/registry.rs +++ b/cli/npm/registry.rs @@ -100,6 +100,8 @@ pub struct NpmPeerDependencyMeta { pub struct NpmPackageVersionInfo { pub version: String, pub dist: NpmPackageVersionDistInfo, + #[serde(default)] + pub bin: HashMap, // Bare specifier to version (ex. `"typescript": "^3.0.1") or possibly // package and version (ex. `"typescript-3.0.1": "npm:typescript@3.0.1"`). #[serde(default)] From 1577f61e0b118f473cec4b21eeb2f12b9b0a9b32 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Wed, 22 Feb 2023 11:45:01 -0500 Subject: [PATCH 2/3] Fix. --- cli/npm/registry.rs | 69 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 65 insertions(+), 4 deletions(-) diff --git a/cli/npm/registry.rs b/cli/npm/registry.rs index 70e2d44a644946..2c9aade311ed5f 100644 --- a/cli/npm/registry.rs +++ b/cli/npm/registry.rs @@ -89,19 +89,25 @@ impl Ord for NpmDependencyEntry { } } -#[derive(Debug, Default, Deserialize, Serialize, Clone)] +#[derive(Debug, Default, Deserialize, Serialize, Clone, PartialEq, Eq)] pub struct NpmPeerDependencyMeta { #[serde(default)] optional: bool, } -#[derive(Debug, Default, Deserialize, Serialize, Clone)] +#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] +#[serde(untagged)] +pub enum NpmPackageVersionBinEntry { + String(String), + Map(HashMap), +} + +#[derive(Debug, Default, Deserialize, Serialize, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct NpmPackageVersionInfo { pub version: String, pub dist: NpmPackageVersionDistInfo, - #[serde(default)] - pub bin: HashMap, + pub bin: Option, // Bare specifier to version (ex. `"typescript": "^3.0.1") or possibly // package and version (ex. `"typescript-3.0.1": "npm:typescript@3.0.1"`). #[serde(default)] @@ -641,3 +647,58 @@ impl NpmRegistryApiInner for TestNpmRegistryApiInner { NpmRegistryApi::default_url() } } + +#[cfg(test)] +mod test { + use std::collections::HashMap; + + use deno_core::serde_json; + + use crate::npm::registry::NpmPackageVersionBinEntry; + use crate::npm::NpmPackageVersionDistInfo; + + use super::NpmPackageVersionInfo; + + #[test] + fn deserializes_minimal_pkg_info() { + let text = r#"{ "version": "1.0.0", "dist": { "tarball": "value", "shasum": "test" } }"#; + let info: NpmPackageVersionInfo = serde_json::from_str(&text).unwrap(); + assert_eq!( + info, + NpmPackageVersionInfo { + version: "1.0.0".to_string(), + dist: NpmPackageVersionDistInfo { + tarball: "value".to_string(), + shasum: "test".to_string(), + integrity: None, + }, + bin: None, + dependencies: Default::default(), + peer_dependencies: Default::default(), + peer_dependencies_meta: Default::default() + } + ); + } + + #[test] + fn deserializes_bin_entry() { + // string + let text = r#"{ "version": "1.0.0", "bin": "bin-value", "dist": { "tarball": "value", "shasum": "test" } }"#; + let info: NpmPackageVersionInfo = serde_json::from_str(&text).unwrap(); + assert_eq!( + info.bin, + Some(NpmPackageVersionBinEntry::String("bin-value".to_string())) + ); + + // map + let text = r#"{ "version": "1.0.0", "bin": { "a": "a-value", "b": "b-value" }, "dist": { "tarball": "value", "shasum": "test" } }"#; + let info: NpmPackageVersionInfo = serde_json::from_str(&text).unwrap(); + assert_eq!( + info.bin, + Some(NpmPackageVersionBinEntry::Map(HashMap::from([ + ("a".to_string(), "a-value".to_string()), + ("b".to_string(), "b-value".to_string()), + ]))) + ); + } +} From 79b10aa2cf027b285888aaff379fda4ee5ad4452 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Wed, 22 Feb 2023 11:55:56 -0500 Subject: [PATCH 3/3] Lint. --- cli/npm/registry.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cli/npm/registry.rs b/cli/npm/registry.rs index 2c9aade311ed5f..bcdada30dc6a89 100644 --- a/cli/npm/registry.rs +++ b/cli/npm/registry.rs @@ -662,7 +662,7 @@ mod test { #[test] fn deserializes_minimal_pkg_info() { let text = r#"{ "version": "1.0.0", "dist": { "tarball": "value", "shasum": "test" } }"#; - let info: NpmPackageVersionInfo = serde_json::from_str(&text).unwrap(); + let info: NpmPackageVersionInfo = serde_json::from_str(text).unwrap(); assert_eq!( info, NpmPackageVersionInfo { @@ -684,7 +684,7 @@ mod test { fn deserializes_bin_entry() { // string let text = r#"{ "version": "1.0.0", "bin": "bin-value", "dist": { "tarball": "value", "shasum": "test" } }"#; - let info: NpmPackageVersionInfo = serde_json::from_str(&text).unwrap(); + let info: NpmPackageVersionInfo = serde_json::from_str(text).unwrap(); assert_eq!( info.bin, Some(NpmPackageVersionBinEntry::String("bin-value".to_string())) @@ -692,7 +692,7 @@ mod test { // map let text = r#"{ "version": "1.0.0", "bin": { "a": "a-value", "b": "b-value" }, "dist": { "tarball": "value", "shasum": "test" } }"#; - let info: NpmPackageVersionInfo = serde_json::from_str(&text).unwrap(); + let info: NpmPackageVersionInfo = serde_json::from_str(text).unwrap(); assert_eq!( info.bin, Some(NpmPackageVersionBinEntry::Map(HashMap::from([