{"version":3,"file":"parallel.mjs","names":[],"sources":["../../src/promise/parallel.ts"],"sourcesContent":["/**\n * Executes multiple promises in parallel with a concurrency limit.\n *\n * @template T - The type of the resolved values\n * @param tasks - An array of functions that return promises\n * @param concurrency - The maximum number of concurrent promises (default: Infinity)\n * @returns Returns a promise that resolves with an array of results in the same order as tasks\n *\n * @example\n * const results = await parallel([\n *   () => fetchUser(1),\n *   () => fetchUser(2),\n *   () => fetchUser(3)\n * ], 2); // Max 2 concurrent requests\n *\n * @example\n * const results = await parallel([\n *   () => delay(100, 'a'),\n *   () => delay(50, 'b'),\n *   () => delay(150, 'c')\n * ]); // Executes all at once\n */\nexport function parallel<T>(tasks: Array<() => Promise<T> | T>, concurrency = Infinity): Promise<T[]> {\n  if (!Array.isArray(tasks) || tasks.length === 0) {\n    return Promise.resolve([]);\n  }\n\n  return new Promise((resolve, reject) => {\n    const results: T[] = new Array(tasks.length);\n    let completed = 0;\n    let inProgress = 0;\n    let index = 0;\n    let hasError = false;\n\n    function execute() {\n      while (index < tasks.length && inProgress < concurrency && !hasError) {\n        const taskIndex = index++;\n        inProgress++;\n\n        Promise.resolve(tasks[taskIndex]()).then(\n          (result) => {\n            if (!hasError) {\n              results[taskIndex] = result;\n              completed++;\n              inProgress--;\n\n              if (completed === tasks.length) {\n                resolve(results);\n              } else {\n                execute();\n              }\n            }\n          },\n          (error) => {\n            if (!hasError) {\n              hasError = true;\n              reject(error);\n            }\n          },\n        );\n      }\n    }\n\n    execute();\n  });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAsBA,SAAgB,SAAY,OAAoC,cAAc,UAAwB;CACpG,IAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,GAC5C,OAAO,QAAQ,QAAQ,CAAC,CAAC;CAG3B,OAAO,IAAI,SAAS,SAAS,WAAW;EACtC,MAAM,UAAe,IAAI,MAAM,MAAM,MAAM;EAC3C,IAAI,YAAY;EAChB,IAAI,aAAa;EACjB,IAAI,QAAQ;EACZ,IAAI,WAAW;EAEf,SAAS,UAAU;GACjB,OAAO,QAAQ,MAAM,UAAU,aAAa,eAAe,CAAC,UAAU;IACpE,MAAM,YAAY;IAClB;IAEA,QAAQ,QAAQ,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,MACjC,WAAW;KACV,IAAI,CAAC,UAAU;MACb,QAAQ,aAAa;MACrB;MACA;MAEA,IAAI,cAAc,MAAM,QACtB,QAAQ,OAAO;WAEf,QAAQ;KAEZ;IACF,IACC,UAAU;KACT,IAAI,CAAC,UAAU;MACb,WAAW;MACX,OAAO,KAAK;KACd;IACF,CACF;GACF;EACF;EAEA,QAAQ;CACV,CAAC;AACH"}