diff --git a/src/operator/shareReplay.ts b/src/operator/shareReplay.ts index eabc910eb0..21d73e3cec 100644 --- a/src/operator/shareReplay.ts +++ b/src/operator/shareReplay.ts @@ -1,26 +1,12 @@ import { Observable } from '../Observable'; -import { multicast } from './multicast'; -import { ReplaySubject } from '../ReplaySubject'; -import { ConnectableObservable } from '../observable/ConnectableObservable'; import { IScheduler } from '../Scheduler'; +import { shareReplay as higherOrder } from '../operators/shareReplay'; /** * @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(); +export function shareReplay(this: Observable, bufferSize?: number, windowTime?: number, scheduler?: IScheduler): + Observable { + return higherOrder(bufferSize, windowTime, scheduler)(this); }; \ No newline at end of file diff --git a/src/operators/index.ts b/src/operators/index.ts index 7f356703b3..6f0890a203 100644 --- a/src/operators/index.ts +++ b/src/operators/index.ts @@ -63,6 +63,7 @@ export { sampleTime } from './sampleTime'; export { scan } from './scan'; export { sequenceEqual } from './sequenceEqual'; export { share } from './share'; +export { shareReplay } from './shareReplay'; export { subscribeOn } from './subscribeOn'; export { switchAll } from './switchAll'; export { switchMap } from './switchMap'; diff --git a/src/operators/shareReplay.ts b/src/operators/shareReplay.ts new file mode 100644 index 0000000000..64ad6ca58c --- /dev/null +++ b/src/operators/shareReplay.ts @@ -0,0 +1,25 @@ +import { Observable } from '../Observable'; +import { multicast } from './multicast'; +import { refCount } from './refCount'; +import { ReplaySubject } from '../ReplaySubject'; +import { ConnectableObservable } from '../observable/ConnectableObservable'; +import { IScheduler } from '../Scheduler'; + +import { MonoTypeOperatorFunction } from '../interfaces'; + +/** + * @method shareReplay + * @owner Observable + */ +export function shareReplay(bufferSize?: number, windowTime?: number, scheduler?: IScheduler ): MonoTypeOperatorFunction { + let subject: ReplaySubject; + + const connectable = multicast(function shareReplaySubjectFactory(this: ConnectableObservable) { + if (this._isComplete) { + return subject; + } else { + return (subject = new ReplaySubject(bufferSize, windowTime, scheduler)); + } + }); + return (source: Observable) => refCount()(connectable(source)); +}; \ No newline at end of file