nextVersion function

Version nextVersion(
  1. Version version,
  2. Bump bump, {
  3. String? prerelease,
  4. bool graduate = false,
})

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');
}