import { Entity } from "../domain/entity"; import { DomainEvent } from "../domain/domain-event"; export interface AggregateRoot> { readonly entity: TEntity; readonly version: number; readonly uncommittedEvents: DomainEvent[]; markEventsAsCommitted(): void; loadFromHistory(events: DomainEvent[]): void; } export declare abstract class BaseAggregateRoot> implements AggregateRoot { readonly entity: TEntity; private _version; readonly uncommittedEvents: DomainEvent[]; constructor(entity: TEntity); get version(): number; protected addDomainEvent(event: DomainEvent): void; markEventsAsCommitted(): void; loadFromHistory(events: DomainEvent[]): void; protected apply(event: DomainEvent): void; protected createDomainEvent(eventType: string, eventData?: any): DomainEvent; protected get aggregateId(): string; protected get currentVersion(): number; }