SoftwareRelease.fromEvent constructor

SoftwareRelease.fromEvent(
  1. Nip01Event event
)

Implementation

factory SoftwareRelease.fromEvent(Nip01Event event) {
  if (event.kind != softwareReleaseKind) {
    throw SoftwareParseException('expected kind $softwareReleaseKind');
  }
  final identifier = _requiredTag(event, 'i');
  final version = _requiredTag(event, 'version');
  if (_requiredTag(event, 'd') != '$identifier@$version') {
    throw const SoftwareParseException('release d tag must equal i@version');
  }
  final assets = event.tags
      .where((tag) => tag.length > 1 && tag.first == 'e' && tag[1].isNotEmpty)
      .map(
        (tag) => SoftwareAssetRef(
          eventId: tag[1],
          relayHint: tag.length > 2 && tag[2].isNotEmpty ? tag[2] : null,
        ),
      )
      .toList(growable: false);
  if (assets.isEmpty) {
    throw const SoftwareParseException('release requires an asset reference');
  }
  return SoftwareRelease(
    identifier: identifier,
    version: version,
    channel: _requiredTag(event, 'c'),
    releaseNotes: event.content,
    assets: assets,
    event: event,
  );
}