// mapWithConcurrency — run `fn` over `items` with at most `limit` in flight at // once. Preserves input order in the result array regardless of completion order. export async function mapWithConcurrency(items, limit, fn) { const results = new Array(items.length); let next = 0; async function worker() { while (next < items.length) { const i = next++; results[i] = await fn(items[i], i); } } await Promise.all(Array.from({ length: Math.min(limit, items.length) }, worker)); return results; }