summaryrefslogtreecommitdiff
path: root/cli/npm/managed/resolvers/common.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/npm/managed/resolvers/common.rs')
-rw-r--r--cli/npm/managed/resolvers/common.rs47
1 files changed, 25 insertions, 22 deletions
diff --git a/cli/npm/managed/resolvers/common.rs b/cli/npm/managed/resolvers/common.rs
index 227805d4e..a326b562b 100644
--- a/cli/npm/managed/resolvers/common.rs
+++ b/cli/npm/managed/resolvers/common.rs
@@ -9,6 +9,7 @@ use std::sync::Mutex;
use async_trait::async_trait;
use deno_ast::ModuleSpecifier;
+use deno_core::anyhow::Context;
use deno_core::error::AnyError;
use deno_core::futures;
use deno_core::unsync::spawn;
@@ -91,29 +92,31 @@ impl RegistryReadPermissionChecker {
if is_path_in_node_modules {
let mut cache = self.cache.lock().unwrap();
- let registry_path_canon = match cache.get(&self.registry_path) {
- Some(canon) => canon.clone(),
- None => {
- let canon = self.fs.realpath_sync(&self.registry_path)?;
- cache.insert(self.registry_path.to_path_buf(), canon.clone());
- canon
- }
- };
-
- let path_canon = match cache.get(path) {
- Some(canon) => canon.clone(),
- None => {
- let canon = self.fs.realpath_sync(path);
- if let Err(e) = &canon {
- if e.kind() == ErrorKind::NotFound {
- return Ok(());
- }
+ let mut canonicalize =
+ |path: &Path| -> Result<Option<PathBuf>, AnyError> {
+ match cache.get(path) {
+ Some(canon) => Ok(Some(canon.clone())),
+ None => match self.fs.realpath_sync(path) {
+ Ok(canon) => {
+ cache.insert(path.to_path_buf(), canon.clone());
+ Ok(Some(canon))
+ }
+ Err(e) => {
+ if e.kind() == ErrorKind::NotFound {
+ return Ok(None);
+ }
+ Err(AnyError::from(e)).with_context(|| {
+ format!("failed canonicalizing '{}'", path.display())
+ })
+ }
+ },
}
-
- let canon = canon?;
- cache.insert(path.to_path_buf(), canon.clone());
- canon
- }
+ };
+ let Some(registry_path_canon) = canonicalize(&self.registry_path)? else {
+ return Ok(()); // not exists, allow reading
+ };
+ let Some(path_canon) = canonicalize(path)? else {
+ return Ok(()); // not exists, allow reading
};
if path_canon.starts_with(registry_path_canon) {