feat: support npm specifiers in deno info for display text output only (#16470)

This commit is contained in:
David Sherret 2022-10-28 16:19:55 -04:00 committed by GitHub
parent 2c674dcd20
commit edaceecec7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
24 changed files with 591 additions and 556 deletions

View file

@ -697,6 +697,13 @@ impl NpmResolution {
Ok(snapshot)
}
pub fn resolve_package_from_id(
&self,
id: &NpmPackageId,
) -> Option<NpmResolutionPackage> {
self.snapshot.read().package_from_id(id).cloned()
}
pub fn resolve_package_from_package(
&self,
name: &str,

View file

@ -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(

View file

@ -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()
}

View file

@ -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()
}

View file

@ -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)
}