import * as t from 'tcomb'; import { BehaviorSubject } from 'rxjs/BehaviorSubject'; import { StateT } from './StateT'; export declare type TransitionFunctionFunction = (s: S) => S; export declare type TransitionFunctionPatch = { [k in keyof S]?: S[k] | null; }; export declare type TransitionFunction = (transition: TransitionFunctionFunction | TransitionFunctionPatch) => void; export declare type DryRunTransitionFunction = (state: S, transition: TransitionFunctionFunction | TransitionFunctionPatch) => { patch: TransitionFunctionPatch; stateChanged: boolean; newState: S; }; export declare type MakeTransitionParams = { stateSubject: BehaviorSubject; transitionReducer: TransitionFunctionFunction; stateType: t.Interface; syncToBrowser: (oldState: S, newState: S) => void; dryRunBrowserTransition: (newState: S) => S; }; export default function makeTransition({stateSubject, transitionReducer, stateType, syncToBrowser, dryRunBrowserTransition}: MakeTransitionParams): { transition: TransitionFunction; dryRunTransition: DryRunTransitionFunction; };