typebus-cqrs
Version:
Simple, type-safe CQRS library with auto-registration and minimal boilerplate (typebus-cqrs)
121 lines • 4.63 kB
TypeScript
import { IMessageBus, IMessageHandler, IMiddleware, CommandType, QueryType, EventType, CommandData, CommandResult, QueryParams, QueryResult, EventData, TypeBusConfig } from '../types';
/**
* Main class of the TypeBus-CQRS library. Implements the IMessageBus interface.
* Handles registration and execution of commands, queries, and events with middleware support.
* @template TCommandMap - Command map type
* @template TQueryMap - Query map type
* @template TEventMap - Event map type
* @implements {IMessageBus<TCommandMap, TQueryMap, TEventMap>}
*/
export declare class TypeBus<TCommandMap extends Record<string, any> = any, TQueryMap extends Record<string, any> = any, TEventMap extends Record<string, any> = any> implements IMessageBus<TCommandMap, TQueryMap, TEventMap> {
private commandHandlers;
private queryHandlers;
private eventHandlers;
private middlewares;
private messageFactory;
private config;
/**
* Creates a new TypeBus instance.
* @param {TypeBusConfig} [config]
*/
constructor(config?: TypeBusConfig);
/**
* Registers a middleware to the bus.
* @param {IMiddleware} middleware
*/
use(middleware: IMiddleware): void;
/**
* Registers a command handler for a specific command type.
* @template T
* @param {T} commandType
* @param {IMessageHandler<any, CommandResult<TCommandMap, T>>} handler
*/
registerCommandHandler<T extends CommandType<TCommandMap>>(commandType: T, handler: IMessageHandler<any, CommandResult<TCommandMap, T>>): void;
/**
* Registers a query handler for a specific query type.
* @template T
* @param {T} queryType
* @param {IMessageHandler<any, QueryResult<TQueryMap, T>>} handler
*/
registerQueryHandler<T extends QueryType<TQueryMap>>(queryType: T, handler: IMessageHandler<any, QueryResult<TQueryMap, T>>): void;
/**
* Registers an event handler for a specific event type.
* @template T
* @param {T} eventType
* @param {IMessageHandler<any, void>} handler
*/
registerEventHandler<T extends EventType<TEventMap>>(eventType: T, handler: IMessageHandler<any, void>): void;
/**
* Executes a command message.
* @template T
* @param {T} type
* @param {CommandData<TCommandMap, T>} data
* @param {string} aggregateId
* @param {Record<string, any>} [metadata]
* @returns {Promise<CommandResult<TCommandMap, T>>}
*/
executeCommand<T extends CommandType<TCommandMap>>(type: T, data: CommandData<TCommandMap, T>, aggregateId: string, metadata?: Record<string, any>): Promise<CommandResult<TCommandMap, T>>;
/**
* Executes a query message.
* @template T
* @param {T} type
* @param {QueryParams<TQueryMap, T>} params
* @param {Record<string, any>} [metadata]
* @returns {Promise<QueryResult<TQueryMap, T>>}
*/
executeQuery<T extends QueryType<TQueryMap>>(type: T, params: QueryParams<TQueryMap, T>, metadata?: Record<string, any>): Promise<QueryResult<TQueryMap, T>>;
/**
* Publishes an event message to all registered handlers.
* @template T
* @param {T} type
* @param {EventData<TEventMap, T>} data
* @param {string} aggregateId
* @param {number} version
* @param {Record<string, any>} [metadata]
* @returns {Promise<void>}
*/
publishEvent<T extends EventType<TEventMap>>(type: T, data: EventData<TEventMap, T>, aggregateId: string, version: number, metadata?: Record<string, any>): Promise<void>;
/**
* Executes a message through the middleware pipeline.
* @template T, R
* @param {T} message
* @param {IMessageHandler<T, R>} handler
* @param {number} timeout
* @returns {Promise<R>}
*/
private executeWithMiddleware;
/**
* Executes a promise with a timeout.
* @template T
* @param {Promise<T>} promise
* @param {number} timeoutMs
* @param {string} operationType
* @returns {Promise<T>}
*/
private withTimeout;
/**
* Clears all registered handlers and middleware.
*/
clear(): void;
/**
* Gets statistics about the bus.
* @returns {object}
*/
getStats(): {
commandHandlers: number;
queryHandlers: number;
eventHandlers: number;
middleware: number;
totalHandlers: number;
};
/**
* Gets all registered handlers.
* @returns {object}
*/
getRegisteredHandlers(): {
commands: string[];
queries: string[];
events: string[];
};
}
//# sourceMappingURL=TypeBus.d.ts.map