import { Event, EventDispatcher, EventListener, LoadingManager } from 'three';
import { IAssetImporter, IAssetImporterEventTypes, ImportAssetOptions, ImportFilesOptions, ImportResult, ProcessRawOptions } from './IAssetImporter';
import { IAsset, IFile } from './IAsset';
import { IImporter, ILoader } from './IImporter';
export type IAssetImporterEvent = Event & {
    type: IAssetImporterEventTypes;
    data?: ImportResult;
    options?: ProcessRawOptions;
    path?: string;
    progress?: number;
    state?: string;
    error?: any;
    files?: Map<string, IFile>;
    url?: string;
    loaded?: number;
    total?: number;
    loader?: ILoader;
};
/**
 * Asset Importer
 *
 * Utility class to import assets from local files, blobs, urls, etc.
 * Used in {@link AssetManager} to import assets.
 * Acts as a wrapper over three.js LoadingManager and adds support for dynamically loading loaders, caching assets, better event dispatching and file tracking.
 * @category Asset Manager
 */
export declare class AssetImporter extends EventDispatcher<IAssetImporterEvent, IAssetImporterEventTypes> implements IAssetImporter {
    private _loadingManager;
    private _logger;
    protected _rootContext?: {
        path: string;
        rootUrl: string;
    };
    private _loaderCache;
    private _fileDatabase;
    private _cachedAssets;
    readonly importers: IImporter[];
    constructor(logging?: boolean);
    get loadingManager(): LoadingManager;
    get cachedAssets(): IAsset[];
    addImporter(...importers: IImporter[]): void;
    removeImporter(...importers: IImporter[]): void;
    import<T extends ImportResult | undefined = ImportResult>(assetOrPath?: string | IAsset | IAsset[] | File | File[], options?: ImportAssetOptions): Promise<(T | undefined)[]>;
    importSingle<T extends ImportResult | undefined = ImportResult>(asset?: IAsset | string, options?: ImportAssetOptions): Promise<T | undefined>;
    importPath<T extends ImportResult | undefined = ImportResult | undefined>(path: string, options?: ImportAssetOptions): Promise<T[]>;
    importAsset<T extends ImportResult | undefined = ImportResult | undefined>(asset?: IAsset, options?: ImportAssetOptions, onDownloadProgress?: (e: ProgressEvent) => void): Promise<T[]>;
    importFile<T extends ImportResult | undefined = ImportResult | undefined>(file?: File, options?: ImportAssetOptions, onDownloadProgress?: (e: ProgressEvent) => void): Promise<T[]>;
    /**
     * Import multiple local files/blobs from a map of files, like when a local folder is loaded, or when multiple files are dropped.
     * @param files
     * @param options
     */
    importFiles<T extends ImportResult | undefined = ImportResult | undefined>(files: Map<string, IFile>, options?: ImportFilesOptions): Promise<Map<string, T[]>>;
    private _loadFile;
    /**
     * Register a file in the database and return a loader for it. If the loader does not exist, it will be created.
     * @param path
     * @param file
     */
    registerFile(path: string, file?: IFile): ILoader | undefined;
    /**
     * Remove a file from the database and revoke the object url if it exists.
     * @param path
     */
    unregisterFile(path: string): void;
    processRaw<T extends (ImportResult | undefined) = ImportResult>(res: T | T[], options: ProcessRawOptions, path?: string): Promise<T[]>;
    processRawSingle<T extends (ImportResult | undefined) = ImportResult>(res: T, options: ProcessRawOptions, path?: string): Promise<T>;
    dispose(): void;
    /**
     * Clear memory asset and loader cache. Browser cache and custom cache storage is not cleared with this.
     */
    clearCache(): void;
    unregisterAllFiles(): void;
    clearLoaderCache(): void;
    resolveURL(url: string): string;
    protected _urlModifier(url: string): string;
    private _isRootFile;
    private _getImporter;
    private _getLoader;
    private _createLoader;
    addEventListener<T extends IAssetImporterEvent['type'] & IAssetImporterEventTypes>(type: T, listener: EventListener<IAssetImporterEvent, T, this>): void;
    protected _onLoad(): void;
    protected _onProgress(url: string, loaded: number, total: number): void;
    protected _onError(url: string): void;
    protected _onStart(url: string, loaded: number, total: number): void;
    /**
     * @deprecated use {@link processRaw} instead
     * @param res
     * @param options
     */
    processImported(res: any, options: ProcessRawOptions, path?: string): Promise<any[]>;
}
//# sourceMappingURL=AssetImporter.d.ts.map