| // 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; |
| } |
| } |