Index: watcher/lib/src/utils.dart |
diff --git a/watcher/lib/src/utils.dart b/watcher/lib/src/utils.dart |
deleted file mode 100644 |
index 007c84c193f1bea55261659fd91058bf9a9678be..0000000000000000000000000000000000000000 |
--- a/watcher/lib/src/utils.dart |
+++ /dev/null |
@@ -1,117 +0,0 @@ |
-// 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 watcher.utils; |
- |
-import 'dart:async'; |
-import 'dart:io'; |
-import 'dart:collection'; |
- |
-/// Returns `true` if [error] is a [FileSystemException] for a missing |
-/// directory. |
-bool isDirectoryNotFoundException(error) { |
- if (error is! FileSystemException) return false; |
- |
- // See dartbug.com/12461 and tests/standalone/io/directory_error_test.dart. |
- var notFoundCode = Platform.operatingSystem == "windows" ? 3 : 2; |
- return error.osError.errorCode == notFoundCode; |
-} |
- |
-/// Returns the union of all elements in each set in [sets]. |
-Set unionAll(Iterable<Set> sets) => |
- sets.fold(new Set(), (union, set) => union.union(set)); |
- |
-/// Returns a buffered stream that will emit the same values as the stream |
-/// returned by [future] once [future] completes. |
-/// |
-/// If [future] completes to an error, the return value will emit that error and |
-/// then close. |
-/// |
-/// If [broadcast] is true, a broadcast stream is returned. This assumes that |
-/// the stream returned by [future] will be a broadcast stream as well. |
-/// [broadcast] defaults to false. |
-Stream futureStream(Future<Stream> future, {bool broadcast: false}) { |
- var subscription; |
- var controller; |
- |
- future = future.catchError((e, stackTrace) { |
- // Since [controller] is synchronous, it's likely that emitting an error |
- // will cause it to be cancelled before we call close. |
- if (controller != null) controller.addError(e, stackTrace); |
- if (controller != null) controller.close(); |
- controller = null; |
- }); |
- |
- onListen() { |
- future.then((stream) { |
- if (controller == null) return; |
- subscription = stream.listen( |
- controller.add, |
- onError: controller.addError, |
- onDone: controller.close); |
- }); |
- } |
- |
- onCancel() { |
- if (subscription != null) subscription.cancel(); |
- subscription = null; |
- controller = null; |
- } |
- |
- if (broadcast) { |
- controller = new StreamController.broadcast( |
- sync: true, onListen: onListen, onCancel: onCancel); |
- } else { |
- controller = new StreamController( |
- sync: true, onListen: onListen, onCancel: onCancel); |
- } |
- return controller.stream; |
-} |
- |
-/// Like [new Future], but avoids around issue 11911 by using [new Future.value] |
-/// under the covers. |
-Future newFuture(callback()) => new Future.value().then((_) => callback()); |
- |
-/// Returns a [Future] that completes after pumping the event queue [times] |
-/// times. By default, this should pump the event queue enough times to allow |
-/// any code to run, as long as it's not waiting on some external event. |
-Future pumpEventQueue([int times = 20]) { |
- if (times == 0) return new Future.value(); |
- // We use a delayed future to allow microtask events to finish. The |
- // Future.value or Future() constructors use scheduleMicrotask themselves and |
- // would therefore not wait for microtask callbacks that are scheduled after |
- // invoking this method. |
- return new Future.delayed(Duration.ZERO, () => pumpEventQueue(times - 1)); |
-} |
- |
-/// A stream transformer that batches all events that are sent at the same time. |
-/// |
-/// When multiple events are synchronously added to a stream controller, the |
-/// [StreamController] implementation uses [scheduleMicrotask] to schedule the |
-/// asynchronous firing of each event. In order to recreate the synchronous |
-/// batches, this collates all the events that are received in "nearby" |
-/// microtasks. |
-class BatchedStreamTransformer<T> implements StreamTransformer<T, List<T>> { |
- Stream<List<T>> bind(Stream<T> input) { |
- var batch = new Queue(); |
- return new StreamTransformer<T, List<T>>.fromHandlers( |
- handleData: (event, sink) { |
- batch.add(event); |
- |
- // [Timer.run] schedules an event that runs after any microtasks that have |
- // been scheduled. |
- Timer.run(() { |
- if (batch.isEmpty) return; |
- sink.add(batch.toList()); |
- batch.clear(); |
- }); |
- }, handleDone: (sink) { |
- if (batch.isNotEmpty) { |
- sink.add(batch.toList()); |
- batch.clear(); |
- } |
- sink.close(); |
- }).bind(input); |
- } |
-} |