// * Jolly Cobra's schedulers import { AnyToVoidFunction } from "../../types"; export default function throttle( fn: F, ms: number, shouldRunFirst = true, ) { let interval: number | null = null; let isPending: boolean; let args: Parameters; return (..._args: Parameters) => { isPending = true; args = _args; if(!interval) { if(shouldRunFirst) { isPending = false; // @ts-ignore fn(...args); } interval = setInterval(() => { if (!isPending) { clearInterval(interval!); interval = null; return; } isPending = false; // @ts-ignore fn(...args); }, ms) as any; } }; }