Move _getDeps to dependencies.dart - renamed to parseDeps Removed public Dependency.fromJson ctor
diff --git a/pkgs/pubspec_parse/lib/src/dependency.dart b/pkgs/pubspec_parse/lib/src/dependency.dart index 8c9ab15..9353250 100644 --- a/pkgs/pubspec_parse/lib/src/dependency.dart +++ b/pkgs/pubspec_parse/lib/src/dependency.dart
@@ -5,64 +5,73 @@ import 'package:json_annotation/json_annotation.dart'; import 'package:pub_semver/pub_semver.dart'; +Map<String, Dependency> parseDeps(Map source) => + source?.map((k, v) { + var key = k as String; + var value = _fromJson(v); + if (value == null) { + throw new CheckedFromJsonException( + source, key, 'Pubspec', 'Not a valid dependency value.'); + } + return new MapEntry(key, value); + }) ?? + {}; + +/// Returns `null` if the data could not be parsed. +Dependency _fromJson(dynamic data) { + if (data == null) { + return new HostedDependency(VersionConstraint.any); + } else if (data is String) { + return new HostedDependency(new VersionConstraint.parse(data)); + } else if (data is Map) { + try { + return _fromMap(data); + } on ArgumentError catch (e) { + throw new CheckedFromJsonException( + data, e.name, 'Dependency', e.message.toString()); + } + } + + return null; +} + +Dependency _fromMap(Map data) { + if (data.entries.isEmpty) { +// TODO: provide list of supported keys? + throw new CheckedFromJsonException( + data, null, 'Dependency', 'Must provide at least one key.'); + } + + if (data.containsKey('sdk')) { + return new SdkDependency.fromData(data); + } + + if (data.entries.length > 1) { + throw new CheckedFromJsonException(data, data.keys.skip(1).first as String, + 'Dependency', 'Expected only one key.'); + } + + var entry = data.entries.single; + var key = entry.key as String; + + if (entry.value == null) { + throw new CheckedFromJsonException( + data, key, 'Dependency', 'Cannot be null.'); + } + + switch (key) { + case 'path': + return new PathDependency.fromData(entry.value); + case 'git': + return new GitDependency.fromData(entry.value); + } + + return null; +} + abstract class Dependency { Dependency._(); - /// Returns `null` if the data could not be parsed. - factory Dependency.fromJson(dynamic data) { - if (data == null) { - return new HostedDependency(VersionConstraint.any); - } else if (data is String) { - return new HostedDependency(new VersionConstraint.parse(data)); - } else if (data is Map) { - try { - return new Dependency._fromMap(data); - } on ArgumentError catch (e) { - throw new CheckedFromJsonException( - data, e.name, 'Dependency', e.message.toString()); - } - } - - return null; - } - - factory Dependency._fromMap(Map data) { - if (data.entries.isEmpty) { - // TODO: provide list of supported keys? - throw new CheckedFromJsonException( - data, null, 'Dependency', 'Must provide at least one key.'); - } - - if (data.containsKey('sdk')) { - return new SdkDependency.fromData(data); - } - - if (data.entries.length > 1) { - throw new CheckedFromJsonException( - data, - data.keys.skip(1).first as String, - 'Dependency', - 'Expected only one key.'); - } - - var entry = data.entries.single; - var key = entry.key as String; - - if (entry.value == null) { - throw new CheckedFromJsonException( - data, key, 'Dependency', 'Cannot be null.'); - } - - switch (key) { - case 'path': - return new PathDependency.fromData(entry.value); - case 'git': - return new GitDependency.fromData(entry.value); - } - - return null; - } - String get _info; @override
diff --git a/pkgs/pubspec_parse/lib/src/pubspec.dart b/pkgs/pubspec_parse/lib/src/pubspec.dart index 06d358a..3c9c045 100644 --- a/pkgs/pubspec_parse/lib/src/pubspec.dart +++ b/pkgs/pubspec_parse/lib/src/pubspec.dart
@@ -38,13 +38,13 @@ @JsonKey(fromJson: _environmentMap) final Map<String, VersionConstraint> environment; - @JsonKey(fromJson: _getDeps, nullable: false) + @JsonKey(fromJson: parseDeps, nullable: false) final Map<String, Dependency> dependencies; - @JsonKey(name: 'dev_dependencies', fromJson: _getDeps, nullable: false) + @JsonKey(name: 'dev_dependencies', fromJson: parseDeps, nullable: false) final Map<String, Dependency> devDependencies; - @JsonKey(name: 'dependency_overrides', fromJson: _getDeps, nullable: false) + @JsonKey(name: 'dependency_overrides', fromJson: parseDeps, nullable: false) final Map<String, Dependency> dependencyOverrides; /// If [author] and [authors] are both provided, their values are combined @@ -84,19 +84,6 @@ } } -// TODO: maybe move this to `dependencies.dart`? -Map<String, Dependency> _getDeps(Map source) => - source?.map((k, v) { - var key = k as String; - var value = new Dependency.fromJson(v); - if (value == null) { - throw new CheckedFromJsonException( - source, key, 'Pubspec', 'Not a valid dependency value.'); - } - return new MapEntry(key, value); - }) ?? - {}; - Version _versionFromString(String input) => new Version.parse(input); Map<String, VersionConstraint> _environmentMap(Map source) =>
diff --git a/pkgs/pubspec_parse/lib/src/pubspec.g.dart b/pkgs/pubspec_parse/lib/src/pubspec.g.dart index 4f040ff..c32db09 100644 --- a/pkgs/pubspec_parse/lib/src/pubspec.g.dart +++ b/pkgs/pubspec_parse/lib/src/pubspec.g.dart
@@ -27,11 +27,11 @@ description: $checkedConvert(json, 'description', (v) => v as String), dependencies: $checkedConvert( - json, 'dependencies', (v) => _getDeps(v as Map)), + json, 'dependencies', (v) => parseDeps(v as Map)), devDependencies: $checkedConvert( - json, 'dev_dependencies', (v) => _getDeps(v as Map)), + json, 'dev_dependencies', (v) => parseDeps(v as Map)), dependencyOverrides: $checkedConvert( - json, 'dependency_overrides', (v) => _getDeps(v as Map))), + json, 'dependency_overrides', (v) => parseDeps(v as Map))), fieldKeyMap: const { 'devDependencies': 'dev_dependencies', 'dependencyOverrides': 'dependency_overrides'