platform/packages/cli/lib/src/commands/make/maker.dart
Tobe O 0aab437ca1 Add 'packages/cli/' from commit '63e5c99c96809070c18af0c3803141d0436dd992'
git-subtree-dir: packages/cli
git-subtree-mainline: cf8e83552a
git-subtree-split: 63e5c99c96
2020-02-15 18:28:18 -05:00

82 lines
2.5 KiB
Dart

import 'dart:async';
import 'package:io/ansi.dart';
import '../../util.dart';
class MakerDependency implements Comparable<MakerDependency> {
final String name, version;
final bool dev;
const MakerDependency(this.name, this.version, {this.dev: false});
@override
int compareTo(MakerDependency other) => name.compareTo(other.name);
}
Future depend(Iterable<MakerDependency> deps) async {
var pubspec = await loadPubspec();
var missing = <MakerDependency>[];
for (var dep in deps) {
var isPresent = false;
if (dep.dev)
isPresent = pubspec.devDependencies.containsKey(dep.name);
else
isPresent = pubspec.dependencies.containsKey(dep.name);
if (!isPresent) {
missing.add(dep);
// TODO: https://github.com/dart-lang/pubspec_parse/issues/17:
// print('Installing ${dep.name}@${dep.version}...');
//
// if (dep.dev) {
// pubspec.devDependencies[dep.name] = new HostedDependency(
// version: new VersionConstraint.parse(dep.version),
// );
// } else {
// pubspec.dependencies[dep.name] = new HostedDependency(
// version: new VersionConstraint.parse(dep.version),
// );
// }
}
}
var missingDeps = missing.where((d) => !d.dev).toList()..sort();
var missingDevDeps = missing.where((d) => d.dev).toList()..sort();
var totalCount = missingDeps.length + missingDevDeps.length;
if (totalCount > 0) {
print(yellow.wrap(totalCount == 1
? 'You are missing one dependency.'
: 'You are missing $totalCount dependencies.'));
print(yellow.wrap(
'Update your `pubspec.yaml` to add the following dependencies:\n'));
void printMissing(String type, Iterable<MakerDependency> deps) {
if (deps.isNotEmpty) {
print(yellow.wrap(' $type:'));
for (var dep in deps) {
print(yellow.wrap(' ${dep.name}: ${dep.version}'));
}
}
}
printMissing('dependencies', missingDeps);
printMissing('dev_dependencies', missingDevDeps);
print('\n');
}
// if (isPresent) {
// TODO: https://github.com/dart-lang/pubspec_parse/issues/17
// await savePubspec(pubspec);
// var pubPath = resolvePub();
//
// print('Now running `$pubPath get`...');
//
// var pubGet = await Process.start(pubPath, ['get']);
// pubGet.stdout.listen(stdout.add);
// pubGet.stderr.listen(stderr.add);
//
// var code = await pubGet.exitCode;
//
// if (code != 0) throw 'pub get terminated with exit code $code';
}