/// import { Deferred } from './Deferred'; declare type LogLevel = 'verbose' | 'info' | 'error'; declare type FactoryLogger = (message: string, level: LogLevel) => void; declare type PooledObject = { resource: T; timeout: number; useCount: number; }; declare type InUseObject = { resource: T; useCount: number; }; export interface FactoryOptions { name?: string; create: () => Promise; destroy: (resource: T) => void | Promise; validate: (resource: T) => boolean; max: number; min: number; maxUses?: number; idleTimeoutMillis?: number; acquireTimeoutMillis?: number; reapIntervalMillis?: number; log?: FactoryLogger | boolean; } export declare class Pool { protected _factory: FactoryOptions; protected _count: number; protected _draining: boolean; protected idleTimeoutMillis: number; protected acquireTimeoutMillis: number; protected reapIntervalMillis: number; protected log: FactoryLogger | boolean; protected maxUsesPerResource: number; protected _pendingAcquires: Deferred[]; protected _inUseObjects: InUseObject[]; protected _availableObjects: PooledObject[]; protected _removeIdleTimer: NodeJS.Timeout; protected _removeIdleScheduled: boolean; constructor(factory: FactoryOptions); get size(): number; get name(): string; get available(): number; get using(): number; get waiting(): number; get maxSize(): number; get minSize(): number; protected _log(message: string, level: LogLevel): void; protected _removeIdle(): void; protected _scheduleRemoveIdle(): void; protected _dispense(): void; protected _createResource(): void; protected _addResourceToAvailableObjects(resource: RawResource, useCount: number): void; protected _addResourceToInUseObjects(resource: RawResource, useCount: number): void; protected _ensureMinimum(): void; acquire(): Promise; release(resource: RawResource): void; destroy(resource: RawResource): Promise; drain(): Promise; destroyAllNow(): Promise; } export {};