1+ enum SemVerType { major, minor, patch }
2+
13class SemVer {
24 final int major;
35 final int minor;
@@ -15,8 +17,20 @@ class SemVer {
1517 }
1618
1719 factory SemVer .fromString (String version) {
20+ if (version.toLowerCase ().startsWith ("v" )) {
21+ version = version.substring (1 );
22+ }
23+
1824 final parts = version.split ("-" )[0 ].split ('.' );
19- return SemVer (major: int .parse (parts[0 ]), minor: int .parse (parts[1 ]), patch: int .parse (parts[2 ]));
25+ if (parts.length != 3 ) {
26+ throw FormatException ('Invalid semantic version string: $version ' );
27+ }
28+
29+ try {
30+ return SemVer (major: int .parse (parts[0 ]), minor: int .parse (parts[1 ]), patch: int .parse (parts[2 ]));
31+ } catch (e) {
32+ throw FormatException ('Invalid semantic version string: $version ' );
33+ }
2034 }
2135
2236 bool operator > (SemVer other) {
@@ -54,6 +68,20 @@ class SemVer {
5468 return other is SemVer && other.major == major && other.minor == minor && other.patch == patch;
5569 }
5670
71+ SemVerType ? differenceType (SemVer other) {
72+ if (major != other.major) {
73+ return SemVerType .major;
74+ }
75+ if (minor != other.minor) {
76+ return SemVerType .minor;
77+ }
78+ if (patch != other.patch) {
79+ return SemVerType .patch;
80+ }
81+
82+ return null ;
83+ }
84+
5785 @override
5886 int get hashCode => major.hashCode ^ minor.hashCode ^ patch.hashCode;
5987}
0 commit comments