Sha256: d0cfe55acb809e118947d31db564c1603a858f1180889bf2dd518faa8cf8ec13

Contents?: true

Size: 1.52 KB

Versions: 49

Compression:

Stored size: 1.52 KB

Contents

import { Observable } from '../Observable';
import { ReplaySubject } from '../ReplaySubject';
import { IScheduler } from '../Scheduler';
import { Subscription } from '../Subscription';
import { MonoTypeOperatorFunction } from '../interfaces';
import { Subscriber } from '../Subscriber';

/**
 * @method shareReplay
 * @owner Observable
 */
export function shareReplay<T>(bufferSize?: number, windowTime?: number, scheduler?: IScheduler ): MonoTypeOperatorFunction<T> {
  return (source: Observable<T>) => source.lift(shareReplayOperator(bufferSize, windowTime, scheduler));
}

function shareReplayOperator<T>(bufferSize?: number, windowTime?: number, scheduler?: IScheduler) {
  let subject: ReplaySubject<T>;
  let refCount = 0;
  let subscription: Subscription;
  let hasError = false;
  let isComplete = false;

  return function shareReplayOperation(this: Subscriber<T>, source: Observable<T>) {
    refCount++;
    if (!subject || hasError) {
      hasError = false;
      subject = new ReplaySubject<T>(bufferSize, windowTime, scheduler);
      subscription = source.subscribe({
        next(value) { subject.next(value); },
        error(err) {
          hasError = true;
          subject.error(err);
        },
        complete() {
          isComplete = true;
          subject.complete();
        },
      });
    }

    const innerSub = subject.subscribe(this);

    return () => {
      refCount--;
      innerSub.unsubscribe();
      if (subscription && refCount === 0 && isComplete) {
        subscription.unsubscribe();
      }
    };
  };
};

Version data entries

49 entries across 49 versions & 4 rubygems

Version Path
ilog-0.4.1 node_modules/rxjs/src/operators/shareReplay.ts
ilog-0.4.0 node_modules/rxjs/src/operators/shareReplay.ts
ilog-0.3.3 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-18.0.0 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-17.21.0 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-17.20.0 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-17.19.1 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-17.19.0 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-17.18.0 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-17.17.0 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-17.16.0 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-17.15.0 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-17.14.0 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-17.13.0 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-17.12.2 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-17.12.1 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-17.12.0 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-17.11.0 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-17.10.0 node_modules/rxjs/src/operators/shareReplay.ts
govuk_publishing_components-17.9.0 node_modules/rxjs/src/operators/shareReplay.ts