diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2022-08-22 17:35:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-22 17:35:04 +0200 |
commit | c66386dbd20b735161017a239c6af013da1f1718 (patch) | |
tree | 312e4cc304901212c9d6fb95521e3e3799598531 /cli/npm/cache.rs | |
parent | 57d48134d168cc128f075cb7381d773ea028c81e (diff) |
feat(unstable): Respect --cached-only flags for npm: specifiers (#15512)
This commit changes "npm:" specifier handling to respect "--cached-only" flags and adds "Download" messages for npm registry api calls.
Co-authored-by: David Sherret <dsherret@gmail.com>
Diffstat (limited to 'cli/npm/cache.rs')
-rw-r--r-- | cli/npm/cache.rs | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/cli/npm/cache.rs b/cli/npm/cache.rs index 0efbe93f7..5e6fb7ca8 100644 --- a/cli/npm/cache.rs +++ b/cli/npm/cache.rs @@ -7,12 +7,14 @@ use std::path::PathBuf; use deno_ast::ModuleSpecifier; use deno_core::anyhow::bail; use deno_core::anyhow::Context; +use deno_core::error::custom_error; use deno_core::error::AnyError; use deno_core::url::Url; use deno_runtime::colors; use deno_runtime::deno_fetch::reqwest; use crate::deno_dir::DenoDir; +use crate::file_fetcher::CacheSetting; use crate::fs_util; use super::tarball::verify_and_extract_tarball; @@ -152,15 +154,24 @@ impl ReadonlyNpmCache { /// Stores a single copy of npm packages in a cache. #[derive(Clone, Debug)] -pub struct NpmCache(ReadonlyNpmCache); +pub struct NpmCache { + readonly: ReadonlyNpmCache, + cache_setting: CacheSetting, +} impl NpmCache { - pub fn from_deno_dir(dir: &DenoDir) -> Result<Self, AnyError> { - Ok(Self(ReadonlyNpmCache::from_deno_dir(dir)?)) + pub fn from_deno_dir( + dir: &DenoDir, + cache_setting: CacheSetting, + ) -> Result<Self, AnyError> { + Ok(Self { + readonly: ReadonlyNpmCache::from_deno_dir(dir)?, + cache_setting, + }) } pub fn as_readonly(&self) -> ReadonlyNpmCache { - self.0.clone() + self.readonly.clone() } pub async fn ensure_package( @@ -169,13 +180,22 @@ impl NpmCache { dist: &NpmPackageVersionDistInfo, registry_url: &Url, ) -> Result<(), AnyError> { - let package_folder = self.0.package_folder(id, registry_url); + let package_folder = self.readonly.package_folder(id, registry_url); if package_folder.exists() // if this file exists, then the package didn't successfully extract // the first time, or another process is currently extracting the zip file && !package_folder.join(NPM_PACKAGE_SYNC_LOCK_FILENAME).exists() { return Ok(()); + } else if self.cache_setting == CacheSetting::Only { + return Err(custom_error( + "NotCached", + format!( + "An npm specifier not found in cache: \"{}\", --cached-only is specified.", + id.name + ) + ) + ); } log::log!( @@ -225,15 +245,15 @@ impl NpmCache { id: &NpmPackageId, registry_url: &Url, ) -> PathBuf { - self.0.package_folder(id, registry_url) + self.readonly.package_folder(id, registry_url) } pub fn package_name_folder(&self, name: &str, registry_url: &Url) -> PathBuf { - self.0.package_name_folder(name, registry_url) + self.readonly.package_name_folder(name, registry_url) } pub fn registry_folder(&self, registry_url: &Url) -> PathBuf { - self.0.registry_folder(registry_url) + self.readonly.registry_folder(registry_url) } pub fn resolve_package_id_from_specifier( @@ -242,7 +262,7 @@ impl NpmCache { registry_url: &Url, ) -> Result<NpmPackageId, AnyError> { self - .0 + .readonly .resolve_package_id_from_specifier(specifier, registry_url) } } |