­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.retry = void 0; var lift_1 = require("../util/lift"); var empty_1 = require("../observable/empty"); var OperatorSubscriber_1 = require("./OperatorSubscriber"); function retry(configOrCount) { if (configOrCount === void 0) { configOrCount = Infinity; } var config; if (configOrCount && typeof configOrCount === 'object') { config = configOrCount; } else { config = { count: configOrCount, }; } var count = config.count, _a = config.resetOnSuccess, resetOnSuccess = _a === void 0 ? false : _a; return count <= 0 ? function () { return empty_1.EMPTY; } : lift_1.operate(function (source, subscriber) { var soFar = 0; var innerSub; var subscribeForRetry = function () { var syncUnsub = false; innerSub = source.subscribe(new OperatorSubscriber_1.OperatorSubscriber(subscriber, function (value) { if (resetOnSuccess) { soFar = 0; } subscriber.next(value); }, undefined, function (err) { if (soFar++ < count) { if (innerSub) { innerSub.unsubscribe(); innerSub = null; subscribeForRetry(); } else { syncUnsub = true; } } else { subscriber.error(err); } })); if (syncUnsub) { innerSub.unsubscribe(); innerSub = null; subscribeForRetry(); } }; subscribeForRetry(); }); } exports.retry = retry; //# sourceMappingURL=retry.js.map