diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-06-13 18:29:27 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-13 18:29:27 -0400 |
commit | 4ec9250c409fc0734e192d6571b0cad3cbc8a7ee (patch) | |
tree | 131c610e5b4fae069574cec3b90f6e85d0e9e8dc /cli/args/package_json.rs | |
parent | fb31eaa9ca59f6daaee0210d5cd206185c7041b9 (diff) |
fix(npm): use more relaxed package.json version constraint parsing (#24202)
Diffstat (limited to 'cli/args/package_json.rs')
-rw-r--r-- | cli/args/package_json.rs | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/cli/args/package_json.rs b/cli/args/package_json.rs index 67481fd07..b1ff39abc 100644 --- a/cli/args/package_json.rs +++ b/cli/args/package_json.rs @@ -7,16 +7,16 @@ use deno_core::anyhow::bail; use deno_core::error::AnyError; use deno_npm::registry::parse_dep_entry_name_and_raw_version; use deno_runtime::deno_node::PackageJson; +use deno_semver::npm::NpmVersionReqParseError; use deno_semver::package::PackageReq; use deno_semver::VersionReq; -use deno_semver::VersionReqSpecifierParseError; use indexmap::IndexMap; use thiserror::Error; #[derive(Debug, Error, Clone)] pub enum PackageJsonDepValueParseError { #[error(transparent)] - Specifier(#[from] VersionReqSpecifierParseError), + VersionReq(#[from] NpmVersionReqParseError), #[error("Not implemented scheme '{scheme}'")] Unsupported { scheme: String }, } @@ -75,13 +75,13 @@ pub fn get_local_package_json_version_reqs( }); } let (name, version_req) = parse_dep_entry_name_and_raw_version(key, value); - let result = VersionReq::parse_from_specifier(version_req); + let result = VersionReq::parse_from_npm(version_req); match result { Ok(version_req) => Ok(PackageReq { name: name.to_string(), version_req, }), - Err(err) => Err(PackageJsonDepValueParseError::Specifier(err)), + Err(err) => Err(PackageJsonDepValueParseError::VersionReq(err)), } } @@ -208,7 +208,7 @@ mod test { let mut package_json = PackageJson::empty(PathBuf::from("/package.json")); package_json.dependencies = Some(IndexMap::from([( "test".to_string(), - "1.x - 1.3".to_string(), + "%*(#$%()".to_string(), )])); let map = get_local_package_json_version_reqs_for_tests(&package_json); assert_eq!( @@ -217,8 +217,8 @@ mod test { "test".to_string(), Err( concat!( - "Invalid specifier version requirement. Unexpected character.\n", - " - 1.3\n", + "Invalid npm version requirement. Unexpected character.\n", + " %*(#$%()\n", " ~" ) .to_string() @@ -228,6 +228,26 @@ mod test { } #[test] + fn test_get_local_package_json_version_reqs_range() { + let mut package_json = PackageJson::empty(PathBuf::from("/package.json")); + package_json.dependencies = Some(IndexMap::from([( + "test".to_string(), + "1.x - 1.3".to_string(), + )])); + let map = get_local_package_json_version_reqs_for_tests(&package_json); + assert_eq!( + map, + IndexMap::from([( + "test".to_string(), + Ok(PackageReq { + name: "test".to_string(), + version_req: VersionReq::parse_from_npm("1.x - 1.3").unwrap() + }) + )]) + ); + } + + #[test] fn test_get_local_package_json_version_reqs_skips_certain_specifiers() { let mut package_json = PackageJson::empty(PathBuf::from("/package.json")); package_json.dependencies = Some(IndexMap::from([ |