UNPKG

@stanfordspezi/spezi-web-design-system

Version:

Stanford Biodesign Digital Health Spezi Web Design System

175 lines (174 loc) 5.09 kB
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 };