Version.parse constructor

Version.parse(
  1. String raw
)

Parse version string to Version

Throw:

Example:

const versionString = 'v1.2.3-beta.ab-test';
final version = Version.parse(versionString);
print('prefix: ${version.prefix}\n'
    'major: ${version.major}\n'
    'minor: ${version.minor}\n'
    'patch: ${version.patch}\n'
    'type: ${version.type}\n'
    'description: ${version.description}\n'
    'display: ${version.display}');

// Output:
// prefix: v
// major: 1
// minor: 2
// patch: 3
// type: VersionType.beta
// description: ab-test
// display: v1.2.3-beta.ab-test

Implementation

factory Version.parse(String raw) {
  final reg = RegExp(
      r'^(?<prefix>[^0-9]+)(?<major>[0-9]+)\.(?<minor>[0-9]+)\.(?<patch>[0-9]+)(-(?<type>[^.]+))?(\.(?<description>.+))?$');

  // parse
  final result = reg.firstMatch(raw);
  if (result == null) throw ArgumentError('Invalid version string: $raw');

  // prefix
  final prefix = result.namedGroup('prefix');

  // major
  final majorRaw = result.namedGroup('major');
  if (majorRaw == null) throw ArgumentError('Invalid version string: $raw');
  final major = int.tryParse(majorRaw, radix: 10);
  if (major == null) throw ArgumentError('Invalid version string: $raw');

  // minor
  final minorRaw = result.namedGroup('minor');
  if (minorRaw == null) throw ArgumentError('Invalid version string: $raw');
  final minor = int.tryParse(minorRaw, radix: 10);
  if (minor == null) throw ArgumentError('Invalid version string: $raw');

  // patch
  final patchRaw = result.namedGroup('patch');
  if (patchRaw == null) throw ArgumentError('Invalid version string: $raw');
  final patch = int.tryParse(patchRaw, radix: 10);
  if (patch == null) throw ArgumentError('Invalid version string: $raw');

  // type
  final typeRaw = result.namedGroup('type');
  VersionType? type;
  if (typeRaw != null) {
    type = _versionTypeFromString(typeRaw);
    if (type == null) throw ArgumentError('Invalid version string: $raw');
  }

  return Version._(
    prefix: prefix,
    major: major,
    minor: minor,
    patch: patch,
    type: type,
    description: result.namedGroup('description'),
  );
}