export type IDisposer = ( ) => void ; export interface IJsonPatch { op : "replace" | "add" | "remove" ; path : string ; value ? : any ; } export interface IReversibleJsonPatch extends IJsonPatch { oldValue ? : any ; } export interface IEncodedJsonPatch extends IReversibleJsonPatch { encoded ? : Buffer ; } export type PatchListener < T > = ( patch : IJsonPatch , obj ? : any , root ? : T ) => void ; export interface IStateTracker < T > { onPatch ( listner , params ? ) : IDisposer ; snapshot ( params ? ) : { [ key ] : any ; } ; dispose ( ) : void ; }