import type { EntityAdapter, EntityId, EntityAdapterOptions } from './models' import { createInitialStateFactory } from './entity_state' import { createSelectorsFactory } from './state_selectors' import { createSortedStateAdapter } from './sorted_state_adapter' import { createUnsortedStateAdapter } from './unsorted_state_adapter' import type { WithRequiredProp } from '../tsHelpers' export function createEntityAdapter( options: WithRequiredProp, 'selectId'>, ): EntityAdapter export function createEntityAdapter( options?: Omit, 'selectId'>, ): EntityAdapter /** * * @param options * * @public */ export function createEntityAdapter( options: EntityAdapterOptions = {}, ): EntityAdapter { const { selectId, sortComparer, }: Required> = { sortComparer: false, selectId: (instance: any) => instance.id, ...options, } const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId) const stateFactory = createInitialStateFactory(stateAdapter) const selectorsFactory = createSelectorsFactory() return { selectId, sortComparer, ...stateFactory, ...selectorsFactory, ...stateAdapter, } }