diff options
Diffstat (limited to 'cli/npm')
-rw-r--r-- | cli/npm/cache_dir.rs | 61 | ||||
-rw-r--r-- | cli/npm/common.rs | 24 | ||||
-rw-r--r-- | cli/npm/managed/cache.rs | 37 | ||||
-rw-r--r-- | cli/npm/managed/mod.rs | 28 | ||||
-rw-r--r-- | cli/npm/managed/registry.rs | 38 | ||||
-rw-r--r-- | cli/npm/managed/resolvers/common.rs | 11 | ||||
-rw-r--r-- | cli/npm/managed/resolvers/global.rs | 51 | ||||
-rw-r--r-- | cli/npm/managed/resolvers/local.rs | 36 | ||||
-rw-r--r-- | cli/npm/managed/resolvers/mod.rs | 4 |
9 files changed, 148 insertions, 142 deletions
diff --git a/cli/npm/cache_dir.rs b/cli/npm/cache_dir.rs index 1c28a9b81..d51913775 100644 --- a/cli/npm/cache_dir.rs +++ b/cli/npm/cache_dir.rs @@ -20,10 +20,13 @@ pub struct NpmCacheDir { root_dir: PathBuf, // cached url representation of the root directory root_dir_url: Url, + // A list of all registry that were discovered via `.npmrc` files + // turned into a safe directory names. + known_registries_dirnames: Vec<String>, } impl NpmCacheDir { - pub fn new(root_dir: PathBuf) -> Self { + pub fn new(root_dir: PathBuf, known_registries_urls: Vec<Url>) -> Self { fn try_get_canonicalized_root_dir( root_dir: &Path, ) -> Result<PathBuf, AnyError> { @@ -38,12 +41,27 @@ impl NpmCacheDir { let root_dir = try_get_canonicalized_root_dir(&root_dir).unwrap_or(root_dir); let root_dir_url = Url::from_directory_path(&root_dir).unwrap(); + + let known_registries_dirnames: Vec<_> = known_registries_urls + .into_iter() + .map(|url| { + root_url_to_safe_local_dirname(&url) + .to_string_lossy() + .replace('\\', "/") + }) + .collect(); + Self { root_dir, root_dir_url, + known_registries_dirnames, } } + pub fn root_dir(&self) -> &Path { + &self.root_dir + } + pub fn root_dir_url(&self) -> &Url { &self.root_dir_url } @@ -88,7 +106,7 @@ impl NpmCacheDir { } } - pub fn registry_folder(&self, registry_url: &Url) -> PathBuf { + fn registry_folder(&self, registry_url: &Url) -> PathBuf { self .root_dir .join(root_url_to_safe_local_dirname(registry_url)) @@ -97,23 +115,32 @@ impl NpmCacheDir { pub fn resolve_package_folder_id_from_specifier( &self, specifier: &ModuleSpecifier, - registry_url: &Url, ) -> Option<NpmPackageCacheFolderId> { - let registry_root_dir = self - .root_dir_url - .join(&format!( - "{}/", - root_url_to_safe_local_dirname(registry_url) - .to_string_lossy() - .replace('\\', "/") - )) - // this not succeeding indicates a fatal issue, so unwrap - .unwrap(); - let mut relative_url = registry_root_dir.make_relative(specifier)?; - if relative_url.starts_with("../") { - return None; + let mut maybe_relative_url = None; + + // Iterate through known registries and try to get a match. + for registry_dirname in &self.known_registries_dirnames { + let registry_root_dir = self + .root_dir_url + .join(&format!("{}/", registry_dirname)) + // this not succeeding indicates a fatal issue, so unwrap + .unwrap(); + + let Some(relative_url) = registry_root_dir.make_relative(specifier) + else { + continue; + }; + + if relative_url.starts_with("../") { + continue; + } + + maybe_relative_url = Some(relative_url); + break; } + let mut relative_url = maybe_relative_url?; + // base32 decode the url if it starts with an underscore // * Ex. _{base32(package_name)}/ if let Some(end_url) = relative_url.strip_prefix('_') { @@ -194,8 +221,8 @@ mod test { fn should_get_package_folder() { let deno_dir = crate::cache::DenoDir::new(None).unwrap(); let root_dir = deno_dir.npm_folder_path(); - let cache = NpmCacheDir::new(root_dir.clone()); let registry_url = Url::parse("https://registry.npmjs.org/").unwrap(); + let cache = NpmCacheDir::new(root_dir.clone(), vec![registry_url.clone()]); assert_eq!( cache.package_folder_for_id( diff --git a/cli/npm/common.rs b/cli/npm/common.rs index e40924838..bf45aa5b8 100644 --- a/cli/npm/common.rs +++ b/cli/npm/common.rs @@ -1,5 +1,8 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +use deno_npm::npm_rc::RegistryConfig; +use reqwest::header; + /// Gets the corresponding @types package for the provided package name. pub fn types_package_name(package_name: &str) -> String { debug_assert!(!package_name.starts_with("@types/")); @@ -8,6 +11,27 @@ pub fn types_package_name(package_name: &str) -> String { format!("@types/{}", package_name.replace('/', "__")) } +// TODO(bartlomieju): support more auth methods besides token and basic auth +pub fn maybe_auth_header_for_npm_registry( + registry_config: &RegistryConfig, +) -> Option<(header::HeaderName, header::HeaderValue)> { + if let Some(token) = registry_config.auth_token.as_ref() { + return Some(( + header::AUTHORIZATION, + header::HeaderValue::from_str(&format!("Bearer {}", token)).unwrap(), + )); + } + + if let Some(auth) = registry_config.auth.as_ref() { + return Some(( + header::AUTHORIZATION, + header::HeaderValue::from_str(&format!("Basic {}", auth)).unwrap(), + )); + } + + None +} + #[cfg(test)] mod test { use super::types_package_name; diff --git a/cli/npm/managed/cache.rs b/cli/npm/managed/cache.rs index 44b98fcee..4056c97ad 100644 --- a/cli/npm/managed/cache.rs +++ b/cli/npm/managed/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_npm::npm_rc::ResolvedNpmRc; use deno_npm::registry::NpmPackageVersionDistInfo; use deno_npm::NpmPackageCacheFolderId; use deno_runtime::deno_fs; @@ -20,6 +21,7 @@ use deno_semver::package::PackageNv; use crate::args::CacheSetting; use crate::http_util::HttpClient; +use crate::npm::common::maybe_auth_header_for_npm_registry; use crate::npm::NpmCacheDir; use crate::util::fs::hard_link_dir_recursive; use crate::util::progress_bar::ProgressBar; @@ -35,6 +37,7 @@ pub struct NpmCache { fs: Arc<dyn deno_fs::FileSystem>, http_client: Arc<HttpClient>, progress_bar: ProgressBar, + pub(crate) npmrc: Arc<ResolvedNpmRc>, /// ensures a package is only downloaded once per run previously_reloaded_packages: Mutex<HashSet<PackageNv>>, } @@ -46,6 +49,7 @@ impl NpmCache { fs: Arc<dyn deno_fs::FileSystem>, http_client: Arc<HttpClient>, progress_bar: ProgressBar, + npmrc: Arc<ResolvedNpmRc>, ) -> Self { Self { cache_dir, @@ -54,6 +58,7 @@ impl NpmCache { http_client, progress_bar, previously_reloaded_packages: Default::default(), + npmrc, } } @@ -82,10 +87,9 @@ impl NpmCache { &self, package: &PackageNv, dist: &NpmPackageVersionDistInfo, - registry_url: &Url, ) -> Result<(), AnyError> { self - .ensure_package_inner(package, dist, registry_url) + .ensure_package_inner(package, dist) .await .with_context(|| format!("Failed caching npm package '{package}'.")) } @@ -94,8 +98,10 @@ impl NpmCache { &self, package_nv: &PackageNv, dist: &NpmPackageVersionDistInfo, - registry_url: &Url, ) -> Result<(), AnyError> { + let registry_url = self.npmrc.get_registry_url(&package_nv.name); + let registry_config = self.npmrc.get_registry_config(&package_nv.name); + let package_folder = self .cache_dir .package_folder_for_name_and_version(package_nv, registry_url); @@ -118,10 +124,12 @@ impl NpmCache { bail!("Tarball URL was empty."); } + let maybe_auth_header = maybe_auth_header_for_npm_registry(registry_config); + let guard = self.progress_bar.update(&dist.tarball); let maybe_bytes = self .http_client - .download_with_progress(&dist.tarball, &guard) + .download_with_progress(&dist.tarball, maybe_auth_header, &guard) .await?; match maybe_bytes { Some(bytes) => { @@ -164,8 +172,8 @@ impl NpmCache { pub fn ensure_copy_package( &self, folder_id: &NpmPackageCacheFolderId, - registry_url: &Url, ) -> Result<(), AnyError> { + let registry_url = self.npmrc.get_registry_url(&folder_id.nv.name); assert_ne!(folder_id.copy_index, 0); let package_folder = self .cache_dir @@ -192,40 +200,37 @@ impl NpmCache { Ok(()) } - pub fn package_folder_for_id( - &self, - id: &NpmPackageCacheFolderId, - registry_url: &Url, - ) -> PathBuf { + pub fn package_folder_for_id(&self, id: &NpmPackageCacheFolderId) -> PathBuf { + let registry_url = self.npmrc.get_registry_url(&id.nv.name); self.cache_dir.package_folder_for_id(id, registry_url) } pub fn package_folder_for_name_and_version( &self, package: &PackageNv, - registry_url: &Url, ) -> PathBuf { + let registry_url = self.npmrc.get_registry_url(&package.name); self .cache_dir .package_folder_for_name_and_version(package, registry_url) } - pub fn package_name_folder(&self, name: &str, registry_url: &Url) -> PathBuf { + pub fn package_name_folder(&self, name: &str) -> PathBuf { + let registry_url = self.npmrc.get_registry_url(name); self.cache_dir.package_name_folder(name, registry_url) } - pub fn registry_folder(&self, registry_url: &Url) -> PathBuf { - self.cache_dir.registry_folder(registry_url) + pub fn root_folder(&self) -> PathBuf { + self.cache_dir.root_dir().to_owned() } pub fn resolve_package_folder_id_from_specifier( &self, specifier: &ModuleSpecifier, - registry_url: &Url, ) -> Option<NpmPackageCacheFolderId> { self .cache_dir - .resolve_package_folder_id_from_specifier(specifier, registry_url) + .resolve_package_folder_id_from_specifier(specifier) } } diff --git a/cli/npm/managed/mod.rs b/cli/npm/managed/mod.rs index 0625911d3..3a2657cfb 100644 --- a/cli/npm/managed/mod.rs +++ b/cli/npm/managed/mod.rs @@ -9,8 +9,8 @@ use deno_core::anyhow::Context; use deno_core::error::AnyError; use deno_core::parking_lot::Mutex; use deno_core::serde_json; -use deno_core::url::Url; use deno_graph::NpmPackageReqResolution; +use deno_npm::npm_rc::ResolvedNpmRc; use deno_npm::registry::NpmRegistryApi; use deno_npm::resolution::NpmResolutionSnapshot; use deno_npm::resolution::PackageReqNotFoundError; @@ -72,7 +72,7 @@ pub struct CliNpmResolverManagedCreateOptions { pub maybe_node_modules_path: Option<PathBuf>, pub npm_system_info: NpmSystemInfo, pub package_json_installer: CliNpmResolverManagedPackageJsonInstallerOption, - pub npm_registry_url: Url, + pub npmrc: Arc<ResolvedNpmRc>, } pub async fn create_managed_npm_resolver_for_lsp( @@ -96,7 +96,6 @@ pub async fn create_managed_npm_resolver_for_lsp( options.text_only_progress_bar, options.maybe_node_modules_path, options.package_json_installer, - options.npm_registry_url, options.npm_system_info, ) } @@ -116,7 +115,6 @@ pub async fn create_managed_npm_resolver( options.text_only_progress_bar, options.maybe_node_modules_path, options.package_json_installer, - options.npm_registry_url, options.npm_system_info, )) } @@ -131,7 +129,6 @@ fn create_inner( text_only_progress_bar: crate::util::progress_bar::ProgressBar, node_modules_dir_path: Option<PathBuf>, package_json_installer: CliNpmResolverManagedPackageJsonInstallerOption, - npm_registry_url: Url, npm_system_info: NpmSystemInfo, ) -> Arc<dyn CliNpmResolver> { let resolution = Arc::new(NpmResolution::from_serialized( @@ -143,7 +140,6 @@ fn create_inner( fs.clone(), npm_cache.clone(), &text_only_progress_bar, - npm_registry_url, resolution.clone(), node_modules_dir_path, npm_system_info.clone(), @@ -175,11 +171,15 @@ fn create_inner( fn create_cache(options: &CliNpmResolverManagedCreateOptions) -> Arc<NpmCache> { Arc::new(NpmCache::new( - NpmCacheDir::new(options.npm_global_cache_dir.clone()), + NpmCacheDir::new( + options.npm_global_cache_dir.clone(), + options.npmrc.get_all_known_registries_urls(), + ), options.cache_setting.clone(), options.fs.clone(), options.http_client.clone(), options.text_only_progress_bar.clone(), + options.npmrc.clone(), )) } @@ -188,9 +188,9 @@ fn create_api( npm_cache: Arc<NpmCache>, ) -> Arc<CliNpmRegistryApi> { Arc::new(CliNpmRegistryApi::new( - options.npm_registry_url.clone(), npm_cache.clone(), options.http_client.clone(), + options.npmrc.clone(), options.text_only_progress_bar.clone(), )) } @@ -483,15 +483,8 @@ impl ManagedCliNpmResolver { .map_err(|err| err.into()) } - pub fn registry_base_url(&self) -> &ModuleSpecifier { - self.api.base_url() - } - - pub fn registry_folder_in_global_cache( - &self, - registry_url: &ModuleSpecifier, - ) -> PathBuf { - self.global_npm_cache.registry_folder(registry_url) + pub fn global_cache_root_folder(&self) -> PathBuf { + self.global_npm_cache.root_folder() } } @@ -564,7 +557,6 @@ impl CliNpmResolver for ManagedCliNpmResolver { self.fs.clone(), self.global_npm_cache.clone(), &self.progress_bar, - self.api.base_url().clone(), npm_resolution, self.root_node_modules_path().map(ToOwned::to_owned), self.npm_system_info.clone(), diff --git a/cli/npm/managed/registry.rs b/cli/npm/managed/registry.rs index 3199a3c32..391ff0640 100644 --- a/cli/npm/managed/registry.rs +++ b/cli/npm/managed/registry.rs @@ -18,6 +18,8 @@ use deno_core::futures::FutureExt; use deno_core::parking_lot::Mutex; use deno_core::serde_json; use deno_core::url::Url; +use deno_npm::npm_rc::RegistryConfig; +use deno_npm::npm_rc::ResolvedNpmRc; use deno_npm::registry::NpmPackageInfo; use deno_npm::registry::NpmRegistryApi; use deno_npm::registry::NpmRegistryPackageInfoLoadError; @@ -25,6 +27,7 @@ use deno_npm::registry::NpmRegistryPackageInfoLoadError; use crate::args::CacheSetting; use crate::cache::CACHE_PERM; use crate::http_util::HttpClient; +use crate::npm::common::maybe_auth_header_for_npm_registry; use crate::util::fs::atomic_write_file; use crate::util::progress_bar::ProgressBar; use crate::util::sync::AtomicFlag; @@ -36,17 +39,17 @@ pub struct CliNpmRegistryApi(Option<Arc<CliNpmRegistryApiInner>>); impl CliNpmRegistryApi { pub fn new( - base_url: Url, cache: Arc<NpmCache>, http_client: Arc<HttpClient>, + npmrc: Arc<ResolvedNpmRc>, progress_bar: ProgressBar, ) -> Self { Self(Some(Arc::new(CliNpmRegistryApiInner { - base_url, cache, force_reload_flag: Default::default(), mem_cache: Default::default(), previously_reloaded_packages: Default::default(), + npmrc, http_client, progress_bar, }))) @@ -64,10 +67,6 @@ impl CliNpmRegistryApi { self.inner().get_cached_package_info(name) } - pub fn base_url(&self) -> &Url { - &self.inner().base_url - } - fn inner(&self) -> &Arc<CliNpmRegistryApiInner> { // this panicking indicates a bug in the code where this // wasn't initialized @@ -121,12 +120,12 @@ enum CacheItem { #[derive(Debug)] struct CliNpmRegistryApiInner { - base_url: Url, cache: Arc<NpmCache>, force_reload_flag: AtomicFlag, mem_cache: Mutex<HashMap<String, CacheItem>>, previously_reloaded_packages: Mutex<HashSet<String>>, http_client: Arc<HttpClient>, + npmrc: Arc<ResolvedNpmRc>, progress_bar: ProgressBar, } @@ -273,13 +272,20 @@ impl CliNpmRegistryApiInner { &self, name: &str, ) -> Result<Option<NpmPackageInfo>, AnyError> { + let registry_url = self.npmrc.get_registry_url(name); + let registry_config = self.npmrc.get_registry_config(name); + self - .load_package_info_from_registry_inner(name) + .load_package_info_from_registry_inner( + name, + registry_url, + registry_config, + ) .await .with_context(|| { format!( "Error getting response at {} for package \"{}\"", - self.get_package_url(name), + self.get_package_url(name, registry_url), name ) }) @@ -288,6 +294,8 @@ impl CliNpmRegistryApiInner { async fn load_package_info_from_registry_inner( &self, name: &str, + registry_url: &Url, + registry_config: &RegistryConfig, ) -> Result<Option<NpmPackageInfo>, AnyError> { if *self.cache.cache_setting() == CacheSetting::Only { return Err(custom_error( @@ -298,12 +306,14 @@ impl CliNpmRegistryApiInner { )); } - let package_url = self.get_package_url(name); + let package_url = self.get_package_url(name, registry_url); let guard = self.progress_bar.update(package_url.as_str()); + let maybe_auth_header = maybe_auth_header_for_npm_registry(registry_config); + let maybe_bytes = self .http_client - .download_with_progress(package_url, &guard) + .download_with_progress(package_url, maybe_auth_header, &guard) .await?; match maybe_bytes { Some(bytes) => { @@ -315,7 +325,7 @@ impl CliNpmRegistryApiInner { } } - fn get_package_url(&self, name: &str) -> Url { + fn get_package_url(&self, name: &str, registry_url: &Url) -> Url { // list of all characters used in npm packages: // !, ', (, ), *, -, ., /, [0-9], @, [A-Za-z], _, ~ const ASCII_SET: percent_encoding::AsciiSet = @@ -332,11 +342,11 @@ impl CliNpmRegistryApiInner { .remove(b'_') .remove(b'~'); let name = percent_encoding::utf8_percent_encode(name, &ASCII_SET); - self.base_url.join(&name.to_string()).unwrap() + registry_url.join(&name.to_string()).unwrap() } fn get_package_file_cache_path(&self, name: &str) -> PathBuf { - let name_folder_path = self.cache.package_name_folder(name, &self.base_url); + let name_folder_path = self.cache.package_name_folder(name); name_folder_path.join("registry.json") } diff --git a/cli/npm/managed/resolvers/common.rs b/cli/npm/managed/resolvers/common.rs index a326b562b..b010bdd7c 100644 --- a/cli/npm/managed/resolvers/common.rs +++ b/cli/npm/managed/resolvers/common.rs @@ -44,11 +44,6 @@ pub trait NpmPackageFsResolver: Send + Sync { mode: NodeResolutionMode, ) -> Result<PathBuf, AnyError>; - fn resolve_package_folder_from_specifier( - &self, - specifier: &ModuleSpecifier, - ) -> Result<Option<PathBuf>, AnyError>; - fn resolve_package_cache_folder_id_from_specifier( &self, specifier: &ModuleSpecifier, @@ -132,16 +127,12 @@ impl RegistryReadPermissionChecker { pub async fn cache_packages( packages: Vec<NpmResolutionPackage>, cache: &Arc<NpmCache>, - registry_url: &Url, ) -> Result<(), AnyError> { let mut handles = Vec::with_capacity(packages.len()); for package in packages { let cache = cache.clone(); - let registry_url = registry_url.clone(); let handle = spawn(async move { - cache - .ensure_package(&package.id.nv, &package.dist, ®istry_url) - .await + cache.ensure_package(&package.id.nv, &package.dist).await }); handles.push(handle); } diff --git a/cli/npm/managed/resolvers/global.rs b/cli/npm/managed/resolvers/global.rs index 4b3c9d613..cfc57e591 100644 --- a/cli/npm/managed/resolvers/global.rs +++ b/cli/npm/managed/resolvers/global.rs @@ -32,7 +32,6 @@ use super::common::RegistryReadPermissionChecker; pub struct GlobalNpmPackageResolver { cache: Arc<NpmCache>, resolution: Arc<NpmResolution>, - registry_url: Url, system_info: NpmSystemInfo, registry_read_permission_checker: RegistryReadPermissionChecker, } @@ -41,18 +40,16 @@ impl GlobalNpmPackageResolver { pub fn new( fs: Arc<dyn FileSystem>, cache: Arc<NpmCache>, - registry_url: Url, resolution: Arc<NpmResolution>, system_info: NpmSystemInfo, ) -> Self { Self { cache: cache.clone(), resolution, - registry_url: registry_url.clone(), system_info, registry_read_permission_checker: RegistryReadPermissionChecker::new( fs, - cache.registry_folder(®istry_url), + cache.root_folder(), ), } } @@ -84,11 +81,7 @@ impl NpmPackageFsResolver for GlobalNpmPackageResolver { .resolution .resolve_pkg_cache_folder_id_from_pkg_id(id) .unwrap(); - Ok( - self - .cache - .package_folder_for_id(&folder_id, &self.registry_url), - ) + Ok(self.cache.package_folder_for_id(&folder_id)) } fn resolve_package_folder_from_package( @@ -99,7 +92,7 @@ impl NpmPackageFsResolver for GlobalNpmPackageResolver { ) -> Result<PathBuf, AnyError> { let Some(referrer_pkg_id) = self .cache - .resolve_package_folder_id_from_specifier(referrer, &self.registry_url) + .resolve_package_folder_id_from_specifier(referrer) else { bail!("could not find npm package for '{}'", referrer); }; @@ -119,32 +112,14 @@ impl NpmPackageFsResolver for GlobalNpmPackageResolver { self.package_folder(&pkg.id) } - fn resolve_package_folder_from_specifier( - &self, - specifier: &ModuleSpecifier, - ) -> Result<Option<PathBuf>, AnyError> { - let Some(pkg_folder_id) = self - .cache - .resolve_package_folder_id_from_specifier(specifier, &self.registry_url) - else { - return Ok(None); - }; - Ok(Some( - self - .cache - .package_folder_for_id(&pkg_folder_id, &self.registry_url), - )) - } - fn resolve_package_cache_folder_id_from_specifier( &self, specifier: &ModuleSpecifier, ) -> Result<Option<NpmPackageCacheFolderId>, AnyError> { Ok( - self.cache.resolve_package_folder_id_from_specifier( - specifier, - &self.registry_url, - ), + self + .cache + .resolve_package_folder_id_from_specifier(specifier), ) } @@ -153,19 +128,13 @@ impl NpmPackageFsResolver for GlobalNpmPackageResolver { .resolution .all_system_packages_partitioned(&self.system_info); - cache_packages( - package_partitions.packages, - &self.cache, - &self.registry_url, - ) - .await?; + cache_packages(package_partitions.packages, &self.cache).await?; // create the copy package folders for copy in package_partitions.copy_packages { - self.cache.ensure_copy_package( - ©.get_package_cache_folder_id(), - &self.registry_url, - )?; + self + .cache + .ensure_copy_package(©.get_package_cache_folder_id())?; } Ok(()) diff --git a/cli/npm/managed/resolvers/local.rs b/cli/npm/managed/resolvers/local.rs index f8d69d148..9d0ca3f8c 100644 --- a/cli/npm/managed/resolvers/local.rs +++ b/cli/npm/managed/resolvers/local.rs @@ -58,7 +58,6 @@ pub struct LocalNpmPackageResolver { cache: Arc<NpmCache>, progress_bar: ProgressBar, resolution: Arc<NpmResolution>, - registry_url: Url, root_node_modules_path: PathBuf, root_node_modules_url: Url, system_info: NpmSystemInfo, @@ -70,7 +69,6 @@ impl LocalNpmPackageResolver { fs: Arc<dyn deno_fs::FileSystem>, cache: Arc<NpmCache>, progress_bar: ProgressBar, - registry_url: Url, node_modules_folder: PathBuf, resolution: Arc<NpmResolution>, system_info: NpmSystemInfo, @@ -80,7 +78,6 @@ impl LocalNpmPackageResolver { cache, progress_bar, resolution, - registry_url, root_node_modules_url: Url::from_directory_path(&node_modules_folder) .unwrap(), root_node_modules_path: node_modules_folder.clone(), @@ -126,6 +123,17 @@ impl LocalNpmPackageResolver { .map(Some) .map_err(|err| err.into()) } + + fn resolve_package_folder_from_specifier( + &self, + specifier: &ModuleSpecifier, + ) -> Result<Option<PathBuf>, AnyError> { + let Some(local_path) = self.resolve_folder_for_specifier(specifier)? else { + return Ok(None); + }; + let package_root_path = self.resolve_package_root(&local_path); + Ok(Some(package_root_path)) + } } #[async_trait] @@ -202,17 +210,6 @@ impl NpmPackageFsResolver for LocalNpmPackageResolver { ); } - fn resolve_package_folder_from_specifier( - &self, - specifier: &ModuleSpecifier, - ) -> Result<Option<PathBuf>, AnyError> { - let Some(local_path) = self.resolve_folder_for_specifier(specifier)? else { - return Ok(None); - }; - let package_root_path = self.resolve_package_root(&local_path); - Ok(Some(package_root_path)) - } - fn resolve_package_cache_folder_id_from_specifier( &self, specifier: &ModuleSpecifier, @@ -231,7 +228,6 @@ impl NpmPackageFsResolver for LocalNpmPackageResolver { &self.resolution.snapshot(), &self.cache, &self.progress_bar, - &self.registry_url, &self.root_node_modules_path, &self.system_info, ) @@ -254,7 +250,6 @@ async fn sync_resolution_with_fs( snapshot: &NpmResolutionSnapshot, cache: &Arc<NpmCache>, progress_bar: &ProgressBar, - registry_url: &Url, root_node_modules_dir_path: &Path, system_info: &NpmSystemInfo, ) -> Result<(), AnyError> { @@ -317,12 +312,9 @@ async fn sync_resolution_with_fs( let pb = progress_bar.clone(); let cache = cache.clone(); - let registry_url = registry_url.clone(); let package = package.clone(); let handle = spawn(async move { - cache - .ensure_package(&package.id.nv, &package.dist, ®istry_url) - .await?; + cache.ensure_package(&package.id.nv, &package.dist).await?; let pb_guard = pb.update_with_prompt( ProgressMessagePrompt::Initialize, &package.id.nv.to_string(), @@ -332,8 +324,8 @@ async fn sync_resolution_with_fs( join_package_name(&sub_node_modules, &package.id.nv.name); fs::create_dir_all(&package_path) .with_context(|| format!("Creating '{}'", folder_path.display()))?; - let cache_folder = cache - .package_folder_for_name_and_version(&package.id.nv, ®istry_url); + let cache_folder = + cache.package_folder_for_name_and_version(&package.id.nv); if hard_link_dir_recursive(&cache_folder, &package_path).is_err() { // Fallback to copying the directory. // diff --git a/cli/npm/managed/resolvers/mod.rs b/cli/npm/managed/resolvers/mod.rs index dfd291afc..d5472344a 100644 --- a/cli/npm/managed/resolvers/mod.rs +++ b/cli/npm/managed/resolvers/mod.rs @@ -7,7 +7,6 @@ mod local; use std::path::PathBuf; use std::sync::Arc; -use deno_core::url::Url; use deno_npm::NpmSystemInfo; use deno_runtime::deno_fs::FileSystem; @@ -25,7 +24,6 @@ pub fn create_npm_fs_resolver( fs: Arc<dyn FileSystem>, cache: Arc<NpmCache>, progress_bar: &ProgressBar, - registry_url: Url, resolution: Arc<NpmResolution>, maybe_node_modules_path: Option<PathBuf>, system_info: NpmSystemInfo, @@ -35,7 +33,6 @@ pub fn create_npm_fs_resolver( fs, cache, progress_bar.clone(), - registry_url, node_modules_folder, resolution, system_info, @@ -43,7 +40,6 @@ pub fn create_npm_fs_resolver( None => Arc::new(GlobalNpmPackageResolver::new( fs, cache, - registry_url, resolution, system_info, )), |