| Index: utils/pub/utils.dart
|
| diff --git a/utils/pub/utils.dart b/utils/pub/utils.dart
|
| index 7710ac194a1691e2da88c94fad9f780979d93f07..e283a2e02cd2d0036c3e54b1dbb7f384ce3425ae 100644
|
| --- a/utils/pub/utils.dart
|
| +++ b/utils/pub/utils.dart
|
| @@ -118,6 +118,18 @@ void chainToCompleter(Future future, Completer completer) {
|
| onError: (e) => completer.completeError(e.error, e.stackTrace));
|
| }
|
|
|
| +/// Like [Iterable.where], but allows [test] to return [Future]s and uses the
|
| +/// results of those [Future]s as the test.
|
| +Future<Iterable> futureWhere(Iterable iter, test(value)) {
|
| + return Future.wait(iter.mappedBy((e) {
|
| + var result = test(e);
|
| + if (result is! Future) result = new Future.immediate(result);
|
| + return result.then((result) => new Pair(e, result));
|
| + }))
|
| + .then((pairs) => pairs.where((pair) => pair.last))
|
| + .then((pairs) => pairs.mappedBy((pair) => pair.first));
|
| +}
|
| +
|
| // TODO(nweiz): unify the following functions with the utility functions in
|
| // pkg/http.
|
|
|
|
|