UNPKG

com-tools

Version:

com-tools 提供了一些通用的工具函数;

740 lines (739 loc) 19.5 kB
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 };