UNPKG

undux

Version:

Dead simple state management for React

78 lines (77 loc) 2.96 kB
import { Observable } from 'rxjs'; export type Undux<State extends object> = { [K in keyof State]: { key: K; previousValue: State[K]; value: State[K]; }; }; /** * Public Store interface. When you want to reference the Store type, * this is the type to use. */ export interface Store<State extends object> { get<K extends keyof State>(key: K): State[K]; set<K extends keyof State>(key: K): (value: State[K]) => void; setFrom_EXPERIMENTAL(f: (store: Store<State>) => void): void; on<K extends keyof State>(key: K): Observable<State[K]>; onAll(): Observable<Undux<State>[keyof State]>; getState(): Readonly<State>; } /** * Immutable snapshot of the current store state. One StoreSnapshot per * StoreDefinition is usually alive at a time. */ export declare class StoreSnapshot<State extends object> implements Store<State> { private state; private storeDefinition; constructor(state: State, storeDefinition: StoreDefinition<State>); get<K extends keyof State>(key: K): State[K]; set<K extends keyof State>(key: K): (value: State[K]) => void; setFrom_EXPERIMENTAL(f: (store: Store<State>) => void): void; on<K extends keyof State>(key: K): Observable<State[K]>; onAll(): Observable<Undux<State>[keyof State]>; getState(): Readonly<State>; } export type Options = { isDevMode: boolean; }; /** * We create a single instance of this per <Container />. */ export declare class StoreDefinition<State extends object> implements Store<State> { private storeSnapshot; private alls; private emitter; private setters; constructor(state: State, options: Options); on<K extends keyof State>(key: K): Observable<State[K]>; onAll(): Observable<Undux<State>[keyof State]>; get<K extends keyof State>(key: K): State[K]; set<K extends keyof State>(key: K): (value: State[K]) => void; setFrom_EXPERIMENTAL(f: (store: Store<State>) => void): void; getCurrentSnapshot(): StoreSnapshot<State>; toStore(): Store<State>; getState(): Readonly<State>; } /** * @deprecated Use `createConnectedStore` instead. */ export declare function createStore<State extends object>(initialState: State, options?: Options): StoreDefinition<State>; export type Effects<State extends object> = (store: StoreDefinition<State>) => StoreDefinition<State>; export type EffectsAs<States extends { [alias: string]: any; }> = (stores: { [K in keyof States]: StoreDefinition<States[K]>; }) => { [K in keyof States]: StoreDefinition<States[K]>; }; /** * @deprecated Use `Effects` instead. */ export type Plugin<State extends object> = (store: StoreDefinition<State>) => StoreDefinition<State>; export * from './plugins/withLogger'; export * from './plugins/withReduxDevtools'; export * from './react'; export { CreateConnectedStore } from './react/createConnectedStore'; export { CreateConnectedStoreAs } from './react/createConnectedStoreAs';