immich/mobile/lib/utils/semver.dart
Brandon Wees efac8c6667
fix: semver parser grab everything before hyphen (#23140)
used for versions like 2.1.0-DEBUG
2025-10-22 10:06:40 -05:00

60 lines
1.4 KiB
Dart

class SemVer {
final int major;
final int minor;
final int patch;
const SemVer({required this.major, required this.minor, required this.patch});
@override
String toString() {
return '$major.$minor.$patch';
}
SemVer copyWith({int? major, int? minor, int? patch}) {
return SemVer(major: major ?? this.major, minor: minor ?? this.minor, patch: patch ?? this.patch);
}
factory SemVer.fromString(String version) {
final parts = version.split("-")[0].split('.');
return SemVer(major: int.parse(parts[0]), minor: int.parse(parts[1]), patch: int.parse(parts[2]));
}
bool operator >(SemVer other) {
if (major != other.major) {
return major > other.major;
}
if (minor != other.minor) {
return minor > other.minor;
}
return patch > other.patch;
}
bool operator <(SemVer other) {
if (major != other.major) {
return major < other.major;
}
if (minor != other.minor) {
return minor < other.minor;
}
return patch < other.patch;
}
bool operator >=(SemVer other) {
return this > other || this == other;
}
bool operator <=(SemVer other) {
return this < other || this == other;
}
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is SemVer && other.major == major && other.minor == minor && other.patch == patch;
}
@override
int get hashCode => major.hashCode ^ minor.hashCode ^ patch.hashCode;
}