'use strict';

var parallel = require('../../../_virtual/parallel.js');
var isArrayLike = require('./isArrayLike.js');
var wrapAsync = require('./wrapAsync.js');
var awaitify = require('./awaitify.js');

var hasRequiredParallel;

function requireParallel () {
	if (hasRequiredParallel) return parallel.__module.exports;
	hasRequiredParallel = 1;
	(function (module, exports) {

		Object.defineProperty(exports, "__esModule", {
		    value: true
		});

		var _isArrayLike = isArrayLike.isArrayLikeExports;

		var _isArrayLike2 = _interopRequireDefault(_isArrayLike);

		var _wrapAsync = wrapAsync.__require();

		var _wrapAsync2 = _interopRequireDefault(_wrapAsync);

		var _awaitify = awaitify.awaitifyExports;

		var _awaitify2 = _interopRequireDefault(_awaitify);

		function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

		exports.default = (0, _awaitify2.default)((eachfn, tasks, callback) => {
		    var results = (0, _isArrayLike2.default)(tasks) ? [] : {};

		    eachfn(tasks, (task, key, taskCb) => {
		        (0, _wrapAsync2.default)(task)((err, ...result) => {
		            if (result.length < 2) {
		                [result] = result;
		            }
		            results[key] = result;
		            taskCb(err);
		        });
		    }, err => callback(err, results));
		}, 3);
		module.exports = exports.default; 
	} (parallel.__module, parallel.__module.exports));
	return parallel.__module.exports;
}

exports.__require = requireParallel;
