12345678910111213141516171819202122232425 |
- import { Observable } from '../Observable';
- import { ReplaySubject } from '../ReplaySubject';
- import { multicast } from './multicast';
- import { ConnectableObservable } from '../observable/ConnectableObservable';
- import { UnaryFunction, MonoTypeOperatorFunction, OperatorFunction, SchedulerLike, ObservableInput, ObservedValueOf } from '../types';
-
- /* tslint:disable:max-line-length */
- export function publishReplay<T>(bufferSize?: number, windowTime?: number, scheduler?: SchedulerLike): MonoTypeOperatorFunction<T>;
- export function publishReplay<T, O extends ObservableInput<any>>(bufferSize?: number, windowTime?: number, selector?: (shared: Observable<T>) => O, scheduler?: SchedulerLike): OperatorFunction<T, ObservedValueOf<O>>;
- /* tslint:enable:max-line-length */
-
- export function publishReplay<T, R>(bufferSize?: number,
- windowTime?: number,
- selectorOrScheduler?: SchedulerLike | OperatorFunction<T, R>,
- scheduler?: SchedulerLike): UnaryFunction<Observable<T>, ConnectableObservable<R>> {
-
- if (selectorOrScheduler && typeof selectorOrScheduler !== 'function') {
- scheduler = selectorOrScheduler;
- }
-
- const selector = typeof selectorOrScheduler === 'function' ? selectorOrScheduler : undefined;
- const subject = new ReplaySubject<T>(bufferSize, windowTime, scheduler);
-
- return (source: Observable<T>) => multicast(() => subject, selector)(source) as ConnectableObservable<R>;
- }
|