/*! 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
							 | 
						|
								}
							 |