UNPKG

nats-jobs

Version:
84 lines (83 loc) 2.44 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.stopwatch = exports.repeater = exports.getNextBackoff = exports.defer = exports.expBackoff = exports.nanosToMs = exports.nanos = void 0; const ms_1 = __importDefault(require("ms")); const nanos = (x) => (0, ms_1.default)(x) * 1e6; exports.nanos = nanos; const nanosToMs = (x) => (x ? x / 1e6 : 0); exports.nanosToMs = nanosToMs; /** * Given a starting backoff in ms, generate an array of doubling * values with at most `numEntries` and repeating after * `repeatAfter` entries. * * Note that `repeatAfter` defaults to `numEntries` and `numEntries` * defaults to 5. */ const expBackoff = (startMs, options) => { const numEntries = options?.numEntries || 5; const repeatAfter = options?.repeatAfter || numEntries; const vals = []; let val = startMs; for (let i = 0; i < numEntries; i++) { vals.push(val); val = i + 1 >= repeatAfter ? val : val * 2; } return vals; }; exports.expBackoff = expBackoff; function defer() { // eslint-disable-next-line let done = (value) => { }; const promise = new Promise((resolve) => { // Swap original done fn with promise resolve fn done = resolve; }); return { done, promise, }; } exports.defer = defer; /** * Get the next backoff based on the redelivery count. If given * an array and no item exists for the attempt number use the last * backoff in the array. */ const getNextBackoff = (backoff, msg) => { if (Array.isArray(backoff)) { return backoff[msg.info.redeliveryCount - 1] || backoff.at(-1); } return backoff; }; exports.getNextBackoff = getNextBackoff; /** * Call fn on an interval. */ const repeater = (fn, interval) => { let timer; const start = () => { fn(); timer = setInterval(fn, interval); }; const stop = () => { clearInterval(timer); }; return { start, stop }; }; exports.repeater = repeater; /** * Calculate elapsed time in milliseconds. */ const stopwatch = () => { let startTime; const start = () => { startTime = new Date().getTime(); }; const stop = () => new Date().getTime() - startTime; return { start, stop }; }; exports.stopwatch = stopwatch;