summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/promise-call-limit/index.js
diff options
context:
space:
mode:
authorMyles Borins <mylesborins@github.com>2020-10-02 17:52:19 -0400
committerMyles Borins <mylesborins@github.com>2020-10-07 09:59:49 -0400
commit2e545249557c265f7d5f338cc3a382985211603c (patch)
treea18ca49252a58cc5a80cd438a020a99bf48a8d23 /deps/npm/node_modules/promise-call-limit/index.js
parent14699846452e627f97dedb85991eea67d932a79d (diff)
downloadnode-new-2e545249557c265f7d5f338cc3a382985211603c.tar.gz
deps: update npm to 7.0.0-rc.3
PR-URL: https://github.com/nodejs/node/pull/35474 Reviewed-By: Ruy Adorno <ruyadorno@github.com> Reviewed-By: Ujjwal Sharma <ryzokuken@disroot.org> Reviewed-By: Ben Coe <bencoe@gmail.com> Reviewed-By: Geoffrey Booth <webmaster@geoffreybooth.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Shelley Vohr <codebytere@gmail.com> Reviewed-By: Guy Bedford <guybedford@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Diffstat (limited to 'deps/npm/node_modules/promise-call-limit/index.js')
-rw-r--r--deps/npm/node_modules/promise-call-limit/index.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/deps/npm/node_modules/promise-call-limit/index.js b/deps/npm/node_modules/promise-call-limit/index.js
new file mode 100644
index 0000000000..a093c2481c
--- /dev/null
+++ b/deps/npm/node_modules/promise-call-limit/index.js
@@ -0,0 +1,43 @@
+const defLimit = require('os').cpus().length
+const callLimit = (queue, limit = defLimit) => new Promise((res, rej) => {
+ let active = 0
+ let current = 0
+ const results = []
+
+ let rejected = false
+ const reject = er => {
+ if (rejected)
+ return
+ rejected = true
+ rej(er)
+ }
+
+ let resolved = false
+ const resolve = () => {
+ if (resolved || active > 0)
+ return
+ resolved = true
+ res(results)
+ }
+
+ const run = () => {
+ const c = current++
+ if (c >= queue.length) {
+ return resolve()
+ }
+
+ active ++
+ results[c] = queue[c]().then(result => {
+ active --
+ results[c] = result
+ run()
+ return result
+ }, reject)
+ }
+
+ for (let i = 0; i < limit; i++) {
+ run()
+ }
+})
+
+module.exports = callLimit