Skip to content

Commit

Permalink
reduce variants on LoaderError
Browse files Browse the repository at this point in the history
  • Loading branch information
dsherret committed Jan 6, 2025
1 parent 78f8114 commit 4b44710
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 27 deletions.
1 change: 0 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/graph.rs
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ pub enum JsrLoadError {
PackageVersionNotFound(Box<PackageNv>),
#[class(generic)] // TODO: maybe inherit?
#[error("JSR package version manifest for '{}' failed to load: {:#}", .0, .1)]
PackageVersionManifestLoad(Box<PackageNv>, Arc<LoadError>),
PackageVersionManifestLoad(Box<PackageNv>, Arc<dyn JsErrorClass>),
#[class(inherit)]
#[error("JSR package version manifest for '{}' failed to load: {:#}", .0, .1)]
PackageVersionManifestChecksumIntegrity(
Expand Down
6 changes: 3 additions & 3 deletions src/jsr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -163,9 +163,9 @@ impl JsrMetadataStore {
err,
)
}
err => JsrLoadError::PackageVersionManifestLoad(
LoadError::Other(err) => JsrLoadError::PackageVersionManifestLoad(
Box::new(package_nv),
Arc::new(err),
err,
),
}
}
Expand Down Expand Up @@ -210,7 +210,7 @@ impl JsrMetadataStore {
match data {
Some(LoadResponse::Module { content, .. }) => {
handle_content(&content)
.map_err(|e| create_failed_load_err(e.into()))
.map_err(|e| create_failed_load_err(LoadError::Other(Arc::new(e))))
}
Some(LoadResponse::Redirect { specifier }) => {
Err(JsrLoadError::RedirectInPackage(specifier))
Expand Down
23 changes: 5 additions & 18 deletions src/source/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,29 +102,14 @@ pub enum LoadResponse {

#[derive(Debug, Error, deno_error::JsError)]
pub enum LoadError {
#[class(type)]
#[error("Unsupported scheme: {0}")]
UnsupportedScheme(String),
#[class(inherit)]
#[error(transparent)]
ChecksumIntegrity(#[from] ChecksumIntegrityError),
#[class(inherit)]
#[error(transparent)]
JsonParse(#[from] serde_json::Error),
#[class(inherit)]
#[error(transparent)]
DataUrl(std::io::Error),
#[class(inherit)]
#[error(transparent)]
Other(Arc<dyn JsErrorClass>),
}

impl<T: JsErrorClass> From<Arc<T>> for LoadError {
fn from(value: Arc<T>) -> Self {
Self::Other(value)
}
}

pub type LoadResult = Result<Option<LoadResponse>, LoadError>;
pub type LoadFuture = LocalBoxFuture<'static, LoadResult>;

Expand Down Expand Up @@ -558,8 +543,8 @@ pub trait NpmResolver: fmt::Debug {

pub fn load_data_url(
specifier: &ModuleSpecifier,
) -> Result<Option<LoadResponse>, LoadError> {
let data_url = RawDataUrl::parse(specifier).map_err(LoadError::DataUrl)?;
) -> Result<Option<LoadResponse>, std::io::Error> {
let data_url = RawDataUrl::parse(specifier)?;
let (bytes, headers) = data_url.into_bytes_and_headers();
Ok(Some(LoadResponse::Module {
specifier: specifier.clone(),
Expand Down Expand Up @@ -786,7 +771,9 @@ impl Loader for MemoryLoader {
let response = match self.sources.get(specifier) {
Some(Ok(response)) => Ok(Some(response.clone())),
Some(Err(err)) => Err(LoadError::Other(err.clone())),
None if specifier.scheme() == "data" => load_data_url(specifier),
None if specifier.scheme() == "data" => {
load_data_url(specifier).map_err(|e| LoadError::Other(Arc::new(e)))
}
_ => Ok(None),
};
Box::pin(future::ready(response))
Expand Down
16 changes: 12 additions & 4 deletions tests/ecosystem_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use std::collections::HashSet;
use std::io::Write as _;
use std::path::PathBuf;
use std::sync::Arc;

use deno_ast::diagnostics::Diagnostic;
use deno_ast::MediaType;
Expand All @@ -29,6 +30,7 @@ use indexmap::IndexMap;
use serde::Deserialize;
use std::fmt::Write;
use tempfile::tempdir;
use thiserror::Error;
use url::Url;

#[derive(Debug, Clone, Deserialize)]
Expand Down Expand Up @@ -156,6 +158,11 @@ struct VersionMeta {
exports: IndexMap<String, String>,
}

#[derive(Debug, Clone, Deserialize, Error, deno_error::JsError)]
#[class(type)]
#[error("Unsupported scheme: {0}")]
struct UnsupportedScheme(String);

struct Loader<'a> {
scope: &'a str,
name: &'a str,
Expand Down Expand Up @@ -188,13 +195,14 @@ impl deno_graph::source::Loader for Loader<'_> {
)),
}
}
"data" => deno_graph::source::load_data_url(specifier),
"data" => deno_graph::source::load_data_url(specifier)
.map_err(|e| deno_graph::source::LoadError::Other(Arc::new(e))),
"jsr" | "npm" | "node" => Ok(Some(LoadResponse::External {
specifier: specifier.clone(),
})),
_ => Err(deno_graph::source::LoadError::UnsupportedScheme(
specifier.scheme().to_string(),
)),
_ => Err(deno_graph::source::LoadError::Other(Arc::new(
UnsupportedScheme(specifier.scheme().to_string()),
))),
};
async move { res }.boxed()
}
Expand Down

0 comments on commit 4b44710

Please sign in to comment.