mirror of
https://github.com/denoland/deno.git
synced 2025-08-04 02:48:24 +00:00
refactor(npm): break up NpmModuleLoader
and move more methods into the managed CliNpmResolver
(#20777)
Part of https://github.com/denoland/deno/issues/18967
This commit is contained in:
parent
494822175f
commit
8c1677ecbc
19 changed files with 385 additions and 306 deletions
|
@ -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>;
|
||||
fn as_byonm(&self) -> Option<&ByonmCliNpmResolver> {
|
||||
match self.as_inner() {
|
||||
InnerCliNpmResolverRef::Managed(_) => None,
|
||||
InnerCliNpmResolverRef::Byonm(inner) => Some(inner),
|
||||
}
|
||||
}
|
||||
|
||||
/// 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 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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue