import EventEmitter from '../EventEmitter.js';
export declare enum LoaderEvent {
    LoadProgress = "load-progress",
    LoadCancelled = "load-cancelled",
    LoadWarning = "load-warning",
    Converted = "converted",
    Traversed = "traversed"
}
export interface LoaderEventPayload {
    [LoaderEvent.LoadProgress]: {
        progress: number;
        id: string;
    };
    [LoaderEvent.Converted]: {
        count: number;
    };
    [LoaderEvent.Traversed]: {
        count: number;
    };
    [LoaderEvent.LoadCancelled]: string;
    [LoaderEvent.LoadWarning]: {
        message: string;
    };
}
export declare abstract class Loader extends EventEmitter {
    protected _resource: string;
    protected _resourceData: unknown;
    abstract get resource(): string;
    abstract get finished(): boolean;
    protected constructor(resource: string, resourceData?: unknown);
    on<T extends LoaderEvent>(eventType: T, listener: (arg: LoaderEventPayload[T]) => void): void;
    abstract load(): Promise<boolean>;
    abstract cancel(): void;
    dispose(): void;
}
