+/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
+import * as tslib_1 from "tslib";
+import { Subject } from '../Subject';
+import { OuterSubscriber } from '../OuterSubscriber';
+import { subscribeToResult } from '../util/subscribeToResult';
+export function repeatWhen(notifier) {
+ return function (source) { return source.lift(new RepeatWhenOperator(notifier)); };
+}
+var RepeatWhenOperator = /*@__PURE__*/ (function () {
+ function RepeatWhenOperator(notifier) {
+ this.notifier = notifier;
+ }
+ RepeatWhenOperator.prototype.call = function (subscriber, source) {
+ return source.subscribe(new RepeatWhenSubscriber(subscriber, this.notifier, source));
+ };
+ return RepeatWhenOperator;
+}());
+var RepeatWhenSubscriber = /*@__PURE__*/ (function (_super) {
+ tslib_1.__extends(RepeatWhenSubscriber, _super);
+ function RepeatWhenSubscriber(destination, notifier, source) {
+ var _this = _super.call(this, destination) || this;
+ _this.notifier = notifier;
+ _this.source = source;
+ _this.sourceIsBeingSubscribedTo = true;
+ return _this;
+ }
+ RepeatWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+ this.sourceIsBeingSubscribedTo = true;
+ this.source.subscribe(this);
+ };
+ RepeatWhenSubscriber.prototype.notifyComplete = function (innerSub) {
+ if (this.sourceIsBeingSubscribedTo === false) {
+ return _super.prototype.complete.call(this);
+ }
+ };
+ RepeatWhenSubscriber.prototype.complete = function () {
+ this.sourceIsBeingSubscribedTo = false;
+ if (!this.isStopped) {
+ if (!this.retries) {
+ this.subscribeToRetries();
+ }
+ if (!this.retriesSubscription || this.retriesSubscription.closed) {
+ return _super.prototype.complete.call(this);
+ }
+ this._unsubscribeAndRecycle();
+ this.notifications.next();
+ }
+ };
+ RepeatWhenSubscriber.prototype._unsubscribe = function () {
+ var _a = this, notifications = _a.notifications, retriesSubscription = _a.retriesSubscription;
+ if (notifications) {
+ notifications.unsubscribe();
+ this.notifications = null;
+ }
+ if (retriesSubscription) {
+ retriesSubscription.unsubscribe();
+ this.retriesSubscription = null;
+ }
+ this.retries = null;
+ };
+ RepeatWhenSubscriber.prototype._unsubscribeAndRecycle = function () {
+ var _unsubscribe = this._unsubscribe;
+ this._unsubscribe = null;
+ _super.prototype._unsubscribeAndRecycle.call(this);
+ this._unsubscribe = _unsubscribe;
+ return this;
+ };
+ RepeatWhenSubscriber.prototype.subscribeToRetries = function () {
+ this.notifications = new Subject();
+ var retries;
+ try {
+ var notifier = this.notifier;
+ retries = notifier(this.notifications);
+ }
+ catch (e) {
+ return _super.prototype.complete.call(this);
+ }
+ this.retries = retries;
+ this.retriesSubscription = subscribeToResult(this, retries);
+ };
+ return RepeatWhenSubscriber;
+}(OuterSubscriber));
+//# sourceMappingURL=repeatWhen.js.map