getPublishedVersions method

Future<List<String>> getPublishedVersions()

Queries the pub.dev registry for published versions of this package. Primarily used for publish filters and versioning.

Implementation

Future<List<String>> getPublishedVersions() async {
  if (isPrivate) {
    return [];
  }

  final pubHosted = publishTo ?? pubUrl;

  final url = pubHosted.replace(path: '/packages/$name.json');
  final response = await http.get(url);

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

  return versions.reversed.toList();
}