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