UNPKG

core-js

Version:
35 lines (32 loc) 1.34 kB
'use strict'; var createIteratorConstructor = require('../internals/create-iterator-constructor'); var requireObjectCoercible = require('../internals/require-object-coercible'); var InternalStateModule = require('../internals/internal-state'); var codePointAt = require('../internals/string-at'); 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 = codePointAt(string, index, true); state.index += point.length; return { value: { codePoint: codePointAt(point, 0), position: index }, done: false }; }); // `String.prototype.codePoints` method // https://github.com/tc39/proposal-string-prototype-codepoints require('../internals/export')({ target: 'String', proto: true }, { codePoints: function codePoints() { return new $StringIterator(String(requireObjectCoercible(this))); } });