import { IndexedSelector } from "../types/IndexedSelector"; import { MapFactory } from "../types/MapFactory"; /** * Performs a group join pairing each outer element with the group of matching inner elements. * * @typeParam T - Element type produced by the outer source iterable. * @typeParam TInner - Element type produced by the inner source iterable. * @typeParam TKey - Key type generated by the key selector functions. * @typeParam TOut - Result type emitted by the `selector`. * @param src - Outer source iterable enumerated sequentially. * @param innerSeq - Inner source iterable used to build a lookup for matching keys. * @param outerKeySelector - Selector producing a key for each outer element. * @param innerKeySelector - Selector producing a key for each inner element. * @param selector - Projection receiving the current outer element and the iterable of matching inner elements. * @param mapFactory - Optional factory used to create the internal map for lookups. * @returns A deferred iterable yielding the result of `selector` for every element in the outer sequence. * * @example * ```ts * const result = [..._groupJoin( * [ * { id: 1, name: "Alice" }, * { id: 2, name: "Bob" } * ], * [ * { userId: 1, order: "A" }, * { userId: 1, order: "B" }, * { userId: 3, order: "C" } * ], * (user) => user.id, * (order) => order.userId, * (user, orders) => ({ * name: user.name, * orders: [...orders].map((order) => order.order) * }) * )]; * console.log(result); * // [ * // { name: "Alice", orders: ["A", "B"] }, * // { name: "Bob", orders: [] } * // ] * ``` * * or using the curried version: * ```ts * const result = pipeInto( * [ * { id: 1, name: "Taylor" } * ], * groupJoin( * [ * { userId: 1, order: "Order-1" }, * { userId: 2, order: "Order-2" } * ], * (user) => user.id, * (order) => order.userId, * (user, orders) => ({ * name: user.name, * orders: [...orders].map((order) => order.order) * }) * ) * ); * console.log([...result]); * // [ * // { name: "Taylor", orders: ["Order-1"] } * // ] * ``` */ export declare function _groupJoin(src: Iterable, innerSeq: Iterable, outerKeySelector: IndexedSelector, innerKeySelector: IndexedSelector, selector: (o: T, v: Iterable) => TOut, mapFactory?: MapFactory): Iterable; /** * Curried version of {@link _groupJoin}. */ export declare const groupJoin: (innerSeq: Iterable, outerKeySelector: IndexedSelector, innerKeySelector: IndexedSelector, selector: (o: T, v: Iterable) => TOut, mapFactory?: MapFactory | undefined) => (src: Iterable) => Iterable;