import { Subscriber } from '../Subscriber'; export function takeWhile(predicate, inclusive = false) { return (source) => source.lift(new TakeWhileOperator(predicate, inclusive)); } class TakeWhileOperator { constructor(predicate, inclusive) { this.predicate = predicate; this.inclusive = inclusive; } call(subscriber, source) { return source.subscribe(new TakeWhileSubscriber(subscriber, this.predicate, this.inclusive)); } } class TakeWhileSubscriber extends Subscriber { constructor(destination, predicate, inclusive) { super(destination); this.predicate = predicate; this.inclusive = inclusive; this.index = 0; } _next(value) { const destination = this.destination; let result; try { result = this.predicate(value, this.index++); } catch (err) { destination.error(err); return; } this.nextOrComplete(value, result); } nextOrComplete(value, predicateResult) { const destination = this.destination; if (Boolean(predicateResult)) { destination.next(value); } else { if (this.inclusive) { destination.next(value); } destination.complete(); } } } //# sourceMappingURL=takeWhile.js.map