diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2023-10-03 19:05:06 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-03 19:05:06 -0400 |
commit | 8c1677ecbcbb474fc6a5ac9b5f73b562677bb829 (patch) | |
tree | 885a45a67e6aed7dc70307df718b176a729c8655 /cli/npm/mod.rs | |
parent | 494822175fd69f8c20a2e21ddcedcb3287064cce (diff) |
refactor(npm): break up `NpmModuleLoader` and move more methods into the managed `CliNpmResolver` (#20777)
Part of https://github.com/denoland/deno/issues/18967
Diffstat (limited to 'cli/npm/mod.rs')
-rw-r--r-- | cli/npm/mod.rs | 47 |
1 files changed, 12 insertions, 35 deletions
diff --git a/cli/npm/mod.rs b/cli/npm/mod.rs index 22997a8b2..81f46419e 100644 --- a/cli/npm/mod.rs +++ b/cli/npm/mod.rs @@ -1,21 +1,15 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. mod cache_dir; +mod common; mod managed; -use std::collections::HashMap; use std::path::PathBuf; use std::sync::Arc; use deno_ast::ModuleSpecifier; use deno_core::error::AnyError; -use deno_core::url::Url; -use deno_graph::NpmPackageReqResolution; -use deno_npm::resolution::PackageReqNotFoundError; use deno_runtime::deno_node::NpmResolver; -use deno_semver::npm::NpmPackageNvReference; -use deno_semver::npm::NpmPackageReqReference; -use deno_semver::package::PackageNv; use deno_semver::package::PackageReq; pub use self::cache_dir::NpmCacheDir; @@ -64,8 +58,6 @@ pub trait CliNpmResolver: NpmResolver { fn clone_snapshotted(&self) -> Arc<dyn CliNpmResolver>; - fn root_dir_url(&self) -> &Url; - fn as_inner(&self) -> InnerCliNpmResolverRef; fn as_managed(&self) -> Option<&ManagedCliNpmResolver> { @@ -75,27 +67,16 @@ pub trait CliNpmResolver: NpmResolver { } } - fn node_modules_path(&self) -> Option<PathBuf>; - - /// Checks if the provided package req's folder is cached. - fn is_pkg_req_folder_cached(&self, req: &PackageReq) -> bool; - - /// Resolves a package requirement for deno graph. This should only be - /// called by deno_graph's NpmResolver or for resolving packages in - /// a package.json - fn resolve_npm_for_deno_graph( - &self, - pkg_req: &PackageReq, - ) -> NpmPackageReqResolution; + fn as_byonm(&self) -> Option<&ByonmCliNpmResolver> { + match self.as_inner() { + InnerCliNpmResolverRef::Managed(_) => None, + InnerCliNpmResolverRef::Byonm(inner) => Some(inner), + } + } - fn resolve_pkg_nv_ref_from_pkg_req_ref( - &self, - req_ref: &NpmPackageReqReference, - ) -> Result<NpmPackageNvReference, PackageReqNotFoundError>; + fn root_node_modules_path(&self) -> Option<PathBuf>; /// Resolve the root folder of the package the provided specifier is in. - /// - /// This will error when the provided specifier is not in an npm package. fn resolve_pkg_folder_from_specifier( &self, specifier: &ModuleSpecifier, @@ -104,19 +85,15 @@ pub trait CliNpmResolver: NpmResolver { fn resolve_pkg_folder_from_deno_module_req( &self, req: &PackageReq, - ) -> Result<PathBuf, AnyError>; - - fn resolve_pkg_folder_from_deno_module( - &self, - nv: &PackageNv, + referrer: &ModuleSpecifier, ) -> Result<PathBuf, AnyError>; /// Gets the state of npm for the process. fn get_npm_process_state(&self) -> String; - // todo(#18967): should instead return a hash state of the resolver - // or perhaps this could be non-BYONM only and byonm always runs deno check - fn package_reqs(&self) -> HashMap<PackageReq, PackageNv>; + /// Returns a hash returning the state of the npm resolver + /// or `None` if the state currently can't be determined. + fn check_state_hash(&self) -> Option<u64>; } // todo(#18967): implement this |