getPublishedVersionsForPackage function

Future<List<Version>> getPublishedVersionsForPackage(
  1. String packageName, {
  2. Uri? publishedTo,
})

Implementation

Future<List<Version>> getPublishedVersionsForPackage(String packageName,
    {Uri? publishedTo}) async {
  if (publishedTo == null || publishedTo == noneUrl) {
    publishedTo = pubUrl;
  }
  if (!publishedTo.path.endsWith('/')) {
    publishedTo = Uri.parse('$publishedTo/');
  }
  final url = publishedTo.resolve('api/packages/$packageName');
  final response = await http.get(url);

  if (response.statusCode == 404) {
    // The package was never published
    return const [];
  } else if (response.statusCode != 200) {
    throw DartBomException(
        'Error reading pub.dev registry for package "$packageName" '
        '(HTTP Status ${response.statusCode}), response: ${response.body}',
        3);
  }
  final versions = <Version>[];
  var jsonBody = json.decode(response.body);
  final versionsRaw = (jsonBody['versions'] as List);
  for (final versionElement in versionsRaw) {
    versions.add(Version.parse(versionElement['version'] as String));
  }
  versions.sort((Version a, Version b) {
    return Version.prioritize(a, b);
  });

  return versions.reversed.toList();
}