rxjs-observable-store
Version:
A state management solution implemented using RxJS to mimic Redux architecture.
34 lines (33 loc) • 8.1 kB
TypeScript
import { Observable } from 'rxjs';
import { Object, Tuple } from 'ts-toolbelt';
declare type Index = string | number | symbol;
export declare class Store<S extends object> {
state$: Observable<S>;
private _state$;
protected constructor(initialState: S);
get state(): S;
setState(nextState: S): void;
patchState<P1 extends keyof Object.Path<S, []>>(value: Object.Path<S, [P1]>, part1: P1): void;
patchState<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>>(value: Object.Path<S, [P1, P2]>, part1: P1, part2: P2): void;
patchState<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>, P3 extends keyof Object.Path<S, [P1, P2]>>(value: Object.Path<S, [P1, P2, P3]>, part1: P1, part2: P2, part3: P3): void;
patchState<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>, P3 extends keyof Object.Path<S, [P1, P2]>, P4 extends keyof Object.Path<S, [P1, P2, P3]>>(value: Object.Path<S, [P1, P2, P3, P4]>, part1: P1, part2: P2, part3: P3, part4: P4): void;
patchState<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>, P3 extends keyof Object.Path<S, [P1, P2]>, P4 extends keyof Object.Path<S, [P1, P2, P3]>, P5 extends keyof Object.Path<S, [P1, P2, P3, P4]>>(value: Object.Path<S, [P1, P2, P3, P4, P5]>, part1: P1, part2: P2, part3: P3, part4: P4, part5: P5): void;
patchState<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>, P3 extends keyof Object.Path<S, [P1, P2]>, P4 extends keyof Object.Path<S, [P1, P2, P3]>, P5 extends keyof Object.Path<S, [P1, P2, P3, P4]>, P6 extends keyof Object.Path<S, [P1, P2, P3, P4, P5]>>(value: Object.Path<S, [P1, P2, P3, P4, P5, P6]>, part1: P1, part2: P2, part3: P3, part4: P4, part5: P5, part6: P6): void;
patchState<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>, P3 extends keyof Object.Path<S, [P1, P2]>, P4 extends keyof Object.Path<S, [P1, P2, P3]>, P5 extends keyof Object.Path<S, [P1, P2, P3, P4]>, P6 extends keyof Object.Path<S, [P1, P2, P3, P4, P5]>, P7 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6]>>(value: Object.Path<S, [P1, P2, P3, P4, P5, P6, P7]>, part1: P1, part2: P2, part3: P3, part4: P4, part5: P5, part6: P6, part7: P7): void;
patchState<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>, P3 extends keyof Object.Path<S, [P1, P2]>, P4 extends keyof Object.Path<S, [P1, P2, P3]>, P5 extends keyof Object.Path<S, [P1, P2, P3, P4]>, P6 extends keyof Object.Path<S, [P1, P2, P3, P4, P5]>, P7 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6]>, P8 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6, P7]>>(value: Object.Path<S, [P1, P2, P3, P4, P5, P6, P7, P8]>, part1: P1, part2: P2, part3: P3, part4: P4, part5: P5, part6: P6, part7: P7, part8: P8): void;
patchState<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>, P3 extends keyof Object.Path<S, [P1, P2]>, P4 extends keyof Object.Path<S, [P1, P2, P3]>, P5 extends keyof Object.Path<S, [P1, P2, P3, P4]>, P6 extends keyof Object.Path<S, [P1, P2, P3, P4, P5]>, P7 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6]>, P8 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6, P7]>, P9 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6, P7, P8]>>(value: Object.Path<S, [P1, P2, P3, P4, P5, P6, P7, P8, P9]>, part1: P1, part2: P2, part3: P3, part4: P4, part5: P5, part6: P6, part7: P7, part8: P8, part9: P9): void;
patchState<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>, P3 extends keyof Object.Path<S, [P1, P2]>, P4 extends keyof Object.Path<S, [P1, P2, P3]>, P5 extends keyof Object.Path<S, [P1, P2, P3, P4]>, P6 extends keyof Object.Path<S, [P1, P2, P3, P4, P5]>, P7 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6]>, P8 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6, P7]>, P9 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6, P7, P8]>, R extends Index[]>(value: Object.Path<S, Tuple.Concat<[P1, P2, P3, P4, P5, P6, P7, P8, P9], R>>, part1: P1, part2: P2, part3: P3, part4: P4, part5: P5, part6: P6, part7: P7, part8: P8, part9: P9, ...rest: R): void;
onChanges<P1 extends keyof Object.Path<S, []>>(part1: P1): Observable<Object.Path<S, [P1]>>;
onChanges<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>>(part1: P1, part2: P2): Observable<Object.Path<S, [P1, P2]>>;
onChanges<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>, P3 extends keyof Object.Path<S, [P1, P2]>>(part1: P1, part2: P2, part3: P3): Observable<Object.Path<S, [P1, P2, P3]>>;
onChanges<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>, P3 extends keyof Object.Path<S, [P1, P2]>, P4 extends keyof Object.Path<S, [P1, P2, P3]>>(part1: P1, part2: P2, part3: P3, part4: P4): Observable<Object.Path<S, [P1, P2, P3, P4]>>;
onChanges<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>, P3 extends keyof Object.Path<S, [P1, P2]>, P4 extends keyof Object.Path<S, [P1, P2, P3]>, P5 extends keyof Object.Path<S, [P1, P2, P3, P4]>>(part1: P1, part2: P2, part3: P3, part4: P4, part5: P5): Observable<Object.Path<S, [P1, P2, P3, P4, P5]>>;
onChanges<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>, P3 extends keyof Object.Path<S, [P1, P2]>, P4 extends keyof Object.Path<S, [P1, P2, P3]>, P5 extends keyof Object.Path<S, [P1, P2, P3, P4]>, P6 extends keyof Object.Path<S, [P1, P2, P3, P4, P5]>>(part1: P1, part2: P2, part3: P3, part4: P4, part5: P5, part6: P6): Observable<Object.Path<S, [P1, P2, P3, P4, P5, P6]>>;
onChanges<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>, P3 extends keyof Object.Path<S, [P1, P2]>, P4 extends keyof Object.Path<S, [P1, P2, P3]>, P5 extends keyof Object.Path<S, [P1, P2, P3, P4]>, P6 extends keyof Object.Path<S, [P1, P2, P3, P4, P5]>, P7 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6]>>(part1: P1, part2: P2, part3: P3, part4: P4, part5: P5, part6: P6, part7: P7): Observable<Object.Path<S, [P1, P2, P3, P4, P5, P6, P7]>>;
onChanges<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>, P3 extends keyof Object.Path<S, [P1, P2]>, P4 extends keyof Object.Path<S, [P1, P2, P3]>, P5 extends keyof Object.Path<S, [P1, P2, P3, P4]>, P6 extends keyof Object.Path<S, [P1, P2, P3, P4, P5]>, P7 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6]>, P8 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6, P7]>>(part1: P1, part2: P2, part3: P3, part4: P4, part5: P5, part6: P6, part7: P7, part8: P8): Observable<Object.Path<S, [P1, P2, P3, P4, P5, P6, P7, P8]>>;
onChanges<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>, P3 extends keyof Object.Path<S, [P1, P2]>, P4 extends keyof Object.Path<S, [P1, P2, P3]>, P5 extends keyof Object.Path<S, [P1, P2, P3, P4]>, P6 extends keyof Object.Path<S, [P1, P2, P3, P4, P5]>, P7 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6]>, P8 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6, P7]>, P9 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6, P7, P8]>>(part1: P1, part2: P2, part3: P3, part4: P4, part5: P5, part6: P6, part7: P7, part8: P8, part9: P9): Observable<Object.Path<S, [P1, P2, P3, P4, P5, P6, P7, P8, P9]>>;
onChanges<P1 extends keyof Object.Path<S, []>, P2 extends keyof Object.Path<S, [P1]>, P3 extends keyof Object.Path<S, [P1, P2]>, P4 extends keyof Object.Path<S, [P1, P2, P3]>, P5 extends keyof Object.Path<S, [P1, P2, P3, P4]>, P6 extends keyof Object.Path<S, [P1, P2, P3, P4, P5]>, P7 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6]>, P8 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6, P7]>, P9 extends keyof Object.Path<S, [P1, P2, P3, P4, P5, P6, P7, P8]>, R extends Index[]>(part1: P1, part2: P2, part3: P3, part4: P4, part5: P5, part6: P6, part7: P7, part8: P8, part9: P9, ...rest: R): Observable<Object.Path<S, Tuple.Concat<[P1, P2, P3, P4, P5, P6, P7, P8, P9], R>>>;
private getUpdatedState;
private createStateSubtree;
}
export {};