UNPKG

1.24 kBJavaScriptView Raw
1import { AsyncIterableX } from './asynciterablex';
2import { createGrouping } from './_grouping';
3import { empty } from './empty';
4import { identity } from '../internal/identity';
5export class GroupJoinAsyncIterable extends AsyncIterableX {
6 constructor(outer, inner, outerSelector, innerSelector, resultSelector) {
7 super();
8 this._outer = outer;
9 this._inner = inner;
10 this._outerSelector = outerSelector;
11 this._innerSelector = innerSelector;
12 this._resultSelector = resultSelector;
13 }
14 async *[Symbol.asyncIterator]() {
15 const map = await createGrouping(this._inner, this._innerSelector, identity);
16 for await (let outerElement of this._outer) {
17 const outerKey = await this._outerSelector(outerElement);
18 const innerElements = map.has(outerKey)
19 ? map.get(outerKey)
20 : empty();
21 yield await this._resultSelector(outerElement, AsyncIterableX.from(innerElements));
22 }
23 }
24}
25export function groupJoin(outer, inner, outerSelector, innerSelector, resultSelector) {
26 return new GroupJoinAsyncIterable(outer, inner, outerSelector, innerSelector, resultSelector);
27}
28
29//# sourceMappingURL=groupjoin.mjs.map