import { Action, IModuleHandlers, CoreModuleState, CommonModule, Model, ModuleGetter, IStore } from './basic'; declare type Handler = F extends (...args: infer P) => any ? (...args: P) => { type: string; } : never; declare type Actions = { [K in keyof Ins]: Ins[K] extends (...args: any) => any ? Handler : never; }; export interface Module { default: { moduleName: N; model: Model; initState: H['initState']; views: VS; actions: Actions; }; } export declare type ExportModule = (moduleName: N, ModuleHandles: { new (): H; }, views: V) => Module['default']; export declare const exportModule: ExportModule; export declare function cacheModule(module: T): () => T; export declare function getModuleByName(moduleName: string): Promise | CommonModule; export declare function getView(moduleName: string, viewName: string): T | Promise; export declare function loadModel(moduleName: Extract, controller: IStore): void | Promise; export declare abstract class CoreModuleHandlers = {}> implements IModuleHandlers { readonly initState: S; actions: Actions; store: IStore; moduleName: string; constructor(initState: S); protected get state(): S; protected get rootState(): R; protected getCurrentActionName(): string; protected get currentRootState(): R; protected get currentState(): S; protected dispatch(action: Action): void | Promise; protected loadModel(moduleName: string): void | Promise; Init(initState: S): S; Update(payload: Partial, key: string): S; Loading(payload: { [group: string]: string; }): S; } export declare function modelHotReplacement(moduleName: string, ModuleHandles: { new (): IModuleHandlers; }): void; export declare type ReturnModule = T extends Promise ? R : T; declare type ModuleFacade = { name: string; views: M['default']['views']; viewName: keyof M['default']['views']; state: M['default']['initState']; actions: M['default']['actions']; actionNames: { [key in keyof M['default']['actions']]: string; }; }; export declare type RootModuleFacade]: () => CommonModule | Promise>; } = any> = { [K in Extract]: ModuleFacade>>; }; export declare type RootModuleActions = { [K in keyof A]: keyof A[K]['actions']; }; export declare type RootModuleAPI = { [key in keyof A]: Pick; }; export declare type RootModuleState = { [key in keyof A]: A[key]['state']; }; export declare function getRootModuleAPI(data?: { [moduleName: string]: string[]; }): RootModuleAPI; export declare type BaseLoadView = (moduleName: M, viewName: V, options?: Options) => A[M]['views'][V]; export {};