1 | import { AsyncIterableX } from './asynciterablex';
|
2 | import { identityAsync } from '../internal/identity';
|
3 | import { comparerAsync } from '../internal/comparer';
|
4 | export class DistinctUntilChangedAsyncIterable extends AsyncIterableX {
|
5 | constructor(source, keySelector, comparer) {
|
6 | super();
|
7 | this._source = source;
|
8 | this._keySelector = keySelector;
|
9 | this._comparer = comparer;
|
10 | }
|
11 | async *[Symbol.asyncIterator]() {
|
12 | let currentKey, hasCurrentKey = false;
|
13 | for await (let item of this._source) {
|
14 | let key = await this._keySelector(item);
|
15 | let comparerEquals = false;
|
16 | if (hasCurrentKey) {
|
17 | comparerEquals = await this._comparer(currentKey, key);
|
18 | }
|
19 | if (!hasCurrentKey || !comparerEquals) {
|
20 | hasCurrentKey = true;
|
21 | currentKey = key;
|
22 | yield item;
|
23 | }
|
24 | }
|
25 | }
|
26 | }
|
27 | export function distinctUntilChanged(source, keySelector = identityAsync, comparer = comparerAsync) {
|
28 | return new DistinctUntilChangedAsyncIterable(source, keySelector, comparer);
|
29 | }
|
30 |
|
31 |
|