summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/Cargo.toml10
-rw-r--r--cli/cache/mod.rs8
-rw-r--r--cli/factory.rs11
-rw-r--r--cli/file_fetcher.rs127
-rw-r--r--cli/graph_util.rs37
-rw-r--r--cli/lsp/cache.rs14
-rw-r--r--cli/lsp/documents.rs25
-rw-r--r--cli/lsp/jsr_resolver.rs19
-rw-r--r--cli/lsp/registries.rs1
-rw-r--r--cli/tools/coverage/mod.rs2
-rw-r--r--cli/tools/doc.rs4
-rw-r--r--cli/tools/vendor/test.rs3
-rw-r--r--cli/tsc/mod.rs3
13 files changed, 169 insertions, 95 deletions
diff --git a/cli/Cargo.toml b/cli/Cargo.toml
index ca00774ea..3898fb7bb 100644
--- a/cli/Cargo.toml
+++ b/cli/Cargo.toml
@@ -66,17 +66,17 @@ deno_ast = { workspace = true, features = ["bundler", "cjs", "codegen", "proposa
deno_cache_dir = { workspace = true }
deno_config = "=0.9.2"
deno_core = { workspace = true, features = ["include_js_files_for_snapshotting"] }
-deno_doc = { version = "=0.103.0", features = ["html"] }
-deno_emit = "=0.36.0"
-deno_graph = "=0.65.3"
+deno_doc = { version = "=0.107.0", features = ["html"] }
+deno_emit = "=0.37.0"
+deno_graph = "=0.66.0"
deno_lint = { version = "=0.56.0", features = ["docs"] }
deno_lockfile.workspace = true
-deno_npm = "=0.16.0"
+deno_npm = "=0.17.0"
deno_runtime = { workspace = true, features = ["include_js_files_for_snapshotting"] }
deno_semver = "=0.5.4"
deno_task_shell = "=0.14.3"
deno_terminal.workspace = true
-eszip = "=0.62.0"
+eszip = "=0.63.0"
napi_sym.workspace = true
async-trait.workspace = true
diff --git a/cli/cache/mod.rs b/cli/cache/mod.rs
index 6c48799ce..e9d225146 100644
--- a/cli/cache/mod.rs
+++ b/cli/cache/mod.rs
@@ -196,8 +196,7 @@ impl Loader for FetchCacher {
fn load(
&mut self,
specifier: &ModuleSpecifier,
- _is_dynamic: bool,
- cache_setting: deno_graph::source::CacheSetting,
+ options: deno_graph::source::LoadOptions,
) -> LoadFuture {
use deno_graph::source::CacheSetting as LoaderCacheSetting;
@@ -222,7 +221,7 @@ impl Loader for FetchCacher {
let specifier = specifier.clone();
async move {
- let maybe_cache_setting = match cache_setting {
+ let maybe_cache_setting = match options.cache_setting {
LoaderCacheSetting::Use => None,
LoaderCacheSetting::Reload => {
if matches!(file_fetcher.cache_setting(), CacheSetting::Only) {
@@ -240,6 +239,7 @@ impl Loader for FetchCacher {
permissions,
maybe_accept: None,
maybe_cache_setting: maybe_cache_setting.as_ref(),
+ maybe_checksum: options.maybe_checksum,
})
.await
.map(|file| {
@@ -269,7 +269,7 @@ impl Loader for FetchCacher {
let error_class_name = get_error_class_name(&err);
match error_class_name {
"NotFound" => Ok(None),
- "NotCached" if cache_setting == LoaderCacheSetting::Only => Ok(None),
+ "NotCached" if options.cache_setting == LoaderCacheSetting::Only => Ok(None),
_ => Err(err),
}
})
diff --git a/cli/factory.rs b/cli/factory.rs
index 2236e6090..cccbecbf1 100644
--- a/cli/factory.rs
+++ b/cli/factory.rs
@@ -66,7 +66,6 @@ use deno_runtime::deno_node::NodeResolver;
use deno_runtime::deno_tls::RootCertStoreProvider;
use deno_runtime::deno_web::BlobStore;
use deno_runtime::inspector_server::InspectorServer;
-use deno_semver::package::PackageNv;
use import_map::ImportMap;
use log::warn;
use std::future::Future;
@@ -381,16 +380,6 @@ impl CliFactory {
no_npm,
no_config: self.options.no_config(),
config,
- nv_to_jsr_url: |nv| {
- let nv = PackageNv::from_str(nv).ok()?;
- Some(
- deno_graph::source::recommended_registry_package_url(
- crate::args::jsr_url(),
- &nv,
- )
- .to_string(),
- )
- },
},
);
}
diff --git a/cli/file_fetcher.rs b/cli/file_fetcher.rs
index 8f4d3feab..a74a14a3f 100644
--- a/cli/file_fetcher.rs
+++ b/cli/file_fetcher.rs
@@ -24,6 +24,7 @@ use deno_core::futures::future::FutureExt;
use deno_core::parking_lot::Mutex;
use deno_core::url::Url;
use deno_core::ModuleSpecifier;
+use deno_graph::source::LoaderChecksum;
use deno_runtime::deno_fetch::reqwest::header::HeaderValue;
use deno_runtime::deno_fetch::reqwest::header::ACCEPT;
use deno_runtime::deno_fetch::reqwest::header::AUTHORIZATION;
@@ -146,6 +147,7 @@ pub struct FetchOptions<'a> {
pub permissions: PermissionsContainer,
pub maybe_accept: Option<&'a str>,
pub maybe_cache_setting: Option<&'a CacheSetting>,
+ pub maybe_checksum: Option<LoaderChecksum>,
}
/// A structure for resolving, fetching and caching source files.
@@ -199,6 +201,7 @@ impl FileFetcher {
pub fn fetch_cached(
&self,
specifier: &ModuleSpecifier,
+ maybe_checksum: Option<LoaderChecksum>,
redirect_limit: i64,
) -> Result<Option<File>, AnyError> {
debug!("FileFetcher::fetch_cached - specifier: {}", specifier);
@@ -207,16 +210,22 @@ impl FileFetcher {
}
let cache_key = self.http_cache.cache_item_key(specifier)?; // compute this once
- let Some(metadata) = self.http_cache.read_metadata(&cache_key)? else {
+ let Some(headers) = self.http_cache.read_headers(&cache_key)? else {
return Ok(None);
};
- let headers = metadata.headers;
if let Some(redirect_to) = headers.get("location") {
let redirect =
deno_core::resolve_import(redirect_to, specifier.as_str())?;
- return self.fetch_cached(&redirect, redirect_limit - 1);
+ return self.fetch_cached(&redirect, maybe_checksum, redirect_limit - 1);
}
- let Some(bytes) = self.http_cache.read_file_bytes(&cache_key)? else {
+ let Some(bytes) = self.http_cache.read_file_bytes(
+ &cache_key,
+ maybe_checksum
+ .as_ref()
+ .map(|c| deno_cache_dir::Checksum::new(c.as_str())),
+ deno_cache_dir::GlobalToLocalCopy::Allow,
+ )?
+ else {
return Ok(None);
};
@@ -282,6 +291,7 @@ impl FileFetcher {
redirect_limit: i64,
maybe_accept: Option<String>,
cache_setting: &CacheSetting,
+ maybe_checksum: Option<LoaderChecksum>,
) -> Pin<Box<dyn Future<Output = Result<File, AnyError>> + Send>> {
debug!("FileFetcher::fetch_remote() - specifier: {}", specifier);
if redirect_limit < 0 {
@@ -294,7 +304,8 @@ impl FileFetcher {
}
if self.should_use_cache(specifier, cache_setting) {
- match self.fetch_cached(specifier, redirect_limit) {
+ match self.fetch_cached(specifier, maybe_checksum.clone(), redirect_limit)
+ {
Ok(Some(file)) => {
return futures::future::ok(file).boxed();
}
@@ -331,8 +342,8 @@ impl FileFetcher {
.http_cache
.cache_item_key(specifier)
.ok()
- .and_then(|key| self.http_cache.read_metadata(&key).ok().flatten())
- .and_then(|metadata| metadata.headers.get("etag").cloned());
+ .and_then(|key| self.http_cache.read_headers(&key).ok().flatten())
+ .and_then(|headers| headers.get("etag").cloned());
let maybe_auth_token = self.auth_tokens.get(specifier);
let specifier = specifier.clone();
let client = self.http_client.clone();
@@ -376,7 +387,9 @@ impl FileFetcher {
.await?
{
FetchOnceResult::NotModified => {
- let file = file_fetcher.fetch_cached(&specifier, 10)?.unwrap();
+ let file = file_fetcher
+ .fetch_cached(&specifier, maybe_checksum, 10)?
+ .unwrap();
Ok(file)
}
FetchOnceResult::Redirect(redirect_url, headers) => {
@@ -388,6 +401,7 @@ impl FileFetcher {
redirect_limit - 1,
maybe_accept,
&cache_setting,
+ maybe_checksum,
)
.await
}
@@ -395,6 +409,9 @@ impl FileFetcher {
file_fetcher
.http_cache
.set(&specifier, headers.clone(), &bytes)?;
+ if let Some(checksum) = &maybe_checksum {
+ checksum.check_source(&bytes)?;
+ }
Ok(File {
specifier,
maybe_headers: Some(headers),
@@ -438,15 +455,16 @@ impl FileFetcher {
let Ok(cache_key) = self.http_cache.cache_item_key(specifier) else {
return false;
};
- let Ok(Some(metadata)) = self.http_cache.read_metadata(&cache_key)
+ let Ok(Some(headers)) = self.http_cache.read_headers(&cache_key) else {
+ return false;
+ };
+ let Ok(Some(download_time)) =
+ self.http_cache.read_download_time(&cache_key)
else {
return false;
};
- let cache_semantics = CacheSemantics::new(
- metadata.headers,
- metadata.time,
- SystemTime::now(),
- );
+ let cache_semantics =
+ CacheSemantics::new(headers, download_time, SystemTime::now());
cache_semantics.should_use()
}
CacheSetting::ReloadSome(list) => {
@@ -482,6 +500,7 @@ impl FileFetcher {
permissions,
maybe_accept: None,
maybe_cache_setting: None,
+ maybe_checksum: None,
})
.await
}
@@ -517,6 +536,7 @@ impl FileFetcher {
10,
options.maybe_accept.map(String::from),
options.maybe_cache_setting.unwrap_or(&self.cache_setting),
+ options.maybe_checksum,
)
.await
}
@@ -728,6 +748,7 @@ mod tests {
1,
None,
&file_fetcher.cache_setting,
+ None,
)
.await;
let cache_key = file_fetcher.http_cache.cache_item_key(specifier).unwrap();
@@ -735,10 +756,9 @@ mod tests {
result.unwrap(),
file_fetcher
.http_cache
- .read_metadata(&cache_key)
- .unwrap()
+ .read_headers(&cache_key)
.unwrap()
- .headers,
+ .unwrap(),
)
}
@@ -899,18 +919,11 @@ mod tests {
let cache_item_key =
file_fetcher.http_cache.cache_item_key(&specifier).unwrap();
- let mut metadata = file_fetcher
- .http_cache
- .read_metadata(&cache_item_key)
- .unwrap()
- .unwrap();
- metadata.headers = HashMap::new();
- metadata
- .headers
- .insert("content-type".to_string(), "text/javascript".to_string());
+ let mut headers = HashMap::new();
+ headers.insert("content-type".to_string(), "text/javascript".to_string());
file_fetcher
.http_cache
- .set(&specifier, metadata.headers.clone(), file.source.as_bytes())
+ .set(&specifier, headers.clone(), file.source.as_bytes())
.unwrap();
let result = file_fetcher_01
@@ -926,20 +939,17 @@ mod tests {
// the value above.
assert_eq!(file.media_type, MediaType::JavaScript);
- let headers = file_fetcher_02
+ let headers2 = file_fetcher_02
.http_cache
- .read_metadata(&cache_item_key)
+ .read_headers(&cache_item_key)
.unwrap()
- .unwrap()
- .headers;
- assert_eq!(headers.get("content-type").unwrap(), "text/javascript");
- metadata.headers = HashMap::new();
- metadata
- .headers
- .insert("content-type".to_string(), "application/json".to_string());
+ .unwrap();
+ assert_eq!(headers2.get("content-type").unwrap(), "text/javascript");
+ headers = HashMap::new();
+ headers.insert("content-type".to_string(), "application/json".to_string());
file_fetcher_02
.http_cache
- .set(&specifier, metadata.headers.clone(), file.source.as_bytes())
+ .set(&specifier, headers.clone(), file.source.as_bytes())
.unwrap();
let result = file_fetcher_02
@@ -1013,7 +1023,12 @@ mod tests {
.unwrap(),
file_fetcher
.http_cache
- .read_metadata(&cache_key)
+ .read_headers(&cache_key)
+ .unwrap()
+ .unwrap(),
+ file_fetcher
+ .http_cache
+ .read_download_time(&cache_key)
.unwrap()
.unwrap(),
)
@@ -1045,7 +1060,12 @@ mod tests {
.unwrap(),
file_fetcher
.http_cache
- .read_metadata(&cache_key)
+ .read_headers(&cache_key)
+ .unwrap()
+ .unwrap(),
+ file_fetcher
+ .http_cache
+ .read_download_time(&cache_key)
.unwrap()
.unwrap(),
)
@@ -1182,7 +1202,12 @@ mod tests {
.unwrap(),
file_fetcher
.http_cache
- .read_metadata(&cache_key)
+ .read_headers(&cache_key)
+ .unwrap()
+ .unwrap(),
+ file_fetcher
+ .http_cache
+ .read_download_time(&cache_key)
.unwrap()
.unwrap(),
)
@@ -1216,7 +1241,12 @@ mod tests {
.unwrap(),
file_fetcher
.http_cache
- .read_metadata(&cache_key)
+ .read_headers(&cache_key)
+ .unwrap()
+ .unwrap(),
+ file_fetcher
+ .http_cache
+ .read_download_time(&cache_key)
.unwrap()
.unwrap(),
)
@@ -1240,6 +1270,7 @@ mod tests {
2,
None,
&file_fetcher.cache_setting,
+ None,
)
.await;
assert!(result.is_ok());
@@ -1251,14 +1282,15 @@ mod tests {
1,
None,
&file_fetcher.cache_setting,
+ None,
)
.await;
assert!(result.is_err());
- let result = file_fetcher.fetch_cached(&specifier, 2);
+ let result = file_fetcher.fetch_cached(&specifier, None, 2);
assert!(result.is_ok());
- let result = file_fetcher.fetch_cached(&specifier, 1);
+ let result = file_fetcher.fetch_cached(&specifier, None, 1);
assert!(result.is_err());
}
@@ -2072,7 +2104,11 @@ mod tests {
let cache_key = file_fetcher.http_cache.cache_item_key(url).unwrap();
let bytes = file_fetcher
.http_cache
- .read_file_bytes(&cache_key)
+ .read_file_bytes(
+ &cache_key,
+ None,
+ deno_cache_dir::GlobalToLocalCopy::Allow,
+ )
.unwrap()
.unwrap();
String::from_utf8(bytes).unwrap()
@@ -2086,10 +2122,9 @@ mod tests {
let cache_key = file_fetcher.http_cache.cache_item_key(url).unwrap();
file_fetcher
.http_cache
- .read_metadata(&cache_key)
+ .read_headers(&cache_key)
.unwrap()
.unwrap()
- .headers
.remove("location")
}
}
diff --git a/cli/graph_util.rs b/cli/graph_util.rs
index 3633784b8..09f0db9e6 100644
--- a/cli/graph_util.rs
+++ b/cli/graph_util.rs
@@ -1,5 +1,6 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+use crate::args::jsr_url;
use crate::args::CliOptions;
use crate::args::Lockfile;
use crate::args::TsTypeLib;
@@ -174,6 +175,18 @@ pub fn graph_lock_or_exit(graph: &ModuleGraph, lockfile: &mut Lockfile) {
Module::Json(module) => &module.source,
Module::Node(_) | Module::Npm(_) | Module::External(_) => continue,
};
+
+ // skip over any specifiers in JSR packages because those
+ // are enforced via the integrity
+ if deno_graph::source::recommended_registry_package_url_to_nv(
+ jsr_url(),
+ module.specifier(),
+ )
+ .is_some()
+ {
+ continue;
+ }
+
if !lockfile.check_or_insert_remote(module.specifier().as_str(), source) {
let err = format!(
concat!(
@@ -475,6 +488,19 @@ impl ModuleGraphBuilder {
}
}
}
+ for (nv, value) in &lockfile.content.packages.jsr {
+ if let Ok(nv) = PackageNv::from_str(nv) {
+ graph
+ .packages
+ .add_manifest_checksum(nv, value.integrity.clone())
+ .map_err(|err| deno_lockfile::IntegrityCheckFailedError {
+ package_display_id: format!("jsr:{}", err.nv),
+ actual: err.actual,
+ expected: err.expected,
+ filename: lockfile.filename.display().to_string(),
+ })?;
+ }
+ }
}
}
@@ -504,9 +530,14 @@ impl ModuleGraphBuilder {
format!("jsr:{}", to),
);
}
- for (name, deps) in graph.packages.package_deps() {
- lockfile
- .insert_package_deps(name.to_string(), deps.map(|s| s.to_string()));
+ for (name, checksum, deps) in
+ graph.packages.packages_with_checksum_and_deps()
+ {
+ lockfile.insert_package(
+ name.to_string(),
+ checksum.clone(),
+ deps.map(|s| s.to_string()),
+ );
}
}
}
diff --git a/cli/lsp/cache.rs b/cli/lsp/cache.rs
index eec6433a2..e0034207d 100644
--- a/cli/lsp/cache.rs
+++ b/cli/lsp/cache.rs
@@ -11,6 +11,16 @@ use std::path::Path;
use std::sync::Arc;
use std::time::SystemTime;
+/// In the LSP, we disallow the cache from automatically copying from
+/// the global cache to the local cache for technical reasons.
+///
+/// 1. We need to verify the checksums from the lockfile are correct when
+/// moving from the global to the local cache.
+/// 2. We need to verify the checksums for JSR https specifiers match what
+/// is found in the package's manifest.
+pub const LSP_DISALLOW_GLOBAL_TO_LOCAL_COPY: deno_cache_dir::GlobalToLocalCopy =
+ deno_cache_dir::GlobalToLocalCopy::Disallow;
+
pub fn calculate_fs_version(
cache: &Arc<dyn HttpCache>,
specifier: &ModuleSpecifier,
@@ -123,8 +133,8 @@ impl CacheMetadata {
return None;
}
let cache_key = self.cache.cache_item_key(specifier).ok()?;
- let specifier_metadata = self.cache.read_metadata(&cache_key).ok()??;
- let values = Arc::new(parse_metadata(&specifier_metadata.headers));
+ let headers = self.cache.read_headers(&cache_key).ok()??;
+ let values = Arc::new(parse_metadata(&headers));
let version = calculate_fs_version_in_cache(&self.cache, specifier);
let mut metadata_map = self.metadata.lock();
let metadata = Metadata { values, version };
diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs
index c58a392d5..125307757 100644
--- a/cli/lsp/documents.rs
+++ b/cli/lsp/documents.rs
@@ -2,6 +2,7 @@
use super::cache::calculate_fs_version;
use super::cache::calculate_fs_version_at_path;
+use super::cache::LSP_DISALLOW_GLOBAL_TO_LOCAL_COPY;
use super::jsr_resolver::JsrResolver;
use super::language_server::StateNpmSnapshot;
use super::text::LineIndex;
@@ -736,12 +737,7 @@ impl RedirectResolver {
) -> Option<ModuleSpecifier> {
if redirect_limit > 0 {
let cache_key = self.cache.cache_item_key(specifier).ok()?;
- let headers = self
- .cache
- .read_metadata(&cache_key)
- .ok()
- .flatten()
- .map(|m| m.headers)?;
+ let headers = self.cache.read_headers(&cache_key).ok().flatten()?;
if let Some(location) = headers.get("location") {
let redirect =
deno_core::resolve_import(location, specifier.as_str()).ok()?;
@@ -822,12 +818,14 @@ impl FileSystemDocuments {
} else {
let fs_version = calculate_fs_version(cache, specifier)?;
let cache_key = cache.cache_item_key(specifier).ok()?;
- let bytes = cache.read_file_bytes(&cache_key).ok()??;
- let specifier_metadata = cache.read_metadata(&cache_key).ok()??;
+ let bytes = cache
+ .read_file_bytes(&cache_key, None, LSP_DISALLOW_GLOBAL_TO_LOCAL_COPY)
+ .ok()??;
+ let specifier_headers = cache.read_headers(&cache_key).ok()??;
let (_, maybe_charset) =
deno_graph::source::resolve_media_type_and_charset_from_headers(
specifier,
- Some(&specifier_metadata.headers),
+ Some(&specifier_headers),
);
let content = deno_graph::source::decode_owned_source(
specifier,
@@ -835,7 +833,7 @@ impl FileSystemDocuments {
maybe_charset,
)
.ok()?;
- let maybe_headers = Some(specifier_metadata.headers);
+ let maybe_headers = Some(specifier_headers);
Document::new(
specifier.clone(),
fs_version,
@@ -1826,8 +1824,7 @@ impl<'a> deno_graph::source::Loader for OpenDocumentsGraphLoader<'a> {
fn load(
&mut self,
specifier: &ModuleSpecifier,
- is_dynamic: bool,
- cache_setting: deno_graph::source::CacheSetting,
+ options: deno_graph::source::LoadOptions,
) -> deno_graph::source::LoadFuture {
let specifier = if self.unstable_sloppy_imports {
self
@@ -1839,9 +1836,7 @@ impl<'a> deno_graph::source::Loader for OpenDocumentsGraphLoader<'a> {
match self.load_from_docs(&specifier) {
Some(fut) => fut,
- None => self
- .inner_loader
- .load(&specifier, is_dynamic, cache_setting),
+ None => self.inner_loader.load(&specifier, options),
}
}
diff --git a/cli/lsp/jsr_resolver.rs b/cli/lsp/jsr_resolver.rs
index 8243bb0f2..be7bdc0f5 100644
--- a/cli/lsp/jsr_resolver.rs
+++ b/cli/lsp/jsr_resolver.rs
@@ -15,6 +15,8 @@ use deno_semver::package::PackageReq;
use std::borrow::Cow;
use std::sync::Arc;
+use super::cache::LSP_DISALLOW_GLOBAL_TO_LOCAL_COPY;
+
#[derive(Debug)]
pub struct JsrResolver {
nv_by_req: DashMap<PackageReq, Option<PackageNv>>,
@@ -111,7 +113,13 @@ fn read_cached_package_info(
) -> Option<JsrPackageInfo> {
let meta_url = jsr_url().join(&format!("{}/meta.json", name)).ok()?;
let meta_cache_item_key = cache.cache_item_key(&meta_url).ok()?;
- let meta_bytes = cache.read_file_bytes(&meta_cache_item_key).ok()??;
+ let meta_bytes = cache
+ .read_file_bytes(
+ &meta_cache_item_key,
+ None,
+ LSP_DISALLOW_GLOBAL_TO_LOCAL_COPY,
+ )
+ .ok()??;
serde_json::from_slice::<JsrPackageInfo>(&meta_bytes).ok()
}
@@ -123,12 +131,19 @@ fn read_cached_package_version_info(
.join(&format!("{}/{}_meta.json", &nv.name, &nv.version))
.ok()?;
let meta_cache_item_key = cache.cache_item_key(&meta_url).ok()?;
- let meta_bytes = cache.read_file_bytes(&meta_cache_item_key).ok()??;
+ let meta_bytes = cache
+ .read_file_bytes(
+ &meta_cache_item_key,
+ None,
+ LSP_DISALLOW_GLOBAL_TO_LOCAL_COPY,
+ )
+ .ok()??;
// This is a roundabout way of deserializing `JsrPackageVersionInfo`,
// because we only want the `exports` field and `module_graph` is large.
let mut info =
serde_json::from_slice::<serde_json::Value>(&meta_bytes).ok()?;
Some(JsrPackageVersionInfo {
+ manifest: Default::default(), // not used by the LSP (only caching checks this in deno_graph)
exports: info.as_object_mut()?.remove("exports")?,
module_graph: None,
})
diff --git a/cli/lsp/registries.rs b/cli/lsp/registries.rs
index f4a64c7ee..2b0cae7d2 100644
--- a/cli/lsp/registries.rs
+++ b/cli/lsp/registries.rs
@@ -515,6 +515,7 @@ impl ModuleRegistry {
permissions: PermissionsContainer::allow_all(),
maybe_accept: Some("application/vnd.deno.reg.v2+json, application/vnd.deno.reg.v1+json;q=0.9, application/json;q=0.8"),
maybe_cache_setting: None,
+ maybe_checksum: None,
})
.await;
// if there is an error fetching, we will cache an empty file, so that
diff --git a/cli/tools/coverage/mod.rs b/cli/tools/coverage/mod.rs
index aafef292f..5cc705741 100644
--- a/cli/tools/coverage/mod.rs
+++ b/cli/tools/coverage/mod.rs
@@ -523,7 +523,7 @@ pub async fn cover_files(
file_fetcher.get_source(&module_specifier)
} else {
file_fetcher
- .fetch_cached(&module_specifier, 10)
+ .fetch_cached(&module_specifier, None, 10)
.with_context(|| {
format!("Failed to fetch \"{module_specifier}\" from cache.")
})?
diff --git a/cli/tools/doc.rs b/cli/tools/doc.rs
index d2cd0c2a2..5044e73d3 100644
--- a/cli/tools/doc.rs
+++ b/cli/tools/doc.rs
@@ -211,9 +211,9 @@ impl deno_doc::html::HrefResolver for DocResolver {
fn resolve_usage(
&self,
_current_specifier: &ModuleSpecifier,
- current_file: &str,
+ current_file: Option<&str>,
) -> Option<String> {
- Some(current_file.to_string())
+ current_file.map(|f| f.to_string())
}
fn resolve_source(&self, location: &deno_doc::Location) -> Option<String> {
diff --git a/cli/tools/vendor/test.rs b/cli/tools/vendor/test.rs
index 7910dcf22..6a960c302 100644
--- a/cli/tools/vendor/test.rs
+++ b/cli/tools/vendor/test.rs
@@ -115,8 +115,7 @@ impl Loader for TestLoader {
fn load(
&mut self,
specifier: &ModuleSpecifier,
- _is_dynamic: bool,
- _cache_setting: deno_graph::source::CacheSetting,
+ _options: deno_graph::source::LoadOptions,
) -> LoadFuture {
let specifier = self.redirects.get(specifier).unwrap_or(specifier);
let result = self.files.get(specifier).map(|result| match result {
diff --git a/cli/tsc/mod.rs b/cli/tsc/mod.rs
index 18316b750..f3f974690 100644
--- a/cli/tsc/mod.rs
+++ b/cli/tsc/mod.rs
@@ -904,8 +904,7 @@ mod tests {
fn load(
&mut self,
specifier: &ModuleSpecifier,
- _is_dynamic: bool,
- _cache_setting: deno_graph::source::CacheSetting,
+ _options: deno_graph::source::LoadOptions,
) -> deno_graph::source::LoadFuture {
let specifier_text = specifier
.to_string()