1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var jitter_factory_1 = require("../jitter/jitter.factory");
4var Delay = /** @class */ (function () {
5    function Delay(options) {
6        this.options = options;
7        this.attempt = 0;
8    }
9    Delay.prototype.apply = function () {
10        var _this = this;
11        return new Promise(function (resolve) { return setTimeout(resolve, _this.jitteredDelay); });
12    };
13    Delay.prototype.setAttemptNumber = function (attempt) {
14        this.attempt = attempt;
15    };
16    Object.defineProperty(Delay.prototype, "jitteredDelay", {
17        get: function () {
18            var jitter = jitter_factory_1.JitterFactory(this.options);
19            return jitter(this.delay);
20        },
21        enumerable: true,
22        configurable: true
23    });
24    Object.defineProperty(Delay.prototype, "delay", {
25        get: function () {
26            var constant = this.options.startingDelay;
27            var base = this.options.timeMultiple;
28            var power = this.numOfDelayedAttempts;
29            var delay = constant * Math.pow(base, power);
30            return Math.min(delay, this.options.maxDelay);
31        },
32        enumerable: true,
33        configurable: true
34    });
35    Object.defineProperty(Delay.prototype, "numOfDelayedAttempts", {
36        get: function () {
37            return this.attempt;
38        },
39        enumerable: true,
40        configurable: true
41    });
42    return Delay;
43}());
44exports.Delay = Delay;
45//# sourceMappingURL=delay.base.js.map