refactor(npm): extract out some npm fs resolution code from the cli (#27607)

Moves the npm fs resolvers into the deno_resolution crate.

This does not entirely move things out, but is a step in that direction.
This commit is contained in:
David Sherret 2025-01-09 12:10:07 -05:00 committed by GitHub
parent ce0968ef3a
commit 093f3ba565
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
24 changed files with 312 additions and 213 deletions

View file

@ -23,6 +23,10 @@ use deno_npm::NpmResolutionPackage;
use deno_npm::NpmSystemInfo;
use deno_npm_cache::NpmCacheSetting;
use deno_path_util::fs::canonicalize_path_maybe_not_exists;
use deno_resolver::npm::managed::create_npm_fs_resolver;
use deno_resolver::npm::managed::NpmPackageFsResolver;
use deno_resolver::npm::managed::NpmPackageFsResolverPackageFolderError;
use deno_resolver::npm::managed::NpmResolution;
use deno_resolver::npm::CliNpmReqResolver;
use deno_runtime::colors;
use deno_runtime::ops::process::NpmProcessStateProvider;
@ -37,9 +41,6 @@ use node_resolver::errors::PackageFolderResolveIoError;
use node_resolver::InNpmPackageChecker;
use node_resolver::NpmPackageFolderResolver;
use self::resolution::NpmResolution;
use self::resolvers::create_npm_fs_resolver;
use self::resolvers::NpmPackageFsResolver;
use super::CliNpmCache;
use super::CliNpmCacheHttpClient;
use super::CliNpmRegistryInfoProvider;
@ -60,8 +61,6 @@ use crate::util::sync::AtomicFlag;
mod installer;
mod installers;
mod resolution;
mod resolvers;
pub enum CliNpmResolverManagedSnapshotOption {
ResolveFromLockfile(Arc<CliLockfile>),
@ -104,6 +103,7 @@ pub async fn create_managed_npm_resolver_for_lsp(
create_inner(
http_client,
npm_cache,
options.npm_cache_dir,
options.npm_install_deps_provider,
npm_api,
options.sys,
@ -133,6 +133,7 @@ pub async fn create_managed_npm_resolver(
Ok(create_inner(
http_client,
npm_cache,
options.npm_cache_dir,
options.npm_install_deps_provider,
api,
options.sys,
@ -150,6 +151,7 @@ pub async fn create_managed_npm_resolver(
fn create_inner(
http_client: Arc<CliNpmCacheHttpClient>,
npm_cache: Arc<CliNpmCache>,
npm_cache_dir: Arc<NpmCacheDir>,
npm_install_deps_provider: Arc<NpmInstallDepsProvider>,
registry_info_provider: Arc<CliNpmRegistryInfoProvider>,
sys: CliSys,
@ -181,7 +183,8 @@ fn create_inner(
lifecycle_scripts.clone(),
);
let fs_resolver = create_npm_fs_resolver(
npm_cache.clone(),
&npm_cache_dir,
&npm_rc,
resolution.clone(),
sys.clone(),
node_modules_dir_path,
@ -192,7 +195,9 @@ fn create_inner(
maybe_lockfile,
registry_info_provider,
npm_cache,
npm_cache_dir,
npm_install_deps_provider,
npm_rc,
resolution,
sys,
tarball_cache,
@ -314,7 +319,9 @@ pub struct ManagedCliNpmResolver {
maybe_lockfile: Option<Arc<CliLockfile>>,
registry_info_provider: Arc<CliNpmRegistryInfoProvider>,
npm_cache: Arc<CliNpmCache>,
npm_cache_dir: Arc<NpmCacheDir>,
npm_install_deps_provider: Arc<NpmInstallDepsProvider>,
npm_rc: Arc<ResolvedNpmRc>,
sys: CliSys,
resolution: Arc<NpmResolution>,
resolution_installer: NpmResolutionInstaller,
@ -338,7 +345,7 @@ pub enum ResolvePkgFolderFromPkgIdError {
#[class(inherit)]
#[error("{0}")]
NpmPackageFsResolverPackageFolder(
#[from] resolvers::NpmPackageFsResolverPackageFolderError,
#[from] NpmPackageFsResolverPackageFolderError,
),
#[class(inherit)]
#[error("{0}")]
@ -363,7 +370,9 @@ impl ManagedCliNpmResolver {
maybe_lockfile: Option<Arc<CliLockfile>>,
registry_info_provider: Arc<CliNpmRegistryInfoProvider>,
npm_cache: Arc<CliNpmCache>,
npm_cache_dir: Arc<NpmCacheDir>,
npm_install_deps_provider: Arc<NpmInstallDepsProvider>,
npm_rc: Arc<ResolvedNpmRc>,
resolution: Arc<NpmResolution>,
sys: CliSys,
tarball_cache: Arc<CliNpmTarballCache>,
@ -382,7 +391,9 @@ impl ManagedCliNpmResolver {
maybe_lockfile,
registry_info_provider,
npm_cache,
npm_cache_dir,
npm_install_deps_provider,
npm_rc,
text_only_progress_bar,
resolution,
resolution_installer,
@ -671,11 +682,11 @@ impl ManagedCliNpmResolver {
}
pub fn global_cache_root_path(&self) -> &Path {
self.npm_cache.root_dir_path()
self.npm_cache_dir.root_dir()
}
pub fn global_cache_root_url(&self) -> &Url {
self.npm_cache.root_dir_url()
self.npm_cache_dir.root_dir_url()
}
}
@ -772,7 +783,8 @@ impl CliNpmResolver for ManagedCliNpmResolver {
self.lifecycle_scripts.clone(),
),
create_npm_fs_resolver(
self.npm_cache.clone(),
&self.npm_cache_dir,
&self.npm_rc,
npm_resolution.clone(),
self.sys.clone(),
self.root_node_modules_path().map(ToOwned::to_owned),
@ -780,7 +792,9 @@ impl CliNpmResolver for ManagedCliNpmResolver {
self.maybe_lockfile.clone(),
self.registry_info_provider.clone(),
self.npm_cache.clone(),
self.npm_cache_dir.clone(),
self.npm_install_deps_provider.clone(),
self.npm_rc.clone(),
npm_resolution,
self.sys.clone(),
self.tarball_cache.clone(),