necessary 13.0.8 → 13.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -2
- package/lib/constants.js +1 -5
- package/lib/utilities/string.js +39 -41
- package/package.json +1 -1
- package/src/constants.js +0 -1
- package/src/utilities/string.js +58 -20
package/README.md
CHANGED
|
@@ -917,8 +917,6 @@ Ideally the `host` argument should not include a trailing forward slash whereas
|
|
|
917
917
|
|
|
918
918
|
String functions with support for Unicode. Specifically, characters in Unicode astral plains are counted twice in native string functions and methods whereas these functions effectively count astral Unicode characters only once.
|
|
919
919
|
|
|
920
|
-
Note that although the `strlen()` function uses a regular expression to count the number of astral Unicode characters and is therefore relatively fast, the other two functions convert strings to arrays and if necessary back again. Be warned that for this reason they are nowhere near as fast as their native counterparts.
|
|
921
|
-
|
|
922
920
|
* The `strlen()` function takes a single `string` argument. It works in much the same way as the `length` property of the `String` prototype, however it is Unicode safe:
|
|
923
921
|
|
|
924
922
|
```
|
package/lib/constants.js
CHANGED
|
@@ -36,14 +36,10 @@ _export(exports, {
|
|
|
36
36
|
STRING: function() {
|
|
37
37
|
return STRING;
|
|
38
38
|
},
|
|
39
|
-
UG: function() {
|
|
40
|
-
return UG;
|
|
41
|
-
},
|
|
42
39
|
ZERO: function() {
|
|
43
40
|
return ZERO;
|
|
44
41
|
}
|
|
45
42
|
});
|
|
46
|
-
var UG = "ug";
|
|
47
43
|
var ZERO = "0";
|
|
48
44
|
var DATA = "data";
|
|
49
45
|
var ERROR = "error";
|
|
@@ -55,4 +51,4 @@ var ENVIRONMENT = "ENVIRONMENT";
|
|
|
55
51
|
var EMPTY_STRING = "";
|
|
56
52
|
var PACKAGE_JSON = "package.json";
|
|
57
53
|
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBaRVJPID0gXCIwXCI7XG5leHBvcnQgY29uc3QgREFUQSA9IFwiZGF0YVwiO1xuZXhwb3J0IGNvbnN0IEVSUk9SID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgTlVNQkVSID0gXCJudW1iZXJcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVCA9IFwiZGVmYXVsdFwiO1xuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UID0gXCJFTlZJUk9OTUVOVFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9KU09OID0gXCJwYWNrYWdlLmpzb25cIjtcbiJdLCJuYW1lcyI6WyJCT09MRUFOIiwiREFUQSIsIkRFRkFVTFQiLCJFTVBUWV9TVFJJTkciLCJFTlZJUk9OTUVOVCIsIkVSUk9SIiwiTlVNQkVSIiwiUEFDS0FHRV9KU09OIiwiU1RSSU5HIiwiWkVSTyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBT2FBLE9BQU87ZUFBUEE7O0lBSkFDLElBQUk7ZUFBSkE7O0lBS0FDLE9BQU87ZUFBUEE7O0lBRUFDLFlBQVk7ZUFBWkE7O0lBREFDLFdBQVc7ZUFBWEE7O0lBTEFDLEtBQUs7ZUFBTEE7O0lBRUFDLE1BQU07ZUFBTkE7O0lBS0FDLFlBQVk7ZUFBWkE7O0lBTkFDLE1BQU07ZUFBTkE7O0lBSEFDLElBQUk7ZUFBSkE7OztBQUFOLElBQU1BLE9BQU87QUFDYixJQUFNUixPQUFPO0FBQ2IsSUFBTUksUUFBUTtBQUNkLElBQU1HLFNBQVM7QUFDZixJQUFNRixTQUFTO0FBQ2YsSUFBTU4sVUFBVTtBQUNoQixJQUFNRSxVQUFVO0FBQ2hCLElBQU1FLGNBQWM7QUFDcEIsSUFBTUQsZUFBZTtBQUNyQixJQUFNSSxlQUFlIn0=
|
package/lib/utilities/string.js
CHANGED
|
@@ -23,59 +23,57 @@ _export(exports, {
|
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
25
|
var _constants = require("../constants");
|
|
26
|
-
function _array_like_to_array(arr, len) {
|
|
27
|
-
if (len == null || len > arr.length) len = arr.length;
|
|
28
|
-
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
29
|
-
return arr2;
|
|
30
|
-
}
|
|
31
|
-
function _array_without_holes(arr) {
|
|
32
|
-
if (Array.isArray(arr)) return _array_like_to_array(arr);
|
|
33
|
-
}
|
|
34
|
-
function _iterable_to_array(iter) {
|
|
35
|
-
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
36
|
-
}
|
|
37
|
-
function _non_iterable_spread() {
|
|
38
|
-
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
39
|
-
}
|
|
40
|
-
function _to_consumable_array(arr) {
|
|
41
|
-
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
|
|
42
|
-
}
|
|
43
|
-
function _unsupported_iterable_to_array(o, minLen) {
|
|
44
|
-
if (!o) return;
|
|
45
|
-
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
46
|
-
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
47
|
-
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
48
|
-
if (n === "Map" || n === "Set") return Array.from(n);
|
|
49
|
-
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
50
|
-
}
|
|
51
|
-
var astralCharactersRegExp = new RegExp("[\\u{10000}-\\u{10ffff}]", _constants.UG);
|
|
52
26
|
function strlen(string) {
|
|
53
|
-
var length =
|
|
54
|
-
var
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
27
|
+
var length = 0;
|
|
28
|
+
var iterator = string[Symbol.iterator]();
|
|
29
|
+
var character = iterator.next();
|
|
30
|
+
while(!character.done){
|
|
31
|
+
character = iterator.next();
|
|
32
|
+
length++;
|
|
58
33
|
}
|
|
59
34
|
return length;
|
|
60
35
|
}
|
|
61
36
|
function strcmp(stringA, stringB) {
|
|
62
37
|
var difference;
|
|
63
|
-
var
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
difference =
|
|
38
|
+
var iteratorA = stringA[Symbol.iterator](), iteratorB = stringB[Symbol.iterator](); ///
|
|
39
|
+
var characterA = iteratorA.next(), characterB = iteratorB.next(), codePointA, codePointB;
|
|
40
|
+
while(true){
|
|
41
|
+
codePointA = characterA.value ? characterA.value.codePointAt(0) : 0;
|
|
42
|
+
codePointB = characterB.value ? characterB.value.codePointAt(0) : 0;
|
|
43
|
+
difference = codePointB - codePointA;
|
|
44
|
+
if (difference !== 0) {
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
if (characterA.done || characterB.done) {
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
characterA = iteratorA.next();
|
|
51
|
+
characterB = iteratorB.next();
|
|
69
52
|
}
|
|
70
53
|
return difference;
|
|
71
54
|
}
|
|
72
|
-
function substring(string, start
|
|
73
|
-
|
|
74
|
-
|
|
55
|
+
function substring(string, start) {
|
|
56
|
+
var end = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : Infinity;
|
|
57
|
+
var index = 0;
|
|
58
|
+
var iterator = string[Symbol.iterator](), characters = [];
|
|
59
|
+
var character = iterator.next();
|
|
60
|
+
while(!character.done){
|
|
61
|
+
if (index >= start) {
|
|
62
|
+
characters.push(character.value); ///
|
|
63
|
+
}
|
|
64
|
+
index++;
|
|
65
|
+
if (index === end) {
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
character = iterator.next();
|
|
69
|
+
}
|
|
70
|
+
var _$substring = characters.join(_constants.EMPTY_STRING);
|
|
71
|
+
return _$substring;
|
|
72
|
+
}
|
|
75
73
|
var _default = {
|
|
76
74
|
strcmp: strcmp,
|
|
77
75
|
strlen: strlen,
|
|
78
76
|
substring: substring
|
|
79
77
|
};
|
|
80
78
|
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4oc3RyaW5nKSB7XG4gIGxldCBsZW5ndGggPSAwO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gc3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKTtcblxuICBsZXQgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gIHdoaWxlICghY2hhcmFjdGVyLmRvbmUpIHtcbiAgICBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICBsZW5ndGgrK1xuICB9XG5cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmNtcChzdHJpbmdBLCBzdHJpbmdCKSB7XG4gIGxldCBkaWZmZXJlbmNlO1xuXG4gIGNvbnN0IGl0ZXJhdG9yQSA9IHN0cmluZ0FbU3ltYm9sLml0ZXJhdG9yXSgpLCAvLy9cbiAgICAgICAgaXRlcmF0b3JCID0gc3RyaW5nQltTeW1ib2wuaXRlcmF0b3JdKCk7IC8vL1xuXG4gIGxldCBjaGFyYWN0ZXJBID0gaXRlcmF0b3JBLm5leHQoKSxcbiAgICAgIGNoYXJhY3RlckIgPSBpdGVyYXRvckIubmV4dCgpLFxuICAgICAgY29kZVBvaW50QSxcbiAgICAgIGNvZGVQb2ludEI7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb2RlUG9pbnRBID0gY2hhcmFjdGVyQS52YWx1ZSA/IC8vL1xuICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckEudmFsdWUuY29kZVBvaW50QXQoMCkgOlxuICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICBjb2RlUG9pbnRCID0gY2hhcmFjdGVyQi52YWx1ZSA/IC8vL1xuICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckIudmFsdWUuY29kZVBvaW50QXQoMCkgOlxuICAgICAgICAgICAgICAgICAgICAgMDtcblxuICAgIGRpZmZlcmVuY2UgPSBjb2RlUG9pbnRCIC0gY29kZVBvaW50QTtcblxuICAgIGlmIChkaWZmZXJlbmNlICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY2hhcmFjdGVyQS5kb25lIHx8IGNoYXJhY3RlckIuZG9uZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hhcmFjdGVyQSA9IGl0ZXJhdG9yQS5uZXh0KCk7XG4gICAgY2hhcmFjdGVyQiA9IGl0ZXJhdG9yQi5uZXh0KCk7XG4gIH1cblxuICByZXR1cm4gZGlmZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZyhzdHJpbmcsIHN0YXJ0LCBlbmQgPSBJbmZpbml0eSkge1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gc3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKSxcbiAgICAgICAgY2hhcmFjdGVycyA9IFtdO1xuXG4gIGxldCBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgd2hpbGUgKCFjaGFyYWN0ZXIuZG9uZSkge1xuICAgIGlmIChpbmRleCA+PSBzdGFydCkge1xuICAgICAgY2hhcmFjdGVycy5wdXNoKGNoYXJhY3Rlci52YWx1ZSk7IC8vL1xuICAgIH1cblxuICAgIGluZGV4KytcblxuICAgIGlmIChpbmRleCA9PT0gZW5kKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG4gIH1cblxuICBjb25zdCBzdWJzdHJpbmcgPSBjaGFyYWN0ZXJzLmpvaW4oRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gc3Vic3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN0cmNtcCxcbiAgc3RybGVuLFxuICBzdWJzdHJpbmdcbn07XG4iXSwibmFtZXMiOlsic3RyY21wIiwic3RybGVuIiwic3Vic3RyaW5nIiwic3RyaW5nIiwibGVuZ3RoIiwiaXRlcmF0b3IiLCJTeW1ib2wiLCJjaGFyYWN0ZXIiLCJuZXh0IiwiZG9uZSIsInN0cmluZ0EiLCJzdHJpbmdCIiwiZGlmZmVyZW5jZSIsIml0ZXJhdG9yQSIsIml0ZXJhdG9yQiIsImNoYXJhY3RlckEiLCJjaGFyYWN0ZXJCIiwiY29kZVBvaW50QSIsImNvZGVQb2ludEIiLCJ2YWx1ZSIsImNvZGVQb2ludEF0Iiwic3RhcnQiLCJlbmQiLCJJbmZpbml0eSIsImluZGV4IiwiY2hhcmFjdGVycyIsInB1c2giLCJqb2luIiwiRU1QVFlfU1RSSU5HIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFtRkEsT0FJRTtlQUpGOztJQS9EZ0JBLE1BQU07ZUFBTkE7O0lBaEJBQyxNQUFNO2VBQU5BOztJQW9EQUMsU0FBUztlQUFUQTs7O3lCQXREYTtBQUV0QixTQUFTRCxPQUFPRSxNQUFNO0lBQzNCLElBQUlDLFNBQVM7SUFFYixJQUFNQyxXQUFXRixNQUFNLENBQUNHLE9BQU9ELFFBQVEsQ0FBQztJQUV4QyxJQUFJRSxZQUFZRixTQUFTRyxJQUFJO0lBRTdCLE1BQU8sQ0FBQ0QsVUFBVUUsSUFBSSxDQUFFO1FBQ3RCRixZQUFZRixTQUFTRyxJQUFJO1FBRXpCSjtJQUNGO0lBRUEsT0FBT0E7QUFDVDtBQUVPLFNBQVNKLE9BQU9VLE9BQU8sRUFBRUMsT0FBTztJQUNyQyxJQUFJQztJQUVKLElBQU1DLFlBQVlILE9BQU8sQ0FBQ0osT0FBT0QsUUFBUSxDQUFDLElBQ3BDUyxZQUFZSCxPQUFPLENBQUNMLE9BQU9ELFFBQVEsQ0FBQyxJQUFJLEdBQUc7SUFFakQsSUFBSVUsYUFBYUYsVUFBVUwsSUFBSSxJQUMzQlEsYUFBYUYsVUFBVU4sSUFBSSxJQUMzQlMsWUFDQUM7SUFFSixNQUFPLEtBQU07UUFDWEQsYUFBYUYsV0FBV0ksS0FBSyxHQUNkSixXQUFXSSxLQUFLLENBQUNDLFdBQVcsQ0FBQyxLQUMzQjtRQUNqQkYsYUFBYUYsV0FBV0csS0FBSyxHQUNkSCxXQUFXRyxLQUFLLENBQUNDLFdBQVcsQ0FBQyxLQUMzQjtRQUVqQlIsYUFBYU0sYUFBYUQ7UUFFMUIsSUFBSUwsZUFBZSxHQUFHO1lBQ3BCO1FBQ0Y7UUFFQSxJQUFJRyxXQUFXTixJQUFJLElBQUlPLFdBQVdQLElBQUksRUFBRTtZQUN0QztRQUNGO1FBRUFNLGFBQWFGLFVBQVVMLElBQUk7UUFDM0JRLGFBQWFGLFVBQVVOLElBQUk7SUFDN0I7SUFFQSxPQUFPSTtBQUNUO0FBRU8sU0FBU1YsVUFBVUMsTUFBTSxFQUFFa0IsS0FBSztRQUFFQyxNQUFBQSxpRUFBTUM7SUFDN0MsSUFBSUMsUUFBUTtJQUVaLElBQU1uQixXQUFXRixNQUFNLENBQUNHLE9BQU9ELFFBQVEsQ0FBQyxJQUNsQ29CLGFBQWEsRUFBRTtJQUVyQixJQUFJbEIsWUFBWUYsU0FBU0csSUFBSTtJQUU3QixNQUFPLENBQUNELFVBQVVFLElBQUksQ0FBRTtRQUN0QixJQUFJZSxTQUFTSCxPQUFPO1lBQ2xCSSxXQUFXQyxJQUFJLENBQUNuQixVQUFVWSxLQUFLLEdBQUcsR0FBRztRQUN2QztRQUVBSztRQUVBLElBQUlBLFVBQVVGLEtBQUs7WUFDakI7UUFDRjtRQUVBZixZQUFZRixTQUFTRyxJQUFJO0lBQzNCO0lBRUEsSUFBTU4sY0FBWXVCLFdBQVdFLElBQUksQ0FBQ0MsdUJBQVk7SUFFOUMsT0FBTzFCO0FBQ1Q7SUFFQSxXQUFlO0lBQ2JGLFFBQUFBO0lBQ0FDLFFBQUFBO0lBQ0FDLFdBQUFBO0FBQ0YifQ==
|
package/package.json
CHANGED
package/src/constants.js
CHANGED
package/src/utilities/string.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { EMPTY_STRING
|
|
4
|
-
|
|
5
|
-
const astralCharactersRegExp = new RegExp("[\\u{10000}-\\u{10ffff}]", UG);
|
|
3
|
+
import { EMPTY_STRING } from "../constants";
|
|
6
4
|
|
|
7
5
|
export function strlen(string) {
|
|
8
|
-
let length =
|
|
6
|
+
let length = 0;
|
|
7
|
+
|
|
8
|
+
const iterator = string[Symbol.iterator]();
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
let character = iterator.next();
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
while (!character.done) {
|
|
13
|
+
character = iterator.next();
|
|
14
14
|
|
|
15
|
-
length
|
|
15
|
+
length++
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
return length;
|
|
@@ -21,27 +21,65 @@ export function strlen(string) {
|
|
|
21
21
|
export function strcmp(stringA, stringB) {
|
|
22
22
|
let difference;
|
|
23
23
|
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
const iteratorA = stringA[Symbol.iterator](), ///
|
|
25
|
+
iteratorB = stringB[Symbol.iterator](); ///
|
|
26
|
+
|
|
27
|
+
let characterA = iteratorA.next(),
|
|
28
|
+
characterB = iteratorB.next(),
|
|
29
|
+
codePointA,
|
|
30
|
+
codePointB;
|
|
31
|
+
|
|
32
|
+
while (true) {
|
|
33
|
+
codePointA = characterA.value ? ///
|
|
34
|
+
characterA.value.codePointAt(0) :
|
|
35
|
+
0;
|
|
36
|
+
codePointB = characterB.value ? ///
|
|
37
|
+
characterB.value.codePointAt(0) :
|
|
38
|
+
0;
|
|
30
39
|
|
|
31
|
-
|
|
40
|
+
difference = codePointB - codePointA;
|
|
32
41
|
|
|
33
|
-
|
|
34
|
-
|
|
42
|
+
if (difference !== 0) {
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
35
45
|
|
|
36
|
-
|
|
46
|
+
if (characterA.done || characterB.done) {
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
37
49
|
|
|
38
|
-
|
|
50
|
+
characterA = iteratorA.next();
|
|
51
|
+
characterB = iteratorB.next();
|
|
39
52
|
}
|
|
40
53
|
|
|
41
54
|
return difference;
|
|
42
55
|
}
|
|
43
56
|
|
|
44
|
-
export function substring(string, start, end
|
|
57
|
+
export function substring(string, start, end = Infinity) {
|
|
58
|
+
let index = 0;
|
|
59
|
+
|
|
60
|
+
const iterator = string[Symbol.iterator](),
|
|
61
|
+
characters = [];
|
|
62
|
+
|
|
63
|
+
let character = iterator.next();
|
|
64
|
+
|
|
65
|
+
while (!character.done) {
|
|
66
|
+
if (index >= start) {
|
|
67
|
+
characters.push(character.value); ///
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
index++
|
|
71
|
+
|
|
72
|
+
if (index === end) {
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
character = iterator.next();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const substring = characters.join(EMPTY_STRING);
|
|
80
|
+
|
|
81
|
+
return substring;
|
|
82
|
+
}
|
|
45
83
|
|
|
46
84
|
export default {
|
|
47
85
|
strcmp,
|