in app/lib/search/backend.dart [73:162]
Future<PackageDocument> loadDocument(String packageName) async {
final p = await packageBackend.lookupPackage(packageName);
if (p == null || p.isNotVisible) {
throw RemovedPackageException();
}
final releases = await packageBackend.latestReleases(p);
final pv = await packageBackend.lookupPackageVersion(
packageName, releases.stable.version);
if (pv == null) {
throw RemovedPackageException();
}
final readmeAsset = await packageBackend.lookupPackageVersionAsset(
packageName, pv.version!, AssetKind.readme);
final scoreCard =
await scoreCardBackend.getScoreCardData(packageName, pv.version!);
// Find tags from latest prerelease and/or preview (if there one)
// This allows searching for tags with `<tag>-in-prerelease`.
// Example: `is:null-safe-in-prerelease`, or `platform:android-in-prerelease`
Future<List<String>> loadTags(String version) async {
final tags = <String>[];
final prv =
await packageBackend.lookupPackageVersion(packageName, version);
prv?.getTags().forEach(tags.add);
final pra = await scoreCardBackend.getScoreCardData(packageName, version);
pra?.panaReport?.derivedTags?.forEach(tags.add);
return tags;
}
final prereleaseTags = releases.showPrerelease
? await loadTags(releases.prerelease!.version)
: <String>[];
final previewTags = releases.showPreview
? await loadTags(releases.preview!.version)
: <String>[];
final tags = <String>{
// Every package gets the show:* tags, so they can be used as override in
// the query text.
PackageTags.showHidden,
PackageTags.showDiscontinued,
PackageTags.showUnlisted,
PackageVersionTags.showLegacy,
// regular tags
...p.getTags(),
...pv.getTags(),
...?scoreCard?.panaReport?.derivedTags,
...prereleaseTags,
...previewTags,
};
final pubDataContent = await dartdocBackend.getTextContent(
packageName, 'latest', 'pub-data.json',
timeout: const Duration(minutes: 1));
List<ApiDocPage>? apiDocPages;
try {
if (pubDataContent == null || pubDataContent.isEmpty) {
_logger.info('Got empty pub-data.json for package $packageName.');
} else {
apiDocPages = _apiDocPagesFromPubDataText(pubDataContent);
}
} catch (e, st) {
_logger.severe('Parsing pub-data.json failed.', e, st);
}
final popularity = popularityStorage.lookup(packageName);
return PackageDocument(
package: pv.package,
version: pv.version!,
tags: tags.toList(),
description: compactDescription(pv.pubspec!.description),
created: p.created,
updated: p.lastVersionPublished,
readme: compactReadme(readmeAsset?.textContent),
popularity: popularity,
likeCount: p.likes,
grantedPoints: scoreCard?.grantedPubPoints,
maxPoints: scoreCard?.maxPubPoints ?? 0,
dependencies: _buildDependencies(pv.pubspec!, scoreCard),
publisherId: p.publisherId,
apiDocPages: apiDocPages,
timestamp: clock.now().toUtc(),
);
}