resolveVersion method

Future<PubVersionInfo> resolveVersion(
  1. String packageName,
  2. String constraint
)

Resolve a semver constraint to the best (highest) matching version.

Implementation

Future<PubVersionInfo> resolveVersion(
  String packageName,
  String constraint,
) async {
  final versions = await getVersions(packageName);
  final vc = VersionConstraint.parse(constraint);

  PubVersionInfo? best;
  Version? bestVersion;
  for (final info in versions) {
    final v = Version.parse(info.version);
    if (vc.allows(v)) {
      if (bestVersion == null || v > bestVersion) {
        best = info;
        bestVersion = v;
      }
    }
  }
  if (best == null) {
    throw StateError(
      'No version of "$packageName" matches constraint "$constraint". '
      'Available: ${versions.map((v) => v.version).join(', ')}',
    );
  }
  return best;
}