import { Awaitable } from 'justypes' export async function* uniqByAsync( iterable: Iterable | AsyncIterable , fn: (element: Awaited, index: number) => Awaitable ): AsyncIterableIterator> { const bucket = new Set() let index = 0 for await (const element of iterable) { const result = await fn(element, index) if (!bucket.has(result)) { yield element bucket.add(result) } index++ } }