summaryrefslogtreecommitdiff
path: root/cli/npm/resolvers/global.rs
diff options
context:
space:
mode:
authorGustrb <gustavo@minhavisita.com.br>2023-06-09 15:41:18 -0300
committerGitHub <noreply@github.com>2023-06-09 14:41:18 -0400
commit2b2eebd583a156452f47e9ab7f19b0492c591dea (patch)
tree4a2208baae9d20c3414f4c6eb264fd8ba4b465d0 /cli/npm/resolvers/global.rs
parentff690b0ab44d1d8d8e5ecbc320a5bf752d5feacc (diff)
perf(node): cache realpath_sync calls in read permission check (#19379)
Diffstat (limited to 'cli/npm/resolvers/global.rs')
-rw-r--r--cli/npm/resolvers/global.rs18
1 files changed, 11 insertions, 7 deletions
diff --git a/cli/npm/resolvers/global.rs b/cli/npm/resolvers/global.rs
index 10a17f690..ca84d7e8b 100644
--- a/cli/npm/resolvers/global.rs
+++ b/cli/npm/resolvers/global.rs
@@ -23,18 +23,18 @@ use crate::npm::resolution::NpmResolution;
use crate::npm::resolvers::common::cache_packages;
use crate::npm::NpmCache;
-use super::common::ensure_registry_read_permission;
use super::common::types_package_name;
use super::common::NpmPackageFsResolver;
+use super::common::RegistryReadPermissionChecker;
/// Resolves packages from the global npm cache.
#[derive(Debug)]
pub struct GlobalNpmPackageResolver {
- fs: Arc<dyn FileSystem>,
cache: Arc<NpmCache>,
resolution: Arc<NpmResolution>,
registry_url: Url,
system_info: NpmSystemInfo,
+ registry_read_permission_checker: RegistryReadPermissionChecker,
}
impl GlobalNpmPackageResolver {
@@ -46,11 +46,14 @@ impl GlobalNpmPackageResolver {
system_info: NpmSystemInfo,
) -> Self {
Self {
- fs,
- cache,
+ cache: cache.clone(),
resolution,
- registry_url,
+ registry_url: registry_url.clone(),
system_info,
+ registry_read_permission_checker: RegistryReadPermissionChecker::new(
+ fs,
+ cache.registry_folder(&registry_url),
+ ),
}
}
@@ -156,7 +159,8 @@ impl NpmPackageFsResolver for GlobalNpmPackageResolver {
permissions: &dyn NodePermissions,
path: &Path,
) -> Result<(), AnyError> {
- let registry_path = self.cache.registry_folder(&self.registry_url);
- ensure_registry_read_permission(&self.fs, permissions, &registry_path, path)
+ self
+ .registry_read_permission_checker
+ .ensure_registry_read_permission(permissions, path)
}
}