undux
Version:
Dead simple state management for React
78 lines (77 loc) • 2.96 kB
TypeScript
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';