## 2.2.0

- Remove dependency on `package:meta`.
- Mark `Version` class as `final` instead of with `@sealed`.
- Clarify that the lists returned by
  the `preRelease` and `build` properties of `Version` and
  the `ranges` property of `VersionUnion` should not be modified.
- Note that `VersionConstraint.any` and `VersionConstraint.empty` static fields
  shouldn't be reassigned and will be made `final` in a future release.

## 2.1.5

- Require Dart `3.4.0`.
- Move to `dart-lang/tools` monorepo.

## 2.1.4

- Added topics to `pubspec.yaml`.

## 2.1.3

- Add type parameters to the signatures of the `Version.preRelease` and
  `Version.build` fields (`List` ==> `List<Object>`).
  [#74](https://github.com/dart-lang/pub_semver/pull/74).
- Require Dart 2.17.

## 2.1.2

- Add markdown badges to the readme.

## 2.1.1

- Fixed the version parsing pattern to only accept dots between version
  components.

## 2.1.0

- Added `Version.canonicalizedVersion` to help scrub leading zeros and highlight
  that `Version.toString()` preserves leading zeros.
- Annotated `Version` with `@sealed` to discourage users from implementing the
  interface.

## 2.0.0

- Stable null safety release.
- `Version.primary` now throws `StateError` if the `versions` argument is empty.

## 1.4.4

- Fix a bug of `VersionRange.union` where ranges bounded at infinity would get
  combined wrongly.

# 1.4.3

- Update Dart SDK constraint to `>=2.0.0 <3.0.0`.
- Update `package:collection` constraint to `^1.0.0`.

## 1.4.2

* Set max SDK version to `<3.0.0`.

## 1.4.1

* Fix a bug where there upper bound of a version range with a build identifier
  could accidentally be rewritten.

## 1.4.0

* Add a `Version.firstPreRelease` getter that returns the first possible
  pre-release of a version.

* Add a `Version.isFirstPreRelease` getter that returns whether a version is the
  first possible pre-release.

* `new VersionRange()` with an exclusive maximum now replaces the maximum with
  its first pre-release version. This matches the existing semantics, where an
  exclusive maximum would exclude pre-release versions of that maximum.

  Explicitly representing this by changing the maximum version ensures that all
  operations behave correctly with respect to the special pre-release semantics.
  In particular, it fixes bugs where, for example,
  `(>=1.0.0 <2.0.0-dev).union(>=2.0.0-dev <2.0.0)` and
  `(>=1.0.0 <3.0.0).difference(^1.0.0)` wouldn't include `2.0.0-dev`.

* Add an `alwaysIncludeMaxPreRelease` parameter to `new VersionRange()`, which
  disables the replacement described above and allows users to create ranges
  that do include the pre-release versions of an exclusive max version.

## 1.3.7

* Fix more bugs with `VersionRange.intersect()`, `VersionRange.difference()`,
  and `VersionRange.union()` involving version ranges with pre-release maximums.

## 1.3.6

* Fix a bug where constraints that only allowed pre-release versions would be
  parsed as empty constraints.

## 1.3.5

* Fix a bug where `VersionRange.intersect()` would return incorrect results for
  pre-release versions with the same base version number as release versions.

## 1.3.4

* Fix a bug where `VersionRange.allowsAll()`, `VersionRange.allowsAny()`, and
  `VersionRange.difference()` would return incorrect results for pre-release
  versions with the same base version number as release versions.

## 1.3.3

* Fix a bug where `VersionRange.difference()` with a union constraint that
  covered the entire range would crash.

## 1.3.2

* Fix a checked-mode error in `VersionRange.difference()`.

## 1.3.1

* Fix a new strong mode error.

## 1.3.0

* Make the `VersionUnion` class public. This was previously used internally to
  implement `new VersionConstraint.unionOf()` and `VersionConstraint.union()`.
  Now it's public so you can use it too.

* Added `VersionConstraint.difference()`. This returns a constraint matching all
  versions matched by one constraint but not another.

* Make `VersionRange` implement `Comparable<VersionRange>`. Ranges are ordered
  first by lower bound, then by upper bound.

## 1.2.4

* Fix all remaining strong mode warnings.

## 1.2.3

* Addressed three strong mode warnings.

## 1.2.2

* Make the package analyze under strong mode and compile with the DDC (Dart Dev
  Compiler). Fix two issues with a private subclass of `VersionConstraint`
  having different types for overridden methods.

## 1.2.1

* Allow version ranges like `>=1.2.3-dev.1 <1.2.3` to match pre-release versions
  of `1.2.3`. Previously, these didn't match, since the pre-release versions had
  the same major, minor, and patch numbers as the max; now an exception has been
  added if they also have the same major, minor, and patch numbers as the min
  *and* the min is also a pre-release version.

## 1.2.0

* Add a `VersionConstraint.union()` method and a `new
  VersionConstraint.unionOf()` constructor. These each return a constraint that
  matches multiple existing constraints.

* Add a `VersionConstraint.allowsAll()` method, which returns whether one
  constraint is a superset of another.

* Add a `VersionConstraint.allowsAny()` method, which returns whether one
  constraint overlaps another.

* `Version` now implements `VersionRange`.

## 1.1.0

* Add support for the `^` operator for compatible versions according to pub's
  notion of compatibility. `^1.2.3` is equivalent to `>=1.2.3 <2.0.0`; `^0.1.2`
  is equivalent to `>=0.1.2 <0.2.0`.

* Add `Version.nextBreaking`, which returns the next version that introduces
  breaking changes after a given version.

* Add `new VersionConstraint.compatibleWith()`, which returns a range covering
  all versions compatible with a given version.

* Add a custom `VersionRange.hashCode` to make it properly hashable.

## 1.0.0

* Initial release.
