mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-08-28 17:21:05 +00:00
21 lines
736 B
TypeScript
21 lines
736 B
TypeScript
/** Deep equality for JSON-like sync payloads (objects, arrays, primitives). */
|
|
export default function isEqual(a: unknown, b: unknown): boolean {
|
|
if (a === b) return true;
|
|
if (a == null || b == null) return false;
|
|
if (typeof a !== typeof b) return false;
|
|
if (typeof a !== "object") return false;
|
|
|
|
if (Array.isArray(a)) {
|
|
if (!Array.isArray(b) || a.length !== b.length) return false;
|
|
return a.every((v, i) => isEqual(v, b[i]));
|
|
}
|
|
|
|
if (Array.isArray(b)) return false;
|
|
|
|
const aObj = a as Record<string, unknown>;
|
|
const bObj = b as Record<string, unknown>;
|
|
const aKeys = Object.keys(aObj);
|
|
if (aKeys.length !== Object.keys(bObj).length) return false;
|
|
return aKeys.every((k) => isEqual(aObj[k], bObj[k]));
|
|
}
|