You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					127 lines
				
				2.7 KiB
			
		
		
			
		
	
	
					127 lines
				
				2.7 KiB
			| 
											3 years ago
										 | 'use strict' | ||
|  | 
 | ||
|  | var nr = { results: false } | ||
|  | var fastparallel = require('fastparallel') | ||
|  | var fastseries = require('fastseries') | ||
|  | var fastfall = require('fastfall') | ||
|  | var fastq = require('fastq') | ||
|  | 
 | ||
|  | function steed (context) { | ||
|  |   if (!context) { | ||
|  |     context = {} | ||
|  |   } | ||
|  | 
 | ||
|  |   var _parNr = fastparallel(nr) | ||
|  |   var _serNr = fastseries(nr) | ||
|  |   var _par = fastparallel() | ||
|  |   var _ser = fastseries() | ||
|  | 
 | ||
|  |   context.each = each | ||
|  |   context.map = map | ||
|  |   context.eachSeries = eachSeries | ||
|  |   context.mapSeries = mapSeries | ||
|  |   context.parallel = parallel | ||
|  |   context.series = series | ||
|  |   context.waterfall = fastfall() | ||
|  |   context.queue = fastq | ||
|  | 
 | ||
|  |   return context | ||
|  | 
 | ||
|  |   function each (that, array, func, cb) { | ||
|  |     if (!func || typeof func === 'function' && typeof array === 'function') { | ||
|  |       cb = func | ||
|  |       func = array | ||
|  |       array = that | ||
|  |       that = null | ||
|  |     } | ||
|  |     _parNr(that, func, array, cb) | ||
|  |   } | ||
|  | 
 | ||
|  |   function eachSeries (that, array, func, cb) { | ||
|  |     if (!func || typeof func === 'function' && typeof array === 'function') { | ||
|  |       cb = func | ||
|  |       func = array | ||
|  |       array = that | ||
|  |       that = null | ||
|  |     } | ||
|  |     _serNr(that, func, array, cb) | ||
|  |   } | ||
|  | 
 | ||
|  |   function map (that, array, func, cb) { | ||
|  |     if (!func || typeof func === 'function' && typeof array === 'function') { | ||
|  |       cb = func | ||
|  |       func = array | ||
|  |       array = that | ||
|  |       that = null | ||
|  |     } | ||
|  |     _par(that, func, array, cb) | ||
|  |   } | ||
|  | 
 | ||
|  |   function mapSeries (that, array, func, cb) { | ||
|  |     if (!func || typeof func === 'function' && typeof array === 'function') { | ||
|  |       cb = func | ||
|  |       func = array | ||
|  |       array = that | ||
|  |       that = null | ||
|  |     } | ||
|  |     _ser(that, func, array, cb) | ||
|  |   } | ||
|  | 
 | ||
|  |   function parallel (that, funcs, cb) { | ||
|  |     if (!funcs || typeof funcs === 'function') { | ||
|  |       cb = funcs | ||
|  |       funcs = that | ||
|  |       that = null | ||
|  |     } | ||
|  |     if (Array.isArray(funcs)) { | ||
|  |       _par(that, funcs, null, cb) | ||
|  |     } else { | ||
|  |       _handleObjectMap(that, _par, funcs, cb) | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   function series (that, funcs, cb) { | ||
|  |     if (!funcs || typeof funcs === 'function') { | ||
|  |       cb = funcs | ||
|  |       funcs = that | ||
|  |       that = null | ||
|  |     } | ||
|  |     if (Array.isArray(funcs)) { | ||
|  |       _ser(that, funcs, null, cb) | ||
|  |     } else { | ||
|  |       _handleObjectMap(that, _ser, funcs, cb) | ||
|  |     } | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | function _handleObjectMap (that, iterator, funcs, cb) { | ||
|  |   var keys = Object.keys(funcs) | ||
|  |   iterator(new MapStatus(keys, funcs, cb), callNamedFunc, keys, mapResults) | ||
|  | } | ||
|  | 
 | ||
|  | function MapStatus (keys, funcs, cb) { | ||
|  |   this.cb = cb | ||
|  |   this.keys = keys | ||
|  |   this.funcs = funcs | ||
|  |   this.results = {} | ||
|  | } | ||
|  | 
 | ||
|  | function callNamedFunc (key, cb) { | ||
|  |   this.funcs[key](cb) | ||
|  | } | ||
|  | 
 | ||
|  | function mapResults (err, results) { | ||
|  |   if (err) { return this.cb(err) } | ||
|  | 
 | ||
|  |   var keys = this.keys | ||
|  |   var toReturn = {} | ||
|  | 
 | ||
|  |   for (var i = 0; i < keys.length; i++) { | ||
|  |     toReturn[keys[i]] = results[i] | ||
|  |   } | ||
|  | 
 | ||
|  |   this.cb(null, toReturn) | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = steed(steed) |