// Code snippet showcase:
export function debounce<T extends (...args: unknown[]) => void>(
fn: T,
delay: number,
): (...args: Parameters<T>) => void {
let timerId: Nullable<ReturnType<typeof setTimeout>> = null;
return (...args: Parameters<T>) => {
if (timerId !== null) clearTimeout(timerId);
timerId = setTimeout(() => {
fn(...args);
}, delay);
};
}
export function chunk<T>(arr: T[], size: number): T[][] {
if (size <= 0) throw new RangeError('Chunk size must be greater than 0');
const result: T[][] = [];
for (let index = 0; index < arr.length; index += size) {
result.push(arr.slice(index, index + size));
}
return result;
}