diff options
Diffstat (limited to 'cli/npm/resolvers')
-rw-r--r-- | cli/npm/resolvers/common.rs | 3 | ||||
-rw-r--r-- | cli/npm/resolvers/global.rs | 6 | ||||
-rw-r--r-- | cli/npm/resolvers/local.rs | 16 | ||||
-rw-r--r-- | cli/npm/resolvers/mod.rs | 15 |
4 files changed, 39 insertions, 1 deletions
diff --git a/cli/npm/resolvers/common.rs b/cli/npm/resolvers/common.rs index e114f3f8a..07996c4e1 100644 --- a/cli/npm/resolvers/common.rs +++ b/cli/npm/resolvers/common.rs @@ -15,6 +15,7 @@ use crate::lockfile::Lockfile; use crate::npm::cache::should_sync_download; use crate::npm::resolution::NpmResolutionSnapshot; use crate::npm::NpmCache; +use crate::npm::NpmPackageId; use crate::npm::NpmPackageReq; use crate::npm::NpmResolutionPackage; @@ -36,6 +37,8 @@ pub trait InnerNpmPackageResolver: Send + Sync { specifier: &ModuleSpecifier, ) -> Result<PathBuf, AnyError>; + fn package_size(&self, package_id: &NpmPackageId) -> Result<u64, AnyError>; + fn has_packages(&self) -> bool; fn add_package_reqs( diff --git a/cli/npm/resolvers/global.rs b/cli/npm/resolvers/global.rs index 996f55c2d..42090415a 100644 --- a/cli/npm/resolvers/global.rs +++ b/cli/npm/resolvers/global.rs @@ -15,6 +15,7 @@ use deno_core::url::Url; use deno_runtime::deno_node::PackageJson; use deno_runtime::deno_node::TYPES_CONDITIONS; +use crate::fs_util; use crate::lockfile::Lockfile; use crate::npm::resolution::NpmResolution; use crate::npm::resolution::NpmResolutionSnapshot; @@ -110,6 +111,11 @@ impl InnerNpmPackageResolver for GlobalNpmPackageResolver { Ok(self.package_folder(&pkg_id)) } + fn package_size(&self, package_id: &NpmPackageId) -> Result<u64, AnyError> { + let package_folder = self.package_folder(package_id); + Ok(fs_util::dir_size(&package_folder)?) + } + fn has_packages(&self) -> bool { self.resolution.has_packages() } diff --git a/cli/npm/resolvers/local.rs b/cli/npm/resolvers/local.rs index 6c4c4ef6c..cad940d56 100644 --- a/cli/npm/resolvers/local.rs +++ b/cli/npm/resolvers/local.rs @@ -177,6 +177,22 @@ impl InnerNpmPackageResolver for LocalNpmPackageResolver { Ok(package_root_path) } + fn package_size(&self, package_id: &NpmPackageId) -> Result<u64, AnyError> { + match self.resolution.resolve_package_from_id(package_id) { + Some(package) => Ok(fs_util::dir_size( + // package is stored at: + // node_modules/.deno/<package_id>/node_modules/<package_name> + &self + .root_node_modules_path + .join(".deno") + .join(package.id.to_string()) + .join("node_modules") + .join(package.id.name), + )?), + None => bail!("Could not find package folder for '{}'", package_id), + } + } + fn has_packages(&self) -> bool { self.resolution.has_packages() } diff --git a/cli/npm/resolvers/mod.rs b/cli/npm/resolvers/mod.rs index 3d55170ac..71c2abc00 100644 --- a/cli/npm/resolvers/mod.rs +++ b/cli/npm/resolvers/mod.rs @@ -27,6 +27,7 @@ use crate::lockfile::Lockfile; use self::common::InnerNpmPackageResolver; use self::local::LocalNpmPackageResolver; use super::NpmCache; +use super::NpmPackageId; use super::NpmPackageReq; use super::NpmRegistryApi; use super::NpmResolutionSnapshot; @@ -212,6 +213,14 @@ impl NpmPackageResolver { Ok(path) } + /// Attempts to get the package size in bytes. + pub fn package_size( + &self, + package_id: &NpmPackageId, + ) -> Result<u64, AnyError> { + self.inner.package_size(package_id) + } + /// Gets if the provided specifier is in an npm package. pub fn in_npm_package(&self, specifier: &ModuleSpecifier) -> bool { self @@ -301,10 +310,14 @@ impl NpmPackageResolver { self.unstable, self.no_npm, self.local_node_modules_path.clone(), - Some(self.inner.snapshot()), + Some(self.snapshot()), ) } + pub fn snapshot(&self) -> NpmResolutionSnapshot { + self.inner.snapshot() + } + pub fn lock(&self, lockfile: &mut Lockfile) -> Result<(), AnyError> { self.inner.lock(lockfile) } |