import { AsyncIterableX } from '../../asynciterable/asynciterablex.js'; import { GroupByAsyncIterable, GroupedAsyncIterable, } from '../../asynciterable/operators/groupby.js'; import { identityAsync } from '../../util/identity.js'; export function groupByProto( this: AsyncIterableX, keySelector: (value: TSource, signal?: AbortSignal) => TKey | Promise ): AsyncIterableX>; export function groupByProto( this: AsyncIterableX, keySelector: (value: TSource, signal?: AbortSignal) => TKey | Promise, elementSelector?: (value: TSource, signal?: AbortSignal) => TValue | Promise ): AsyncIterableX>; export function groupByProto( this: AsyncIterableX, keySelector: (value: TSource, signal?: AbortSignal) => TKey | Promise, elementSelector: ( value: TSource, signal?: AbortSignal ) => TValue | Promise = identityAsync ): AsyncIterableX> { return new GroupByAsyncIterable(this, keySelector, elementSelector); } AsyncIterableX.prototype.groupBy = groupByProto; declare module '../../asynciterable/asynciterablex' { interface AsyncIterableX { groupBy: typeof groupByProto; } }