diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs index 3a0a2ed9f4..90d0d0f888 100644 --- a/cli/lsp/documents.rs +++ b/cli/lsp/documents.rs @@ -1587,9 +1587,10 @@ fn node_resolve_npm_req_ref( .and_then(|package_folder| { npm .node_resolver - .resolve_npm_reference( + .resolve_package_subpath_from_deno_module( &package_folder, npm_req_ref.sub_path(), + referrer, NodeResolutionMode::Types, &PermissionsContainer::allow_all(), ) diff --git a/cli/module_loader.rs b/cli/module_loader.rs index 51b9ea598f..9f3a7d236d 100644 --- a/cli/module_loader.rs +++ b/cli/module_loader.rs @@ -512,6 +512,7 @@ impl ModuleLoader for CliModuleLoader { .resolve_package_sub_path( &package_folder, module.nv_reference.sub_path(), + referrer, permissions, ) .with_context(|| { @@ -726,6 +727,7 @@ impl CliNodeResolver { .resolve_package_sub_path( &package_folder, req_ref.sub_path(), + referrer, permissions, ) .with_context(|| format!("Could not resolve '{}'.", req_ref)) @@ -735,14 +737,18 @@ impl CliNodeResolver { &self, package_folder: &Path, sub_path: Option<&str>, + referrer: &ModuleSpecifier, permissions: &PermissionsContainer, ) -> Result { - self.handle_node_resolve_result(self.node_resolver.resolve_npm_reference( - package_folder, - sub_path, - NodeResolutionMode::Execution, - permissions, - )) + self.handle_node_resolve_result( + self.node_resolver.resolve_package_subpath_from_deno_module( + package_folder, + sub_path, + referrer, + NodeResolutionMode::Execution, + permissions, + ), + ) } fn handle_node_resolve_result( diff --git a/cli/tsc/mod.rs b/cli/tsc/mod.rs index c7371e0c54..c08d12e280 100644 --- a/cli/tsc/mod.rs +++ b/cli/tsc/mod.rs @@ -586,7 +586,7 @@ fn op_resolve( let maybe_result = match resolved_dep { Some(ResolutionResolved { specifier, .. }) => { - resolve_graph_specifier_types(specifier, state)? + resolve_graph_specifier_types(specifier, &referrer, state)? } _ => resolve_non_graph_specifier_types(&specifier, &referrer, state)?, }; @@ -629,6 +629,7 @@ fn op_resolve( fn resolve_graph_specifier_types( specifier: &ModuleSpecifier, + referrer: &ModuleSpecifier, state: &State, ) -> Result, AnyError> { let graph = &state.graph; @@ -663,12 +664,14 @@ fn resolve_graph_specifier_types( .as_managed() .unwrap() // should never be byonm because it won't create Module::Npm .resolve_pkg_folder_from_deno_module(module.nv_reference.nv())?; - let maybe_resolution = npm.node_resolver.resolve_npm_reference( - &package_folder, - module.nv_reference.sub_path(), - NodeResolutionMode::Types, - &PermissionsContainer::allow_all(), - )?; + let maybe_resolution = + npm.node_resolver.resolve_package_subpath_from_deno_module( + &package_folder, + module.nv_reference.sub_path(), + referrer, + NodeResolutionMode::Types, + &PermissionsContainer::allow_all(), + )?; Ok(Some(NodeResolution::into_specifier_and_media_type( maybe_resolution, ))) @@ -721,12 +724,14 @@ fn resolve_non_graph_specifier_types( let package_folder = npm .npm_resolver .resolve_pkg_folder_from_deno_module_req(npm_req_ref.req(), referrer)?; - let maybe_resolution = node_resolver.resolve_npm_reference( - &package_folder, - npm_req_ref.sub_path(), - NodeResolutionMode::Types, - &PermissionsContainer::allow_all(), - )?; + let maybe_resolution = node_resolver + .resolve_package_subpath_from_deno_module( + &package_folder, + npm_req_ref.sub_path(), + referrer, + NodeResolutionMode::Types, + &PermissionsContainer::allow_all(), + )?; Ok(Some(NodeResolution::into_specifier_and_media_type( maybe_resolution, ))) diff --git a/cli/worker.rs b/cli/worker.rs index 7a0cb53280..de8cb2018d 100644 --- a/cli/worker.rs +++ b/cli/worker.rs @@ -571,12 +571,19 @@ impl CliMainWorkerFactory { return Ok(None); } - let Some(resolution) = self.shared.node_resolver.resolve_npm_reference( - package_folder, - sub_path, - NodeResolutionMode::Execution, - permissions, - )? + // use a fake referrer since a real one doesn't exist + let referrer = + ModuleSpecifier::from_directory_path(package_folder).unwrap(); + let Some(resolution) = self + .shared + .node_resolver + .resolve_package_subpath_from_deno_module( + package_folder, + sub_path, + &referrer, + NodeResolutionMode::Execution, + permissions, + )? else { return Ok(None); }; diff --git a/ext/node/resolution.rs b/ext/node/resolution.rs index 3bc7537aca..22ab47ce64 100644 --- a/ext/node/resolution.rs +++ b/ext/node/resolution.rs @@ -325,15 +325,15 @@ impl NodeResolver { Ok(resolved) } - pub fn resolve_npm_reference( + pub fn resolve_package_subpath_from_deno_module( &self, package_dir: &Path, package_subpath: Option<&str>, + referrer: &ModuleSpecifier, mode: NodeResolutionMode, permissions: &dyn NodePermissions, ) -> Result, AnyError> { let package_json_path = package_dir.join("package.json"); - let referrer = ModuleSpecifier::from_directory_path(package_dir).unwrap(); let package_json = self.load_package_json(permissions, package_json_path.clone())?; let node_module_kind = NodeModuleKind::Esm; @@ -344,7 +344,7 @@ impl NodeResolver { .resolve_package_subpath( &package_json, &package_subpath, - &referrer, + referrer, node_module_kind, DEFAULT_CONDITIONS, mode,