@tempots/std
Version:
Std library for TypeScript. Natural complement to the Tempo libraries.
141 lines (140 loc) • 4.43 kB
JavaScript
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
};