pi-lens
Version:
Real-time code feedback for pi — LSP, linters, formatters, type-checking, structural analysis & booboo
28 lines (25 loc) • 896 B
JavaScript
import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
// dist/clients/map-with-concurrency.js
async function mapWithConcurrency(items, concurrency, mapper, signal) {
if (items.length === 0)
return [];
let nextIndex = 0;
const workerCount = Math.max(1, Math.min(concurrency, items.length));
const results = /* @__PURE__ */ new Map();
const worker = async () => {
while (true) {
if (signal?.aborted)
return;
const index = nextIndex++;
if (index >= items.length)
return;
results.set(index, await mapper(items[index]));
}
};
const workers = Array.from({ length: workerCount }, () => worker());
await Promise.all(workers);
return [...results.entries()].sort(([left], [right]) => left - right).map(([, result]) => result);
}
export {
mapWithConcurrency
};