Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/p-limit/index.js')
-rw-r--r--node_modules/p-limit/index.js55
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;