getPackage method

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

Implementation

Future<shelf.Response> getPackage(
    shelf.Request req, String name, String version) async {
  var pkg = await metaRepo.query(name);
  if (pkg == null) {
    return _pubDevPkg(name);
  }
  if (_isDartPubClient(req)) {
    metaRepo.increaseDownloads(name, version);
  }
  final file =
      File(packageStorage.getPackagePath(name: name, version: version));
  if (!file.existsSync()) {
    return shelf.Response.notFound('Package $name $version not found');
  }
  if (packageStorage.supportDownloadUrl) {
    return shelf.Response.found(
        await packageStorage.downloadUrl(name, version),
        headers: _corsHeaders);
  } else {
    return shelf.Response.ok(file.openRead(), headers: {
      HttpHeaders.contentLengthHeader: file.lengthSync().toString(),
      HttpHeaders.contentTypeHeader: ContentType.binary.mimeType,
      ..._corsHeaders
    });
  }
}