Initial commit
[yaffs-website] / node_modules / asynckit / lib / state.js
1 // API
2 module.exports = state;
3
4 /**
5  * Creates initial state object
6  * for iteration over list
7  *
8  * @param   {array|object} list - list to iterate over
9  * @param   {function|null} sortMethod - function to use for keys sort,
10  *                                     or `null` to keep them as is
11  * @returns {object} - initial state object
12  */
13 function state(list, sortMethod)
14 {
15   var isNamedList = !Array.isArray(list)
16     , initState =
17     {
18       index    : 0,
19       keyedList: isNamedList || sortMethod ? Object.keys(list) : null,
20       jobs     : {},
21       results  : isNamedList ? {} : [],
22       size     : isNamedList ? Object.keys(list).length : list.length
23     }
24     ;
25
26   if (sortMethod)
27   {
28     // sort array keys based on it's values
29     // sort object's keys just on own merit
30     initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)
31     {
32       return sortMethod(list[a], list[b]);
33     });
34   }
35
36   return initState;
37 }