| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | 'use strict';const pTry = require('p-try');const pLimit = concurrency => {	if (!((Number.isInteger(concurrency) || concurrency === Infinity) && concurrency > 0)) {		return Promise.reject(new TypeError('Expected `concurrency` to be a number from 1 and up'));	}	const queue = [];	let activeCount = 0;	const next = () => {		activeCount--;		if (queue.length > 0) {			queue.shift()();		}	};	const run = (fn, resolve, ...args) => {		activeCount++;		const result = pTry(fn, ...args);		resolve(result);		result.then(next, next);	};	const enqueue = (fn, resolve, ...args) => {		if (activeCount < concurrency) {			run(fn, resolve, ...args);		} else {			queue.push(run.bind(null, fn, resolve, ...args));		}	};	const generator = (fn, ...args) => new Promise(resolve => enqueue(fn, resolve, ...args));	Object.defineProperties(generator, {		activeCount: {			get: () => activeCount		},		pendingCount: {			get: () => queue.length		},		clearQueue: {			value: () => {				queue.length = 0;			}		}	});	return generator;};module.exports = pLimit;module.exports.default = pLimit;
 |