summaryrefslogtreecommitdiff
path: root/cli/factory.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/factory.rs')
-rw-r--r--cli/factory.rs18
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(_) => {