diff options
Diffstat (limited to 'node_modules/p-limit/index.js')
-rw-r--r-- | node_modules/p-limit/index.js | 55 |
1 files changed, 35 insertions, 20 deletions
diff --git a/node_modules/p-limit/index.js b/node_modules/p-limit/index.js index 8767db1ca..6a72a4c4f 100644 --- a/node_modules/p-limit/index.js +++ b/node_modules/p-limit/index.js @@ -1,9 +1,9 @@ 'use strict'; const pTry = require('p-try'); -module.exports = concurrency => { - if (concurrency < 1) { - throw new TypeError('Expected `concurrency` to be a number from 1 and up'); +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 = []; @@ -17,26 +17,41 @@ module.exports = concurrency => { } }; - return fn => new Promise((resolve, reject) => { - const run = () => { - activeCount++; - - pTry(() => fn()).then( - val => { - resolve(val); - next(); - }, - err => { - reject(err); - next(); - } - ); - }; + 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(); + run(fn, resolve, ...args); } else { - queue.push(run); + 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; |