import { Guid, ConcreteType } from '@cashfarm/lang';
import { IDomainEvent, Identity, IRepository } from '../domain';
import { IEventStore } from './iEventStore';
import { IEventBus } from './iEventBus';
import { ESAggregateRoot } from './esAggregateRoot';
export declare abstract class ESRepository<TAggregate extends ESAggregateRoot<TId>, TId extends Identity<Guid> | Guid> implements IRepository<TAggregate, TId> {
    protected storage: IEventStore;
    protected aggtClass: ConcreteType<TAggregate>;
    protected eventBus: IEventBus;
    constructor(storage: IEventStore, aggtClass: ConcreteType<TAggregate>, eventBus?: IEventBus);
    save(aggregate: TAggregate): Promise<IDomainEvent[]>;
    getById(id: TId): Promise<TAggregate>;
}
