// Created on savesnippets.com ยท https://savesnippets.com/cgbg5z0rEnh9uc export function debounce( fn: (...args: Args) => void, delay: number, ): (...args: Args) => void { let timer: ReturnType | null = null; return (...args) => { if (timer) clearTimeout(timer); timer = setTimeout(() => fn(...args), delay); }; } const onSearch = debounce((q: string) => { fetch(`/search?q=${encodeURIComponent(q)}`); }, 300); input.addEventListener('input', e => onSearch((e.target as HTMLInputElement).value));