| import { Subscriber } from '../Subscriber'; |
| export function distinctUntilChanged(compare, keySelector) { |
| return (source) => source.lift(new DistinctUntilChangedOperator(compare, keySelector)); |
| } |
| class DistinctUntilChangedOperator { |
| constructor(compare, keySelector) { |
| this.compare = compare; |
| this.keySelector = keySelector; |
| } |
| call(subscriber, source) { |
| return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector)); |
| } |
| } |
| class DistinctUntilChangedSubscriber extends Subscriber { |
| constructor(destination, compare, keySelector) { |
| super(destination); |
| this.keySelector = keySelector; |
| this.hasKey = false; |
| if (typeof compare === 'function') { |
| this.compare = compare; |
| } |
| } |
| compare(x, y) { |
| return x === y; |
| } |
| _next(value) { |
| let key; |
| try { |
| const { keySelector } = this; |
| key = keySelector ? keySelector(value) : value; |
| } |
| catch (err) { |
| return this.destination.error(err); |
| } |
| let result = false; |
| if (this.hasKey) { |
| try { |
| const { compare } = this; |
| result = compare(this.key, key); |
| } |
| catch (err) { |
| return this.destination.error(err); |
| } |
| } |
| else { |
| this.hasKey = true; |
| } |
| if (!result) { |
| this.key = key; |
| this.destination.next(value); |
| } |
| } |
| } |
| //# sourceMappingURL=distinctUntilChanged.js.map |