Catalog.parse constructor

Catalog.parse(
  1. ConfigReader reader
)

Implementation

factory Catalog.parse(ConfigReader reader) {
  reader.checkKeys(keys);

  final environment = reader.stringMap('environment');
  if (environment != null) {
    final environmentReader = reader.child('environment')!;
    for (final MapEntry(:key, :value) in environment.entries) {
      try {
        VersionConstraint.parse(value);
      } on FormatException {
        throw environmentReader.valueError(
          key,
          '"$value" is not a version constraint.',
        );
      }
    }
  }

  final version = reader.string('version');
  if (version != null) {
    try {
      Version.parse(version);
    } on FormatException {
      throw reader.valueError(
        'version',
        '"$version" is not a version. Use one like 1.2.3.',
      );
    }
  }

  final resolution = reader.string('resolution');
  if (resolution != null &&
      !const {'workspace', 'local', 'external'}.contains(resolution)) {
    throw reader.valueError(
      'resolution',
      '"$resolution" is not a resolution. Use "workspace", "local", or '
          '"external".',
    );
  }

  final platforms = reader.map['platforms'];
  if (platforms != null && platforms is! YamlMap) {
    throw reader.valueError(
      'platforms',
      'expected a mapping, found ${describe(platforms)}.',
    );
  }

  return Catalog(
    environment: environment,
    version: version,
    publishTo: reader.string('publish_to'),
    homepage: reader.string('homepage'),
    repository: reader.string('repository'),
    issueTracker: reader.string('issue_tracker'),
    documentation: reader.string('documentation'),
    topics: reader.stringList('topics'),
    funding: reader.stringList('funding'),
    platforms: platforms == null
        ? null
        : toPlain(platforms) as Map<Object?, Object?>,
    resolution: resolution,
    dependencies: _dependencies(reader, 'dependencies'),
  );
}