getPackageDetail method
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)});
}