summaryrefslogtreecommitdiff
path: root/cli/npm/cache.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2022-08-22 17:35:04 +0200
committerGitHub <noreply@github.com>2022-08-22 17:35:04 +0200
commitc66386dbd20b735161017a239c6af013da1f1718 (patch)
tree312e4cc304901212c9d6fb95521e3e3799598531 /cli/npm/cache.rs
parent57d48134d168cc128f075cb7381d773ea028c81e (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.rs38
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)
}
}