import { IReadonlyList } from '../../misc/readonly-list/interfaces'; import { IObserver } from '../observer/interfaces'; import { IObservableObserver } from '../observable-observer/interfaces'; import { IObservableHook } from './hook/interfaces'; import { IObservableContext } from './context/interfaces'; import { TObservableObservedByResultNonCyclic, TObservablePipeResult, TObservablePipeThroughResult, TObservablePipeToCallbackResult, TObservablePipeToObserverResult, TObserverOrCallback } from './types'; /** INTERFACES **/ export interface IObservableConstructor { // creates an Observable new(create?: (context: IObservableContext) => (IObservableHook | void)): IObservable; } export interface IObservableTypedConstructor { new(create?: (context: IObservableContext) => (IObservableHook | void)): IObservable; } /** * An Observable is a push source: it emits data without any request from the receivers. * An Observable may be observed by many Observers. */ export interface IObservable { // list of observers observing this observable readonly observers: IReadonlyList>; // true if this Observable is observed readonly observed: boolean; // observes this Observable with "observer" pipeTo>(observer: O): TObservablePipeToObserverResult; // returns the observer // creates an Observable from "callback" and observes this Observable with it pipeTo void>(callback: C): TObservablePipeToCallbackResult; // returns the observer // observes this Observable with "observableObserver.observer" and return the Observable pipeThrough, IObservable>>(observableObserver: OO): TObservablePipeThroughResult; // returns the observer of the observableObserver // observes this Observable with "observableObserver.observer" and return the observableObserver pipe, IObservable>>(observableObserver: OO): TObservablePipeResult; // returns the observableObserver // like "pipeTo" but returns this instead observedBy[]>(...observers: O): TObservableObservedByResultNonCyclic; // returns this // detaches all the observers observing this observable clearObservers(): this; }