@ztimson/utils 0.23.22 → 0.24.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/cache.d.ts +0 -9
- package/dist/index.cjs +286 -272
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +192 -178
- package/dist/index.mjs.map +1 -1
- package/dist/jwt.d.ts +1 -1
- 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);
|
|
@@ -878,7 +870,7 @@ function formatDate(format = "YYYY-MM-DD H:mm", date = /* @__PURE__ */ new Date(
|
|
|
878
870
|
const minutes = offset % 60;
|
|
879
871
|
return (offset > 0 ? "-" : "") + `${hours}:${minutes.toString().padStart(2, "0")}`;
|
|
880
872
|
}
|
|
881
|
-
if (typeof date == "number" || typeof date == "string") date = new Date(date);
|
|
873
|
+
if (typeof date == "number" || typeof date == "string" || date == null) date = new Date(date);
|
|
882
874
|
let t;
|
|
883
875
|
if (tz == null) tz = -(date.getTimezoneOffset() / 60);
|
|
884
876
|
t = timezones.find((t2) => isNaN(tz) ? t2[0] == tz : t2[1] == tz);
|
|
@@ -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);
|
|
@@ -1434,8 +1426,8 @@ function gravatar(email, def = "mp") {
|
|
|
1434
1426
|
if (!email) return "";
|
|
1435
1427
|
return `https://www.gravatar.com/avatar/${md5(email)}?d=${def}`;
|
|
1436
1428
|
}
|
|
1437
|
-
function escapeRegex(
|
|
1438
|
-
return
|
|
1429
|
+
function escapeRegex(value) {
|
|
1430
|
+
return value.replace(/[.*+?^${}()|\[\]\\]/g, "\\$&");
|
|
1439
1431
|
}
|
|
1440
1432
|
function PE(str, ...args) {
|
|
1441
1433
|
const combined = [];
|
|
@@ -1470,15 +1462,15 @@ class PathEvent {
|
|
|
1470
1462
|
__publicField(this, "methods");
|
|
1471
1463
|
var _a;
|
|
1472
1464
|
if (typeof Event == "object") return Object.assign(this, Event);
|
|
1473
|
-
let [
|
|
1465
|
+
let [p, scope, method] = Event.replaceAll(/\/{2,}/g, "/").split(":");
|
|
1474
1466
|
if (!method) method = scope || "*";
|
|
1475
|
-
if (
|
|
1476
|
-
|
|
1467
|
+
if (p == "*" || !p && method == "*") {
|
|
1468
|
+
p = "";
|
|
1477
1469
|
method = "*";
|
|
1478
1470
|
}
|
|
1479
|
-
let temp =
|
|
1471
|
+
let temp = p.split("/").filter((p2) => !!p2);
|
|
1480
1472
|
this.module = ((_a = temp.splice(0, 1)[0]) == null ? void 0 : _a.toLowerCase()) || "";
|
|
1481
|
-
this.fullPath =
|
|
1473
|
+
this.fullPath = p;
|
|
1482
1474
|
this.path = temp.join("/");
|
|
1483
1475
|
this.name = temp.pop() || "";
|
|
1484
1476
|
this.methods = new ASet(method.split(""));
|
|
@@ -1487,43 +1479,43 @@ class PathEvent {
|
|
|
1487
1479
|
get all() {
|
|
1488
1480
|
return this.methods.has("*");
|
|
1489
1481
|
}
|
|
1490
|
-
set all(
|
|
1491
|
-
|
|
1482
|
+
set all(v) {
|
|
1483
|
+
v ? new ASet(["*"]) : this.methods.delete("*");
|
|
1492
1484
|
}
|
|
1493
1485
|
/** None specified */
|
|
1494
1486
|
get none() {
|
|
1495
1487
|
return this.methods.has("n");
|
|
1496
1488
|
}
|
|
1497
|
-
set none(
|
|
1498
|
-
|
|
1489
|
+
set none(v) {
|
|
1490
|
+
v ? this.methods = new ASet(["n"]) : this.methods.delete("n");
|
|
1499
1491
|
}
|
|
1500
1492
|
/** Create method specified */
|
|
1501
1493
|
get create() {
|
|
1502
1494
|
return !this.methods.has("n") && (this.methods.has("*") || this.methods.has("c"));
|
|
1503
1495
|
}
|
|
1504
|
-
set create(
|
|
1505
|
-
|
|
1496
|
+
set create(v) {
|
|
1497
|
+
v ? this.methods.delete("n").add("c") : this.methods.delete("c");
|
|
1506
1498
|
}
|
|
1507
1499
|
/** Read method specified */
|
|
1508
1500
|
get read() {
|
|
1509
1501
|
return !this.methods.has("n") && (this.methods.has("*") || this.methods.has("r"));
|
|
1510
1502
|
}
|
|
1511
|
-
set read(
|
|
1512
|
-
|
|
1503
|
+
set read(v) {
|
|
1504
|
+
v ? this.methods.delete("n").add("r") : this.methods.delete("r");
|
|
1513
1505
|
}
|
|
1514
1506
|
/** Update method specified */
|
|
1515
1507
|
get update() {
|
|
1516
1508
|
return !this.methods.has("n") && (this.methods.has("*") || this.methods.has("u"));
|
|
1517
1509
|
}
|
|
1518
|
-
set update(
|
|
1519
|
-
|
|
1510
|
+
set update(v) {
|
|
1511
|
+
v ? this.methods.delete("n").add("u") : this.methods.delete("u");
|
|
1520
1512
|
}
|
|
1521
1513
|
/** Delete method specified */
|
|
1522
1514
|
get delete() {
|
|
1523
1515
|
return !this.methods.has("n") && (this.methods.has("*") || this.methods.has("d"));
|
|
1524
1516
|
}
|
|
1525
|
-
set delete(
|
|
1526
|
-
|
|
1517
|
+
set delete(v) {
|
|
1518
|
+
v ? this.methods.delete("n").add("d") : this.methods.delete("d");
|
|
1527
1519
|
}
|
|
1528
1520
|
/**
|
|
1529
1521
|
* Combine multiple events into one parsed object. Longest path takes precedent, but all subsequent methods are
|
|
@@ -1534,14 +1526,14 @@ class PathEvent {
|
|
|
1534
1526
|
*/
|
|
1535
1527
|
static combine(...paths) {
|
|
1536
1528
|
let hitNone = false;
|
|
1537
|
-
const combined = paths.map((
|
|
1529
|
+
const combined = paths.map((p) => new PathEvent(p)).toSorted((p1, p2) => {
|
|
1538
1530
|
const l1 = p1.fullPath.length, l2 = p2.fullPath.length;
|
|
1539
1531
|
return l1 < l2 ? 1 : l1 > l2 ? -1 : 0;
|
|
1540
|
-
}).reduce((acc,
|
|
1541
|
-
if (
|
|
1542
|
-
if (!acc) return
|
|
1532
|
+
}).reduce((acc, p) => {
|
|
1533
|
+
if (p.none) hitNone = true;
|
|
1534
|
+
if (!acc) return p;
|
|
1543
1535
|
if (hitNone) return acc;
|
|
1544
|
-
acc.methods = [...acc.methods, ...
|
|
1536
|
+
acc.methods = [...acc.methods, ...p.methods];
|
|
1545
1537
|
return acc;
|
|
1546
1538
|
}, null);
|
|
1547
1539
|
combined.methods = new ASet(combined.methods);
|
|
@@ -1572,12 +1564,12 @@ class PathEvent {
|
|
|
1572
1564
|
static has(target, ...has) {
|
|
1573
1565
|
const parsedRequired = makeArray(has).map((pe) => new PathEvent(pe));
|
|
1574
1566
|
const parsedTarget = makeArray(target).map((pe) => new PathEvent(pe));
|
|
1575
|
-
return !!parsedRequired.find((
|
|
1576
|
-
if (!
|
|
1577
|
-
const filtered = parsedTarget.filter((
|
|
1567
|
+
return !!parsedRequired.find((r) => {
|
|
1568
|
+
if (!r.fullPath && r.all) return true;
|
|
1569
|
+
const filtered = parsedTarget.filter((p) => r.fullPath.startsWith(p.fullPath));
|
|
1578
1570
|
if (!filtered.length) return false;
|
|
1579
1571
|
const combined = PathEvent.combine(...filtered);
|
|
1580
|
-
return !combined.none && (combined.all ||
|
|
1572
|
+
return !combined.none && (combined.all || r.all) || combined.methods.intersection(r.methods).length;
|
|
1581
1573
|
});
|
|
1582
1574
|
}
|
|
1583
1575
|
/**
|
|
@@ -1616,10 +1608,10 @@ class PathEvent {
|
|
|
1616
1608
|
* @return {string} String representation of Event
|
|
1617
1609
|
*/
|
|
1618
1610
|
static toString(path, methods) {
|
|
1619
|
-
let
|
|
1620
|
-
|
|
1621
|
-
if (methods == null ? void 0 : methods.length)
|
|
1622
|
-
return
|
|
1611
|
+
let p = makeArray(path).filter((p2) => p2 != null).join("/");
|
|
1612
|
+
p = p == null ? void 0 : p.trim().replaceAll(/\/{2,}/g, "/").replaceAll(/(^\/|\/$)/g, "");
|
|
1613
|
+
if (methods == null ? void 0 : methods.length) p += `:${makeArray(methods).map((m) => m.toLowerCase()).join("")}`;
|
|
1614
|
+
return p;
|
|
1623
1615
|
}
|
|
1624
1616
|
/**
|
|
1625
1617
|
* Filter a set of paths based on this event
|
|
@@ -1667,36 +1659,57 @@ class PathEventEmitter {
|
|
|
1667
1659
|
emitter.on("*", (event, ...args) => this.emit(event, ...args));
|
|
1668
1660
|
}
|
|
1669
1661
|
}
|
|
1670
|
-
function search(rows,
|
|
1662
|
+
function search(rows, search2, regex, transform = (r) => r) {
|
|
1671
1663
|
if (!rows) return [];
|
|
1672
1664
|
return rows.filter((r) => {
|
|
1673
1665
|
const value = transform(r);
|
|
1674
|
-
if (!
|
|
1666
|
+
if (!search2) return true;
|
|
1675
1667
|
if (regex) {
|
|
1676
|
-
return !!Object.values(value).filter((
|
|
1668
|
+
return !!Object.values(value).filter((v) => {
|
|
1677
1669
|
try {
|
|
1678
|
-
return RegExp(
|
|
1670
|
+
return RegExp(search2, "gm").test(v.toString());
|
|
1679
1671
|
} catch {
|
|
1680
1672
|
return false;
|
|
1681
1673
|
}
|
|
1682
1674
|
}).length;
|
|
1675
|
+
} else {
|
|
1676
|
+
return testCondition(search2, r);
|
|
1683
1677
|
}
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
return
|
|
1698
|
-
|
|
1699
|
-
|
|
1678
|
+
});
|
|
1679
|
+
}
|
|
1680
|
+
function testCondition(condition, row) {
|
|
1681
|
+
const evalBoolean = (a, op, b) => {
|
|
1682
|
+
switch (op) {
|
|
1683
|
+
case "=":
|
|
1684
|
+
case "==":
|
|
1685
|
+
return a == b;
|
|
1686
|
+
case "!=":
|
|
1687
|
+
return a != b;
|
|
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
|
+
default:
|
|
1697
|
+
return false;
|
|
1698
|
+
}
|
|
1699
|
+
};
|
|
1700
|
+
const or = condition.split("||").map((p) => p.trim()).filter((p) => !!p);
|
|
1701
|
+
return -1 != or.findIndex((p) => {
|
|
1702
|
+
const and = p.split("&&").map((p2) => p2.trim()).filter((p2) => !!p2);
|
|
1703
|
+
return and.filter((p2) => {
|
|
1704
|
+
const prop = /(\S+)\s*(==?|!=|>=|>|<=|<)\s*(\S+)/g.exec(p2);
|
|
1705
|
+
if (prop) {
|
|
1706
|
+
const key = Object.keys(row).find((k) => k.toLowerCase() == prop[1].toLowerCase());
|
|
1707
|
+
return evalBoolean(dotNotation(row, key || prop[1]), prop[2], JSONAttemptParse(prop[3]));
|
|
1708
|
+
}
|
|
1709
|
+
const v = Object.values(row).map((v2) => typeof v2 == "object" && v2 != null ? JSON.stringify(v2) : v2).join("");
|
|
1710
|
+
if (/[A-Z]/g.test(condition)) return v.includes(p2);
|
|
1711
|
+
return v.toLowerCase().includes(p2);
|
|
1712
|
+
}).length == and.length;
|
|
1700
1713
|
});
|
|
1701
1714
|
}
|
|
1702
1715
|
function typeKeys() {
|
|
@@ -1747,6 +1760,7 @@ export {
|
|
|
1747
1760
|
caseInsensitiveSort,
|
|
1748
1761
|
clean,
|
|
1749
1762
|
dec2Frac,
|
|
1763
|
+
decodeJwt,
|
|
1750
1764
|
deepCopy,
|
|
1751
1765
|
deepMerge,
|
|
1752
1766
|
dotNotation,
|
|
@@ -1771,7 +1785,6 @@ export {
|
|
|
1771
1785
|
insertAt,
|
|
1772
1786
|
instantInterval,
|
|
1773
1787
|
isEqual,
|
|
1774
|
-
jwtDecode,
|
|
1775
1788
|
kebabCase,
|
|
1776
1789
|
makeArray,
|
|
1777
1790
|
makeUnique,
|
|
@@ -1790,6 +1803,7 @@ export {
|
|
|
1790
1803
|
snakeCase,
|
|
1791
1804
|
sortByProp,
|
|
1792
1805
|
strSplice,
|
|
1806
|
+
testCondition,
|
|
1793
1807
|
timeUntil,
|
|
1794
1808
|
timestampFilename,
|
|
1795
1809
|
toCsv,
|