From 1cf7f16a6d8aec3a0ae439309e606d6f20541c1e Mon Sep 17 00:00:00 2001 From: Nyannyacha Date: Tue, 22 Apr 2025 23:16:16 +0000 Subject: [PATCH] feat: allow enabling the unstable sloppy imports --- crates/deno_facade/emitter.rs | 21 ++++++++++++++++++++- deno/lib.rs | 4 ++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/crates/deno_facade/emitter.rs b/crates/deno_facade/emitter.rs index 1307b762..8990de56 100644 --- a/crates/deno_facade/emitter.rs +++ b/crates/deno_facade/emitter.rs @@ -47,6 +47,8 @@ use deno::resolver::CliDenoResolverFs; use deno::resolver::CliNpmReqResolver; use deno::resolver::CliResolver; use deno::resolver::CliResolverOptions; +use deno::resolver::CliSloppyImportsResolver; +use deno::resolver::SloppyImportsCachedFs; use deno::util::fs::canonicalize_path_maybe_not_exists; use deno::DenoOptions; use deno::PermissionsContainer; @@ -115,6 +117,7 @@ pub struct EmitterFactory { resolved_npm_rc: Deferred>, resolver: Deferred>, root_permissions_container: Deferred, + sloppy_imports_resolver: Deferred>>, workspace_resolver: Deferred>, cache_strategy: Option, @@ -154,6 +157,7 @@ impl EmitterFactory { resolved_npm_rc: Default::default(), resolver: Default::default(), root_permissions_container: Default::default(), + sloppy_imports_resolver: Default::default(), workspace_resolver: Default::default(), cache_strategy: None, @@ -404,7 +408,7 @@ impl EmitterFactory { node_resolver: self.node_resolver().await?.clone(), npm_req_resolver: self.npm_req_resolver().await?.clone(), }), - sloppy_imports_resolver: None, + sloppy_imports_resolver: self.sloppy_imports_resolver()?.cloned(), workspace_resolver: self.workspace_resolver()?.clone(), is_byonm: options.use_byonm(), maybe_vendor_dir: options.vendor_dir_path(), @@ -504,6 +508,21 @@ impl EmitterFactory { }) } + pub fn sloppy_imports_resolver( + &self, + ) -> Result>, AnyError> { + self + .sloppy_imports_resolver + .get_or_try_init(|| { + Ok(self.deno_options()?.unstable_sloppy_imports().then(|| { + Arc::new(CliSloppyImportsResolver::new(SloppyImportsCachedFs::new( + self.fs().clone(), + ))) + })) + }) + .map(|maybe| maybe.as_ref()) + } + pub fn workspace_resolver( &self, ) -> Result<&Arc, anyhow::Error> { diff --git a/deno/lib.rs b/deno/lib.rs index c1b5b7fd..d2e1579a 100644 --- a/deno/lib.rs +++ b/deno/lib.rs @@ -115,6 +115,10 @@ impl DenoOptions { self.builder.unstable_detect_cjs.unwrap_or_default() } + pub fn unstable_sloppy_imports(&self) -> bool { + self.workspace().has_unstable("sloppy-imports") + } + fn byonm_enabled(&self) -> bool { self.node_modules_dir().ok().flatten() == Some(NodeModulesDirMode::Manual) }