woltage
Version:
A CQRS and Event-Sourcing Framework
53 lines (52 loc) • 2.74 kB
TypeScript
import type { Readable } from 'stream';
import type Event from '../Event.ts';
export interface ReadableStream<T> extends Readable {
addListener(event: 'data', listener: (data: T) => void): this;
addListener(event: 'error', listener: (err: Error) => void): this;
addListener(event: string | symbol, listener: (...args: unknown[]) => void): this;
on(event: 'data', listener: (data: T) => void): this;
on(event: 'error', listener: (err: Error) => void): this;
on(event: string | symbol, listener: (...args: unknown[]) => void): this;
once(event: 'data', listener: (data: T) => void): this;
once(event: 'error', listener: (err: Error) => void): this;
once(event: string | symbol, listener: (...args: unknown[]) => void): this;
prependListener(event: 'data', listener: (data: T) => void): this;
prependListener(event: 'error', listener: (err: Error) => void): this;
prependListener(event: string | symbol, listener: (...args: unknown[]) => void): this;
prependOnceListener(event: 'data', listener: (data: T) => void): this;
prependOnceListener(event: 'error', listener: (err: Error) => void): this;
prependOnceListener(event: string | symbol, listener: (...args: unknown[]) => void): this;
removeListener(event: 'data', listener: (data: T) => void): this;
removeListener(event: 'error', listener: (err: Error) => void): this;
removeListener(event: string | symbol, listener: (...args: unknown[]) => void): this;
[Symbol.asyncIterator](): AsyncIterableIterator<T>;
}
export declare const START = "start";
export declare const END = "end";
export type ReadRevision = bigint | typeof START | typeof END;
export declare const STATE_NEW = "state_new";
export declare const STATE_EXISTS = "state_exists";
export type AppendRevision = bigint | typeof STATE_NEW | typeof STATE_EXISTS;
export declare const FORWARDS = "forwards";
export declare const BACKWARDS = "backwards";
export type Direction = typeof FORWARDS | typeof BACKWARDS;
export type ReadOptions = {
fromRevision?: ReadRevision;
direction?: Direction;
};
export type Filter = {
types?: string[];
};
export type SubscribeOptions = {
fromRevision?: ReadRevision;
filter?: Filter;
};
export type SubscriptionStream = ReadableStream<Event>;
export interface IEventStore {
connect(): Promise<void>;
close(force?: boolean): Promise<void>;
read(aggregateName: string, aggregateId: string, options?: ReadOptions): AsyncIterableIterator<Event>;
append(aggregateName: string, aggregateId: string, events: Event[], revision?: AppendRevision): Promise<void>;
subscribe(options?: SubscribeOptions): SubscriptionStream;
getLatestPosition(filter?: Filter): Promise<bigint | null>;
}