///
import { EventEmitter } from "events";
import { Progress } from "../Progress";
import { Timestamp } from "../Types";
import { FileInput } from "../parse/File";
import { PAuthor, PCall, PChannel, PGuild, PMessage } from "../parse/Types";
export declare interface Parser {
emit(event: "guild", guild: PGuild, at?: Timestamp): boolean;
emit(event: "channel", channel: PChannel, at?: Timestamp): boolean;
emit(event: "author", author: PAuthor, at?: Timestamp): boolean;
emit(event: "message", message: PMessage, at?: Timestamp): boolean;
emit(event: "call", call: PCall, at?: Timestamp): boolean;
on(event: "guild", listener: (guild: PGuild, at?: Timestamp) => void): this;
on(event: "channel", listener: (channel: PChannel, at?: Timestamp) => void): this;
on(event: "author", listener: (author: PAuthor, at?: Timestamp) => void): this;
on(event: "message", listener: (message: PMessage, at?: Timestamp) => void): this;
on(event: "call", listener: (call: PCall, at?: Timestamp) => void): this;
emit(event: "out-of-order"): boolean;
on(event: "out-of-order", listener: () => void): this;
}
export declare abstract class Parser extends EventEmitter {
/**
* Parses the given input file. It should emit events with the parsed data.
*
* Note that this function should yield every so often (e.g. every few MBs or hundreds of messages)
* to process messages and report progress back to the UI.
*/
abstract parse(file: FileInput, progress?: Progress): AsyncGenerator;
}