import { Observable } from 'rxjs/Observable'; import { Subject } from 'rxjs/Subject'; import { Middleware, GenericStoreEnhancer, Store, Dispatch, Action } from 'redux'; export { Middleware, GenericStoreEnhancer }; export interface Action { key: string; value: any; subject: Subject; options: ActionOptions; } export interface ActionOptions { desc?: string; } export interface Next { state: T; value: T[K]; } export declare type Value = T[K]; export declare type ValueAsync = Promise | Observable; export declare type Resolver = (value: T[K], state: T) => T[K]; export declare type ResolverAsync = (value: T[K], state: T) => Promise | Observable; export declare type ResolverInResolver = (value: T[K], state: T) => ((value: T[K], state: T) => T[K]); export declare type ResolverInResolverAsync = (value: T[K], state: T) => (Promise<(value: T[K], state: T) => T[K]>) | (Observable<(value: T[K], state: T) => T[K]>); export declare type AsyncWrappedResolver = Promise<(value: T[K], state: T) => T[K]> | Observable<(value: T[K], state: T) => T[K]>; export declare type ValueOrResolver = Value | ValueAsync | Resolver | ResolverAsync | ResolverInResolver | ResolverInResolverAsync | AsyncWrappedResolver; export declare type PartialValue = Partial; export declare type PartialValueAsync = Promise> | Observable>; export declare type PartialResolver = (value: T[K], state: T) => Partial; export declare type PartialResolverAsync = (value: T[K], state: T) => Promise> | Observable>; export declare type PartialResolverInResolver = (value: T[K], state: T) => ((value: T[K], state: T) => Partial); export declare type PartialResolverInResolverAsync = (value: T[K], state: T) => (Promise<(value: T[K], state: T) => Partial>) | (Observable<(value: T[K], state: T) => Partial>); export declare type PartialAsyncWrappedResolver = Promise<(value: T[K], state: T) => Partial> | Observable<(value: T[K], state: T) => Partial>; export declare type PartialValueOrResolver = PartialValue | PartialValueAsync | PartialResolver | PartialResolverAsync | PartialResolverInResolver | PartialResolverInResolverAsync | PartialAsyncWrappedResolver; export declare function mergeObject(obj: T, partials: Partial<{ [P in keyof T]: T[P]; }>[]): T; export declare type ObjectKeys = { [P in keyof T]: P; }; /** * create and get ObjectKeys */ export declare function createObjectKeys(state: T): ObjectKeys; /** * DEPRECATED: alias for createObjectKeys */ export declare const getObjectKeys: typeof createObjectKeys; export declare type ObjectKey = K; export declare type RecursiveReadonly = { readonly [P in keyof T]: RecursiveReadonly; }; export declare enum LoopType { 'asap' = 0, 'setimmediate' = 1, 'settimeout' = 2, } export interface StoreOptions { concurrent?: number; output?: boolean; loopType?: number; ngZone?: any; testing?: boolean; useFreeze?: boolean; reduxApplyMiddleware?: GenericStoreEnhancer; reduxMiddlewares?: Middleware[]; useReduxDevToolsExtension?: boolean; } export interface MiddlewareInterface { (store: Store): (next: Dispatch) => (action: Action) => Action; } /** * reference: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze */ export declare function deepFreeze(obj: T): T;