diff options
Diffstat (limited to 'resolvers')
-rw-r--r-- | resolvers/deno/Cargo.toml | 1 | ||||
-rw-r--r-- | resolvers/deno/npm/byonm.rs | 43 | ||||
-rw-r--r-- | resolvers/deno/npm/mod.rs | 1 |
3 files changed, 22 insertions, 23 deletions
diff --git a/resolvers/deno/Cargo.toml b/resolvers/deno/Cargo.toml index 1b9aab1e6..5900f9269 100644 --- a/resolvers/deno/Cargo.toml +++ b/resolvers/deno/Cargo.toml @@ -22,6 +22,7 @@ deno_package_json.features = ["sync"] deno_path_util.workspace = true deno_semver.workspace = true node_resolver.workspace = true +thiserror.workspace = true url.workspace = true [dev-dependencies] diff --git a/resolvers/deno/npm/byonm.rs b/resolvers/deno/npm/byonm.rs index c847cee0f..5bc4e62b2 100644 --- a/resolvers/deno/npm/byonm.rs +++ b/resolvers/deno/npm/byonm.rs @@ -5,8 +5,6 @@ use std::path::Path; use std::path::PathBuf; use std::sync::Arc; -use anyhow::bail; -use anyhow::Error as AnyError; use deno_package_json::PackageJson; use deno_package_json::PackageJsonDepValue; use deno_path_util::url_to_file_path; @@ -18,6 +16,7 @@ use node_resolver::errors::PackageJsonLoadError; use node_resolver::errors::PackageNotFoundError; use node_resolver::load_pkg_json; use node_resolver::NpmResolver; +use thiserror::Error; use url::Url; use crate::fs::DenoPkgJsonFsAdapter; @@ -25,6 +24,18 @@ use crate::fs::DenoResolverFs; use super::local::normalize_pkg_name_for_node_modules_deno_folder; +#[derive(Debug, Error)] +pub enum ByonmResolvePkgFolderFromDenoReqError { + #[error("Could not find \"{}\" in a node_modules folder. Deno expects the node_modules/ directory to be up to date. Did you forget to run `deno install`?", .0)] + MissingAlias(String), + #[error(transparent)] + PackageJson(#[from] PackageJsonLoadError), + #[error("Could not find a matching package for 'npm:{}' in the node_modules directory. Ensure you have all your JSR and npm dependencies listed in your deno.json or package.json, then run `deno install`. Alternatively, turn on auto-install by specifying `\"nodeModulesDir\": \"auto\"` in your deno.json file.", .0)] + UnmatchedReq(PackageReq), + #[error(transparent)] + Io(#[from] std::io::Error), +} + pub struct ByonmNpmResolverCreateOptions<Fs: DenoResolverFs> { pub fs: Fs, // todo(dsherret): investigate removing this @@ -100,12 +111,12 @@ impl<Fs: DenoResolverFs> ByonmNpmResolver<Fs> { &self, req: &PackageReq, referrer: &Url, - ) -> Result<PathBuf, AnyError> { + ) -> Result<PathBuf, ByonmResolvePkgFolderFromDenoReqError> { fn node_resolve_dir<Fs: DenoResolverFs>( fs: &Fs, alias: &str, start_dir: &Path, - ) -> Result<Option<PathBuf>, AnyError> { + ) -> std::io::Result<Option<PathBuf>> { for ancestor in start_dir.ancestors() { let node_modules_folder = ancestor.join("node_modules"); let sub_dir = join_package_name(&node_modules_folder, alias); @@ -131,14 +142,7 @@ impl<Fs: DenoResolverFs> ByonmNpmResolver<Fs> { return Ok(resolved); } - bail!( - concat!( - "Could not find \"{}\" in a node_modules folder. ", - "Deno expects the node_modules/ directory to be up to date. ", - "Did you forget to run `deno install`?" - ), - alias, - ); + Err(ByonmResolvePkgFolderFromDenoReqError::MissingAlias(alias)) } None => { // now check if node_modules/.deno/ matches this constraint @@ -146,16 +150,9 @@ impl<Fs: DenoResolverFs> ByonmNpmResolver<Fs> { return Ok(folder); } - bail!( - concat!( - "Could not find a matching package for 'npm:{}' in the node_modules ", - "directory. Ensure you have all your JSR and npm dependencies listed ", - "in your deno.json or package.json, then run `deno install`. Alternatively, ", - r#"turn on auto-install by specifying `"nodeModulesDir": "auto"` in your "#, - "deno.json file." - ), - req, - ); + Err(ByonmResolvePkgFolderFromDenoReqError::UnmatchedReq( + req.clone(), + )) } } } @@ -164,7 +161,7 @@ impl<Fs: DenoResolverFs> ByonmNpmResolver<Fs> { &self, req: &PackageReq, referrer: &Url, - ) -> Result<Option<(Arc<PackageJson>, String)>, AnyError> { + ) -> Result<Option<(Arc<PackageJson>, String)>, PackageJsonLoadError> { fn resolve_alias_from_pkg_json( req: &PackageReq, pkg_json: &PackageJson, diff --git a/resolvers/deno/npm/mod.rs b/resolvers/deno/npm/mod.rs index 2e24144cd..9d885cad3 100644 --- a/resolvers/deno/npm/mod.rs +++ b/resolvers/deno/npm/mod.rs @@ -5,4 +5,5 @@ mod local; pub use byonm::ByonmNpmResolver; pub use byonm::ByonmNpmResolverCreateOptions; +pub use byonm::ByonmResolvePkgFolderFromDenoReqError; pub use local::normalize_pkg_name_for_node_modules_deno_folder; |