| // API | 
| module.exports = state; | 
|   | 
| /** | 
|  * Creates initial state object | 
|  * for iteration over list | 
|  * | 
|  * @param   {array|object} list - list to iterate over | 
|  * @param   {function|null} sortMethod - function to use for keys sort, | 
|  *                                     or `null` to keep them as is | 
|  * @returns {object} - initial state object | 
|  */ | 
| function state(list, sortMethod) | 
| { | 
|   var isNamedList = !Array.isArray(list) | 
|     , initState = | 
|     { | 
|       index    : 0, | 
|       keyedList: isNamedList || sortMethod ? Object.keys(list) : null, | 
|       jobs     : {}, | 
|       results  : isNamedList ? {} : [], | 
|       size     : isNamedList ? Object.keys(list).length : list.length | 
|     } | 
|     ; | 
|   | 
|   if (sortMethod) | 
|   { | 
|     // sort array keys based on it's values | 
|     // sort object's keys just on own merit | 
|     initState.keyedList.sort(isNamedList ? sortMethod : function(a, b) | 
|     { | 
|       return sortMethod(list[a], list[b]); | 
|     }); | 
|   } | 
|   | 
|   return initState; | 
| } |