diff options
Diffstat (limited to 'cli/factory.rs')
-rw-r--r-- | cli/factory.rs | 29 |
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(), ))) }) |