anchor.diff:      throw new UnsupportedError('Not supported.');
     }
   }
  +
  +/// Provides an interface for both StreamController & and Stream for use with
  +/// output events in Angular components.
  +///
  +/// Reduces the amount of boilerplate needed by removing the need for a getter
  +/// that returns the stream for angular.
  +class SimpleEmitter<T> extends SimpleStream<T> {
  +  SimpleEmitter(
  +      {bool isSync = true,
  +      bool runInZone = true,
  +      SubscriptionChangeListener onListen,
  +      SubscriptionChangeListener onCancel})
  +      : super.broadcast(
  +            isSync: isSync,
  +            runInZone: runInZone,
  +            onListen: onListen,
  +            onCancel: onCancel);
  +
  +  /// Returns referene to object.
  +  Stream<T> get stream => this;
  +
  +  /// Returns referene to object.
  +  EventSink<T> get sink => this;
  +}
  
positive.code:   /// Using array as the assumption is that there will mainly be limited number
    /// of subscribers and overhead of a map is more.  It can always be made
    /// smarter.  If it is null, it means that the stream is closed.
    List<SimpleStreamSubscription<T>> _subscriptions = [];
  
    /// List of items to send to avoid scheduling multiple micro tasks for each
    /// item to be sent.
  
negative.code:   }
  
    @override
    StreamSubscription<T> listen(void onData(T event),
        {Function onError, void onDone(), bool cancelOnError}) {
      // Don't allow listening to a closed stream, it will throw exception in
      // non checked mode since subscriptions will be null once the stream is
      // closed.
  