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
			| 
								 
											3 years ago
										 
									 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * 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;
							 | 
						||
| 
								 | 
							
								};
							 |