import { strictDeepEqual, } from 'fast-equals'; import type { CTAState, } from '../types/CTAState'; import type { UseCTAParameterCompare, } from '../types/UseCTAParameterCompare'; type StrictDeepEqualParameters = Parameters; export default function compareCallback( compare?: UseCTAParameterCompare, ) { if ( typeof compare !== 'function' ) { return function cmp( previousValue: StrictDeepEqualParameters[0], nextValue: StrictDeepEqualParameters[1], ) { return strictDeepEqual( previousValue, nextValue, ); }; } return function cmp( previousValue: StrictDeepEqualParameters[0], nextValue: StrictDeepEqualParameters[1], key: keyof Initial, ) { return Boolean( compare( previousValue, nextValue, { cmp: strictDeepEqual, key, }, ), ); }; } export type CompareCallbackReturnType = ReturnType;