import { CommandEvent } from '../Domain/command-event.interface';
import { Command } from '../Domain/command.interface';
import * as i0 from "@angular/core";
export declare enum CommanderState {
    IDLE = 0,
    EXECUTING = 1,
    DONE = 2,
    ERROR = 3
}
export declare enum CommandsType {
    WAITING = 0,
    DONE = 1,
    ERROR = 2
}
export declare class Commander {
    private commandsSubject;
    private commandsDoneSubject;
    private commandsInErrorSubject;
    private stateSubject;
    private eventsSubject;
    private processingCommand;
    commands$: import("rxjs").Observable<Command<any>[]>;
    commandsDone$: import("rxjs").Observable<Command<any>[]>;
    commandsInError$: import("rxjs").Observable<Command<any>[]>;
    state$: import("rxjs").Observable<CommanderState>;
    events$: import("rxjs").Observable<CommandEvent[]>;
    constructor();
    addCommand<C>(command: Command<C>): void;
    replayCommandsInError(): void;
    getCommands(type: CommandsType): Command<any>[];
    getState(): CommanderState;
    getEvents(): CommandEvent[];
    getCommandEvents(commandId: string): CommandEvent[];
    private trackEvent;
    private executeNextCommand;
    static ɵfac: i0.ɵɵFactoryDeclaration<Commander, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<Commander>;
}
