1 import { SimpleOuterSubscriber, innerSubscribe, SimpleInnerSubscriber } from '../innerSubscribe';
2 export function distinct(keySelector, flushes) {
3 return (source) => source.lift(new DistinctOperator(keySelector, flushes));
5 class DistinctOperator {
6 constructor(keySelector, flushes) {
7 this.keySelector = keySelector;
8 this.flushes = flushes;
10 call(subscriber, source) {
11 return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));
14 export class DistinctSubscriber extends SimpleOuterSubscriber {
15 constructor(destination, keySelector, flushes) {
17 this.keySelector = keySelector;
18 this.values = new Set();
20 this.add(innerSubscribe(flushes, new SimpleInnerSubscriber(this)));
30 if (this.keySelector) {
31 this._useKeySelector(value);
34 this._finalizeNext(value, value);
37 _useKeySelector(value) {
39 const { destination } = this;
41 key = this.keySelector(value);
44 destination.error(err);
47 this._finalizeNext(key, value);
49 _finalizeNext(key, value) {
50 const { values } = this;
51 if (!values.has(key)) {
53 this.destination.next(value);
57 //# sourceMappingURL=distinct.js.map