summaryrefslogtreecommitdiff
path: root/cli/npm
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2024-10-02 21:17:39 +0100
committerGitHub <noreply@github.com>2024-10-02 21:17:39 +0100
commitcac28b52621975137b86d4fd6efc32cecc10d682 (patch)
tree6338163b4be9d578dbe046a95c90cea274026b15 /cli/npm
parentbbd4ae1bc12dc6b34d4a455015096b7113a5cec5 (diff)
feat(byonm): support `deno run npm:<package>` when package is not in package.json (#25981)
Closes https://github.com/denoland/deno/issues/25905
Diffstat (limited to 'cli/npm')
-rw-r--r--cli/npm/byonm.rs4
-rw-r--r--cli/npm/managed/mod.rs11
-rw-r--r--cli/npm/mod.rs12
3 files changed, 22 insertions, 5 deletions
diff --git a/cli/npm/byonm.rs b/cli/npm/byonm.rs
index ceef68135..02c2e6da8 100644
--- a/cli/npm/byonm.rs
+++ b/cli/npm/byonm.rs
@@ -21,6 +21,7 @@ use crate::resolver::CliDenoResolverFs;
use super::CliNpmResolver;
use super::InnerCliNpmResolverRef;
+use super::ResolvePkgFolderFromDenoReqError;
pub type CliByonmNpmResolverCreateOptions =
ByonmNpmResolverCreateOptions<CliDenoResolverFs>;
@@ -90,10 +91,11 @@ impl CliNpmResolver for CliByonmNpmResolver {
&self,
req: &PackageReq,
referrer: &Url,
- ) -> Result<PathBuf, AnyError> {
+ ) -> Result<PathBuf, ResolvePkgFolderFromDenoReqError> {
ByonmNpmResolver::resolve_pkg_folder_from_deno_module_req(
self, req, referrer,
)
+ .map_err(ResolvePkgFolderFromDenoReqError::Byonm)
}
fn check_state_hash(&self) -> Option<u64> {
diff --git a/cli/npm/managed/mod.rs b/cli/npm/managed/mod.rs
index 6f6fa4bf8..7bb254cb5 100644
--- a/cli/npm/managed/mod.rs
+++ b/cli/npm/managed/mod.rs
@@ -51,6 +51,7 @@ use self::resolvers::NpmPackageFsResolver;
use super::CliNpmResolver;
use super::InnerCliNpmResolverRef;
+use super::ResolvePkgFolderFromDenoReqError;
mod cache;
mod registry;
@@ -649,9 +650,13 @@ impl CliNpmResolver for ManagedCliNpmResolver {
&self,
req: &PackageReq,
_referrer: &ModuleSpecifier,
- ) -> Result<PathBuf, AnyError> {
- let pkg_id = self.resolve_pkg_id_from_pkg_req(req)?;
- self.resolve_pkg_folder_from_pkg_id(&pkg_id)
+ ) -> Result<PathBuf, ResolvePkgFolderFromDenoReqError> {
+ let pkg_id = self
+ .resolve_pkg_id_from_pkg_req(req)
+ .map_err(|err| ResolvePkgFolderFromDenoReqError::Managed(err.into()))?;
+ self
+ .resolve_pkg_folder_from_pkg_id(&pkg_id)
+ .map_err(ResolvePkgFolderFromDenoReqError::Managed)
}
fn check_state_hash(&self) -> Option<u64> {
diff --git a/cli/npm/mod.rs b/cli/npm/mod.rs
index 1e3c752ae..53baaf77b 100644
--- a/cli/npm/mod.rs
+++ b/cli/npm/mod.rs
@@ -14,11 +14,13 @@ use deno_core::error::AnyError;
use deno_core::serde_json;
use deno_npm::registry::NpmPackageInfo;
use deno_resolver::npm::ByonmNpmResolver;
+use deno_resolver::npm::ByonmResolvePkgFolderFromDenoReqError;
use deno_runtime::deno_node::NodeRequireResolver;
use deno_runtime::ops::process::NpmProcessStateProvider;
use deno_semver::package::PackageNv;
use deno_semver::package::PackageReq;
use node_resolver::NpmResolver;
+use thiserror::Error;
use crate::args::npm_registry_url;
use crate::file_fetcher::FileFetcher;
@@ -29,6 +31,14 @@ pub use self::managed::CliNpmResolverManagedCreateOptions;
pub use self::managed::CliNpmResolverManagedSnapshotOption;
pub use self::managed::ManagedCliNpmResolver;
+#[derive(Debug, Error)]
+pub enum ResolvePkgFolderFromDenoReqError {
+ #[error(transparent)]
+ Managed(deno_core::error::AnyError),
+ #[error(transparent)]
+ Byonm(#[from] ByonmResolvePkgFolderFromDenoReqError),
+}
+
pub enum CliNpmResolverCreateOptions {
Managed(CliNpmResolverManagedCreateOptions),
Byonm(CliByonmNpmResolverCreateOptions),
@@ -93,7 +103,7 @@ pub trait CliNpmResolver: NpmResolver {
&self,
req: &PackageReq,
referrer: &ModuleSpecifier,
- ) -> Result<PathBuf, AnyError>;
+ ) -> Result<PathBuf, ResolvePkgFolderFromDenoReqError>;
/// Returns a hash returning the state of the npm resolver
/// or `None` if the state currently can't be determined.