// Exécute les promesses N par N au lieu de toutes en même temps
export const pLimit = async <T>(
  tasks:       (() => Promise<T>)[],
  concurrency: number = 2
): Promise<T[]> => {
  const results: T[] = [];
  let index = 0;

  const worker = async () => {
    while (index < tasks.length) {
      const current = index++;
      results[current] = await tasks[current]();
    }
  };

  await Promise.all(
    Array.from({ length: Math.min(concurrency, tasks.length) }, worker)
  );

  return results;
};