import { Observable } from '../Observable'; import { multicast } from './multicast'; import { ReplaySubject } from '../ReplaySubject'; import { ConnectableObservable } from '../observable/ConnectableObservable'; import { IScheduler } from '../Scheduler'; /** * @method shareReplay * @owner Observable */ export function shareReplay( this: Observable, bufferSize?: number, windowTime?: number, scheduler?: IScheduler ): Observable { let subject: ReplaySubject; const connectable = multicast.call(this, function shareReplaySubjectFactory(this: ConnectableObservable) { if (this._isComplete) { return subject; } else { return (subject = new ReplaySubject(bufferSize, windowTime, scheduler)); } }); return connectable.refCount(); };