@mfederczuk/deeptools
Version:
A set of utility functions that recursively operate on objects
1 lines • 1.65 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:true});exports.deepEquals=void 0;const utils_1=require("./_internal/utils");const deepFreeze_1=require("./deepFreeze");function deepEquals(obj1,obj2,options){if(!(0,utils_1.isNonPrimitive)(obj1)||!(0,utils_1.isNonPrimitive)(obj2)){if(Number.isNaN(obj1)&&Number.isNaN(obj2)){return true}return obj1===obj2}const obj1Keys=(0,utils_1.getPropertyKeys)(obj1);const obj2Keys=(0,utils_1.getPropertyKeys)(obj2);if(obj1Keys.length!==obj2Keys.length){return false}if((options===null||options===void 0?void 0:options.ignoreOrder)!==true){for(let i=0;i<obj1Keys.length;++i){if(obj1Keys[i]!==obj2Keys[i]){return false}}}else{for(let i=0;i<obj1Keys.length;++i){if(!obj2Keys.includes(obj1Keys[i])){return false}}}if(Object.getPrototypeOf(obj1)!==Object.getPrototypeOf(obj2)){return false}for(const propKey of[...obj1Keys,...obj2Keys]){const obj1PropDescriptor=Object.getOwnPropertyDescriptor(obj1,propKey);const obj2PropDescriptor=Object.getOwnPropertyDescriptor(obj2,propKey);if(obj1PropDescriptor.configurable!==obj2PropDescriptor.configurable||obj1PropDescriptor.enumerable!==obj2PropDescriptor.enumerable||obj1PropDescriptor.writable!==obj2PropDescriptor.writable){return false}if("value"in obj1PropDescriptor!=="value"in obj2PropDescriptor){return false}if("value"in obj1PropDescriptor&&"value"in obj2PropDescriptor){if(!deepEquals(obj1PropDescriptor.value,obj2PropDescriptor.value)){return false}}if(obj1PropDescriptor.get!==obj2PropDescriptor.get||obj1PropDescriptor.set!==obj2PropDescriptor.set){return false}}return true}exports.deepEquals=deepEquals;(0,deepFreeze_1.deepFreeze)(deepEquals);