aboutsummaryrefslogtreecommitdiff
path: root/node_modules/core-js/modules/esnext.string.code-points.js
diff options
context:
space:
mode:
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.js38
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)));
+ }
+});