cda297fa22c159991915548c5e5eb6a65fb189bd
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / rxjs / _esm2015 / internal / operators / distinct.js
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));
5 }
6 class DistinctOperator {
7     constructor(keySelector, flushes) {
8         this.keySelector = keySelector;
9         this.flushes = flushes;
10     }
11     call(subscriber, source) {
12         return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));
13     }
14 }
15 export class DistinctSubscriber extends OuterSubscriber {
16     constructor(destination, keySelector, flushes) {
17         super(destination);
18         this.keySelector = keySelector;
19         this.values = new Set();
20         if (flushes) {
21             this.add(subscribeToResult(this, flushes));
22         }
23     }
24     notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
25         this.values.clear();
26     }
27     notifyError(error, innerSub) {
28         this._error(error);
29     }
30     _next(value) {
31         if (this.keySelector) {
32             this._useKeySelector(value);
33         }
34         else {
35             this._finalizeNext(value, value);
36         }
37     }
38     _useKeySelector(value) {
39         let key;
40         const { destination } = this;
41         try {
42             key = this.keySelector(value);
43         }
44         catch (err) {
45             destination.error(err);
46             return;
47         }
48         this._finalizeNext(key, value);
49     }
50     _finalizeNext(key, value) {
51         const { values } = this;
52         if (!values.has(key)) {
53             values.add(key);
54             this.destination.next(value);
55         }
56     }
57 }
58 //# sourceMappingURL=distinct.js.map