blob: 634eb5ce5918cbda59e756ed339b564406472cb8 [file] [log] [blame]
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library pub.package_graph;
import 'entrypoint.dart';
import 'package.dart';
/// A holistic view of the entire transitive dependency graph for an entrypoint.
///
/// A package graph can be loaded using [Entrypoint.loadPackageGraph].
class PackageGraph {
/// The entrypoint.
final Entrypoint entrypoint;
/// All transitive dependencies of the entrypoint (including itself).
final Map<String, Package> packages;
PackageGraph(this.entrypoint, this.packages);
/// Returns the set of transitive dependencies of the package named
/// [packageName].
Set<Package> transitiveDependencies(String packageName) {
var seen = new Set<Package>();
traverse(Package package) {
if (seen.contains(package)) return;
seen.add(package);
for (var dep in package.dependencies) {
traverse(packages[dep.name]);
}
}
var package = packages[packageName];
traverse(package);
seen.remove(package);
return seen;
}
}