@oxog/delay
Version:
A comprehensive, zero-dependency delay/timeout utility library with advanced timing features
43 lines • 2.34 kB
JavaScript
;
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