UNPKG

1.38 kBJavaScriptView Raw
1import { AsyncIterableX } from './asynciterablex';
2import { identityAsync } from '../internal/identity';
3import { createGrouping } from './_grouping';
4export class GroupedAsyncIterable extends AsyncIterableX {
5 constructor(key, source) {
6 super();
7 this.key = key;
8 this._source = source;
9 }
10 async *[Symbol.asyncIterator]() {
11 for (let item of this._source) {
12 yield item;
13 }
14 }
15}
16export class GroupByAsyncIterable extends AsyncIterableX {
17 constructor(source, keySelector, elementSelector, resultSelector) {
18 super();
19 this._source = source;
20 this._keySelector = keySelector;
21 this._elementSelector = elementSelector;
22 this._resultSelector = resultSelector;
23 }
24 async *[Symbol.asyncIterator]() {
25 const map = await createGrouping(this._source, this._keySelector, this._elementSelector);
26 for (let [key, values] of map) {
27 yield await this._resultSelector(key, values);
28 }
29 }
30}
31export function groupByResultIdentityAsync(key, values) {
32 return new GroupedAsyncIterable(key, values);
33}
34export function groupBy(source, keySelector, elementSelector = identityAsync, resultSelector = groupByResultIdentityAsync) {
35 return new GroupByAsyncIterable(source, keySelector, elementSelector, resultSelector);
36}
37
38//# sourceMappingURL=groupby.mjs.map