import * as definition from '.';
import { EventData, Observable } from '../../data/observable';
import * as imageSource from '../../image-source';
export interface DownloadRequest {
    url: string;
    key: string;
    completed?: (image: any, key: string) => void;
    error?: (key: string) => void;
}
export declare class Cache extends Observable implements definition.Cache {
    static downloadedEvent: string;
    static downloadErrorEvent: string;
    placeholder: imageSource.ImageSource;
    maxRequests: number;
    private _enabled;
    private _pendingDownloads;
    private _queue;
    private _currentDownloads;
    enableDownload(): void;
    disableDownload(): void;
    push(request: DownloadRequest): void;
    enqueue(request: DownloadRequest): void;
    private _addRequest;
    private _mergeRequests;
    get(key: string): any;
    set(key: string, image: any): void;
    remove(key: string): void;
    clear(): void;
    _downloadCore(request: definition.DownloadRequest): void;
    _onDownloadCompleted(key: string, image: any): void;
    _onDownloadError(key: string, err: Error): void;
    private _shouldDownload;
    private _download;
    private _updateQueue;
}
export interface Cache {
    on(eventNames: string, callback: (args: EventData) => void, thisArg?: any): void;
    on(event: 'downloaded', callback: (args: definition.DownloadedData) => void, thisArg?: any): void;
    on(event: 'downloadError', callback: (args: definition.DownloadError) => void, thisArg?: any): void;
}
