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 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBVRyA9IFwidWdcIjtcbmV4cG9ydCBjb25zdCBaRVJPID0gXCIwXCI7XG5leHBvcnQgY29uc3QgREFUQSA9IFwiZGF0YVwiO1xuZXhwb3J0IGNvbnN0IEVSUk9SID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgTlVNQkVSID0gXCJudW1iZXJcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVCA9IFwiZGVmYXVsdFwiO1xuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UID0gXCJFTlZJUk9OTUVOVFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9KU09OID0gXCJwYWNrYWdlLmpzb25cIjtcbiJdLCJuYW1lcyI6WyJCT09MRUFOIiwiREFUQSIsIkRFRkFVTFQiLCJFTVBUWV9TVFJJTkciLCJFTlZJUk9OTUVOVCIsIkVSUk9SIiwiTlVNQkVSIiwiUEFDS0FHRV9KU09OIiwiU1RSSU5HIiwiVUciLCJaRVJPIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFRYUEsT0FBTztlQUFQQTs7SUFKQUMsSUFBSTtlQUFKQTs7SUFLQUMsT0FBTztlQUFQQTs7SUFFQUMsWUFBWTtlQUFaQTs7SUFEQUMsV0FBVztlQUFYQTs7SUFMQUMsS0FBSztlQUFMQTs7SUFFQUMsTUFBTTtlQUFOQTs7SUFLQUMsWUFBWTtlQUFaQTs7SUFOQUMsTUFBTTtlQUFOQTs7SUFKQUMsRUFBRTtlQUFGQTs7SUFDQUMsSUFBSTtlQUFKQTs7O0FBRE4sSUFBTUQsS0FBSztBQUNYLElBQU1DLE9BQU87QUFDYixJQUFNVCxPQUFPO0FBQ2IsSUFBTUksUUFBUTtBQUNkLElBQU1HLFNBQVM7QUFDZixJQUFNRixTQUFTO0FBQ2YsSUFBTU4sVUFBVTtBQUNoQixJQUFNRSxVQUFVO0FBQ2hCLElBQU1FLGNBQWM7QUFDcEIsSUFBTUQsZUFBZTtBQUNyQixJQUFNSSxlQUFlIn0=
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBaRVJPID0gXCIwXCI7XG5leHBvcnQgY29uc3QgREFUQSA9IFwiZGF0YVwiO1xuZXhwb3J0IGNvbnN0IEVSUk9SID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgTlVNQkVSID0gXCJudW1iZXJcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVCA9IFwiZGVmYXVsdFwiO1xuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UID0gXCJFTlZJUk9OTUVOVFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9KU09OID0gXCJwYWNrYWdlLmpzb25cIjtcbiJdLCJuYW1lcyI6WyJCT09MRUFOIiwiREFUQSIsIkRFRkFVTFQiLCJFTVBUWV9TVFJJTkciLCJFTlZJUk9OTUVOVCIsIkVSUk9SIiwiTlVNQkVSIiwiUEFDS0FHRV9KU09OIiwiU1RSSU5HIiwiWkVSTyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBT2FBLE9BQU87ZUFBUEE7O0lBSkFDLElBQUk7ZUFBSkE7O0lBS0FDLE9BQU87ZUFBUEE7O0lBRUFDLFlBQVk7ZUFBWkE7O0lBREFDLFdBQVc7ZUFBWEE7O0lBTEFDLEtBQUs7ZUFBTEE7O0lBRUFDLE1BQU07ZUFBTkE7O0lBS0FDLFlBQVk7ZUFBWkE7O0lBTkFDLE1BQU07ZUFBTkE7O0lBSEFDLElBQUk7ZUFBSkE7OztBQUFOLElBQU1BLE9BQU87QUFDYixJQUFNUixPQUFPO0FBQ2IsSUFBTUksUUFBUTtBQUNkLElBQU1HLFNBQVM7QUFDZixJQUFNRixTQUFTO0FBQ2YsSUFBTU4sVUFBVTtBQUNoQixJQUFNRSxVQUFVO0FBQ2hCLElBQU1FLGNBQWM7QUFDcEIsSUFBTUQsZUFBZTtBQUNyQixJQUFNSSxlQUFlIn0=
@@ -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 = string.length;
54
- var matches = string.match(astralCharactersRegExp);
55
- if (matches !== null) {
56
- var astralCharactersLength = matches.length;
57
- length -= astralCharactersLength;
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 codePointA = stringA === _constants.EMPTY_STRING ? 0 : stringA.codePointAt(0), codePointB = stringB === _constants.EMPTY_STRING ? 0 : stringB.codePointAt(0);
64
- difference = codePointB - codePointA;
65
- if (difference === 0 && codePointA !== 0 && codePointB !== 0) {
66
- stringA = substring(stringA, 1); ///
67
- stringB = substring(stringB, 1); ///
68
- difference = strcmp(stringA, stringB);
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, end) {
73
- return _to_consumable_array(string).slice(start, end).join("");
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcsIFVHIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBhc3RyYWxDaGFyYWN0ZXJzUmVnRXhwID0gbmV3IFJlZ0V4cChcIltcXFxcdXsxMDAwMH0tXFxcXHV7MTBmZmZmfV1cIiwgVUcpO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RybGVuKHN0cmluZykge1xuICBsZXQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcblxuICBjb25zdCBtYXRjaGVzID0gc3RyaW5nLm1hdGNoKGFzdHJhbENoYXJhY3RlcnNSZWdFeHApO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBsZW5ndGg6IGFzdHJhbENoYXJhY3RlcnNMZW5ndGggfSA9IG1hdGNoZXM7XG5cbiAgICBsZW5ndGggLT0gYXN0cmFsQ2hhcmFjdGVyc0xlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBsZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJjbXAoc3RyaW5nQSwgc3RyaW5nQikge1xuICBsZXQgZGlmZmVyZW5jZTtcblxuICBjb25zdCBjb2RlUG9pbnRBID0gKHN0cmluZ0EgPT09IEVNUFRZX1NUUklORykgP1xuICAgICAgMCA6XG4gICAgICBzdHJpbmdBLmNvZGVQb2ludEF0KDApLFxuICAgIGNvZGVQb2ludEIgPSAoc3RyaW5nQiA9PT0gRU1QVFlfU1RSSU5HKSA/XG4gICAgICAwIDpcbiAgICAgIHN0cmluZ0IuY29kZVBvaW50QXQoMCk7XG5cbiAgZGlmZmVyZW5jZSA9IGNvZGVQb2ludEIgLSBjb2RlUG9pbnRBO1xuXG4gIGlmICgoZGlmZmVyZW5jZSA9PT0gMCkgJiYgKGNvZGVQb2ludEEgIT09MCkgJiYgKGNvZGVQb2ludEIgIT09MCkpIHtcbiAgICBzdHJpbmdBID0gc3Vic3RyaW5nKHN0cmluZ0EsIDEpOyAvLy9cblxuICAgIHN0cmluZ0IgPSBzdWJzdHJpbmcoc3RyaW5nQiwgMSk7IC8vL1xuXG4gICAgZGlmZmVyZW5jZSA9IHN0cmNtcChzdHJpbmdBLCBzdHJpbmdCKTtcbiAgfVxuXG4gIHJldHVybiBkaWZmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyaW5nKHN0cmluZywgc3RhcnQsIGVuZCkgeyByZXR1cm4gWy4uLnN0cmluZ10uc2xpY2Uoc3RhcnQsIGVuZCkuam9pbihcIlwiKTsgfSAgLy8vXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc3RyY21wLFxuICBzdHJsZW4sXG4gIHN1YnN0cmluZ1xufTtcbiJdLCJuYW1lcyI6WyJzdHJjbXAiLCJzdHJsZW4iLCJzdWJzdHJpbmciLCJhc3RyYWxDaGFyYWN0ZXJzUmVnRXhwIiwiUmVnRXhwIiwiVUciLCJzdHJpbmciLCJsZW5ndGgiLCJtYXRjaGVzIiwibWF0Y2giLCJhc3RyYWxDaGFyYWN0ZXJzTGVuZ3RoIiwic3RyaW5nQSIsInN0cmluZ0IiLCJkaWZmZXJlbmNlIiwiY29kZVBvaW50QSIsIkVNUFRZX1NUUklORyIsImNvZGVQb2ludEF0IiwiY29kZVBvaW50QiIsInN0YXJ0IiwiZW5kIiwic2xpY2UiLCJqb2luIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUE2Q0EsT0FJRTtlQUpGOztJQXpCZ0JBLE1BQU07ZUFBTkE7O0lBZEFDLE1BQU07ZUFBTkE7O0lBcUNBQyxTQUFTO2VBQVRBOzs7eUJBekNpQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFakMsSUFBTUMseUJBQXlCLElBQUlDLE9BQU8sNEJBQTRCQyxhQUFFO0FBRWpFLFNBQVNKLE9BQU9LLE1BQU07SUFDM0IsSUFBSUMsU0FBU0QsT0FBT0MsTUFBTTtJQUUxQixJQUFNQyxVQUFVRixPQUFPRyxLQUFLLENBQUNOO0lBRTdCLElBQUlLLFlBQVksTUFBTTtRQUNwQixJQUFRRCxBQUFRRyx5QkFBMkJGLFFBQW5DRDtRQUVSQSxVQUFVRztJQUNaO0lBRUEsT0FBT0g7QUFDVDtBQUVPLFNBQVNQLE9BQU9XLE9BQU8sRUFBRUMsT0FBTztJQUNyQyxJQUFJQztJQUVKLElBQU1DLGFBQWEsQUFBQ0gsWUFBWUksdUJBQVksR0FDeEMsSUFDQUosUUFBUUssV0FBVyxDQUFDLElBQ3RCQyxhQUFhLEFBQUNMLFlBQVlHLHVCQUFZLEdBQ3BDLElBQ0FILFFBQVFJLFdBQVcsQ0FBQztJQUV4QkgsYUFBYUksYUFBYUg7SUFFMUIsSUFBSSxBQUFDRCxlQUFlLEtBQU9DLGVBQWMsS0FBT0csZUFBYyxHQUFJO1FBQ2hFTixVQUFVVCxVQUFVUyxTQUFTLElBQUksR0FBRztRQUVwQ0MsVUFBVVYsVUFBVVUsU0FBUyxJQUFJLEdBQUc7UUFFcENDLGFBQWFiLE9BQU9XLFNBQVNDO0lBQy9CO0lBRUEsT0FBT0M7QUFDVDtBQUVPLFNBQVNYLFVBQVVJLE1BQU0sRUFBRVksS0FBSyxFQUFFQyxHQUFHO0lBQUksT0FBTyxBQUFDLHFCQUFHYixRQUFRYyxLQUFLLENBQUNGLE9BQU9DLEtBQUtFLElBQUksQ0FBQztBQUFLLEVBQUcsR0FBRztJQUVyRyxXQUFlO0lBQ2JyQixRQUFBQTtJQUNBQyxRQUFBQTtJQUNBQyxXQUFBQTtBQUNGIn0=
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4oc3RyaW5nKSB7XG4gIGxldCBsZW5ndGggPSAwO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gc3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKTtcblxuICBsZXQgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gIHdoaWxlICghY2hhcmFjdGVyLmRvbmUpIHtcbiAgICBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICBsZW5ndGgrK1xuICB9XG5cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmNtcChzdHJpbmdBLCBzdHJpbmdCKSB7XG4gIGxldCBkaWZmZXJlbmNlO1xuXG4gIGNvbnN0IGl0ZXJhdG9yQSA9IHN0cmluZ0FbU3ltYm9sLml0ZXJhdG9yXSgpLCAvLy9cbiAgICAgICAgaXRlcmF0b3JCID0gc3RyaW5nQltTeW1ib2wuaXRlcmF0b3JdKCk7IC8vL1xuXG4gIGxldCBjaGFyYWN0ZXJBID0gaXRlcmF0b3JBLm5leHQoKSxcbiAgICAgIGNoYXJhY3RlckIgPSBpdGVyYXRvckIubmV4dCgpLFxuICAgICAgY29kZVBvaW50QSxcbiAgICAgIGNvZGVQb2ludEI7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb2RlUG9pbnRBID0gY2hhcmFjdGVyQS52YWx1ZSA/IC8vL1xuICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckEudmFsdWUuY29kZVBvaW50QXQoMCkgOlxuICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICBjb2RlUG9pbnRCID0gY2hhcmFjdGVyQi52YWx1ZSA/IC8vL1xuICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckIudmFsdWUuY29kZVBvaW50QXQoMCkgOlxuICAgICAgICAgICAgICAgICAgICAgMDtcblxuICAgIGRpZmZlcmVuY2UgPSBjb2RlUG9pbnRCIC0gY29kZVBvaW50QTtcblxuICAgIGlmIChkaWZmZXJlbmNlICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY2hhcmFjdGVyQS5kb25lIHx8IGNoYXJhY3RlckIuZG9uZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hhcmFjdGVyQSA9IGl0ZXJhdG9yQS5uZXh0KCk7XG4gICAgY2hhcmFjdGVyQiA9IGl0ZXJhdG9yQi5uZXh0KCk7XG4gIH1cblxuICByZXR1cm4gZGlmZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZyhzdHJpbmcsIHN0YXJ0LCBlbmQgPSBJbmZpbml0eSkge1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gc3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKSxcbiAgICAgICAgY2hhcmFjdGVycyA9IFtdO1xuXG4gIGxldCBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgd2hpbGUgKCFjaGFyYWN0ZXIuZG9uZSkge1xuICAgIGlmIChpbmRleCA+PSBzdGFydCkge1xuICAgICAgY2hhcmFjdGVycy5wdXNoKGNoYXJhY3Rlci52YWx1ZSk7IC8vL1xuICAgIH1cblxuICAgIGluZGV4KytcblxuICAgIGlmIChpbmRleCA9PT0gZW5kKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG4gIH1cblxuICBjb25zdCBzdWJzdHJpbmcgPSBjaGFyYWN0ZXJzLmpvaW4oRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gc3Vic3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN0cmNtcCxcbiAgc3RybGVuLFxuICBzdWJzdHJpbmdcbn07XG4iXSwibmFtZXMiOlsic3RyY21wIiwic3RybGVuIiwic3Vic3RyaW5nIiwic3RyaW5nIiwibGVuZ3RoIiwiaXRlcmF0b3IiLCJTeW1ib2wiLCJjaGFyYWN0ZXIiLCJuZXh0IiwiZG9uZSIsInN0cmluZ0EiLCJzdHJpbmdCIiwiZGlmZmVyZW5jZSIsIml0ZXJhdG9yQSIsIml0ZXJhdG9yQiIsImNoYXJhY3RlckEiLCJjaGFyYWN0ZXJCIiwiY29kZVBvaW50QSIsImNvZGVQb2ludEIiLCJ2YWx1ZSIsImNvZGVQb2ludEF0Iiwic3RhcnQiLCJlbmQiLCJJbmZpbml0eSIsImluZGV4IiwiY2hhcmFjdGVycyIsInB1c2giLCJqb2luIiwiRU1QVFlfU1RSSU5HIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFtRkEsT0FJRTtlQUpGOztJQS9EZ0JBLE1BQU07ZUFBTkE7O0lBaEJBQyxNQUFNO2VBQU5BOztJQW9EQUMsU0FBUztlQUFUQTs7O3lCQXREYTtBQUV0QixTQUFTRCxPQUFPRSxNQUFNO0lBQzNCLElBQUlDLFNBQVM7SUFFYixJQUFNQyxXQUFXRixNQUFNLENBQUNHLE9BQU9ELFFBQVEsQ0FBQztJQUV4QyxJQUFJRSxZQUFZRixTQUFTRyxJQUFJO0lBRTdCLE1BQU8sQ0FBQ0QsVUFBVUUsSUFBSSxDQUFFO1FBQ3RCRixZQUFZRixTQUFTRyxJQUFJO1FBRXpCSjtJQUNGO0lBRUEsT0FBT0E7QUFDVDtBQUVPLFNBQVNKLE9BQU9VLE9BQU8sRUFBRUMsT0FBTztJQUNyQyxJQUFJQztJQUVKLElBQU1DLFlBQVlILE9BQU8sQ0FBQ0osT0FBT0QsUUFBUSxDQUFDLElBQ3BDUyxZQUFZSCxPQUFPLENBQUNMLE9BQU9ELFFBQVEsQ0FBQyxJQUFJLEdBQUc7SUFFakQsSUFBSVUsYUFBYUYsVUFBVUwsSUFBSSxJQUMzQlEsYUFBYUYsVUFBVU4sSUFBSSxJQUMzQlMsWUFDQUM7SUFFSixNQUFPLEtBQU07UUFDWEQsYUFBYUYsV0FBV0ksS0FBSyxHQUNkSixXQUFXSSxLQUFLLENBQUNDLFdBQVcsQ0FBQyxLQUMzQjtRQUNqQkYsYUFBYUYsV0FBV0csS0FBSyxHQUNkSCxXQUFXRyxLQUFLLENBQUNDLFdBQVcsQ0FBQyxLQUMzQjtRQUVqQlIsYUFBYU0sYUFBYUQ7UUFFMUIsSUFBSUwsZUFBZSxHQUFHO1lBQ3BCO1FBQ0Y7UUFFQSxJQUFJRyxXQUFXTixJQUFJLElBQUlPLFdBQVdQLElBQUksRUFBRTtZQUN0QztRQUNGO1FBRUFNLGFBQWFGLFVBQVVMLElBQUk7UUFDM0JRLGFBQWFGLFVBQVVOLElBQUk7SUFDN0I7SUFFQSxPQUFPSTtBQUNUO0FBRU8sU0FBU1YsVUFBVUMsTUFBTSxFQUFFa0IsS0FBSztRQUFFQyxNQUFBQSxpRUFBTUM7SUFDN0MsSUFBSUMsUUFBUTtJQUVaLElBQU1uQixXQUFXRixNQUFNLENBQUNHLE9BQU9ELFFBQVEsQ0FBQyxJQUNsQ29CLGFBQWEsRUFBRTtJQUVyQixJQUFJbEIsWUFBWUYsU0FBU0csSUFBSTtJQUU3QixNQUFPLENBQUNELFVBQVVFLElBQUksQ0FBRTtRQUN0QixJQUFJZSxTQUFTSCxPQUFPO1lBQ2xCSSxXQUFXQyxJQUFJLENBQUNuQixVQUFVWSxLQUFLLEdBQUcsR0FBRztRQUN2QztRQUVBSztRQUVBLElBQUlBLFVBQVVGLEtBQUs7WUFDakI7UUFDRjtRQUVBZixZQUFZRixTQUFTRyxJQUFJO0lBQzNCO0lBRUEsSUFBTU4sY0FBWXVCLFdBQVdFLElBQUksQ0FBQ0MsdUJBQVk7SUFFOUMsT0FBTzFCO0FBQ1Q7SUFFQSxXQUFlO0lBQ2JGLFFBQUFBO0lBQ0FDLFFBQUFBO0lBQ0FDLFdBQUFBO0FBQ0YifQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "necessary",
3
3
  "author": "James Smith",
4
- "version": "13.0.8",
4
+ "version": "13.0.9",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/necessary",
7
7
  "description": "A collection of utility functions.",
package/src/constants.js CHANGED
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
 
3
- export const UG = "ug";
4
3
  export const ZERO = "0";
5
4
  export const DATA = "data";
6
5
  export const ERROR = "error";
@@ -1,18 +1,18 @@
1
1
  "use strict";
2
2
 
3
- import { EMPTY_STRING, UG } from "../constants";
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 = string.length;
6
+ let length = 0;
7
+
8
+ const iterator = string[Symbol.iterator]();
9
9
 
10
- const matches = string.match(astralCharactersRegExp);
10
+ let character = iterator.next();
11
11
 
12
- if (matches !== null) {
13
- const { length: astralCharactersLength } = matches;
12
+ while (!character.done) {
13
+ character = iterator.next();
14
14
 
15
- length -= astralCharactersLength;
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 codePointA = (stringA === EMPTY_STRING) ?
25
- 0 :
26
- stringA.codePointAt(0),
27
- codePointB = (stringB === EMPTY_STRING) ?
28
- 0 :
29
- stringB.codePointAt(0);
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
- difference = codePointB - codePointA;
40
+ difference = codePointB - codePointA;
32
41
 
33
- if ((difference === 0) && (codePointA !==0) && (codePointB !==0)) {
34
- stringA = substring(stringA, 1); ///
42
+ if (difference !== 0) {
43
+ break;
44
+ }
35
45
 
36
- stringB = substring(stringB, 1); ///
46
+ if (characterA.done || characterB.done) {
47
+ break;
48
+ }
37
49
 
38
- difference = strcmp(stringA, stringB);
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) { return [...string].slice(start, end).join(""); } ///
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,