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