export async function parallelMap( items: T[], fn: (item: T, index: number) => Promise, concurrency = 5, ): Promise { const results: R[] = Array.from({ length: items.length }) let currentIndex = 0 async function worker(): Promise { while (currentIndex < items.length) { const index = currentIndex++ results[index] = await fn(items[index], index) } } const workers = Array.from({ length: Math.min(concurrency, items.length) }, () => worker()) await Promise.all(workers) return results }