diff --git a/.changeset/serious-parents-tease.md b/.changeset/serious-parents-tease.md new file mode 100644 index 0000000..36f3c74 --- /dev/null +++ b/.changeset/serious-parents-tease.md @@ -0,0 +1,5 @@ +--- +"fnm": minor +--- + +Replace `semver` with `node_semver` diff --git a/Cargo.lock b/Cargo.lock index 3097cea..8cea767 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -155,6 +155,12 @@ version = "3.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" +[[package]] +name = "bytecount" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c" + [[package]] name = "byteorder" version = "1.4.3" @@ -615,9 +621,9 @@ dependencies = [ "indoc", "junction", "log", + "node-semver", "pretty_assertions", "reqwest", - "semver", "serde", "serde_json", "sysinfo", @@ -1001,12 +1007,41 @@ dependencies = [ "autocfg", ] +[[package]] +name = "miette" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28d6092d7e94a90bb9ea8e6c26c99d5d112d49dda2afdb4f7ea8cf09e1a5a6d" +dependencies = [ + "miette-derive", + "once_cell", + "thiserror", + "unicode-width", +] + +[[package]] +name = "miette-derive" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f2485ed7d1fe80704928e3eb86387439609bd0c6bb96db8208daa364cfd1e09" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "mime" version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.5.4" @@ -1028,6 +1063,29 @@ dependencies = [ "windows-sys 0.42.0", ] +[[package]] +name = "node-semver" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84f390c1756333538f2aed01cf280a56bc683e199b9804a504df6e7320d40116" +dependencies = [ + "bytecount", + "miette", + "nom", + "serde", + "thiserror", +] + +[[package]] +name = "nom" +version = "7.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "ntapi" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index 8a69bee..b5f6db2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ serde_json = "1.0.88" chrono = { version = "0.4.23", features = ["serde"] } tar = "0.4.38" xz2 = "0.1.7" -semver = "1.0.14" +node-semver = "2.1.0" dirs = "4.0.0" colored = "2.0.0" zip = "0.6.3" diff --git a/src/current_version.rs b/src/current_version.rs index 8dbf846..7e73960 100644 --- a/src/current_version.rs +++ b/src/current_version.rs @@ -36,7 +36,7 @@ pub enum Error { EnvNotApplied, #[error("Can't read the version as a valid semver")] VersionError { - source: semver::Error, + source: node_semver::SemverError, version: String, }, } diff --git a/src/installed_versions.rs b/src/installed_versions.rs index bf2a147..5e06e3b 100644 --- a/src/installed_versions.rs +++ b/src/installed_versions.rs @@ -36,6 +36,6 @@ pub enum Error { #[error(transparent)] SemverError { #[from] - source: semver::Error, + source: node_semver::SemverError, }, } diff --git a/src/user_version.rs b/src/user_version.rs index bf1897e..b7524c5 100644 --- a/src/user_version.rs +++ b/src/user_version.rs @@ -70,7 +70,7 @@ fn skip_first_v(str: &str) -> &str { } impl FromStr for UserVersion { - type Err = semver::Error; + type Err = node_semver::SemverError; fn from_str(s: &str) -> Result { match Version::parse(s) { Ok(v) => Ok(Self::Full(v)), diff --git a/src/user_version_reader.rs b/src/user_version_reader.rs index 14190a6..8c79c7a 100644 --- a/src/user_version_reader.rs +++ b/src/user_version_reader.rs @@ -21,7 +21,7 @@ impl UserVersionReader { } impl FromStr for UserVersionReader { - type Err = semver::Error; + type Err = node_semver::SemverError; fn from_str(s: &str) -> Result { let pathbuf = PathBuf::from_str(s); diff --git a/src/version.rs b/src/version.rs index 89d792f..5c02ab7 100644 --- a/src/version.rs +++ b/src/version.rs @@ -6,7 +6,7 @@ use std::str::FromStr; #[derive(Debug, PartialEq, PartialOrd, Eq, Ord, Clone)] pub enum Version { - Semver(semver::Version), + Semver(node_semver::Version), Lts(LtsType), Alias(String), Latest, @@ -18,7 +18,7 @@ fn first_letter_is_number(s: &str) -> bool { } impl Version { - pub fn parse>(version_str: S) -> Result { + pub fn parse>(version_str: S) -> Result { let lowercased = version_str.as_ref().to_lowercase(); if lowercased == system_version::display_name() { Ok(Self::Bypassed) @@ -27,7 +27,7 @@ impl Version { Ok(Self::Lts(lts_type)) } else if first_letter_is_number(lowercased.trim_start_matches('v')) { let version_plain = lowercased.trim_start_matches('v'); - let sver = semver::Version::parse(version_plain)?; + let sver = node_semver::Version::parse(version_plain)?; Ok(Self::Semver(sver)) } else { Ok(Self::Alias(lowercased)) @@ -100,14 +100,14 @@ impl std::fmt::Display for Version { } impl FromStr for Version { - type Err = semver::Error; + type Err = node_semver::SemverError; fn from_str(s: &str) -> Result { Self::parse(s) } } -impl PartialEq for Version { - fn eq(&self, other: &semver::Version) -> bool { +impl PartialEq for Version { + fn eq(&self, other: &node_semver::Version) -> bool { match self { Self::Bypassed | Self::Lts(_) | Self::Alias(_) | Self::Latest => false, Self::Semver(v) => v == other,