///
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 {};