mirror of
https://github.com/denoland/deno.git
synced 2025-07-24 21:54:00 +00:00
perf: upgrade to deno_semver 0.7 (#27426)
This commit is contained in:
parent
bd1437d5ec
commit
e417475a0c
30 changed files with 282 additions and 147 deletions
|
@ -9,6 +9,7 @@ use deno_package_json::PackageJsonDepValue;
|
|||
use deno_package_json::PackageJsonRc;
|
||||
use deno_path_util::url_to_file_path;
|
||||
use deno_semver::package::PackageReq;
|
||||
use deno_semver::StackString;
|
||||
use deno_semver::Version;
|
||||
use node_resolver::env::NodeResolverEnv;
|
||||
use node_resolver::errors::PackageFolderResolveError;
|
||||
|
@ -30,7 +31,7 @@ use super::ResolvePkgFolderFromDenoReqError;
|
|||
#[derive(Debug, Error)]
|
||||
pub enum ByonmResolvePkgFolderFromDenoReqError {
|
||||
#[error("Could not find \"{}\" in a node_modules folder. Deno expects the node_modules/ directory to be up to date. Did you forget to run `deno install`?", .0)]
|
||||
MissingAlias(String),
|
||||
MissingAlias(StackString),
|
||||
#[error(transparent)]
|
||||
PackageJson(#[from] PackageJsonLoadError),
|
||||
#[error("Could not find a matching package for 'npm:{}' in the node_modules directory. Ensure you have all your JSR and npm dependencies listed in your deno.json or package.json, then run `deno install`. Alternatively, turn on auto-install by specifying `\"nodeModulesDir\": \"auto\"` in your deno.json file.", .0)]
|
||||
|
@ -177,16 +178,14 @@ impl<Fs: DenoResolverFs, TEnv: NodeResolverEnv> ByonmNpmResolver<Fs, TEnv> {
|
|||
&self,
|
||||
req: &PackageReq,
|
||||
referrer: &Url,
|
||||
) -> Result<Option<(PackageJsonRc, String)>, PackageJsonLoadError> {
|
||||
) -> Result<Option<(PackageJsonRc, StackString)>, PackageJsonLoadError> {
|
||||
fn resolve_alias_from_pkg_json(
|
||||
req: &PackageReq,
|
||||
pkg_json: &PackageJson,
|
||||
) -> Option<String> {
|
||||
) -> Option<StackString> {
|
||||
let deps = pkg_json.resolve_local_package_json_deps();
|
||||
for (key, value) in deps
|
||||
.dependencies
|
||||
.into_iter()
|
||||
.chain(deps.dev_dependencies.into_iter())
|
||||
for (key, value) in
|
||||
deps.dependencies.iter().chain(deps.dev_dependencies.iter())
|
||||
{
|
||||
if let Ok(value) = value {
|
||||
match value {
|
||||
|
@ -194,12 +193,14 @@ impl<Fs: DenoResolverFs, TEnv: NodeResolverEnv> ByonmNpmResolver<Fs, TEnv> {
|
|||
if dep_req.name == req.name
|
||||
&& dep_req.version_req.intersects(&req.version_req)
|
||||
{
|
||||
return Some(key);
|
||||
return Some(key.clone());
|
||||
}
|
||||
}
|
||||
PackageJsonDepValue::Workspace(_workspace) => {
|
||||
if key == req.name && req.version_req.tag() == Some("workspace") {
|
||||
return Some(key);
|
||||
if key.as_str() == req.name
|
||||
&& req.version_req.tag() == Some("workspace")
|
||||
{
|
||||
return Some(key.clone());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -246,7 +247,7 @@ impl<Fs: DenoResolverFs, TEnv: NodeResolverEnv> ByonmNpmResolver<Fs, TEnv> {
|
|||
if let Ok(Some(dep_pkg_json)) =
|
||||
self.load_pkg_json(&pkg_folder.join("package.json"))
|
||||
{
|
||||
if dep_pkg_json.name.as_ref() == Some(&req.name) {
|
||||
if dep_pkg_json.name.as_deref() == Some(req.name.as_str()) {
|
||||
let matches_req = dep_pkg_json
|
||||
.version
|
||||
.as_ref()
|
||||
|
|
|
@ -318,6 +318,8 @@ impl<TEnv: NodeResolverEnv> NodeResolver<TEnv> {
|
|||
resolution_mode: ResolutionMode,
|
||||
resolution_kind: NodeResolutionKind,
|
||||
) -> Result<Url, PackageSubpathResolveError> {
|
||||
// todo(dsherret): don't allocate a string here (maybe use an
|
||||
// enum that says the subpath is not prefixed with a ./)
|
||||
let package_subpath = package_subpath
|
||||
.map(|s| format!("./{s}"))
|
||||
.unwrap_or_else(|| ".".to_string());
|
||||
|
|
|
@ -23,6 +23,7 @@ async-trait.workspace = true
|
|||
base64.workspace = true
|
||||
boxed_error.workspace = true
|
||||
deno_cache_dir.workspace = true
|
||||
deno_error.workspace = true
|
||||
deno_npm.workspace = true
|
||||
deno_semver.workspace = true
|
||||
deno_unsync = { workspace = true, features = ["tokio"] }
|
||||
|
|
|
@ -15,6 +15,7 @@ use deno_npm::npm_rc::ResolvedNpmRc;
|
|||
use deno_npm::registry::NpmPackageInfo;
|
||||
use deno_npm::NpmPackageCacheFolderId;
|
||||
use deno_semver::package::PackageNv;
|
||||
use deno_semver::StackString;
|
||||
use deno_semver::Version;
|
||||
use http::HeaderName;
|
||||
use http::HeaderValue;
|
||||
|
@ -260,7 +261,7 @@ impl<TEnv: NpmCacheEnv> NpmCache<TEnv> {
|
|||
.and_then(|cache_id| {
|
||||
Some(NpmPackageCacheFolderId {
|
||||
nv: PackageNv {
|
||||
name: cache_id.name,
|
||||
name: StackString::from_string(cache_id.name),
|
||||
version: Version::parse_from_npm(&cache_id.version).ok()?,
|
||||
},
|
||||
copy_index: cache_id.copy_index,
|
||||
|
|
|
@ -18,6 +18,7 @@ use deno_unsync::sync::MultiRuntimeAsyncValueCreator;
|
|||
use futures::future::LocalBoxFuture;
|
||||
use futures::FutureExt;
|
||||
use parking_lot::Mutex;
|
||||
use thiserror::Error;
|
||||
use url::Url;
|
||||
|
||||
use crate::remote::maybe_auth_header_for_npm_registry;
|
||||
|
@ -28,6 +29,31 @@ use crate::NpmCacheSetting;
|
|||
type LoadResult = Result<FutureResult, Arc<AnyError>>;
|
||||
type LoadFuture = LocalBoxFuture<'static, LoadResult>;
|
||||
|
||||
#[derive(Debug, Error)]
|
||||
#[error(transparent)]
|
||||
pub struct AnyhowJsError(pub AnyError);
|
||||
|
||||
impl deno_error::JsErrorClass for AnyhowJsError {
|
||||
fn get_class(&self) -> &'static str {
|
||||
"generic"
|
||||
}
|
||||
|
||||
fn get_message(&self) -> std::borrow::Cow<'static, str> {
|
||||
self.0.to_string().into()
|
||||
}
|
||||
|
||||
fn get_additional_properties(
|
||||
&self,
|
||||
) -> Option<
|
||||
Vec<(
|
||||
std::borrow::Cow<'static, str>,
|
||||
std::borrow::Cow<'static, str>,
|
||||
)>,
|
||||
> {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
enum FutureResult {
|
||||
PackageNotExists,
|
||||
|
@ -157,9 +183,9 @@ impl<TEnv: NpmCacheEnv> RegistryInfoProvider<TEnv> {
|
|||
Ok(None) => Err(NpmRegistryPackageInfoLoadError::PackageNotExists {
|
||||
package_name: name.to_string(),
|
||||
}),
|
||||
Err(err) => {
|
||||
Err(NpmRegistryPackageInfoLoadError::LoadError(Arc::new(err)))
|
||||
}
|
||||
Err(err) => Err(NpmRegistryPackageInfoLoadError::LoadError(Arc::new(
|
||||
AnyhowJsError(err),
|
||||
))),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -236,7 +236,7 @@ mod test {
|
|||
#[test]
|
||||
pub fn test_verify_tarball() {
|
||||
let package = PackageNv {
|
||||
name: "package".to_string(),
|
||||
name: "package".into(),
|
||||
version: Version::parse_from_npm("1.0.0").unwrap(),
|
||||
};
|
||||
let actual_checksum =
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue