semver/CHANGELOG.md
Louis Seubert 50e15afb4f
All checks were successful
default / dotnet-default-workflow (push) Successful in 58s
feat: introduce IdentifierList for prerelease and build-metadata segments
Add a value type wrapping the dot-separated prerelease and build-metadata
identifiers, replacing the previous nullable string properties on
SemanticVersion. Implements IReadOnlyList<string>, zero-alloc
ReadOnlySpan<char> enumeration, Ordinal equality with implicit string
conversions, a JSON converter, and ISpanParsable/IParsable parsing
validated via IdentifierListFormatInfo.

Closes #1
2026-07-12 23:02:24 +02:00

1.8 KiB

Changelog

All notable changes to this project will be documented in this file.

This project adheres to Semantic Versioning.

1.0.0 - 2026-05-21

Added

  • This is the initial release of the library.

Unreleased

Added

  • SemanticVersion and SemanticVersionRange can now be used as System.Text.Json dictionary keys. The custom converters override ReadAsPropertyName/WriteAsPropertyName so Dictionary<TKey, TValue> round-trips correctly.
  • New IdentifierList value type for prerelease/build-metadata identifiers.

Changed

  • Breaking: SemanticVersion.Prerelease and SemanticVersion.Metadata are now IdentifierList instead of string?. Implicit string conversions keep most call sites compiling, but the property type change is breaking and requires a recompile. Constructors additionally accept IdentifierList.
  • SemanticVersion ==/Equals/GetHashCode now ignore build metadata, matching precedence comparison rules.
  • SemanticVersionRange equality (==, Equals, GetHashCode) is now structural and based on the constraint sets, so ranges that parse to the same comparators compare as equal (previously it was reference-sensitive on the backing array).
  • SemanticVersionComparer now enumerates the IdentifierList segments directly instead of re-splitting the joined identifier strings.

Fixed

  • Reject invalid SemVer identifiers when parsing versions.
  • Range exact and non-equal comparators ignore build metadata when matching versions.
  • Avoid infinite recursion when formatting ranges in the short npm (ns) form.

Removed