// Debouncing promise evaluation export function debouncePromise(func: (...args: F) => T | Promise, timeout = 0): (...args: F) => Promise { let timer: NodeJS.Timeout; return (...params: F) => new Promise(resolve => { clearTimeout(timer); timer = global.setTimeout(() => resolve(func(...params)), timeout); }); }