export const mapWithConcurrency = async ( values: T[], concurrency: number, mapper: (value: T) => Promise, ): Promise => { if (values.length === 0) { return []; } const safeConcurrency = Math.max(1, Math.min(concurrency, values.length)); const results = new Array(values.length); let cursor = 0; const worker = async () => { while (true) { const nextIndex = cursor; cursor += 1; if (nextIndex >= values.length) { return; } results[nextIndex] = await mapper(values[nextIndex]); } }; await Promise.all(Array.from({ length: safeConcurrency }, () => worker())); return results; };