import { Awaitable } from 'justypes' export async function* chunkByAsync( iterable: Iterable | AsyncIterable , predicate: (element: Awaited, index: number) => Awaitable ): AsyncIterableIterator>> { let buffer: Array> = [] let index = 0 for await (const element of iterable) { buffer.push(element) if (await predicate(element, index)) { yield buffer buffer = [] } index++ } if (buffer.length) yield buffer }