@othree.io/chisel
Version:
Event sourcing made easy
57 lines • 1.88 kB
TypeScript
export interface ChiselEvent {
readonly contextId: string;
readonly type: string;
readonly body: any;
readonly snapshot?: any;
}
export interface Emitter {
readonly clientId: string;
readonly emitterId: string;
}
export interface InternalTriggeredEvent extends ChiselEvent {
readonly eventId: string;
readonly eventDate: number;
readonly emitter?: Emitter;
readonly metadata?: Record<string, string>;
}
export type TriggeredEvent<T extends ChiselEvent> = T & Omit<InternalTriggeredEvent, 'body'>;
export interface EventSourceConfiguration<AggregateRoot> {
readonly SnapshotEventType: string;
readonly SnapshotFrequency: number;
readonly SnapshotSerializer: {
readonly serialize: (snapshot: AggregateRoot) => string;
readonly deserialize: (snapshot: string) => AggregateRoot;
};
}
export type InitialCommand = {
readonly type: string;
readonly body: any;
readonly emitter?: Emitter;
readonly metadata?: Record<string, string>;
};
export type EmptyCommand = {
readonly contextId: string;
readonly type: string;
readonly emitter?: Emitter;
readonly metadata?: Record<string, string>;
};
export type FullCommand = {
readonly contextId: string;
readonly body: any;
readonly type: string;
readonly emitter?: Emitter;
readonly metadata?: Record<string, string>;
};
export type Command = InitialCommand | EmptyCommand | FullCommand;
export interface CommandResult<AggregateRoot> {
readonly state: AggregateRoot;
readonly events: Array<InternalTriggeredEvent>;
}
export interface State<AggregateRoot> {
readonly state: AggregateRoot;
readonly events: Array<InternalTriggeredEvent>;
}
export interface NewState<AggregateRoot> extends State<AggregateRoot> {
readonly newEvents: Array<InternalTriggeredEvent>;
}
//# sourceMappingURL=types.d.ts.map