diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2023-08-01 20:49:09 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-02 00:49:09 +0000 |
commit | 1cefa831fd74b14121494045a347024502d74e34 (patch) | |
tree | cc7791cf674e427fe4165262db416e6c537e99a3 /cli/factory.rs | |
parent | 36ae37604a0ddab4349df6eb6fafb8ae39fd20fc (diff) |
feat(unstable): optional `deno_modules` directory (#19977)
Closes #15633
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(), ))) }) |