@hestjs/cqrs 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,8 @@
1
+ /**
2
+ * CQRS 自动初始化扩展
3
+ *
4
+ * 通过 core 包的钩子系统自动注册 CQRS 相关的处理器
5
+ * 这样避免了 core 包与 CQRS 包的直接耦合
6
+ */
7
+ export declare function initializeCqrsAutoDiscovery(): void;
8
+ //# sourceMappingURL=auto-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-discovery.d.ts","sourceRoot":"","sources":["../src/auto-discovery.ts"],"names":[],"mappings":"AAcA;;;;;GAKG;AACH,wBAAgB,2BAA2B,SAqE1C"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initializeCqrsAutoDiscovery = initializeCqrsAutoDiscovery;
4
+ const core_1 = require("@hestjs/core");
5
+ const logger_1 = require("@hestjs/logger");
6
+ const command_bus_1 = require("./command-bus");
7
+ const query_bus_1 = require("./query-bus");
8
+ const event_bus_1 = require("./event-bus");
9
+ const constants_1 = require("./constants");
10
+ const logger = (0, logger_1.createLogger)("CqrsAutoInit");
11
+ /**
12
+ * CQRS 自动初始化扩展
13
+ *
14
+ * 通过 core 包的钩子系统自动注册 CQRS 相关的处理器
15
+ * 这样避免了 core 包与 CQRS 包的直接耦合
16
+ */
17
+ function initializeCqrsAutoDiscovery() {
18
+ // 注册应用启动钩子
19
+ core_1.ApplicationHooks.getInstance().registerHook(async (container) => {
20
+ try {
21
+ logger.info("🔄 Auto-discovering CQRS handlers...");
22
+ // 尝试从容器中获取已存在的CQRS服务实例,如果没有则创建新的
23
+ let commandBus;
24
+ let queryBus;
25
+ let eventBus;
26
+ try {
27
+ commandBus = container.resolve(command_bus_1.CommandBus);
28
+ queryBus = container.resolve(query_bus_1.QueryBus);
29
+ eventBus = container.resolve(event_bus_1.EventBus);
30
+ logger.info("🔗 Using existing CQRS service instances from container");
31
+ }
32
+ catch {
33
+ // 如果容器中没有,则创建新的实例
34
+ commandBus = new command_bus_1.CommandBus();
35
+ queryBus = new query_bus_1.QueryBus();
36
+ eventBus = new event_bus_1.EventBus();
37
+ logger.info("🆕 Created new CQRS service instances");
38
+ // 将新实例注册到容器中
39
+ container.registerInstance(command_bus_1.CommandBus, commandBus);
40
+ container.registerInstance(query_bus_1.QueryBus, queryBus);
41
+ container.registerInstance(event_bus_1.EventBus, eventBus);
42
+ }
43
+ // 从逻辑容器中发现处理器
44
+ const providerItems = container.getItemsByType('provider');
45
+ const handlers = {
46
+ commands: [],
47
+ queries: [],
48
+ events: [],
49
+ sagas: []
50
+ };
51
+ for (const item of providerItems) {
52
+ const handlerClass = item.provider;
53
+ // 检查命令处理器
54
+ if (Reflect.hasMetadata(constants_1.COMMAND_HANDLER_METADATA, handlerClass)) {
55
+ handlers.commands.push(handlerClass);
56
+ // logger.debug(`Found command handler: ${handlerClass.name}`);
57
+ }
58
+ // 检查查询处理器
59
+ if (Reflect.hasMetadata(constants_1.QUERY_HANDLER_METADATA, handlerClass)) {
60
+ handlers.queries.push(handlerClass);
61
+ // logger.debug(`Found query handler: ${handlerClass.name}`);
62
+ }
63
+ // 检查事件处理器
64
+ if (Reflect.hasMetadata(constants_1.EVENT_HANDLER_METADATA, handlerClass)) {
65
+ handlers.events.push(handlerClass);
66
+ // logger.debug(`Found event handler: ${handlerClass.name}`);
67
+ }
68
+ }
69
+ // 手动注册处理器到总线(避免容器解析问题)
70
+ registerHandlersManually(commandBus, queryBus, eventBus, handlers, container);
71
+ logger.info(`✅ CQRS handlers auto-discovery completed: ${handlers.commands.length} commands, ${handlers.queries.length} queries, ${handlers.events.length} events`);
72
+ }
73
+ catch (error) {
74
+ logger.error("❌ Failed to auto-discover CQRS handlers:", error);
75
+ }
76
+ });
77
+ }
78
+ /**
79
+ * 手动注册处理器到总线,避免容器解析问题
80
+ */
81
+ function registerHandlersManually(commandBus, queryBus, eventBus, handlers, container) {
82
+ // 注册命令处理器
83
+ for (const HandlerClass of handlers.commands) {
84
+ try {
85
+ const commandType = Reflect.getMetadata(constants_1.COMMAND_HANDLER_METADATA, HandlerClass);
86
+ if (commandType) {
87
+ // 手动解析构造函数依赖并创建实例
88
+ const handlerInstance = createHandlerInstance(HandlerClass, container);
89
+ const commandName = commandType.name;
90
+ // 直接设置到 commandBus 的内部映射
91
+ commandBus.handlers.set(commandName, (command) => handlerInstance.execute(command));
92
+ // logger.info(`Manually registered command handler for "${commandName}"`);
93
+ }
94
+ }
95
+ catch (error) {
96
+ logger.error(`Failed to register command handler ${HandlerClass.name}:`, error);
97
+ }
98
+ }
99
+ // 注册查询处理器
100
+ for (const HandlerClass of handlers.queries) {
101
+ try {
102
+ const queryType = Reflect.getMetadata(constants_1.QUERY_HANDLER_METADATA, HandlerClass);
103
+ if (queryType) {
104
+ // 手动解析构造函数依赖并创建实例
105
+ const handlerInstance = createHandlerInstance(HandlerClass, container);
106
+ const queryName = queryType.name;
107
+ // 直接设置到 queryBus 的内部映射
108
+ queryBus.handlers.set(queryName, (query) => handlerInstance.execute(query));
109
+ // logger.info(`Manually registered query handler for "${queryName}"`);
110
+ }
111
+ }
112
+ catch (error) {
113
+ logger.warn(`Failed to register query handler ${HandlerClass.name}:`, error);
114
+ }
115
+ }
116
+ // 注册事件处理器
117
+ for (const HandlerClass of handlers.events) {
118
+ try {
119
+ const eventTypes = Reflect.getMetadata(constants_1.EVENT_HANDLER_METADATA, HandlerClass);
120
+ if (eventTypes) {
121
+ // 手动解析构造函数依赖并创建实例
122
+ const handlerInstance = createHandlerInstance(HandlerClass, container);
123
+ // 处理可能有多个事件类型的情况
124
+ const eventTypeArray = Array.isArray(eventTypes) ? eventTypes : [eventTypes];
125
+ for (const eventType of eventTypeArray) {
126
+ const eventName = eventType.name;
127
+ // 直接设置到 eventBus 的内部映射
128
+ if (!eventBus.handlers) {
129
+ eventBus.handlers = new Map();
130
+ }
131
+ if (!eventBus.handlers.has(eventName)) {
132
+ eventBus.handlers.set(eventName, []);
133
+ }
134
+ eventBus.handlers.get(eventName).push((event) => handlerInstance.handle(event));
135
+ logger.info(`Manually registered event handler for "${eventName}"`);
136
+ }
137
+ }
138
+ }
139
+ catch (error) {
140
+ logger.warn(`Failed to register event handler ${HandlerClass.name}:`, error);
141
+ }
142
+ }
143
+ }
144
+ /**
145
+ * 手动创建处理器实例并解析依赖
146
+ */
147
+ function createHandlerInstance(HandlerClass, container) {
148
+ // 获取构造函数参数类型
149
+ const paramTypes = Reflect.getMetadata('design:paramtypes', HandlerClass) || [];
150
+ // 解析每个依赖
151
+ const dependencies = paramTypes.map((paramType) => {
152
+ try {
153
+ // 尝试从容器中解析依赖
154
+ return container.resolve(paramType);
155
+ }
156
+ catch (error) {
157
+ logger.warn(`Failed to resolve dependency ${paramType?.name || 'unknown'} for ${HandlerClass.name}, using null`);
158
+ return null;
159
+ }
160
+ });
161
+ // 创建实例
162
+ return new HandlerClass(...dependencies);
163
+ }
164
+ // 自动初始化
165
+ initializeCqrsAutoDiscovery();
166
+ //# sourceMappingURL=auto-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-discovery.js","sourceRoot":"","sources":["../src/auto-discovery.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { CommandBus } from "./command-bus";
2
2
  import { EventBus } from "./event-bus";
