UNPKG

@vitruvius-labs/ts-predicate

Version:
31 lines (30 loc) 882 B
import { isRecord } from "../type-guard/is-record.mjs"; function isSimilar(a, b) { if (a === b) { return true; } if (Number.isNaN(a) && Number.isNaN(b)) { return true; } if (isRecord(a) && isRecord(b)) { const KEYS_A = Object.keys(a); const KEYS_B = Object.keys(b); if (!isSimilar(KEYS_A, KEYS_B)) { return false; } return KEYS_A.every((key) => { return isSimilar(a[key], b[key]); }); } if (Array.isArray(a) && Array.isArray(b) && a.length === b.length) { // Stryker disable next-line EqualityOperator: Accessing out of bound values on both arrays for (let i = 0; i < a.length; ++i) { if (!isSimilar(a[i], b[i])) { return false; } } return true; } return false; } export { isSimilar };