@andrew_l/toolkit 0.2.21 → 0.3.0
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/dist/index.cjs +683 -616
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +25 -7
- package/dist/index.d.mts +25 -7
- package/dist/index.d.ts +25 -7
- package/dist/index.mjs +682 -617
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -4
package/dist/index.cjs
CHANGED
|
@@ -792,12 +792,42 @@ function uniqBy(array, comparator) {
|
|
|
792
792
|
});
|
|
793
793
|
}
|
|
794
794
|
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
795
|
+
class BrowserAssertionError extends Error {
|
|
796
|
+
/**
|
|
797
|
+
* Set to the `actual` argument for methods such as {@link assert.strictEqual()}.
|
|
798
|
+
*/
|
|
799
|
+
actual;
|
|
800
|
+
/**
|
|
801
|
+
* Set to the `expected` argument for methods such as {@link assert.strictEqual()}.
|
|
802
|
+
*/
|
|
803
|
+
expected;
|
|
804
|
+
/**
|
|
805
|
+
* Set to the passed in operator value.
|
|
806
|
+
*/
|
|
807
|
+
operator;
|
|
808
|
+
/**
|
|
809
|
+
* Indicates if the message was auto-generated (`true`) or not.
|
|
810
|
+
*/
|
|
811
|
+
generatedMessage;
|
|
812
|
+
/**
|
|
813
|
+
* Value is always `ERR_ASSERTION` to show that the error is an assertion error.
|
|
814
|
+
*/
|
|
815
|
+
code;
|
|
816
|
+
constructor(options) {
|
|
817
|
+
super(options?.message);
|
|
818
|
+
this.actual = options?.actual;
|
|
819
|
+
this.expected = options?.expected;
|
|
820
|
+
this.operator = options?.operator ?? "none";
|
|
821
|
+
this.generatedMessage = false;
|
|
822
|
+
this.code = "ERR_ASSERTION";
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
let AssertionError = BrowserAssertionError;
|
|
827
|
+
if (!globalThis.window) {
|
|
828
|
+
import('node:assert').then((r) => AssertionError = r.AssertionError).catch(() => {
|
|
829
|
+
});
|
|
830
|
+
}
|
|
801
831
|
|
|
802
832
|
function ok(value, message) {
|
|
803
833
|
if (!value) {
|
|
@@ -1037,13 +1067,360 @@ function basex(alphabet) {
|
|
|
1037
1067
|
}
|
|
1038
1068
|
}
|
|
1039
1069
|
|
|
1040
|
-
const base62 = basex(
|
|
1041
|
-
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
|
|
1042
|
-
);
|
|
1070
|
+
const base62 = basex(
|
|
1071
|
+
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
|
|
1072
|
+
);
|
|
1073
|
+
|
|
1074
|
+
function capitalize(str) {
|
|
1075
|
+
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
const CASE_SPLIT_PATTERN = /\p{Lu}?\p{Ll}+|[0-9]+|\p{Lu}+(?!\p{Ll})|\p{Emoji_Presentation}|\p{Extended_Pictographic}|\p{L}+/gu;
|
|
1079
|
+
function getWords(str) {
|
|
1080
|
+
if (!isString(str)) return [];
|
|
1081
|
+
return Array.from(str.match(CASE_SPLIT_PATTERN) ?? []);
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
function camelCase(str) {
|
|
1085
|
+
const words = getWords(str);
|
|
1086
|
+
if (words.length === 0) {
|
|
1087
|
+
return "";
|
|
1088
|
+
}
|
|
1089
|
+
const [first, ...rest] = words;
|
|
1090
|
+
return `${first.toLowerCase()}${rest.map((word) => capitalize(word)).join("")}`;
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
function convertToUnit(str, unit = "px") {
|
|
1094
|
+
if (str == null || str === "") {
|
|
1095
|
+
return void 0;
|
|
1096
|
+
} else if (isNaN(+str)) {
|
|
1097
|
+
return String(str);
|
|
1098
|
+
} else {
|
|
1099
|
+
return `${Number(str)}${unit}`;
|
|
1100
|
+
}
|
|
1101
|
+
}
|
|
1102
|
+
|
|
1103
|
+
const htmlEscapes = Object.freeze({
|
|
1104
|
+
38: "&",
|
|
1105
|
+
// &
|
|
1106
|
+
60: "<",
|
|
1107
|
+
// <
|
|
1108
|
+
62: ">",
|
|
1109
|
+
// >
|
|
1110
|
+
34: """,
|
|
1111
|
+
// "
|
|
1112
|
+
39: "'"
|
|
1113
|
+
// '
|
|
1114
|
+
});
|
|
1115
|
+
function escapeHtml(unsafe) {
|
|
1116
|
+
if (typeof unsafe !== "string") {
|
|
1117
|
+
return "";
|
|
1118
|
+
}
|
|
1119
|
+
let result = "";
|
|
1120
|
+
let strLen = unsafe.length;
|
|
1121
|
+
let char;
|
|
1122
|
+
for (let idx = 0; idx < strLen; idx++) {
|
|
1123
|
+
char = unsafe.charCodeAt(idx);
|
|
1124
|
+
result += htmlEscapes[char] || String.fromCharCode(char);
|
|
1125
|
+
}
|
|
1126
|
+
return result;
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
function escapeNumeric(str) {
|
|
1130
|
+
const result = String(str).replace(/\D/g, "");
|
|
1131
|
+
if (!result.length) {
|
|
1132
|
+
return void 0;
|
|
1133
|
+
}
|
|
1134
|
+
return result;
|
|
1135
|
+
}
|
|
1136
|
+
|
|
1137
|
+
function escapeRegExp(str) {
|
|
1138
|
+
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
const vs16RegExp = /\uFE0F/g;
|
|
1142
|
+
const zeroWidthJoiner = String.fromCharCode(8205);
|
|
1143
|
+
function removeVS16s(rawEmoji) {
|
|
1144
|
+
return rawEmoji.indexOf(zeroWidthJoiner) < 0 ? rawEmoji.replace(vs16RegExp, "") : rawEmoji;
|
|
1145
|
+
}
|
|
1146
|
+
const TWEMOJI_REGEX = /(?:\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83e\udef1\ud83c\udffb\u200d\ud83e\udef2\ud83c[\udffc-\udfff]|\ud83e\udef1\ud83c\udffc\u200d\ud83e\udef2\ud83c[\udffb\udffd-\udfff]|\ud83e\udef1\ud83c\udffd\u200d\ud83e\udef2\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\udef1\ud83c\udffe\u200d\ud83e\udef2\ud83c[\udffb-\udffd\udfff]|\ud83e\udef1\ud83c\udfff\u200d\ud83e\udef2\ud83c[\udffb-\udffe]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d\udc8f\ud83c[\udffb-\udfff]|\ud83d\udc91\ud83c[\udffb-\udfff]|\ud83e\udd1d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d\udc8f\udc91]|\ud83e\udd1d)|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83d\ude36\u200d\ud83c\udf2b\ufe0f|\u2764\ufe0f\u200d\ud83d\udd25|\u2764\ufe0f\u200d\ud83e\ude79|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc3b\u200d\u2744\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83d\ude2e\u200d\ud83d\udca8|\ud83d\ude35\u200d\ud83d\udcab|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83d\udc08\u200d\u2b1b)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd\udec3-\udec5\udef0-\udef6]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udedd-\udedf\udeeb\udeec\udef4-\udefc\udfe0-\udfeb\udff0]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78-\uddb4\uddb7\uddba\uddbc-\uddcc\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7c\ude80-\ude86\ude90-\udeac\udeb0-\udeba\udec0-\udec2\uded0-\uded9\udee0-\udee7]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g;
|
|
1147
|
+
|
|
1148
|
+
function isOneEmoji(text) {
|
|
1149
|
+
return !!(typeof text === "string" && text && (text.match(TWEMOJI_REGEX) || [])[0]?.length === text.length);
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
const IGNORED_TITLES = Object.freeze(
|
|
1153
|
+
/* @__PURE__ */ new Set([
|
|
1154
|
+
"dr.",
|
|
1155
|
+
"mr.",
|
|
1156
|
+
"mrs.",
|
|
1157
|
+
"miss",
|
|
1158
|
+
"ms.",
|
|
1159
|
+
"prof.",
|
|
1160
|
+
"sir",
|
|
1161
|
+
"rev.",
|
|
1162
|
+
"hon."
|
|
1163
|
+
])
|
|
1164
|
+
);
|
|
1165
|
+
function getInitials(fullName) {
|
|
1166
|
+
if (!isString(fullName)) return "";
|
|
1167
|
+
let [first, ...rest] = fullName.replace(/\s{2,}/g, " ").replace(/[,+/#!$@%^&*;:{}=\-_`~()]/g, "").trim().split(" ").filter((word) => !IGNORED_TITLES.has(word.toLowerCase())).map((v) => v.replaceAll(".", "").trim()).filter(Boolean);
|
|
1168
|
+
let last = rest[rest.length - 1];
|
|
1169
|
+
if (rest.length > 1) {
|
|
1170
|
+
if (isOneEmoji(first)) {
|
|
1171
|
+
first = rest[0];
|
|
1172
|
+
} else if (isOneEmoji(last)) {
|
|
1173
|
+
last = rest[0];
|
|
1174
|
+
}
|
|
1175
|
+
}
|
|
1176
|
+
return [first, last].filter(Boolean).map((letter = "") => [...letter.toUpperCase()][0]).join("");
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
const DEF_PROTOCOLS = ["http://", "https://"];
|
|
1180
|
+
function hasProtocol(url, protocols = DEF_PROTOCOLS) {
|
|
1181
|
+
if (!isString(url)) return false;
|
|
1182
|
+
return protocols.some((v) => url.startsWith(v));
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1185
|
+
const byteToHex = [];
|
|
1186
|
+
for (let n = 0; n <= 255; ++n) {
|
|
1187
|
+
const hexOctet = n.toString(16).padStart(2, "0");
|
|
1188
|
+
byteToHex.push(hexOctet);
|
|
1189
|
+
}
|
|
1190
|
+
function hex(value) {
|
|
1191
|
+
const buff = Array.isArray(value) ? new Uint8Array(value) : value;
|
|
1192
|
+
const hexOctets = new Array(buff.length);
|
|
1193
|
+
for (let i = 0; i < buff.length; ++i) {
|
|
1194
|
+
hexOctets[i] = byteToHex[buff[i]];
|
|
1195
|
+
}
|
|
1196
|
+
return hexOctets.join("");
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1199
|
+
function isoToFlagEmoji(iso) {
|
|
1200
|
+
const code = iso.toUpperCase();
|
|
1201
|
+
if (!/^[A-Z]{2}$/.test(code)) return iso;
|
|
1202
|
+
const codePoints = [...code].map((c) => c.codePointAt(0) + 127397);
|
|
1203
|
+
return String.fromCodePoint(...codePoints);
|
|
1204
|
+
}
|
|
1205
|
+
|
|
1206
|
+
function kebabCase(str) {
|
|
1207
|
+
const words = getWords(str);
|
|
1208
|
+
return words.map((word) => word.toLowerCase()).join("-");
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
const lowerCase = (str) => {
|
|
1212
|
+
return getWords(str).map((word) => word.toLowerCase()).join(" ");
|
|
1213
|
+
};
|
|
1214
|
+
|
|
1215
|
+
function maskingWords(value, withChar = "*") {
|
|
1216
|
+
return getWords(value).map((word) => {
|
|
1217
|
+
const len = word.length;
|
|
1218
|
+
if (len < 2) {
|
|
1219
|
+
return "".padEnd(len, withChar);
|
|
1220
|
+
} else if (len < 3) {
|
|
1221
|
+
return word[0].padEnd(len, withChar);
|
|
1222
|
+
} else {
|
|
1223
|
+
return word[0].padEnd(len - 2, withChar) + word.at(-1);
|
|
1224
|
+
}
|
|
1225
|
+
}).join(" ");
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
function maskingEmail(value) {
|
|
1229
|
+
if (!isString(value)) return "";
|
|
1230
|
+
const [username, host] = value.split("@", 2);
|
|
1231
|
+
if (!username || !host) return "";
|
|
1232
|
+
return `${maskingWords(username)}@${host}`;
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1235
|
+
function maskingPhone(value, fromPosition = 2, toPosition = 4, withChar = "X") {
|
|
1236
|
+
if (!isString(value)) return "";
|
|
1237
|
+
const numbersAmount = value.replace(/\D/g, "").length;
|
|
1238
|
+
const fromIdx = fromPosition - 1;
|
|
1239
|
+
let toIdx = numbersAmount - toPosition;
|
|
1240
|
+
if (toIdx <= 0) {
|
|
1241
|
+
toIdx = numbersAmount;
|
|
1242
|
+
}
|
|
1243
|
+
let i = -1;
|
|
1244
|
+
return value.replace(/\d/g, (char) => {
|
|
1245
|
+
i++;
|
|
1246
|
+
return i > fromIdx && i < toIdx ? withChar : char;
|
|
1247
|
+
});
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
function timestamp(fromValue = Date.now()) {
|
|
1251
|
+
if (isDate(fromValue)) {
|
|
1252
|
+
fromValue = fromValue.getTime();
|
|
1253
|
+
}
|
|
1254
|
+
return Math.floor(fromValue / 1e3);
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
let index = Math.floor(Math.random() * 16777215);
|
|
1258
|
+
const buffer = new Uint8Array(12);
|
|
1259
|
+
function objectId(fromValue = Date.now()) {
|
|
1260
|
+
const value = timestamp(fromValue);
|
|
1261
|
+
const inc = getInc();
|
|
1262
|
+
buffer[0] = value >> 24;
|
|
1263
|
+
buffer[1] = value >> 16;
|
|
1264
|
+
buffer[2] = value >> 8;
|
|
1265
|
+
buffer[3] = value;
|
|
1266
|
+
buffer[4] = Math.floor(Math.random() * 256);
|
|
1267
|
+
buffer[5] = Math.floor(Math.random() * 256);
|
|
1268
|
+
buffer[6] = Math.floor(Math.random() * 256);
|
|
1269
|
+
buffer[7] = Math.floor(Math.random() * 256);
|
|
1270
|
+
buffer[8] = Math.floor(Math.random() * 256);
|
|
1271
|
+
buffer[11] = inc & 255;
|
|
1272
|
+
buffer[10] = inc >> 8 & 255;
|
|
1273
|
+
buffer[9] = inc >> 16 & 255;
|
|
1274
|
+
return hex(buffer);
|
|
1275
|
+
}
|
|
1276
|
+
function getInc() {
|
|
1277
|
+
return index = (index + 1) % 16777215;
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
const rndCharacters = "abcdefghijklmnopqrstuvwxyz0123456789";
|
|
1281
|
+
const charactersLength = rndCharacters.length;
|
|
1282
|
+
function randomString(length) {
|
|
1283
|
+
let str = "";
|
|
1284
|
+
let num = isNumber(length) ? Math.max(0, length) : 0;
|
|
1285
|
+
while (num--) {
|
|
1286
|
+
str += rndCharacters[charactersLength * Math.random() | 0];
|
|
1287
|
+
}
|
|
1288
|
+
return str;
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
const snakeCase = (str) => {
|
|
1292
|
+
return getWords(str).map((word) => word.toLowerCase()).join("_");
|
|
1293
|
+
};
|
|
1294
|
+
|
|
1295
|
+
function sprintf(line, args, unusedArgs = []) {
|
|
1296
|
+
let result = "";
|
|
1297
|
+
const argsLen = args.length;
|
|
1298
|
+
const lineLen = line.length;
|
|
1299
|
+
let opened = false;
|
|
1300
|
+
let currentChar = -1;
|
|
1301
|
+
let lastPos = 0;
|
|
1302
|
+
let argsIndex = 0;
|
|
1303
|
+
for (let idx = 0; idx < lineLen; idx++) {
|
|
1304
|
+
currentChar = line.charCodeAt(idx);
|
|
1305
|
+
if (currentChar === 37) {
|
|
1306
|
+
opened = true;
|
|
1307
|
+
continue;
|
|
1308
|
+
}
|
|
1309
|
+
if (!opened) continue;
|
|
1310
|
+
opened = false;
|
|
1311
|
+
switch (currentChar) {
|
|
1312
|
+
// 'd'
|
|
1313
|
+
case 100:
|
|
1314
|
+
// 'f'
|
|
1315
|
+
case 102: {
|
|
1316
|
+
result += line.slice(lastPos, idx - 1);
|
|
1317
|
+
result += Number(args[argsIndex]);
|
|
1318
|
+
lastPos = idx + 1;
|
|
1319
|
+
argsIndex++;
|
|
1320
|
+
break;
|
|
1321
|
+
}
|
|
1322
|
+
// 'i'
|
|
1323
|
+
case 105: {
|
|
1324
|
+
result += line.slice(lastPos, idx - 1);
|
|
1325
|
+
result += Math.floor(Number(args[argsIndex]));
|
|
1326
|
+
lastPos = idx + 1;
|
|
1327
|
+
argsIndex++;
|
|
1328
|
+
break;
|
|
1329
|
+
}
|
|
1330
|
+
// 'O'
|
|
1331
|
+
case 79:
|
|
1332
|
+
// 'o'
|
|
1333
|
+
case 111:
|
|
1334
|
+
// 'j'
|
|
1335
|
+
case 106: {
|
|
1336
|
+
result += line.slice(lastPos, idx - 1);
|
|
1337
|
+
result += tryStringify(args[argsIndex]);
|
|
1338
|
+
lastPos = idx + 1;
|
|
1339
|
+
argsIndex++;
|
|
1340
|
+
break;
|
|
1341
|
+
}
|
|
1342
|
+
// 's'
|
|
1343
|
+
case 115: {
|
|
1344
|
+
result += line.slice(lastPos, idx - 1);
|
|
1345
|
+
result += String(args[argsIndex]);
|
|
1346
|
+
lastPos = idx + 1;
|
|
1347
|
+
argsIndex++;
|
|
1348
|
+
break;
|
|
1349
|
+
}
|
|
1350
|
+
}
|
|
1351
|
+
if (argsIndex >= argsLen) break;
|
|
1352
|
+
}
|
|
1353
|
+
if (lastPos < lineLen) {
|
|
1354
|
+
result += line.slice(lastPos, lineLen);
|
|
1355
|
+
}
|
|
1356
|
+
if (argsIndex < argsLen) {
|
|
1357
|
+
unusedArgs.push(...args.slice(argsIndex, argsLen));
|
|
1358
|
+
}
|
|
1359
|
+
return result;
|
|
1360
|
+
}
|
|
1361
|
+
function tryStringify(o) {
|
|
1362
|
+
switch (typeof o) {
|
|
1363
|
+
case "function": {
|
|
1364
|
+
return o.name || "<anonymous>";
|
|
1365
|
+
}
|
|
1366
|
+
case "string": {
|
|
1367
|
+
return "'" + o + "'";
|
|
1368
|
+
}
|
|
1369
|
+
default: {
|
|
1370
|
+
try {
|
|
1371
|
+
return JSON.stringify(o);
|
|
1372
|
+
} catch (e) {
|
|
1373
|
+
return '"[Circular]"';
|
|
1374
|
+
}
|
|
1375
|
+
}
|
|
1376
|
+
}
|
|
1377
|
+
}
|
|
1378
|
+
|
|
1379
|
+
const startCase = (value) => {
|
|
1380
|
+
return getWords(value).map(capitalize).join(" ");
|
|
1381
|
+
};
|
|
1382
|
+
|
|
1383
|
+
const DEF_STR_ASSIGN_REGEXP = /\{{([A-z-_. ]*)\}}/g;
|
|
1384
|
+
const DEF_STR_ASSIGN_METHOD = (obj, key) => obj[key];
|
|
1385
|
+
function strAssign(str, obj, method = DEF_STR_ASSIGN_METHOD) {
|
|
1386
|
+
return str.replace(DEF_STR_ASSIGN_REGEXP, (match, p1) => {
|
|
1387
|
+
const key = p1.trim();
|
|
1388
|
+
const value = method(obj, key);
|
|
1389
|
+
if (value === void 0 || value === null) {
|
|
1390
|
+
return match;
|
|
1391
|
+
}
|
|
1392
|
+
return value;
|
|
1393
|
+
});
|
|
1394
|
+
}
|
|
1395
|
+
|
|
1396
|
+
var textEncoder = new TextEncoder();
|
|
1397
|
+
var textDecoder = new TextDecoder();
|
|
1398
|
+
|
|
1399
|
+
function truncate(value, maxLength = 120, insignificantThreshold = 0.05) {
|
|
1400
|
+
if (!shouldTruncate(value, maxLength, insignificantThreshold)) {
|
|
1401
|
+
return value;
|
|
1402
|
+
}
|
|
1403
|
+
let truncated = value.slice(0, maxLength).trim();
|
|
1404
|
+
const lastSpace = truncated.lastIndexOf(" ");
|
|
1405
|
+
if (lastSpace > 0) {
|
|
1406
|
+
truncated = truncated.slice(0, lastSpace);
|
|
1407
|
+
}
|
|
1408
|
+
return `${truncated}...`;
|
|
1409
|
+
}
|
|
1410
|
+
function shouldTruncate(text, maxLength, insignificantThreshold) {
|
|
1411
|
+
return text.length - maxLength > maxLength * insignificantThreshold;
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1414
|
+
function wrapText(value, maxLength = 30) {
|
|
1415
|
+
if (value.length > maxLength) {
|
|
1416
|
+
return value.slice(0, maxLength) + "...";
|
|
1417
|
+
}
|
|
1418
|
+
return value;
|
|
1419
|
+
}
|
|
1043
1420
|
|
|
1044
1421
|
var ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
|
1045
1422
|
var ENCODE_TABLE = new TextEncoder().encode(ALPHABET);
|
|
1046
|
-
var DECODE_TABLE = new Uint8Array(
|
|
1423
|
+
var DECODE_TABLE = new Uint8Array(128);
|
|
1047
1424
|
for (let i = 0; i < ENCODE_TABLE.length; ++i) {
|
|
1048
1425
|
DECODE_TABLE[ENCODE_TABLE[i]] = i;
|
|
1049
1426
|
}
|
|
@@ -1052,49 +1429,52 @@ LOG2_TABLE[0] = 1;
|
|
|
1052
1429
|
for (let i = 1; i < 62; ++i) {
|
|
1053
1430
|
LOG2_TABLE[i] = Math.ceil(Math.log2(i + 1));
|
|
1054
1431
|
}
|
|
1055
|
-
|
|
1432
|
+
var allocEncode = createAllocator();
|
|
1056
1433
|
const base62Fast = {
|
|
1057
1434
|
alphabet: ALPHABET,
|
|
1058
1435
|
padding: "",
|
|
1059
1436
|
/**
|
|
1060
1437
|
* Encodes a Uint8Array into a Base62 string using a custom 5/6-bit variable length scheme.
|
|
1061
|
-
* Processes bits from
|
|
1438
|
+
* Processes bits from left to right maintaining correct order.
|
|
1062
1439
|
* @param input The Uint8Array to encode.
|
|
1063
1440
|
* @returns The encoded Base62 string.
|
|
1064
1441
|
*/
|
|
1065
1442
|
encode(input) {
|
|
1066
|
-
var
|
|
1067
|
-
var output = allocEncode((
|
|
1443
|
+
var totalBits = input.length * 8;
|
|
1444
|
+
var output = allocEncode((totalBits / 5 | 0) + 1);
|
|
1068
1445
|
var outputIndex = 0;
|
|
1446
|
+
var bitPosition = 0;
|
|
1447
|
+
var buffer = 0;
|
|
1448
|
+
var inputIndex = 0;
|
|
1069
1449
|
var chunkSize;
|
|
1070
|
-
var remainderBits;
|
|
1071
|
-
var byteIndex;
|
|
1072
|
-
var extractedBits;
|
|
1073
1450
|
var value;
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
extractedBits |= input[byteIndex - 1] << remainderBits;
|
|
1451
|
+
if (input.length > 0) {
|
|
1452
|
+
buffer = input[0];
|
|
1453
|
+
inputIndex = 1;
|
|
1454
|
+
bitPosition = 8;
|
|
1455
|
+
}
|
|
1456
|
+
while (bitPosition > 0 || inputIndex < input.length) {
|
|
1457
|
+
while (bitPosition < 6 && inputIndex < input.length) {
|
|
1458
|
+
buffer |= input[inputIndex] << bitPosition;
|
|
1459
|
+
inputIndex++;
|
|
1460
|
+
bitPosition += 8;
|
|
1085
1461
|
}
|
|
1086
|
-
|
|
1462
|
+
if (bitPosition === 0) break;
|
|
1463
|
+
value = buffer & 63;
|
|
1464
|
+
chunkSize = 6;
|
|
1087
1465
|
if ((value & 30) === 30) {
|
|
1088
|
-
|
|
1466
|
+
var remainingBits = bitPosition + (input.length - inputIndex) * 8;
|
|
1467
|
+
if (remainingBits > 6 || value > 31) {
|
|
1089
1468
|
chunkSize = 5;
|
|
1090
1469
|
value &= 31;
|
|
1091
1470
|
}
|
|
1092
1471
|
}
|
|
1093
|
-
output[outputIndex] = ENCODE_TABLE[
|
|
1472
|
+
output[outputIndex] = ENCODE_TABLE[value];
|
|
1094
1473
|
outputIndex++;
|
|
1095
|
-
|
|
1474
|
+
buffer >>= chunkSize;
|
|
1475
|
+
bitPosition -= chunkSize;
|
|
1096
1476
|
}
|
|
1097
|
-
return
|
|
1477
|
+
return textDecoder.decode(output.subarray(0, outputIndex));
|
|
1098
1478
|
},
|
|
1099
1479
|
/**
|
|
1100
1480
|
* Decodes a Base62 string generated by the custom encoder back into a Uint8Array.
|
|
@@ -1104,49 +1484,52 @@ const base62Fast = {
|
|
|
1104
1484
|
decode(input) {
|
|
1105
1485
|
var inputLength = input.length;
|
|
1106
1486
|
var maxOutputLength = inputLength * 6 / 8 | 0;
|
|
1107
|
-
var output = new Uint8Array(maxOutputLength);
|
|
1108
|
-
var writeIndex =
|
|
1487
|
+
var output = new Uint8Array(maxOutputLength + 1);
|
|
1488
|
+
var writeIndex = 0;
|
|
1109
1489
|
var bitPosition = 0;
|
|
1110
1490
|
var buffer = 0;
|
|
1111
1491
|
var charCode = 0;
|
|
1112
1492
|
var value = 0;
|
|
1493
|
+
var bitsToAdd = 0;
|
|
1113
1494
|
for (var readIndex = 0; readIndex < inputLength; readIndex++) {
|
|
1114
1495
|
charCode = input.charCodeAt(readIndex);
|
|
1115
1496
|
value = DECODE_TABLE[charCode];
|
|
1116
|
-
value = DECODE_TABLE[ENCODE_TABLE[additiveCipherReverse(value, readIndex % 63)]];
|
|
1117
1497
|
if (isNaN(charCode) || value === void 0) {
|
|
1118
1498
|
throw new Error(
|
|
1119
1499
|
"Invalid Base62 input: contains non-alphabet characters. Index: " + readIndex
|
|
1120
1500
|
);
|
|
1121
1501
|
}
|
|
1122
|
-
buffer |= value << bitPosition;
|
|
1123
1502
|
if (readIndex === inputLength - 1) {
|
|
1124
1503
|
if (LOG2_TABLE[value] === void 0) {
|
|
1125
1504
|
throw new Error(
|
|
1126
1505
|
"Invalid Base62 input: unexpected value for last character."
|
|
1127
1506
|
);
|
|
1128
1507
|
}
|
|
1129
|
-
|
|
1508
|
+
bitsToAdd = LOG2_TABLE[value];
|
|
1130
1509
|
} else if ((value & 30) === 30) {
|
|
1131
|
-
|
|
1510
|
+
bitsToAdd = 5;
|
|
1132
1511
|
} else {
|
|
1133
|
-
|
|
1512
|
+
bitsToAdd = 6;
|
|
1134
1513
|
}
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1514
|
+
buffer |= value << bitPosition;
|
|
1515
|
+
bitPosition += bitsToAdd;
|
|
1516
|
+
while (bitPosition >= 8) {
|
|
1517
|
+
output[writeIndex] = buffer & 255;
|
|
1518
|
+
writeIndex++;
|
|
1138
1519
|
buffer >>= 8;
|
|
1520
|
+
bitPosition -= 8;
|
|
1139
1521
|
}
|
|
1140
1522
|
}
|
|
1141
1523
|
if (bitPosition > 0) {
|
|
1142
|
-
output[
|
|
1524
|
+
output[writeIndex] = buffer & 255;
|
|
1525
|
+
writeIndex++;
|
|
1143
1526
|
}
|
|
1144
|
-
return output.subarray(writeIndex);
|
|
1527
|
+
return output.subarray(0, writeIndex);
|
|
1145
1528
|
}
|
|
1146
1529
|
};
|
|
1147
1530
|
function createAllocator() {
|
|
1148
|
-
var currentBuffer = new Uint8Array(
|
|
1149
|
-
var currentSize =
|
|
1531
|
+
var currentBuffer = new Uint8Array(256);
|
|
1532
|
+
var currentSize = 256;
|
|
1150
1533
|
return (size) => {
|
|
1151
1534
|
if (currentSize < size) {
|
|
1152
1535
|
currentBuffer = new Uint8Array(size);
|
|
@@ -1155,12 +1538,6 @@ function createAllocator() {
|
|
|
1155
1538
|
return currentBuffer;
|
|
1156
1539
|
};
|
|
1157
1540
|
}
|
|
1158
|
-
function additiveCipher(value, shift) {
|
|
1159
|
-
return (value + shift) % 62;
|
|
1160
|
-
}
|
|
1161
|
-
function additiveCipherReverse(obscured, shift) {
|
|
1162
|
-
return (obscured - shift + 62) % 62;
|
|
1163
|
-
}
|
|
1164
1541
|
|
|
1165
1542
|
class Base64Encoding {
|
|
1166
1543
|
alphabet;
|
|
@@ -1383,17 +1760,6 @@ function uint8ToUint32(value) {
|
|
|
1383
1760
|
return uint32Array;
|
|
1384
1761
|
}
|
|
1385
1762
|
|
|
1386
|
-
const rndCharacters = "abcdefghijklmnopqrstuvwxyz0123456789";
|
|
1387
|
-
const charactersLength = rndCharacters.length;
|
|
1388
|
-
function randomString(length) {
|
|
1389
|
-
let str = "";
|
|
1390
|
-
let num = isNumber(length) ? Math.max(0, length) : 0;
|
|
1391
|
-
while (num--) {
|
|
1392
|
-
str += rndCharacters[charactersLength * Math.random() | 0];
|
|
1393
|
-
}
|
|
1394
|
-
return str;
|
|
1395
|
-
}
|
|
1396
|
-
|
|
1397
1763
|
const objectKeys = /* @__PURE__ */ new WeakMap();
|
|
1398
1764
|
const BSON_TYPES = Object.freeze(/* @__PURE__ */ new Set(["ObjectID", "ObjectId"]));
|
|
1399
1765
|
const SYM_WITH_CACHE = Symbol();
|
|
@@ -2792,7 +3158,6 @@ const ColorParser = {
|
|
|
2792
3158
|
HEX: parseHEX
|
|
2793
3159
|
};
|
|
2794
3160
|
|
|
2795
|
-
var encoder = new TextEncoder();
|
|
2796
3161
|
var TABLE = new Int32Array([
|
|
2797
3162
|
0,
|
|
2798
3163
|
1996959894,
|
|
@@ -3051,13 +3416,21 @@ var TABLE = new Int32Array([
|
|
|
3051
3416
|
1510334235,
|
|
3052
3417
|
755167117
|
|
3053
3418
|
]);
|
|
3054
|
-
function crc32(
|
|
3055
|
-
if (isString(
|
|
3056
|
-
return crc32(
|
|
3419
|
+
function crc32(value, seed) {
|
|
3420
|
+
if (isString(value)) {
|
|
3421
|
+
return crc32(textEncoder.encode(value), seed);
|
|
3057
3422
|
}
|
|
3058
3423
|
var crc = seed === 0 ? 0 : ~~seed ^ -1;
|
|
3059
|
-
|
|
3060
|
-
|
|
3424
|
+
if (value instanceof Uint8Array) {
|
|
3425
|
+
for (var index = 0; index < value.length; index++) {
|
|
3426
|
+
crc = TABLE[(crc ^ value[index]) & 255] ^ crc >>> 8;
|
|
3427
|
+
}
|
|
3428
|
+
} else {
|
|
3429
|
+
for (var current of value) {
|
|
3430
|
+
for (var index = 0; index < current.length; index++) {
|
|
3431
|
+
crc = TABLE[(crc ^ current[index]) & 255] ^ crc >>> 8;
|
|
3432
|
+
}
|
|
3433
|
+
}
|
|
3061
3434
|
}
|
|
3062
3435
|
return crc ^ -1;
|
|
3063
3436
|
}
|
|
@@ -3326,13 +3699,6 @@ function timeFromMinutes(value, returnsNullWhenInvalid = false) {
|
|
|
3326
3699
|
return { h, m };
|
|
3327
3700
|
}
|
|
3328
3701
|
|
|
3329
|
-
function timestamp(fromValue = Date.now()) {
|
|
3330
|
-
if (isDate(fromValue)) {
|
|
3331
|
-
fromValue = fromValue.getTime();
|
|
3332
|
-
}
|
|
3333
|
-
return Math.floor(fromValue / 1e3);
|
|
3334
|
-
}
|
|
3335
|
-
|
|
3336
3702
|
function timestampToDate(value) {
|
|
3337
3703
|
if (!isNumber(value)) return null;
|
|
3338
3704
|
return new Date(value * 1e3);
|
|
@@ -3609,11 +3975,14 @@ class EJSONStream extends TransformStream {
|
|
|
3609
3975
|
constructor({ ejson, cl, op, sep, onFlush, onStart }) {
|
|
3610
3976
|
let firstChunk = true;
|
|
3611
3977
|
super({
|
|
3612
|
-
|
|
3613
|
-
|
|
3614
|
-
|
|
3615
|
-
|
|
3616
|
-
|
|
3978
|
+
start(controller) {
|
|
3979
|
+
return Promise.resolve().then(() => {
|
|
3980
|
+
if (onStart) {
|
|
3981
|
+
return onStart(controller);
|
|
3982
|
+
}
|
|
3983
|
+
}).then(() => {
|
|
3984
|
+
controller.enqueue(op);
|
|
3985
|
+
});
|
|
3617
3986
|
},
|
|
3618
3987
|
transform(chunk, controller) {
|
|
3619
3988
|
const jsonString = ejson.stringify(chunk);
|
|
@@ -3665,47 +4034,49 @@ function createEJSONStreamPayload(options) {
|
|
|
3665
4034
|
cl,
|
|
3666
4035
|
op,
|
|
3667
4036
|
sep,
|
|
3668
|
-
|
|
4037
|
+
onStart(controller) {
|
|
3669
4038
|
if (!prepend) {
|
|
3670
4039
|
controller.enqueue(`{"${resultKey}":`);
|
|
3671
|
-
return;
|
|
3672
|
-
}
|
|
3673
|
-
const data = await prepend();
|
|
3674
|
-
if (data === null || data === void 0) {
|
|
3675
|
-
controller.enqueue(`{"${resultKey}":`);
|
|
3676
|
-
return;
|
|
3677
|
-
}
|
|
3678
|
-
ok(
|
|
3679
|
-
isPlainObject(data),
|
|
3680
|
-
"prepend result expected to be plain object"
|
|
3681
|
-
);
|
|
3682
|
-
const dataPart = instance.stringify(data).slice(0, -1);
|
|
3683
|
-
if (dataPart === "{") {
|
|
3684
|
-
controller.enqueue(`{"${resultKey}":`);
|
|
3685
|
-
return;
|
|
4040
|
+
return Promise.resolve();
|
|
3686
4041
|
}
|
|
3687
|
-
|
|
4042
|
+
return Promise.resolve().then(() => prepend()).then((data) => {
|
|
4043
|
+
if (data === null || data === void 0) {
|
|
4044
|
+
controller.enqueue(`{"${resultKey}":`);
|
|
4045
|
+
return;
|
|
4046
|
+
}
|
|
4047
|
+
ok(
|
|
4048
|
+
isPlainObject(data),
|
|
4049
|
+
"prepend result expected to be plain object"
|
|
4050
|
+
);
|
|
4051
|
+
const dataPart = instance.stringify(data).slice(0, -1);
|
|
4052
|
+
if (dataPart === "{") {
|
|
4053
|
+
controller.enqueue(`{"${resultKey}":`);
|
|
4054
|
+
return;
|
|
4055
|
+
}
|
|
4056
|
+
controller.enqueue(`${dataPart}${sep}"${resultKey}":`);
|
|
4057
|
+
});
|
|
3688
4058
|
},
|
|
3689
|
-
|
|
4059
|
+
onFlush(controller) {
|
|
3690
4060
|
if (!append) {
|
|
3691
4061
|
controller.enqueue("}");
|
|
3692
|
-
return;
|
|
3693
|
-
}
|
|
3694
|
-
const data = await append();
|
|
3695
|
-
if (data === null || data === void 0) {
|
|
3696
|
-
controller.enqueue("}");
|
|
3697
|
-
return;
|
|
3698
|
-
}
|
|
3699
|
-
ok(
|
|
3700
|
-
isPlainObject(data),
|
|
3701
|
-
"prepend result expected to be plain object"
|
|
3702
|
-
);
|
|
3703
|
-
const dataPart = instance.stringify(data).slice(1);
|
|
3704
|
-
if (dataPart === "}") {
|
|
3705
|
-
controller.enqueue(`}`);
|
|
3706
|
-
return;
|
|
4062
|
+
return Promise.resolve();
|
|
3707
4063
|
}
|
|
3708
|
-
|
|
4064
|
+
return Promise.resolve().then(() => append()).then((data) => {
|
|
4065
|
+
if (data === null || data === void 0) {
|
|
4066
|
+
controller.enqueue("}");
|
|
4067
|
+
return;
|
|
4068
|
+
}
|
|
4069
|
+
ok(
|
|
4070
|
+
isPlainObject(data),
|
|
4071
|
+
"prepend result expected to be plain object"
|
|
4072
|
+
);
|
|
4073
|
+
const dataPart = instance.stringify(data).slice(1);
|
|
4074
|
+
if (dataPart === "}") {
|
|
4075
|
+
controller.enqueue(`}`);
|
|
4076
|
+
return;
|
|
4077
|
+
}
|
|
4078
|
+
controller.enqueue(`${sep}${dataPart}`);
|
|
4079
|
+
});
|
|
3709
4080
|
}
|
|
3710
4081
|
});
|
|
3711
4082
|
return stream;
|
|
@@ -3901,42 +4272,6 @@ class AppError extends Error {
|
|
|
3901
4272
|
}
|
|
3902
4273
|
}
|
|
3903
4274
|
|
|
3904
|
-
class BrowserAssertionError extends Error {
|
|
3905
|
-
/**
|
|
3906
|
-
* Set to the `actual` argument for methods such as {@link assert.strictEqual()}.
|
|
3907
|
-
*/
|
|
3908
|
-
actual;
|
|
3909
|
-
/**
|
|
3910
|
-
* Set to the `expected` argument for methods such as {@link assert.strictEqual()}.
|
|
3911
|
-
*/
|
|
3912
|
-
expected;
|
|
3913
|
-
/**
|
|
3914
|
-
* Set to the passed in operator value.
|
|
3915
|
-
*/
|
|
3916
|
-
operator;
|
|
3917
|
-
/**
|
|
3918
|
-
* Indicates if the message was auto-generated (`true`) or not.
|
|
3919
|
-
*/
|
|
3920
|
-
generatedMessage;
|
|
3921
|
-
/**
|
|
3922
|
-
* Value is always `ERR_ASSERTION` to show that the error is an assertion error.
|
|
3923
|
-
*/
|
|
3924
|
-
code;
|
|
3925
|
-
constructor(options) {
|
|
3926
|
-
super(options?.message);
|
|
3927
|
-
this.actual = options?.actual;
|
|
3928
|
-
this.expected = options?.expected;
|
|
3929
|
-
this.operator = options?.operator ?? "none";
|
|
3930
|
-
this.generatedMessage = false;
|
|
3931
|
-
this.code = "ERR_ASSERTION";
|
|
3932
|
-
}
|
|
3933
|
-
}
|
|
3934
|
-
|
|
3935
|
-
const BrowserAssertionError$1 = {
|
|
3936
|
-
__proto__: null,
|
|
3937
|
-
BrowserAssertionError: BrowserAssertionError
|
|
3938
|
-
};
|
|
3939
|
-
|
|
3940
4275
|
function getFileExtension(name, withDot = true) {
|
|
3941
4276
|
if (!isString(name)) {
|
|
3942
4277
|
return null;
|
|
@@ -3945,12 +4280,6 @@ function getFileExtension(name, withDot = true) {
|
|
|
3945
4280
|
return ext ? withDot ? `.${ext}` : ext : null;
|
|
3946
4281
|
}
|
|
3947
4282
|
|
|
3948
|
-
const DEF_PROTOCOLS = ["http://", "https://"];
|
|
3949
|
-
function hasProtocol(url, protocols = DEF_PROTOCOLS) {
|
|
3950
|
-
if (!isString(url)) return false;
|
|
3951
|
-
return protocols.some((v) => url.startsWith(v));
|
|
3952
|
-
}
|
|
3953
|
-
|
|
3954
4283
|
function getFileName(value) {
|
|
3955
4284
|
if (hasProtocol(value)) {
|
|
3956
4285
|
return getFileName(decodeURI(value.split("/").at(-1)?.split("?")?.at(0)));
|
|
@@ -4325,48 +4654,40 @@ function delay(amount = "tick") {
|
|
|
4325
4654
|
return d.promise;
|
|
4326
4655
|
}
|
|
4327
4656
|
|
|
4328
|
-
|
|
4657
|
+
var NOOP_SHOULD_RETRY_BASED_ON_ERROR = () => true;
|
|
4329
4658
|
function retryOnError({
|
|
4330
|
-
beforeRetryCallback,
|
|
4331
|
-
shouldRetryBasedOnError =
|
|
4332
|
-
|
|
4659
|
+
beforeRetryCallback = noop,
|
|
4660
|
+
shouldRetryBasedOnError = NOOP_SHOULD_RETRY_BASED_ON_ERROR,
|
|
4661
|
+
maxAttempts,
|
|
4662
|
+
maxRetriesNumber = 1,
|
|
4333
4663
|
delayFactor = 0,
|
|
4334
4664
|
delayMaxMs = 1e3,
|
|
4335
4665
|
delayMinMs = 100
|
|
4336
4666
|
}, fn) {
|
|
4337
|
-
let retryCount = maxRetriesNumber;
|
|
4338
|
-
let delayMs = 0;
|
|
4339
4667
|
delayMinMs = Math.max(delayMinMs, 1);
|
|
4340
4668
|
delayMaxMs = Math.max(delayMaxMs, 1);
|
|
4341
|
-
|
|
4342
|
-
|
|
4343
|
-
|
|
4344
|
-
|
|
4345
|
-
|
|
4346
|
-
|
|
4347
|
-
|
|
4348
|
-
return
|
|
4349
|
-
|
|
4350
|
-
|
|
4351
|
-
retryCount--;
|
|
4352
|
-
delayMs = Math.floor(
|
|
4353
|
-
Math.min(Math.max(delayMs, delayMinMs) * delayFactor, delayMaxMs)
|
|
4354
|
-
);
|
|
4355
|
-
if (beforeRetryCallback) {
|
|
4356
|
-
const newParams = await beforeRetryCallback(
|
|
4357
|
-
currentAttempt,
|
|
4358
|
-
retryCount === 0
|
|
4359
|
-
);
|
|
4360
|
-
if (newParams) {
|
|
4361
|
-
return run(newParams);
|
|
4362
|
-
}
|
|
4669
|
+
return function(...args) {
|
|
4670
|
+
var delayMs = 0;
|
|
4671
|
+
var currentAttempt = 0;
|
|
4672
|
+
var leftAttempts = isNumber(maxAttempts) ? maxAttempts : maxRetriesNumber + 1;
|
|
4673
|
+
var run = () => {
|
|
4674
|
+
currentAttempt++;
|
|
4675
|
+
leftAttempts--;
|
|
4676
|
+
return Promise.resolve().then(() => fn.apply(this, args)).catch((e) => {
|
|
4677
|
+
if (leftAttempts < 1 || !shouldRetryBasedOnError(e, currentAttempt)) {
|
|
4678
|
+
return Promise.reject(e);
|
|
4363
4679
|
}
|
|
4364
|
-
|
|
4365
|
-
|
|
4366
|
-
|
|
4367
|
-
|
|
4680
|
+
delayMs = clamp(delayMs * delayFactor, delayMinMs, delayMaxMs);
|
|
4681
|
+
return Promise.resolve().then(() => beforeRetryCallback(currentAttempt, leftAttempts <= 1)).then((newParams) => {
|
|
4682
|
+
if (Array.isArray(newParams)) {
|
|
4683
|
+
args = newParams;
|
|
4684
|
+
}
|
|
4685
|
+
return delay(delayMs).then(() => run());
|
|
4686
|
+
});
|
|
4687
|
+
});
|
|
4688
|
+
};
|
|
4689
|
+
return run();
|
|
4368
4690
|
};
|
|
4369
|
-
return run;
|
|
4370
4691
|
}
|
|
4371
4692
|
|
|
4372
4693
|
function throttle(func, throttleMs, { signal, edges = ["leading", "trailing"] } = {}) {
|
|
@@ -4389,90 +4710,6 @@ function throttle(func, throttleMs, { signal, edges = ["leading", "trailing"] }
|
|
|
4389
4710
|
return throttled;
|
|
4390
4711
|
}
|
|
4391
4712
|
|
|
4392
|
-
function sprintf(line, args, unusedArgs = []) {
|
|
4393
|
-
let result = "";
|
|
4394
|
-
const argsLen = args.length;
|
|
4395
|
-
const lineLen = line.length;
|
|
4396
|
-
let opened = false;
|
|
4397
|
-
let currentChar = -1;
|
|
4398
|
-
let lastPos = 0;
|
|
4399
|
-
let argsIndex = 0;
|
|
4400
|
-
for (let idx = 0; idx < lineLen; idx++) {
|
|
4401
|
-
currentChar = line.charCodeAt(idx);
|
|
4402
|
-
if (currentChar === 37) {
|
|
4403
|
-
opened = true;
|
|
4404
|
-
continue;
|
|
4405
|
-
}
|
|
4406
|
-
if (!opened) continue;
|
|
4407
|
-
opened = false;
|
|
4408
|
-
switch (currentChar) {
|
|
4409
|
-
// 'd'
|
|
4410
|
-
case 100:
|
|
4411
|
-
// 'f'
|
|
4412
|
-
case 102: {
|
|
4413
|
-
result += line.slice(lastPos, idx - 1);
|
|
4414
|
-
result += Number(args[argsIndex]);
|
|
4415
|
-
lastPos = idx + 1;
|
|
4416
|
-
argsIndex++;
|
|
4417
|
-
break;
|
|
4418
|
-
}
|
|
4419
|
-
// 'i'
|
|
4420
|
-
case 105: {
|
|
4421
|
-
result += line.slice(lastPos, idx - 1);
|
|
4422
|
-
result += Math.floor(Number(args[argsIndex]));
|
|
4423
|
-
lastPos = idx + 1;
|
|
4424
|
-
argsIndex++;
|
|
4425
|
-
break;
|
|
4426
|
-
}
|
|
4427
|
-
// 'O'
|
|
4428
|
-
case 79:
|
|
4429
|
-
// 'o'
|
|
4430
|
-
case 111:
|
|
4431
|
-
// 'j'
|
|
4432
|
-
case 106: {
|
|
4433
|
-
result += line.slice(lastPos, idx - 1);
|
|
4434
|
-
result += tryStringify(args[argsIndex]);
|
|
4435
|
-
lastPos = idx + 1;
|
|
4436
|
-
argsIndex++;
|
|
4437
|
-
break;
|
|
4438
|
-
}
|
|
4439
|
-
// 's'
|
|
4440
|
-
case 115: {
|
|
4441
|
-
result += line.slice(lastPos, idx - 1);
|
|
4442
|
-
result += String(args[argsIndex]);
|
|
4443
|
-
lastPos = idx + 1;
|
|
4444
|
-
argsIndex++;
|
|
4445
|
-
break;
|
|
4446
|
-
}
|
|
4447
|
-
}
|
|
4448
|
-
if (argsIndex >= argsLen) break;
|
|
4449
|
-
}
|
|
4450
|
-
if (lastPos < lineLen) {
|
|
4451
|
-
result += line.slice(lastPos, lineLen);
|
|
4452
|
-
}
|
|
4453
|
-
if (argsIndex < argsLen) {
|
|
4454
|
-
unusedArgs.push(...args.slice(argsIndex, argsLen));
|
|
4455
|
-
}
|
|
4456
|
-
return result;
|
|
4457
|
-
}
|
|
4458
|
-
function tryStringify(o) {
|
|
4459
|
-
switch (typeof o) {
|
|
4460
|
-
case "function": {
|
|
4461
|
-
return o.name || "<anonymous>";
|
|
4462
|
-
}
|
|
4463
|
-
case "string": {
|
|
4464
|
-
return "'" + o + "'";
|
|
4465
|
-
}
|
|
4466
|
-
default: {
|
|
4467
|
-
try {
|
|
4468
|
-
return JSON.stringify(o);
|
|
4469
|
-
} catch (e) {
|
|
4470
|
-
return '"[Circular]"';
|
|
4471
|
-
}
|
|
4472
|
-
}
|
|
4473
|
-
}
|
|
4474
|
-
}
|
|
4475
|
-
|
|
4476
4713
|
const LEVEL_NUM = {
|
|
4477
4714
|
debug: 0,
|
|
4478
4715
|
log: 1,
|
|
@@ -4524,18 +4761,26 @@ const logger = (...baseArgs) => {
|
|
|
4524
4761
|
return instance;
|
|
4525
4762
|
};
|
|
4526
4763
|
|
|
4527
|
-
|
|
4528
|
-
|
|
4529
|
-
|
|
4530
|
-
|
|
4531
|
-
|
|
4532
|
-
|
|
4533
|
-
|
|
4534
|
-
|
|
4535
|
-
|
|
4536
|
-
|
|
4537
|
-
|
|
4538
|
-
|
|
4764
|
+
function asyncFilter(array, predicate) {
|
|
4765
|
+
var i = 0;
|
|
4766
|
+
var result = [];
|
|
4767
|
+
var cooldown = nextTickIteration(10);
|
|
4768
|
+
return new Promise((resolve, reject) => {
|
|
4769
|
+
var processNextBatch = () => {
|
|
4770
|
+
if (i < array.length) {
|
|
4771
|
+
cooldown().then(() => predicate(array[i], i, array)).then((valid) => {
|
|
4772
|
+
if (Boolean(valid)) {
|
|
4773
|
+
result.push(array[i]);
|
|
4774
|
+
}
|
|
4775
|
+
i++;
|
|
4776
|
+
setTimeout(processNextBatch, 0);
|
|
4777
|
+
}).catch(reject);
|
|
4778
|
+
} else {
|
|
4779
|
+
resolve(result);
|
|
4780
|
+
}
|
|
4781
|
+
};
|
|
4782
|
+
processNextBatch();
|
|
4783
|
+
});
|
|
4539
4784
|
}
|
|
4540
4785
|
|
|
4541
4786
|
function nextTickIteration(amount, delay = "tick") {
|
|
@@ -4557,33 +4802,60 @@ function nextTickIteration(amount, delay = "tick") {
|
|
|
4557
4802
|
};
|
|
4558
4803
|
}
|
|
4559
4804
|
|
|
4560
|
-
|
|
4561
|
-
|
|
4562
|
-
|
|
4563
|
-
|
|
4564
|
-
|
|
4565
|
-
|
|
4566
|
-
|
|
4567
|
-
|
|
4568
|
-
|
|
4569
|
-
|
|
4570
|
-
|
|
4571
|
-
|
|
4805
|
+
function asyncFind(array, callbackfn) {
|
|
4806
|
+
var i = 0;
|
|
4807
|
+
var cooldown = nextTickIteration(10);
|
|
4808
|
+
return new Promise((resolve, reject) => {
|
|
4809
|
+
var processNextBatch = () => {
|
|
4810
|
+
if (i < array.length) {
|
|
4811
|
+
cooldown().then(() => callbackfn(array[i], i, array)).then((result) => {
|
|
4812
|
+
if (Boolean(result)) {
|
|
4813
|
+
resolve(array[i]);
|
|
4814
|
+
} else {
|
|
4815
|
+
i++;
|
|
4816
|
+
setTimeout(processNextBatch, 0);
|
|
4817
|
+
}
|
|
4818
|
+
}).catch(reject);
|
|
4819
|
+
} else {
|
|
4820
|
+
resolve(void 0);
|
|
4821
|
+
}
|
|
4822
|
+
};
|
|
4823
|
+
processNextBatch();
|
|
4824
|
+
});
|
|
4572
4825
|
}
|
|
4573
4826
|
|
|
4574
|
-
|
|
4575
|
-
|
|
4576
|
-
|
|
4577
|
-
|
|
4578
|
-
|
|
4579
|
-
|
|
4580
|
-
|
|
4581
|
-
|
|
4582
|
-
|
|
4583
|
-
|
|
4584
|
-
|
|
4585
|
-
|
|
4586
|
-
|
|
4827
|
+
function asyncForEach(array, callbackfn, { concurrency = 1 } = {}) {
|
|
4828
|
+
concurrency = Math.max(concurrency, 1);
|
|
4829
|
+
var i = 0;
|
|
4830
|
+
var cooldown = nextTickIteration(10);
|
|
4831
|
+
var tasks = Array(concurrency);
|
|
4832
|
+
return new Promise((resolve, reject) => {
|
|
4833
|
+
var processNextBatch = () => {
|
|
4834
|
+
if (i >= array.length) {
|
|
4835
|
+
resolve();
|
|
4836
|
+
return;
|
|
4837
|
+
}
|
|
4838
|
+
cooldown().then(() => {
|
|
4839
|
+
for (var idx = 0; idx < concurrency; idx++) {
|
|
4840
|
+
tasks[idx] = Promise.resolve(i);
|
|
4841
|
+
if (i < array.length) {
|
|
4842
|
+
tasks[idx] = tasks[idx].then(
|
|
4843
|
+
(itemIndex) => callbackfn(array[itemIndex], itemIndex, array)
|
|
4844
|
+
);
|
|
4845
|
+
}
|
|
4846
|
+
i++;
|
|
4847
|
+
}
|
|
4848
|
+
return Promise.all(tasks);
|
|
4849
|
+
}).then(() => {
|
|
4850
|
+
if (i < array.length) {
|
|
4851
|
+
setTimeout(processNextBatch, 0);
|
|
4852
|
+
} else {
|
|
4853
|
+
resolve();
|
|
4854
|
+
}
|
|
4855
|
+
}).catch(reject);
|
|
4856
|
+
};
|
|
4857
|
+
processNextBatch();
|
|
4858
|
+
});
|
|
4587
4859
|
}
|
|
4588
4860
|
|
|
4589
4861
|
const onError = (error) => {
|
|
@@ -4659,20 +4931,27 @@ class Queue {
|
|
|
4659
4931
|
constructor(limit) {
|
|
4660
4932
|
this.#limit = limit;
|
|
4661
4933
|
}
|
|
4662
|
-
|
|
4934
|
+
get() {
|
|
4935
|
+
var getItem = () => {
|
|
4936
|
+
const item = this.items.shift();
|
|
4937
|
+
this.#events.emit("get");
|
|
4938
|
+
return Promise.resolve(item);
|
|
4939
|
+
};
|
|
4663
4940
|
if (this.items.length === 0) {
|
|
4664
|
-
|
|
4941
|
+
return SimpleEventEmitter.once(this.#events, "put").then(getItem);
|
|
4665
4942
|
}
|
|
4666
|
-
|
|
4667
|
-
this.#events.emit("get");
|
|
4668
|
-
return item;
|
|
4943
|
+
return getItem();
|
|
4669
4944
|
}
|
|
4670
|
-
|
|
4945
|
+
put(item) {
|
|
4946
|
+
var putItem = () => {
|
|
4947
|
+
this.items.push(item);
|
|
4948
|
+
this.#events.emit("put");
|
|
4949
|
+
return Promise.resolve();
|
|
4950
|
+
};
|
|
4671
4951
|
if (this.#limit && this.items.length >= this.#limit) {
|
|
4672
|
-
|
|
4952
|
+
return SimpleEventEmitter.once(this.#events, "get").then(putItem);
|
|
4673
4953
|
}
|
|
4674
|
-
|
|
4675
|
-
this.#events.emit("put");
|
|
4954
|
+
return putItem();
|
|
4676
4955
|
}
|
|
4677
4956
|
}
|
|
4678
4957
|
|
|
@@ -4699,37 +4978,56 @@ class AsyncIterableQueue {
|
|
|
4699
4978
|
}
|
|
4700
4979
|
[Symbol.asyncIterator]() {
|
|
4701
4980
|
return {
|
|
4702
|
-
next:
|
|
4981
|
+
next: () => {
|
|
4703
4982
|
if (this._closed && this._queue.items.length === 0) {
|
|
4704
|
-
return { value: void 0, done: true };
|
|
4705
|
-
}
|
|
4706
|
-
const item = await this._queue.get();
|
|
4707
|
-
if (item === AsyncIterableQueue.QUEUE_END_MARKER && this._closed) {
|
|
4708
|
-
return { value: void 0, done: true };
|
|
4983
|
+
return Promise.resolve({ value: void 0, done: true });
|
|
4709
4984
|
}
|
|
4710
|
-
return
|
|
4985
|
+
return this._queue.get().then((item) => {
|
|
4986
|
+
if (item === AsyncIterableQueue.QUEUE_END_MARKER && this._closed) {
|
|
4987
|
+
return { value: void 0, done: true };
|
|
4988
|
+
}
|
|
4989
|
+
return { value: item, done: false };
|
|
4990
|
+
});
|
|
4711
4991
|
}
|
|
4712
4992
|
};
|
|
4713
4993
|
}
|
|
4714
4994
|
}
|
|
4715
4995
|
|
|
4716
|
-
|
|
4717
|
-
let result = [];
|
|
4996
|
+
function asyncMap(array, callbackfn, { concurrency = 1 } = {}) {
|
|
4718
4997
|
concurrency = Math.max(concurrency, 1);
|
|
4719
|
-
|
|
4720
|
-
|
|
4721
|
-
|
|
4722
|
-
|
|
4723
|
-
|
|
4724
|
-
|
|
4725
|
-
|
|
4726
|
-
|
|
4727
|
-
|
|
4728
|
-
|
|
4729
|
-
|
|
4730
|
-
|
|
4731
|
-
|
|
4732
|
-
|
|
4998
|
+
var result = [];
|
|
4999
|
+
var i = 0;
|
|
5000
|
+
var cooldown = nextTickIteration(10);
|
|
5001
|
+
var tasks = Array(concurrency);
|
|
5002
|
+
return new Promise((resolve, reject) => {
|
|
5003
|
+
var processNextBatch = () => {
|
|
5004
|
+
if (i >= array.length) {
|
|
5005
|
+
resolve(result);
|
|
5006
|
+
} else {
|
|
5007
|
+
cooldown().then(() => {
|
|
5008
|
+
for (var idx = 0; idx < concurrency; idx++) {
|
|
5009
|
+
tasks[idx] = Promise.resolve(i);
|
|
5010
|
+
if (i < array.length) {
|
|
5011
|
+
tasks[idx] = tasks[idx].then(
|
|
5012
|
+
(itemIndex) => callbackfn(array[itemIndex], itemIndex, array)
|
|
5013
|
+
).then((transformed) => {
|
|
5014
|
+
result.push(transformed);
|
|
5015
|
+
});
|
|
5016
|
+
}
|
|
5017
|
+
i++;
|
|
5018
|
+
}
|
|
5019
|
+
return Promise.all(tasks);
|
|
5020
|
+
}).then(() => {
|
|
5021
|
+
if (i < array.length) {
|
|
5022
|
+
setTimeout(processNextBatch, 0);
|
|
5023
|
+
} else {
|
|
5024
|
+
resolve(result);
|
|
5025
|
+
}
|
|
5026
|
+
}).catch(reject);
|
|
5027
|
+
}
|
|
5028
|
+
};
|
|
5029
|
+
processNextBatch();
|
|
5030
|
+
});
|
|
4733
5031
|
}
|
|
4734
5032
|
|
|
4735
5033
|
class CancellablePromise {
|
|
@@ -4876,6 +5174,7 @@ class ResourcePool extends SimpleEventEmitter {
|
|
|
4876
5174
|
queueAcquire: [],
|
|
4877
5175
|
queueDrain: [],
|
|
4878
5176
|
queueDestroy: [],
|
|
5177
|
+
createPending: 0,
|
|
4879
5178
|
destroying: false
|
|
4880
5179
|
};
|
|
4881
5180
|
}
|
|
@@ -4920,23 +5219,24 @@ class ResourcePool extends SimpleEventEmitter {
|
|
|
4920
5219
|
* }
|
|
4921
5220
|
* ```
|
|
4922
5221
|
*/
|
|
4923
|
-
|
|
5222
|
+
acquire() {
|
|
4924
5223
|
if (this.state.destroying) {
|
|
4925
5224
|
return this.enqueueAcquireRequest();
|
|
4926
5225
|
}
|
|
4927
5226
|
let availableResource = this.tryGetAvailableResource();
|
|
4928
5227
|
if (availableResource !== null) {
|
|
4929
|
-
return availableResource;
|
|
4930
|
-
}
|
|
4931
|
-
const autoCreatedResource = await this.tryCreateAutoResource();
|
|
4932
|
-
if (autoCreatedResource !== null) {
|
|
4933
|
-
return autoCreatedResource;
|
|
4934
|
-
}
|
|
4935
|
-
availableResource = this.tryGetAvailableResource();
|
|
4936
|
-
if (availableResource !== null) {
|
|
4937
|
-
return availableResource;
|
|
5228
|
+
return Promise.resolve(availableResource);
|
|
4938
5229
|
}
|
|
4939
|
-
return this.
|
|
5230
|
+
return Promise.resolve().then(() => this.tryCreateAutoResource()).then((autoCreatedResource) => {
|
|
5231
|
+
if (autoCreatedResource !== null) {
|
|
5232
|
+
return autoCreatedResource;
|
|
5233
|
+
}
|
|
5234
|
+
availableResource = this.tryGetAvailableResource();
|
|
5235
|
+
if (availableResource !== null) {
|
|
5236
|
+
return availableResource;
|
|
5237
|
+
}
|
|
5238
|
+
return this.enqueueAcquireRequest();
|
|
5239
|
+
});
|
|
4940
5240
|
}
|
|
4941
5241
|
/**
|
|
4942
5242
|
* Returns a resource to the pool, making it available for reuse.
|
|
@@ -5010,9 +5310,9 @@ class ResourcePool extends SimpleEventEmitter {
|
|
|
5010
5310
|
* - Multiple drain calls can be made concurrently; they will all resolve together
|
|
5011
5311
|
* - Does not prevent new acquisitions; use destroy() to prevent new usage
|
|
5012
5312
|
*/
|
|
5013
|
-
|
|
5313
|
+
drain() {
|
|
5014
5314
|
if (this.isIdle) {
|
|
5015
|
-
return;
|
|
5315
|
+
return Promise.resolve();
|
|
5016
5316
|
}
|
|
5017
5317
|
const drainDefer = defer();
|
|
5018
5318
|
this.state.queueDrain.push(drainDefer);
|
|
@@ -5046,24 +5346,22 @@ class ResourcePool extends SimpleEventEmitter {
|
|
|
5046
5346
|
* - Resources currently in use will not be force-destroyed; drain() is called first
|
|
5047
5347
|
* - If destroyResource was not provided, resources are simply discarded
|
|
5048
5348
|
*/
|
|
5049
|
-
|
|
5349
|
+
destroy(rejectAcquires = false) {
|
|
5050
5350
|
if (this.state.destroying) {
|
|
5051
5351
|
return this.enqueueDestroyRequest();
|
|
5052
5352
|
}
|
|
5053
5353
|
this.state.destroying = true;
|
|
5054
|
-
|
|
5055
|
-
await this.drain();
|
|
5354
|
+
return Promise.resolve().then(() => this.drain()).then(() => {
|
|
5056
5355
|
if (rejectAcquires) {
|
|
5057
5356
|
this.rejectPendingAcquires();
|
|
5058
5357
|
}
|
|
5059
|
-
|
|
5060
|
-
|
|
5061
|
-
} catch (err) {
|
|
5358
|
+
return this.destroyAllResources();
|
|
5359
|
+
}).then(() => this.resetState()).catch((err) => {
|
|
5062
5360
|
this.emit("error", toError(err));
|
|
5063
|
-
}
|
|
5361
|
+
}).finally(() => {
|
|
5064
5362
|
this.state.destroying = false;
|
|
5065
5363
|
this.resolveDestroyQueue();
|
|
5066
|
-
}
|
|
5364
|
+
});
|
|
5067
5365
|
}
|
|
5068
5366
|
tryGetAvailableResource() {
|
|
5069
5367
|
if (this.state.availableResources.length === 0) {
|
|
@@ -5073,13 +5371,20 @@ class ResourcePool extends SimpleEventEmitter {
|
|
|
5073
5371
|
this.state.inUseResources.add(resource);
|
|
5074
5372
|
return resource;
|
|
5075
5373
|
}
|
|
5076
|
-
|
|
5077
|
-
|
|
5078
|
-
|
|
5374
|
+
isLimitReached() {
|
|
5375
|
+
return this.state.inUseResources.size + this.state.createPending + this.state.availableResources.length >= this.poolSize;
|
|
5376
|
+
}
|
|
5377
|
+
tryCreateAutoResource() {
|
|
5378
|
+
if (!this.auto || this.isLimitReached()) {
|
|
5379
|
+
return Promise.resolve(null);
|
|
5079
5380
|
}
|
|
5080
|
-
|
|
5081
|
-
|
|
5082
|
-
|
|
5381
|
+
this.state.createPending++;
|
|
5382
|
+
return Promise.resolve().then(() => this.createResource()).then((resource) => {
|
|
5383
|
+
this.state.inUseResources.add(resource);
|
|
5384
|
+
return resource;
|
|
5385
|
+
}).finally(() => {
|
|
5386
|
+
this.state.createPending--;
|
|
5387
|
+
});
|
|
5083
5388
|
}
|
|
5084
5389
|
enqueueAcquireRequest() {
|
|
5085
5390
|
const acquireDefer = defer();
|
|
@@ -5114,18 +5419,14 @@ class ResourcePool extends SimpleEventEmitter {
|
|
|
5114
5419
|
this.state.queueAcquire.forEach((deferred) => deferred.reject(destroyError));
|
|
5115
5420
|
this.state.queueAcquire = [];
|
|
5116
5421
|
}
|
|
5117
|
-
|
|
5422
|
+
destroyAllResources() {
|
|
5118
5423
|
if (!this.destroyResource || this.state.availableResources.length === 0) {
|
|
5119
|
-
return;
|
|
5424
|
+
return Promise.resolve();
|
|
5120
5425
|
}
|
|
5121
|
-
|
|
5426
|
+
return asyncForEach(
|
|
5122
5427
|
this.state.availableResources,
|
|
5123
|
-
|
|
5124
|
-
|
|
5125
|
-
await this.destroyResource(resource);
|
|
5126
|
-
} catch (err) {
|
|
5127
|
-
this.emit("error", toError(err));
|
|
5128
|
-
}
|
|
5428
|
+
(resource) => {
|
|
5429
|
+
return Promise.resolve().then(() => this.destroyResource(resource)).catch((err) => this.emit("error", toError(err))).then(noop);
|
|
5129
5430
|
},
|
|
5130
5431
|
{ concurrency: 4 }
|
|
5131
5432
|
);
|
|
@@ -5169,242 +5470,6 @@ function timeout(ms, promiseOrCallback, timeoutError = new AppError(408)) {
|
|
|
5169
5470
|
});
|
|
5170
5471
|
}
|
|
5171
5472
|
|
|
5172
|
-
function capitalize(str) {
|
|
5173
|
-
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
|
|
5174
|
-
}
|
|
5175
|
-
|
|
5176
|
-
const CASE_SPLIT_PATTERN = /\p{Lu}?\p{Ll}+|[0-9]+|\p{Lu}+(?!\p{Ll})|\p{Emoji_Presentation}|\p{Extended_Pictographic}|\p{L}+/gu;
|
|
5177
|
-
function getWords(str) {
|
|
5178
|
-
if (!isString(str)) return [];
|
|
5179
|
-
return Array.from(str.match(CASE_SPLIT_PATTERN) ?? []);
|
|
5180
|
-
}
|
|
5181
|
-
|
|
5182
|
-
function camelCase(str) {
|
|
5183
|
-
const words = getWords(str);
|
|
5184
|
-
if (words.length === 0) {
|
|
5185
|
-
return "";
|
|
5186
|
-
}
|
|
5187
|
-
const [first, ...rest] = words;
|
|
5188
|
-
return `${first.toLowerCase()}${rest.map((word) => capitalize(word)).join("")}`;
|
|
5189
|
-
}
|
|
5190
|
-
|
|
5191
|
-
function convertToUnit(str, unit = "px") {
|
|
5192
|
-
if (str == null || str === "") {
|
|
5193
|
-
return void 0;
|
|
5194
|
-
} else if (isNaN(+str)) {
|
|
5195
|
-
return String(str);
|
|
5196
|
-
} else {
|
|
5197
|
-
return `${Number(str)}${unit}`;
|
|
5198
|
-
}
|
|
5199
|
-
}
|
|
5200
|
-
|
|
5201
|
-
const htmlEscapes = Object.freeze({
|
|
5202
|
-
38: "&",
|
|
5203
|
-
// &
|
|
5204
|
-
60: "<",
|
|
5205
|
-
// <
|
|
5206
|
-
62: ">",
|
|
5207
|
-
// >
|
|
5208
|
-
34: """,
|
|
5209
|
-
// "
|
|
5210
|
-
39: "'"
|
|
5211
|
-
// '
|
|
5212
|
-
});
|
|
5213
|
-
function escapeHtml(unsafe) {
|
|
5214
|
-
if (typeof unsafe !== "string") {
|
|
5215
|
-
return "";
|
|
5216
|
-
}
|
|
5217
|
-
let result = "";
|
|
5218
|
-
let strLen = unsafe.length;
|
|
5219
|
-
let char;
|
|
5220
|
-
for (let idx = 0; idx < strLen; idx++) {
|
|
5221
|
-
char = unsafe.charCodeAt(idx);
|
|
5222
|
-
result += htmlEscapes[char] || String.fromCharCode(char);
|
|
5223
|
-
}
|
|
5224
|
-
return result;
|
|
5225
|
-
}
|
|
5226
|
-
|
|
5227
|
-
function escapeNumeric(str) {
|
|
5228
|
-
const result = String(str).replace(/\D/g, "");
|
|
5229
|
-
if (!result.length) {
|
|
5230
|
-
return void 0;
|
|
5231
|
-
}
|
|
5232
|
-
return result;
|
|
5233
|
-
}
|
|
5234
|
-
|
|
5235
|
-
function escapeRegExp(str) {
|
|
5236
|
-
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
|
|
5237
|
-
}
|
|
5238
|
-
|
|
5239
|
-
const vs16RegExp = /\uFE0F/g;
|
|
5240
|
-
const zeroWidthJoiner = String.fromCharCode(8205);
|
|
5241
|
-
function removeVS16s(rawEmoji) {
|
|
5242
|
-
return rawEmoji.indexOf(zeroWidthJoiner) < 0 ? rawEmoji.replace(vs16RegExp, "") : rawEmoji;
|
|
5243
|
-
}
|
|
5244
|
-
const TWEMOJI_REGEX = /(?:\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83e\udef1\ud83c\udffb\u200d\ud83e\udef2\ud83c[\udffc-\udfff]|\ud83e\udef1\ud83c\udffc\u200d\ud83e\udef2\ud83c[\udffb\udffd-\udfff]|\ud83e\udef1\ud83c\udffd\u200d\ud83e\udef2\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\udef1\ud83c\udffe\u200d\ud83e\udef2\ud83c[\udffb-\udffd\udfff]|\ud83e\udef1\ud83c\udfff\u200d\ud83e\udef2\ud83c[\udffb-\udffe]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d\udc8f\ud83c[\udffb-\udfff]|\ud83d\udc91\ud83c[\udffb-\udfff]|\ud83e\udd1d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d\udc8f\udc91]|\ud83e\udd1d)|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83d\ude36\u200d\ud83c\udf2b\ufe0f|\u2764\ufe0f\u200d\ud83d\udd25|\u2764\ufe0f\u200d\ud83e\ude79|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc3b\u200d\u2744\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83d\ude2e\u200d\ud83d\udca8|\ud83d\ude35\u200d\ud83d\udcab|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83d\udc08\u200d\u2b1b)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd\udec3-\udec5\udef0-\udef6]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udedd-\udedf\udeeb\udeec\udef4-\udefc\udfe0-\udfeb\udff0]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78-\uddb4\uddb7\uddba\uddbc-\uddcc\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7c\ude80-\ude86\ude90-\udeac\udeb0-\udeba\udec0-\udec2\uded0-\uded9\udee0-\udee7]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g;
|
|
5245
|
-
|
|
5246
|
-
function isOneEmoji(text) {
|
|
5247
|
-
return !!(typeof text === "string" && text && (text.match(TWEMOJI_REGEX) || [])[0]?.length === text.length);
|
|
5248
|
-
}
|
|
5249
|
-
|
|
5250
|
-
const IGNORED_TITLES = Object.freeze(
|
|
5251
|
-
/* @__PURE__ */ new Set([
|
|
5252
|
-
"dr.",
|
|
5253
|
-
"mr.",
|
|
5254
|
-
"mrs.",
|
|
5255
|
-
"miss",
|
|
5256
|
-
"ms.",
|
|
5257
|
-
"prof.",
|
|
5258
|
-
"sir",
|
|
5259
|
-
"rev.",
|
|
5260
|
-
"hon."
|
|
5261
|
-
])
|
|
5262
|
-
);
|
|
5263
|
-
function getInitials(fullName) {
|
|
5264
|
-
if (!isString(fullName)) return "";
|
|
5265
|
-
let [first, ...rest] = fullName.replace(/\s{2,}/g, " ").replace(/[,+/#!$@%^&*;:{}=\-_`~()]/g, "").trim().split(" ").filter((word) => !IGNORED_TITLES.has(word.toLowerCase())).map((v) => v.replaceAll(".", "").trim()).filter(Boolean);
|
|
5266
|
-
let last = rest[rest.length - 1];
|
|
5267
|
-
if (rest.length > 1) {
|
|
5268
|
-
if (isOneEmoji(first)) {
|
|
5269
|
-
first = rest[0];
|
|
5270
|
-
} else if (isOneEmoji(last)) {
|
|
5271
|
-
last = rest[0];
|
|
5272
|
-
}
|
|
5273
|
-
}
|
|
5274
|
-
return [first, last].filter(Boolean).map((letter = "") => [...letter.toUpperCase()][0]).join("");
|
|
5275
|
-
}
|
|
5276
|
-
|
|
5277
|
-
const byteToHex = [];
|
|
5278
|
-
for (let n = 0; n <= 255; ++n) {
|
|
5279
|
-
const hexOctet = n.toString(16).padStart(2, "0");
|
|
5280
|
-
byteToHex.push(hexOctet);
|
|
5281
|
-
}
|
|
5282
|
-
function hex(value) {
|
|
5283
|
-
const buff = Array.isArray(value) ? new Uint8Array(value) : value;
|
|
5284
|
-
const hexOctets = new Array(buff.length);
|
|
5285
|
-
for (let i = 0; i < buff.length; ++i) {
|
|
5286
|
-
hexOctets[i] = byteToHex[buff[i]];
|
|
5287
|
-
}
|
|
5288
|
-
return hexOctets.join("");
|
|
5289
|
-
}
|
|
5290
|
-
|
|
5291
|
-
function isoToFlagEmoji(iso) {
|
|
5292
|
-
const code = iso.toUpperCase();
|
|
5293
|
-
if (!/^[A-Z]{2}$/.test(code)) return iso;
|
|
5294
|
-
const codePoints = [...code].map((c) => c.codePointAt(0) + 127397);
|
|
5295
|
-
return String.fromCodePoint(...codePoints);
|
|
5296
|
-
}
|
|
5297
|
-
|
|
5298
|
-
function kebabCase(str) {
|
|
5299
|
-
const words = getWords(str);
|
|
5300
|
-
return words.map((word) => word.toLowerCase()).join("-");
|
|
5301
|
-
}
|
|
5302
|
-
|
|
5303
|
-
const lowerCase = (str) => {
|
|
5304
|
-
return getWords(str).map((word) => word.toLowerCase()).join(" ");
|
|
5305
|
-
};
|
|
5306
|
-
|
|
5307
|
-
function maskingWords(value, withChar = "*") {
|
|
5308
|
-
return getWords(value).map((word) => {
|
|
5309
|
-
const len = word.length;
|
|
5310
|
-
if (len < 2) {
|
|
5311
|
-
return "".padEnd(len, withChar);
|
|
5312
|
-
} else if (len < 3) {
|
|
5313
|
-
return word[0].padEnd(len, withChar);
|
|
5314
|
-
} else {
|
|
5315
|
-
return word[0].padEnd(len - 2, withChar) + word.at(-1);
|
|
5316
|
-
}
|
|
5317
|
-
}).join(" ");
|
|
5318
|
-
}
|
|
5319
|
-
|
|
5320
|
-
function maskingEmail(value) {
|
|
5321
|
-
if (!isString(value)) return "";
|
|
5322
|
-
const [username, host] = value.split("@", 2);
|
|
5323
|
-
if (!username || !host) return "";
|
|
5324
|
-
return `${maskingWords(username)}@${host}`;
|
|
5325
|
-
}
|
|
5326
|
-
|
|
5327
|
-
function maskingPhone(value, fromPosition = 2, toPosition = 4, withChar = "X") {
|
|
5328
|
-
if (!isString(value)) return "";
|
|
5329
|
-
const numbersAmount = value.replace(/\D/g, "").length;
|
|
5330
|
-
const fromIdx = fromPosition - 1;
|
|
5331
|
-
let toIdx = numbersAmount - toPosition;
|
|
5332
|
-
if (toIdx <= 0) {
|
|
5333
|
-
toIdx = numbersAmount;
|
|
5334
|
-
}
|
|
5335
|
-
let i = -1;
|
|
5336
|
-
return value.replace(/\d/g, (char) => {
|
|
5337
|
-
i++;
|
|
5338
|
-
return i > fromIdx && i < toIdx ? withChar : char;
|
|
5339
|
-
});
|
|
5340
|
-
}
|
|
5341
|
-
|
|
5342
|
-
let index = Math.floor(Math.random() * 16777215);
|
|
5343
|
-
const buffer = new Uint8Array(12);
|
|
5344
|
-
function objectId(fromValue = Date.now()) {
|
|
5345
|
-
const value = timestamp(fromValue);
|
|
5346
|
-
const inc = getInc();
|
|
5347
|
-
buffer[0] = value >> 24;
|
|
5348
|
-
buffer[1] = value >> 16;
|
|
5349
|
-
buffer[2] = value >> 8;
|
|
5350
|
-
buffer[3] = value;
|
|
5351
|
-
buffer[4] = Math.floor(Math.random() * 256);
|
|
5352
|
-
buffer[5] = Math.floor(Math.random() * 256);
|
|
5353
|
-
buffer[6] = Math.floor(Math.random() * 256);
|
|
5354
|
-
buffer[7] = Math.floor(Math.random() * 256);
|
|
5355
|
-
buffer[8] = Math.floor(Math.random() * 256);
|
|
5356
|
-
buffer[11] = inc & 255;
|
|
5357
|
-
buffer[10] = inc >> 8 & 255;
|
|
5358
|
-
buffer[9] = inc >> 16 & 255;
|
|
5359
|
-
return hex(buffer);
|
|
5360
|
-
}
|
|
5361
|
-
function getInc() {
|
|
5362
|
-
return index = (index + 1) % 16777215;
|
|
5363
|
-
}
|
|
5364
|
-
|
|
5365
|
-
const snakeCase = (str) => {
|
|
5366
|
-
return getWords(str).map((word) => word.toLowerCase()).join("_");
|
|
5367
|
-
};
|
|
5368
|
-
|
|
5369
|
-
const startCase = (value) => {
|
|
5370
|
-
return getWords(value).map(capitalize).join(" ");
|
|
5371
|
-
};
|
|
5372
|
-
|
|
5373
|
-
const DEF_STR_ASSIGN_REGEXP = /\{{([A-z-_. ]*)\}}/g;
|
|
5374
|
-
const DEF_STR_ASSIGN_METHOD = (obj, key) => obj[key];
|
|
5375
|
-
function strAssign(str, obj, method = DEF_STR_ASSIGN_METHOD) {
|
|
5376
|
-
return str.replace(DEF_STR_ASSIGN_REGEXP, (match, p1) => {
|
|
5377
|
-
const key = p1.trim();
|
|
5378
|
-
const value = method(obj, key);
|
|
5379
|
-
if (value === void 0 || value === null) {
|
|
5380
|
-
return match;
|
|
5381
|
-
}
|
|
5382
|
-
return value;
|
|
5383
|
-
});
|
|
5384
|
-
}
|
|
5385
|
-
|
|
5386
|
-
function truncate(value, maxLength = 120, insignificantThreshold = 0.05) {
|
|
5387
|
-
if (!shouldTruncate(value, maxLength, insignificantThreshold)) {
|
|
5388
|
-
return value;
|
|
5389
|
-
}
|
|
5390
|
-
let truncated = value.slice(0, maxLength).trim();
|
|
5391
|
-
const lastSpace = truncated.lastIndexOf(" ");
|
|
5392
|
-
if (lastSpace > 0) {
|
|
5393
|
-
truncated = truncated.slice(0, lastSpace);
|
|
5394
|
-
}
|
|
5395
|
-
return `${truncated}...`;
|
|
5396
|
-
}
|
|
5397
|
-
function shouldTruncate(text, maxLength, insignificantThreshold) {
|
|
5398
|
-
return text.length - maxLength > maxLength * insignificantThreshold;
|
|
5399
|
-
}
|
|
5400
|
-
|
|
5401
|
-
function wrapText(value, maxLength = 30) {
|
|
5402
|
-
if (value.length > maxLength) {
|
|
5403
|
-
return value.slice(0, maxLength) + "...";
|
|
5404
|
-
}
|
|
5405
|
-
return value;
|
|
5406
|
-
}
|
|
5407
|
-
|
|
5408
5473
|
exports.AppError = AppError;
|
|
5409
5474
|
exports.AsyncIterableQueue = AsyncIterableQueue;
|
|
5410
5475
|
exports.BrowserAssertionError = BrowserAssertionError;
|
|
@@ -5597,6 +5662,8 @@ exports.sprintf = sprintf;
|
|
|
5597
5662
|
exports.startCase = startCase;
|
|
5598
5663
|
exports.strAssign = strAssign;
|
|
5599
5664
|
exports.sum = sum;
|
|
5665
|
+
exports.textDecoder = textDecoder;
|
|
5666
|
+
exports.textEncoder = textEncoder;
|
|
5600
5667
|
exports.throttle = throttle;
|
|
5601
5668
|
exports.timeFromMinutes = timeFromMinutes;
|
|
5602
5669
|
exports.timeStringify = timeStringify;
|