aboutsummaryrefslogtreecommitdiff
path: root/node_modules/run-parallel/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/run-parallel/index.js')
-rw-r--r--node_modules/run-parallel/index.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/node_modules/run-parallel/index.js b/node_modules/run-parallel/index.js
new file mode 100644
index 0000000..6307141
--- /dev/null
+++ b/node_modules/run-parallel/index.js
@@ -0,0 +1,51 @@
+/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
+module.exports = runParallel
+
+const queueMicrotask = require('queue-microtask')
+
+function runParallel (tasks, cb) {
+ let results, pending, keys
+ let isSync = true
+
+ if (Array.isArray(tasks)) {
+ results = []
+ pending = tasks.length
+ } else {
+ keys = Object.keys(tasks)
+ results = {}
+ pending = keys.length
+ }
+
+ function done (err) {
+ function end () {
+ if (cb) cb(err, results)
+ cb = null
+ }
+ if (isSync) queueMicrotask(end)
+ else end()
+ }
+
+ function each (i, err, result) {
+ results[i] = result
+ if (--pending === 0 || err) {
+ done(err)
+ }
+ }
+
+ if (!pending) {
+ // empty
+ done(null)
+ } else if (keys) {
+ // object
+ keys.forEach(function (key) {
+ tasks[key](function (err, result) { each(key, err, result) })
+ })
+ } else {
+ // array
+ tasks.forEach(function (task, i) {
+ task(function (err, result) { each(i, err, result) })
+ })
+ }
+
+ isSync = false
+}