/**
 * It limits concurrently executed promises
 * @example
 *
 * var queue = new Queue(1);
 *
 * queue.add(function () {
     *     // resolve of this promise will resume next request
     *     return downloadTarballFromGithub(url, file);
     * })
 * .then(function (file) {
     *     doStuffWith(file);
     * });
 *
 * queue.add(function () {
     *     return downloadTarballFromGithub(url, file);
     * })
 * // This request will be paused
 * .then(function (file) {
     *     doStuffWith(file);
     * });
 */
export default class PromiseQueue {
    private queue;
    private maxQueuedPromises;
    private pendingPromises;
    private maxPendingPromises;
    /**
     * @param [maxPendingPromises=Infinity] max number of concurrently executed promises
     * @param [maxQueuedPromises=Infinity]  max number of queued promises
     */
    constructor(maxPendingPromises?: number, maxQueuedPromises?: number);
    add<T>(promiseGenerator: () => Promise<T>): Promise<T>;
    /**
     * Number of simultaneously running promises (which are resolving)
     */
    getPendingLength(): number;
    /**
     * Number of queued promises (which are waiting)
     */
    getQueueLength(): number;
    /**
     * @returns true if first item removed from queue
     */
    private _dequeue();
}
