🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@fluojs/cqrs

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@fluojs/cqrs - npm Package Compare versions

Comparing version
1.1.0
to
1.1.1
+3
-2
dist/buses/command-bus.d.ts
import type { OnApplicationBootstrap } from '@fluojs/runtime';
import { CqrsBusBase } from '../discovery.js';
import type { CommandBus, ICommand } from '../types.js';
import type { CommandBus, CqrsDispatchContext, ICommand } from '../types.js';
/**

@@ -19,2 +19,3 @@ * Discovers and executes command handlers during application bootstrap and runtime dispatch.

* @param command Command instance to execute.
* @param context Optional saga dispatch context to pass through nested CQRS calls.
* @returns The resolved handler result.

@@ -25,3 +26,3 @@ *

*/
execute<TCommand extends ICommand, TResult = void>(command: TCommand): Promise<TResult>;
execute<TCommand extends ICommand, TResult = void>(command: TCommand, context?: CqrsDispatchContext): Promise<TResult>;
private ensureDiscovered;

@@ -28,0 +29,0 @@ private discoverHandlers;

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"command-bus.d.ts","sourceRoot":"","sources":["../../src/buses/command-bus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAK9D,OAAO,EAAE,WAAW,EAAiC,MAAM,iBAAiB,CAAC;AAC7E,OAAO,KAAK,EACV,UAAU,EAGV,QAAQ,EAET,MAAM,aAAa,CAAC;AAUrB;;;;;GAKG;AACH,qBACa,0BAA2B,SAAQ,WAAY,YAAW,UAAU,EAAE,sBAAsB;IACvG,OAAO,CAAC,WAAW,CAAoD;IACvE,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,UAAU,CAAS;IAErB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7C;;;;;;;;OAQG;IACG,OAAO,CAAC,QAAQ,SAAS,QAAQ,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;YAmB/E,gBAAgB;YAchB,gBAAgB;IAe9B,OAAO,CAAC,0BAA0B;CAmDnC"}
{"version":3,"file":"command-bus.d.ts","sourceRoot":"","sources":["../../src/buses/command-bus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAiC,MAAM,iBAAiB,CAAC;AAG7E,OAAO,KAAK,EACV,UAAU,EAGV,mBAAmB,EACnB,QAAQ,EAET,MAAM,aAAa,CAAC;AAUrB;;;;;GAKG;AACH,qBACa,0BAA2B,SAAQ,WAAY,YAAW,UAAU,EAAE,sBAAsB;IACvG,OAAO,CAAC,WAAW,CAAoD;IACvE,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,UAAU,CAAS;IAErB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7C;;;;;;;;;OASG;IACG,OAAO,CAAC,QAAQ,SAAS,QAAQ,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;YAmB9G,gBAAgB;YAchB,gBAAgB;IAe9B,OAAO,CAAC,0BAA0B;CAmDnC"}

@@ -9,5 +9,5 @@ let _initClass;

import { APPLICATION_LOGGER, COMPILED_MODULES, RUNTIME_CONTAINER } from '@fluojs/runtime/internal';
import { CqrsBusBase, createDuplicateHandlerMessage } from '../discovery.js';
import { CommandHandlerNotFoundException, DuplicateCommandHandlerError } from '../errors.js';
import { getCommandHandlerMetadata } from '../metadata.js';
import { CqrsBusBase, createDuplicateHandlerMessage } from '../discovery.js';
function isCommandHandler(value) {

@@ -42,2 +42,3 @@ if (typeof value !== 'object' || value === null) {

* @param command Command instance to execute.
* @param context Optional saga dispatch context to pass through nested CQRS calls.
* @returns The resolved handler result.

@@ -48,3 +49,3 @@ *

*/
async execute(command) {
async execute(command, context) {
await this.ensureDiscovered();

@@ -60,3 +61,3 @@ const commandType = command.constructor;

}
return await instance.execute(command);
return await instance.execute(command, context);
}

@@ -63,0 +64,0 @@ async ensureDiscovered() {

import { type EventBus } from '@fluojs/event-bus';
import type { OnApplicationShutdown, OnApplicationBootstrap } from '@fluojs/runtime';
import type { OnApplicationBootstrap, OnApplicationShutdown } from '@fluojs/runtime';
import { CqrsBusBase } from '../discovery.js';
import type { CqrsModuleOptions } from '../module.js';
import type { CqrsEventBus, IEvent } from '../types.js';
import type { CqrsDispatchContext, CqrsEventBus, IEvent } from '../types.js';
import { CqrsSagaLifecycleService } from './saga-bus.js';

@@ -36,2 +36,3 @@ /**

* @param event Event instance to publish.
* @param context Optional saga dispatch context to pass through nested CQRS calls.
* @returns A promise that resolves once all local CQRS side effects and delegated publication complete.

@@ -41,3 +42,3 @@ *

*/
publish<TEvent extends IEvent>(event: TEvent): Promise<void>;
publish<TEvent extends IEvent>(event: TEvent, context?: CqrsDispatchContext): Promise<void>;
/**

@@ -47,5 +48,6 @@ * Publishes a batch of events sequentially through the CQRS event pipeline.

* @param events Event instances to publish in order.
* @param context Optional saga dispatch context to pass through nested CQRS calls.
* @returns A promise that resolves once all events are published.
*/
publishAll<TEvent extends IEvent>(events: readonly TEvent[]): Promise<void>;
publishAll<TEvent extends IEvent>(events: readonly TEvent[], context?: CqrsDispatchContext): Promise<void>;
private runPublishPipeline;

@@ -52,0 +54,0 @@ private runPublishAllPipeline;

@@ -1,1 +0,1 @@

{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/buses/event-bus.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAGrF,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAK9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAyC,MAAM,EAAiB,MAAM,aAAa,CAAC;AAC9G,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAYzD;;;;;GAKG;AACH,qBACa,mBAAoB,SAAQ,WAAY,YAAW,YAAY,EAAE,sBAAsB,EAAE,qBAAqB;IASvH,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAI5B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAbhC,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA4B;IACnE,OAAO,CAAC,qBAAqB,CAAK;IAClC,OAAO,CAAC,cAAc,CAAsF;gBAGzF,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,wBAAwB,EACtD,gBAAgB,EAAE,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EAC9D,eAAe,EAAE,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EAC7D,MAAM,EAAE,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EACnC,aAAa,GAAE,iBAAsB;IAKlD,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYvC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5C;;;;OAIG;IACH,4BAA4B;IAe5B;;;;;;;OAOG;IACG,OAAO,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE;;;;;OAKG;IACG,UAAU,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAInE,kBAAkB;YAiBlB,qBAAqB;YAMrB,oBAAoB;YAUpB,2BAA2B;YAc3B,kBAAkB;IAiBhC,OAAO,CAAC,6BAA6B;IAUrC,OAAO,CAAC,qBAAqB;YAIf,gBAAgB;YAchB,gBAAgB;IAe9B,OAAO,CAAC,wBAAwB;CA4CjC"}
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/buses/event-bus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAA+B,MAAM,mBAAmB,CAAC;AAC/E,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGrF,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAyC,MAAM,EAAiB,MAAM,aAAa,CAAC;AACnI,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAYzD;;;;;GAKG;AACH,qBACa,mBAAoB,SAAQ,WAAY,YAAW,YAAY,EAAE,sBAAsB,EAAE,qBAAqB;IASvH,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAI5B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAbhC,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA4B;IACnE,OAAO,CAAC,qBAAqB,CAAK;IAClC,OAAO,CAAC,cAAc,CAAsF;gBAGzF,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,wBAAwB,EACtD,gBAAgB,EAAE,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EAC9D,eAAe,EAAE,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EAC7D,MAAM,EAAE,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EACnC,aAAa,GAAE,iBAAsB;IAKlD,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYvC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5C;;;;OAIG;IACH,4BAA4B;IAe5B;;;;;;;;OAQG;IACG,OAAO,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjG;;;;;;OAMG;IACG,UAAU,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;YAIlG,kBAAkB;YAiBlB,qBAAqB;YAMrB,oBAAoB;YAUpB,2BAA2B;YAc3B,kBAAkB;IAiBhC,OAAO,CAAC,6BAA6B;IAUrC,OAAO,CAAC,qBAAqB;YAIf,gBAAgB;YAchB,gBAAgB;IAe9B,OAAO,CAAC,wBAAwB;CA4CjC"}

@@ -13,4 +13,4 @@ let _initClass;

import { getEventHandlerMetadata } from '../metadata.js';
import { createCqrsPlatformStatusSnapshot } from '../status.js';
import { CQRS_MODULE_OPTIONS } from '../tokens.js';
import { createCqrsPlatformStatusSnapshot } from '../status.js';
import { CqrsSagaLifecycleService } from './saga-bus.js';

@@ -89,2 +89,3 @@ const DEFAULT_SHUTDOWN_DRAIN_TIMEOUT_MS = 5000;

* @param event Event instance to publish.
* @param context Optional saga dispatch context to pass through nested CQRS calls.
* @returns A promise that resolves once all local CQRS side effects and delegated publication complete.

@@ -94,4 +95,4 @@ *

*/
async publish(event) {
await this.trackPublishPipeline(this.runPublishPipeline(event));
async publish(event, context) {
await this.trackPublishPipeline(this.runPublishPipeline(event, context));
}

@@ -103,8 +104,9 @@

* @param events Event instances to publish in order.
* @param context Optional saga dispatch context to pass through nested CQRS calls.
* @returns A promise that resolves once all events are published.
*/
async publishAll(events) {
await this.trackPublishPipeline(this.runPublishAllPipeline(events));
async publishAll(events, context) {
await this.trackPublishPipeline(this.runPublishAllPipeline(events, context));
}
async runPublishPipeline(event) {
async runPublishPipeline(event, context) {
await this.ensureDiscovered();

@@ -116,10 +118,10 @@ for (const descriptor of this.matchEventDescriptors(event)) {

}
await instance.handle(createIsolatedEvent(descriptor.eventType, event));
await instance.handle(createIsolatedEvent(descriptor.eventType, event), context);
}
await this.sagaService.dispatch(event);
await this.sagaService.dispatch(event, context);
await this.eventBus.publish(event);
}
async runPublishAllPipeline(events) {
async runPublishAllPipeline(events, context) {
for (const event of events) {
await this.publish(event);
await this.publish(event, context);
}

@@ -126,0 +128,0 @@ }

@@ -1,4 +0,4 @@

import { type OnApplicationBootstrap } from '@fluojs/runtime';
import type { OnApplicationBootstrap } from '@fluojs/runtime';
import { CqrsBusBase } from '../discovery.js';
import type { IQuery, QueryBus } from '../types.js';
import type { CqrsDispatchContext, IQuery, QueryBus } from '../types.js';
/**

@@ -19,2 +19,3 @@ * Discovers and executes query handlers during bootstrap and runtime dispatch.

* @param query Query instance to execute.
* @param context Optional saga dispatch context to pass through nested CQRS calls.
* @returns The resolved handler result.

@@ -25,3 +26,3 @@ *

*/
execute<TQuery extends IQuery<TResult>, TResult = unknown>(query: TQuery): Promise<TResult>;
execute<TQuery extends IQuery<TResult>, TResult = unknown>(query: TQuery, context?: CqrsDispatchContext): Promise<TResult>;
private ensureDiscovered;

@@ -28,0 +29,0 @@ private discoverHandlers;

@@ -1,1 +0,1 @@

{"version":3,"file":"query-bus.d.ts","sourceRoot":"","sources":["../../src/buses/query-bus.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,sBAAsB,EAC5B,MAAM,iBAAiB,CAAC;AAKzB,OAAO,EAAE,WAAW,EAAiC,MAAM,iBAAiB,CAAC;AAC7E,OAAO,KAAK,EACV,MAAM,EAEN,QAAQ,EAGT,MAAM,aAAa,CAAC;AAUrB;;;;;GAKG;AACH,qBACa,wBAAyB,SAAQ,WAAY,YAAW,QAAQ,EAAE,sBAAsB;IACnG,OAAO,CAAC,WAAW,CAAgD;IACnE,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,UAAU,CAAS;IAErB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7C;;;;;;;;OAQG;IACG,OAAO,CAAC,MAAM,SAAS,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAmBnF,gBAAgB;YAchB,gBAAgB;IAe9B,OAAO,CAAC,wBAAwB;CAmDjC"}
{"version":3,"file":"query-bus.d.ts","sourceRoot":"","sources":["../../src/buses/query-bus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAiC,MAAM,iBAAiB,CAAC;AAG7E,OAAO,KAAK,EACV,mBAAmB,EACnB,MAAM,EAEN,QAAQ,EAGT,MAAM,aAAa,CAAC;AAUrB;;;;;GAKG;AACH,qBACa,wBAAyB,SAAQ,WAAY,YAAW,QAAQ,EAAE,sBAAsB;IACnG,OAAO,CAAC,WAAW,CAAgD;IACnE,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,UAAU,CAAS;IAErB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7C;;;;;;;;;OASG;IACG,OAAO,CAAC,MAAM,SAAS,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;YAmBlH,gBAAgB;YAchB,gBAAgB;IAe9B,OAAO,CAAC,wBAAwB;CAmDjC"}

@@ -9,5 +9,5 @@ let _initClass;

import { APPLICATION_LOGGER, COMPILED_MODULES, RUNTIME_CONTAINER } from '@fluojs/runtime/internal';
import { CqrsBusBase, createDuplicateHandlerMessage } from '../discovery.js';
import { DuplicateQueryHandlerError, QueryHandlerNotFoundException } from '../errors.js';
import { getQueryHandlerMetadata } from '../metadata.js';
import { CqrsBusBase, createDuplicateHandlerMessage } from '../discovery.js';
function isQueryHandler(value) {

@@ -42,2 +42,3 @@ if (typeof value !== 'object' || value === null) {

* @param query Query instance to execute.
* @param context Optional saga dispatch context to pass through nested CQRS calls.
* @returns The resolved handler result.

@@ -48,3 +49,3 @@ *

*/
async execute(query) {
async execute(query, context) {
await this.ensureDiscovered();

@@ -60,3 +61,3 @@ const queryType = query.constructor;

}
return await instance.execute(query);
return await instance.execute(query, context);
}

@@ -63,0 +64,0 @@ async ensureDiscovered() {

import type { OnApplicationBootstrap, OnApplicationShutdown } from '@fluojs/runtime';
import { CqrsBusBase } from '../discovery.js';
import type { CqrsModuleOptions } from '../module.js';
import type { IEvent } from '../types.js';
import type { CqrsDispatchContext, IEvent } from '../types.js';
/**

@@ -19,3 +19,2 @@ * Runtime saga coordinator that discovers `@Saga()` providers and serializes execution per saga token.

private readonly pendingDispatches;
private readonly dispatchContext;
private shutdownDrainTimeouts;

@@ -43,3 +42,3 @@ constructor(runtimeContainer: ConstructorParameters<typeof CqrsBusBase>[0], compiledModules: ConstructorParameters<typeof CqrsBusBase>[1], logger: ConstructorParameters<typeof CqrsBusBase>[2], moduleOptions?: CqrsModuleOptions);

*/
dispatch<TEvent extends IEvent>(event: TEvent): Promise<void>;
dispatch<TEvent extends IEvent>(event: TEvent, context?: CqrsDispatchContext): Promise<void>;
private matchSagaDescriptors;

@@ -50,3 +49,3 @@ private dispatchWithOrdering;

private resolveShutdownDrainTimeoutMs;
private runInDispatchContext;
private createDispatchContext;
private invokeSaga;

@@ -53,0 +52,0 @@ private ensureDiscovered;

@@ -1,1 +0,1 @@

{"version":3,"file":"saga-bus.d.ts","sourceRoot":"","sources":["../../src/buses/saga-bus.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGrF,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAK9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAiB,MAAM,EAAyB,MAAM,aAAa,CAAC;AA2BhF;;;;;GAKG;AACH,qBACa,wBAAyB,SAAQ,WAAY,YAAW,sBAAsB,EAAE,qBAAqB;IAc9G,OAAO,CAAC,QAAQ,CAAC,aAAa;IAbhC,OAAO,CAAC,kBAAkB,CAA8C;IACxE,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmC;IACnE,OAAO,CAAC,cAAc,CAAsF;IAC5G,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgD;IAChF,OAAO,CAAC,qBAAqB,CAAK;gBAGhC,gBAAgB,EAAE,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EAC9D,eAAe,EAAE,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EAC7D,MAAM,EAAE,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EACnC,aAAa,GAAE,iBAAsB;IAKlD,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYvC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5C;;;;OAIG;IACH,kBAAkB,IAAI;QACpB,UAAU,EAAE,OAAO,CAAC;QACpB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,cAAc,EAAE,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;QACxF,eAAe,EAAE,MAAM,CAAC;QACxB,qBAAqB,EAAE,MAAM,CAAC;KAC/B;IAUD;;;;;OAKG;IACG,QAAQ,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnE,OAAO,CAAC,oBAAoB;YAYd,oBAAoB;YA+CpB,mBAAmB;YAmBnB,kBAAkB;IAiBhC,OAAO,CAAC,6BAA6B;YAUvB,oBAAoB;YAepB,UAAU;YAoBV,gBAAgB;YAchB,gBAAgB;IAiB9B,OAAO,CAAC,uBAAuB;CA+ChC"}
{"version":3,"file":"saga-bus.d.ts","sourceRoot":"","sources":["../../src/buses/saga-bus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGrF,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAiB,MAAM,EAAyB,MAAM,aAAa,CAAC;AAqBrG;;;;;GAKG;AACH,qBACa,wBAAyB,SAAQ,WAAY,YAAW,sBAAsB,EAAE,qBAAqB;IAa9G,OAAO,CAAC,QAAQ,CAAC,aAAa;IAZhC,OAAO,CAAC,kBAAkB,CAA8C;IACxE,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmC;IACnE,OAAO,CAAC,cAAc,CAAsF;IAC5G,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,qBAAqB,CAAK;gBAGhC,gBAAgB,EAAE,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EAC9D,eAAe,EAAE,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EAC7D,MAAM,EAAE,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EACnC,aAAa,GAAE,iBAAsB;IAKlD,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYvC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5C;;;;OAIG;IACH,kBAAkB,IAAI;QACpB,UAAU,EAAE,OAAO,CAAC;QACpB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,cAAc,EAAE,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;QACxF,eAAe,EAAE,MAAM,CAAC;QACxB,qBAAqB,EAAE,MAAM,CAAC;KAC/B;IAUD;;;;;OAKG;IACG,QAAQ,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlG,OAAO,CAAC,oBAAoB;YAYd,oBAAoB;YAyCpB,mBAAmB;YAmBnB,kBAAkB;IAiBhC,OAAO,CAAC,6BAA6B;IAUrC,OAAO,CAAC,qBAAqB;YAYf,UAAU;YAoBV,gBAAgB;YAchB,gBAAgB;IAiB9B,OAAO,CAAC,uBAAuB;CA+ChC"}

@@ -7,4 +7,3 @@ let _initClass;

function _checkInRHS(e) { if (Object(e) !== e) throw TypeError("right-hand side of 'in' should be an object, got " + (null !== e ? typeof e : "null")); return e; }
import { AsyncLocalStorage } from 'node:async_hooks';
import { Inject, InvariantError, FluoError } from '@fluojs/core';
import { FluoError, Inject, InvariantError } from '@fluojs/core';
import { APPLICATION_LOGGER, COMPILED_MODULES, RUNTIME_CONTAINER } from '@fluojs/runtime/internal';

@@ -48,3 +47,2 @@ import { CqrsBusBase } from '../discovery.js';

pendingDispatches = new Set();
dispatchContext = new AsyncLocalStorage();
shutdownDrainTimeouts = 0;

@@ -97,3 +95,3 @@ constructor(runtimeContainer, compiledModules, logger, moduleOptions = {}) {

*/
async dispatch(event) {
async dispatch(event, context) {
await this.ensureDiscovered();

@@ -104,3 +102,3 @@ const descriptors = this.matchSagaDescriptors(event);

}
await Promise.all(descriptors.map(descriptor => this.dispatchWithOrdering(descriptor, event)));
await Promise.all(descriptors.map(descriptor => this.dispatchWithOrdering(descriptor, event, context)));
}

@@ -116,4 +114,3 @@ matchSagaDescriptors(event) {

}
async dispatchWithOrdering(descriptor, event) {
const activeContext = this.dispatchContext.getStore();
async dispatchWithOrdering(descriptor, event, activeContext) {
const routeLabel = `${descriptor.targetType.name}(${descriptor.eventType.name})`;

@@ -129,5 +126,3 @@ const isActiveRoute = activeContext?.activeRoutes.some(route => route.token === descriptor.token && route.eventType === descriptor.eventType);

if (isActiveToken) {
await this.runInDispatchContext(activeContext, descriptor, routeLabel, async () => {
await this.invokeSaga(descriptor, event);
});
await this.invokeSaga(descriptor, event, this.createDispatchContext(activeContext, descriptor, routeLabel));
return;

@@ -137,5 +132,3 @@ }

const current = previous.then(async () => {
await this.runInDispatchContext(activeContext, descriptor, routeLabel, async () => {
await this.invokeSaga(descriptor, event);
});
await this.invokeSaga(descriptor, event, this.createDispatchContext(activeContext, descriptor, routeLabel));
});

@@ -183,4 +176,4 @@ this.executionChains.set(descriptor.token, current.catch(() => undefined));

}
async runInDispatchContext(activeContext, descriptor, routeLabel, callback) {
const nextContext = {
createDispatchContext(activeContext, descriptor, routeLabel) {
return {
activeRoutes: [...(activeContext?.activeRoutes ?? []), {

@@ -193,5 +186,4 @@ eventType: descriptor.eventType,

};
await this.dispatchContext.run(nextContext, callback);
}
async invokeSaga(descriptor, event) {
async invokeSaga(descriptor, event, context) {
const instance = await this.resolveHandlerInstance(descriptor.token);

@@ -202,3 +194,3 @@ if (!isSaga(instance)) {

try {
await instance.handle(createIsolatedEvent(descriptor.eventType, event));
await instance.handle(createIsolatedEvent(descriptor.eventType, event), context);
} catch (error) {

@@ -205,0 +197,0 @@ if (error instanceof FluoError) {

@@ -0,11 +1,11 @@

export { CommandBusLifecycleService } from './buses/command-bus.js';
export { CqrsEventBusService } from './buses/event-bus.js';
export { QueryBusLifecycleService } from './buses/query-bus.js';
export { CommandHandler, EventHandler, QueryHandler, Saga } from './decorators.js';
export { DuplicateCommandHandlerError, DuplicateEventHandlerError, DuplicateQueryHandlerError, CommandHandlerNotFoundException, QueryHandlerNotFoundException, SagaExecutionError, SagaTopologyError, } from './errors.js';
export { commandHandlerMetadataSymbol, defineCommandHandlerMetadata, defineEventHandlerMetadata, defineQueryHandlerMetadata, eventHandlerMetadataSymbol, getCommandHandlerMetadata, getCommandHandlerMetadataEntry, getEventHandlerMetadata, getQueryHandlerMetadata, getQueryHandlerMetadataEntry, queryHandlerMetadataSymbol, defineSagaMetadata, getSagaMetadata, sagaMetadataSymbol, } from './metadata.js';
export { CommandHandlerNotFoundException, DuplicateCommandHandlerError, DuplicateEventHandlerError, DuplicateQueryHandlerError, QueryHandlerNotFoundException, SagaExecutionError, SagaTopologyError, } from './errors.js';
export { commandHandlerMetadataSymbol, defineCommandHandlerMetadata, defineEventHandlerMetadata, defineQueryHandlerMetadata, defineSagaMetadata, eventHandlerMetadataSymbol, getCommandHandlerMetadata, getCommandHandlerMetadataEntry, getEventHandlerMetadata, getQueryHandlerMetadata, getQueryHandlerMetadataEntry, getSagaMetadata, queryHandlerMetadataSymbol, sagaMetadataSymbol, } from './metadata.js';
export { CqrsModule, type CqrsModuleOptions } from './module.js';
export * from './status.js';
export { CommandBusLifecycleService } from './buses/command-bus.js';
export { CqrsEventBusService } from './buses/event-bus.js';
export { QueryBusLifecycleService } from './buses/query-bus.js';
export { COMMAND_BUS, EVENT_BUS, QUERY_BUS } from './tokens.js';
export type { CommandBus, CommandHandlerClass, CommandHandlerDescriptor, CommandHandlerMetadata, CommandType, CqrsEventBus, CqrsEventType, EventHandlerDescriptor, EventHandlerClass, EventHandlerMetadata, ICommand, ICommandHandler, IEvent, IEventHandler, IQuery, IQueryHandler, ISaga, QueryBus, QueryHandlerClass, QueryHandlerDescriptor, QueryHandlerMetadata, QueryType, SagaClass, SagaDescriptor, SagaMetadata, } from './types.js';
export type { CommandBus, CommandHandlerClass, CommandHandlerDescriptor, CommandHandlerMetadata, CommandType, CqrsDispatchContext, CqrsEventBus, CqrsEventType, EventHandlerClass, EventHandlerDescriptor, EventHandlerMetadata, ICommand, ICommandHandler, IEvent, IEventHandler, IQuery, IQueryHandler, ISaga, QueryBus, QueryHandlerClass, QueryHandlerDescriptor, QueryHandlerMetadata, QueryType, SagaClass, SagaDescriptor, SagaMetadata, } from './types.js';
//# sourceMappingURL=index.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,EAC1B,+BAA+B,EAC/B,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,uBAAuB,EACvB,uBAAuB,EACvB,4BAA4B,EAC5B,0BAA0B,EAC1B,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjE,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAChE,YAAY,EACV,UAAU,EACV,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,QAAQ,EACR,eAAe,EACf,MAAM,EACN,aAAa,EACb,MAAM,EACN,aAAa,EACb,KAAK,EACL,QAAQ,EACR,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,SAAS,EACT,SAAS,EACT,cAAc,EACd,YAAY,GACb,MAAM,YAAY,CAAC"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EACL,+BAA+B,EAC/B,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,EAC1B,kBAAkB,EAClB,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,uBAAuB,EACvB,uBAAuB,EACvB,4BAA4B,EAC5B,eAAe,EACf,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjE,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAChE,YAAY,EACV,UAAU,EACV,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,QAAQ,EACR,eAAe,EACf,MAAM,EACN,aAAa,EACb,MAAM,EACN,aAAa,EACb,KAAK,EACL,QAAQ,EACR,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,SAAS,EACT,SAAS,EACT,cAAc,EACd,YAAY,GACb,MAAM,YAAY,CAAC"}

@@ -0,9 +1,9 @@

export { CommandBusLifecycleService } from './buses/command-bus.js';
export { CqrsEventBusService } from './buses/event-bus.js';
export { QueryBusLifecycleService } from './buses/query-bus.js';
export { CommandHandler, EventHandler, QueryHandler, Saga } from './decorators.js';
export { DuplicateCommandHandlerError, DuplicateEventHandlerError, DuplicateQueryHandlerError, CommandHandlerNotFoundException, QueryHandlerNotFoundException, SagaExecutionError, SagaTopologyError } from './errors.js';
export { commandHandlerMetadataSymbol, defineCommandHandlerMetadata, defineEventHandlerMetadata, defineQueryHandlerMetadata, eventHandlerMetadataSymbol, getCommandHandlerMetadata, getCommandHandlerMetadataEntry, getEventHandlerMetadata, getQueryHandlerMetadata, getQueryHandlerMetadataEntry, queryHandlerMetadataSymbol, defineSagaMetadata, getSagaMetadata, sagaMetadataSymbol } from './metadata.js';
export { CommandHandlerNotFoundException, DuplicateCommandHandlerError, DuplicateEventHandlerError, DuplicateQueryHandlerError, QueryHandlerNotFoundException, SagaExecutionError, SagaTopologyError } from './errors.js';
export { commandHandlerMetadataSymbol, defineCommandHandlerMetadata, defineEventHandlerMetadata, defineQueryHandlerMetadata, defineSagaMetadata, eventHandlerMetadataSymbol, getCommandHandlerMetadata, getCommandHandlerMetadataEntry, getEventHandlerMetadata, getQueryHandlerMetadata, getQueryHandlerMetadataEntry, getSagaMetadata, queryHandlerMetadataSymbol, sagaMetadataSymbol } from './metadata.js';
export { CqrsModule } from './module.js';
export * from './status.js';
export { CommandBusLifecycleService } from './buses/command-bus.js';
export { CqrsEventBusService } from './buses/event-bus.js';
export { QueryBusLifecycleService } from './buses/query-bus.js';
export { COMMAND_BUS, EVENT_BUS, QUERY_BUS } from './tokens.js';

@@ -1,1 +0,1 @@

{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAOhE,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EAIjB,iBAAiB,EACjB,SAAS,EACV,MAAM,YAAY,CAAC;AAEpB,4FAA4F;AAC5F,MAAM,WAAW,iBAAiB;IAChC,eAAe,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,aAAa,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC7C,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC7C,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7B,8GAA8G;IAC9G,QAAQ,CAAC,EAAE;QACT,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAwBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,iBAAsB,GAAG,QAAQ,EAAE,CAkC/E;AAED,iFAAiF;AACjF,qBAAa,UAAU;IACrB;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU;CAiB5D"}
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAOhE,OAAO,KAAK,EACV,mBAAmB,EAEnB,iBAAiB,EAIjB,iBAAiB,EACjB,SAAS,EACV,MAAM,YAAY,CAAC;AAEpB,4FAA4F;AAC5F,MAAM,WAAW,iBAAiB;IAChC,eAAe,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,aAAa,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC7C,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC7C,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7B,8GAA8G;IAC9G,QAAQ,CAAC,EAAE;QACT,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AA0CD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,iBAAsB,GAAG,QAAQ,EAAE,CA8C/E;AAED,iFAAiF;AACjF,qBAAa,UAAU;IACrB;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU;CAiB5D"}

@@ -27,2 +27,17 @@ import { EventBusModule } from '@fluojs/event-bus';

}
function assertCommandBusService(service) {
if (!(service instanceof CommandBusLifecycleService)) {
throw new TypeError('CQRS command bus alias expected CommandBusLifecycleService.');
}
}
function assertQueryBusService(service) {
if (!(service instanceof QueryBusLifecycleService)) {
throw new TypeError('CQRS query bus alias expected QueryBusLifecycleService.');
}
}
function assertCqrsEventBusService(service) {
if (!(service instanceof CqrsEventBusService)) {
throw new TypeError('CQRS event bus alias expected CqrsEventBusService.');
}
}

@@ -42,18 +57,27 @@ /**

provide: COMMAND_BUS,
useFactory: service => ({
execute: command => service.execute(command)
})
useFactory: service => {
assertCommandBusService(service);
return {
execute: (command, context) => service.execute(command, context)
};
}
}, QueryBusLifecycleService, {
inject: [QueryBusLifecycleService],
provide: QUERY_BUS,
useFactory: service => ({
execute: query => service.execute(query)
})
useFactory: service => {
assertQueryBusService(service);
return {
execute: (query, context) => service.execute(query, context)
};
}
}, CqrsSagaLifecycleService, CqrsEventBusService, {
inject: [CqrsEventBusService],
provide: EVENT_BUS,
useFactory: service => ({
publish: event => service.publish(event),
publishAll: events => service.publishAll(events)
})
useFactory: service => {
assertCqrsEventBusService(service);
return {
publish: (event, context) => service.publish(event, context),
publishAll: (events, context) => service.publishAll(events, context)
};
}
}, ...collectOptionHandlerProviders(options)];

@@ -60,0 +84,0 @@ }

@@ -18,5 +18,6 @@ import type { Token } from '@fluojs/core';

* @param command Command payload to handle.
* @param context Optional saga dispatch context to pass through nested CQRS calls.
* @returns The handler result returned to the command bus caller.
*/
execute(command: TCommand): TResult | Promise<TResult>;
execute(command: TCommand, context?: CqrsDispatchContext): TResult | Promise<TResult>;
}

@@ -29,5 +30,6 @@ /** Contract implemented by classes decorated with {@link QueryHandler}. */

* @param query Query payload to handle.
* @param context Optional saga dispatch context to pass through nested CQRS calls.
* @returns The query result returned to the caller.
*/
execute(query: TQuery): TResult | Promise<TResult>;
execute(query: TQuery, context?: CqrsDispatchContext): TResult | Promise<TResult>;
}

@@ -40,5 +42,6 @@ /** Contract implemented by classes decorated with {@link EventHandler}. */

* @param event Event payload cloned for this handler before delegated event-bus publication.
* @param context Optional saga dispatch context to pass through nested CQRS calls.
* @returns A promise or void once side effects complete.
*/
handle(event: TEvent): void | Promise<void>;
handle(event: TEvent, context?: CqrsDispatchContext): void | Promise<void>;
}

@@ -51,6 +54,24 @@ /** Contract implemented by classes decorated with {@link Saga}. */

* @param event Event payload cloned for this saga route before delegated event-bus publication.
* @param context Optional saga dispatch context to pass through nested CQRS calls.
* @returns A promise or void once orchestration side effects complete.
*/
handle(event: TEvent): void | Promise<void>;
handle(event: TEvent, context?: CqrsDispatchContext): void | Promise<void>;
}
/**
* Opaque dispatch context used to preserve saga topology guards across nested CQRS calls.
*
* Pass this value unchanged from handlers and sagas into nested `execute(...)`, `publish(...)`,
* or `publishAll(...)` calls. Application code should not inspect or construct it directly.
*/
export interface CqrsDispatchContext {
/** Saga routes currently active in the in-process CQRS dispatch chain. */
readonly activeRoutes: readonly Readonly<{
eventType: CqrsEventType;
token: Token;
}>[];
/** Current nested saga depth for in-process topology guarding. */
readonly depth: number;
/** Human-readable saga route labels used when reporting topology failures. */
readonly path: readonly string[];
}
/** Constructor type used to identify a command message class. */

@@ -136,3 +157,3 @@ export interface CommandType<TCommand extends ICommand = ICommand> {

*/
execute<TCommand extends ICommand, TResult = void>(command: TCommand): Promise<TResult>;
execute<TCommand extends ICommand, TResult = void>(command: TCommand, context?: CqrsDispatchContext): Promise<TResult>;
}

@@ -147,3 +168,3 @@ /** Query dispatch facade exposed by the CQRS module. */

*/
execute<TQuery extends IQuery<TResult>, TResult = unknown>(query: TQuery): Promise<TResult>;
execute<TQuery extends IQuery<TResult>, TResult = unknown>(query: TQuery, context?: CqrsDispatchContext): Promise<TResult>;
}

@@ -159,5 +180,6 @@ /** Event publishing facade exposed by the CQRS module. */

* @param event Event instance to publish.
* @param context Optional saga dispatch context to pass through nested CQRS calls.
* @returns A promise that resolves once publication completes.
*/
publish<TEvent extends IEvent>(event: TEvent): Promise<void>;
publish<TEvent extends IEvent>(event: TEvent, context?: CqrsDispatchContext): Promise<void>;
/**

@@ -167,6 +189,7 @@ * Publishes a batch of events in order.

* @param events Event instances to publish.
* @param context Optional saga dispatch context to pass through nested CQRS calls.
* @returns A promise that resolves once all events are published.
*/
publishAll<TEvent extends IEvent>(events: readonly TEvent[]): Promise<void>;
publishAll<TEvent extends IEvent>(events: readonly TEvent[], context?: CqrsDispatchContext): Promise<void>;
}
//# sourceMappingURL=types.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}

@@ -12,3 +12,3 @@ {

],
"version": "1.1.0",
"version": "1.1.1",
"private": false,

@@ -40,6 +40,6 @@ "license": "MIT",

"dependencies": {
"@fluojs/core": "^1.0.2",
"@fluojs/di": "^1.0.2",
"@fluojs/core": "^1.0.3",
"@fluojs/di": "^1.1.0",
"@fluojs/event-bus": "^1.0.0",
"@fluojs/runtime": "^1.1.0"
"@fluojs/runtime": "^1.1.7"
},

@@ -46,0 +46,0 @@ "devDependencies": {

@@ -88,3 +88,3 @@ # @fluojs/cqrs

import { Inject } from '@fluojs/core';
import { Saga, ISaga, IEvent, ICommand, CommandBusLifecycleService } from '@fluojs/cqrs';
import { Saga, ISaga, IEvent, ICommand, CqrsDispatchContext, CommandBusLifecycleService } from '@fluojs/cqrs';

@@ -104,4 +104,4 @@ class UserCreatedEvent implements IEvent {

async handle(event: UserCreatedEvent): Promise<void> {
await this.commandBus.execute(new SendWelcomeEmailCommand(event.userId));
async handle(event: UserCreatedEvent, context?: CqrsDispatchContext): Promise<void> {
await this.commandBus.execute(new SendWelcomeEmailCommand(event.userId), context);
}

@@ -113,2 +113,4 @@ }

Saga, command handler, query handler, event handler 안에서 다시 CQRS `execute(...)`, `publish(...)`, `publishAll(...)`를 호출할 때는 optional `CqrsDispatchContext` 인자를 그대로 전달하세요. CQRS는 이 명시적인 runtime-agnostic context로 Node.js async-local API에 의존하지 않고 nested dispatch 전반의 saga topology check를 유지합니다.
### Event 발행 계약

@@ -156,2 +158,3 @@

- `ICommandHandler<C, R>`, `IQueryHandler<Q, R>`, `IEventHandler<E>`, `ISaga<E>`: 핸들러 계약입니다.
- `CqrsDispatchContext`: handler와 saga에서 nested CQRS dispatch로 그대로 전달하는 opaque optional context 값입니다.

@@ -158,0 +161,0 @@ ### 오류

@@ -88,3 +88,3 @@ # @fluojs/cqrs

import { Inject } from '@fluojs/core';
import { Saga, ISaga, IEvent, ICommand, CommandBusLifecycleService } from '@fluojs/cqrs';
import { Saga, ISaga, IEvent, ICommand, CqrsDispatchContext, CommandBusLifecycleService } from '@fluojs/cqrs';

@@ -104,4 +104,4 @@ class UserCreatedEvent implements IEvent {

async handle(event: UserCreatedEvent): Promise<void> {
await this.commandBus.execute(new SendWelcomeEmailCommand(event.userId));
async handle(event: UserCreatedEvent, context?: CqrsDispatchContext): Promise<void> {
await this.commandBus.execute(new SendWelcomeEmailCommand(event.userId), context);
}

@@ -113,2 +113,4 @@ }

When a saga, command handler, query handler, or event handler performs another CQRS `execute(...)`, `publish(...)`, or `publishAll(...)` call, pass the optional `CqrsDispatchContext` argument through unchanged. CQRS uses this explicit runtime-agnostic context to keep saga topology checks intact across nested dispatch without relying on Node.js async-local APIs.
### Event Publishing Contracts

@@ -156,2 +158,3 @@

- `ICommandHandler<C, R>`, `IQueryHandler<Q, R>`, `IEventHandler<E>`, `ISaga<E>`: Handler contracts.
- `CqrsDispatchContext`: Opaque optional context value to pass through nested CQRS dispatch from handlers and sagas.

@@ -158,0 +161,0 @@ ### Errors