| import { Subscriber } from '../Subscriber'; |
| export function find(predicate, thisArg) { |
| if (typeof predicate !== 'function') { |
| throw new TypeError('predicate is not a function'); |
| } |
| return (source) => source.lift(new FindValueOperator(predicate, source, false, thisArg)); |
| } |
| export class FindValueOperator { |
| constructor(predicate, source, yieldIndex, thisArg) { |
| this.predicate = predicate; |
| this.source = source; |
| this.yieldIndex = yieldIndex; |
| this.thisArg = thisArg; |
| } |
| call(observer, source) { |
| return source.subscribe(new FindValueSubscriber(observer, this.predicate, this.source, this.yieldIndex, this.thisArg)); |
| } |
| } |
| export class FindValueSubscriber extends Subscriber { |
| constructor(destination, predicate, source, yieldIndex, thisArg) { |
| super(destination); |
| this.predicate = predicate; |
| this.source = source; |
| this.yieldIndex = yieldIndex; |
| this.thisArg = thisArg; |
| this.index = 0; |
| } |
| notifyComplete(value) { |
| const destination = this.destination; |
| destination.next(value); |
| destination.complete(); |
| this.unsubscribe(); |
| } |
| _next(value) { |
| const { predicate, thisArg } = this; |
| const index = this.index++; |
| try { |
| const result = predicate.call(thisArg || this, value, index, this.source); |
| if (result) { |
| this.notifyComplete(this.yieldIndex ? index : value); |
| } |
| } |
| catch (err) { |
| this.destination.error(err); |
| } |
| } |
| _complete() { |
| this.notifyComplete(this.yieldIndex ? -1 : undefined); |
| } |
| } |
| //# sourceMappingURL=find.js.map |