UNPKG

1.18 kBJavaScriptView Raw
1import { AsyncIterableX } from './asynciterablex';
2import { identityAsync } from '../internal/identity';
3import { comparerAsync } from '../internal/comparer';
4export 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}
27export function distinctUntilChanged(source, keySelector = identityAsync, comparer = comparerAsync) {
28 return new DistinctUntilChangedAsyncIterable(source, keySelector, comparer);
29}
30
31//# sourceMappingURL=distinctuntilchanged.mjs.map