blob: 156df4804ddc833f656bd80f163e8514ac02e7b0 [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:collection';
/// Parsing the output of "dart pub deps --json"
///
/// expected structure: {"name": "package name", "source": "hosted", "dependencies": [...]}
class DartDependencyPackage {
DartDependencyPackage({
required this.name,
required this.version,
required this.source,
required this.dependencies,
});
factory DartDependencyPackage.fromHashMap(dynamic packageInfo) {
String name = '';
String version = '';
String source = '';
List<dynamic> dependencies = <dynamic>[];
if (packageInfo is LinkedHashMap) {
final LinkedHashMap<String, dynamic> info = packageInfo as LinkedHashMap<String, dynamic>;
if (info.containsKey('name')) {
name = info['name'] as String;
}
if (info.containsKey('version')) {
version = info['version'] as String;
}
if (info.containsKey('source')) {
source = info['source'] as String;
}
if (info.containsKey('dependencies')) {
dependencies = info['dependencies'] as List<dynamic>;
}
}
return DartDependencyPackage(
name: name,
version: version,
source: source,
dependencies: dependencies.map((dynamic e) => e.toString()).toList(),
);
}
final String name;
final String version;
final String source;
final List<String> dependencies;
}
class DartPubJson {
DartPubJson(this._json);
final LinkedHashMap<String, dynamic> _json;
final List<DartDependencyPackage> _packages = <DartDependencyPackage>[];
List<DartDependencyPackage> get packages {
if (_packages.isNotEmpty) {
return _packages;
}
if (_json.containsKey('packages')) {
final List<dynamic> packagesInfo = _json['packages'] as List<dynamic>;
for (final dynamic info in packagesInfo) {
_packages.add(DartDependencyPackage.fromHashMap(info));
}
}
return _packages;
}
}