diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-03-05 19:23:51 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-06 00:23:51 +0000 |
commit | 3eaf174bfc64b7c277899abd44ae3877538028df (patch) | |
tree | 6a99dfd592681ca4beac81aaa9e5115e3dd801d7 /cli/standalone/mod.rs | |
parent | 3fd4b882a4bd0087ebf112615aafc314bb71e594 (diff) |
fix(node): improve cjs tracking (#22673)
We were missing saying that a file is CJS when some Deno code imported
from the node_modules directory at runtime.
Diffstat (limited to 'cli/standalone/mod.rs')
-rw-r--r-- | cli/standalone/mod.rs | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/cli/standalone/mod.rs b/cli/standalone/mod.rs index 312a1841d..9dff56af1 100644 --- a/cli/standalone/mod.rs +++ b/cli/standalone/mod.rs @@ -44,6 +44,7 @@ use deno_core::RequestedModuleType; use deno_core::ResolutionKind; use deno_runtime::deno_fs; use deno_runtime::deno_node::analyze::NodeCodeTranslator; +use deno_runtime::deno_node::NodeResolutionMode; use deno_runtime::deno_node::NodeResolver; use deno_runtime::deno_tls::rustls::RootCertStore; use deno_runtime::deno_tls::RootCertStoreProvider; @@ -111,9 +112,13 @@ impl ModuleLoader for EmbeddedModuleLoader { if let Some(result) = self.shared.node_resolver.resolve_if_in_npm_package( specifier, &referrer, + NodeResolutionMode::Execution, permissions, ) { - return result; + return match result? { + Some(res) => Ok(res.into_url()), + None => Err(generic_error("not found")), + }; } let maybe_mapped = self @@ -128,18 +133,26 @@ impl ModuleLoader for EmbeddedModuleLoader { .map(|r| r.as_str()) .unwrap_or(specifier); if let Ok(reference) = NpmPackageReqReference::from_str(specifier_text) { - return self.shared.node_resolver.resolve_req_reference( - &reference, - permissions, - &referrer, - ); + return self + .shared + .node_resolver + .resolve_req_reference( + &reference, + permissions, + &referrer, + NodeResolutionMode::Execution, + ) + .map(|res| res.into_url()); } - match maybe_mapped { - Some(resolved) => Ok(resolved), - None => deno_core::resolve_import(specifier, referrer.as_str()) - .map_err(|err| err.into()), - } + let specifier = match maybe_mapped { + Some(resolved) => resolved, + None => deno_core::resolve_import(specifier, referrer.as_str())?, + }; + self + .shared + .node_resolver + .handle_if_in_node_modules(specifier) } fn load( @@ -452,7 +465,8 @@ pub async fn run( Arc::new(parse_from_json(&base, &source).unwrap().import_map) }); let cli_node_resolver = Arc::new(CliNodeResolver::new( - cjs_resolutions.clone(), + Some(cjs_resolutions.clone()), + fs.clone(), node_resolver.clone(), npm_resolver.clone(), )); |