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.
		
		
		
		
		
			
		
			
				
					
					
						
							47 lines
						
					
					
						
							836 B
						
					
					
				
			
		
		
	
	
							47 lines
						
					
					
						
							836 B
						
					
					
				| /**
 | |
|  * Obliterator Chain Function
 | |
|  * ===========================
 | |
|  *
 | |
|  * Variadic function combining the given iterables.
 | |
|  */
 | |
| var Iterator = require('./iterator.js');
 | |
| var iter = require('./iter.js');
 | |
| 
 | |
| /**
 | |
|  * Chain.
 | |
|  *
 | |
|  * @param  {...Iterator} iterables - Target iterables.
 | |
|  * @return {Iterator}
 | |
|  */
 | |
| module.exports = function chain() {
 | |
|   var iterables = arguments;
 | |
|   var current = null;
 | |
|   var i = -1;
 | |
| 
 | |
|   /* eslint-disable no-constant-condition */
 | |
|   return new Iterator(function next() {
 | |
|     var step = null;
 | |
| 
 | |
|     do {
 | |
|       if (current === null) {
 | |
|         i++;
 | |
| 
 | |
|         if (i >= iterables.length) return {done: true};
 | |
| 
 | |
|         current = iter(iterables[i]);
 | |
|       }
 | |
| 
 | |
|       step = current.next();
 | |
| 
 | |
|       if (step.done === true) {
 | |
|         current = null;
 | |
|         continue;
 | |
|       }
 | |
| 
 | |
|       break;
 | |
|     } while (true);
 | |
| 
 | |
|     return step;
 | |
|   });
 | |
| };
 |