blockers
This commit is contained in:
24
apps/website/lib/blockers/ThrottleBlocker.ts
Normal file
24
apps/website/lib/blockers/ThrottleBlocker.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user