declare type MapOf<T> = {
    [name: string]: T;
};
export declare type ActionCreator = Function | Generator;
export declare type Resolver = Function | Generator;
export declare type Selector = Function;
export declare type AnyConfig = ReduxStoreConfig<any, any, any>;
export interface StoreInstance<Config extends AnyConfig> {
    getSelectors: () => SelectorsOf<Config>;
    getActions: () => ActionCreatorsOf<Config>;
    subscribe: (listener: () => void) => () => void;
}
export interface StoreDescriptor<Config extends AnyConfig> {
    /**
     * Store Name
     */
    name: string;
    /**
     * Creates a store instance
     */
    instantiate: (registry: DataRegistry) => StoreInstance<Config>;
}
export interface ReduxStoreConfig<State, ActionCreators extends MapOf<ActionCreator>, Selectors extends MapOf<Selector>> {
    initialState?: State;
    reducer: (state: any, action: any) => any;
    actions?: ActionCreators;
    resolvers?: MapOf<Resolver>;
    selectors?: Selectors;
    controls?: MapOf<Function>;
}
export interface DataRegistry {
    register: (store: StoreDescriptor<any>) => void;
}
export interface DataEmitter {
    emit: () => void;
    subscribe: (listener: () => void) => () => void;
    pause: () => void;
    resume: () => void;
    isPaused: boolean;
}
declare type ActionCreatorsOf<Config extends AnyConfig> = Config extends ReduxStoreConfig<any, infer ActionCreators, any> ? {
    [name in keyof ActionCreators]: Function | Generator;
} : never;
declare type SelectorsOf<Config extends AnyConfig> = Config extends ReduxStoreConfig<any, any, infer Selectors> ? {
    [name in keyof Selectors]: Function;
} : never;
export {};
//# sourceMappingURL=types.d.ts.map