UNPKG

@benev/slate

Version:
39 lines 1.52 kB
import { is } from "../../is.js"; export const deepEqual = (alpha, bravo) => { function recurse(alpha, bravo, parents) { if (!is.object(alpha) || !is.object(bravo)) return alpha === bravo; if (parents.includes(alpha)) throw new Error(`forbidden circularity detected in deep equal comparison`); const newParents = [...parents, alpha]; if (alpha instanceof Map && bravo instanceof Map) { if (alpha.size !== bravo.size) return false; for (const [key, val] of alpha) if (!bravo.has(key) || !recurse(val, bravo.get(key), newParents)) return false; } else if (alpha instanceof Set && bravo instanceof Set) { if (alpha.size !== bravo.size) return false; for (const item of alpha) if (!Array.from(bravo).some(bItem => recurse(item, bItem, newParents))) return false; } else { const keys1 = Object.keys(alpha); const keys2 = Object.keys(bravo); if (keys1.length !== keys2.length) return false; for (const key of keys1) { if (!keys2.includes(key)) return false; if (!recurse(alpha[key], bravo[key], newParents)) return false; } } return true; } return recurse(alpha, bravo, []); }; //# sourceMappingURL=equal.js.map