import type { StoreEnhancer } from 'redux' import type { AutoBatchOptions } from './autoBatchEnhancer' import { autoBatchEnhancer } from './autoBatchEnhancer' import { Tuple } from './utils' import type { Middlewares } from './configureStore' import type { ExtractDispatchExtensions } from './tsHelpers' type GetDefaultEnhancersOptions = { autoBatch?: boolean | AutoBatchOptions } export type GetDefaultEnhancers> = ( options?: GetDefaultEnhancersOptions, ) => Tuple<[StoreEnhancer<{ dispatch: ExtractDispatchExtensions }>]> export const buildGetDefaultEnhancers = >( middlewareEnhancer: StoreEnhancer<{ dispatch: ExtractDispatchExtensions }>, ): GetDefaultEnhancers => function getDefaultEnhancers(options) { const { autoBatch = true } = options ?? {} let enhancerArray = new Tuple(middlewareEnhancer) if (autoBatch) { enhancerArray.push( autoBatchEnhancer( typeof autoBatch === 'object' ? autoBatch : undefined, ), ) } return enhancerArray as any }