import Deferred from "./Deferred"; export interface IPoolOptions { min?: number; max?: number; limit?: number; } export declare enum PoolResourceStatus { Created = 0, Ready = 1, Destroyed = 2 } export interface IPoolResource { resource: T; reserved: boolean; status: PoolResourceStatus; } export interface IPoolResourceInternal extends IPoolResource { createDeferred: Deferred; destroyDeferred?: Deferred; } export interface IPoolResourceFactory { create(): Promise; destroy(resource: T): Promise; validate(resource: T): Promise; } export declare class Pool { private factory; private resources; private killed; private running; private readonly opts; constructor(factory: IPoolResourceFactory, opts?: IPoolOptions); /** * Start the pool */ private checkInventory; /** * Create a resource * * @returns {Promise} */ private createResource; /** * is running * * @returns {boolean} */ readonly isRunning: boolean; /** * is shutting down * * @returns {boolean} */ readonly isShuttingDown: boolean; /** * is completely shutdown * * @returns {boolean} */ readonly isShutdown: boolean; /** * Find a pooled resource record * * @param resource * @returns {IPoolResource} */ private getPoolResource; /** * Get all resources * * @returns {List} */ getResources(): Array>; /** * Get active not destroyed resources * * @returns {List} */ getActiveResources(): Array>; /** * Get available - active + not reserved instances * * @returns {any} */ getAvailableResources(): Array>; canCreateResource(): boolean; /** * Acquire a resource * * @returns {Promise} */ acquire(): Promise; /** * Validate a resource is still valid * * @param resource * @returns {boolean|Promise} */ validate(resource: T): Promise; /** * Release a resource * * @param resource * @returns {Promise} */ release(resource: T): Promise; /** * Destroy a resource * * @param resource * @returns {Promise} */ destroy(resource: T): Promise; /** * Drain the pool */ drain(): Promise; }