diff options
Diffstat (limited to 'node_modules/core-js/modules/esnext.string.code-points.js')
| -rw-r--r-- | node_modules/core-js/modules/esnext.string.code-points.js | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/node_modules/core-js/modules/esnext.string.code-points.js b/node_modules/core-js/modules/esnext.string.code-points.js new file mode 100644 index 0000000..fcf15d6 --- /dev/null +++ b/node_modules/core-js/modules/esnext.string.code-points.js @@ -0,0 +1,38 @@ +'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))); + } +}); |
