summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/libnpmconfig/node_modules/p-limit/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/libnpmconfig/node_modules/p-limit/index.js')
-rw-r--r--deps/npm/node_modules/libnpmconfig/node_modules/p-limit/index.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/deps/npm/node_modules/libnpmconfig/node_modules/p-limit/index.js b/deps/npm/node_modules/libnpmconfig/node_modules/p-limit/index.js
new file mode 100644
index 0000000000..86decabbc0
--- /dev/null
+++ b/deps/npm/node_modules/libnpmconfig/node_modules/p-limit/index.js
@@ -0,0 +1,49 @@
+'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 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
+ }
+ });
+
+ return generator;
+};