summaryrefslogtreecommitdiff
path: root/resolvers
diff options
context:
space:
mode:
Diffstat (limited to 'resolvers')
-rw-r--r--resolvers/deno/Cargo.toml1
-rw-r--r--resolvers/deno/npm/byonm.rs43
-rw-r--r--resolvers/deno/npm/mod.rs1
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;