typebus-cqrs
Version:
Simple, type-safe CQRS library with auto-registration and minimal boilerplate (typebus-cqrs)
202 lines • 13.2 kB
TypeScript
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