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;
 | 
						|
};
 |