summaryrefslogtreecommitdiff
path: root/cli/npm/managed/registry.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/npm/managed/registry.rs')
-rw-r--r--cli/npm/managed/registry.rs38
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")
}