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.
		
		
		
		
		
			
		
			
				
					
					
						
							45 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
	
	
							45 lines
						
					
					
						
							1.1 KiB
						
					
					
				'use strict'; | 
						|
 | 
						|
var hasSymbols = require('has-symbols')(); | 
						|
var GetIntrinsic = require('get-intrinsic'); | 
						|
var callBound = require('call-bind/callBound'); | 
						|
 | 
						|
var $iterator = GetIntrinsic('%Symbol.iterator%', true); | 
						|
var $stringSlice = callBound('String.prototype.slice'); | 
						|
 | 
						|
module.exports = function getIteratorMethod(ES, iterable) { | 
						|
	var usingIterator; | 
						|
	if (hasSymbols) { | 
						|
		usingIterator = ES.GetMethod(iterable, $iterator); | 
						|
	} else if (ES.IsArray(iterable)) { | 
						|
		usingIterator = function () { | 
						|
			var i = -1; | 
						|
			var arr = this; // eslint-disable-line no-invalid-this | 
						|
			return { | 
						|
				next: function () { | 
						|
					i += 1; | 
						|
					return { | 
						|
						done: i >= arr.length, | 
						|
						value: arr[i] | 
						|
					}; | 
						|
				} | 
						|
			}; | 
						|
		}; | 
						|
	} else if (ES.Type(iterable) === 'String') { | 
						|
		usingIterator = function () { | 
						|
			var i = 0; | 
						|
			return { | 
						|
				next: function () { | 
						|
					var nextIndex = ES.AdvanceStringIndex(iterable, i, true); | 
						|
					var value = $stringSlice(iterable, i, nextIndex); | 
						|
					i = nextIndex; | 
						|
					return { | 
						|
						done: nextIndex > iterable.length, | 
						|
						value: value | 
						|
					}; | 
						|
				} | 
						|
			}; | 
						|
		}; | 
						|
	} | 
						|
	return usingIterator; | 
						|
};
 | 
						|
 |