From cac28b52621975137b86d4fd6efc32cecc10d682 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Wed, 2 Oct 2024 21:17:39 +0100 Subject: feat(byonm): support `deno run npm:` when package is not in package.json (#25981) Closes https://github.com/denoland/deno/issues/25905 --- cli/npm/byonm.rs | 4 +++- cli/npm/managed/mod.rs | 11 ++++++++--- cli/npm/mod.rs | 12 +++++++++++- 3 files changed, 22 insertions(+), 5 deletions(-) (limited to 'cli/npm') 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; @@ -90,10 +91,11 @@ impl CliNpmResolver for CliByonmNpmResolver { &self, req: &PackageReq, referrer: &Url, - ) -> Result { + ) -> Result { ByonmNpmResolver::resolve_pkg_folder_from_deno_module_req( self, req, referrer, ) + .map_err(ResolvePkgFolderFromDenoReqError::Byonm) } fn check_state_hash(&self) -> Option { 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 { - let pkg_id = self.resolve_pkg_id_from_pkg_req(req)?; - self.resolve_pkg_folder_from_pkg_id(&pkg_id) + ) -> Result { + 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 { 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; + ) -> Result; /// Returns a hash returning the state of the npm resolver /// or `None` if the state currently can't be determined. -- cgit v1.2.3