evtstore
Version:
Event Sourcing with Node.JS
50 lines (49 loc) • 2.68 kB
TypeScript
import { EventHandler } from './event-handler';
import { AggregateStore, ProvidedAggregate, Provider, StorableAggregate, HandlerBookmark, EventMeta, DomainHandlerOpts } from './types';
type StoreOpts = {
provider: Provider<any> | Promise<Provider<any>>;
useCache?: boolean;
};
type StreamEvents<T extends AggregateStore> = {
[K in ExtStreams<T>]: StreamAgg<T, K>;
};
type ExtStoreAgg<T extends StorableAggregate, U extends string> = T extends StorableAggregate<any, any, U> ? T : never;
type StreamAgg<T extends AggregateStore, U extends ExtStreams<T>> = ExtStoreAggEvent<ExtStoreAgg<T[keyof T], U>>;
type ToStoreAgg<T> = T extends StorableAggregate<infer E, infer A> ? ProvidedAggregate<E, A> : never;
type ExtStoreAggEvent<T> = T extends StorableAggregate<infer E, any, any> ? E : never;
type ExtStreams<T extends AggregateStore> = T[keyof T]['stream'];
export declare function createDomain<Tree extends AggregateStore>(opts: StoreOpts, aggregates: Tree): {
domain: { [key in keyof Tree]: ToStoreAgg<Tree[key]>; };
createHandler: <S extends ExtStreams<Tree>[]>(bookmark: HandlerBookmark, streams: S, options?: DomainHandlerOpts) => {
handle: <Stream extends S[number], Type extends StreamEvents<Tree>[Stream]["type"]>(stream: Stream, event: Type, callback: (id: string, event: Extract<StreamEvents<Tree>[Stream], {
type: Type;
}>, meta: EventMeta) => any) => void;
name: string;
start: () => void;
stop: () => void;
runOnce: (runningCount?: number) => Promise<number>;
run: () => Promise<void>;
setPosition: () => Promise<void>;
getPosition: () => Promise<any>;
reset: () => void;
__handler: EventHandler<StreamEvents<Tree>[S[number]]>;
};
};
export declare function createDomainV2<Tree extends AggregateStore>(opts: StoreOpts, aggregates: Tree): {
domain: { [key in keyof Tree]: ToStoreAgg<Tree[key]>; };
createHandler: <S extends ExtStreams<Tree>[]>(bookmark: HandlerBookmark, streams: S, options?: DomainHandlerOpts) => {
handle: <Stream extends S[number], Type extends StreamEvents<Tree>[Stream]["type"]>(stream: Stream, event: Type, callback: (id: string, event: Extract<StreamEvents<Tree>[Stream], {
type: Type;
}>, meta: EventMeta) => any) => void;
name: string;
start: () => void;
stop: () => void;
runOnce: (runningCount?: number) => Promise<number>;
run: () => Promise<void>;
setPosition: () => Promise<void>;
getPosition: () => Promise<any>;
reset: () => void;
__handler: EventHandler<StreamEvents<Tree>[S[number]]>;
};
};
export {};