3
- import { CqrsModuleAsyncOptions, CqrsModuleOptions, IEvent } from "./interfaces";
3
+ import { IEvent } from "./interfaces";
4
4
  import { QueryBus } from "./query-bus";
5
5
  import { ExplorerService } from "./services";
6
6
  /**
@@ -12,18 +12,14 @@ export declare class CqrsModule<EventBase extends IEvent = IEvent> {
12
12
  private readonly eventBus;
13
13
  private readonly commandBus;
14
14
  private readonly queryBus;
15
- private static isInitialized;
16
15
  constructor(explorerService: ExplorerService<EventBase>, eventBus: EventBus<EventBase>, commandBus: CommandBus, queryBus: QueryBus);
17
16
  /**
18
- * Configure CQRS module with options
17
+ * Configure CQRS module for root
19
18
  */
20
- static forRoot(options?: CqrsModuleOptions): typeof CqrsModule;
21
- /**
22
- * Configure CQRS module with async options
23
- */
24
- static forRootAsync(options: CqrsModuleAsyncOptions): typeof CqrsModule;
19
+ static forRoot(): typeof CqrsModule;
25
20
  /**
26
21
  * Initialize the CQRS module and register all handlers
22
+ * This will be called automatically by the application hooks system
27
23
  */
28
24
  onApplicationBootstrap(): Promise<void>;
