diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2023-11-04 12:41:51 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-04 16:41:51 +0000 |
commit | e4c947dd2b63726ecc9b4303e03921b6839adade (patch) | |
tree | 9619bdb6649d1f460fb02ab8e448c27c95dbfa74 /cli/npm | |
parent | 0b75a7169b2e123cac04e7ffcaf16a28eb356fd0 (diff) |
fix(node): use closest package.json to resolve package.json imports (#21075)
Diffstat (limited to 'cli/npm')
-rw-r--r-- | cli/npm/byonm.rs | 44 | ||||
-rw-r--r-- | cli/npm/managed/mod.rs | 18 |
2 files changed, 3 insertions, 59 deletions
diff --git a/cli/npm/byonm.rs b/cli/npm/byonm.rs index 6ddac42e4..da36e3b53 100644 --- a/cli/npm/byonm.rs +++ b/cli/npm/byonm.rs @@ -91,16 +91,16 @@ impl NpmResolver for ByonmCliNpmResolver { fn inner( fs: &dyn FileSystem, name: &str, - package_root_path: &Path, referrer: &ModuleSpecifier, mode: NodeResolutionMode, ) -> Result<PathBuf, AnyError> { + let referrer_file = specifier_to_file_path(referrer)?; let types_pkg_name = if mode.is_types() && !name.starts_with("@types/") { Some(types_package_name(name)) } else { None }; - let mut current_folder = package_root_path; + let mut current_folder = referrer_file.parent().unwrap(); loop { let node_modules_folder = if current_folder.ends_with("node_modules") { Cow::Borrowed(current_folder) @@ -135,48 +135,10 @@ impl NpmResolver for ByonmCliNpmResolver { ); } - let package_root_path = - self.resolve_package_folder_from_path(referrer)?.unwrap(); // todo(byonm): don't unwrap - let path = inner(&*self.fs, name, &package_root_path, referrer, mode)?; + let path = inner(&*self.fs, name, referrer, mode)?; Ok(self.fs.realpath_sync(&path)?) } - fn resolve_package_folder_from_path( - &self, - specifier: &deno_core::ModuleSpecifier, - ) -> Result<Option<PathBuf>, AnyError> { - let path = specifier.to_file_path().unwrap(); // todo(byonm): don't unwrap - let path = self.fs.realpath_sync(&path)?; - if self.in_npm_package(specifier) { - let mut path = path.as_path(); - while let Some(parent) = path.parent() { - if parent - .file_name() - .and_then(|f| f.to_str()) - .map(|s| s.to_ascii_lowercase()) - .as_deref() - == Some("node_modules") - { - return Ok(Some(path.to_path_buf())); - } else { - path = parent; - } - } - } else { - // find the folder with a package.json - // todo(dsherret): not exactly correct, but good enough for a first pass - let mut path = path.as_path(); - while let Some(parent) = path.parent() { - if self.fs.exists_sync(&parent.join("package.json")) { - return Ok(Some(parent.to_path_buf())); - } else { - path = parent; - } - } - } - Ok(None) - } - fn in_npm_package(&self, specifier: &ModuleSpecifier) -> bool { specifier.scheme() == "file" && specifier diff --git a/cli/npm/managed/mod.rs b/cli/npm/managed/mod.rs index 68b5c2134..d59b81912 100644 --- a/cli/npm/managed/mod.rs +++ b/cli/npm/managed/mod.rs @@ -505,24 +505,6 @@ impl NpmResolver for ManagedCliNpmResolver { Ok(path) } - fn resolve_package_folder_from_path( - &self, - specifier: &ModuleSpecifier, - ) -> Result<Option<PathBuf>, AnyError> { - let Some(path) = self - .fs_resolver - .resolve_package_folder_from_specifier(specifier)? - else { - return Ok(None); - }; - log::debug!( - "Resolved package folder of {} to {}", - specifier, - path.display() - ); - Ok(Some(path)) - } - fn in_npm_package(&self, specifier: &ModuleSpecifier) -> bool { let root_dir_url = self.fs_resolver.root_dir_url(); debug_assert!(root_dir_url.as_str().ends_with('/')); |