UNPKG

diginext-utils

Version:
57 lines 1.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isEqual = isEqual; const isObject_1 = require("./isObject"); /** * Performs a deep equality comparison between two values. * Recursively compares objects and their nested properties. * * @template T - The type of values to compare * @param valueA - First value to compare * @param valueB - Second value to compare * @returns True if values are deeply equal * * @example * ```ts * isEqual({ a: 1, b: 2 }, { a: 1, b: 2 }); // true * isEqual({ a: 1, b: { c: 3 } }, { a: 1, b: { c: 3 } }); // true * isEqual({ a: 1 }, { a: 2 }); // false * isEqual([1, 2, 3], [1, 2, 3]); // true * ``` */ function isEqual(valueA, valueB) { // Handle primitive types and same reference if (valueA === valueB) { return true; } // Handle null and undefined if (valueA == null || valueB == null) { return valueA === valueB; } // Handle arrays if (Array.isArray(valueA) && Array.isArray(valueB)) { if (valueA.length !== valueB.length) { return false; } return valueA.every((item, index) => isEqual(item, valueB[index])); } // Handle objects if ((0, isObject_1.isObject)(valueA) && (0, isObject_1.isObject)(valueB)) { const objA = valueA; const objB = valueB; const keysA = Object.keys(objA); const keysB = Object.keys(objB); if (keysA.length !== keysB.length) { return false; } return keysA.every((key) => { if (!(key in objB)) { return false; } return isEqual(objA[key], objB[key]); }); } // Different types or primitives that aren't equal return false; } //# sourceMappingURL=isEqual.js.map