summaryrefslogtreecommitdiff
path: root/cli/npm/resolvers/local.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-07-17 14:00:44 -0400
committerGitHub <noreply@github.com>2023-07-17 14:00:44 -0400
commit7a9f7f34195d74fe60eb48381bc2a32db741ceb7 (patch)
treec10516eda55afebb75f98bbfecd1cc555891e3ce /cli/npm/resolvers/local.rs
parent37241e9b1e2d16cd160d529e69c6a782fff8a8b4 (diff)
fix(node): improve require esm error messages (#19853)
Part of #19842. Closes #19583 Closes #16913
Diffstat (limited to 'cli/npm/resolvers/local.rs')
-rw-r--r--cli/npm/resolvers/local.rs63
1 files changed, 31 insertions, 32 deletions
diff --git a/cli/npm/resolvers/local.rs b/cli/npm/resolvers/local.rs
index 42cd0cc9e..4f8d7b709 100644
--- a/cli/npm/resolvers/local.rs
+++ b/cli/npm/resolvers/local.rs
@@ -109,31 +109,27 @@ impl LocalNpmPackageResolver {
fn resolve_folder_for_specifier(
&self,
specifier: &ModuleSpecifier,
- ) -> Result<PathBuf, AnyError> {
- match self.maybe_resolve_folder_for_specifier(specifier) {
- // Canonicalize the path so it's not pointing to the symlinked directory
- // in `node_modules` directory of the referrer.
- Some(path) => canonicalize_path_maybe_not_exists_with_fs(&path, |path| {
- self
- .fs
- .realpath_sync(path)
- .map_err(|err| err.into_io_error())
- })
- .map_err(|err| err.into()),
- None => bail!("could not find npm package for '{}'", specifier),
- }
- }
-
- fn maybe_resolve_folder_for_specifier(
- &self,
- specifier: &ModuleSpecifier,
- ) -> Option<PathBuf> {
- let relative_url = self.root_node_modules_url.make_relative(specifier)?;
+ ) -> Result<Option<PathBuf>, AnyError> {
+ let Some(relative_url) = self.root_node_modules_url.make_relative(specifier) else {
+ return Ok(None);
+ };
if relative_url.starts_with("../") {
- return None;
+ return Ok(None);
}
// it's within the directory, so use it
- specifier.to_file_path().ok()
+ let Some(path) = specifier.to_file_path().ok() else {
+ return Ok(None);
+ };
+ // Canonicalize the path so it's not pointing to the symlinked directory
+ // in `node_modules` directory of the referrer.
+ canonicalize_path_maybe_not_exists_with_fs(&path, |path| {
+ self
+ .fs
+ .realpath_sync(path)
+ .map_err(|err| err.into_io_error())
+ })
+ .map(Some)
+ .map_err(|err| err.into())
}
}
@@ -172,7 +168,9 @@ impl NpmPackageFsResolver for LocalNpmPackageResolver {
referrer: &ModuleSpecifier,
mode: NodeResolutionMode,
) -> Result<PathBuf, AnyError> {
- let local_path = self.resolve_folder_for_specifier(referrer)?;
+ let Some(local_path) = self.resolve_folder_for_specifier(referrer)? else {
+ bail!("could not find npm package for '{}'", referrer);
+ };
let package_root_path = self.resolve_package_root(&local_path);
let mut current_folder = package_root_path.as_path();
loop {
@@ -220,22 +218,23 @@ impl NpmPackageFsResolver for LocalNpmPackageResolver {
fn resolve_package_folder_from_specifier(
&self,
specifier: &ModuleSpecifier,
- ) -> Result<PathBuf, AnyError> {
- let local_path = self.resolve_folder_for_specifier(specifier)?;
+ ) -> Result<Option<PathBuf>, AnyError> {
+ let Some(local_path) = self.resolve_folder_for_specifier(specifier)? else {
+ return Ok(None);
+ };
let package_root_path = self.resolve_package_root(&local_path);
- Ok(package_root_path)
+ Ok(Some(package_root_path))
}
fn resolve_package_cache_folder_id_from_specifier(
&self,
specifier: &ModuleSpecifier,
- ) -> Result<NpmPackageCacheFolderId, AnyError> {
- let folder_path = self.resolve_package_folder_from_specifier(specifier)?;
+ ) -> Result<Option<NpmPackageCacheFolderId>, AnyError> {
+ let Some(folder_path) = self.resolve_package_folder_from_specifier(specifier)? else {
+ return Ok(None);
+ };
let folder_name = folder_path.parent().unwrap().to_string_lossy();
- match get_package_folder_id_from_folder_name(&folder_name) {
- Some(package_folder_id) => Ok(package_folder_id),
- None => bail!("could not resolve package from specifier '{}'", specifier),
- }
+ Ok(get_package_folder_id_from_folder_name(&folder_name))
}
async fn cache_packages(&self) -> Result<(), AnyError> {