UNPKG

@tempots/std

Version:

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

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