summaryrefslogtreecommitdiff
path: root/cli/factory.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/factory.rs')
-rw-r--r--cli/factory.rs29
1 files changed, 28 insertions, 1 deletions
diff --git a/cli/factory.rs b/cli/factory.rs
index 28c436e35..f78611553 100644
--- a/cli/factory.rs
+++ b/cli/factory.rs
@@ -12,7 +12,9 @@ use crate::cache::Caches;
use crate::cache::DenoDir;
use crate::cache::DenoDirProvider;
use crate::cache::EmitCache;
+use crate::cache::GlobalHttpCache;
use crate::cache::HttpCache;
+use crate::cache::LocalHttpCache;
use crate::cache::NodeAnalysisCache;
use crate::cache::ParsedSourceCache;
use crate::emit::Emitter;
@@ -135,6 +137,8 @@ struct CliFactoryServices {
deno_dir_provider: Deferred<Arc<DenoDirProvider>>,
caches: Deferred<Arc<Caches>>,
file_fetcher: Deferred<Arc<FileFetcher>>,
+ global_http_cache: Deferred<Arc<GlobalHttpCache>>,
+ http_cache: Deferred<Arc<dyn HttpCache>>,
http_client: Deferred<Arc<HttpClient>>,
emit_cache: Deferred<EmitCache>,
emitter: Deferred<Arc<Emitter>>,
@@ -233,6 +237,28 @@ impl CliFactory {
.get_or_init(|| ProgressBar::new(ProgressBarStyle::TextOnly))
}
+ pub fn global_http_cache(&self) -> Result<&Arc<GlobalHttpCache>, AnyError> {
+ self.services.global_http_cache.get_or_try_init(|| {
+ Ok(Arc::new(GlobalHttpCache::new(
+ self.deno_dir()?.deps_folder_path(),
+ )))
+ })
+ }
+
+ pub fn http_cache(&self) -> Result<&Arc<dyn HttpCache>, AnyError> {
+ self.services.http_cache.get_or_try_init(|| {
+ let global_cache = self.global_http_cache()?.clone();
+ match self.options.deno_modules_dir_path() {
+ Some(local_path) => {
+ let local_cache =
+ LocalHttpCache::new(local_path.clone(), global_cache);
+ Ok(Arc::new(local_cache))
+ }
+ None => Ok(global_cache),
+ }
+ })
+ }
+
pub fn http_client(&self) -> &Arc<HttpClient> {
self.services.http_client.get_or_init(|| {
Arc::new(HttpClient::new(
@@ -245,7 +271,7 @@ impl CliFactory {
pub fn file_fetcher(&self) -> Result<&Arc<FileFetcher>, AnyError> {
self.services.file_fetcher.get_or_try_init(|| {
Ok(Arc::new(FileFetcher::new(
- HttpCache::new(self.deno_dir()?.deps_folder_path()),
+ self.http_cache()?.clone(),
self.options.cache_setting(),
!self.options.no_remote(),
self.http_client().clone(),
@@ -519,6 +545,7 @@ impl CliFactory {
self.maybe_file_watcher_reporter().clone(),
self.emit_cache()?.clone(),
self.file_fetcher()?.clone(),
+ self.global_http_cache()?.clone(),
self.type_checker().await?.clone(),
)))
})