diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-07-10 14:46:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-10 14:46:25 -0400 |
commit | a49d0bd10ba2a4745c291f3f413d97396213e4ec (patch) | |
tree | 0c63c25304f465e969d2bcfb8bd71df8575c4033 /cli/resolver.rs | |
parent | 4d2d764816d266e42f3b2251248b100abb667c83 (diff) |
fix(check): CJS types importing dual ESM/CJS package should prefer CJS types (#24492)
Closes #16370
Diffstat (limited to 'cli/resolver.rs')
-rw-r--r-- | cli/resolver.rs | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/cli/resolver.rs b/cli/resolver.rs index e035a313c..7b8766ee9 100644 --- a/cli/resolver.rs +++ b/cli/resolver.rs @@ -27,6 +27,7 @@ use deno_runtime::deno_node::errors::ClosestPkgJsonError; use deno_runtime::deno_node::errors::UrlToNodeResolutionError; use deno_runtime::deno_node::is_builtin_node_module; use deno_runtime::deno_node::parse_npm_pkg_name; +use deno_runtime::deno_node::NodeModuleKind; use deno_runtime::deno_node::NodeResolution; use deno_runtime::deno_node::NodeResolutionMode; use deno_runtime::deno_node::NodeResolver; @@ -66,8 +67,7 @@ pub struct ModuleCodeStringSource { #[derive(Debug)] pub struct CliNodeResolver { - // not used in the LSP - cjs_resolutions: Option<Arc<CjsResolutionStore>>, + cjs_resolutions: Arc<CjsResolutionStore>, fs: Arc<dyn deno_fs::FileSystem>, node_resolver: Arc<NodeResolver>, // todo(dsherret): remove this pub(crate) @@ -76,7 +76,7 @@ pub struct CliNodeResolver { impl CliNodeResolver { pub fn new( - cjs_resolutions: Option<Arc<CjsResolutionStore>>, + cjs_resolutions: Arc<CjsResolutionStore>, fs: Arc<dyn deno_fs::FileSystem>, node_resolver: Arc<NodeResolver>, npm_resolver: Arc<dyn CliNpmResolver>, @@ -120,10 +120,16 @@ impl CliNodeResolver { referrer: &ModuleSpecifier, mode: NodeResolutionMode, ) -> Result<Option<NodeResolution>, AnyError> { + let referrer_kind = if self.cjs_resolutions.contains(referrer) { + NodeModuleKind::Cjs + } else { + NodeModuleKind::Esm + }; + self.handle_node_resolve_result( self .node_resolver - .resolve(specifier, referrer, mode) + .resolve(specifier, referrer, referrer_kind, mode) .map_err(AnyError::from), ) } @@ -241,16 +247,12 @@ impl CliNodeResolver { let specifier = crate::node::resolve_specifier_into_node_modules(&specifier); if self.in_npm_package(&specifier) { - if let Some(cjs_resolutions) = &self.cjs_resolutions { - let resolution = - self.node_resolver.url_to_node_resolution(specifier)?; - if let NodeResolution::CommonJs(specifier) = &resolution { - cjs_resolutions.insert(specifier.clone()); - } - return Ok(resolution.into_url()); - } else { - return Ok(specifier); + let resolution = + self.node_resolver.url_to_node_resolution(specifier)?; + if let NodeResolution::CommonJs(specifier) = &resolution { + self.cjs_resolutions.insert(specifier.clone()); } + return Ok(resolution.into_url()); } } @@ -272,9 +274,7 @@ impl CliNodeResolver { Some(response) => { if let NodeResolution::CommonJs(specifier) = &response { // remember that this was a common js resolution - if let Some(cjs_resolutions) = &self.cjs_resolutions { - cjs_resolutions.insert(specifier.clone()); - } + self.cjs_resolutions.insert(specifier.clone()); } Ok(Some(response)) } |