import { EMPTY } from '../observable/empty'; import { operate } from '../util/lift'; import { createOperatorSubscriber } from './OperatorSubscriber'; import { innerFrom } from '../observable/innerFrom'; import { timer } from '../observable/timer'; export function repeat(countOrConfig) { var _a; var count = Infinity; var delay; if (countOrConfig != null) { if (typeof countOrConfig === 'object') { (_a = countOrConfig.count, count = _a === void 0 ? Infinity : _a, delay = countOrConfig.delay); } else { count = countOrConfig; } } return count <= 0 ? function () { return EMPTY; } : operate(function (source, subscriber) { var soFar = 0; var sourceSub; var resubscribe = function () { sourceSub === null || sourceSub === void 0 ? void 0 : sourceSub.unsubscribe(); sourceSub = null; if (delay != null) { var notifier = typeof delay === 'number' ? timer(delay) : innerFrom(delay(soFar)); var notifierSubscriber_1 = createOperatorSubscriber(subscriber, function () { notifierSubscriber_1.unsubscribe(); subscribeToSource(); }); notifier.subscribe(notifierSubscriber_1); } else { subscribeToSource(); } }; var subscribeToSource = function () { var syncUnsub = false; sourceSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, function () { if (++soFar < count) { if (sourceSub) { resubscribe(); } else { syncUnsub = true; } } else { subscriber.complete(); } })); if (syncUnsub) { resubscribe(); } }; subscribeToSource(); }); } //# sourceMappingURL=repeat.js.map