import { ConvertActionHelpers } from "./action"; import { GetContainer } from "./container"; import { NyaxContext } from "./context"; import { Effects } from "./effect"; import { Reducers } from "./reducer"; import { ConvertGetters, Selectors } from "./selector"; import { ConvertState, InitialState } from "./state"; import { Nyax } from "./store"; import { Subscriptions } from "./subscription"; import { Resolved, UnionToIntersection } from "./util"; export interface Model { initialState(): TInitialState; selectors(): TSelectors; reducers(): TReducers; effects(): TEffects; subscriptions(): TSubscriptions; dependencies: TDependencies; state: ConvertState>; getters: ConvertGetters>; actions: ConvertActionHelpers, ReturnType>; namespace: string; key: string | undefined; getContainer: GetContainer; nyax: Nyax; } export declare type ModelClass = new (...args: any[]) => Model; export interface NamespacedModelClass extends ModelClass { namespace: string; isDynamic: TDynamic; } export declare type ModelPropertyKey = "initialState" | "selectors" | "reducers" | "effects" | "subscriptions"; export declare type ExtractModelProperty = ReturnType[TPropertyKey]>; export declare type ExtractModelDependencies = InstanceType["dependencies"]; export declare type MergeModelsProperty = Resolved; }[number]>>; export declare type MergeSubModelsProperty, TPropertyKey extends ModelPropertyKey> = Resolved<{ [K in keyof TSubModelClasses]: ExtractModelProperty; }>; export declare type MergeModelsDependencies = UnionToIntersection<{ [K in keyof TModelClasses & number]: InstanceType["dependencies"]; }[number]>; export declare type MergeSubModelsDependencies> = UnionToIntersection<{ [K in keyof TSubModelClasses]: InstanceType["dependencies"]; }[keyof TSubModelClasses]>; export declare class ModelBase implements Model { protected readonly __nyax_container: { nyax: Nyax; namespace: string; key: string | undefined; state: any; getters: any; actions: any; }; initialState(): any; selectors(): any; reducers(): any; effects(): any; subscriptions(): any; constructor(__nyax_container: { nyax: Nyax; namespace: string; key: string | undefined; state: any; getters: any; actions: any; }); get state(): any; get getters(): any; get actions(): any; get dependencies(): any; get namespace(): any; get key(): any; get getContainer(): any; get nyax(): any; } export declare function mergeModelClasses(...modelClasses: TModelClasses): ModelClass, MergeModelsProperty, MergeModelsProperty, MergeModelsProperty, MergeModelsProperty, MergeModelsProperty>; export declare function mergeSubModelClasses>(subModelClasses: TSubModelClasses): ModelClass, MergeSubModelsProperty, MergeSubModelsProperty, MergeSubModelsProperty, MergeSubModelsProperty, MergeSubModelsProperty>; export declare function createBaseModelClass(): ModelClass; export declare function defineModel(namespace: string, modelClass: ModelClass, isDynamic?: TDynamic): NamespacedModelClass; export declare type RegisterModelClasses = (...modelClasses: NamespacedModelClass[]) => void; export declare function createRegisterModelClasses(nyaxContext: NyaxContext): RegisterModelClasses;