export type RoutineList = string[]; export interface FluxAction { meta?: any; payload?: Model; type: string; } export interface ActionCreator { (payload: Model): FluxAction (payload: Model, meta: any): FluxAction } export interface Routine { (): FluxAction; (payload: InputType): FluxAction; (payload: InputType, meta: any): FluxAction; trigger: ActionCreator; TRIGGER: string; } export interface AsyncRoutine extends Routine { failure: ActionCreator; FAILURE: string; fulfill: ActionCreator; FULFILL: string; getError: (state: any) => Error; isInitialized: (state: any) => boolean; isLoading: (state: any) => boolean; request: ActionCreator; REQUEST: string; success: ActionCreator; SUCCESS: string; } export type Ident = any; export interface RoutineDict { [key: string]: AsyncRoutine; } export interface EntitySelector { (state: StateType): Model; (state: StateType, ident: Ident): Model; } export interface IdentSelector { (state: StateType): Ident; } export interface PropSelector { (state: StateType, ident: Ident): PropType; } export interface EntityStore { createFindSelector: (identSelector: IdentSelector) => EntitySelector; getAll: EntitySelector; getCollection: EntitySelector; getObject: EntitySelector; getProp: PropSelector; getFlag: PropSelector; getSize: EntitySelector; isEmpty: EntitySelector; name: string; } export interface ItemReducer { (state: Model, action: FluxAction>): Model } export interface ReducerMap { [key: string]: ItemReducer } export interface IdentResolver { (item: Model): Ident; } export interface StoreConfig { clearedBy?: (AsyncRoutine|AsyncRoutine)[]; collectionReducers?: ReducerMap; deletedBy?: (AsyncRoutine|AsyncRoutine)[]; identAttr?: string; identResolver?: IdentResolver; on?: ReducerMap; providedBy?: (AsyncRoutine|AsyncRoutine)[]; } declare module 'redux-entity-routines' { function createAsyncRoutine( baseName: string ): AsyncRoutine; function createEntityRoutines( entity: string, routines: RoutineList, sync?: boolean ): RoutineDict; function createEntityStore( storeName: string, storeConfig: StoreConfig, ): EntityStore function createEntitiesReducer(...stores: EntityStore[]): any; function operations(state: any, action: FluxAction): any; }