| /* | 
|     MIT License http://www.opensource.org/licenses/mit-license.php | 
|     Author Tobias Koppers @sokra | 
| */ | 
| "use strict"; | 
|   | 
| module.exports = function forEachBail(array, iterator, callback) { | 
|     if (array.length === 0) return callback(); | 
|     let currentPos = array.length; | 
|     let currentResult; | 
|     let done = []; | 
|     for (let i = 0; i < array.length; i++) { | 
|         const itCb = createIteratorCallback(i); | 
|         iterator(array[i], itCb); | 
|         if (currentPos === 0) break; | 
|     } | 
|   | 
|     function createIteratorCallback(i) { | 
|         return (...args) => { | 
|             if (i >= currentPos) return; // ignore | 
|             done.push(i); | 
|             if (args.length > 0) { | 
|                 currentPos = i + 1; | 
|                 done = done.filter(item => { | 
|                     return item <= i; | 
|                 }); | 
|                 currentResult = args; | 
|             } | 
|             if (done.length === currentPos) { | 
|                 callback.apply(null, currentResult); | 
|                 currentPos = 0; | 
|             } | 
|         }; | 
|     } | 
| }; | 
|   | 
| module.exports.withIndex = function forEachBailWithIndex( | 
|     array, | 
|     iterator, | 
|     callback | 
| ) { | 
|     if (array.length === 0) return callback(); | 
|     let currentPos = array.length; | 
|     let currentResult; | 
|     let done = []; | 
|     for (let i = 0; i < array.length; i++) { | 
|         const itCb = createIteratorCallback(i); | 
|         iterator(array[i], i, itCb); | 
|         if (currentPos === 0) break; | 
|     } | 
|   | 
|     function createIteratorCallback(i) { | 
|         return (...args) => { | 
|             if (i >= currentPos) return; // ignore | 
|             done.push(i); | 
|             if (args.length > 0) { | 
|                 currentPos = i + 1; | 
|                 done = done.filter(item => { | 
|                     return item <= i; | 
|                 }); | 
|                 currentResult = args; | 
|             } | 
|             if (done.length === currentPos) { | 
|                 callback.apply(null, currentResult); | 
|                 currentPos = 0; | 
|             } | 
|         }; | 
|     } | 
| }; |