import { Awaitable } from 'justypes' import { eachAsync } from '@src/each-async.js' export async function groupByAsync( iterable: Iterable | AsyncIterable , fn: (element: Awaited, index: number) => Awaitable ): Promise, Array>>> { const map = new Map, Array>>() await eachAsync(iterable, async (element, index) => { const key = await fn(element, index) let group = map.get(key) if (!group) { group = [] map.set(key, group) } group.push(element) }) return map }