event-storm
Version:
In memory event store
55 lines (41 loc) • 1.9 kB
TypeScript
export type AnyObject = Record<string, any>;
export type Values<T> = T[keyof T];
export type AnyFunction = (...args: any) => any;
export type IStormState<Type> = {
[Property in keyof Type]: Type[Property];
};
export interface IModelOptions {
fireDuplicates?: boolean;
[key: string]: any;
}
export interface IPersistOptions<T> {
storageKey: string;
beforeunload: (storm: IStormState<T>) => Partial<IStormState<T>>;
permanent?: boolean,
}
export interface ISubscriptionOptions<T> {
needPrevious?: boolean;
}
export interface IVirtualModelOptions<T> {
handler: (...args: any[]) => T;
models: IModel<any>[];
options: IModelOptions;
}
export interface IModel<T, G extends IModelOptions = IModelOptions> {
getState: () => T;
setOptions: (options: G) => void;
dispatch: (value: T, options?: IModelOptions) => void | Promise<void>;
subscribe: (callback: (nextValue: T, options?: IModelOptions) => void, options?: ISubscriptionOptions<T>) => () => void;
}
export type IStormSubcription<T, G = any> = (state: IStormState<T>, subscribe: (state: G) => G) => void;
export type IStormMiddleware<T> = (nextState: IStormState<T>, prevState: IStormState<T>, configs: AnyObject) => void;
export interface IStorm<T> {
getState: () => IStormState<T>;
subscribe: (callback: IStormSubcription<T>) => () => void;
addMiddleware: (middleware: IStormMiddleware<T>) => () => void;
dispatch: (segments: Partial<T> | ((params: IStormState<T>) => Partial<T>), options?: AnyObject) => void;
}
export function createModel<T>(value?: T, options?: IModelOptions): IModel<T>;
export function createVirtualModel<T>(options: IVirtualModelOptions<T>): Omit<IModel<T, IVirtualModelOptions<T>>, 'dispatch'>;
export function createStorm<T extends AnyObject>(data: T): IStorm<T>;
export function persisted(stormCreator: typeof createStorm): <T>(options: IPersistOptions<T>) => typeof createStorm;