import { Serializable } from "@nivinjoseph/n-util";
import { AggregateState } from "./aggregate-state.js";
import { DomainEventData } from "./domain-event-data.js";
import { AggregateRoot } from "./aggregate-root.js";
import { DomainContext } from "./domain-context.js";
export declare abstract class DomainEvent<T extends AggregateState> extends Serializable<DomainEventData> {
    private _aggregateId;
    private _id;
    private _userId;
    private readonly _name;
    private readonly _occurredAt;
    private _version;
    private readonly _isCreatedEvent;
    get aggregateId(): string;
    get id(): string;
    get userId(): string;
    get name(): string;
    get partitionKey(): string;
    get refId(): string;
    abstract get refType(): string;
    get occurredAt(): number;
    get version(): number;
    get isCreatedEvent(): boolean;
    constructor(data: DomainEventData);
    apply(aggregate: AggregateRoot<T, DomainEvent<T>>, domainContext: DomainContext, state: T): void;
    protected abstract applyEvent(state: T): void;
}
//# sourceMappingURL=domain-event.d.ts.map