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
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
	
	
							47 lines
						
					
					
						
							1.1 KiB
						
					
					
				| /**
 | |
|  * Obliterator Iter Function
 | |
|  * ==========================
 | |
|  *
 | |
|  * Function coercing values to an iterator. It can be quite useful when needing
 | |
|  * to handle iterables and iterators the same way.
 | |
|  */
 | |
| var Iterator = require('./iterator.js');
 | |
| var support = require('./support.js');
 | |
| 
 | |
| var ARRAY_BUFFER_SUPPORT = support.ARRAY_BUFFER_SUPPORT;
 | |
| var SYMBOL_SUPPORT = support.SYMBOL_SUPPORT;
 | |
| 
 | |
| function iterOrNull(target) {
 | |
|   // Indexed sequence
 | |
|   if (
 | |
|     typeof target === 'string' ||
 | |
|     Array.isArray(target) ||
 | |
|     (ARRAY_BUFFER_SUPPORT && ArrayBuffer.isView(target))
 | |
|   )
 | |
|     return Iterator.fromSequence(target);
 | |
| 
 | |
|   // Invalid value
 | |
|   if (typeof target !== 'object' || target === null) return null;
 | |
| 
 | |
|   // Iterable
 | |
|   if (SYMBOL_SUPPORT && typeof target[Symbol.iterator] === 'function')
 | |
|     return target[Symbol.iterator]();
 | |
| 
 | |
|   // Iterator duck-typing
 | |
|   if (typeof target.next === 'function') return target;
 | |
| 
 | |
|   // Invalid object
 | |
|   return null;
 | |
| }
 | |
| 
 | |
| module.exports = function iter(target) {
 | |
|   var iterator = iterOrNull(target);
 | |
| 
 | |
|   if (!iterator)
 | |
|     throw new Error(
 | |
|       'obliterator: target is not iterable nor a valid iterator.'
 | |
|     );
 | |
| 
 | |
|   return iterator;
 | |
| };
 |