@ztimson/utils 0.22.5 → 0.22.7
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 +169 -199
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +169 -199
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -408,15 +408,177 @@ class Cache {
|
|
|
408
408
|
return this;
|
|
409
409
|
}
|
|
410
410
|
}
|
|
411
|
+
const LETTER_LIST = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
412
|
+
const NUMBER_LIST = "0123456789";
|
|
413
|
+
const SYMBOL_LIST = "~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/";
|
|
414
|
+
const CHAR_LIST = LETTER_LIST + LETTER_LIST.toLowerCase() + NUMBER_LIST + SYMBOL_LIST;
|
|
415
|
+
function formatBytes(bytes, decimals = 2) {
|
|
416
|
+
if (bytes === 0) return "0 Bytes";
|
|
417
|
+
const k = 1024;
|
|
418
|
+
const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
|
|
419
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
420
|
+
return parseFloat((bytes / Math.pow(k, i)).toFixed(decimals)) + " " + sizes[i];
|
|
421
|
+
}
|
|
422
|
+
function formatPhoneNumber(number) {
|
|
423
|
+
const parts = /(\+?1)?.*?(\d{3}).*?(\d{3}).*?(\d{4})/g.exec(number);
|
|
424
|
+
if (!parts) throw new Error(`Number cannot be parsed: ${number}`);
|
|
425
|
+
return `${parts[1] ? "+1" : ""} (${parts[2]}) ${parts[3]}-${parts[4]}`.trim();
|
|
426
|
+
}
|
|
427
|
+
function insertAt(target, str, index) {
|
|
428
|
+
return `${target.slice(0, index)}${str}${target.slice(index + 1)}`;
|
|
429
|
+
}
|
|
430
|
+
function pad(text, length, char = " ", start = true) {
|
|
431
|
+
if (start) return text.toString().padStart(length, char);
|
|
432
|
+
return text.toString().padEnd(length, char);
|
|
433
|
+
}
|
|
434
|
+
function randomHex(length) {
|
|
435
|
+
return Array(length).fill(null).map(() => Math.round(Math.random() * 15).toString(16)).join("");
|
|
436
|
+
}
|
|
437
|
+
function randomString(length, pool = CHAR_LIST) {
|
|
438
|
+
return Array(length).fill(null).map(() => {
|
|
439
|
+
const n = ~~(Math.random() * pool.length);
|
|
440
|
+
return pool[n];
|
|
441
|
+
}).join("");
|
|
442
|
+
}
|
|
443
|
+
function randomStringBuilder(length, letters = false, numbers = false, symbols = false) {
|
|
444
|
+
if (!letters && !numbers && !symbols) throw new Error("Must enable at least one: letters, numbers, symbols");
|
|
445
|
+
return Array(length).fill(null).map(() => {
|
|
446
|
+
let c;
|
|
447
|
+
do {
|
|
448
|
+
const type = ~~(Math.random() * 3);
|
|
449
|
+
if (letters && type == 0) {
|
|
450
|
+
c = LETTER_LIST[~~(Math.random() * LETTER_LIST.length)];
|
|
451
|
+
} else if (numbers && type == 1) {
|
|
452
|
+
c = NUMBER_LIST[~~(Math.random() * NUMBER_LIST.length)];
|
|
453
|
+
} else if (symbols && type == 2) {
|
|
454
|
+
c = SYMBOL_LIST[~~(Math.random() * SYMBOL_LIST.length)];
|
|
455
|
+
}
|
|
456
|
+
} while (!c);
|
|
457
|
+
return c;
|
|
458
|
+
}).join("");
|
|
459
|
+
}
|
|
460
|
+
function strSplice(str, start, deleteCount, insert = "") {
|
|
461
|
+
const before = str.slice(0, start);
|
|
462
|
+
const after = str.slice(start + deleteCount);
|
|
463
|
+
return before + insert + after;
|
|
464
|
+
}
|
|
465
|
+
function matchAll(value, regex) {
|
|
466
|
+
if (typeof regex === "string") {
|
|
467
|
+
regex = new RegExp(regex, "g");
|
|
468
|
+
}
|
|
469
|
+
if (!regex.global) {
|
|
470
|
+
throw new TypeError("Regular expression must be global.");
|
|
471
|
+
}
|
|
472
|
+
let ret = [];
|
|
473
|
+
let match;
|
|
474
|
+
while ((match = regex.exec(value)) !== null) {
|
|
475
|
+
ret.push(match);
|
|
476
|
+
}
|
|
477
|
+
return ret;
|
|
478
|
+
}
|
|
479
|
+
function parseUrl(url) {
|
|
480
|
+
const processed = new RegExp(
|
|
481
|
+
"(?:(?<protocol>[\\w\\d]+)\\:\\/\\/)?(?:(?<user>.+)\\@)?(?<host>(?<domain>[^:\\/\\?#@\\n]+)(?:\\:(?<port>\\d*))?)(?<path>\\/.*?)?(?:\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$",
|
|
482
|
+
"gm"
|
|
483
|
+
).exec(url);
|
|
484
|
+
const groups = (processed == null ? void 0 : processed.groups) ?? {};
|
|
485
|
+
const domains = groups.domain.split(".");
|
|
486
|
+
if (groups["port"] != null) groups.port = Number(groups.port);
|
|
487
|
+
if (domains.length > 2) {
|
|
488
|
+
groups.domain = domains.splice(-2, 2).join(".");
|
|
489
|
+
groups.subdomain = domains.join(".");
|
|
490
|
+
}
|
|
491
|
+
if (groups.query) {
|
|
492
|
+
const split = groups.query.split("&"), query = {};
|
|
493
|
+
split.forEach((q) => {
|
|
494
|
+
const [key, val] = q.split("=");
|
|
495
|
+
query[key] = val;
|
|
496
|
+
});
|
|
497
|
+
groups.query = query;
|
|
498
|
+
}
|
|
499
|
+
return groups;
|
|
500
|
+
}
|
|
501
|
+
function md5(d) {
|
|
502
|
+
var r = M(V(Y(X(d), 8 * d.length)));
|
|
503
|
+
return r.toLowerCase();
|
|
504
|
+
}
|
|
505
|
+
function M(d) {
|
|
506
|
+
for (var _, m = "0123456789ABCDEF", f = "", r = 0; r < d.length; r++) _ = d.charCodeAt(r), f += m.charAt(_ >>> 4 & 15) + m.charAt(15 & _);
|
|
507
|
+
return f;
|
|
508
|
+
}
|
|
509
|
+
function X(d) {
|
|
510
|
+
for (var _ = Array(d.length >> 2), m = 0; m < _.length; m++) _[m] = 0;
|
|
511
|
+
for (m = 0; m < 8 * d.length; m += 8) _[m >> 5] |= (255 & d.charCodeAt(m / 8)) << m % 32;
|
|
512
|
+
return _;
|
|
513
|
+
}
|
|
514
|
+
function V(d) {
|
|
515
|
+
for (var _ = "", m = 0; m < 32 * d.length; m += 8) _ += String.fromCharCode(d[m >> 5] >>> m % 32 & 255);
|
|
516
|
+
return _;
|
|
517
|
+
}
|
|
518
|
+
function Y(d, _) {
|
|
519
|
+
d[_ >> 5] |= 128 << _ % 32, d[14 + (_ + 64 >>> 9 << 4)] = _;
|
|
520
|
+
for (var m = 1732584193, f = -271733879, r = -1732584194, i = 271733878, n = 0; n < d.length; n += 16) {
|
|
521
|
+
var h = m, t = f, g = r, e = i;
|
|
522
|
+
f = md5_ii(f = md5_ii(f = md5_ii(f = md5_ii(f = md5_hh(f = md5_hh(f = md5_hh(f = md5_hh(f = md5_gg(f = md5_gg(f = md5_gg(f = md5_gg(f = md5_ff(f = md5_ff(f = md5_ff(f = md5_ff(f, r = md5_ff(r, i = md5_ff(i, m = md5_ff(m, f, r, i, d[n + 0], 7, -680876936), f, r, d[n + 1], 12, -389564586), m, f, d[n + 2], 17, 606105819), i, m, d[n + 3], 22, -1044525330), r = md5_ff(r, i = md5_ff(i, m = md5_ff(m, f, r, i, d[n + 4], 7, -176418897), f, r, d[n + 5], 12, 1200080426), m, f, d[n + 6], 17, -1473231341), i, m, d[n + 7], 22, -45705983), r = md5_ff(r, i = md5_ff(i, m = md5_ff(m, f, r, i, d[n + 8], 7, 1770035416), f, r, d[n + 9], 12, -1958414417), m, f, d[n + 10], 17, -42063), i, m, d[n + 11], 22, -1990404162), r = md5_ff(r, i = md5_ff(i, m = md5_ff(m, f, r, i, d[n + 12], 7, 1804603682), f, r, d[n + 13], 12, -40341101), m, f, d[n + 14], 17, -1502002290), i, m, d[n + 15], 22, 1236535329), r = md5_gg(r, i = md5_gg(i, m = md5_gg(m, f, r, i, d[n + 1], 5, -165796510), f, r, d[n + 6], 9, -1069501632), m, f, d[n + 11], 14, 643717713), i, m, d[n + 0], 20, -373897302), r = md5_gg(r, i = md5_gg(i, m = md5_gg(m, f, r, i, d[n + 5], 5, -701558691), f, r, d[n + 10], 9, 38016083), m, f, d[n + 15], 14, -660478335), i, m, d[n + 4], 20, -405537848), r = md5_gg(r, i = md5_gg(i, m = md5_gg(m, f, r, i, d[n + 9], 5, 568446438), f, r, d[n + 14], 9, -1019803690), m, f, d[n + 3], 14, -187363961), i, m, d[n + 8], 20, 1163531501), r = md5_gg(r, i = md5_gg(i, m = md5_gg(m, f, r, i, d[n + 13], 5, -1444681467), f, r, d[n + 2], 9, -51403784), m, f, d[n + 7], 14, 1735328473), i, m, d[n + 12], 20, -1926607734), r = md5_hh(r, i = md5_hh(i, m = md5_hh(m, f, r, i, d[n + 5], 4, -378558), f, r, d[n + 8], 11, -2022574463), m, f, d[n + 11], 16, 1839030562), i, m, d[n + 14], 23, -35309556), r = md5_hh(r, i = md5_hh(i, m = md5_hh(m, f, r, i, d[n + 1], 4, -1530992060), f, r, d[n + 4], 11, 1272893353), m, f, d[n + 7], 16, -155497632), i, m, d[n + 10], 23, -1094730640), r = md5_hh(r, i = md5_hh(i, m = md5_hh(m, f, r, i, d[n + 13], 4, 681279174), f, r, d[n + 0], 11, -358537222), m, f, d[n + 3], 16, -722521979), i, m, d[n + 6], 23, 76029189), r = md5_hh(r, i = md5_hh(i, m = md5_hh(m, f, r, i, d[n + 9], 4, -640364487), f, r, d[n + 12], 11, -421815835), m, f, d[n + 15], 16, 530742520), i, m, d[n + 2], 23, -995338651), r = md5_ii(r, i = md5_ii(i, m = md5_ii(m, f, r, i, d[n + 0], 6, -198630844), f, r, d[n + 7], 10, 1126891415), m, f, d[n + 14], 15, -1416354905), i, m, d[n + 5], 21, -57434055), r = md5_ii(r, i = md5_ii(i, m = md5_ii(m, f, r, i, d[n + 12], 6, 1700485571), f, r, d[n + 3], 10, -1894986606), m, f, d[n + 10], 15, -1051523), i, m, d[n + 1], 21, -2054922799), r = md5_ii(r, i = md5_ii(i, m = md5_ii(m, f, r, i, d[n + 8], 6, 1873313359), f, r, d[n + 15], 10, -30611744), m, f, d[n + 6], 15, -1560198380), i, m, d[n + 13], 21, 1309151649), r = md5_ii(r, i = md5_ii(i, m = md5_ii(m, f, r, i, d[n + 4], 6, -145523070), f, r, d[n + 11], 10, -1120210379), m, f, d[n + 2], 15, 718787259), i, m, d[n + 9], 21, -343485551), m = safe_add(m, h), f = safe_add(f, t), r = safe_add(r, g), i = safe_add(i, e);
|
|
523
|
+
}
|
|
524
|
+
return Array(m, f, r, i);
|
|
525
|
+
}
|
|
526
|
+
function md5_cmn(d, _, m, f, r, i) {
|
|
527
|
+
return safe_add(bit_rol(safe_add(safe_add(_, d), safe_add(f, i)), r), m);
|
|
528
|
+
}
|
|
529
|
+
function md5_ff(d, _, m, f, r, i, n) {
|
|
530
|
+
return md5_cmn(_ & m | ~_ & f, d, _, r, i, n);
|
|
531
|
+
}
|
|
532
|
+
function md5_gg(d, _, m, f, r, i, n) {
|
|
533
|
+
return md5_cmn(_ & f | m & ~f, d, _, r, i, n);
|
|
534
|
+
}
|
|
535
|
+
function md5_hh(d, _, m, f, r, i, n) {
|
|
536
|
+
return md5_cmn(_ ^ m ^ f, d, _, r, i, n);
|
|
537
|
+
}
|
|
538
|
+
function md5_ii(d, _, m, f, r, i, n) {
|
|
539
|
+
return md5_cmn(m ^ (_ | ~f), d, _, r, i, n);
|
|
540
|
+
}
|
|
541
|
+
function safe_add(d, _) {
|
|
542
|
+
var m = (65535 & d) + (65535 & _);
|
|
543
|
+
return (d >> 16) + (_ >> 16) + (m >> 16) << 16 | 65535 & m;
|
|
544
|
+
}
|
|
545
|
+
function bit_rol(d, _) {
|
|
546
|
+
return d << _ | d >>> 32 - _;
|
|
547
|
+
}
|
|
548
|
+
function validateEmail(email) {
|
|
549
|
+
return /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(email);
|
|
550
|
+
}
|
|
411
551
|
function fromCsv(csv, hasHeaders = true) {
|
|
412
552
|
const row = csv.split("\n");
|
|
413
553
|
let headers = hasHeaders ? row.splice(0, 1)[0] : null;
|
|
414
554
|
if (headers) headers = headers.match(/(?:[^,"']+|"[^"]*"|'[^']*')+/g);
|
|
415
555
|
return row.map((r) => {
|
|
416
|
-
|
|
556
|
+
function parseLine(line) {
|
|
557
|
+
const parts = line.split(","), columns = [];
|
|
558
|
+
let quoted = false;
|
|
559
|
+
for (const p of parts) {
|
|
560
|
+
if (quoted) columns[columns.length - 1] = columns.at(-1) + "," + p;
|
|
561
|
+
else columns.push(p);
|
|
562
|
+
if (/[^"]"$/g.test(p)) {
|
|
563
|
+
quoted = false;
|
|
564
|
+
} else if (/^"[^"]/g.test(p)) {
|
|
565
|
+
quoted = true;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
return columns;
|
|
569
|
+
}
|
|
570
|
+
const props = parseLine(r);
|
|
417
571
|
const h = headers || Array(props.length).fill(null).map((r2, i) => {
|
|
572
|
+
let letter = "";
|
|
573
|
+
const first = i / 26;
|
|
574
|
+
if (first > 1) letter += LETTER_LIST[Math.floor(first - 1)];
|
|
575
|
+
letter += LETTER_LIST[i % 26];
|
|
576
|
+
return letter;
|
|
418
577
|
});
|
|
419
|
-
return h.reduce((acc, h2, i) =>
|
|
578
|
+
return h.reduce((acc, h2, i) => {
|
|
579
|
+
dotNotation(acc, h2, props[i]);
|
|
580
|
+
return acc;
|
|
581
|
+
}, {});
|
|
420
582
|
});
|
|
421
583
|
}
|
|
422
584
|
function toCsv(target, flatten = true) {
|
|
@@ -954,146 +1116,6 @@ function fracToDec(frac) {
|
|
|
954
1116
|
split = split.pop().split("/");
|
|
955
1117
|
return whole + Number(split[0]) / Number(split[1]);
|
|
956
1118
|
}
|
|
957
|
-
const LETTER_LIST = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
958
|
-
const NUMBER_LIST = "0123456789";
|
|
959
|
-
const SYMBOL_LIST = "~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/";
|
|
960
|
-
const CHAR_LIST = LETTER_LIST + LETTER_LIST.toLowerCase() + NUMBER_LIST + SYMBOL_LIST;
|
|
961
|
-
function formatBytes(bytes, decimals = 2) {
|
|
962
|
-
if (bytes === 0) return "0 Bytes";
|
|
963
|
-
const k = 1024;
|
|
964
|
-
const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
|
|
965
|
-
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
966
|
-
return parseFloat((bytes / Math.pow(k, i)).toFixed(decimals)) + " " + sizes[i];
|
|
967
|
-
}
|
|
968
|
-
function formatPhoneNumber(number) {
|
|
969
|
-
const parts = /(\+?1)?.*?(\d{3}).*?(\d{3}).*?(\d{4})/g.exec(number);
|
|
970
|
-
if (!parts) throw new Error(`Number cannot be parsed: ${number}`);
|
|
971
|
-
return `${parts[1] ? "+1" : ""} (${parts[2]}) ${parts[3]}-${parts[4]}`.trim();
|
|
972
|
-
}
|
|
973
|
-
function insertAt(target, str, index) {
|
|
974
|
-
return `${target.slice(0, index)}${str}${target.slice(index + 1)}`;
|
|
975
|
-
}
|
|
976
|
-
function pad(text, length, char = " ", start = true) {
|
|
977
|
-
if (start) return text.toString().padStart(length, char);
|
|
978
|
-
return text.toString().padEnd(length, char);
|
|
979
|
-
}
|
|
980
|
-
function randomHex(length) {
|
|
981
|
-
return Array(length).fill(null).map(() => Math.round(Math.random() * 15).toString(16)).join("");
|
|
982
|
-
}
|
|
983
|
-
function randomString(length, pool = CHAR_LIST) {
|
|
984
|
-
return Array(length).fill(null).map(() => {
|
|
985
|
-
const n = ~~(Math.random() * pool.length);
|
|
986
|
-
return pool[n];
|
|
987
|
-
}).join("");
|
|
988
|
-
}
|
|
989
|
-
function randomStringBuilder(length, letters = false, numbers = false, symbols = false) {
|
|
990
|
-
if (!letters && !numbers && !symbols) throw new Error("Must enable at least one: letters, numbers, symbols");
|
|
991
|
-
return Array(length).fill(null).map(() => {
|
|
992
|
-
let c;
|
|
993
|
-
do {
|
|
994
|
-
const type = ~~(Math.random() * 3);
|
|
995
|
-
if (letters && type == 0) {
|
|
996
|
-
c = LETTER_LIST[~~(Math.random() * LETTER_LIST.length)];
|
|
997
|
-
} else if (numbers && type == 1) {
|
|
998
|
-
c = NUMBER_LIST[~~(Math.random() * NUMBER_LIST.length)];
|
|
999
|
-
} else if (symbols && type == 2) {
|
|
1000
|
-
c = SYMBOL_LIST[~~(Math.random() * SYMBOL_LIST.length)];
|
|
1001
|
-
}
|
|
1002
|
-
} while (!c);
|
|
1003
|
-
return c;
|
|
1004
|
-
}).join("");
|
|
1005
|
-
}
|
|
1006
|
-
function strSplice(str, start, deleteCount, insert = "") {
|
|
1007
|
-
const before = str.slice(0, start);
|
|
1008
|
-
const after = str.slice(start + deleteCount);
|
|
1009
|
-
return before + insert + after;
|
|
1010
|
-
}
|
|
1011
|
-
function matchAll(value, regex) {
|
|
1012
|
-
if (typeof regex === "string") {
|
|
1013
|
-
regex = new RegExp(regex, "g");
|
|
1014
|
-
}
|
|
1015
|
-
if (!regex.global) {
|
|
1016
|
-
throw new TypeError("Regular expression must be global.");
|
|
1017
|
-
}
|
|
1018
|
-
let ret = [];
|
|
1019
|
-
let match;
|
|
1020
|
-
while ((match = regex.exec(value)) !== null) {
|
|
1021
|
-
ret.push(match);
|
|
1022
|
-
}
|
|
1023
|
-
return ret;
|
|
1024
|
-
}
|
|
1025
|
-
function parseUrl(url) {
|
|
1026
|
-
const processed = new RegExp(
|
|
1027
|
-
"(?:(?<protocol>[\\w\\d]+)\\:\\/\\/)?(?:(?<user>.+)\\@)?(?<host>(?<domain>[^:\\/\\?#@\\n]+)(?:\\:(?<port>\\d*))?)(?<path>\\/.*?)?(?:\\?(?<query>.*?))?(?:#(?<fragment>.*?))?$",
|
|
1028
|
-
"gm"
|
|
1029
|
-
).exec(url);
|
|
1030
|
-
const groups = (processed == null ? void 0 : processed.groups) ?? {};
|
|
1031
|
-
const domains = groups.domain.split(".");
|
|
1032
|
-
if (groups["port"] != null) groups.port = Number(groups.port);
|
|
1033
|
-
if (domains.length > 2) {
|
|
1034
|
-
groups.domain = domains.splice(-2, 2).join(".");
|
|
1035
|
-
groups.subdomain = domains.join(".");
|
|
1036
|
-
}
|
|
1037
|
-
if (groups.query) {
|
|
1038
|
-
const split = groups.query.split("&"), query = {};
|
|
1039
|
-
split.forEach((q) => {
|
|
1040
|
-
const [key, val] = q.split("=");
|
|
1041
|
-
query[key] = val;
|
|
1042
|
-
});
|
|
1043
|
-
groups.query = query;
|
|
1044
|
-
}
|
|
1045
|
-
return groups;
|
|
1046
|
-
}
|
|
1047
|
-
function md5(d) {
|
|
1048
|
-
var r = M(V(Y(X(d), 8 * d.length)));
|
|
1049
|
-
return r.toLowerCase();
|
|
1050
|
-
}
|
|
1051
|
-
function M(d) {
|
|
1052
|
-
for (var _, m = "0123456789ABCDEF", f = "", r = 0; r < d.length; r++) _ = d.charCodeAt(r), f += m.charAt(_ >>> 4 & 15) + m.charAt(15 & _);
|
|
1053
|
-
return f;
|
|
1054
|
-
}
|
|
1055
|
-
function X(d) {
|
|
1056
|
-
for (var _ = Array(d.length >> 2), m = 0; m < _.length; m++) _[m] = 0;
|
|
1057
|
-
for (m = 0; m < 8 * d.length; m += 8) _[m >> 5] |= (255 & d.charCodeAt(m / 8)) << m % 32;
|
|
1058
|
-
return _;
|
|
1059
|
-
}
|
|
1060
|
-
function V(d) {
|
|
1061
|
-
for (var _ = "", m = 0; m < 32 * d.length; m += 8) _ += String.fromCharCode(d[m >> 5] >>> m % 32 & 255);
|
|
1062
|
-
return _;
|
|
1063
|
-
}
|
|
1064
|
-
function Y(d, _) {
|
|
1065
|
-
d[_ >> 5] |= 128 << _ % 32, d[14 + (_ + 64 >>> 9 << 4)] = _;
|
|
1066
|
-
for (var m = 1732584193, f = -271733879, r = -1732584194, i = 271733878, n = 0; n < d.length; n += 16) {
|
|
1067
|
-
var h = m, t = f, g = r, e = i;
|
|
1068
|
-
f = md5_ii(f = md5_ii(f = md5_ii(f = md5_ii(f = md5_hh(f = md5_hh(f = md5_hh(f = md5_hh(f = md5_gg(f = md5_gg(f = md5_gg(f = md5_gg(f = md5_ff(f = md5_ff(f = md5_ff(f = md5_ff(f, r = md5_ff(r, i = md5_ff(i, m = md5_ff(m, f, r, i, d[n + 0], 7, -680876936), f, r, d[n + 1], 12, -389564586), m, f, d[n + 2], 17, 606105819), i, m, d[n + 3], 22, -1044525330), r = md5_ff(r, i = md5_ff(i, m = md5_ff(m, f, r, i, d[n + 4], 7, -176418897), f, r, d[n + 5], 12, 1200080426), m, f, d[n + 6], 17, -1473231341), i, m, d[n + 7], 22, -45705983), r = md5_ff(r, i = md5_ff(i, m = md5_ff(m, f, r, i, d[n + 8], 7, 1770035416), f, r, d[n + 9], 12, -1958414417), m, f, d[n + 10], 17, -42063), i, m, d[n + 11], 22, -1990404162), r = md5_ff(r, i = md5_ff(i, m = md5_ff(m, f, r, i, d[n + 12], 7, 1804603682), f, r, d[n + 13], 12, -40341101), m, f, d[n + 14], 17, -1502002290), i, m, d[n + 15], 22, 1236535329), r = md5_gg(r, i = md5_gg(i, m = md5_gg(m, f, r, i, d[n + 1], 5, -165796510), f, r, d[n + 6], 9, -1069501632), m, f, d[n + 11], 14, 643717713), i, m, d[n + 0], 20, -373897302), r = md5_gg(r, i = md5_gg(i, m = md5_gg(m, f, r, i, d[n + 5], 5, -701558691), f, r, d[n + 10], 9, 38016083), m, f, d[n + 15], 14, -660478335), i, m, d[n + 4], 20, -405537848), r = md5_gg(r, i = md5_gg(i, m = md5_gg(m, f, r, i, d[n + 9], 5, 568446438), f, r, d[n + 14], 9, -1019803690), m, f, d[n + 3], 14, -187363961), i, m, d[n + 8], 20, 1163531501), r = md5_gg(r, i = md5_gg(i, m = md5_gg(m, f, r, i, d[n + 13], 5, -1444681467), f, r, d[n + 2], 9, -51403784), m, f, d[n + 7], 14, 1735328473), i, m, d[n + 12], 20, -1926607734), r = md5_hh(r, i = md5_hh(i, m = md5_hh(m, f, r, i, d[n + 5], 4, -378558), f, r, d[n + 8], 11, -2022574463), m, f, d[n + 11], 16, 1839030562), i, m, d[n + 14], 23, -35309556), r = md5_hh(r, i = md5_hh(i, m = md5_hh(m, f, r, i, d[n + 1], 4, -1530992060), f, r, d[n + 4], 11, 1272893353), m, f, d[n + 7], 16, -155497632), i, m, d[n + 10], 23, -1094730640), r = md5_hh(r, i = md5_hh(i, m = md5_hh(m, f, r, i, d[n + 13], 4, 681279174), f, r, d[n + 0], 11, -358537222), m, f, d[n + 3], 16, -722521979), i, m, d[n + 6], 23, 76029189), r = md5_hh(r, i = md5_hh(i, m = md5_hh(m, f, r, i, d[n + 9], 4, -640364487), f, r, d[n + 12], 11, -421815835), m, f, d[n + 15], 16, 530742520), i, m, d[n + 2], 23, -995338651), r = md5_ii(r, i = md5_ii(i, m = md5_ii(m, f, r, i, d[n + 0], 6, -198630844), f, r, d[n + 7], 10, 1126891415), m, f, d[n + 14], 15, -1416354905), i, m, d[n + 5], 21, -57434055), r = md5_ii(r, i = md5_ii(i, m = md5_ii(m, f, r, i, d[n + 12], 6, 1700485571), f, r, d[n + 3], 10, -1894986606), m, f, d[n + 10], 15, -1051523), i, m, d[n + 1], 21, -2054922799), r = md5_ii(r, i = md5_ii(i, m = md5_ii(m, f, r, i, d[n + 8], 6, 1873313359), f, r, d[n + 15], 10, -30611744), m, f, d[n + 6], 15, -1560198380), i, m, d[n + 13], 21, 1309151649), r = md5_ii(r, i = md5_ii(i, m = md5_ii(m, f, r, i, d[n + 4], 6, -145523070), f, r, d[n + 11], 10, -1120210379), m, f, d[n + 2], 15, 718787259), i, m, d[n + 9], 21, -343485551), m = safe_add(m, h), f = safe_add(f, t), r = safe_add(r, g), i = safe_add(i, e);
|
|
1069
|
-
}
|
|
1070
|
-
return Array(m, f, r, i);
|
|
1071
|
-
}
|
|
1072
|
-
function md5_cmn(d, _, m, f, r, i) {
|
|
1073
|
-
return safe_add(bit_rol(safe_add(safe_add(_, d), safe_add(f, i)), r), m);
|
|
1074
|
-
}
|
|
1075
|
-
function md5_ff(d, _, m, f, r, i, n) {
|
|
1076
|
-
return md5_cmn(_ & m | ~_ & f, d, _, r, i, n);
|
|
1077
|
-
}
|
|
1078
|
-
function md5_gg(d, _, m, f, r, i, n) {
|
|
1079
|
-
return md5_cmn(_ & f | m & ~f, d, _, r, i, n);
|
|
1080
|
-
}
|
|
1081
|
-
function md5_hh(d, _, m, f, r, i, n) {
|
|
1082
|
-
return md5_cmn(_ ^ m ^ f, d, _, r, i, n);
|
|
1083
|
-
}
|
|
1084
|
-
function md5_ii(d, _, m, f, r, i, n) {
|
|
1085
|
-
return md5_cmn(m ^ (_ | ~f), d, _, r, i, n);
|
|
1086
|
-
}
|
|
1087
|
-
function safe_add(d, _) {
|
|
1088
|
-
var m = (65535 & d) + (65535 & _);
|
|
1089
|
-
return (d >> 16) + (_ >> 16) + (m >> 16) << 16 | 65535 & m;
|
|
1090
|
-
}
|
|
1091
|
-
function bit_rol(d, _) {
|
|
1092
|
-
return d << _ | d >>> 32 - _;
|
|
1093
|
-
}
|
|
1094
|
-
function validateEmail(email) {
|
|
1095
|
-
return /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(email);
|
|
1096
|
-
}
|
|
1097
1119
|
function gravatar(email, def = "mp") {
|
|
1098
1120
|
if (!email) return "";
|
|
1099
1121
|
return `https://www.gravatar.com/avatar/${md5(email)}?d=${def}`;
|
|
@@ -1420,64 +1442,12 @@ function formatDate(date, format = "YYYY-MM-DD H:mm ") {
|
|
|
1420
1442
|
const minutes = offset % 60;
|
|
1421
1443
|
return (offset > 0 ? "-" : "") + `${hours}:${minutes.toString().padStart(2, "0")}`;
|
|
1422
1444
|
}
|
|
1423
|
-
function timezone(
|
|
1424
|
-
const
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
return "IDLW";
|
|
1428
|
-
case -11:
|
|
1429
|
-
return "SST";
|
|
1430
|
-
case -10:
|
|
1431
|
-
return "HST";
|
|
1432
|
-
case -9:
|
|
1433
|
-
return "AKST";
|
|
1434
|
-
case -8:
|
|
1435
|
-
return "PST";
|
|
1436
|
-
case -7:
|
|
1437
|
-
return "MST";
|
|
1438
|
-
case -6:
|
|
1439
|
-
return "CST";
|
|
1440
|
-
case -5:
|
|
1441
|
-
return "EST";
|
|
1442
|
-
case -4:
|
|
1443
|
-
return "AST";
|
|
1444
|
-
case -3:
|
|
1445
|
-
return "ART";
|
|
1446
|
-
case -2:
|
|
1447
|
-
return "FNT";
|
|
1448
|
-
case -1:
|
|
1449
|
-
return "AZOT";
|
|
1450
|
-
case 0:
|
|
1451
|
-
return "UTC";
|
|
1452
|
-
case 1:
|
|
1453
|
-
return "CET";
|
|
1454
|
-
case 2:
|
|
1455
|
-
return "EET";
|
|
1456
|
-
case 3:
|
|
1457
|
-
return "MSK";
|
|
1458
|
-
case 4:
|
|
1459
|
-
return "SAMT";
|
|
1460
|
-
case 5:
|
|
1461
|
-
return "YEKT";
|
|
1462
|
-
case 6:
|
|
1463
|
-
return "OMST";
|
|
1464
|
-
case 7:
|
|
1465
|
-
return "KRAT";
|
|
1466
|
-
case 8:
|
|
1467
|
-
return "CST";
|
|
1468
|
-
case 9:
|
|
1469
|
-
return "JST";
|
|
1470
|
-
case 10:
|
|
1471
|
-
return "AEST";
|
|
1472
|
-
case 11:
|
|
1473
|
-
return "SBT";
|
|
1474
|
-
case 12:
|
|
1475
|
-
return "NZST";
|
|
1476
|
-
default:
|
|
1477
|
-
return "";
|
|
1478
|
-
}
|
|
1445
|
+
function timezone(date2) {
|
|
1446
|
+
const formatter = new Intl.DateTimeFormat("en-US", { timeZoneName: "short" });
|
|
1447
|
+
const formattedDate = formatter.format(date2);
|
|
1448
|
+
return formattedDate.split(" ").pop() || "";
|
|
1479
1449
|
}
|
|
1480
|
-
return format.replaceAll("YYYY", date.getFullYear().toString()).replaceAll("YY", date.getFullYear().toString().slice(2)).replaceAll("MMMM", month(date.getMonth())).replaceAll("MMM", month(date.getMonth()).slice(0, 2)).replaceAll("MM", (date.getMonth() + 1).toString().padStart(2, "0")).replaceAll("M", (date.getMonth() + 1).toString()).replaceAll("DDD", doy(date).toString()).replaceAll("DD", date.getDate().toString().padStart(2, "0")).replaceAll("Do", suffix(date.getDate())).replaceAll("D", date.getDate().toString()).replaceAll("dddd", day(date.getDay())).replaceAll("ddd", day(date.getDay()).slice(0, 2)).replaceAll("dd", date.getDate().toString().padStart(2, "0")).replaceAll("d", date.getDay().toString()).replaceAll("HH", date.getHours().toString().padStart(2, "0")).replaceAll("H", date.getHours().toString()).replaceAll("hh", (date.getHours() > 12 ? date.getHours() - 12 : date.getHours()).toString().padStart(2, "0")).replaceAll("h", (date.getHours() > 12 ? date.getHours() - 12 : date.getHours()).toString()).replaceAll("mm", date.getMinutes().toString().padStart(2, "0")).replaceAll("m", date.getMinutes().toString()).replaceAll("ss", date.getSeconds().toString().padStart(2, "0")).replaceAll("s", date.getSeconds().toString()).replaceAll("SSS", date.getMilliseconds().toString()).replaceAll("SS", date.getMilliseconds().toString().slice(0, 1)).replaceAll("S", date.getMilliseconds().toString()[0]).replaceAll("A", date.getHours() >= 12 ? "PM" : "AM").replaceAll("a", date.getHours() >= 12 ? "pm" : "am").replaceAll("ZZ", tzOffset(date.getTimezoneOffset()).replace(":", "")).replaceAll("Z", tzOffset(date.getTimezoneOffset())).replaceAll("z", timezone(date
|
|
1450
|
+
return format.replaceAll("YYYY", date.getFullYear().toString()).replaceAll("YY", date.getFullYear().toString().slice(2)).replaceAll("MMMM", month(date.getMonth())).replaceAll("MMM", month(date.getMonth()).slice(0, 2)).replaceAll("MM", (date.getMonth() + 1).toString().padStart(2, "0")).replaceAll("M", (date.getMonth() + 1).toString()).replaceAll("DDD", doy(date).toString()).replaceAll("DD", date.getDate().toString().padStart(2, "0")).replaceAll("Do", suffix(date.getDate())).replaceAll("D", date.getDate().toString()).replaceAll("dddd", day(date.getDay())).replaceAll("ddd", day(date.getDay()).slice(0, 2)).replaceAll("dd", date.getDate().toString().padStart(2, "0")).replaceAll("d", date.getDay().toString()).replaceAll("HH", date.getHours().toString().padStart(2, "0")).replaceAll("H", date.getHours().toString()).replaceAll("hh", (date.getHours() > 12 ? date.getHours() - 12 : date.getHours()).toString().padStart(2, "0")).replaceAll("h", (date.getHours() > 12 ? date.getHours() - 12 : date.getHours()).toString()).replaceAll("mm", date.getMinutes().toString().padStart(2, "0")).replaceAll("m", date.getMinutes().toString()).replaceAll("ss", date.getSeconds().toString().padStart(2, "0")).replaceAll("s", date.getSeconds().toString()).replaceAll("SSS", date.getMilliseconds().toString()).replaceAll("SS", date.getMilliseconds().toString().slice(0, 1)).replaceAll("S", date.getMilliseconds().toString()[0]).replaceAll("A", date.getHours() >= 12 ? "PM" : "AM").replaceAll("a", date.getHours() >= 12 ? "pm" : "am").replaceAll("ZZ", tzOffset(date.getTimezoneOffset()).replace(":", "")).replaceAll("Z", tzOffset(date.getTimezoneOffset())).replaceAll("z", timezone(date));
|
|
1481
1451
|
}
|
|
1482
1452
|
function sleep(ms) {
|
|
1483
1453
|
return new Promise((res) => setTimeout(res, ms));
|