/** * @file Async Utilities * @description Common async/promise utilities for the application */ /** * Deferred promise interface */ export interface Deferred { promise: Promise; resolve: (value: T | PromiseLike) => void; reject: (reason?: unknown) => void; } /** * Create a deferred promise */ export declare function defer(): Deferred; /** * Delay execution for a specified time */ export declare function delay(ms: number): Promise; /** * Wait for a condition to be true */ export declare function waitFor(condition: () => boolean | Promise, options?: { timeout?: number; interval?: number; }): Promise; /** * Retry a function with exponential backoff */ export declare function retry(fn: () => Promise, options?: { maxAttempts?: number; delayMs?: number; maxDelayMs?: number; backoffMultiplier?: number; onRetry?: (error: Error, attempt: number) => void; }): Promise; /** * Run promises with a concurrency limit */ export declare function concurrent(items: T[], fn: (item: T, index: number) => Promise, concurrency?: number): Promise; /** * Timeout wrapper for promises */ export declare function withTimeout(promise: Promise, timeoutMs: number, message?: string): Promise; /** * Create a debounced async function */ export declare function debounceAsync Promise>(fn: T, delayMs: number): T; /** * Create a throttled async function */ export declare function throttleAsync Promise>(fn: T, intervalMs: number): T; /** * Execute a function and return a tuple of [error, result] */ export declare function tryCatch(fn: () => Promise): Promise<[Error, null] | [null, T]>; /** * Create a cancelable promise */ export interface CancelablePromise { promise: Promise; cancel: () => void; isCanceled: () => boolean; } export declare function makeCancelable(promise: Promise): CancelablePromise; /** * Run async functions in sequence */ export declare function sequence(fns: Array<() => Promise>): Promise; /** * Create a semaphore for limiting concurrent operations */ export declare function createSemaphore(limit: number): { acquire: () => Promise; release: () => void; available: number; waiting: number; };