import { Observable, Subject } from 'rxjs';
import { Command, CommandEvent } from './core';
import * as i0 from "@angular/core";
export declare abstract class CommandBus extends Observable<Command> {
    abstract dispatch(command: Command): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<CommandBus, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<CommandBus>;
}
export declare abstract class CommandEventBus extends Observable<CommandEvent> {
    abstract publish(event: CommandEvent): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<CommandEventBus, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<CommandEventBus>;
}
export declare class SubjectBasedCommandBus extends Subject<Command> implements CommandBus {
    dispatch(command: Command): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<SubjectBasedCommandBus, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<SubjectBasedCommandBus>;
}
export declare class SubjectBasedCommandEventBus extends Subject<CommandEvent> implements CommandEventBus {
    publish(event: CommandEvent): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<SubjectBasedCommandEventBus, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<SubjectBasedCommandEventBus>;
}