summaryrefslogtreecommitdiff
path: root/cli/npm/resolvers
diff options
context:
space:
mode:
Diffstat (limited to 'cli/npm/resolvers')
-rw-r--r--cli/npm/resolvers/common.rs3
-rw-r--r--cli/npm/resolvers/global.rs6
-rw-r--r--cli/npm/resolvers/local.rs16
-rw-r--r--cli/npm/resolvers/mod.rs15
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)
}