Tool to send cross-session opencode messages, including as request-response pattern
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

implement mergeGenerators utility for parallel async generators

rektide 6e17174f d99cff6d

+21
+20
src/util/generator.ts
··· 1 + export async function* mergeGenerators<T>(generators: AsyncGenerator<T>[]): AsyncGenerator<T> { 2 + const iterators = generators.map((g) => g[Symbol.asyncIterator]()); 3 + const activeIterators = new Set(iterators); 4 + 5 + while (activeIterators.size > 0) { 6 + const racePromises = Array.from(activeIterators).map(async (it) => ({ 7 + it, 8 + result: await it.next(), 9 + })); 10 + 11 + const winner = await Promise.race(racePromises); 12 + const { it, result } = winner; 13 + 14 + if (result.done) { 15 + activeIterators.delete(it); 16 + } else { 17 + yield result.value; 18 + } 19 + } 20 + }
+1
src/util/index.ts
··· 1 + export { mergeGenerators } from "./generator.js";