--- /dev/null
+import { Subject } from '../Subject';
+import { OuterSubscriber } from '../OuterSubscriber';
+import { subscribeToResult } from '../util/subscribeToResult';
+export function repeatWhen(notifier) {
+ return (source) => source.lift(new RepeatWhenOperator(notifier));
+}
+class RepeatWhenOperator {
+ constructor(notifier) {
+ this.notifier = notifier;
+ }
+ call(subscriber, source) {
+ return source.subscribe(new RepeatWhenSubscriber(subscriber, this.notifier, source));
+ }
+}
+class RepeatWhenSubscriber extends OuterSubscriber {
+ constructor(destination, notifier, source) {
+ super(destination);
+ this.notifier = notifier;
+ this.source = source;
+ this.sourceIsBeingSubscribedTo = true;
+ }
+ notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+ this.sourceIsBeingSubscribedTo = true;
+ this.source.subscribe(this);
+ }
+ notifyComplete(innerSub) {
+ if (this.sourceIsBeingSubscribedTo === false) {
+ return super.complete();
+ }
+ }
+ complete() {
+ this.sourceIsBeingSubscribedTo = false;
+ if (!this.isStopped) {
+ if (!this.retries) {
+ this.subscribeToRetries();
+ }
+ if (!this.retriesSubscription || this.retriesSubscription.closed) {
+ return super.complete();
+ }
+ this._unsubscribeAndRecycle();
+ this.notifications.next();
+ }
+ }
+ _unsubscribe() {
+ const { notifications, retriesSubscription } = this;
+ if (notifications) {
+ notifications.unsubscribe();
+ this.notifications = null;
+ }
+ if (retriesSubscription) {
+ retriesSubscription.unsubscribe();
+ this.retriesSubscription = null;
+ }
+ this.retries = null;
+ }
+ _unsubscribeAndRecycle() {
+ const { _unsubscribe } = this;
+ this._unsubscribe = null;
+ super._unsubscribeAndRecycle();
+ this._unsubscribe = _unsubscribe;
+ return this;
+ }
+ subscribeToRetries() {
+ this.notifications = new Subject();
+ let retries;
+ try {
+ const { notifier } = this;
+ retries = notifier(this.notifications);
+ }
+ catch (e) {
+ return super.complete();
+ }
+ this.retries = retries;
+ this.retriesSubscription = subscribeToResult(this, retries);
+ }
+}
+//# sourceMappingURL=repeatWhen.js.map
\ No newline at end of file