getPackageDetail method
- @Route.get('/webapi/package/<name>/<version>')
Future<Response>
getPackageDetail(
- Request req,
- String name,
- String version
)
Implementation
@Route.get('/webapi/package/<name>/<version>')
Future<shelf.Response> getPackageDetail(
shelf.Request req, String name, String version) async {
var package = await metaStore.queryPackage(name);
if (package == null) {
return _okWithJson({'error': 'package not exists'});
}
UnpubVersion? packageVersion;
if (version == 'latest') {
packageVersion = package.versions.last;
} else {
packageVersion =
package.versions.firstWhereOrNull((item) => item.version == version);
}
if (packageVersion == null) {
return _okWithJson({'error': 'version not exists'});
}
var versions = package.versions
.map((v) => DetailViewVersion(v.version, v.createdAt))
.toList();
versions.sort((a, b) {
return semver.Version.prioritize(
semver.Version.parse(b.version), semver.Version.parse(a.version));
});
var pubspec = packageVersion.pubspec;
List<String?> authors;
if (pubspec['author'] != null) {
authors = RegExp(r'<(.*?)>')
.allMatches(pubspec['author'])
.map((match) => match.group(1))
.toList();
} else if (pubspec['authors'] != null) {
authors = (pubspec['authors'] as List)
.map((author) => RegExp(r'<(.*?)>').firstMatch(author)!.group(1))
.toList();
} else {
authors = [];
}
var depMap = (pubspec['dependencies'] as Map? ?? {}).cast<String, String>();
var data = WebapiDetailView(
package.name,
packageVersion.version,
packageVersion.pubspec['description'] ?? '',
packageVersion.pubspec['homepage'] ?? '',
package.uploaders ?? [],
packageVersion.createdAt,
packageVersion.readme,
packageVersion.changelog,
versions,
authors,
depMap.keys.toList(),
getPackageTags(packageVersion.pubspec),
);
return _okWithJson({'data': data.toJson()});
}