nextVersion function
The version after applying bump to version.
Below 1.0.0, Dart treats a minor release as breaking, so a breaking change raises the minor version and a feature raises the patch version.
With prerelease, the result is a pre-release such as 1.2.0-beta.0, or
the next number of an existing pre-release with the same name. With
graduate, a pre-release becomes its release version.
Implementation
Version nextVersion(
Version version,
Bump bump, {
String? prerelease,
bool graduate = false,
}) {
if (graduate && version.isPreRelease) {
return Version(version.major, version.minor, version.patch);
}
if (prerelease != null && version.isPreRelease) {
final parts = version.preRelease;
if (parts.length == 2 && parts[0] == prerelease && parts[1] is int) {
return Version(
version.major,
version.minor,
version.patch,
pre: '$prerelease.${(parts[1] as int) + 1}',
);
}
}
final base = version.isPreRelease
? Version(version.major, version.minor, version.patch)
: _bumped(version, bump);
if (prerelease == null) {
return base;
}
return Version(base.major, base.minor, base.patch, pre: '$prerelease.0');
}