necessary 13.1.5 â 13.2.2
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 +9 -0
- package/lib/utilities/string.js +30 -1
- package/package.json +1 -1
- package/src/utilities/string.js +45 -0
package/README.md
CHANGED
|
@@ -913,6 +913,7 @@ Ideally the `host` argument should not include a trailing forward slash whereas
|
|
|
913
913
|
|
|
914
914
|
- `strlen()`
|
|
915
915
|
- `strcmp()`
|
|
916
|
+
- `indexOf()`
|
|
916
917
|
- `substring()`
|
|
917
918
|
|
|
918
919
|
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.
|
|
@@ -948,6 +949,14 @@ Note that, conceptually speaking, the first argument is taken away from the seco
|
|
|
948
949
|
|
|
949
950
|
Note also that the double-struck `C` is in the basic multilingual plane and has code point `0x02102` whereas the double-struck `đž` is in an astral plane and has code point `0x1D538`, therefore their difference is positive.
|
|
950
951
|
|
|
952
|
+
* The `indexOf()` function takes `string` and `searchString` and works in identical fashion to the `String` class' `indexOf()` method, however it is Unicode safe:
|
|
953
|
+
|
|
954
|
+
```
|
|
955
|
+
indexOf("đžb", "b"); // Returns 1.
|
|
956
|
+
```
|
|
957
|
+
|
|
958
|
+
In the above example the aforementioned native method would return 2.
|
|
959
|
+
|
|
951
960
|
* The `substring()` function takes `string` and `start` arguments and an optional `end` argument. It works in much the same way as the `substring()` method of the `String` prototype, however it is Unicode safe:
|
|
952
961
|
|
|
953
962
|
```
|
package/lib/utilities/string.js
CHANGED
|
@@ -12,6 +12,9 @@ _export(exports, {
|
|
|
12
12
|
default: function() {
|
|
13
13
|
return _default;
|
|
14
14
|
},
|
|
15
|
+
indexOf: function() {
|
|
16
|
+
return indexOf;
|
|
17
|
+
},
|
|
15
18
|
strcmp: function() {
|
|
16
19
|
return strcmp;
|
|
17
20
|
},
|
|
@@ -52,6 +55,31 @@ function strcmp(stringA, stringB) {
|
|
|
52
55
|
}
|
|
53
56
|
return difference;
|
|
54
57
|
}
|
|
58
|
+
function indexOf(string, searchString) {
|
|
59
|
+
var index = -1, found = false;
|
|
60
|
+
var searchStringLength = strlen(searchString);
|
|
61
|
+
if (searchStringLength > 0) {
|
|
62
|
+
var character;
|
|
63
|
+
var iterator = string[Symbol.iterator](), searchIterator = searchString[Symbol.iterator](), searchCharacter = searchIterator.next();
|
|
64
|
+
character = iterator.next();
|
|
65
|
+
index++;
|
|
66
|
+
while(!character.done){
|
|
67
|
+
if (character.value === searchCharacter.value) {
|
|
68
|
+
var start = index, end = start + searchStringLength, subString = substring(string, start, end), difference = strcmp(subString, searchString);
|
|
69
|
+
if (difference === 0) {
|
|
70
|
+
found = true;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
character = iterator.next();
|
|
75
|
+
index++;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (!found) {
|
|
79
|
+
index = -1;
|
|
80
|
+
}
|
|
81
|
+
return index;
|
|
82
|
+
}
|
|
55
83
|
function substring(string, start) {
|
|
56
84
|
var end = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : Infinity;
|
|
57
85
|
var index = 0;
|
|
@@ -73,7 +101,8 @@ function substring(string, start) {
|
|
|
73
101
|
var _default = {
|
|
74
102
|
strcmp: strcmp,
|
|
75
103
|
strlen: strlen,
|
|
104
|
+
indexOf: indexOf,
|
|
76
105
|
substring: substring
|
|
77
106
|
};
|
|
78
107
|
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4oc3RyaW5nKSB7XG4gIGxldCBsZW5ndGggPSAwO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gc3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKTtcblxuICBsZXQgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gIHdoaWxlICghY2hhcmFjdGVyLmRvbmUpIHtcbiAgICBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICBsZW5ndGgrK1xuICB9XG5cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmNtcChzdHJpbmdBLCBzdHJpbmdCKSB7XG4gIGxldCBkaWZmZXJlbmNlO1xuXG4gIGNvbnN0IGl0ZXJhdG9yQSA9IHN0cmluZ0FbU3ltYm9sLml0ZXJhdG9yXSgpLCAvLy9cbiAgICAgICAgaXRlcmF0b3JCID0gc3RyaW5nQltTeW1ib2wuaXRlcmF0b3JdKCk7IC8vL1xuXG4gIGxldCBjaGFyYWN0ZXJBID0gaXRlcmF0b3JBLm5leHQoKSxcbiAgICAgIGNoYXJhY3RlckIgPSBpdGVyYXRvckIubmV4dCgpLFxuICAgICAgY29kZVBvaW50QSxcbiAgICAgIGNvZGVQb2ludEI7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb2RlUG9pbnRBID0gY2hhcmFjdGVyQS52YWx1ZSA/IC8vL1xuICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckEudmFsdWUuY29kZVBvaW50QXQoMCkgOlxuICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICBjb2RlUG9pbnRCID0gY2hhcmFjdGVyQi52YWx1ZSA/
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4oc3RyaW5nKSB7XG4gIGxldCBsZW5ndGggPSAwO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gc3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKTtcblxuICBsZXQgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gIHdoaWxlICghY2hhcmFjdGVyLmRvbmUpIHtcbiAgICBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICBsZW5ndGgrK1xuICB9XG5cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmNtcChzdHJpbmdBLCBzdHJpbmdCKSB7XG4gIGxldCBkaWZmZXJlbmNlO1xuXG4gIGNvbnN0IGl0ZXJhdG9yQSA9IHN0cmluZ0FbU3ltYm9sLml0ZXJhdG9yXSgpLCAvLy9cbiAgICAgICAgaXRlcmF0b3JCID0gc3RyaW5nQltTeW1ib2wuaXRlcmF0b3JdKCk7IC8vL1xuXG4gIGxldCBjaGFyYWN0ZXJBID0gaXRlcmF0b3JBLm5leHQoKSxcbiAgICAgIGNoYXJhY3RlckIgPSBpdGVyYXRvckIubmV4dCgpLFxuICAgICAgY29kZVBvaW50QSxcbiAgICAgIGNvZGVQb2ludEI7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb2RlUG9pbnRBID0gY2hhcmFjdGVyQS52YWx1ZSA/IC8vL1xuICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckEudmFsdWUuY29kZVBvaW50QXQoMCkgOlxuICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICBjb2RlUG9pbnRCID0gY2hhcmFjdGVyQi52YWx1ZSA/IC8vL1xuICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckIudmFsdWUuY29kZVBvaW50QXQoMCkgOlxuICAgICAgICAgICAgICAgICAgICAgMDtcblxuICAgIGRpZmZlcmVuY2UgPSBjb2RlUG9pbnRCIC0gY29kZVBvaW50QTtcblxuICAgIGlmIChkaWZmZXJlbmNlICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY2hhcmFjdGVyQS5kb25lIHx8IGNoYXJhY3RlckIuZG9uZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hhcmFjdGVyQSA9IGl0ZXJhdG9yQS5uZXh0KCk7XG4gICAgY2hhcmFjdGVyQiA9IGl0ZXJhdG9yQi5uZXh0KCk7XG4gIH1cblxuICByZXR1cm4gZGlmZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluZGV4T2Yoc3RyaW5nLCBzZWFyY2hTdHJpbmcpIHtcbiAgbGV0IGluZGV4ID0gLTEsXG4gICAgICBmb3VuZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHNlYXJjaFN0cmluZ0xlbmd0aCA9IHN0cmxlbihzZWFyY2hTdHJpbmcpO1xuXG4gIGlmIChzZWFyY2hTdHJpbmdMZW5ndGggPiAwKSB7XG4gICAgbGV0IGNoYXJhY3RlcjtcblxuICAgIGNvbnN0IGl0ZXJhdG9yID0gc3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKSxcbiAgICAgICAgICBzZWFyY2hJdGVyYXRvciA9IHNlYXJjaFN0cmluZ1tTeW1ib2wuaXRlcmF0b3JdKCksXG4gICAgICAgICAgc2VhcmNoQ2hhcmFjdGVyID0gc2VhcmNoSXRlcmF0b3IubmV4dCgpO1xuXG4gICAgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgaW5kZXgrKztcblxuICAgIHdoaWxlICghY2hhcmFjdGVyLmRvbmUpIHtcbiAgICAgIGlmIChjaGFyYWN0ZXIudmFsdWUgPT09IHNlYXJjaENoYXJhY3Rlci52YWx1ZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgc2VhcmNoU3RyaW5nTGVuZ3RoLFxuICAgICAgICAgICAgICBzdWJTdHJpbmcgPSBzdWJzdHJpbmcoc3RyaW5nLCBzdGFydCwgZW5kKSxcbiAgICAgICAgICAgICAgZGlmZmVyZW5jZSA9IHN0cmNtcChzdWJTdHJpbmcsIHNlYXJjaFN0cmluZyk7XG5cbiAgICAgICAgaWYgKGRpZmZlcmVuY2UgPT09IDApIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgIGluZGV4KytcbiAgICB9XG4gIH1cblxuICBpZiAoIWZvdW5kKSB7XG4gICAgaW5kZXggPSAtMTtcbiAgfVxuXG4gIHJldHVybiBpbmRleDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZyhzdHJpbmcsIHN0YXJ0LCBlbmQgPSBJbmZpbml0eSkge1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gc3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKSxcbiAgICAgICAgY2hhcmFjdGVycyA9IFtdO1xuXG4gIGxldCBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgd2hpbGUgKCFjaGFyYWN0ZXIuZG9uZSkge1xuICAgIGlmIChpbmRleCA9PT0gZW5kKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPj0gc3RhcnQpIHtcbiAgICAgIGNoYXJhY3RlcnMucHVzaChjaGFyYWN0ZXIudmFsdWUpOyAvLy9cbiAgICB9XG5cbiAgICBpbmRleCsrXG5cbiAgICBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG4gIH1cblxuICBjb25zdCBzdWJzdHJpbmcgPSBjaGFyYWN0ZXJzLmpvaW4oRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gc3Vic3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN0cmNtcCxcbiAgc3RybGVuLFxuICBpbmRleE9mLFxuICBzdWJzdHJpbmdcbn07XG4iXSwibmFtZXMiOlsiaW5kZXhPZiIsInN0cmNtcCIsInN0cmxlbiIsInN1YnN0cmluZyIsInN0cmluZyIsImxlbmd0aCIsIml0ZXJhdG9yIiwiU3ltYm9sIiwiY2hhcmFjdGVyIiwibmV4dCIsImRvbmUiLCJzdHJpbmdBIiwic3RyaW5nQiIsImRpZmZlcmVuY2UiLCJpdGVyYXRvckEiLCJpdGVyYXRvckIiLCJjaGFyYWN0ZXJBIiwiY2hhcmFjdGVyQiIsImNvZGVQb2ludEEiLCJjb2RlUG9pbnRCIiwidmFsdWUiLCJjb2RlUG9pbnRBdCIsInNlYXJjaFN0cmluZyIsImluZGV4IiwiZm91bmQiLCJzZWFyY2hTdHJpbmdMZW5ndGgiLCJzZWFyY2hJdGVyYXRvciIsInNlYXJjaENoYXJhY3RlciIsInN0YXJ0IiwiZW5kIiwic3ViU3RyaW5nIiwiSW5maW5pdHkiLCJjaGFyYWN0ZXJzIiwicHVzaCIsImpvaW4iLCJFTVBUWV9TVFJJTkciXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQStIQSxPQUtFO2VBTEY7O0lBdkVnQkEsT0FBTztlQUFQQTs7SUFwQ0FDLE1BQU07ZUFBTkE7O0lBaEJBQyxNQUFNO2VBQU5BOztJQWdHQUMsU0FBUztlQUFUQTs7O3lCQWxHYTtBQUV0QixTQUFTRCxPQUFPRSxNQUFNO0lBQzNCLElBQUlDLFNBQVM7SUFFYixJQUFNQyxXQUFXRixNQUFNLENBQUNHLE9BQU9ELFFBQVEsQ0FBQztJQUV4QyxJQUFJRSxZQUFZRixTQUFTRyxJQUFJO0lBRTdCLE1BQU8sQ0FBQ0QsVUFBVUUsSUFBSSxDQUFFO1FBQ3RCRixZQUFZRixTQUFTRyxJQUFJO1FBRXpCSjtJQUNGO0lBRUEsT0FBT0E7QUFDVDtBQUVPLFNBQVNKLE9BQU9VLE9BQU8sRUFBRUMsT0FBTztJQUNyQyxJQUFJQztJQUVKLElBQU1DLFlBQVlILE9BQU8sQ0FBQ0osT0FBT0QsUUFBUSxDQUFDLElBQ3BDUyxZQUFZSCxPQUFPLENBQUNMLE9BQU9ELFFBQVEsQ0FBQyxJQUFJLEdBQUc7SUFFakQsSUFBSVUsYUFBYUYsVUFBVUwsSUFBSSxJQUMzQlEsYUFBYUYsVUFBVU4sSUFBSSxJQUMzQlMsWUFDQUM7SUFFSixNQUFPLEtBQU07UUFDWEQsYUFBYUYsV0FBV0ksS0FBSyxHQUNkSixXQUFXSSxLQUFLLENBQUNDLFdBQVcsQ0FBQyxLQUMzQjtRQUNqQkYsYUFBYUYsV0FBV0csS0FBSyxHQUNkSCxXQUFXRyxLQUFLLENBQUNDLFdBQVcsQ0FBQyxLQUMzQjtRQUVqQlIsYUFBYU0sYUFBYUQ7UUFFMUIsSUFBSUwsZUFBZSxHQUFHO1lBQ3BCO1FBQ0Y7UUFFQSxJQUFJRyxXQUFXTixJQUFJLElBQUlPLFdBQVdQLElBQUksRUFBRTtZQUN0QztRQUNGO1FBRUFNLGFBQWFGLFVBQVVMLElBQUk7UUFDM0JRLGFBQWFGLFVBQVVOLElBQUk7SUFDN0I7SUFFQSxPQUFPSTtBQUNUO0FBRU8sU0FBU2IsUUFBUUksTUFBTSxFQUFFa0IsWUFBWTtJQUMxQyxJQUFJQyxRQUFRLENBQUMsR0FDVEMsUUFBUTtJQUVaLElBQU1DLHFCQUFxQnZCLE9BQU9vQjtJQUVsQyxJQUFJRyxxQkFBcUIsR0FBRztRQUMxQixJQUFJakI7UUFFSixJQUFNRixXQUFXRixNQUFNLENBQUNHLE9BQU9ELFFBQVEsQ0FBQyxJQUNsQ29CLGlCQUFpQkosWUFBWSxDQUFDZixPQUFPRCxRQUFRLENBQUMsSUFDOUNxQixrQkFBa0JELGVBQWVqQixJQUFJO1FBRTNDRCxZQUFZRixTQUFTRyxJQUFJO1FBRXpCYztRQUVBLE1BQU8sQ0FBQ2YsVUFBVUUsSUFBSSxDQUFFO1lBQ3RCLElBQUlGLFVBQVVZLEtBQUssS0FBS08sZ0JBQWdCUCxLQUFLLEVBQUU7Z0JBQzdDLElBQU1RLFFBQVFMLE9BQ1JNLE1BQU1ELFFBQVFILG9CQUNkSyxZQUFZM0IsVUFBVUMsUUFBUXdCLE9BQU9DLE1BQ3JDaEIsYUFBYVosT0FBTzZCLFdBQVdSO2dCQUVyQyxJQUFJVCxlQUFlLEdBQUc7b0JBQ3BCVyxRQUFRO29CQUVSO2dCQUNGO1lBQ0Y7WUFFQWhCLFlBQVlGLFNBQVNHLElBQUk7WUFFekJjO1FBQ0Y7SUFDRjtJQUVBLElBQUksQ0FBQ0MsT0FBTztRQUNWRCxRQUFRLENBQUM7SUFDWDtJQUVBLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTcEIsVUFBVUMsTUFBTSxFQUFFd0IsS0FBSztRQUFFQyxNQUFBQSxpRUFBTUU7SUFDN0MsSUFBSVIsUUFBUTtJQUVaLElBQU1qQixXQUFXRixNQUFNLENBQUNHLE9BQU9ELFFBQVEsQ0FBQyxJQUNsQzBCLGFBQWEsRUFBRTtJQUVyQixJQUFJeEIsWUFBWUYsU0FBU0csSUFBSTtJQUU3QixNQUFPLENBQUNELFVBQVVFLElBQUksQ0FBRTtRQUN0QixJQUFJYSxVQUFVTSxLQUFLO1lBQ2pCO1FBQ0Y7UUFFQSxJQUFJTixTQUFTSyxPQUFPO1lBQ2xCSSxXQUFXQyxJQUFJLENBQUN6QixVQUFVWSxLQUFLLEdBQUcsR0FBRztRQUN2QztRQUVBRztRQUVBZixZQUFZRixTQUFTRyxJQUFJO0lBQzNCO0lBRUEsSUFBTU4sY0FBWTZCLFdBQVdFLElBQUksQ0FBQ0MsdUJBQVk7SUFFOUMsT0FBT2hDO0FBQ1Q7SUFFQSxXQUFlO0lBQ2JGLFFBQUFBO0lBQ0FDLFFBQUFBO0lBQ0FGLFNBQUFBO0lBQ0FHLFdBQUFBO0FBQ0YifQ==
|
package/package.json
CHANGED
package/src/utilities/string.js
CHANGED
|
@@ -54,6 +54,50 @@ export function strcmp(stringA, stringB) {
|
|
|
54
54
|
return difference;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
export function indexOf(string, searchString) {
|
|
58
|
+
let index = -1,
|
|
59
|
+
found = false;
|
|
60
|
+
|
|
61
|
+
const searchStringLength = strlen(searchString);
|
|
62
|
+
|
|
63
|
+
if (searchStringLength > 0) {
|
|
64
|
+
let character;
|
|
65
|
+
|
|
66
|
+
const iterator = string[Symbol.iterator](),
|
|
67
|
+
searchIterator = searchString[Symbol.iterator](),
|
|
68
|
+
searchCharacter = searchIterator.next();
|
|
69
|
+
|
|
70
|
+
character = iterator.next();
|
|
71
|
+
|
|
72
|
+
index++;
|
|
73
|
+
|
|
74
|
+
while (!character.done) {
|
|
75
|
+
if (character.value === searchCharacter.value) {
|
|
76
|
+
const start = index, ///
|
|
77
|
+
end = start + searchStringLength,
|
|
78
|
+
subString = substring(string, start, end),
|
|
79
|
+
difference = strcmp(subString, searchString);
|
|
80
|
+
|
|
81
|
+
if (difference === 0) {
|
|
82
|
+
found = true;
|
|
83
|
+
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
character = iterator.next();
|
|
89
|
+
|
|
90
|
+
index++
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (!found) {
|
|
95
|
+
index = -1;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return index;
|
|
99
|
+
}
|
|
100
|
+
|
|
57
101
|
export function substring(string, start, end = Infinity) {
|
|
58
102
|
let index = 0;
|
|
59
103
|
|
|
@@ -84,5 +128,6 @@ export function substring(string, start, end = Infinity) {
|
|
|
84
128
|
export default {
|
|
85
129
|
strcmp,
|
|
86
130
|
strlen,
|
|
131
|
+
indexOf,
|
|
87
132
|
substring
|
|
88
133
|
};
|