import { Observable } from 'rxjs'; export declare type Reducer = (state: T, index: number) => T; export declare type MetaReducer = (s: Store) => Store; export interface Store { state$: Observable; dispatch(action: Reducer): Observable; complete(): void; currentState(): T; } export declare function store(init: T): Store; export interface WithId { id: string; } export declare type Item = T & WithId; export declare type EqOp = (a: T) => (b: T) => boolean; export declare const eqId: EqOp; export declare class StoreByArray implements Store { private equalTo; /** * E is minimal type to apply to equalTo * T is type of object stored * e.g. if T = { name: string, id: string }, E could be { id: string } */ readonly state$: Observable; constructor(equalTo?: EqOp); private s; dispatch(action: Reducer): Observable; currentState(): T[]; complete(): void; get$(key: E): Observable; filter$(fn: (x: T) => boolean): Observable; setState(state: T[]): Observable; insert(item: T): Observable; remove(item: T): Observable; update(...values: T[]): Observable; clear(): Observable; }