workspaceDependenciesOf function

List<WorkspacePackage> workspaceDependenciesOf(
  1. Workspace workspace,
  2. List<WorkspacePackage> packages
)

The workspace packages that packages depend on through dependencies, directly or through other workspace packages, in workspace order. A package in packages is included only when another package depends on it.

Implementation

List<WorkspacePackage> workspaceDependenciesOf(
  Workspace workspace,
  List<WorkspacePackage> packages,
) {
  final byName = {
    for (final package in workspace.allPackages) package.name: package,
  };
  final found = <String>{};
  void visit(WorkspacePackage package) {
    for (final name in package.dependencies) {
      final dependency = byName[name];
      if (dependency != null && found.add(name)) {
        visit(dependency);
      }
    }
  }

  packages.forEach(visit);
  return [
    for (final package in workspace.allPackages)
      if (found.contains(package.name)) package,
  ];
}