123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- import { SimpleOuterSubscriber, innerSubscribe, SimpleInnerSubscriber } from '../innerSubscribe';
- export function distinct(keySelector, flushes) {
- return (source) => source.lift(new DistinctOperator(keySelector, flushes));
- }
- class DistinctOperator {
- constructor(keySelector, flushes) {
- this.keySelector = keySelector;
- this.flushes = flushes;
- }
- call(subscriber, source) {
- return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));
- }
- }
- export class DistinctSubscriber extends SimpleOuterSubscriber {
- constructor(destination, keySelector, flushes) {
- super(destination);
- this.keySelector = keySelector;
- this.values = new Set();
- if (flushes) {
- this.add(innerSubscribe(flushes, new SimpleInnerSubscriber(this)));
- }
- }
- notifyNext() {
- this.values.clear();
- }
- notifyError(error) {
- this._error(error);
- }
- _next(value) {
- if (this.keySelector) {
- this._useKeySelector(value);
- }
- else {
- this._finalizeNext(value, value);
- }
- }
- _useKeySelector(value) {
- let key;
- const { destination } = this;
- try {
- key = this.keySelector(value);
- }
- catch (err) {
- destination.error(err);
- return;
- }
- this._finalizeNext(key, value);
- }
- _finalizeNext(key, value) {
- const { values } = this;
- if (!values.has(key)) {
- values.add(key);
- this.destination.next(value);
- }
- }
- }
- //# sourceMappingURL=distinct.js.map
|