summaryrefslogtreecommitdiff
path: root/cli/npm/cache.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/npm/cache.rs')
-rw-r--r--cli/npm/cache.rs61
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,
},
&registry_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,
},
&registry_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,
},
&registry_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,
},
&registry_url,