function createRateLimiter<TFn>(fn, initialOptions): SolidRateLimiter<TFn>
function createRateLimiter<TFn>(fn, initialOptions): SolidRateLimiter<TFn>
Defined in: rate-limiter/createRateLimiter.ts:61
A low-level Solid hook that creates a RateLimiter instance to enforce rate limits on function execution.
This hook is designed to be flexible and state-management agnostic - it simply returns a rate limiter instance that you can integrate with any state management solution (createSignal, etc).
Rate limiting is a simple "hard limit" approach that allows executions until a maximum count is reached within a time window, then blocks all subsequent calls until the window resets. Unlike throttling or debouncing, it does not attempt to space out or collapse executions intelligently.
For smoother execution patterns:
• TFn extends AnyFunction
TFn
RateLimiterOptions<TFn>
SolidRateLimiter<TFn>
// Basic rate limiting - max 5 calls per minute
const rateLimiter = createRateLimiter(apiCall, {
limit: 5,
window: 60000,
});
// Monitor rate limit status
const handleClick = () => {
if (rateLimiter.remainingInWindow() > 0) {
rateLimiter.maybeExecute(data);
} else {
showRateLimitWarning();
}
};
// Access rate limiter state via signals
console.log('Executions:', rateLimiter.executionCount());
console.log('Rejections:', rateLimiter.rejectionCount());
console.log('Remaining:', rateLimiter.remainingInWindow());
console.log('Next window in:', rateLimiter.msUntilNextWindow());
// Basic rate limiting - max 5 calls per minute
const rateLimiter = createRateLimiter(apiCall, {
limit: 5,
window: 60000,
});
// Monitor rate limit status
const handleClick = () => {
if (rateLimiter.remainingInWindow() > 0) {
rateLimiter.maybeExecute(data);
} else {
showRateLimitWarning();
}
};
// Access rate limiter state via signals
console.log('Executions:', rateLimiter.executionCount());
console.log('Rejections:', rateLimiter.rejectionCount());
console.log('Remaining:', rateLimiter.remainingInWindow());
console.log('Next window in:', rateLimiter.msUntilNextWindow());
Your weekly dose of JavaScript news. Delivered every Monday to over 100,000 devs, for free.