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.
		
		
		
		
		
			
		
			
				
					38 lines
				
				941 B
			
		
		
			
		
	
	
					38 lines
				
				941 B
			| 
								 
											3 years ago
										 
									 | 
							
								// 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;
							 | 
						||
| 
								 | 
							
								}
							 |