UNPKG

@tempots/std

Version:

Std library for TypeScript. Natural complement to the Tempo libraries.

141 lines (140 loc) 4.43 kB
import { objectKeys as x } from "./object.js"; const B = (t) => t.length > 0 ? t[0] : void 0, E = (t) => t.slice(1), I = (t, s, e) => { if (t.length !== s.length) return !1; for (let n = 0; n < t.length; n++) if (!e(t[n], s[n])) return !1; return !0; }, O = (t) => t.length === 0, S = (t) => t.length > 0, _ = (t, s) => { const e = []; for (let n = 0; n < t.length; n++) { const r = s(t[n], n); r != null && e.push(r); } return e; }, q = (t) => t.filter((s) => s != null), b = (t, s, e, n = !0) => { if (t.length < s.length) return -1 * (n ? 1 : -1); if (t.length > s.length) return 1 * (n ? 1 : -1); for (let r = 0; r < t.length; r++) { const i = e(t[r], s[r]); if (i !== 0) return i; } return 0; }, w = (t, s) => Array.from({ length: t }, (e, n) => s(n)), j = (t, s = 0) => Array.from({ length: t }, (e, n) => s + n), D = (t, s) => w(t, () => s), F = (t, s) => { const e = {}; return t.forEach((n) => { e[s(n)] = n; }), x(e).map((n) => e[n]); }, M = (t, s) => { const e = t.indexOf(s); return e < 0 ? !1 : (t.splice(e, 1), !0); }, N = (t, s) => { let e = 0, n = !1; for (let r = 0; r < t.length; r++) t[r] !== s ? (t[e] = t[r], e++) : n = !0; return t.length = e, n; }, P = (t, s) => { const e = t.findIndex(s); return e < 0 ? !1 : (t.splice(e, 1), !0); }, T = (t, s) => { let e = 0, n = !1; for (let r = 0; r < t.length; r++) s(t[r]) ? n = !0 : (t[e] = t[r], e++); return t.length = e, n; }, $ = (t, s, e) => { const n = { removals: [], swaps: [], inserts: [] }, { removals: r, inserts: i, swaps: u } = n, c = /* @__PURE__ */ new Map(); s.forEach((o, l) => c.set(e(o), l)); const f = t.map((o, l) => [o, l]).filter(([o]) => !c.has(e(o))).map(([o, l]) => l); for (let o = f.length - 1; o >= 0; o--) { const l = f[o], a = r.length > 0 ? r[r.length - 1] : void 0; a != null && a.at === l + 1 ? (a.at--, a.qt++) : r.push({ at: l, qt: 1 }); } const h = /* @__PURE__ */ new Map(); t.forEach((o, l) => h.set(e(o), l)); const g = s.map((o, l) => [o, l]).filter(([o]) => !h.has(e(o))).map(([o, l]) => l); for (const o of g) { const l = i.length > 0 ? i[i.length - 1] : void 0; l != null && l.at + l.values.length === o ? l.values.push(s[o]) : i.push({ at: o, values: [s[o]] }); } const y = new Set(f), A = new Set(g), p = t.filter((o, l) => !y.has(l)), m = /* @__PURE__ */ new Map(); for (let o = 0; o < p.length; o++) m.set(e(p[o]), o); const d = s.filter((o, l) => !A.has(l)); for (let o = 0; o < d.length; o++) { const l = e(d[o]), a = m.get(l); if (a == null || o === a) continue; const v = e(p[o]); m.delete(v), u.push({ from: o, to: a }); } return n; }, C = (t, s) => { const e = [...s]; for (const { at: n, qt: r } of t.removals) e.splice(n, r); for (const { from: n, to: r } of t.swaps) { const i = e[r]; e[r] = e[n], e[n] = i; } for (const n of t.inserts) e.splice(n.at, 0, ...n.values); return e; }, H = (t, s = " and ", e = ", ") => t.length === 0 ? "" : t.length === 1 ? String(t[0]) : `${t.slice(0, -1).join(e)}${s}${String(t[t.length - 1])}`, R = (t, s, e = !0) => { const n = t.map((c, f) => [c, f]); n.sort((c, f) => s(c[0], f[0])); const r = new Array(n.length); let i = 0, u = n[0][0]; for (let c = 0; c < n.length; c++) { const [f, h] = n[c]; s(f, u) !== 0 && (i = c, u = f), r[h] = i, e && i++; } return r; }, V = (t, s) => { if (s <= 0) throw new Error("Chunk size must be positive"); const e = []; for (let n = 0; n < t.length; n += s) e.push(t.slice(n, n + s)); return e; }, W = (t, s) => { const e = [], n = []; for (const r of t) s(r) ? e.push(r) : n.push(r); return [e, n]; }, G = (t, s) => { const e = {}; for (const n of t) { const r = s(n); e[r] ? e[r].push(n) : e[r] = [n]; } return e; }; export { C as applyArrayDiffOperations, I as areArraysEqual, $ as arrayDiffOperations, S as arrayHasValues, B as arrayHead, E as arrayTail, w as buildArray, V as chunk, b as compareArrays, D as fillArray, _ as filterMapArray, q as filterNullsFromArray, G as groupBy, O as isArrayEmpty, H as joinArrayWithConjunction, W as partition, j as range, R as rankArray, N as removeAllFromArray, T as removeAllFromArrayByPredicate, M as removeOneFromArray, P as removeOneFromArrayByPredicate, F as uniqueByPrimitive };