UNPKG

pocket-hook-form

Version:

pocket-store base hook form

64 lines (51 loc) 1.42 kB
import isObject from './isObject'; import isDateObject from './isDateObject'; import isPrimitive from './isPrimitive'; export default function deepEqual( object1: any, object2: any, _internal_visited = new WeakSet(), ) { if (isPrimitive(object1) || isPrimitive(object2)) { return object1 === object2; } if (isDateObject(object1) && isDateObject(object2)) { return object1.getTime() === object2.getTime(); } if (isDateObject(object1) || isDateObject(object2)) { return ( isDateObject(object1) && isDateObject(object2) && object1.getTime() === object2.getTime() ); } const keys1 = Object.keys(object1); const keys2 = Object.keys(object2); if (keys1.length !== keys2.length) { return false; } if (_internal_visited.has(object1) || _internal_visited.has(object2)) { return true; } _internal_visited.add(object1); _internal_visited.add(object2); for (const key of keys1) { const val1 = object1[key]; if (!keys2.includes(key)) { return false; } if (key !== 'ref') { const val2 = object2[key]; if ( (isDateObject(val1) && isDateObject(val2)) || (isObject(val1) && isObject(val2)) || (Array.isArray(val1) && Array.isArray(val2)) ? !deepEqual(val1, val2, _internal_visited) : val1 !== val2 ) { return false; } } } return true; }