import { innerFrom } from '../observable/innerFrom'; import { Subject } from '../Subject'; import { operate } from '../util/lift'; import { createOperatorSubscriber } from './OperatorSubscriber'; export function repeatWhen(notifier) { return operate(function (source, subscriber) { var innerSub; var syncResub = false; var completions$; var isNotifierComplete = false; var isMainComplete = false; var checkComplete = function () { return isMainComplete && isNotifierComplete && (subscriber.complete(), true); }; var getCompletionSubject = function () { if (!completions$) { completions$ = new Subject(); innerFrom(notifier(completions$)).subscribe(createOperatorSubscriber(subscriber, function () { if (innerSub) { subscribeForRepeatWhen(); } else { syncResub = true; } }, function () { isNotifierComplete = true; checkComplete(); })); } return completions$; }; var subscribeForRepeatWhen = function () { isMainComplete = false; innerSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, function () { isMainComplete = true; !checkComplete() && getCompletionSubject().next(); })); if (syncResub) { innerSub.unsubscribe(); innerSub = null; syncResub = false; subscribeForRepeatWhen(); } }; subscribeForRepeatWhen(); }); } //# sourceMappingURL=repeatWhen.js.map