demeine
Version:
DDDD - Distributed Domain Driven Design
33 lines (32 loc) • 1.51 kB
TypeScript
import { Command, CommandHandler, CommandSink, Event, EventHandler } from './Aggregate.interfaces';
import { Queue } from '../queue/Queue';
import Promise from 'bluebird';
declare type MaybePromise<T> = T | Promise<T>;
export declare class Aggregate<State extends object = object> {
id: string;
type?: string;
_uncommittedEvents: Array<Event>;
_commandHandler: CommandHandler;
_commandSink: CommandSink<State>;
_eventHandler: EventHandler;
_version: number;
_commandQueue: Queue;
_state: State;
constructor(commandSink?: CommandSink<State>, eventHandler?: EventHandler, commandHandler?: CommandHandler);
_rehydrate(events: Array<Event>, version?: number, snapshot?: State): void;
_getSnapshot(): State | undefined;
_apply(event: Event, isNew?: boolean): Aggregate<State>;
_process(command: Command): Promise<Aggregate<State>>;
_sink(commandToSink: MaybePromise<Command>): globalThis.Promise<Aggregate<State> | true>;
/**
* Built in functionality to manage deletion of Aggregates / streams
*/
delete(): globalThis.Promise<true | Aggregate<State>>;
processDelete(command: Command): Aggregate<State>;
applyDeleted(): void;
getVersion(): number;
getUncommittedEvents<Payload extends object = object>(): Array<Event<Payload>>;
getUncommittedEventsAsync<Payload extends object = object>(): globalThis.Promise<Array<Event<Payload>>>;
clearUncommittedEvents(): Array<Event>;
}
export {};