24 lines
544 B
TypeScript
24 lines
544 B
TypeScript
import { Blocker } from './Blocker';
|
|
|
|
/**
|
|
* ThrottleBlocker enforces a minimum time delay between executions.
|
|
*
|
|
* Useful for preventing rapid successive actions, such as button mashing.
|
|
*/
|
|
export class ThrottleBlocker extends Blocker {
|
|
private lastExecutionTime = 0;
|
|
|
|
constructor(private readonly delayMs: number) {}
|
|
|
|
canExecute(): boolean {
|
|
return Date.now() - this.lastExecutionTime >= this.delayMs;
|
|
}
|
|
|
|
block(): void {
|
|
this.lastExecutionTime = Date.now();
|
|
}
|
|
|
|
release(): void {
|
|
// No-op for throttle blocker
|
|
}
|
|
} |