diff options
Diffstat (limited to 'cli/npm/cache.rs')
-rw-r--r-- | cli/npm/cache.rs | 61 |
1 files changed, 37 insertions, 24 deletions
diff --git a/cli/npm/cache.rs b/cli/npm/cache.rs index a602feb57..b2d932911 100644 --- a/cli/npm/cache.rs +++ b/cli/npm/cache.rs @@ -13,6 +13,7 @@ use deno_core::error::custom_error; use deno_core::error::AnyError; use deno_core::parking_lot::Mutex; use deno_core::url::Url; +use deno_graph::npm::NpmPackageNv; use deno_graph::semver::Version; use crate::args::CacheSetting; @@ -107,8 +108,7 @@ pub fn with_folder_sync_lock( } pub struct NpmPackageCacheFolderId { - pub name: String, - pub version: Version, + pub nv: NpmPackageNv, /// Peer dependency resolution may require us to have duplicate copies /// of the same package. pub copy_index: usize, @@ -117,8 +117,7 @@ pub struct NpmPackageCacheFolderId { impl NpmPackageCacheFolderId { pub fn with_no_count(&self) -> Self { Self { - name: self.name.clone(), - version: self.version.clone(), + nv: self.nv.clone(), copy_index: 0, } } @@ -126,7 +125,7 @@ impl NpmPackageCacheFolderId { impl std::fmt::Display for NpmPackageCacheFolderId { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}@{}", self.name, self.version)?; + write!(f, "{}", self.nv)?; if self.copy_index > 0 { write!(f, "_{}", self.copy_index)?; } @@ -188,14 +187,14 @@ impl ReadonlyNpmCache { ) -> PathBuf { if id.copy_index == 0 { self.package_folder_for_name_and_version( - &id.name, - &id.version, + &id.nv.name, + &id.nv.version, registry_url, ) } else { self - .package_name_folder(&id.name, registry_url) - .join(format!("{}_{}", id.version, id.copy_index)) + .package_name_folder(&id.nv.name, registry_url) + .join(format!("{}_{}", id.nv.version, id.copy_index)) } } @@ -304,8 +303,10 @@ impl ReadonlyNpmCache { (version_part, 0) }; Some(NpmPackageCacheFolderId { - name, - version: Version::parse_from_npm(version).ok()?, + nv: NpmPackageNv { + name, + version: Version::parse_from_npm(version).ok()?, + }, copy_index, }) } @@ -440,16 +441,19 @@ impl NpmCache { // if this file exists, then the package didn't successfully extract // the first time, or another process is currently extracting the zip file && !package_folder.join(NPM_PACKAGE_SYNC_LOCK_FILENAME).exists() - && self.cache_setting.should_use_for_npm_package(&id.name) + && self.cache_setting.should_use_for_npm_package(&id.nv.name) { return Ok(()); } - let original_package_folder = self - .readonly - .package_folder_for_name_and_version(&id.name, &id.version, registry_url); + let original_package_folder = + self.readonly.package_folder_for_name_and_version( + &id.nv.name, + &id.nv.version, + registry_url, + ); with_folder_sync_lock( - (id.name.as_str(), &id.version), + (id.nv.name.as_str(), &id.nv.version), &package_folder, || hard_link_dir_recursive(&original_package_folder, &package_folder), )?; @@ -514,6 +518,7 @@ pub fn mixed_case_package_name_decode(name: &str) -> Option<String> { #[cfg(test)] mod test { use deno_core::url::Url; + use deno_graph::npm::NpmPackageNv; use deno_graph::semver::Version; use super::ReadonlyNpmCache; @@ -529,8 +534,10 @@ mod test { assert_eq!( cache.package_folder_for_id( &NpmPackageCacheFolderId { - name: "json".to_string(), - version: Version::parse_from_npm("1.2.5").unwrap(), + nv: NpmPackageNv { + name: "json".to_string(), + version: Version::parse_from_npm("1.2.5").unwrap(), + }, copy_index: 0, }, ®istry_url, @@ -544,8 +551,10 @@ mod test { assert_eq!( cache.package_folder_for_id( &NpmPackageCacheFolderId { - name: "json".to_string(), - version: Version::parse_from_npm("1.2.5").unwrap(), + nv: NpmPackageNv { + name: "json".to_string(), + version: Version::parse_from_npm("1.2.5").unwrap(), + }, copy_index: 1, }, ®istry_url, @@ -559,8 +568,10 @@ mod test { assert_eq!( cache.package_folder_for_id( &NpmPackageCacheFolderId { - name: "JSON".to_string(), - version: Version::parse_from_npm("2.1.5").unwrap(), + nv: NpmPackageNv { + name: "JSON".to_string(), + version: Version::parse_from_npm("2.1.5").unwrap(), + }, copy_index: 0, }, ®istry_url, @@ -574,8 +585,10 @@ mod test { assert_eq!( cache.package_folder_for_id( &NpmPackageCacheFolderId { - name: "@types/JSON".to_string(), - version: Version::parse_from_npm("2.1.5").unwrap(), + nv: NpmPackageNv { + name: "@types/JSON".to_string(), + version: Version::parse_from_npm("2.1.5").unwrap(), + }, copy_index: 0, }, ®istry_url, |