diff options
Diffstat (limited to 'cli/npm/managed/registry.rs')
-rw-r--r-- | cli/npm/managed/registry.rs | 38 |
1 files changed, 24 insertions, 14 deletions
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") } |