UNPKG

evtstore

Version:

Event Sourcing with Node.JS

50 lines (49 loc) 2.68 kB
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 {};