/** * Performs a deep equality comparison between two values. * * This function recursively compares primitive values, arrays, and plain objects * to determine if they are structurally and value-equal. It handles nested * structures and supports all primitive types including null and undefined. * * @param {unknown} val1 - The first value to compare * @param {unknown} val2 - The second value to compare * @returns {boolean} True if values are deeply equal, false otherwise * * @example * ```typescript * // Primitive comparison * isEqualPrimitive(1, 1); // true * isEqualPrimitive("hello", "hello"); // true * isEqualPrimitive(null, null); // true * isEqualPrimitive(1, "1"); // false (different types) * ``` * * @example * ```typescript * // Array comparison * isEqualPrimitive([1, 2, 3], [1, 2, 3]); // true * isEqualPrimitive([1, [2, 3]], [1, [2, 3]]); // true (nested arrays) * isEqualPrimitive([1, 2], [1, 2, 3]); // false (different length) * isEqualPrimitive([], []); // true (empty arrays) * ``` * * @example * ```typescript * // Object comparison * isEqualPrimitive({ a: 1 }, { a: 1 }); // true * isEqualPrimitive({ a: { b: 2 } }, { a: { b: 2 } }); // true (nested objects) * isEqualPrimitive({ a: 1 }, { a: 1, b: 2 }); // false (different keys) * isEqualPrimitive({}, {}); // true (empty objects) * ``` * * @example * ```typescript * // Mixed nested structures * const obj1 = { users: [{ name: "John", age: 30 }], active: true }; * const obj2 = { users: [{ name: "John", age: 30 }], active: true }; * isEqualPrimitive(obj1, obj2); // true * * const obj3 = { users: [{ name: "John", age: 31 }], active: true }; * isEqualPrimitive(obj1, obj3); // false (different nested value) * ``` * * @example * ```typescript * // Edge cases * isEqualPrimitive(undefined, undefined); // true * isEqualPrimitive(NaN, NaN); // false (NaN !== NaN in JavaScript) * isEqualPrimitive(0, -0); // true (0 === -0 in JavaScript) * ``` * * @since 0.0.5 */ export declare function isEqualPrimitive(val1: unknown, val2: unknown): boolean;