UNPKG

@reactivex/ix-esnext-esm

Version:

The Interactive Extensions for JavaScript

33 lines (31 loc) 1.32 kB
import { AsyncIterableX } from '../asynciterablex'; import { createGrouping } from './_grouping'; import { empty } from '../empty'; import { from } from '../from'; import { identity } from '../../util/identity'; export class GroupJoinAsyncIterable extends AsyncIterableX { constructor(outer, inner, outerSelector, innerSelector, resultSelector) { super(); this._outer = outer; this._inner = inner; this._outerSelector = outerSelector; this._innerSelector = innerSelector; this._resultSelector = resultSelector; } async *[Symbol.asyncIterator]() { const map = await createGrouping(this._inner, this._innerSelector, identity); for await (const outerElement of this._outer) { const outerKey = await this._outerSelector(outerElement); const innerElements = map.has(outerKey) ? map.get(outerKey) : empty(); yield await this._resultSelector(outerElement, from(innerElements)); } } } export function groupJoin(inner, outerSelector, innerSelector, resultSelector) { return function groupJoinOperatorFunction(outer) { return new GroupJoinAsyncIterable(outer, inner, outerSelector, innerSelector, resultSelector); }; } //# sourceMappingURL=groupjoin.mjs.map