| import { EmptyError } from '../util/EmptyError'; |
| import { SequenceError } from '../util/SequenceError'; |
| import { NotFoundError } from '../util/NotFoundError'; |
| import { operate } from '../util/lift'; |
| import { createOperatorSubscriber } from './OperatorSubscriber'; |
| export function single(predicate) { |
| return operate((source, subscriber) => { |
| let hasValue = false; |
| let singleValue; |
| let seenValue = false; |
| let index = 0; |
| source.subscribe(createOperatorSubscriber(subscriber, (value) => { |
| seenValue = true; |
| if (!predicate || predicate(value, index++, source)) { |
| hasValue && subscriber.error(new SequenceError('Too many matching values')); |
| hasValue = true; |
| singleValue = value; |
| } |
| }, () => { |
| if (hasValue) { |
| subscriber.next(singleValue); |
| subscriber.complete(); |
| } |
| else { |
| subscriber.error(seenValue ? new NotFoundError('No matching values') : new EmptyError()); |
| } |
| })); |
| }); |
| } |
| //# sourceMappingURL=single.js.map |