29
25
  /**
@@ -42,9 +38,5 @@ export declare class CqrsModule<EventBase extends IEvent = IEvent> {
42
38
  * Register a handler manually
43
39
  */
44
40
  registerHandler(handlerClass: Function): void;
45
- /**
46
- * Get a singleton instance of the CQRS module
47
- */
48
- static getInstance<EventBase extends IEvent = IEvent>(): CqrsModule<EventBase>;
49
41
  }
50
42
  //# sourceMappingURL=cqrs.module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cqrs.module.d.ts","sourceRoot":"","sources":["../src/cqrs.module.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EAEjB,MAAM,EACP,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C;;;GAGG;AACH,qBAKa,UAAU,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IAIrD,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAN3B,OAAO,CAAC,MAAM,CAAC,aAAa,CAAS;gBAGlB,eAAe,EAAE,eAAe,CAAC,SAAS,CAAC,EAC3C,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC7B,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ;IAGrC;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,UAAU;IAuB9D;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,UAAU;IAwCvE;;OAEG;IACG,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAY7C;;OAEG;IACH,aAAa,IAAI,UAAU;IAI3B;;OAEG;IACH,WAAW,IAAI,QAAQ;IAIvB;;OAEG;IACH,WAAW,IAAI,QAAQ,CAAC,SAAS,CAAC;IAIlC;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,QAAQ,GAAG,IAAI;IAI7C;;OAEG;IACH,MAAM,CAAC,WAAW,CAChB,SAAS,SAAS,MAAM,GAAG,MAAM,KAC9B,UAAU,CAAC,SAAS,CAAC;CAoB3B"}
