@stanfordspezi/spezi-web-design-system
Version:
Stanford Biodesign Digital Health Spezi Web Design System
175 lines (174 loc) • 5.09 kB
JavaScript
function A(e, t) {
const n = {};
for (let c = 0; c < e.length; c++) {
const i = e[c], f = t(i);
n[f] = i;
}
return n;
}
function w(e) {
return Array.from(new Set(e));
}
function I() {
}
function d(e) {
return Object.getOwnPropertySymbols(e).filter((t) => Object.prototype.propertyIsEnumerable.call(e, t));
}
function m(e) {
return e == null ? e === void 0 ? "[object Undefined]" : "[object Null]" : Object.prototype.toString.call(e);
}
const S = "[object RegExp]", B = "[object String]", U = "[object Number]", N = "[object Boolean]", O = "[object Arguments]", P = "[object Symbol]", x = "[object Date]", z = "[object Map]", L = "[object Set]", D = "[object Array]", E = "[object Function]", F = "[object ArrayBuffer]", b = "[object Object]", K = "[object Error]", R = "[object DataView]", C = "[object Uint8Array]", M = "[object Uint8ClampedArray]", W = "[object Uint16Array]", q = "[object Uint32Array]", v = "[object BigUint64Array]", G = "[object Int8Array]", H = "[object Int16Array]", J = "[object Int32Array]", Q = "[object BigInt64Array]", X = "[object Float32Array]", Y = "[object Float64Array]";
function T(e) {
if (!e || typeof e != "object")
return !1;
const t = Object.getPrototypeOf(e);
return t === null || t === Object.prototype || Object.getPrototypeOf(t) === null ? Object.prototype.toString.call(e) === "[object Object]" : !1;
}
function Z(e, t) {
return e === t || Number.isNaN(e) && Number.isNaN(t);
}
function _(e, t, n) {
return g(e, t, void 0, void 0, void 0, void 0, n);
}
function g(e, t, n, c, i, f, a) {
const y = a(e, t, n, c, i, f);
if (y !== void 0)
return y;
if (typeof e == typeof t)
switch (typeof e) {
case "bigint":
case "string":
case "boolean":
case "symbol":
case "undefined":
return e === t;
case "number":
return e === t || Object.is(e, t);
case "function":
return e === t;
case "object":
return j(e, t, f, a);
}
return j(e, t, f, a);
}
function j(e, t, n, c) {
if (Object.is(e, t))
return !0;
let i = m(e), f = m(t);
if (i === O && (i = b), f === O && (f = b), i !== f)
return !1;
switch (i) {
case B:
return e.toString() === t.toString();
case U: {
const r = e.valueOf(), u = t.valueOf();
return Z(r, u);
}
case N:
case x:
case P:
return Object.is(e.valueOf(), t.valueOf());
case S:
return e.source === t.source && e.flags === t.flags;
case E:
return e === t;
}
n = n ?? /* @__PURE__ */ new Map();
const a = n.get(e), y = n.get(t);
if (a != null && y != null)
return a === t;
n.set(e, t), n.set(t, e);
try {
switch (i) {
case z: {
if (e.size !== t.size)
return !1;
for (const [r, u] of e.entries())
if (!t.has(r) || !g(u, t.get(r), r, e, t, n, c))
return !1;
return !0;
}
case L: {
if (e.size !== t.size)
return !1;
const r = Array.from(e.values()), u = Array.from(t.values());
for (let l = 0; l < r.length; l++) {
const s = r[l], o = u.findIndex((p) => g(s, p, void 0, e, t, n, c));
if (o === -1)
return !1;
u.splice(o, 1);
}
return !0;
}
case D:
case C:
case M:
case W:
case q:
case v:
case G:
case H:
case J:
case Q:
case X:
case Y: {
if (typeof Buffer < "u" && Buffer.isBuffer(e) !== Buffer.isBuffer(t) || e.length !== t.length)
return !1;
for (let r = 0; r < e.length; r++)
if (!g(e[r], t[r], r, e, t, n, c))
return !1;
return !0;
}
case F:
return e.byteLength !== t.byteLength ? !1 : j(new Uint8Array(e), new Uint8Array(t), n, c);
case R:
return e.byteLength !== t.byteLength || e.byteOffset !== t.byteOffset ? !1 : j(new Uint8Array(e), new Uint8Array(t), n, c);
case K:
return e.name === t.name && e.message === t.message;
case b: {
if (!(j(e.constructor, t.constructor, n, c) || T(e) && T(t)))
return !1;
const u = [...Object.keys(e), ...d(e)], l = [...Object.keys(t), ...d(t)];
if (u.length !== l.length)
return !1;
for (let s = 0; s < u.length; s++) {
const o = u[s], p = e[o];
if (!Object.hasOwn(t, o))
return !1;
const h = t[o];
if (!g(p, h, o, e, t, n, c))
return !1;
}
return !0;
}
default:
return !1;
}
} finally {
n.delete(e), n.delete(t);
}
}
function $(e, t) {
return _(e, t, I);
}
const V = ({
oldItems: e,
newItems: t,
getId: n,
onDelete: c,
onCreate: i,
onUpdate: f,
isEqual: a = $
}) => {
const y = A(e, n), r = A(t, n);
w([
...Object.keys(y),
...Object.keys(r)
]).forEach((l) => {
const s = y[l], o = r[l];
!o && s ? c(n(s), s) : o && !s ? i(n(o), o) : s && o && !a(s, o) && f(n(o), o, s);
});
};
export {
V as syncData
};