@ztimson/utils 0.22.8 → 0.22.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +262 -229
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +174 -141
- package/dist/index.mjs.map +1 -1
- package/dist/search.d.ts +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defNormalProp = (obj, key,
|
|
3
|
-
var __publicField = (obj, key,
|
|
2
|
+
var __defNormalProp = (obj, key, value2) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value: value2 }) : obj[key] = value2;
|
|
3
|
+
var __publicField = (obj, key, value2) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value2);
|
|
4
4
|
function clean(obj, undefinedOnly = false) {
|
|
5
5
|
if (obj == null) throw new Error("Cannot clean a NULL value");
|
|
6
6
|
if (Array.isArray(obj)) {
|
|
7
7
|
obj = obj.filter((o) => o != null);
|
|
8
8
|
} else {
|
|
9
|
-
Object.entries(obj).forEach(([key,
|
|
10
|
-
if (undefinedOnly &&
|
|
9
|
+
Object.entries(obj).forEach(([key, value2]) => {
|
|
10
|
+
if (undefinedOnly && value2 === void 0 || !undefinedOnly && value2 == null) delete obj[key];
|
|
11
11
|
});
|
|
12
12
|
}
|
|
13
13
|
return obj;
|
|
14
14
|
}
|
|
15
|
-
function deepCopy(
|
|
15
|
+
function deepCopy(value2) {
|
|
16
16
|
try {
|
|
17
|
-
return structuredClone(
|
|
17
|
+
return structuredClone(value2);
|
|
18
18
|
} catch {
|
|
19
|
-
return JSON.parse(JSONSanitize(
|
|
19
|
+
return JSON.parse(JSONSanitize(value2));
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
function deepMerge(target, ...sources) {
|
|
@@ -32,22 +32,22 @@ function deepMerge(target, ...sources) {
|
|
|
32
32
|
});
|
|
33
33
|
return target;
|
|
34
34
|
}
|
|
35
|
-
function dotNotation(obj,
|
|
36
|
-
if (obj == null || !
|
|
37
|
-
return
|
|
38
|
-
if (
|
|
39
|
-
if (!(obj2 == null ? void 0 : obj2.hasOwnProperty(
|
|
35
|
+
function dotNotation(obj, prop2, set) {
|
|
36
|
+
if (obj == null || !prop2) return void 0;
|
|
37
|
+
return prop2.split(/[.[\]]/g).filter((prop22) => prop22.length).reduce((obj2, prop22, i, arr) => {
|
|
38
|
+
if (prop22[0] == '"' || prop22[0] == "'") prop22 = prop22.slice(1, -1);
|
|
39
|
+
if (!(obj2 == null ? void 0 : obj2.hasOwnProperty(prop22))) {
|
|
40
40
|
if (set == void 0) return void 0;
|
|
41
|
-
obj2[
|
|
41
|
+
obj2[prop22] = {};
|
|
42
42
|
}
|
|
43
43
|
if (set !== void 0 && i == arr.length - 1)
|
|
44
|
-
return obj2[
|
|
45
|
-
return obj2[
|
|
44
|
+
return obj2[prop22] = set;
|
|
45
|
+
return obj2[prop22];
|
|
46
46
|
}, obj);
|
|
47
47
|
}
|
|
48
48
|
function encodeQuery(data) {
|
|
49
49
|
return Object.entries(data).map(
|
|
50
|
-
([key,
|
|
50
|
+
([key, value2]) => encodeURIComponent(key) + "=" + encodeURIComponent(value2)
|
|
51
51
|
).join("&");
|
|
52
52
|
}
|
|
53
53
|
function flattenObj(obj, parent, result = {}) {
|
|
@@ -66,7 +66,7 @@ function flattenObj(obj, parent, result = {}) {
|
|
|
66
66
|
}
|
|
67
67
|
function formData(target) {
|
|
68
68
|
const data = new FormData();
|
|
69
|
-
Object.entries(target).forEach(([key,
|
|
69
|
+
Object.entries(target).forEach(([key, value2]) => data.append(key, value2));
|
|
70
70
|
return data;
|
|
71
71
|
}
|
|
72
72
|
function includes(target, values, allowMissing = false) {
|
|
@@ -80,13 +80,13 @@ function includes(target, values, allowMissing = false) {
|
|
|
80
80
|
if (type == "function") return target.toString() == values.toString();
|
|
81
81
|
return target == values;
|
|
82
82
|
}
|
|
83
|
-
function isEqual(
|
|
84
|
-
const ta = typeof
|
|
85
|
-
if (ta != "object" ||
|
|
86
|
-
return ta == "function" && tb == "function" ?
|
|
87
|
-
const keys = Object.keys(
|
|
88
|
-
if (keys.length != Object.keys(
|
|
89
|
-
return Object.keys(
|
|
83
|
+
function isEqual(a2, b2) {
|
|
84
|
+
const ta = typeof a2, tb = typeof b2;
|
|
85
|
+
if (ta != "object" || a2 == null || (tb != "object" || b2 == null))
|
|
86
|
+
return ta == "function" && tb == "function" ? a2.toString() == b2.toString() : a2 === b2;
|
|
87
|
+
const keys = Object.keys(a2);
|
|
88
|
+
if (keys.length != Object.keys(b2).length) return false;
|
|
89
|
+
return Object.keys(a2).every((key) => isEqual(a2[key], b2[key]));
|
|
90
90
|
}
|
|
91
91
|
function mixin(target, constructors) {
|
|
92
92
|
constructors.forEach((c) => {
|
|
@@ -107,39 +107,39 @@ function JSONAttemptParse(json) {
|
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
function JSONSanitize(obj, space) {
|
|
110
|
-
return JSON.stringify(obj, (key,
|
|
111
|
-
return
|
|
110
|
+
return JSON.stringify(obj, (key, value2) => {
|
|
111
|
+
return value2;
|
|
112
112
|
}, space);
|
|
113
113
|
}
|
|
114
114
|
function addUnique(array, el) {
|
|
115
115
|
if (array.indexOf(el) === -1) array.push(el);
|
|
116
116
|
return array;
|
|
117
117
|
}
|
|
118
|
-
function arrayDiff(
|
|
118
|
+
function arrayDiff(a2, b2) {
|
|
119
119
|
return makeUnique([
|
|
120
|
-
...
|
|
121
|
-
...
|
|
120
|
+
...a2.filter((v1) => !b2.includes((v2) => isEqual(v1, v2))),
|
|
121
|
+
...b2.filter((v1) => !a2.includes((v2) => isEqual(v1, v2)))
|
|
122
122
|
]);
|
|
123
123
|
}
|
|
124
|
-
function caseInsensitiveSort(
|
|
125
|
-
return function(
|
|
126
|
-
const aVal = dotNotation(
|
|
127
|
-
const bVal = dotNotation(
|
|
124
|
+
function caseInsensitiveSort(prop2) {
|
|
125
|
+
return function(a2, b2) {
|
|
126
|
+
const aVal = dotNotation(a2, prop2);
|
|
127
|
+
const bVal = dotNotation(b2, prop2);
|
|
128
128
|
if (typeof aVal !== "string" || typeof bVal !== "string") return 1;
|
|
129
129
|
return aVal.toLowerCase().localeCompare(bVal.toLowerCase());
|
|
130
130
|
};
|
|
131
131
|
}
|
|
132
|
-
function findByProp(
|
|
133
|
-
return (
|
|
132
|
+
function findByProp(prop2, value2) {
|
|
133
|
+
return (v2) => isEqual(dotNotation(v2, prop2), value2);
|
|
134
134
|
}
|
|
135
135
|
function flattenArr(arr, result = []) {
|
|
136
136
|
arr.forEach((el) => Array.isArray(el) ? flattenArr(el, result) : result.push(el));
|
|
137
137
|
return result;
|
|
138
138
|
}
|
|
139
|
-
function sortByProp(
|
|
140
|
-
return function(
|
|
141
|
-
const aVal = dotNotation(
|
|
142
|
-
const bVal = dotNotation(
|
|
139
|
+
function sortByProp(prop2, reverse = false) {
|
|
140
|
+
return function(a2, b2) {
|
|
141
|
+
const aVal = dotNotation(a2, prop2);
|
|
142
|
+
const bVal = dotNotation(b2, prop2);
|
|
143
143
|
if (typeof aVal == "number" && typeof bVal == "number")
|
|
144
144
|
return (reverse ? -1 : 1) * (aVal - bVal);
|
|
145
145
|
if (aVal > bVal) return reverse ? -1 : 1;
|
|
@@ -153,8 +153,8 @@ function makeUnique(arr) {
|
|
|
153
153
|
}
|
|
154
154
|
return arr;
|
|
155
155
|
}
|
|
156
|
-
function makeArray(
|
|
157
|
-
return Array.isArray(
|
|
156
|
+
function makeArray(value2) {
|
|
157
|
+
return Array.isArray(value2) ? value2 : [value2];
|
|
158
158
|
}
|
|
159
159
|
class ASet extends Array {
|
|
160
160
|
/** Number of elements in set */
|
|
@@ -212,8 +212,8 @@ class ASet extends Array {
|
|
|
212
212
|
* @param {number} fromIndex Starting index position
|
|
213
213
|
* @return {number} Element index number or -1 if missing
|
|
214
214
|
*/
|
|
215
|
-
indexOf(
|
|
216
|
-
return super.findIndex((el) => isEqual(el,
|
|
215
|
+
indexOf(search2, fromIndex) {
|
|
216
|
+
return super.findIndex((el) => isEqual(el, search2), fromIndex);
|
|
217
217
|
}
|
|
218
218
|
/**
|
|
219
219
|
* Create list of elements this set has in common with the comparison set
|
|
@@ -295,20 +295,20 @@ class Cache {
|
|
|
295
295
|
}
|
|
296
296
|
}
|
|
297
297
|
return new Proxy(this, {
|
|
298
|
-
get: (target,
|
|
299
|
-
if (
|
|
300
|
-
return target.store[
|
|
298
|
+
get: (target, prop2) => {
|
|
299
|
+
if (prop2 in target) return target[prop2];
|
|
300
|
+
return target.store[prop2];
|
|
301
301
|
},
|
|
302
|
-
set: (target,
|
|
303
|
-
if (
|
|
304
|
-
else target.store[
|
|
302
|
+
set: (target, prop2, value2) => {
|
|
303
|
+
if (prop2 in target) target[prop2] = value2;
|
|
304
|
+
else target.store[prop2] = value2;
|
|
305
305
|
return true;
|
|
306
306
|
}
|
|
307
307
|
});
|
|
308
308
|
}
|
|
309
|
-
getKey(
|
|
309
|
+
getKey(value2) {
|
|
310
310
|
if (!this.key) throw new Error("No key defined");
|
|
311
|
-
return
|
|
311
|
+
return value2[this.key];
|
|
312
312
|
}
|
|
313
313
|
/**
|
|
314
314
|
* Get all cached items
|
|
@@ -325,9 +325,9 @@ class Cache {
|
|
|
325
325
|
* @param {number | undefined} ttl Override default expiry
|
|
326
326
|
* @return {this}
|
|
327
327
|
*/
|
|
328
|
-
add(
|
|
329
|
-
const key = this.getKey(
|
|
330
|
-
this.set(key,
|
|
328
|
+
add(value2, ttl = this.ttl) {
|
|
329
|
+
const key = this.getKey(value2);
|
|
330
|
+
this.set(key, value2, ttl);
|
|
331
331
|
return this;
|
|
332
332
|
}
|
|
333
333
|
/**
|
|
@@ -337,8 +337,8 @@ class Cache {
|
|
|
337
337
|
* @param complete Mark cache as complete & reliable, defaults to true
|
|
338
338
|
* @return {this}
|
|
339
339
|
*/
|
|
340
|
-
addAll(
|
|
341
|
-
|
|
340
|
+
addAll(rows2, complete = true) {
|
|
341
|
+
rows2.forEach((r2) => this.add(r2));
|
|
342
342
|
this.complete = complete;
|
|
343
343
|
return this;
|
|
344
344
|
}
|
|
@@ -397,8 +397,8 @@ class Cache {
|
|
|
397
397
|
* @param {number | undefined} ttl Override default expiry in seconds
|
|
398
398
|
* @return {this}
|
|
399
399
|
*/
|
|
400
|
-
set(key,
|
|
401
|
-
this.store[key] =
|
|
400
|
+
set(key, value2, ttl = this.options.ttl) {
|
|
401
|
+
this.store[key] = value2;
|
|
402
402
|
if (this.options.storageKey && this.options.storage)
|
|
403
403
|
this.options.storage.setItem(this.options.storageKey, JSON.stringify(this.store));
|
|
404
404
|
if (ttl) setTimeout(() => {
|
|
@@ -462,16 +462,16 @@ function strSplice(str, start, deleteCount, insert = "") {
|
|
|
462
462
|
const after = str.slice(start + deleteCount);
|
|
463
463
|
return before + insert + after;
|
|
464
464
|
}
|
|
465
|
-
function matchAll(
|
|
466
|
-
if (typeof
|
|
467
|
-
|
|
465
|
+
function matchAll(value2, regex2) {
|
|
466
|
+
if (typeof regex2 === "string") {
|
|
467
|
+
regex2 = new RegExp(regex2, "g");
|
|
468
468
|
}
|
|
469
|
-
if (!
|
|
469
|
+
if (!regex2.global) {
|
|
470
470
|
throw new TypeError("Regular expression must be global.");
|
|
471
471
|
}
|
|
472
472
|
let ret = [];
|
|
473
473
|
let match;
|
|
474
|
-
while ((match =
|
|
474
|
+
while ((match = regex2.exec(value2)) !== null) {
|
|
475
475
|
ret.push(match);
|
|
476
476
|
}
|
|
477
477
|
return ret;
|
|
@@ -499,11 +499,11 @@ function parseUrl(url) {
|
|
|
499
499
|
return groups;
|
|
500
500
|
}
|
|
501
501
|
function md5(d) {
|
|
502
|
-
var
|
|
503
|
-
return
|
|
502
|
+
var r2 = M(V(Y(X(d), 8 * d.length)));
|
|
503
|
+
return r2.toLowerCase();
|
|
504
504
|
}
|
|
505
505
|
function M(d) {
|
|
506
|
-
for (var _, m = "0123456789ABCDEF", f = "",
|
|
506
|
+
for (var _, m = "0123456789ABCDEF", f = "", r2 = 0; r2 < d.length; r2++) _ = d.charCodeAt(r2), f += m.charAt(_ >>> 4 & 15) + m.charAt(15 & _);
|
|
507
507
|
return f;
|
|
508
508
|
}
|
|
509
509
|
function X(d) {
|
|
@@ -517,26 +517,26 @@ function V(d) {
|
|
|
517
517
|
}
|
|
518
518
|
function Y(d, _) {
|
|
519
519
|
d[_ >> 5] |= 128 << _ % 32, d[14 + (_ + 64 >>> 9 << 4)] = _;
|
|
520
|
-
for (var m = 1732584193, f = -271733879,
|
|
521
|
-
var h = m, t = f, g =
|
|
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,
|
|
520
|
+
for (var m = 1732584193, f = -271733879, r2 = -1732584194, i = 271733878, n = 0; n < d.length; n += 16) {
|
|
521
|
+
var h = m, t = f, g = r2, 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, r2 = md5_ff(r2, i = md5_ff(i, m = md5_ff(m, f, r2, i, d[n + 0], 7, -680876936), f, r2, d[n + 1], 12, -389564586), m, f, d[n + 2], 17, 606105819), i, m, d[n + 3], 22, -1044525330), r2 = md5_ff(r2, i = md5_ff(i, m = md5_ff(m, f, r2, i, d[n + 4], 7, -176418897), f, r2, d[n + 5], 12, 1200080426), m, f, d[n + 6], 17, -1473231341), i, m, d[n + 7], 22, -45705983), r2 = md5_ff(r2, i = md5_ff(i, m = md5_ff(m, f, r2, i, d[n + 8], 7, 1770035416), f, r2, d[n + 9], 12, -1958414417), m, f, d[n + 10], 17, -42063), i, m, d[n + 11], 22, -1990404162), r2 = md5_ff(r2, i = md5_ff(i, m = md5_ff(m, f, r2, i, d[n + 12], 7, 1804603682), f, r2, d[n + 13], 12, -40341101), m, f, d[n + 14], 17, -1502002290), i, m, d[n + 15], 22, 1236535329), r2 = md5_gg(r2, i = md5_gg(i, m = md5_gg(m, f, r2, i, d[n + 1], 5, -165796510), f, r2, d[n + 6], 9, -1069501632), m, f, d[n + 11], 14, 643717713), i, m, d[n + 0], 20, -373897302), r2 = md5_gg(r2, i = md5_gg(i, m = md5_gg(m, f, r2, i, d[n + 5], 5, -701558691), f, r2, d[n + 10], 9, 38016083), m, f, d[n + 15], 14, -660478335), i, m, d[n + 4], 20, -405537848), r2 = md5_gg(r2, i = md5_gg(i, m = md5_gg(m, f, r2, i, d[n + 9], 5, 568446438), f, r2, d[n + 14], 9, -1019803690), m, f, d[n + 3], 14, -187363961), i, m, d[n + 8], 20, 1163531501), r2 = md5_gg(r2, i = md5_gg(i, m = md5_gg(m, f, r2, i, d[n + 13], 5, -1444681467), f, r2, d[n + 2], 9, -51403784), m, f, d[n + 7], 14, 1735328473), i, m, d[n + 12], 20, -1926607734), r2 = md5_hh(r2, i = md5_hh(i, m = md5_hh(m, f, r2, i, d[n + 5], 4, -378558), f, r2, d[n + 8], 11, -2022574463), m, f, d[n + 11], 16, 1839030562), i, m, d[n + 14], 23, -35309556), r2 = md5_hh(r2, i = md5_hh(i, m = md5_hh(m, f, r2, i, d[n + 1], 4, -1530992060), f, r2, d[n + 4], 11, 1272893353), m, f, d[n + 7], 16, -155497632), i, m, d[n + 10], 23, -1094730640), r2 = md5_hh(r2, i = md5_hh(i, m = md5_hh(m, f, r2, i, d[n + 13], 4, 681279174), f, r2, d[n + 0], 11, -358537222), m, f, d[n + 3], 16, -722521979), i, m, d[n + 6], 23, 76029189), r2 = md5_hh(r2, i = md5_hh(i, m = md5_hh(m, f, r2, i, d[n + 9], 4, -640364487), f, r2, d[n + 12], 11, -421815835), m, f, d[n + 15], 16, 530742520), i, m, d[n + 2], 23, -995338651), r2 = md5_ii(r2, i = md5_ii(i, m = md5_ii(m, f, r2, i, d[n + 0], 6, -198630844), f, r2, d[n + 7], 10, 1126891415), m, f, d[n + 14], 15, -1416354905), i, m, d[n + 5], 21, -57434055), r2 = md5_ii(r2, i = md5_ii(i, m = md5_ii(m, f, r2, i, d[n + 12], 6, 1700485571), f, r2, d[n + 3], 10, -1894986606), m, f, d[n + 10], 15, -1051523), i, m, d[n + 1], 21, -2054922799), r2 = md5_ii(r2, i = md5_ii(i, m = md5_ii(m, f, r2, i, d[n + 8], 6, 1873313359), f, r2, d[n + 15], 10, -30611744), m, f, d[n + 6], 15, -1560198380), i, m, d[n + 13], 21, 1309151649), r2 = md5_ii(r2, i = md5_ii(i, m = md5_ii(m, f, r2, i, d[n + 4], 6, -145523070), f, r2, 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), r2 = safe_add(r2, g), i = safe_add(i, e);
|
|
523
523
|
}
|
|
524
|
-
return Array(m, f,
|
|
524
|
+
return Array(m, f, r2, i);
|
|
525
525
|
}
|
|
526
|
-
function md5_cmn(d, _, m, f,
|
|
527
|
-
return safe_add(bit_rol(safe_add(safe_add(_, d), safe_add(f, i)),
|
|
526
|
+
function md5_cmn(d, _, m, f, r2, i) {
|
|
527
|
+
return safe_add(bit_rol(safe_add(safe_add(_, d), safe_add(f, i)), r2), m);
|
|
528
528
|
}
|
|
529
|
-
function md5_ff(d, _, m, f,
|
|
530
|
-
return md5_cmn(_ & m | ~_ & f, d, _,
|
|
529
|
+
function md5_ff(d, _, m, f, r2, i, n) {
|
|
530
|
+
return md5_cmn(_ & m | ~_ & f, d, _, r2, i, n);
|
|
531
531
|
}
|
|
532
|
-
function md5_gg(d, _, m, f,
|
|
533
|
-
return md5_cmn(_ & f | m & ~f, d, _,
|
|
532
|
+
function md5_gg(d, _, m, f, r2, i, n) {
|
|
533
|
+
return md5_cmn(_ & f | m & ~f, d, _, r2, i, n);
|
|
534
534
|
}
|
|
535
|
-
function md5_hh(d, _, m, f,
|
|
536
|
-
return md5_cmn(_ ^ m ^ f, d, _,
|
|
535
|
+
function md5_hh(d, _, m, f, r2, i, n) {
|
|
536
|
+
return md5_cmn(_ ^ m ^ f, d, _, r2, i, n);
|
|
537
537
|
}
|
|
538
|
-
function md5_ii(d, _, m, f,
|
|
539
|
-
return md5_cmn(m ^ (_ | ~f), d, _,
|
|
538
|
+
function md5_ii(d, _, m, f, r2, i, n) {
|
|
539
|
+
return md5_cmn(m ^ (_ | ~f), d, _, r2, i, n);
|
|
540
540
|
}
|
|
541
541
|
function safe_add(d, _) {
|
|
542
542
|
var m = (65535 & d) + (65535 & _);
|
|
@@ -552,23 +552,23 @@ function fromCsv(csv, hasHeaders = true) {
|
|
|
552
552
|
const row = csv.split("\n");
|
|
553
553
|
let headers = hasHeaders ? row.splice(0, 1)[0] : null;
|
|
554
554
|
if (headers) headers = headers.match(/(?:[^,"']+|"[^"]*"|'[^']*')+/g);
|
|
555
|
-
return row.map((
|
|
555
|
+
return row.map((r2) => {
|
|
556
556
|
function parseLine(line) {
|
|
557
557
|
const parts = line.split(","), columns = [];
|
|
558
558
|
let quoted = false;
|
|
559
|
-
for (const
|
|
560
|
-
if (quoted) columns[columns.length - 1] = columns.at(-1) + "," +
|
|
561
|
-
else columns.push(
|
|
562
|
-
if (/[^"]"$/g.test(
|
|
559
|
+
for (const p2 of parts) {
|
|
560
|
+
if (quoted) columns[columns.length - 1] = columns.at(-1) + "," + p2;
|
|
561
|
+
else columns.push(p2);
|
|
562
|
+
if (/[^"]"$/g.test(p2)) {
|
|
563
563
|
quoted = false;
|
|
564
|
-
} else if (/^"[^"]/g.test(
|
|
564
|
+
} else if (/^"[^"]/g.test(p2)) {
|
|
565
565
|
quoted = true;
|
|
566
566
|
}
|
|
567
567
|
}
|
|
568
568
|
return columns;
|
|
569
569
|
}
|
|
570
|
-
const props = parseLine(
|
|
571
|
-
const h = headers || Array(props.length).fill(null).map((
|
|
570
|
+
const props = parseLine(r2);
|
|
571
|
+
const h = headers || Array(props.length).fill(null).map((r22, i) => {
|
|
572
572
|
let letter = "";
|
|
573
573
|
const first = i / 26;
|
|
574
574
|
if (first > 1) letter += LETTER_LIST[Math.floor(first - 1)];
|
|
@@ -586,15 +586,15 @@ function toCsv(target, flatten = true) {
|
|
|
586
586
|
return [
|
|
587
587
|
headers.join(","),
|
|
588
588
|
...target.map((row) => headers.map((h) => {
|
|
589
|
-
const
|
|
590
|
-
return typeof
|
|
589
|
+
const value2 = dotNotation(row, h);
|
|
590
|
+
return typeof value2 == "object" && value2 != null ? '"' + JSONSanitize(value2).replaceAll('"', '""') + '"' : value2;
|
|
591
591
|
}).join(","))
|
|
592
592
|
].join("\n");
|
|
593
593
|
}
|
|
594
594
|
class PromiseProgress extends Promise {
|
|
595
595
|
constructor(executor) {
|
|
596
596
|
super((resolve, reject) => executor(
|
|
597
|
-
(
|
|
597
|
+
(value2) => resolve(value2),
|
|
598
598
|
(reason) => reject(reason),
|
|
599
599
|
(progress) => this.progress = progress
|
|
600
600
|
));
|
|
@@ -604,10 +604,10 @@ class PromiseProgress extends Promise {
|
|
|
604
604
|
get progress() {
|
|
605
605
|
return this._progress;
|
|
606
606
|
}
|
|
607
|
-
set progress(
|
|
608
|
-
if (
|
|
609
|
-
this._progress =
|
|
610
|
-
this.listeners.forEach((l) => l(
|
|
607
|
+
set progress(p2) {
|
|
608
|
+
if (p2 == this._progress) return;
|
|
609
|
+
this._progress = p2;
|
|
610
|
+
this.listeners.forEach((l) => l(p2));
|
|
611
611
|
}
|
|
612
612
|
static from(promise) {
|
|
613
613
|
if (promise instanceof PromiseProgress) return promise;
|
|
@@ -615,7 +615,7 @@ class PromiseProgress extends Promise {
|
|
|
615
615
|
}
|
|
616
616
|
from(promise) {
|
|
617
617
|
const newPromise = PromiseProgress.from(promise);
|
|
618
|
-
this.onProgress((
|
|
618
|
+
this.onProgress((p2) => newPromise.progress = p2);
|
|
619
619
|
return newPromise;
|
|
620
620
|
}
|
|
621
621
|
onProgress(callback) {
|
|
@@ -640,12 +640,12 @@ function downloadFile(blob, name) {
|
|
|
640
640
|
URL.revokeObjectURL(url);
|
|
641
641
|
}
|
|
642
642
|
function downloadUrl(href, name) {
|
|
643
|
-
const
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
document.body.appendChild(
|
|
647
|
-
|
|
648
|
-
document.body.removeChild(
|
|
643
|
+
const a2 = document.createElement("a");
|
|
644
|
+
a2.href = href;
|
|
645
|
+
a2.download = name || href.split("/").pop();
|
|
646
|
+
document.body.appendChild(a2);
|
|
647
|
+
a2.click();
|
|
648
|
+
document.body.removeChild(a2);
|
|
649
649
|
}
|
|
650
650
|
function fileBrowser(options = {}) {
|
|
651
651
|
return new Promise((res) => {
|
|
@@ -686,7 +686,7 @@ function uploadWithProgress(options) {
|
|
|
686
686
|
xhr.addEventListener("error", () => rej(JSONAttemptParse(xhr.responseText)));
|
|
687
687
|
xhr.addEventListener("timeout", () => rej({ error: "Request timed out" }));
|
|
688
688
|
xhr.open("POST", options.url);
|
|
689
|
-
Object.entries(options.headers || {}).forEach(([key,
|
|
689
|
+
Object.entries(options.headers || {}).forEach(([key, value2]) => xhr.setRequestHeader(key, value2));
|
|
690
690
|
xhr.send(formData2);
|
|
691
691
|
});
|
|
692
692
|
}
|
|
@@ -1096,9 +1096,9 @@ const _Logger = class _Logger extends TypedEmitter {
|
|
|
1096
1096
|
__publicField(_Logger, "LOG_LEVEL", 4);
|
|
1097
1097
|
let Logger = _Logger;
|
|
1098
1098
|
function dec2Frac(num) {
|
|
1099
|
-
const gcd = (
|
|
1100
|
-
if (
|
|
1101
|
-
return gcd(
|
|
1099
|
+
const gcd = (a2, b2) => {
|
|
1100
|
+
if (b2 < 1e-7) return a2;
|
|
1101
|
+
return gcd(b2, ~~(a2 % b2));
|
|
1102
1102
|
};
|
|
1103
1103
|
const len = num.toString().length - 2;
|
|
1104
1104
|
let denominator = Math.pow(10, len);
|
|
@@ -1120,8 +1120,8 @@ function gravatar(email, def = "mp") {
|
|
|
1120
1120
|
if (!email) return "";
|
|
1121
1121
|
return `https://www.gravatar.com/avatar/${md5(email)}?d=${def}`;
|
|
1122
1122
|
}
|
|
1123
|
-
function escapeRegex(
|
|
1124
|
-
return
|
|
1123
|
+
function escapeRegex(value2) {
|
|
1124
|
+
return value2.replace(/[.*+?^${}()|\[\]\\]/g, "\\$&");
|
|
1125
1125
|
}
|
|
1126
1126
|
function PE(str, ...args) {
|
|
1127
1127
|
const combined = [];
|
|
@@ -1156,15 +1156,15 @@ class PathEvent {
|
|
|
1156
1156
|
__publicField(this, "methods");
|
|
1157
1157
|
var _a;
|
|
1158
1158
|
if (typeof Event == "object") return Object.assign(this, Event);
|
|
1159
|
-
let [
|
|
1159
|
+
let [p2, scope, method] = Event.replaceAll(/\/{2,}/g, "/").split(":");
|
|
1160
1160
|
if (!method) method = scope || "*";
|
|
1161
|
-
if (
|
|
1162
|
-
|
|
1161
|
+
if (p2 == "*" || !p2 && method == "*") {
|
|
1162
|
+
p2 = "";
|
|
1163
1163
|
method = "*";
|
|
1164
1164
|
}
|
|
1165
|
-
let temp =
|
|
1165
|
+
let temp = p2.split("/").filter((p22) => !!p22);
|
|
1166
1166
|
this.module = ((_a = temp.splice(0, 1)[0]) == null ? void 0 : _a.toLowerCase()) || "";
|
|
1167
|
-
this.fullPath =
|
|
1167
|
+
this.fullPath = p2;
|
|
1168
1168
|
this.path = temp.join("/");
|
|
1169
1169
|
this.name = temp.pop() || "";
|
|
1170
1170
|
this.methods = new ASet(method.split(""));
|
|
@@ -1173,43 +1173,43 @@ class PathEvent {
|
|
|
1173
1173
|
get all() {
|
|
1174
1174
|
return this.methods.has("*");
|
|
1175
1175
|
}
|
|
1176
|
-
set all(
|
|
1177
|
-
|
|
1176
|
+
set all(v2) {
|
|
1177
|
+
v2 ? new ASet(["*"]) : this.methods.delete("*");
|
|
1178
1178
|
}
|
|
1179
1179
|
/** None specified */
|
|
1180
1180
|
get none() {
|
|
1181
1181
|
return this.methods.has("n");
|
|
1182
1182
|
}
|
|
1183
|
-
set none(
|
|
1184
|
-
|
|
1183
|
+
set none(v2) {
|
|
1184
|
+
v2 ? this.methods = new ASet(["n"]) : this.methods.delete("n");
|
|
1185
1185
|
}
|
|
1186
1186
|
/** Create method specified */
|
|
1187
1187
|
get create() {
|
|
1188
1188
|
return !this.methods.has("n") && (this.methods.has("*") || this.methods.has("c"));
|
|
1189
1189
|
}
|
|
1190
|
-
set create(
|
|
1191
|
-
|
|
1190
|
+
set create(v2) {
|
|
1191
|
+
v2 ? this.methods.delete("n").add("c") : this.methods.delete("c");
|
|
1192
1192
|
}
|
|
1193
1193
|
/** Read method specified */
|
|
1194
1194
|
get read() {
|
|
1195
1195
|
return !this.methods.has("n") && (this.methods.has("*") || this.methods.has("r"));
|
|
1196
1196
|
}
|
|
1197
|
-
set read(
|
|
1198
|
-
|
|
1197
|
+
set read(v2) {
|
|
1198
|
+
v2 ? this.methods.delete("n").add("r") : this.methods.delete("r");
|
|
1199
1199
|
}
|
|
1200
1200
|
/** Update method specified */
|
|
1201
1201
|
get update() {
|
|
1202
1202
|
return !this.methods.has("n") && (this.methods.has("*") || this.methods.has("u"));
|
|
1203
1203
|
}
|
|
1204
|
-
set update(
|
|
1205
|
-
|
|
1204
|
+
set update(v2) {
|
|
1205
|
+
v2 ? this.methods.delete("n").add("u") : this.methods.delete("u");
|
|
1206
1206
|
}
|
|
1207
1207
|
/** Delete method specified */
|
|
1208
1208
|
get delete() {
|
|
1209
1209
|
return !this.methods.has("n") && (this.methods.has("*") || this.methods.has("d"));
|
|
1210
1210
|
}
|
|
1211
|
-
set delete(
|
|
1212
|
-
|
|
1211
|
+
set delete(v2) {
|
|
1212
|
+
v2 ? this.methods.delete("n").add("d") : this.methods.delete("d");
|
|
1213
1213
|
}
|
|
1214
1214
|
/**
|
|
1215
1215
|
* Combine multiple events into one parsed object. Longest path takes precedent, but all subsequent methods are
|
|
@@ -1220,14 +1220,14 @@ class PathEvent {
|
|
|
1220
1220
|
*/
|
|
1221
1221
|
static combine(...paths) {
|
|
1222
1222
|
let hitNone = false;
|
|
1223
|
-
const combined = paths.map((
|
|
1223
|
+
const combined = paths.map((p2) => new PathEvent(p2)).toSorted((p1, p2) => {
|
|
1224
1224
|
const l1 = p1.fullPath.length, l2 = p2.fullPath.length;
|
|
1225
1225
|
return l1 < l2 ? 1 : l1 > l2 ? -1 : 0;
|
|
1226
|
-
}).reduce((acc,
|
|
1227
|
-
if (
|
|
1228
|
-
if (!acc) return
|
|
1226
|
+
}).reduce((acc, p2) => {
|
|
1227
|
+
if (p2.none) hitNone = true;
|
|
1228
|
+
if (!acc) return p2;
|
|
1229
1229
|
if (hitNone) return acc;
|
|
1230
|
-
acc.methods = [...acc.methods, ...
|
|
1230
|
+
acc.methods = [...acc.methods, ...p2.methods];
|
|
1231
1231
|
return acc;
|
|
1232
1232
|
}, null);
|
|
1233
1233
|
combined.methods = new ASet(combined.methods);
|
|
@@ -1258,12 +1258,12 @@ class PathEvent {
|
|
|
1258
1258
|
static has(target, ...has) {
|
|
1259
1259
|
const parsedRequired = makeArray(has).map((pe) => new PathEvent(pe));
|
|
1260
1260
|
const parsedTarget = makeArray(target).map((pe) => new PathEvent(pe));
|
|
1261
|
-
return !!parsedRequired.find((
|
|
1262
|
-
if (!
|
|
1263
|
-
const filtered = parsedTarget.filter((
|
|
1261
|
+
return !!parsedRequired.find((r2) => {
|
|
1262
|
+
if (!r2.fullPath && r2.all) return true;
|
|
1263
|
+
const filtered = parsedTarget.filter((p2) => r2.fullPath.startsWith(p2.fullPath));
|
|
1264
1264
|
if (!filtered.length) return false;
|
|
1265
1265
|
const combined = PathEvent.combine(...filtered);
|
|
1266
|
-
return !combined.none && (combined.all ||
|
|
1266
|
+
return !combined.none && (combined.all || r2.all) || combined.methods.intersection(r2.methods).length;
|
|
1267
1267
|
});
|
|
1268
1268
|
}
|
|
1269
1269
|
/**
|
|
@@ -1302,10 +1302,10 @@ class PathEvent {
|
|
|
1302
1302
|
* @return {string} String representation of Event
|
|
1303
1303
|
*/
|
|
1304
1304
|
static toString(path, methods) {
|
|
1305
|
-
let
|
|
1306
|
-
|
|
1307
|
-
if (methods == null ? void 0 : methods.length)
|
|
1308
|
-
return
|
|
1305
|
+
let p2 = makeArray(path).filter((p22) => p22 != null).join("/");
|
|
1306
|
+
p2 = p2 == null ? void 0 : p2.trim().replaceAll(/\/{2,}/g, "/").replaceAll(/(^\/|\/$)/g, "");
|
|
1307
|
+
if (methods == null ? void 0 : methods.length) p2 += `:${makeArray(methods).map((m) => m.toLowerCase()).join("")}`;
|
|
1308
|
+
return p2;
|
|
1309
1309
|
}
|
|
1310
1310
|
/**
|
|
1311
1311
|
* Filter a set of paths based on this event
|
|
@@ -1353,16 +1353,48 @@ class PathEventEmitter {
|
|
|
1353
1353
|
emitter.on("*", (event, ...args) => this.emit(event, ...args));
|
|
1354
1354
|
}
|
|
1355
1355
|
}
|
|
1356
|
+
function search(rows, search, regex, transform = (r2) => r2) {
|
|
1357
|
+
if (!rows) return [];
|
|
1358
|
+
return rows.filter((r) => {
|
|
1359
|
+
const value = transform(r);
|
|
1360
|
+
if (!search) return true;
|
|
1361
|
+
if (regex) {
|
|
1362
|
+
return !!Object.values(value).filter((v2) => {
|
|
1363
|
+
try {
|
|
1364
|
+
return RegExp(search, "gm").test(v2.toString());
|
|
1365
|
+
} catch {
|
|
1366
|
+
return false;
|
|
1367
|
+
}
|
|
1368
|
+
}).length;
|
|
1369
|
+
}
|
|
1370
|
+
const or = search.split("||").map((p2) => p2.trim()).filter((p2) => !!p2);
|
|
1371
|
+
return -1 != or.findIndex((p) => {
|
|
1372
|
+
const and = p.split("&&").map((p2) => p2.trim()).filter((p2) => !!p2);
|
|
1373
|
+
return and.filter((p) => {
|
|
1374
|
+
const prop = /(\w+)\s*(==?|!=|>=|>|<=|<)\s*(\w+)/g.exec(p);
|
|
1375
|
+
if (prop) {
|
|
1376
|
+
const a = JSON.stringify(JSONAttemptParse(dotNotation(value, prop[1])));
|
|
1377
|
+
const operator = prop[2] == "=" ? "==" : prop[2];
|
|
1378
|
+
const b = JSON.stringify(JSONAttemptParse(prop[3]));
|
|
1379
|
+
return eval(`${a} ${operator} ${b}`);
|
|
1380
|
+
}
|
|
1381
|
+
const v = Object.values(value).join("");
|
|
1382
|
+
if (/[A-Z]/g.test(search)) return v.includes(p);
|
|
1383
|
+
return v.toLowerCase().includes(p);
|
|
1384
|
+
}).length == and.length;
|
|
1385
|
+
});
|
|
1386
|
+
});
|
|
1387
|
+
}
|
|
1356
1388
|
function adjustedInterval(cb, ms) {
|
|
1357
1389
|
let cancel = false, timeout = null;
|
|
1358
|
-
const
|
|
1390
|
+
const p2 = async () => {
|
|
1359
1391
|
if (cancel) return;
|
|
1360
1392
|
const start = (/* @__PURE__ */ new Date()).getTime();
|
|
1361
1393
|
await cb();
|
|
1362
1394
|
const end = (/* @__PURE__ */ new Date()).getTime();
|
|
1363
|
-
timeout = setTimeout(() =>
|
|
1395
|
+
timeout = setTimeout(() => p2(), ms - (end - start) || 1);
|
|
1364
1396
|
};
|
|
1365
|
-
|
|
1397
|
+
p2();
|
|
1366
1398
|
return () => {
|
|
1367
1399
|
cancel = true;
|
|
1368
1400
|
if (timeout) clearTimeout(timeout);
|
|
@@ -1545,6 +1577,7 @@ export {
|
|
|
1545
1577
|
randomHex,
|
|
1546
1578
|
randomString,
|
|
1547
1579
|
randomStringBuilder,
|
|
1580
|
+
search,
|
|
1548
1581
|
sleep,
|
|
1549
1582
|
sleepWhile,
|
|
1550
1583
|
sortByProp,
|