@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.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
- const props = r.match(/(?:[^,"']+|"[^"]*"|'[^']*')+/g);
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) => ({ ...acc, [h2]: props[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(offset) {
1424
- const hours = offset / 60;
1425
- switch (hours) {
1426
- case -12:
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.getTimezoneOffset()));
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));