import { type FieldOfType } from '../key'; import { type EqualityComparatorFunction } from '../value/comparator'; import { type FilterFromPOJOFunction } from './object.filter.pojo'; /** * Performs a deep equality comparison between two values. * * Recursively compares arrays, objects, Maps, Sets, primitives, and Dates. * * @param a - First value to compare * @param b - Second value to compare * @returns `true` if the values are deeply equal */ export declare function areEqualPOJOValues(a: F, b: F): boolean; /** * Performs a deep equality comparison with a POJO filter applied to each value before comparison. * * Recursively compares arrays, objects, Maps, Sets, primitives, and Dates. * * @param a - First value to compare * @param b - Second value to compare * @param pojoFilter - Filter function applied to each value before comparison * @returns `true` if the filtered values are deeply equal */ export declare function areEqualPOJOValuesUsingPojoFilter(a: F, b: F, pojoFilter: FilterFromPOJOFunction): boolean; /** * Configuration for an ObjectFieldEqualityChecker. */ export interface ObjectFieldEqualityCheckerConfig { /** * Fields to capture as part of the compressor. */ readonly fields: (ObjectFieldEqualityCheckerFieldConfig> | FieldOfType)[]; /** * Default equality function to use when a field's equality function is not provided. */ readonly defaultEqualityFunction?: EqualityComparatorFunction; } /** * Field configration for a single field of a ObjectFieldEqualityCheckerConfig. */ export interface ObjectFieldEqualityCheckerFieldConfig> { /** * Field name to compare. */ readonly fieldName: K; /** * Custom equality comparator for the field. */ readonly isEqual: EqualityComparatorFunction; } /** * Results of an ObjectFieldEqualityChecker. */ export interface ObjectFieldEqualityCheckResults { /** * First compared object. */ readonly a: T; /** * Second compared object. */ readonly b: T; /** * Returns true if the object has no unequal fields. */ readonly isEqual: boolean; /** * Fields that are considered equal. */ readonly equalFields: FieldOfType[]; /** * Fields that are considered unequal. */ readonly unequalFields: FieldOfType[]; } /** * Function used to check if two objects are considered equal. */ export type ObjectFieldEqualityChecker = ((a: Partial, b: Partial) => ObjectFieldEqualityCheckResults) & { readonly _fields: Map>>; }; /** * Creates an {@link ObjectFieldEqualityChecker} that compares two objects field-by-field using configured equality functions. * * Fields can be specified as simple field names (using the default `===` comparator) or as config objects with custom comparators. * * @param config - Configuration with the fields to compare and an optional default equality function * @returns A function that compares two objects and reports which fields are equal/unequal */ export declare function objectFieldEqualityChecker(config: ObjectFieldEqualityCheckerConfig): ObjectFieldEqualityChecker;