import { IObserver } from '../../observer/interfaces'; import { IObservable } from '../../observable/interfaces'; import { IObservableObserver } from '../interfaces'; import { TPipeActivateMode } from './types'; import { IPipeContext } from './context/interfaces'; import { IPipeHook } from './hook/interfaces'; /** INTERFACES **/ export interface IPipeConstructor { create( create?: (context: IPipeContext, IObservable>) => (IPipeHook, IObservable> | void) ): IPipe, IObservable>; // creates a Pipe new, TObservable extends IObservable>(create: () => IObservableObserver): IPipe; } /** * A Pipe is an ObservableObserver which self activate/deactivate */ export interface IPipe, TObservable extends IObservable> extends IObservableObserver { readonly activateMode: TPipeActivateMode; readonly deactivateMode: TPipeActivateMode; readonly activated: boolean; activate(mode?: TPipeActivateMode): this; deactivate(mode?: TPipeActivateMode): this; }