UNPKG

typebus-cqrs

Version:

Simple, type-safe CQRS library with auto-registration and minimal boilerplate (typebus-cqrs)

202 lines 13.2 kB
import { CommandType, QueryType, EventType, CommandData, CommandResult, QueryParams, QueryResult, EventData, IMessageHandler, ICommand, IQuery, IEvent } from '../types'; import { TypeBus } from '../core/TypeBus'; /** ================================================================================ * Builder for creating and registering command handlers with TypeBus-CQRS. ================================================================================ */ export declare class TypedCommandBuilder { /** * Creates and registers a command handler. * @template TCommandMap - Command map type * @template T - Command type key * @param {TypeBus<TCommandMap, any, any>} bus - The TypeBus-CQRS instance. * @param {T} commandType - The command type. * @param {(data: CommandData<TCommandMap, T>, aggregateId: string, metadata?: Record<string, any>) => Promise<CommandResult<TCommandMap, T>>} handlerLogic - The handler logic. * @returns {object} Command executor and handler meta. */ static create<TCommandMap extends Record<string, any> = any, T extends CommandType<TCommandMap> = CommandType<TCommandMap>>(bus: TypeBus<TCommandMap, any, any>, commandType: T, handlerLogic: (data: CommandData<TCommandMap, T>, aggregateId: string, metadata?: Record<string, any>) => Promise<CommandResult<TCommandMap, T>>): { execute(data: CommandData<TCommandMap, T>, aggregateId: string, metadata?: Record<string, any>): Promise<CommandResult<TCommandMap, T>>; type: T; handler: IMessageHandler<ICommand<TCommandMap, T>, CommandResult<TCommandMap, T>>; }; } /** ================================================================================ * Builder for creating and registering query handlers with TypeBus-CQRS. ================================================================================ */ export declare class TypedQueryBuilder { /** * Creates and registers a query handler. * @template TQueryMap - Query map type * @template T - Query type key * @param {TypeBus<any, TQueryMap, any>} bus - The TypeBus-CQRS instance. * @param {T} queryType - The query type. * @param {(params: QueryParams<TQueryMap, T>, metadata?: Record<string, any>) => Promise<QueryResult<TQueryMap, T>>} handlerLogic - The handler logic. * @returns {object} Query executor and handler meta. */ static create<TQueryMap extends Record<string, any> = any, T extends QueryType<TQueryMap> = QueryType<TQueryMap>>(bus: TypeBus<any, TQueryMap, any>, queryType: T, handlerLogic: (params: QueryParams<TQueryMap, T>, metadata?: Record<string, any>) => Promise<QueryResult<TQueryMap, T>>): { execute(params: QueryParams<TQueryMap, T>, metadata?: Record<string, any>): Promise<QueryResult<TQueryMap, T>>; type: T; handler: IMessageHandler<IQuery<TQueryMap, T>, QueryResult<TQueryMap, T>>; }; } /** ================================================================================ * Builder for creating and registering event handlers with TypeBus-CQRS. ================================================================================ */ export declare class TypedEventBuilder { /** * Creates and registers an event handler. * @template TEventMap - Event map type * @template T - Event type key * @param {TypeBus<any, any, TEventMap>} bus - The TypeBus-CQRS instance. * @param {T} eventType - The event type. * @param {(data: EventData<TEventMap, T>, aggregateId: string, version: number, metadata?: Record<string, any>) => Promise<void>} handlerLogic - The handler logic. * @returns {object} Event publisher and handler meta. */ static create<TEventMap extends Record<string, any> = any, T extends EventType<TEventMap> = EventType<TEventMap>>(bus: TypeBus<any, any, TEventMap>, eventType: T, handlerLogic: (data: EventData<TEventMap, T>, aggregateId: string, version: number, metadata?: Record<string, any>) => Promise<void>): { publish(data: EventData<TEventMap, T>, aggregateId: string, version: number, metadata?: Record<string, any>): Promise<void>; type: T; handler: IMessageHandler<IEvent<TEventMap, T>, void>; }; } /** ================================================================================ * Builder for creating a batch of related commands, queries, and events. ================================================================================ */ export declare class BatchBuilder<TCommandMap extends Record<string, any> = any, TQueryMap extends Record<string, any> = any, TEventMap extends Record<string, any> = any> { private bus; private items; constructor(bus: TypeBus<TCommandMap, TQueryMap, TEventMap>); /** * Adds a command to the batch. * @template T - Command type key * @param {string} name - The name of the command. * @param {T} commandType - The command type. * @param {(data: CommandData<TCommandMap, T>, aggregateId: string, metadata?: Record<string, any>) => Promise<CommandResult<TCommandMap, T>>} handlerLogic - The handler logic. * @returns {BatchBuilder<TCommandMap, TQueryMap, TEventMap>} */ addCommand<T extends CommandType<TCommandMap>>(name: string, commandType: T, handlerLogic: (data: CommandData<TCommandMap, T>, aggregateId: string, metadata?: Record<string, any>) => Promise<CommandResult<TCommandMap, T>>): this; /** * Adds a query to the batch. * @template T - Query type key * @param {string} name - The name of the query. * @param {T} queryType - The query type. * @param {(params: QueryParams<TQueryMap, T>, metadata?: Record<string, any>) => Promise<QueryResult<TQueryMap, T>>} handlerLogic - The handler logic. * @returns {BatchBuilder<TCommandMap, TQueryMap, TEventMap>} */ addQuery<T extends QueryType<TQueryMap>>(name: string, queryType: T, handlerLogic: (params: QueryParams<TQueryMap, T>, metadata?: Record<string, any>) => Promise<QueryResult<TQueryMap, T>>): this; /** * Adds an event handler to the batch. * @template T - Event type key * @param {string} name - The name of the event handler. * @param {T} eventType - The event type. * @param {(data: EventData<TEventMap, T>, aggregateId: string, version: number, metadata?: Record<string, any>) => Promise<void>} handlerLogic - The handler logic. * @returns {BatchBuilder<TCommandMap, TQueryMap, TEventMap>} */ addEventHandler<T extends EventType<TEventMap>>(name: string, eventType: T, handlerLogic: (data: EventData<TEventMap, T>, aggregateId: string, version: number, metadata?: Record<string, any>) => Promise<void>): this; /** * Builds the batch and returns an object with all executors. * @returns {object} */ build(): Record<string, any>; } /** ================================================================================ * Fluent API builder for TypeBus-CQRS. ================================================================================ */ export declare class FluentBuilder<TCommandMap extends Record<string, any> = any, TQueryMap extends Record<string, any> = any, TEventMap extends Record<string, any> = any> { private bus; constructor(bus: TypeBus<TCommandMap, TQueryMap, TEventMap>); /** * Creates a command with fluent API. * @template T - Command type key * @param {T} commandType - The command type. * @returns {object} Fluent command builder. */ command<T extends CommandType<TCommandMap>>(commandType: T): { handle: (handlerLogic: (data: CommandData<TCommandMap, T>, aggregateId: string, metadata?: Record<string, any>) => Promise<CommandResult<TCommandMap, T>>) => { execute(data: CommandData<TCommandMap, T>, aggregateId: string, metadata?: Record<string, any> | undefined): Promise<CommandResult<TCommandMap, T>>; type: T; handler: IMessageHandler<ICommand<TCommandMap, T>, CommandResult<TCommandMap, T>>; }; }; /** * Creates a query with fluent API. * @template T - Query type key * @param {T} queryType - The query type. * @returns {object} Fluent query builder. */ query<T extends QueryType<TQueryMap>>(queryType: T): { handle: (handlerLogic: (params: QueryParams<TQueryMap, T>, metadata?: Record<string, any>) => Promise<QueryResult<TQueryMap, T>>) => { execute(params: QueryParams<TQueryMap, T>, metadata?: Record<string, any> | undefined): Promise<QueryResult<TQueryMap, T>>; type: T; handler: IMessageHandler<IQuery<TQueryMap, T>, QueryResult<TQueryMap, T>>; }; }; /** * Creates an event handler with fluent API. * @template T - Event type key * @param {T} eventType - The event type. * @returns {object} Fluent event builder. */ event<T extends EventType<TEventMap>>(eventType: T): { handle: (handlerLogic: (data: EventData<TEventMap, T>, aggregateId: string, version: number, metadata?: Record<string, any>) => Promise<void>) => { publish(data: EventData<TEventMap, T>, aggregateId: string, version: number, metadata?: Record<string, any> | undefined): Promise<void>; type: T; handler: IMessageHandler<IEvent<TEventMap, T>, void>; }; }; /** * Creates a batch builder. * @returns {BatchBuilder<TCommandMap, TQueryMap, TEventMap>} */ batch(): BatchBuilder<TCommandMap, TQueryMap, TEventMap>; } /** * Creates and registers a command handler. * @template TCommandMap - Command map type * @template T - Command type key * @param {TypeBus<TCommandMap, any, any>} bus - The TypeBus-CQRS instance. * @param {T} commandType - The command type. * @param {(data: CommandData<TCommandMap, T>, aggregateId: string, metadata?: Record<string, any>) => Promise<CommandResult<TCommandMap, T>>} handlerLogic - The handler logic. * @returns {object} Command executor. */ export declare function createCommand<TCommandMap extends Record<string, any> = any, T extends CommandType<TCommandMap> = CommandType<TCommandMap>>(bus: TypeBus<TCommandMap, any, any>, commandType: T, handlerLogic: (data: CommandData<TCommandMap, T>, aggregateId: string, metadata?: Record<string, any>) => Promise<CommandResult<TCommandMap, T>>): { execute(data: CommandData<TCommandMap, T>, aggregateId: string, metadata?: Record<string, any> | undefined): Promise<CommandResult<TCommandMap, T>>; type: T; handler: IMessageHandler<ICommand<TCommandMap, T>, CommandResult<TCommandMap, T>>; }; /** * Creates and registers a query handler. * @template TQueryMap - Query map type * @template T - Query type key * @param {TypeBus<any, TQueryMap, any>} bus - The TypeBus-CQRS instance. * @param {T} queryType - The query type. * @param {(params: QueryParams<TQueryMap, T>, metadata?: Record<string, any>) => Promise<QueryResult<TQueryMap, T>>} handlerLogic - The handler logic. * @returns {object} Query executor. */ export declare function createQuery<TQueryMap extends Record<string, any> = any, T extends QueryType<TQueryMap> = QueryType<TQueryMap>>(bus: TypeBus<any, TQueryMap, any>, queryType: T, handlerLogic: (params: QueryParams<TQueryMap, T>, metadata?: Record<string, any>) => Promise<QueryResult<TQueryMap, T>>): { execute(params: QueryParams<TQueryMap, T>, metadata?: Record<string, any> | undefined): Promise<QueryResult<TQueryMap, T>>; type: T; handler: IMessageHandler<IQuery<TQueryMap, T>, QueryResult<TQueryMap, T>>; }; /** * Creates and registers an event handler. * @template TEventMap - Event map type * @template T - Event type key * @param {TypeBus<any, any, TEventMap>} bus - The TypeBus-CQRS instance. * @param {T} eventType - The event type. * @param {(data: EventData<TEventMap, T>, aggregateId: string, version: number, metadata?: Record<string, any>) => Promise<void>} handlerLogic - The handler logic. * @returns {object} Event publisher. */ export declare function createEventHandler<TEventMap extends Record<string, any> = any, T extends EventType<TEventMap> = EventType<TEventMap>>(bus: TypeBus<any, any, TEventMap>, eventType: T, handlerLogic: (data: EventData<TEventMap, T>, aggregateId: string, version: number, metadata?: Record<string, any>) => Promise<void>): { publish(data: EventData<TEventMap, T>, aggregateId: string, version: number, metadata?: Record<string, any> | undefined): Promise<void>; type: T; handler: IMessageHandler<IEvent<TEventMap, T>, void>; }; /** * Creates a fluent API builder. * @template TCommandMap - Command map type * @template TQueryMap - Query map type * @template TEventMap - Event map type * @param {TypeBus<TCommandMap, TQueryMap, TEventMap>} bus - The TypeBus-CQRS instance. * @returns {FluentBuilder<TCommandMap, TQueryMap, TEventMap>} */ export declare function createFluentBuilder<TCommandMap extends Record<string, any> = any, TQueryMap extends Record<string, any> = any, TEventMap extends Record<string, any> = any>(bus: TypeBus<TCommandMap, TQueryMap, TEventMap>): FluentBuilder<TCommandMap, TQueryMap, TEventMap>; //# sourceMappingURL=TypedBuilders.d.ts.map