e4c74bb120b75c22ee23668edfead0e613355bd6
[yaffs-website] / node_modules / grunt-uncss / node_modules / async / internal / eachOfLimit.js
1 'use strict';
2
3 Object.defineProperty(exports, "__esModule", {
4     value: true
5 });
6 exports.default = _eachOfLimit;
7
8 var _noop = require('lodash/noop');
9
10 var _noop2 = _interopRequireDefault(_noop);
11
12 var _once = require('./once');
13
14 var _once2 = _interopRequireDefault(_once);
15
16 var _iterator = require('./iterator');
17
18 var _iterator2 = _interopRequireDefault(_iterator);
19
20 var _onlyOnce = require('./onlyOnce');
21
22 var _onlyOnce2 = _interopRequireDefault(_onlyOnce);
23
24 var _breakLoop = require('./breakLoop');
25
26 var _breakLoop2 = _interopRequireDefault(_breakLoop);
27
28 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
30 function _eachOfLimit(limit) {
31     return function (obj, iteratee, callback) {
32         callback = (0, _once2.default)(callback || _noop2.default);
33         if (limit <= 0 || !obj) {
34             return callback(null);
35         }
36         var nextElem = (0, _iterator2.default)(obj);
37         var done = false;
38         var running = 0;
39
40         function iterateeCallback(err, value) {
41             running -= 1;
42             if (err) {
43                 done = true;
44                 callback(err);
45             } else if (value === _breakLoop2.default || done && running <= 0) {
46                 done = true;
47                 return callback(null);
48             } else {
49                 replenish();
50             }
51         }
52
53         function replenish() {
54             while (running < limit && !done) {
55                 var elem = nextElem();
56                 if (elem === null) {
57                     done = true;
58                     if (running <= 0) {
59                         callback(null);
60                     }
61                     return;
62                 }
63                 running += 1;
64                 iteratee(elem.value, elem.key, (0, _onlyOnce2.default)(iterateeCallback));
65             }
66         }
67
68         replenish();
69     };
70 }
71 module.exports = exports['default'];