getPackageDetail method

Future<Response> getPackageDetail(
  1. Request req,
  2. String name,
  3. String version
)

Implementation

Future<shelf.Response> getPackageDetail(
    shelf.Request req, String name, String version) async {
  var pkg = await metaRepo.query(name);
  if (pkg == null) {
    return _pubDevPkg(name);
  }
  PackageVersion? unpuberVersion;
  if (version == 'latest') {
    unpuberVersion = pkg.versions.last;
  } else {
    unpuberVersion =
        pkg.versions.firstWhereOrNull((it) => it.version == version);
  }
  if (unpuberVersion == null) {
    return _ok({'error': 'version not found'});
  }
  var versions = pkg.versions
    ..sort((a, b) => semver.Version.prioritize(
        semver.Version.parse(b.version), semver.Version.parse(a.version)));
  var pubspec = unpuberVersion.pubspec;
  List<String?> authors = [];
  if (pubspec['author'] != null) {
    authors = RegExp(r'<(.*?)>')
        .allMatches(pubspec['author'])
        .map((m) => m.group(1))
        .toList();
  } else if (pubspec['authors'] != null) {
    authors = (pubspec['authors'] as List)
        .map((a) => RegExp(r'<(.*?)>').firstMatch(a)!.group(1))
        .toList();
  }
  var depsMap =
      (pubspec['depdendencies'] as Map? ?? {}).cast<String, String>();
  var data = PackageInfo(
      name: pkg.name,
      version: unpuberVersion.version,
      description: unpuberVersion.pubspec['description'],
      homepage: unpuberVersion.pubspec['homepage'],
      uploaders: pkg.uploaders,
      createdAt: unpuberVersion.published,
      versions: versions,
      authors: authors,
      dependencies: depsMap.keys.toList(),
      tags: _getPkgTags(unpuberVersion.pubspec));
  return _ok({'data': jsonEncode(data)});
}