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.
		
		
		
		
			
				
					39 lines
				
				1.4 KiB
			
		
		
			
		
	
	
					39 lines
				
				1.4 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								'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)));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								});
							 |