export interface BaseCircularMeta extends Pick, 'delete' | 'get'> { set(key: object, value: any): any; } export interface CreateComparatorCreatorOptions { areArraysEqual: TypeEqualityComparator; areDatesEqual: TypeEqualityComparator; areMapsEqual: TypeEqualityComparator; areObjectsEqual: TypeEqualityComparator; areRegExpsEqual: TypeEqualityComparator; areSetsEqual: TypeEqualityComparator; createIsNestedEqual: EqualityComparatorCreator; } export type GetComparatorOptions = ( defaultOptions: CreateComparatorCreatorOptions, ) => Partial>; export type InternalEqualityComparator = ( a: any, b: any, indexOrKeyA: any, indexOrKeyB: any, parentA: any, parentB: any, meta: Meta, ) => boolean; export type EqualityComparator = Meta extends undefined ? (a: A, b: B, meta?: Meta) => boolean : (a: A, b: B, meta: Meta) => boolean; export type EqualityComparatorCreator = ( fn: EqualityComparator, ) => InternalEqualityComparator; export type NativeEqualityComparator = (a: A, b: B) => boolean; export type TypeEqualityComparator = ( a: Type, b: Type, isEqual: InternalEqualityComparator, meta: Meta, ) => boolean; export function circularDeepEqual(a: A, b: B): boolean; export function circularShallowEqual(a: A, b: B): boolean; export function deepEqual(a: A, b: B): boolean; export function shallowEqual(a: A, b: B): boolean; export function sameValueZeroEqual(a: A, b: B): boolean; export function createCustomEqual( getComparatorOptions: GetComparatorOptions, ): EqualityComparator; export function createCustomCircularEqual>( getComparatorOptions: GetComparatorOptions, ): EqualityComparator;