@intlayer/chokidar
Version:
Uses chokidar to scan and build Intlayer declaration files into dictionaries based on Intlayer configuration.
27 lines (25 loc) • 1.19 kB
JavaScript
import { pLimit } from "./pLimit.mjs";
//#region src/utils/parallelizeGlobal.ts
let _globalLimiter = null;
/** Get (and optionally configure) the single, shared limiter. */
const getGlobalLimiter = (concurrency) => {
if (!_globalLimiter) _globalLimiter = pLimit(concurrency ?? 10);
else if (typeof concurrency === "number") _globalLimiter.concurrency = concurrency;
return _globalLimiter;
};
let _taskLimiter = null;
/** Limits how many *tasks* run concurrently (independent from AI calls). */
const getTaskLimiter = (concurrency) => {
if (!_taskLimiter) _taskLimiter = pLimit(concurrency ?? 5);
else if (typeof concurrency === "number") _taskLimiter.concurrency = concurrency;
return _taskLimiter;
};
const parallelizeGlobal = async (items, callback = async (item) => item, options) => {
const limiter = options?.limiter ?? getGlobalLimiter(options?.concurrency);
const run = options?.wrapInLimiter ?? true ? (fn) => limiter(fn) : (fn) => fn();
const promises = items.map((item, index) => run(() => callback(item, index)));
return Promise.all(promises);
};
//#endregion
export { getGlobalLimiter, getTaskLimiter, parallelizeGlobal };
//# sourceMappingURL=parallelizeGlobal.mjs.map