com-tools
Version:
com-tools 提供了一些通用的工具函数;
740 lines (739 loc) • 19.5 kB
JavaScript
import { isEmptyValue as e } from "type-tls";
//#region src/oriTools.ts
function t(e, t) {
return JSON.stringify(e) == JSON.stringify(t);
}
function n(e) {
let { loopCall: t, complete: n, stepComplete: r, thisValue: i, total: a = Infinity, step: o = 50, delay: s = 0 } = e, c = 0, l = 0, u = !1;
function d(e) {
e && (u = e, n && n.call(i, u, c, l, a));
}
function f() {
let e = c < a;
return !e && n && n.call(i, !1, c - 1, l, a), e;
}
let p = null;
function m() {
l++;
let e = Math.min(c + o, a);
for (; c < e && !u;) d(t.call(i, c, l, a)), c++;
r && d(r.call(i, c - 1, l, a)), f() && !u && (p = setTimeout(m, s));
}
function h(e) {
let t = e || !0;
clearTimeout(p), d(t);
}
return f() && m(), h;
}
Object.defineProperties(Array.prototype, { multipleLoop: {
configurable: !0,
writable: !0,
enumerable: !1,
value: function(e) {
let { loopCall: t, complete: r, stepComplete: i, thisValue: a, step: o, delay: s } = e, c = this, l = a || c, u = {
loopCall: (e, n) => t.call(l, c[e], e, n, c),
total: c.length,
step: o,
delay: s
};
return r && (u.complete = (e, t, n) => r.call(l, e, t, n, c)), i && (u.stepComplete = (e, t) => i.call(l, e, t, c)), n(u);
}
} });
function r(e, t, n) {
n ??= e;
let r = [];
for (let t of e) r.push(t);
return r.filter(function(r) {
let i = this.indexOf(r);
return t.call(n, r, i, e);
}, r);
}
function i(e, t, n) {
let { ready: r = t + "Ready", noEvent: i, event: a = t + "Change", newValueKey: o = "value", oldValueKey: s = "oldValue", getDefault: l } = n || {}, u = "_" + r, d = "_" + t;
Object.defineProperty(e, r, {
configurable: !0,
enumerable: !0,
get: function() {
let e = this || window;
if (!e[u]) {
let t = e[d];
t ? e[u] = Promise.resolve(t) : e[u] = c();
}
return e[u];
},
set: function(e) {
let t = this || window;
t[u] = e;
}
});
let f;
f = l ? function() {
let e = this || window;
return !e[d] && l && (e[t] = l.call(e, e)), e[d];
} : function() {
return (this || window)[d];
};
let p;
return p = i ? function(e) {
let t = this || window;
if (e && e !== t[d]) {
t[d] = e;
let n = t[r];
n.resolve ? n.resolve(e) : t[r] = Promise.resolve(e);
}
} : function(e) {
let t = this || window;
if (e && e !== t[d]) {
let n = t[d];
t[d] = e;
let i = t[r];
i.resolve ? i.resolve(e) : t[r] = Promise.resolve(e);
let c = new Event(a, { bubbles: !0 });
c[o] = e, c[s] = n, window.dispatchEvent(c);
}
}, Object.defineProperty(e, t, {
configurable: !0,
enumerable: !0,
get: f,
set: p
}), e;
}
function a(e, t, n) {
let r;
return r = Array.isArray(t) ? t.reduce((e, t) => (e[t] = n, e), {}) : t, Object.keys(r).forEach(function(t) {
let n = r[t];
i(e, t, n);
}), e;
}
function o(e, t, n, r) {
let i = "_" + t, a;
a = r ? n : n ? function() {
let e = this || window;
return !e[i] && n && (e[t] = n.call(e, e)), e[i];
} : function() {
return (this || window)[i];
}, Object.defineProperty(e, t, {
configurable: !0,
enumerable: !0,
get: a
});
}
function s() {
return (/* @__PURE__ */ new Date()).getTime().toString() + Math.random();
}
function c(e, t) {
let n = typeof e == "function";
n && t == null && (t = !0);
let r = {};
function i() {
s.resolve = void 0, s.reject = void 0, s.clearAdditions = void 0;
}
function a(e) {
i(), r.resolve(e);
}
function o(e) {
i(), r.reject(e);
}
let s = new Promise(function(i, s) {
if (r.resolve = i, r.reject = s, n) if (t) setTimeout(e, 0, a, o);
else return e(a, o);
});
return s.clearAdditions = i, s.resolve = a, s.reject = o, s;
}
function l(e, t, n, r) {
let { get: i = !0, set: a = !0, configurable: o = !0, enumerable: s = !0, getDefault: c, setDefault: l } = r || {}, u = {
configurable: o,
enumerable: s
};
return i && (u.get = function() {
let e = t[n];
return e === void 0 ? c : e;
}), a && (u.set = function(e) {
t[n] = e === void 0 ? l : e;
}), Object.defineProperty(e, n, u), e;
}
function u(e, t, n, r) {
let i;
return i = Array.isArray(n) ? n.reduce((e, t) => (e[t] = r, e), {}) : n, Object.keys(i).forEach(function(n) {
let r = i[n];
l(e, t, n, r);
}), e;
}
//#endregion
//#region src/tools.ts
function d(e) {
return Function(`"use strict"; return (${e})`)();
}
function f(e) {
let t = p(e);
return t.prototype = Object.create(e.prototype), t.prototype.constructor = t, t;
}
function p(e) {
return g(e.toString(), e.name, !0);
}
var m = /(^\s*(async\s+)?function\s*(\s|\*)\s*)[A-Za-z_$]+[\w$]*(\s*\()/, h = /^[A-Za-z_$]+[\w$]*$/;
function g(e, t, n) {
let r = m, i = h, a = r.test(e), o = t && i.test(t);
if (a && o && !n && (e = e.replace(r, `$1${t}$4`)), !a && o) var s = `"use strict"; var ${t} = ${e} ; return ${t}`;
else s = `"use strict"; return (${e})`;
return Function(s)();
}
function ee(e) {
var t;
return function() {
return t === void 0 ? new.target ? new e(...arguments) : e.apply(this, arguments) : t;
};
}
function te(e, t) {
return e > 0 ? new Promise((n) => {
setTimeout(n, e, t);
}) : Promise.resolve(t);
}
function ne(e) {
if (e < 0) return () => !0;
let t = 0;
return function() {
let n = Date.now(), r = n > t;
return r && (t = n + e), r;
};
}
function re(e) {
if (e <= 0) return () => !0;
let t = 0;
return function() {
let n = Date.now(), r = n >= t;
return r && (t = n + e), r;
};
}
function _(e, t, n) {
if (n) for (let n in t) e[n] ?? (e[n] = t[n]);
else for (let n in t) e[n] === void 0 && (e[n] = t[n]);
return e;
}
//#endregion
//#region src/Decide.ts
var v = class {
_decided = !1;
get decided() {
return this._decided;
}
listeners = [];
_value;
get value() {
return this._value;
}
set value(e) {
this._value = e, this.resolve();
}
resolve() {
this._decided = !0;
let e = this.value;
for (let t of this.listeners) t(e);
this.listeners = [], this.then = function(e) {
e(this.value);
};
}
then(e) {
this.listeners.push(e);
}
static resolve(e) {
let t = new this();
return t.value = e, t;
}
};
//#endregion
//#region src/prop-path.ts
function y(e, t) {
if (t.length === 0) return e;
for (let n = 0; n < t.length; n++) {
if (e == null) return;
e = e[t[n]];
}
return e;
}
function b(e, t, n) {
t.length === 0 && Object.assign(e, n);
let r = t.length - 1;
for (let n = 0; n < r; n++) {
let r = t[n];
e[r] ?? (e[r] = typeof t[n + 1] == "number" ? [] : {}), e = e[r];
}
e[t[r]] = n;
}
function x(e, t, n) {
let r = typeof n == "function" ? n : () => n, i = y(e, t);
return i === void 0 && (i = r(), b(e, t, i)), i;
}
function ie(e, t, n) {
let r = typeof n == "function" ? n : () => n, i = y(e, t);
return i === void 0 && (i = r(), i instanceof Promise ? i.then((n) => b(e, t, n)) : b(e, t, i)), i;
}
function S(e, t) {
if (t.length === 0) return !0;
let n = t.length - 1;
for (let r = 0; r < n; r++) {
if (e == null) return !1;
e = e[t[r]];
}
return e == null ? !1 : delete e[t[n]];
}
function ae(e) {
return Object.keys(e).forEach((t) => e[t] === void 0 && delete e[t]), e;
}
function oe(e) {
return Object.keys(e).forEach((t) => e[t] == null && delete e[t]), e;
}
function se(e, t) {
return Object.keys(e).forEach((n) => t.includes(e[n]) && delete e[n]), e;
}
function ce(e, t) {
return Object.keys(e).forEach((n) => t(e[n], n) && delete e[n]), e;
}
function le(t, n) {
return n ??= e, Object.keys(t).forEach((e) => n(t[e]) && delete t[e]), t;
}
function C(e, t) {
let n = {};
for (let r of t) {
let t = e[r];
t !== void 0 && (n[r] = t);
}
return n;
}
function w(e, t) {
for (let n of t) delete e[n];
return e;
}
function T(e, t) {
let n = {};
for (let r of t) b(n, r, y(e, r));
return n;
}
function E(e, t) {
for (let n of t) S(e, n);
return e;
}
function D(e, t, n) {
t ??= "/", n ??= "-";
for (let t = e.length - 1; t >= 0 && e[t] == null; t--) e.length = t;
return e.map((e) => e ?? n).join(t);
}
function O(e, t, n = "/") {
return e.split(n, t + 1)[t];
}
function k(e, t, n, r = "/") {
let i = e.split(r);
return i[t] = n, i.join(r);
}
function A(e, t, n = "/") {
let r = [];
for (let i of e) {
let e = i.split(n, t + 1)[t];
e && r.push(e);
}
return r;
}
function j(e, t, n = "/") {
return e === t || e.startsWith(t + n);
}
function M(e, t, n = "/") {
return e === t || e.startsWith(t + n) || t.startsWith(e + n);
}
//#endregion
//#region src/string.ts
function N(e, t) {
return t.some((t) => e.includes(t));
}
function P(e, t) {
return t.some((t) => t.test(e));
}
function F(e, t) {
return t.some(function(t) {
return typeof t == "string" ? e.includes(t) : t.test(e);
});
}
//#endregion
//#region src/array.ts
function I(e, t, n) {
if (t === n) return e;
let [r] = e.splice(t, 1);
return e.splice(n, 0, r), e;
}
function L(e, t, n) {
let r = e[t], i = e.filter((e, n) => n !== t);
return i.splice(n, 0, r), i;
}
function R(e, t, n) {
let r = t.map(function(t, r) {
return {
item: e[t],
to: n[r]
};
});
for (let { item: t } of r) {
let n = e.indexOf(t);
e.splice(n, 1);
}
for (let { item: t, to: n } of r) e.splice(n, 0, t);
return e;
}
function z(e, t, n) {
let r = t.map((t) => e[t]), i = e.filter((e, n) => !t.includes(n));
for (let e = 0; e < t.length; e++) i.splice(n[e], 0, r[e]);
return i;
}
function B(e, t) {
let n = typeof t == "string" ? t.length : t ?? 0, r = Math.min(n, 1), i = [
"/",
...e,
"/"
], a = JSON.stringify(i, null, t), o = a.indexOf("/") + 3 + r, s = a.lastIndexOf("/") - 1 - n;
return a.slice(o, s);
}
function V(e, t, n) {
let r = JSON.stringify(e, null, t) + ",";
return t && (n ??= "\n"), n && (r += n), r;
}
function H(e, t, n, r) {
r ??= e;
let i = e.filter(function(e, n) {
return t.includes(n);
});
return i.forEach((t) => {
let i = e.indexOf(t);
n.call(r, t, i, e);
}), i;
}
function U(e, t, n, r) {
r ??= e;
let i = [], a = t.map((t) => (i.push(t), e.indexOf(t)));
return i.forEach((t) => {
let i = e.indexOf(t);
n.call(r, t, i, e);
}), a;
}
function W(e, t, n) {
return n ??= e, e.slice().filter((r) => {
let i = e.indexOf(r);
return t.call(n, r, i, e);
});
}
function ue(e, t, n, r = 1) {
let i = e.splice(t, r);
return e.splice(n, 0, ...i), i;
}
function de(e, t, ...n) {
let r = K(e, ...n);
return e.splice(t, 0, ...r), r;
}
function fe(e, t, ...n) {
let r = q(e, ...n);
return e.splice(t, 0, ...n), r;
}
function pe(e, t, n, r) {
let i = J(e, n, r);
return e.splice(t, 0, ...i), i;
}
function G(e, t, n = 0, r) {
r ||= function(e, t) {
return e === t;
};
let i = e.filter((n) => r.call(e, n, t));
return q(e, ...i), e.splice(n, 0, t), i;
}
function me(e, t, n, r) {
return t.reduceRight((t, i) => {
let a = G(e, i, n, r);
return t.unshift(...a), t;
}, []);
}
function he(e, t, n) {
n ??= t;
let r = n + 1 - t;
return e.splice(t, r);
}
function K(e, ...t) {
return H(e, t, function(e, t, n) {
n.splice(t, 1);
}, e);
}
function q(e, ...t) {
return U(e, t, function(e, t, n) {
n.splice(t, 1);
}, e);
}
function J(e, t, n) {
n === void 0 && (n = e);
let r = e.filter((e, r, i) => t.call(n, e, r, i));
return U(e, r, function(e, t, n) {
n.splice(t, 1);
}, e), r;
}
function ge(e, t, n) {
return n ??= e, e.reduce(function(e, r, i, a) {
return t.call(n, r, i, a) && e.push(i), e;
}, []);
}
function _e(e, t, n) {
return e.length === t.length ? (n ||= function(e, t) {
return e === t;
}, e.every((e, r) => n(e, t[r]))) : !1;
}
function ve(e, t) {
return e.sort((e, n) => {
let r = t.indexOf(e), i = t.indexOf(n);
r === -1 && (r = 2 ** 53 - 1), i === -1 && (i = 2 ** 53 - 1);
let a = r - i;
return a === 0 ? e < n ? -1 : 1 : a;
});
}
//#endregion
//#region src/group-tree.ts
function ye(e, t) {
let n = { members: [] }, r = e.length;
for (let i = 0; i < r; i++) {
let r = e[i], a = x(n, t(r, i, e), () => ({ members: [] }));
(a.members ??= []).push(r);
}
return n;
}
function be(e) {
return Object.keys(e).filter((t) => Y(e[t]));
}
function xe(e) {
return Object.values(e).filter((e) => Y(e));
}
function Se(e) {
return Object.entries(e).filter(([e, t]) => Y(t));
}
function Y(e) {
return e && !Array.isArray(e) && typeof e == "object";
}
function Ce(e) {
return Object.values(e).some((e) => Y(e));
}
function we(e) {
let t = [], n = [e];
for (let e = 0; e < n.length; e++) {
let { members: r, ...i } = n[e];
r && t.push(...r), n.push(...Object.values(i));
}
return {
members: t,
nodes: n
};
}
//#endregion
//#region src/syncOperateObjects.ts
function Te(e, t) {
let n = {};
return new Proxy(e, {
get: function(e, r, i) {
if (typeof e[r] == "function") return Object.hasOwn(n, r) ? n[r] : n[r] = function(...n) {
let i = e[r](...n);
for (let e of t) e[r]?.(...n);
return i;
};
let a = e[r];
for (let e of t) e[r];
return a;
},
set: function(e, n, r, i) {
let a = Reflect.set(e, n, r);
for (let e of t) e[n] = r;
return a;
},
deleteProperty: function(e, n) {
let r = Reflect.deleteProperty(e, n);
for (let e of t) Reflect.deleteProperty(e, n);
return r;
},
apply: function(e, n, r) {
let i = Reflect.apply(e, n, r);
for (let e of t) Reflect.apply(e, n, r);
return i;
},
construct: function(e, n, r) {
let i = Reflect.construct(e, n, r);
for (let e of t) Reflect.construct(e, n, r);
return i;
}
});
}
//#endregion
//#region src/async.ts
async function X(e, t, n) {
let r = [];
for (let i of e) {
let e = i.apply(t, n), a = e instanceof Promise ? await e : e;
r.push(a);
}
return r;
}
function Ee(e, t, n) {
let r = e.length, i = 0, a, o = [];
for (; i < r && (a = e[i].apply(t, n), !(a instanceof Promise));) o.push(a), i++;
if (i === r) return o;
let s = e.slice(i + 1);
return a.then(async function(e) {
if (o.push(e), s.length) {
let e = await X(s, t, n);
o.push(...e);
}
return o;
});
}
async function Z(e, t, n, r) {
r ??= function() {};
let i = [];
for (let a of e) try {
let e = a.apply(t, n), r = e instanceof Promise ? await e : e;
i.push(r);
} catch (e) {
i.push(e), r.call(t, e, a);
}
return i;
}
function De(e, t, n, r) {
r ??= function() {};
let i = e.length, a = 0, o, s = [];
for (; a < i;) {
let i = e[a];
try {
if (o = i.apply(t, n), o instanceof Promise) break;
s.push(o);
} catch (e) {
s.push(e), r.call(t, e, i);
}
a++;
}
if (a === i) return s;
let c = e.slice(a + 1);
return o.then(function(e) {
s.push(e);
}, function(t) {
s.push(t), r(t, e[a]);
}).then(async function() {
if (c.length) {
let e = await Z(c, t, n, r);
s.push(...e);
}
return s;
});
}
//#endregion
//#region src/number.ts
function Oe(e, t = 0) {
return Number.isSafeInteger(e) ? e : t;
}
//#endregion
//#region src/function.ts
function Q(e) {
e.trailing ??= !0;
let t = 0, n = null, r, i;
function a() {
n = null, t = Date.now() + e.interval, e.fn.apply(r, i);
}
return function(...o) {
r = this, i = o;
let s = Date.now();
s >= t ? (n && clearTimeout(n), a()) : e.trailing && !n && (n = setTimeout(a, t - s));
};
}
function ke(e) {
let t = 0, n = null, r, i;
function a() {
n = null, e.leading && (t = Date.now() + e.interval), e.fn.apply(r, i);
}
return function(...o) {
r = this, i = o, e.leading && !n && t <= Date.now() ? a() : (n && clearTimeout(n), n = setTimeout(a, e.interval));
};
}
function Ae(e) {
let t = 0, n;
return function() {
let r = Date.now();
return (r > t || e.nonNull && n == null) && (n = e.fn.apply(this, arguments), t = r + e.interval), n;
};
}
function je(e) {
let t = 0, n, r = !1, i = null;
return async function() {
if (i) return i;
let a = Date.now();
return a < t ? n : (i = e.fn.apply(this, arguments).then((i) => (n = i, r = !0, t = a + e.interval, i), (i) => {
if (t = 0, e.ignoreError && r) return n;
throw i;
}), i.finally(() => {
i = null;
}), i);
};
}
function Me(e) {
let t = 0;
return function() {
let n = Date.now();
if (n > t) {
let r = e.fn.apply(this, arguments);
return (!e.shouldRestart || e.shouldRestart.call(this, r, this)) && (t = n + e.interval), r;
}
return e.getValue.call(this, this);
};
}
function Ne(e) {
let t = 0, n = null;
return async function() {
if (n) return n;
let r = Date.now();
return r < t ? e.getValue.call(this, this) : (n = e.fn.apply(this, arguments).then((n) => ((!e.shouldRestart || e.shouldRestart.call(this, n, this)) && (t = r + e.interval), n), (n) => {
if (t = 0, e.ignoreError) return e.getValue.call(this, this);
throw n;
}), n.finally(() => {
n = null;
}), n);
};
}
//#endregion
//#region src/object.ts
function Pe(e, t) {
let n = {}, r = new Set([...e, ...Object.keys(t)]);
for (let e of r) e in t && (n[e] = t[e]);
return n;
}
//#endregion
//#region src/StringSorter.ts
function $(e, t) {
return e.map((e) => e instanceof RegExp ? e : new RegExp(e, t));
}
var Fe = class {
constructor(e, t) {
this.flags = t, this.setOrder(e, t);
}
order;
regExpOrder;
setOrder(e, t) {
this.order = e, t ??= this.flags ?? void 0, this.regExpOrder = $(e, t);
}
getOrderIndex(e) {
return this.regExpOrder.findIndex((t) => t.test(e));
}
compare = (e, t) => {
let n = this.getOrderIndex(e), r = this.getOrderIndex(t);
n === -1 && (n = 2 ** 53 - 1), r === -1 && (r = 2 ** 53 - 1);
let i = n - r;
return i === 0 ? e < t ? -1 : 1 : i;
};
sort(e) {
return e.sort(this.compare);
}
toSorted(e) {
return this.sort(e);
}
};
//#endregion
//#region src/math.ts
function Ie(e, t) {
return e + Math.random() * (t - e);
}
//#endregion
export { v as Decide, Fe as StringSorter, he as array_delete, K as array_deleteIndexs, q as array_deleteItems, J as array_deleteUseTest, ge as array_filterIndexs, G as array_insertItem, me as array_insertItemList, _e as array_isEqual, ue as array_move, fe as array_moveItemsTo, de as array_moveTo, pe as array_moveToUseTest, W as array_safelyFilter, H as array_safelyOperateIndexs, U as array_safelyOperateItems, ve as array_sortByOrder, _ as assignDefaultValues, je as asyncCachedCall, Z as asyncSerialCallAllFuns, X as asyncSerialCallFuns, Ne as asyncSharedCachedCall, d as betterEval, Ae as cachedCall, f as copyConstructor, p as copyFunction, c as createControllablePromise, g as createFunctionBy, ee as createSingleton, s as createUniqueIdentifier, ke as debounce, a as defineListenableProperties, i as defineListenableProperty, o as defineListenablePropertyGetter, u as defineProxyProperties, l as defineProxyProperty, S as deleteMember, we as flatGroupTree, Oe as formatSafeInteger, y as getMember, ie as getMemberWithAsyncDefault, x as getMemberWithDefault, O as getPathPart, Se as getSubGroupEntries, be as getSubGroupNames, xe as getSubGroupNodes, A as getValidPathParts, ne as greaterInterval, ye as groupTreeBy, Ce as hasSubGroups, F as includesPatterns, P as includesRegExps, N as includesStrings, t as isEqualByJSON, Y as isGroupTree, M as isRelatedPath, j as isSubPath, I as moveItemInArray, L as moveItemInNewArray, R as moveItemsInArray, z as moveItemsInNewArray, n as multipleLoop, re as noLessInterval, w as omitMembers, E as omitMembersByPath, D as pathString, C as pickMembers, T as pickMembersByPath, Ie as randomInRange, le as removeEmpty, oe as removeNull, ce as removePropertyValue, se as removePropertyValues, ae as removeUndefined, k as replacePathPart, r as safelyIterate, De as serialCallAllFuns, Ee as serialCallFuns, b as setMember, Me as sharedCachedCall, Pe as sortMembers, Te as syncOperateObjects, Q as throttle, $ as toIRegExps, B as toJSONArrayFragment, V as toJSONItemFragment, te as waitWhile };