SemanticVersion.parse constructor

SemanticVersion.parse(
  1. String version
)

Parse a version string (e.g., "1.2.3", "1.2.3-alpha", "1.2.3+build.1")

Implementation

factory SemanticVersion.parse(String version) {
  // Remove leading 'v' if present
  String v = version.startsWith('v') ? version.substring(1) : version;

  // Split by + to separate build metadata
  String? buildMetadata;
  if (v.contains('+')) {
    final parts = v.split('+');
    v = parts[0];
    buildMetadata = parts.length > 1 ? parts[1] : null;
  }

  // Split by - to separate pre-release
  String? preRelease;
  if (v.contains('-')) {
    final parts = v.split('-');
    v = parts[0];
    preRelease = parts.length > 1 ? parts.sublist(1).join('-') : null;
  }

  // Parse major.minor.patch
  final parts = v.split('.');
  if (parts.isEmpty) {
    throw FormatException('Invalid version format: $version');
  }

  int major = int.tryParse(parts[0]) ?? 0;
  int minor = parts.length > 1 ? (int.tryParse(parts[1]) ?? 0) : 0;
  int patch = parts.length > 2 ? (int.tryParse(parts[2]) ?? 0) : 0;

  return SemanticVersion(
    major: major,
    minor: minor,
    patch: patch,
    preRelease: preRelease,
    buildMetadata: buildMetadata,
  );
}