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