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.
		
		
		
		
		
			
		
			
				
					
					
						
							38 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							38 lines
						
					
					
						
							1.4 KiB
						
					
					
				'use strict'; | 
						|
var $ = require('../internals/export'); | 
						|
var createIteratorConstructor = require('../internals/create-iterator-constructor'); | 
						|
var requireObjectCoercible = require('../internals/require-object-coercible'); | 
						|
var InternalStateModule = require('../internals/internal-state'); | 
						|
var StringMultibyteModule = require('../internals/string-multibyte'); | 
						|
 | 
						|
var codeAt = StringMultibyteModule.codeAt; | 
						|
var charAt = StringMultibyteModule.charAt; | 
						|
var STRING_ITERATOR = 'String Iterator'; | 
						|
var setInternalState = InternalStateModule.set; | 
						|
var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); | 
						|
 | 
						|
// TODO: unify with String#@@iterator | 
						|
var $StringIterator = createIteratorConstructor(function StringIterator(string) { | 
						|
  setInternalState(this, { | 
						|
    type: STRING_ITERATOR, | 
						|
    string: string, | 
						|
    index: 0 | 
						|
  }); | 
						|
}, 'String', function next() { | 
						|
  var state = getInternalState(this); | 
						|
  var string = state.string; | 
						|
  var index = state.index; | 
						|
  var point; | 
						|
  if (index >= string.length) return { value: undefined, done: true }; | 
						|
  point = charAt(string, index); | 
						|
  state.index += point.length; | 
						|
  return { value: { codePoint: codeAt(point, 0), position: index }, done: false }; | 
						|
}); | 
						|
 | 
						|
// `String.prototype.codePoints` method | 
						|
// https://github.com/tc39/proposal-string-prototype-codepoints | 
						|
$({ target: 'String', proto: true }, { | 
						|
  codePoints: function codePoints() { | 
						|
    return new $StringIterator(String(requireObjectCoercible(this))); | 
						|
  } | 
						|
});
 | 
						|
 |