export interface AsyncCollection extends AsyncIterable { /** * Resolves the generator into a Promise that yields an array of all its values. */ promise(): Promise; } export function toCollection(generator: () => AsyncGenerator): AsyncCollection { const iterable: AsyncIterable = { [Symbol.asyncIterator]: generator, }; return Object.assign(iterable, { promise: () => promise(iterable), }); } async function promise(iterable: AsyncIterable): Promise { const result: T[] = []; for await (const item of iterable) { result.push(item); } return result; }