1
+ {"version":3,"file":"cqrs.module.d.ts","sourceRoot":"","sources":["../src/cqrs.module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C;;;GAGG;AACH,qBAKa,UAAU,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IAErD,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAHR,eAAe,EAAE,eAAe,CAAC,SAAS,CAAC,EAC3C,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC7B,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ;IAGrC;;OAEG;IACH,MAAM,CAAC,OAAO,IAAI,OAAO,UAAU;IAKnC;;;OAGG;IACG,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAY7C;;OAEG;IACH,aAAa,IAAI,UAAU;IAI3B;;OAEG;IACH,WAAW,IAAI,QAAQ;IAIvB;;OAEG;IACH,WAAW,IAAI,QAAQ,CAAC,SAAS,CAAC;IAIlC;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,QAAQ,GAAG,IAAI;CAG9C"}
@@ -12,9 +12,7 @@ var CqrsModule_1;
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.CqrsModule = void 0;
14
14
  const core_1 = require("@hestjs/core");
15
- const tsyringe_1 = require("tsyringe");
16
15
  const command_bus_1 = require("./command-bus");
17
- const constants_1 = require("./constants");
18
16
  const event_bus_1 = require("./event-bus");
19
17
  const query_bus_1 = require("./query-bus");
20
18
  const services_1 = require("./services");
@@ -30,68 +28,18 @@ let CqrsModule = CqrsModule_1 = class CqrsModule {
30
28
  this.queryBus = queryBus;
31
29
  }
32
30
  /**
33
- * Configure CQRS module with options
31
+ * Configure CQRS module for root
34
32
  */
35
- static forRoot(options) {
36
- if (CqrsModule_1.isInitialized) {
37
- core_1.logger.warn("CqrsModule is already initialized");
38
- return CqrsModule_1;
39
- }
40
- // Register options
41
- if (options) {
42
- tsyringe_1.container.registerInstance(constants_1.CQRS_MODULE_OPTIONS, options);
43
- }
44
- // Register core services
45
- tsyringe_1.container.registerSingleton(command_bus_1.CommandBus);
46
- tsyringe_1.container.registerSingleton(query_bus_1.QueryBus);
47
- tsyringe_1.container.registerSingleton(event_bus_1.EventBus);
48
- tsyringe_1.container.registerSingleton(services_1.ExplorerService);
49
- CqrsModule_1.isInitialized = true;
50
- core_1.logger.info("CqrsModule initialized");
51
- return CqrsModule_1;
52
- }
53
- /**
54
- * Configure CQRS module with async options
55
- */
56
- static forRootAsync(options) {
57
- if (CqrsModule_1.isInitialized) {
58
- core_1.logger.warn("CqrsModule is already initialized");
59
- return CqrsModule_1;
60
- }
61
- // Handle async configuration
62
- if (options.useFactory) {
63
- const factory = options.useFactory;
64
- const deps = options.inject || [];
65
- tsyringe_1.container.register(constants_1.CQRS_MODULE_OPTIONS, {
66
- useFactory: () => factory(...deps.map((dep) => tsyringe_1.container.resolve(dep))),
67
- });
68
- }
69
- else if (options.useClass) {
70
- tsyringe_1.container.registerSingleton(options.useClass);
71
- tsyringe_1.container.register(constants_1.CQRS_MODULE_OPTIONS, {
72
- useFactory: () => {
73
- const factory = tsyringe_1.container.resolve(options.useClass);
74
- return factory.createCqrsOptions();
75
- },
76
- });
77
- }
78
- else if (options.useValue) {
79
- tsyringe_1.container.registerInstance(constants_1.CQRS_MODULE_OPTIONS, options.useValue);
80
- }
81
- // Register core services
82
- tsyringe_1.container.registerSingleton(command_bus_1.CommandBus);
83
- tsyringe_1.container.registerSingleton(query_bus_1.QueryBus);
84
- tsyringe_1.container.registerSingleton(event_bus_1.EventBus);
85
- tsyringe_1.container.registerSingleton(services_1.ExplorerService);
86
- CqrsModule_1.isInitialized = true;
87
- core_1.logger.info("CqrsModule initialized with async options");
33
+ static forRoot() {
34
+ core_1.logger.info("CqrsModule configured for root");
88
35
  return CqrsModule_1;
89
36
  }
90
37
  /**
91
38
  * Initialize the CQRS module and register all handlers
39
+ * This will be called automatically by the application hooks system
92
40
  */
93
41
  async onApplicationBootstrap() {
94
- const { events, queries, sagas, commands } = this.explorerService.getRegisteredHandlers();
42
+ const { events, queries, sagas, commands } = this.explorerService.explore();
95
43
  this.eventBus.register(events);
96
44
  this.commandBus.register(commands);
97
45
  this.queryBus.register(queries);
@@ -122,23 +70,8 @@ let CqrsModule = CqrsModule_1 = class CqrsModule {
122
70
  registerHandler(handlerClass) {
123
71
  this.explorerService.registerHandler(handlerClass);
124
72
  }
125
- /**
126
- * Get a singleton instance of the CQRS module
127
- */
128
- static getInstance() {
129
- if (!CqrsModule_1.isInitialized) {
130
- throw new Error("CqrsModule must be initialized before getting instance. Call forRoot() or forRootAsync() first.");
131
- }
132
- // Manually create the instance to avoid circular dependency
133
- const explorerService = tsyringe_1.container.resolve(services_1.ExplorerService);
134
- const eventBus = tsyringe_1.container.resolve(event_bus_1.EventBus);
135
- const commandBus = tsyringe_1.container.resolve(command_bus_1.CommandBus);
136
- const queryBus = tsyringe_1.container.resolve(query_bus_1.QueryBus);
137
- return new CqrsModule_1(explorerService, eventBus, commandBus, queryBus);
138
- }
139
73
  };
140
74
  exports.CqrsModule = CqrsModule;
141
- CqrsModule.isInitialized = false;
142
75
  exports.CqrsModule = CqrsModule = CqrsModule_1 = __decorate([
143
76
  (0, core_1.Module)({
144
77
  providers: [command_bus_1.CommandBus, query_bus_1.QueryBus, event_bus_1.EventBus, services_1.ExplorerService],
@@ -1 +1 @@
1
- {"version":3,"file":"cqrs.module.js","sourceRoot":"","sources":["../src/cqrs.module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cqrs.module.js","sourceRoot":"","sources":["../src/cqrs.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,uCAA0D;AAC1D,+CAA2C;AAC3C,2CAAuC;AAEvC,2CAAuC;AACvC,yCAA6C;AAE7C;;;GAGG;AAMI,IAAM,UAAU,kBAAhB,MAAM,UAAU;IACrB,YACmB,eAA2C,EAC3C,QAA6B,EAC7B,UAAsB,EACtB,QAAkB;QAHlB,oBAAe,GAAf,eAAe,CAA4B;QAC3C,aAAQ,GAAR,QAAQ,CAAqB;QAC7B,eAAU,GAAV,UAAU,CAAY;QACtB,aAAQ,GAAR,QAAQ,CAAU;IAClC,CAAC;IAEJ;;OAEG;IACH,MAAM,CAAC,OAAO;QACZ,aAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,YAAU,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,sBAAsB;QAC1B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GACxC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QAEjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEnC,aAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,YAAsB;QACpC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IACrD,CAAC;CACF,CAAA;AA3DY,gCAAU;qBAAV,UAAU;IALtB,IAAA,aAAM,EAAC;QACN,SAAS,EAAE,CAAC,wBAAU,EAAE,oBAAQ,EAAE,oBAAQ,EAAE,0BAAe,CAAC;QAC5D,OAAO,EAAE,CAAC,wBAAU,EAAE,oBAAQ,EAAE,oBAAQ,EAAE,0BAAe,CAAC;KAC3D,CAAC;IACD,IAAA,iBAAU,GAAE;qCAGyB,0BAAe;QACtB,oBAAQ;QACN,wBAAU;QACZ,oBAAQ;GAL1B,UAAU,CA2DtB"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import "reflect-metadata";
2
+ import "./auto-discovery";
2
3
  export * from "./classes";
3
4
  export * from "./decorators";
4
5
  export * from "./exceptions";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,OAAO,kBAAkB,CAAC;AAG1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,cAAc,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -16,6 +16,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.CqrsModule = exports.QueryBus = exports.EventBus = exports.CommandBus = void 0;
18
18
  require("reflect-metadata");
19
+ // 自动初始化CQRS扩展
20
+ require("./auto-discovery");
19
21
  // 导出所有公共 API
20
22
  __exportStar(require("./classes"), exports);
21
23
  __exportStar(require("./decorators"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,4BAA0B;AAE1B,aAAa;AACb,4CAA0B;AAC1B,+CAA6B;AAC7B,+CAA6B;AAC7B,4CAA0B;AAC1B,+CAA6B;AAC7B,6CAA2B;AAC3B,0CAAwB;AAExB,SAAS;AACT,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA;AACjB,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA;AAEjB,OAAO;AACP,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AAEnB,OAAO;AACP,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,4BAA0B;AAE1B,cAAc;AACd,4BAA0B;AAE1B,aAAa;AACb,4CAA0B;AAC1B,+CAA6B;AAC7B,+CAA6B;AAC7B,4CAA0B;AAC1B,+CAA6B;AAC7B,6CAA2B;AAC3B,0CAAwB;AAExB,SAAS;AACT,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA;AACjB,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA;AAEjB,OAAO;AACP,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AAEnB,OAAO;AACP,8CAA4B"}
@@ -1,3 +1,4 @@
1
+ import { Container } from "@hestjs/core";
1
2
  import "reflect-metadata";
2
3
  import { CommandHandlerType, EventHandlerType, ICommand, IEvent, IQuery, QueryHandlerType, SagaType } from "../interfaces";
3
4
  export interface ExplorerResult<EventBase extends IEvent = IEvent> {
@@ -7,11 +8,21 @@ export interface ExplorerResult<EventBase extends IEvent = IEvent> {
7
8
  sagas: SagaType<EventBase>[];
8
9
  }
9
10
  export declare class ExplorerService<EventBase extends IEvent = IEvent> {
11
+ private readonly container;
10
12
  private registeredHandlers;
13
+ constructor(container: Container);
11
14
  /**
12
- * Explores and discovers all CQRS handlers and sagas from the TSyringe container.
15
+ * Explores and discovers all CQRS handlers and sagas from the container.
13
16
  */
14
17
  explore(): ExplorerResult<EventBase>;
18
+ /**
19
+ * 自动从容器中发现处理器
20
+ */
21
+ private autoDiscoverHandlers;
22
+ /**
23
+ * 检查类是否是CQRS处理器
24
+ */
25
+ private isCqrsHandler;
15
26
  /**
16
27
  * Manually register a handler class for discovery.
17
28
  * This is a workaround since TSyringe doesn't provide direct access to all registered classes.
@@ -1 +1 @@
1
- {"version":3,"file":"explorer.service.d.ts","sourceRoot":"","sources":["../../src/services/explorer.service.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC;AAO1B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,QAAQ,EACR,MAAM,EACN,MAAM,EACN,gBAAgB,EAChB,QAAQ,EACT,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,cAAc,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IAC/D,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;IACzC,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;IACpC,MAAM,EAAE,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;IACtC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;CAC9B;AAED,qBACa,eAAe,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IAC5D,OAAO,CAAC,kBAAkB,CAAuB;IAEjD;;OAEG;IACH,OAAO,IAAI,cAAc,CAAC,SAAS,CAAC;IAqBpC;;;OAGG;IACH,eAAe,CAAC,YAAY,EAAE,QAAQ,GAAG,IAAI;IA4B7C;;OAEG;IACH,qBAAqB,IAAI,cAAc,CAAC,SAAS,CAAC;CA+BnD"}
1
+ {"version":3,"file":"explorer.service.d.ts","sourceRoot":"","sources":["../../src/services/explorer.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,SAAS,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,kBAAkB,CAAC;AAO1B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,QAAQ,EACR,MAAM,EACN,MAAM,EACN,gBAAgB,EAChB,QAAQ,EACT,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,cAAc,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IAC/D,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;IACzC,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;IACpC,MAAM,EAAE,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;IACtC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;CAC9B;AAED,qBACa,eAAe,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IAGhD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,OAAO,CAAC,kBAAkB,CAAuB;gBAEpB,SAAS,EAAE,SAAS;IAEjD;;OAEG;IACH,OAAO,IAAI,cAAc,CAAC,SAAS,CAAC;IAOpC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;;OAGG;IACH,eAAe,CAAC,YAAY,EAAE,QAAQ,GAAG,IAAI;IA4B7C;;OAEG;IACH,qBAAqB,IAAI,cAAc,CAAC,SAAS,CAAC;CAmCnD"}
@@ -5,32 +5,51 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
8
11
  Object.defineProperty(exports, "__esModule", { value: true });
9
12
  exports.ExplorerService = void 0;
10
13
  const core_1 = require("@hestjs/core");
11
14
  require("reflect-metadata");
12
15
  const constants_1 = require("../constants");
13
16
  let ExplorerService = class ExplorerService {
14
- constructor() {
17
+ constructor(container) {
18
+ this.container = container;
15
19
  this.registeredHandlers = new Set();
16
20
  }
17
21
  /**
18
- * Explores and discovers all CQRS handlers and sagas from the TSyringe container.
22
+ * Explores and discovers all CQRS handlers and sagas from the container.
19
23
  */
20
24
  explore() {
21
- const commands = [];
22
- const queries = [];
23
- const events = [];
24
- const sagas = [];
25
- // In a real implementation, you would iterate through registered providers
26
- // For now, we'll provide a way to manually register handlers
27
- core_1.logger.info(`CQRS Explorer: Discovered handlers - commands: ${commands.length}, queries: ${queries.length}, events: ${events.length}, sagas: ${sagas.length}`);
28
- return {
29
- commands,
30
- queries,
31
- events,
32
- sagas,
33
- };
25
+ // 自动从容器中发现所有提供者
26
+ this.autoDiscoverHandlers();
27
+ return this.getRegisteredHandlers();
28
+ }
29
+ /**
30
+ * 自动从容器中发现处理器
31
+ */
32
+ autoDiscoverHandlers() {
33
+ const providerItems = this.container.getItemsByType('provider');
34
+ let discoveredCount = 0;
35
+ for (const item of providerItems) {
36
+ const handlerClass = item.provider;
37
+ // 检查是否是CQRS处理器
38
+ if (this.isCqrsHandler(handlerClass)) {
39
+ this.registerHandler(handlerClass);
40
+ discoveredCount++;
41
+ }
42
+ }
43
+ core_1.logger.info(`🔍 Auto-discovered ${discoveredCount} CQRS handlers from container`);
44
+ }
45
+ /**
46
+ * 检查类是否是CQRS处理器
47
+ */
48
+ isCqrsHandler(handlerClass) {
49
+ return (Reflect.hasMetadata(constants_1.COMMAND_HANDLER_METADATA, handlerClass) ||
50
+ Reflect.hasMetadata(constants_1.QUERY_HANDLER_METADATA, handlerClass) ||
51
+ Reflect.hasMetadata(constants_1.EVENT_HANDLER_METADATA, handlerClass) ||
52
+ Reflect.hasMetadata(constants_1.SAGA_METADATA, handlerClass));
34
53
  }
35
54
  /**
36
55
  * Manually register a handler class for discovery.
@@ -80,6 +99,7 @@ let ExplorerService = class ExplorerService {
80
99
  sagas.push(handlerClass);
81
100
  }
82
101
  }
102
+ core_1.logger.info(`📊 CQRS Handlers registered - commands: ${commands.length}, queries: ${queries.length}, events: ${events.length}, sagas: ${sagas.length}`);
83
103
  return {
84
104
  commands,
85
105
  queries,
@@ -90,6 +110,7 @@ let ExplorerService = class ExplorerService {
90
110
  };
91
111
  exports.ExplorerService = ExplorerService;
92
112
  exports.ExplorerService = ExplorerService = __decorate([
93
- (0, core_1.Injectable)()
113
+ (0, core_1.Injectable)(),
114
+ __metadata("design:paramtypes", [core_1.Container])
94
115
  ], ExplorerService);
95
116
  //# sourceMappingURL=explorer.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"explorer.service.js","sourceRoot":"","sources":["../../src/services/explorer.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"explorer.service.js","sourceRoot":"","sources":["../../src/services/explorer.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hestjs/cqrs",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "HestJS CQRS - Command Query Responsibility Segregation module for HestJS",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -28,7 +28,7 @@
28
28
  "author": "aqz236",
29
29
  "license": "MIT",
30
30
  "dependencies": {
31
- "@hestjs/core": "^0.1.8",
31
+ "@hestjs/core": "^0.1.10",
32
32
  "reflect-metadata": "^0.2.2",
33
33
  "rxjs": "^7.8.1",
34
34
  "tsyringe": "^4.10.0"