@ztimson/utils 0.23.23 → 0.24.1
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/cache.d.ts +0 -9
- package/dist/index.cjs +290 -271
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +196 -177
- package/dist/index.mjs.map +1 -1
- package/dist/jwt.d.ts +1 -1
- package/dist/misc.d.ts +7 -0
- package/dist/search.d.ts +1 -0
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defNormalProp = (obj, key,
|
|
3
|
-
var __publicField = (obj, key,
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
4
|
class ArgParser {
|
|
5
5
|
/**
|
|
6
6
|
* Create a unix-like argument parser to extract flags from the argument list. Can also create help messages.
|
|
@@ -49,7 +49,7 @@ class ArgParser {
|
|
|
49
49
|
let arg = queue.splice(0, 1)[0];
|
|
50
50
|
if (arg[0] == "-") {
|
|
51
51
|
if (arg[1] != "-" && arg.length > 2) {
|
|
52
|
-
queue = [...arg.substring(2).split("").map((
|
|
52
|
+
queue = [...arg.substring(2).split("").map((a) => `-${a}`), ...queue];
|
|
53
53
|
arg = `-${arg[1]}`;
|
|
54
54
|
}
|
|
55
55
|
const combined = arg.split("=");
|
|
@@ -61,9 +61,9 @@ class ArgParser {
|
|
|
61
61
|
extras.push(arg);
|
|
62
62
|
continue;
|
|
63
63
|
}
|
|
64
|
-
const
|
|
65
|
-
if (
|
|
66
|
-
parsed[argDef.name] =
|
|
64
|
+
const value = argDef.default === false ? true : argDef.default === true ? false : queue.splice(queue.findIndex((q) => q[0] != "-"), 1)[0] || argDef.default;
|
|
65
|
+
if (value == null) parsed["_error"].push(`Option missing value: ${argDef.name || combined[0]}`);
|
|
66
|
+
parsed[argDef.name] = value;
|
|
67
67
|
} else {
|
|
68
68
|
const c = this.commands.find((command) => command.name == arg);
|
|
69
69
|
if (!!c) {
|
|
@@ -122,17 +122,17 @@ function clean(obj, undefinedOnly = false) {
|
|
|
122
122
|
if (Array.isArray(obj)) {
|
|
123
123
|
obj = obj.filter((o) => o != null);
|
|
124
124
|
} else {
|
|
125
|
-
Object.entries(obj).forEach(([key,
|
|
126
|
-
if (undefinedOnly &&
|
|
125
|
+
Object.entries(obj).forEach(([key, value]) => {
|
|
126
|
+
if (undefinedOnly && value === void 0 || !undefinedOnly && value == null) delete obj[key];
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
129
|
return obj;
|
|
130
130
|
}
|
|
131
|
-
function deepCopy(
|
|
131
|
+
function deepCopy(value) {
|
|
132
132
|
try {
|
|
133
|
-
return structuredClone(
|
|
133
|
+
return structuredClone(value);
|
|
134
134
|
} catch {
|
|
135
|
-
return JSON.parse(JSONSanitize(
|
|
135
|
+
return JSON.parse(JSONSanitize(value));
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
138
|
function deepMerge(target, ...sources) {
|
|
@@ -148,22 +148,22 @@ function deepMerge(target, ...sources) {
|
|
|
148
148
|
});
|
|
149
149
|
return target;
|
|
150
150
|
}
|
|
151
|
-
function dotNotation(obj,
|
|
152
|
-
if (obj == null || !
|
|
153
|
-
return
|
|
154
|
-
if (
|
|
155
|
-
if (!(obj2 == null ? void 0 : obj2.hasOwnProperty(
|
|
151
|
+
function dotNotation(obj, prop, set) {
|
|
152
|
+
if (obj == null || !prop) return void 0;
|
|
153
|
+
return prop.split(/[.[\]]/g).filter((prop2) => prop2.length).reduce((obj2, prop2, i, arr) => {
|
|
154
|
+
if (prop2[0] == '"' || prop2[0] == "'") prop2 = prop2.slice(1, -1);
|
|
155
|
+
if (!(obj2 == null ? void 0 : obj2.hasOwnProperty(prop2))) {
|
|
156
156
|
if (set == void 0) return void 0;
|
|
157
|
-
obj2[
|
|
157
|
+
obj2[prop2] = {};
|
|
158
158
|
}
|
|
159
159
|
if (set !== void 0 && i == arr.length - 1)
|
|
160
|
-
return obj2[
|
|
161
|
-
return obj2[
|
|
160
|
+
return obj2[prop2] = set;
|
|
161
|
+
return obj2[prop2];
|
|
162
162
|
}, obj);
|
|
163
163
|
}
|
|
164
164
|
function encodeQuery(data) {
|
|
165
165
|
return Object.entries(data).map(
|
|
166
|
-
([key,
|
|
166
|
+
([key, value]) => encodeURIComponent(key) + "=" + encodeURIComponent(value)
|
|
167
167
|
).join("&");
|
|
168
168
|
}
|
|
169
169
|
function flattenObj(obj, parent, result = {}) {
|
|
@@ -182,7 +182,7 @@ function flattenObj(obj, parent, result = {}) {
|
|
|
182
182
|
}
|
|
183
183
|
function formData(target) {
|
|
184
184
|
const data = new FormData();
|
|
185
|
-
Object.entries(target).forEach(([key,
|
|
185
|
+
Object.entries(target).forEach(([key, value]) => data.append(key, value));
|
|
186
186
|
return data;
|
|
187
187
|
}
|
|
188
188
|
function includes(target, values, allowMissing = false) {
|
|
@@ -196,13 +196,13 @@ function includes(target, values, allowMissing = false) {
|
|
|
196
196
|
if (type == "function") return target.toString() == values.toString();
|
|
197
197
|
return target == values;
|
|
198
198
|
}
|
|
199
|
-
function isEqual(
|
|
200
|
-
const ta = typeof
|
|
201
|
-
if (ta != "object" ||
|
|
202
|
-
return ta == "function" && tb == "function" ?
|
|
203
|
-
const keys = Object.keys(
|
|
204
|
-
if (keys.length != Object.keys(
|
|
205
|
-
return Object.keys(
|
|
199
|
+
function isEqual(a, b) {
|
|
200
|
+
const ta = typeof a, tb = typeof b;
|
|
201
|
+
if (ta != "object" || a == null || (tb != "object" || b == null))
|
|
202
|
+
return ta == "function" && tb == "function" ? a.toString() == b.toString() : a === b;
|
|
203
|
+
const keys = Object.keys(a);
|
|
204
|
+
if (keys.length != Object.keys(b).length) return false;
|
|
205
|
+
return Object.keys(a).every((key) => isEqual(a[key], b[key]));
|
|
206
206
|
}
|
|
207
207
|
function mixin(target, constructors) {
|
|
208
208
|
constructors.forEach((c) => {
|
|
@@ -227,39 +227,39 @@ function JSONSerialize(obj) {
|
|
|
227
227
|
return obj;
|
|
228
228
|
}
|
|
229
229
|
function JSONSanitize(obj, space) {
|
|
230
|
-
return JSON.stringify(obj, (key,
|
|
231
|
-
return
|
|
230
|
+
return JSON.stringify(obj, (key, value) => {
|
|
231
|
+
return value;
|
|
232
232
|
}, space);
|
|
233
233
|
}
|
|
234
234
|
function addUnique(array, el) {
|
|
235
235
|
if (array.indexOf(el) === -1) array.push(el);
|
|
236
236
|
return array;
|
|
237
237
|
}
|
|
238
|
-
function arrayDiff(
|
|
238
|
+
function arrayDiff(a, b) {
|
|
239
239
|
return makeUnique([
|
|
240
|
-
...
|
|
241
|
-
...
|
|
240
|
+
...a.filter((v1) => !b.includes((v2) => isEqual(v1, v2))),
|
|
241
|
+
...b.filter((v1) => !a.includes((v2) => isEqual(v1, v2)))
|
|
242
242
|
]);
|
|
243
243
|
}
|
|
244
|
-
function caseInsensitiveSort(
|
|
245
|
-
return function(
|
|
246
|
-
const aVal = dotNotation(
|
|
247
|
-
const bVal = dotNotation(
|
|
244
|
+
function caseInsensitiveSort(prop) {
|
|
245
|
+
return function(a, b) {
|
|
246
|
+
const aVal = dotNotation(a, prop);
|
|
247
|
+
const bVal = dotNotation(b, prop);
|
|
248
248
|
if (typeof aVal !== "string" || typeof bVal !== "string") return 1;
|
|
249
249
|
return aVal.toLowerCase().localeCompare(bVal.toLowerCase());
|
|
250
250
|
};
|
|
251
251
|
}
|
|
252
|
-
function findByProp(
|
|
253
|
-
return (
|
|
252
|
+
function findByProp(prop, value) {
|
|
253
|
+
return (v) => isEqual(dotNotation(v, prop), value);
|
|
254
254
|
}
|
|
255
255
|
function flattenArr(arr, result = []) {
|
|
256
256
|
arr.forEach((el) => Array.isArray(el) ? flattenArr(el, result) : result.push(el));
|
|
257
257
|
return result;
|
|
258
258
|
}
|
|
259
|
-
function sortByProp(
|
|
260
|
-
return function(
|
|
261
|
-
const aVal = dotNotation(
|
|
262
|
-
const bVal = dotNotation(
|
|
259
|
+
function sortByProp(prop, reverse = false) {
|
|
260
|
+
return function(a, b) {
|
|
261
|
+
const aVal = dotNotation(a, prop);
|
|
262
|
+
const bVal = dotNotation(b, prop);
|
|
263
263
|
if (typeof aVal == "number" && typeof bVal == "number")
|
|
264
264
|
return (reverse ? -1 : 1) * (aVal - bVal);
|
|
265
265
|
if (aVal > bVal) return reverse ? -1 : 1;
|
|
@@ -273,8 +273,8 @@ function makeUnique(arr) {
|
|
|
273
273
|
}
|
|
274
274
|
return arr;
|
|
275
275
|
}
|
|
276
|
-
function makeArray(
|
|
277
|
-
return Array.isArray(
|
|
276
|
+
function makeArray(value) {
|
|
277
|
+
return Array.isArray(value) ? value : [value];
|
|
278
278
|
}
|
|
279
279
|
class ASet extends Array {
|
|
280
280
|
/** Number of elements in set */
|
|
@@ -387,7 +387,6 @@ class ASet extends Array {
|
|
|
387
387
|
class Cache {
|
|
388
388
|
/**
|
|
389
389
|
* Create new cache
|
|
390
|
-
*
|
|
391
390
|
* @param {keyof T} key Default property to use as primary key
|
|
392
391
|
* @param options
|
|
393
392
|
*/
|
|
@@ -397,7 +396,6 @@ class Cache {
|
|
|
397
396
|
__publicField(this, "complete", false);
|
|
398
397
|
/**
|
|
399
398
|
* Get all cached items
|
|
400
|
-
*
|
|
401
399
|
* @return {T[]} Array of items
|
|
402
400
|
*/
|
|
403
401
|
__publicField(this, "values", this.all());
|
|
@@ -415,24 +413,23 @@ class Cache {
|
|
|
415
413
|
}
|
|
416
414
|
}
|
|
417
415
|
return new Proxy(this, {
|
|
418
|
-
get: (target,
|
|
419
|
-
if (
|
|
420
|
-
return deepCopy(target.store[
|
|
416
|
+
get: (target, prop) => {
|
|
417
|
+
if (prop in target) return target[prop];
|
|
418
|
+
return deepCopy(target.store[prop]);
|
|
421
419
|
},
|
|
422
|
-
set: (target,
|
|
423
|
-
if (
|
|
424
|
-
else this.set(
|
|
420
|
+
set: (target, prop, value) => {
|
|
421
|
+
if (prop in target) target[prop] = value;
|
|
422
|
+
else this.set(prop, value);
|
|
425
423
|
return true;
|
|
426
424
|
}
|
|
427
425
|
});
|
|
428
426
|
}
|
|
429
|
-
getKey(
|
|
427
|
+
getKey(value) {
|
|
430
428
|
if (!this.key) throw new Error("No key defined");
|
|
431
|
-
return
|
|
429
|
+
return value[this.key];
|
|
432
430
|
}
|
|
433
431
|
/**
|
|
434
432
|
* Get all cached items
|
|
435
|
-
*
|
|
436
433
|
* @return {T[]} Array of items
|
|
437
434
|
*/
|
|
438
435
|
all() {
|
|
@@ -440,25 +437,24 @@ class Cache {
|
|
|
440
437
|
}
|
|
441
438
|
/**
|
|
442
439
|
* Add a new item to the cache. Like set, but finds key automatically
|
|
443
|
-
*
|
|
444
440
|
* @param {T} value Item to add to cache
|
|
445
441
|
* @param {number | undefined} ttl Override default expiry
|
|
446
442
|
* @return {this}
|
|
447
443
|
*/
|
|
448
|
-
add(
|
|
449
|
-
const key = this.getKey(
|
|
450
|
-
this.set(key,
|
|
444
|
+
add(value, ttl = this.ttl) {
|
|
445
|
+
const key = this.getKey(value);
|
|
446
|
+
this.set(key, value, ttl);
|
|
451
447
|
return this;
|
|
452
448
|
}
|
|
453
449
|
/**
|
|
454
450
|
* Add several rows to the cache
|
|
455
|
-
*
|
|
456
451
|
* @param {T[]} rows Several items that will be cached using the default key
|
|
457
452
|
* @param complete Mark cache as complete & reliable, defaults to true
|
|
458
453
|
* @return {this}
|
|
459
454
|
*/
|
|
460
|
-
addAll(
|
|
461
|
-
|
|
455
|
+
addAll(rows, complete = true) {
|
|
456
|
+
this.clear();
|
|
457
|
+
rows.forEach((r) => this.add(r));
|
|
462
458
|
this.complete = complete;
|
|
463
459
|
return this;
|
|
464
460
|
}
|
|
@@ -470,7 +466,6 @@ class Cache {
|
|
|
470
466
|
}
|
|
471
467
|
/**
|
|
472
468
|
* Delete an item from the cache
|
|
473
|
-
*
|
|
474
469
|
* @param {K} key Item's primary key
|
|
475
470
|
*/
|
|
476
471
|
delete(key) {
|
|
@@ -495,7 +490,6 @@ class Cache {
|
|
|
495
490
|
}
|
|
496
491
|
/**
|
|
497
492
|
* Get a list of cached keys
|
|
498
|
-
*
|
|
499
493
|
* @return {K[]} Array of keys
|
|
500
494
|
*/
|
|
501
495
|
keys() {
|
|
@@ -503,7 +497,6 @@ class Cache {
|
|
|
503
497
|
}
|
|
504
498
|
/**
|
|
505
499
|
* Get map of cached items
|
|
506
|
-
*
|
|
507
500
|
* @return {Record<K, T>}
|
|
508
501
|
*/
|
|
509
502
|
map() {
|
|
@@ -511,14 +504,13 @@ class Cache {
|
|
|
511
504
|
}
|
|
512
505
|
/**
|
|
513
506
|
* Add an item to the cache manually specifying the key
|
|
514
|
-
*
|
|
515
507
|
* @param {K} key Key item will be cached under
|
|
516
508
|
* @param {T} value Item to cache
|
|
517
509
|
* @param {number | undefined} ttl Override default expiry in seconds
|
|
518
510
|
* @return {this}
|
|
519
511
|
*/
|
|
520
|
-
set(key,
|
|
521
|
-
this.store[key] =
|
|
512
|
+
set(key, value, ttl = this.options.ttl) {
|
|
513
|
+
this.store[key] = value;
|
|
522
514
|
if (this.options.storageKey && this.options.storage)
|
|
523
515
|
this.options.storage.setItem(this.options.storageKey, JSON.stringify(this.store));
|
|
524
516
|
if (ttl) setTimeout(() => {
|
|
@@ -531,8 +523,8 @@ class Cache {
|
|
|
531
523
|
function blackOrWhite(background) {
|
|
532
524
|
const exploded = background == null ? void 0 : background.match(background.length >= 6 ? /\w\w/g : /\w/g);
|
|
533
525
|
if (!exploded) return "black";
|
|
534
|
-
const [
|
|
535
|
-
const luminance = (0.299 *
|
|
526
|
+
const [r, g, b] = exploded.map((hex) => parseInt(hex, 16));
|
|
527
|
+
const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
|
|
536
528
|
return luminance > 0.5 ? "black" : "white";
|
|
537
529
|
}
|
|
538
530
|
const LETTER_LIST = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
@@ -609,16 +601,16 @@ function strSplice(str, start, deleteCount, insert = "") {
|
|
|
609
601
|
const after = str.slice(start + deleteCount);
|
|
610
602
|
return before + insert + after;
|
|
611
603
|
}
|
|
612
|
-
function matchAll(
|
|
613
|
-
if (typeof
|
|
614
|
-
|
|
604
|
+
function matchAll(value, regex) {
|
|
605
|
+
if (typeof regex === "string") {
|
|
606
|
+
regex = new RegExp(regex, "g");
|
|
615
607
|
}
|
|
616
|
-
if (!
|
|
608
|
+
if (!regex.global) {
|
|
617
609
|
throw new TypeError("Regular expression must be global.");
|
|
618
610
|
}
|
|
619
611
|
let ret = [];
|
|
620
612
|
let match;
|
|
621
|
-
while ((match =
|
|
613
|
+
while ((match = regex.exec(value)) !== null) {
|
|
622
614
|
ret.push(match);
|
|
623
615
|
}
|
|
624
616
|
return ret;
|
|
@@ -646,11 +638,11 @@ function parseUrl(url) {
|
|
|
646
638
|
return groups;
|
|
647
639
|
}
|
|
648
640
|
function md5(d) {
|
|
649
|
-
var
|
|
650
|
-
return
|
|
641
|
+
var r = M(V(Y(X(d), 8 * d.length)));
|
|
642
|
+
return r.toLowerCase();
|
|
651
643
|
}
|
|
652
644
|
function M(d) {
|
|
653
|
-
for (var _, m = "0123456789ABCDEF", f = "",
|
|
645
|
+
for (var _, m = "0123456789ABCDEF", f = "", r = 0; r < d.length; r++) _ = d.charCodeAt(r), f += m.charAt(_ >>> 4 & 15) + m.charAt(15 & _);
|
|
654
646
|
return f;
|
|
655
647
|
}
|
|
656
648
|
function X(d) {
|
|
@@ -664,26 +656,26 @@ function V(d) {
|
|
|
664
656
|
}
|
|
665
657
|
function Y(d, _) {
|
|
666
658
|
d[_ >> 5] |= 128 << _ % 32, d[14 + (_ + 64 >>> 9 << 4)] = _;
|
|
667
|
-
for (var m = 1732584193, f = -271733879,
|
|
668
|
-
var h = m, t = f, g =
|
|
669
|
-
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,
|
|
659
|
+
for (var m = 1732584193, f = -271733879, r = -1732584194, i = 271733878, n = 0; n < d.length; n += 16) {
|
|
660
|
+
var h = m, t = f, g = r, e = i;
|
|
661
|
+
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);
|
|
670
662
|
}
|
|
671
|
-
return Array(m, f,
|
|
663
|
+
return Array(m, f, r, i);
|
|
672
664
|
}
|
|
673
|
-
function md5_cmn(d, _, m, f,
|
|
674
|
-
return safe_add(bit_rol(safe_add(safe_add(_, d), safe_add(f, i)),
|
|
665
|
+
function md5_cmn(d, _, m, f, r, i) {
|
|
666
|
+
return safe_add(bit_rol(safe_add(safe_add(_, d), safe_add(f, i)), r), m);
|
|
675
667
|
}
|
|
676
|
-
function md5_ff(d, _, m, f,
|
|
677
|
-
return md5_cmn(_ & m | ~_ & f, d, _,
|
|
668
|
+
function md5_ff(d, _, m, f, r, i, n) {
|
|
669
|
+
return md5_cmn(_ & m | ~_ & f, d, _, r, i, n);
|
|
678
670
|
}
|
|
679
|
-
function md5_gg(d, _, m, f,
|
|
680
|
-
return md5_cmn(_ & f | m & ~f, d, _,
|
|
671
|
+
function md5_gg(d, _, m, f, r, i, n) {
|
|
672
|
+
return md5_cmn(_ & f | m & ~f, d, _, r, i, n);
|
|
681
673
|
}
|
|
682
|
-
function md5_hh(d, _, m, f,
|
|
683
|
-
return md5_cmn(_ ^ m ^ f, d, _,
|
|
674
|
+
function md5_hh(d, _, m, f, r, i, n) {
|
|
675
|
+
return md5_cmn(_ ^ m ^ f, d, _, r, i, n);
|
|
684
676
|
}
|
|
685
|
-
function md5_ii(d, _, m, f,
|
|
686
|
-
return md5_cmn(m ^ (_ | ~f), d, _,
|
|
677
|
+
function md5_ii(d, _, m, f, r, i, n) {
|
|
678
|
+
return md5_cmn(m ^ (_ | ~f), d, _, r, i, n);
|
|
687
679
|
}
|
|
688
680
|
function safe_add(d, _) {
|
|
689
681
|
var m = (65535 & d) + (65535 & _);
|
|
@@ -716,20 +708,20 @@ function fromCsv(csv, hasHeaders = true) {
|
|
|
716
708
|
columns.push(current.trim());
|
|
717
709
|
return columns.map((col) => col.replace(/^"|"$/g, "").replace(/""/g, '"'));
|
|
718
710
|
}
|
|
719
|
-
const
|
|
711
|
+
const rows = [];
|
|
720
712
|
let currentRow = "", inQuotes = false;
|
|
721
713
|
for (const char of csv.replace(/\r\n/g, "\n")) {
|
|
722
714
|
if (char === '"') inQuotes = !inQuotes;
|
|
723
715
|
if (char === "\n" && !inQuotes) {
|
|
724
|
-
|
|
716
|
+
rows.push(currentRow.trim());
|
|
725
717
|
currentRow = "";
|
|
726
718
|
} else currentRow += char;
|
|
727
719
|
}
|
|
728
|
-
if (currentRow)
|
|
729
|
-
let headers = hasHeaders ?
|
|
720
|
+
if (currentRow) rows.push(currentRow.trim());
|
|
721
|
+
let headers = hasHeaders ? rows.splice(0, 1)[0] : null;
|
|
730
722
|
if (headers) headers = (_a = headers.match(/(?:[^,"']+|"(?:[^"]|"")*"|'(?:[^']|'')*')+/g)) == null ? void 0 : _a.map((h) => h.trim());
|
|
731
|
-
return
|
|
732
|
-
const props = parseLine(
|
|
723
|
+
return rows.map((r) => {
|
|
724
|
+
const props = parseLine(r);
|
|
733
725
|
const h = headers || Array(props.length).fill(null).map((_, i) => {
|
|
734
726
|
let letter = "";
|
|
735
727
|
const first = i / 26;
|
|
@@ -749,18 +741,18 @@ function toCsv(target, flatten = true) {
|
|
|
749
741
|
return [
|
|
750
742
|
headers.join(","),
|
|
751
743
|
...t.map((row) => headers.map((h) => {
|
|
752
|
-
const
|
|
753
|
-
if (
|
|
754
|
-
if (typeof
|
|
755
|
-
if (typeof
|
|
756
|
-
return
|
|
744
|
+
const value = dotNotation(row, h);
|
|
745
|
+
if (value == null) return "";
|
|
746
|
+
if (typeof value == "object") return `"${JSONSanitize(value).replaceAll('"', '""')}"`;
|
|
747
|
+
if (typeof value == "string" && /[\n",]/g.test(value)) return `"${value.replaceAll('"', '""')}"`;
|
|
748
|
+
return value;
|
|
757
749
|
}).join(","))
|
|
758
750
|
].join("\n");
|
|
759
751
|
}
|
|
760
752
|
class PromiseProgress extends Promise {
|
|
761
753
|
constructor(executor) {
|
|
762
754
|
super((resolve, reject) => executor(
|
|
763
|
-
(
|
|
755
|
+
(value) => resolve(value),
|
|
764
756
|
(reason) => reject(reason),
|
|
765
757
|
(progress) => this.progress = progress
|
|
766
758
|
));
|
|
@@ -770,10 +762,10 @@ class PromiseProgress extends Promise {
|
|
|
770
762
|
get progress() {
|
|
771
763
|
return this._progress;
|
|
772
764
|
}
|
|
773
|
-
set progress(
|
|
774
|
-
if (
|
|
775
|
-
this._progress =
|
|
776
|
-
this.listeners.forEach((l) => l(
|
|
765
|
+
set progress(p) {
|
|
766
|
+
if (p == this._progress) return;
|
|
767
|
+
this._progress = p;
|
|
768
|
+
this.listeners.forEach((l) => l(p));
|
|
777
769
|
}
|
|
778
770
|
static from(promise) {
|
|
779
771
|
if (promise instanceof PromiseProgress) return promise;
|
|
@@ -781,7 +773,7 @@ class PromiseProgress extends Promise {
|
|
|
781
773
|
}
|
|
782
774
|
from(promise) {
|
|
783
775
|
const newPromise = PromiseProgress.from(promise);
|
|
784
|
-
this.onProgress((
|
|
776
|
+
this.onProgress((p) => newPromise.progress = p);
|
|
785
777
|
return newPromise;
|
|
786
778
|
}
|
|
787
779
|
onProgress(callback) {
|
|
@@ -801,14 +793,14 @@ class PromiseProgress extends Promise {
|
|
|
801
793
|
}
|
|
802
794
|
function adjustedInterval(cb, ms) {
|
|
803
795
|
let cancel = false, timeout = null;
|
|
804
|
-
const
|
|
796
|
+
const p = async () => {
|
|
805
797
|
if (cancel) return;
|
|
806
798
|
const start = (/* @__PURE__ */ new Date()).getTime();
|
|
807
799
|
await cb();
|
|
808
800
|
const end = (/* @__PURE__ */ new Date()).getTime();
|
|
809
|
-
timeout = setTimeout(() =>
|
|
801
|
+
timeout = setTimeout(() => p(), ms - (end - start) || 1);
|
|
810
802
|
};
|
|
811
|
-
|
|
803
|
+
p();
|
|
812
804
|
return () => {
|
|
813
805
|
cancel = true;
|
|
814
806
|
if (timeout) clearTimeout(timeout);
|
|
@@ -934,12 +926,12 @@ function downloadFile(blob, name) {
|
|
|
934
926
|
URL.revokeObjectURL(url);
|
|
935
927
|
}
|
|
936
928
|
function downloadUrl(href, name) {
|
|
937
|
-
const
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
document.body.appendChild(
|
|
941
|
-
|
|
942
|
-
document.body.removeChild(
|
|
929
|
+
const a = document.createElement("a");
|
|
930
|
+
a.href = href;
|
|
931
|
+
a.download = name || href.split("/").pop();
|
|
932
|
+
document.body.appendChild(a);
|
|
933
|
+
a.click();
|
|
934
|
+
document.body.removeChild(a);
|
|
943
935
|
}
|
|
944
936
|
function fileBrowser(options = {}) {
|
|
945
937
|
return new Promise((res) => {
|
|
@@ -980,7 +972,7 @@ function uploadWithProgress(options) {
|
|
|
980
972
|
xhr.addEventListener("error", () => rej(JSONAttemptParse(xhr.responseText)));
|
|
981
973
|
xhr.addEventListener("timeout", () => rej({ error: "Request timed out" }));
|
|
982
974
|
xhr.open("POST", options.url);
|
|
983
|
-
Object.entries(options.headers || {}).forEach(([key,
|
|
975
|
+
Object.entries(options.headers || {}).forEach(([key, value]) => xhr.setRequestHeader(key, value));
|
|
984
976
|
xhr.send(formData2);
|
|
985
977
|
});
|
|
986
978
|
}
|
|
@@ -1314,7 +1306,7 @@ const _Http = class _Http {
|
|
|
1314
1306
|
__publicField(_Http, "interceptors", {});
|
|
1315
1307
|
__publicField(_Http, "headers", {});
|
|
1316
1308
|
let Http = _Http;
|
|
1317
|
-
function
|
|
1309
|
+
function decodeJwt(token) {
|
|
1318
1310
|
const base64 = token.split(".")[1].replace(/-/g, "+").replace(/_/g, "/");
|
|
1319
1311
|
return JSONAttemptParse(decodeURIComponent(atob(base64).split("").map(function(c) {
|
|
1320
1312
|
return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2);
|
|
@@ -1410,9 +1402,9 @@ const _Logger = class _Logger extends TypedEmitter {
|
|
|
1410
1402
|
__publicField(_Logger, "LOG_LEVEL", 4);
|
|
1411
1403
|
let Logger = _Logger;
|
|
1412
1404
|
function dec2Frac(num) {
|
|
1413
|
-
const gcd = (
|
|
1414
|
-
if (
|
|
1415
|
-
return gcd(
|
|
1405
|
+
const gcd = (a, b) => {
|
|
1406
|
+
if (b < 1e-7) return a;
|
|
1407
|
+
return gcd(b, ~~(a % b));
|
|
1416
1408
|
};
|
|
1417
1409
|
const len = num.toString().length - 2;
|
|
1418
1410
|
let denominator = Math.pow(10, len);
|
|
@@ -1430,12 +1422,16 @@ function fracToDec(frac) {
|
|
|
1430
1422
|
split = split.pop().split("/");
|
|
1431
1423
|
return whole + Number(split[0]) / Number(split[1]);
|
|
1432
1424
|
}
|
|
1425
|
+
function asyncFunction(args, fn) {
|
|
1426
|
+
const keys = Object.keys(args);
|
|
1427
|
+
return new Function(...keys, `return (async (${keys.join(",")}) => { ${fn} })(${keys.join(",")})`)(...keys.map((k) => args[k]));
|
|
1428
|
+
}
|
|
1433
1429
|
function gravatar(email, def = "mp") {
|
|
1434
1430
|
if (!email) return "";
|
|
1435
1431
|
return `https://www.gravatar.com/avatar/${md5(email)}?d=${def}`;
|
|
1436
1432
|
}
|
|
1437
|
-
function escapeRegex(
|
|
1438
|
-
return
|
|
1433
|
+
function escapeRegex(value) {
|
|
1434
|
+
return value.replace(/[.*+?^${}()|\[\]\\]/g, "\\$&");
|
|
1439
1435
|
}
|
|
1440
1436
|
function PE(str, ...args) {
|
|
1441
1437
|
const combined = [];
|
|
@@ -1470,15 +1466,15 @@ class PathEvent {
|
|
|
1470
1466
|
__publicField(this, "methods");
|
|
1471
1467
|
var _a;
|
|
1472
1468
|
if (typeof Event == "object") return Object.assign(this, Event);
|
|
1473
|
-
let [
|
|
1469
|
+
let [p, scope, method] = Event.replaceAll(/\/{2,}/g, "/").split(":");
|
|
1474
1470
|
if (!method) method = scope || "*";
|
|
1475
|
-
if (
|
|
1476
|
-
|
|
1471
|
+
if (p == "*" || !p && method == "*") {
|
|
1472
|
+
p = "";
|
|
1477
1473
|
method = "*";
|
|
1478
1474
|
}
|
|
1479
|
-
let temp =
|
|
1475
|
+
let temp = p.split("/").filter((p2) => !!p2);
|
|
1480
1476
|
this.module = ((_a = temp.splice(0, 1)[0]) == null ? void 0 : _a.toLowerCase()) || "";
|
|
1481
|
-
this.fullPath =
|
|
1477
|
+
this.fullPath = p;
|
|
1482
1478
|
this.path = temp.join("/");
|
|
1483
1479
|
this.name = temp.pop() || "";
|
|
1484
1480
|
this.methods = new ASet(method.split(""));
|
|
@@ -1487,43 +1483,43 @@ class PathEvent {
|
|
|
1487
1483
|
get all() {
|
|
1488
1484
|
return this.methods.has("*");
|
|
1489
1485
|
}
|
|
1490
|
-
set all(
|
|
1491
|
-
|
|
1486
|
+
set all(v) {
|
|
1487
|
+
v ? new ASet(["*"]) : this.methods.delete("*");
|
|
1492
1488
|
}
|
|
1493
1489
|
/** None specified */
|
|
1494
1490
|
get none() {
|
|
1495
1491
|
return this.methods.has("n");
|
|
1496
1492
|
}
|
|
1497
|
-
set none(
|
|
1498
|
-
|
|
1493
|
+
set none(v) {
|
|
1494
|
+
v ? this.methods = new ASet(["n"]) : this.methods.delete("n");
|
|
1499
1495
|
}
|
|
1500
1496
|
/** Create method specified */
|
|
1501
1497
|
get create() {
|
|
1502
1498
|
return !this.methods.has("n") && (this.methods.has("*") || this.methods.has("c"));
|
|
1503
1499
|
}
|
|
1504
|
-
set create(
|
|
1505
|
-
|
|
1500
|
+
set create(v) {
|
|
1501
|
+
v ? this.methods.delete("n").add("c") : this.methods.delete("c");
|
|
1506
1502
|
}
|
|
1507
1503
|
/** Read method specified */
|
|
1508
1504
|
get read() {
|
|
1509
1505
|
return !this.methods.has("n") && (this.methods.has("*") || this.methods.has("r"));
|
|
1510
1506
|
}
|
|
1511
|
-
set read(
|
|
1512
|
-
|
|
1507
|
+
set read(v) {
|
|
1508
|
+
v ? this.methods.delete("n").add("r") : this.methods.delete("r");
|
|
1513
1509
|
}
|
|
1514
1510
|
/** Update method specified */
|
|
1515
1511
|
get update() {
|
|
1516
1512
|
return !this.methods.has("n") && (this.methods.has("*") || this.methods.has("u"));
|
|
1517
1513
|
}
|
|
1518
|
-
set update(
|
|
1519
|
-
|
|
1514
|
+
set update(v) {
|
|
1515
|
+
v ? this.methods.delete("n").add("u") : this.methods.delete("u");
|
|
1520
1516
|
}
|
|
1521
1517
|
/** Delete method specified */
|
|
1522
1518
|
get delete() {
|
|
1523
1519
|
return !this.methods.has("n") && (this.methods.has("*") || this.methods.has("d"));
|
|
1524
1520
|
}
|
|
1525
|
-
set delete(
|
|
1526
|
-
|
|
1521
|
+
set delete(v) {
|
|
1522
|
+
v ? this.methods.delete("n").add("d") : this.methods.delete("d");
|
|
1527
1523
|
}
|
|
1528
1524
|
/**
|
|
1529
1525
|
* Combine multiple events into one parsed object. Longest path takes precedent, but all subsequent methods are
|
|
@@ -1534,14 +1530,14 @@ class PathEvent {
|
|
|
1534
1530
|
*/
|
|
1535
1531
|
static combine(...paths) {
|
|
1536
1532
|
let hitNone = false;
|
|
1537
|
-
const combined = paths.map((
|
|
1533
|
+
const combined = paths.map((p) => new PathEvent(p)).toSorted((p1, p2) => {
|
|
1538
1534
|
const l1 = p1.fullPath.length, l2 = p2.fullPath.length;
|
|
1539
1535
|
return l1 < l2 ? 1 : l1 > l2 ? -1 : 0;
|
|
1540
|
-
}).reduce((acc,
|
|
1541
|
-
if (
|
|
1542
|
-
if (!acc) return
|
|
1536
|
+
}).reduce((acc, p) => {
|
|
1537
|
+
if (p.none) hitNone = true;
|
|
1538
|
+
if (!acc) return p;
|
|
1543
1539
|
if (hitNone) return acc;
|
|
1544
|
-
acc.methods = [...acc.methods, ...
|
|
1540
|
+
acc.methods = [...acc.methods, ...p.methods];
|
|
1545
1541
|
return acc;
|
|
1546
1542
|
}, null);
|
|
1547
1543
|
combined.methods = new ASet(combined.methods);
|
|
@@ -1572,12 +1568,12 @@ class PathEvent {
|
|
|
1572
1568
|
static has(target, ...has) {
|
|
1573
1569
|
const parsedRequired = makeArray(has).map((pe) => new PathEvent(pe));
|
|
1574
1570
|
const parsedTarget = makeArray(target).map((pe) => new PathEvent(pe));
|
|
1575
|
-
return !!parsedRequired.find((
|
|
1576
|
-
if (!
|
|
1577
|
-
const filtered = parsedTarget.filter((
|
|
1571
|
+
return !!parsedRequired.find((r) => {
|
|
1572
|
+
if (!r.fullPath && r.all) return true;
|
|
1573
|
+
const filtered = parsedTarget.filter((p) => r.fullPath.startsWith(p.fullPath));
|
|
1578
1574
|
if (!filtered.length) return false;
|
|
1579
1575
|
const combined = PathEvent.combine(...filtered);
|
|
1580
|
-
return !combined.none && (combined.all ||
|
|
1576
|
+
return !combined.none && (combined.all || r.all) || combined.methods.intersection(r.methods).length;
|
|
1581
1577
|
});
|
|
1582
1578
|
}
|
|
1583
1579
|
/**
|
|
@@ -1616,10 +1612,10 @@ class PathEvent {
|
|
|
1616
1612
|
* @return {string} String representation of Event
|
|
1617
1613
|
*/
|
|
1618
1614
|
static toString(path, methods) {
|
|
1619
|
-
let
|
|
1620
|
-
|
|
1621
|
-
if (methods == null ? void 0 : methods.length)
|
|
1622
|
-
return
|
|
1615
|
+
let p = makeArray(path).filter((p2) => p2 != null).join("/");
|
|
1616
|
+
p = p == null ? void 0 : p.trim().replaceAll(/\/{2,}/g, "/").replaceAll(/(^\/|\/$)/g, "");
|
|
1617
|
+
if (methods == null ? void 0 : methods.length) p += `:${makeArray(methods).map((m) => m.toLowerCase()).join("")}`;
|
|
1618
|
+
return p;
|
|
1623
1619
|
}
|
|
1624
1620
|
/**
|
|
1625
1621
|
* Filter a set of paths based on this event
|
|
@@ -1667,36 +1663,57 @@ class PathEventEmitter {
|
|
|
1667
1663
|
emitter.on("*", (event, ...args) => this.emit(event, ...args));
|
|
1668
1664
|
}
|
|
1669
1665
|
}
|
|
1670
|
-
function search(rows,
|
|
1666
|
+
function search(rows, search2, regex, transform = (r) => r) {
|
|
1671
1667
|
if (!rows) return [];
|
|
1672
1668
|
return rows.filter((r) => {
|
|
1673
1669
|
const value = transform(r);
|
|
1674
|
-
if (!
|
|
1670
|
+
if (!search2) return true;
|
|
1675
1671
|
if (regex) {
|
|
1676
|
-
return !!Object.values(value).filter((
|
|
1672
|
+
return !!Object.values(value).filter((v) => {
|
|
1677
1673
|
try {
|
|
1678
|
-
return RegExp(
|
|
1674
|
+
return RegExp(search2, "gm").test(v.toString());
|
|
1679
1675
|
} catch {
|
|
1680
1676
|
return false;
|
|
1681
1677
|
}
|
|
1682
1678
|
}).length;
|
|
1679
|
+
} else {
|
|
1680
|
+
return testCondition(search2, r);
|
|
1683
1681
|
}
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
return
|
|
1698
|
-
|
|
1699
|
-
|
|
1682
|
+
});
|
|
1683
|
+
}
|
|
1684
|
+
function testCondition(condition, row) {
|
|
1685
|
+
const evalBoolean = (a, op, b) => {
|
|
1686
|
+
switch (op) {
|
|
1687
|
+
case "=":
|
|
1688
|
+
case "==":
|
|
1689
|
+
return a == b;
|
|
1690
|
+
case "!=":
|
|
1691
|
+
return a != b;
|
|
1692
|
+
case ">":
|
|
1693
|
+
return a > b;
|
|
1694
|
+
case ">=":
|
|
1695
|
+
return a >= b;
|
|
1696
|
+
case "<":
|
|
1697
|
+
return a < b;
|
|
1698
|
+
case "<=":
|
|
1699
|
+
return a <= b;
|
|
1700
|
+
default:
|
|
1701
|
+
return false;
|
|
1702
|
+
}
|
|
1703
|
+
};
|
|
1704
|
+
const or = condition.split("||").map((p) => p.trim()).filter((p) => !!p);
|
|
1705
|
+
return -1 != or.findIndex((p) => {
|
|
1706
|
+
const and = p.split("&&").map((p2) => p2.trim()).filter((p2) => !!p2);
|
|
1707
|
+
return and.filter((p2) => {
|
|
1708
|
+
const prop = /(\S+)\s*(==?|!=|>=|>|<=|<)\s*(\S+)/g.exec(p2);
|
|
1709
|
+
if (prop) {
|
|
1710
|
+
const key = Object.keys(row).find((k) => k.toLowerCase() == prop[1].toLowerCase());
|
|
1711
|
+
return evalBoolean(dotNotation(row, key || prop[1]), prop[2], JSONAttemptParse(prop[3]));
|
|
1712
|
+
}
|
|
1713
|
+
const v = Object.values(row).map((v2) => typeof v2 == "object" && v2 != null ? JSON.stringify(v2) : v2).join("");
|
|
1714
|
+
if (/[A-Z]/g.test(condition)) return v.includes(p2);
|
|
1715
|
+
return v.toLowerCase().includes(p2);
|
|
1716
|
+
}).length == and.length;
|
|
1700
1717
|
});
|
|
1701
1718
|
}
|
|
1702
1719
|
function typeKeys() {
|
|
@@ -1742,11 +1759,13 @@ export {
|
|
|
1742
1759
|
addUnique,
|
|
1743
1760
|
adjustedInterval,
|
|
1744
1761
|
arrayDiff,
|
|
1762
|
+
asyncFunction,
|
|
1745
1763
|
blackOrWhite,
|
|
1746
1764
|
camelCase,
|
|
1747
1765
|
caseInsensitiveSort,
|
|
1748
1766
|
clean,
|
|
1749
1767
|
dec2Frac,
|
|
1768
|
+
decodeJwt,
|
|
1750
1769
|
deepCopy,
|
|
1751
1770
|
deepMerge,
|
|
1752
1771
|
dotNotation,
|
|
@@ -1771,7 +1790,6 @@ export {
|
|
|
1771
1790
|
insertAt,
|
|
1772
1791
|
instantInterval,
|
|
1773
1792
|
isEqual,
|
|
1774
|
-
jwtDecode,
|
|
1775
1793
|
kebabCase,
|
|
1776
1794
|
makeArray,
|
|
1777
1795
|
makeUnique,
|
|
@@ -1790,6 +1808,7 @@ export {
|
|
|
1790
1808
|
snakeCase,
|
|
1791
1809
|
sortByProp,
|
|
1792
1810
|
strSplice,
|
|
1811
|
+
testCondition,
|
|
1793
1812
|
timeUntil,
|
|
1794
1813
|
timestampFilename,
|
|
1795
1814
|
toCsv,
|