/** Run independent work concurrently while preserving input result order. */ export async function runWithConcurrency( items: T[], limit: number, worker: (item: T, index: number) => Promise, ): Promise { const results = new Array(items.length); let next = 0; const workers = Array.from({ length: Math.min(limit, items.length) }, async () => { while (next < items.length) { const index = next++; results[index] = await worker(items[index]!, index); } }); await Promise.all(workers); return results; }