1 import { OuterSubscriber } from '../OuterSubscriber';
2 import { subscribeToResult } from '../util/subscribeToResult';
3 export function distinct(keySelector, flushes) {
4 return (source) => source.lift(new DistinctOperator(keySelector, flushes));
6 class DistinctOperator {
7 constructor(keySelector, flushes) {
8 this.keySelector = keySelector;
9 this.flushes = flushes;
11 call(subscriber, source) {
12 return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));
15 export class DistinctSubscriber extends OuterSubscriber {
16 constructor(destination, keySelector, flushes) {
18 this.keySelector = keySelector;
19 this.values = new Set();
21 this.add(subscribeToResult(this, flushes));
24 notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
27 notifyError(error, innerSub) {
31 if (this.keySelector) {
32 this._useKeySelector(value);
35 this._finalizeNext(value, value);
38 _useKeySelector(value) {
40 const { destination } = this;
42 key = this.keySelector(value);
45 destination.error(err);
48 this._finalizeNext(key, value);
50 _finalizeNext(key, value) {
51 const { values } = this;
52 if (!values.has(key)) {
54 this.destination.next(value);
58 //# sourceMappingURL=distinct.js.map