import { IArrayWillChange, IArrayWillSplice, IInterceptor, IMapWillChange, IObjectWillChange, IObservableArray, IObservableValue, IValueWillChange, Lambda, ObservableMap, getAdministration, ObservableSet, ISetWillChange, isFunction } from "../internal" export function intercept( value: IObservableValue, handler: IInterceptor> ): Lambda export function intercept( observableArray: IObservableArray, handler: IInterceptor | IArrayWillSplice> ): Lambda export function intercept( observableMap: ObservableMap | Map, handler: IInterceptor> ): Lambda export function intercept( observableSet: ObservableSet | Set, handler: IInterceptor> ): Lambda export function intercept( observableMap: ObservableMap | Map, property: K, handler: IInterceptor> ): Lambda export function intercept(object: object, handler: IInterceptor): Lambda export function intercept( object: T, property: K, handler: IInterceptor> ): Lambda export function intercept(thing, propOrHandler?, handler?): Lambda { if (isFunction(handler)) return interceptProperty(thing, propOrHandler, handler) else return interceptInterceptable(thing, propOrHandler) } function interceptInterceptable(thing, handler) { return getAdministration(thing).intercept_(handler) } function interceptProperty(thing, property, handler) { return getAdministration(thing, property).intercept_(handler) }