• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// API
2module.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 */
13function 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}
38