import { Subscriber } from '../Subscriber'; export function count(predicate) { return (source) => source.lift(new CountOperator(predicate, source)); } class CountOperator { constructor(predicate, source) { this.predicate = predicate; this.source = source; } call(subscriber, source) { return source.subscribe(new CountSubscriber(subscriber, this.predicate, this.source)); } } class CountSubscriber extends Subscriber { constructor(destination, predicate, source) { super(destination); this.predicate = predicate; this.source = source; this.count = 0; this.index = 0; } _next(value) { if (this.predicate) { this._tryPredicate(value); } else { this.count++; } } _tryPredicate(value) { let result; try { result = this.predicate(value, this.index++, this.source); } catch (err) { this.destination.error(err); return; } if (result) { this.count++; } } _complete() { this.destination.next(this.count); this.destination.complete(); } } //# sourceMappingURL=count.js.map