UNPKG

@intlayer/config

Version:

Retrieve Intlayer configurations and manage environment variables for both server-side and client-side environments.

45 lines (43 loc) 1.35 kB
const require_logger = require('./logger.cjs'); const require_utils_extractErrorMessage = require('./utils/extractErrorMessage.cjs'); //#region src/retryManager.ts const DEFAULT_MAX_RETRY = 3; const DEFAULT_DELAY = 0; /** * Wrap an async function `fn` so it’s retried on failure. * * @param fn The async function to wrap * @param options { maxRetry, delay } * @returns A new function with the same signature as `fn` */ const retryManager = (fn, { maxRetry = DEFAULT_MAX_RETRY, delay = DEFAULT_DELAY, onError, onMaxTryReached } = {}) => async (...args) => { let lastError; for (let attempt = 0; attempt <= maxRetry; attempt++) try { return await fn(...args); } catch (err) { lastError = err; const error = require_utils_extractErrorMessage.extractErrorMessage(err); if (attempt >= maxRetry) { if (onMaxTryReached) { onMaxTryReached?.({ error, attempt, maxRetry }); return null; } throw err; } if (onError) onError?.({ error, attempt, maxRetry }); else require_logger.logger(error, { level: "error" }); if (delay > 0) await new Promise((res) => setTimeout(res, delay)); } throw lastError ?? /* @__PURE__ */ new Error("Unexpected: retry loop completed without result"); }; //#endregion exports.retryManager = retryManager; //# sourceMappingURL=retryManager.cjs.map