diff options
Diffstat (limited to 'cli/factory.rs')
-rw-r--r-- | cli/factory.rs | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/cli/factory.rs b/cli/factory.rs index 3b171414f..8e20e5514 100644 --- a/cli/factory.rs +++ b/cli/factory.rs @@ -10,6 +10,7 @@ use crate::args::StorageKeyResolver; use crate::args::TsConfigType; use crate::cache::Caches; use crate::cache::DenoDir; +use crate::cache::DenoDirProvider; use crate::cache::EmitCache; use crate::cache::HttpCache; use crate::cache::NodeAnalysisCache; @@ -130,7 +131,7 @@ impl<T> Deferred<T> { #[derive(Default)] struct CliFactoryServices { - dir: Deferred<DenoDir>, + deno_dir_provider: Deferred<Arc<DenoDirProvider>>, caches: Deferred<Arc<Caches>>, file_fetcher: Deferred<Arc<FileFetcher>>, http_client: Deferred<Arc<HttpClient>>, @@ -182,16 +183,21 @@ impl CliFactory { &self.options } + pub fn deno_dir_provider(&self) -> &Arc<DenoDirProvider> { + self.services.deno_dir_provider.get_or_init(|| { + Arc::new(DenoDirProvider::new( + self.options.maybe_custom_root().clone(), + )) + }) + } + pub fn deno_dir(&self) -> Result<&DenoDir, AnyError> { - self - .services - .dir - .get_or_try_init(|| self.options.resolve_deno_dir()) + Ok(self.deno_dir_provider().get_or_create()?) } pub fn caches(&self) -> Result<&Arc<Caches>, AnyError> { self.services.caches.get_or_try_init(|| { - let caches = Arc::new(Caches::new(self.deno_dir()?.clone())); + let caches = Arc::new(Caches::new(self.deno_dir_provider().clone())); // Warm up the caches we know we'll likely need based on the CLI mode match self.options.sub_command() { DenoSubcommand::Run(_) => { |