import { Command, CommandHandler, CommandSink, Event, EventHandler } from './Aggregate.interfaces';
import { Queue } from '../queue/Queue';
import Promise from 'bluebird';
declare type MaybePromise<T> = T | Promise<T>;
export declare class Aggregate<State extends object = object> {
    id: string;
    type?: string;
    _uncommittedEvents: Array<Event>;
    _commandHandler: CommandHandler;
    _commandSink: CommandSink<State>;
    _eventHandler: EventHandler;
    _version: number;
    _commandQueue: Queue;
    _state: State;
    constructor(commandSink?: CommandSink<State>, eventHandler?: EventHandler, commandHandler?: CommandHandler);
    _rehydrate(events: Array<Event>, version?: number, snapshot?: State): void;
    _getSnapshot(): State | undefined;
    _apply(event: Event, isNew?: boolean): Aggregate<State>;
    _process(command: Command): Promise<Aggregate<State>>;
    _sink(commandToSink: MaybePromise<Command>): globalThis.Promise<Aggregate<State> | true>;
    /**
     * Built in functionality to manage deletion of Aggregates / streams
     */
    delete(): globalThis.Promise<true | Aggregate<State>>;
    processDelete(command: Command): Aggregate<State>;
    applyDeleted(): void;
    getVersion(): number;
    getUncommittedEvents<Payload extends object = object>(): Array<Event<Payload>>;
    getUncommittedEventsAsync<Payload extends object = object>(): globalThis.Promise<Array<Event<Payload>>>;
    clearUncommittedEvents(): Array<Event>;
}
export {};
