"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.repeat = void 0; var empty_1 = require("../observable/empty"); var lift_1 = require("../util/lift"); var OperatorSubscriber_1 = require("./OperatorSubscriber"); var innerFrom_1 = require("../observable/innerFrom"); var timer_1 = require("../observable/timer"); 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_1.EMPTY; } : lift_1.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_1.timer(delay) : innerFrom_1.innerFrom(delay(soFar)); var notifierSubscriber_1 = OperatorSubscriber_1.createOperatorSubscriber(subscriber, function () { notifierSubscriber_1.unsubscribe(); subscribeToSource(); }); notifier.subscribe(notifierSubscriber_1); } else { subscribeToSource(); } }; var subscribeToSource = function () { var syncUnsub = false; sourceSub = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, undefined, function () { if (++soFar < count) { if (sourceSub) { resubscribe(); } else { syncUnsub = true; } } else { subscriber.complete(); } })); if (syncUnsub) { resubscribe(); } }; subscribeToSource(); }); } exports.repeat = repeat; //# sourceMappingURL=repeat.js.map