UNPKG

@oxog/delay

Version:

A comprehensive, zero-dependency delay/timeout utility library with advanced timing features

43 lines 2.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateDelay = validateDelay; exports.validateRetryOptions = validateRetryOptions; exports.validateFunction = validateFunction; const index_js_1 = require("../types/index.js"); function validateDelay(ms) { if (typeof ms !== 'number') { throw new index_js_1.DelayError(`Delay must be a number, got ${typeof ms}`, index_js_1.DelayErrorCode.INVALID_TIME, { value: ms }); } if (!Number.isFinite(ms)) { throw new index_js_1.DelayError(`Delay must be a finite number, got ${ms}`, index_js_1.DelayErrorCode.INVALID_TIME, { value: ms }); } if (ms < 0) { throw new index_js_1.DelayError(`Delay cannot be negative, got ${ms}`, index_js_1.DelayErrorCode.NEGATIVE_DELAY, { value: ms }); } } function validateRetryOptions(options) { if (!options || typeof options !== 'object') { throw new index_js_1.DelayError('Retry options must be an object', index_js_1.DelayErrorCode.INVALID_OPTIONS, { options }); } const opts = options; if (typeof opts['attempts'] !== 'number' || opts['attempts'] < 1) { throw new index_js_1.DelayError('Retry attempts must be a positive number', index_js_1.DelayErrorCode.INVALID_OPTIONS, { attempts: opts['attempts'] }); } if (opts['delay'] !== undefined) { if (typeof opts['delay'] !== 'number' && typeof opts['delay'] !== 'function') { throw new index_js_1.DelayError('Retry delay must be a number or function', index_js_1.DelayErrorCode.INVALID_OPTIONS, { delay: opts['delay'] }); } if (typeof opts['delay'] === 'number' && opts['delay'] < 0) { throw new index_js_1.DelayError('Retry delay cannot be negative', index_js_1.DelayErrorCode.NEGATIVE_DELAY, { delay: opts['delay'] }); } } if (opts['backoff'] && !['linear', 'exponential'].includes(opts['backoff'])) { throw new index_js_1.DelayError('Backoff strategy must be "linear" or "exponential"', index_js_1.DelayErrorCode.INVALID_OPTIONS, { backoff: opts['backoff'] }); } } function validateFunction(fn, name) { if (typeof fn !== 'function') { throw new index_js_1.DelayError(`${name} must be a function`, index_js_1.DelayErrorCode.INVALID_OPTIONS, { fn, name }); } } //# sourceMappingURL=validation.js.map