/**
 * Concurrency class for running concurrent tasks while managing a limited amount of resources.
 */
export default class Concurrency {
    /**
    * Maximum number of workers running in parallel. If set to `null`, there is no limit.
    */
    maxConcurrency: number;
    /**
    * Number of currently active workers.
    */
    activeWorkers: number;
    /**
    * Queue of jobs waiting to be completed.
    */
    private jobQueue;
    /**
    * "Resolve" callbacks of the waitForCompletion() promises.
    */
    private waiting;
    /**
    * Constructs a new instance of concurrency manager.
    * @param {number} maxConcurrency Maximum number of workers running in parallel.
    */
    constructor(maxConcurrency: number);
    /**
    * Takes a waiting job out of the queue and runs it.
    */
    private runNextJob;
    /**
    * Pass a job (a time-demanding async function) to the concurrency manager. \
    * The time of the job's execution depends on the concurrency manager itself
    * (given a generous enough `maxConcurrency` value, it might be immediate,
    * but this is not guaranteed).
    * @param worker Async function to be executed (job to be processed).
    */
    addJob(job: () => Promise<any>): void;
    /**
    * Waits until there is no running nor waiting job. \
    * If the concurrency manager is idle at the time of calling this function,
    * it waits until at least one job is completed (can be "presubscribed").
    * @returns Promise, resolved after there is no running/waiting worker.
    */
    waitForCompletion(): Promise<void>;
}
