@zudojs/cqrs 0.0.1

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.
Files changed (110) hide show
  1. package/README.md +41 -0
  2. package/dist/command/command.core.d.ts +47 -0
  3. package/dist/command/command.core.d.ts.map +1 -0
  4. package/dist/command/command.core.js +58 -0
  5. package/dist/command/command.core.js.map +1 -0
  6. package/dist/command/commandBus.core.d.ts +91 -0
  7. package/dist/command/commandBus.core.d.ts.map +1 -0
  8. package/dist/command/commandBus.core.js +177 -0
  9. package/dist/command/commandBus.core.js.map +1 -0
  10. package/dist/command/commandHandler.core.d.ts +43 -0
  11. package/dist/command/commandHandler.core.d.ts.map +1 -0
  12. package/dist/command/commandHandler.core.js +57 -0
  13. package/dist/command/commandHandler.core.js.map +1 -0
  14. package/dist/command/commandResult.type.d.ts +57 -0
  15. package/dist/command/commandResult.type.d.ts.map +1 -0
  16. package/dist/command/commandResult.type.js +86 -0
  17. package/dist/command/commandResult.type.js.map +1 -0
  18. package/dist/command/index.d.ts +10 -0
  19. package/dist/command/index.d.ts.map +1 -0
  20. package/dist/command/index.js +10 -0
  21. package/dist/command/index.js.map +1 -0
  22. package/dist/cqrsContext/cqrsContext.core.d.ts +97 -0
  23. package/dist/cqrsContext/cqrsContext.core.d.ts.map +1 -0
  24. package/dist/cqrsContext/cqrsContext.core.js +171 -0
  25. package/dist/cqrsContext/cqrsContext.core.js.map +1 -0
  26. package/dist/cqrsContext/index.d.ts +7 -0
  27. package/dist/cqrsContext/index.d.ts.map +1 -0
  28. package/dist/cqrsContext/index.js +7 -0
  29. package/dist/cqrsContext/index.js.map +1 -0
  30. package/dist/cqrsDecorators/cqrsDecorators.core.d.ts +108 -0
  31. package/dist/cqrsDecorators/cqrsDecorators.core.d.ts.map +1 -0
  32. package/dist/cqrsDecorators/cqrsDecorators.core.js +181 -0
  33. package/dist/cqrsDecorators/cqrsDecorators.core.js.map +1 -0
  34. package/dist/cqrsDecorators/index.d.ts +7 -0
  35. package/dist/cqrsDecorators/index.d.ts.map +1 -0
  36. package/dist/cqrsDecorators/index.js +7 -0
  37. package/dist/cqrsDecorators/index.js.map +1 -0
  38. package/dist/cqrsErrors/cqrsError.base.d.ts +85 -0
  39. package/dist/cqrsErrors/cqrsError.base.d.ts.map +1 -0
  40. package/dist/cqrsErrors/cqrsError.base.js +221 -0
  41. package/dist/cqrsErrors/cqrsError.base.js.map +1 -0
  42. package/dist/cqrsErrors/index.d.ts +7 -0
  43. package/dist/cqrsErrors/index.d.ts.map +1 -0
  44. package/dist/cqrsErrors/index.js +7 -0
  45. package/dist/cqrsErrors/index.js.map +1 -0
  46. package/dist/cqrsEvents/cqrsEventBus.core.d.ts +9 -0
  47. package/dist/cqrsEvents/cqrsEventBus.core.d.ts.map +1 -0
  48. package/dist/cqrsEvents/cqrsEventBus.core.js +9 -0
  49. package/dist/cqrsEvents/cqrsEventBus.core.js.map +1 -0
  50. package/dist/cqrsEvents/cqrsEventResult.type.d.ts +81 -0
  51. package/dist/cqrsEvents/cqrsEventResult.type.d.ts.map +1 -0
  52. package/dist/cqrsEvents/cqrsEventResult.type.js +159 -0
  53. package/dist/cqrsEvents/cqrsEventResult.type.js.map +1 -0
  54. package/dist/cqrsEvents/cqrsEvents.type.d.ts +102 -0
  55. package/dist/cqrsEvents/cqrsEvents.type.d.ts.map +1 -0
  56. package/dist/cqrsEvents/cqrsEvents.type.js +103 -0
  57. package/dist/cqrsEvents/cqrsEvents.type.js.map +1 -0
  58. package/dist/cqrsEvents/index.d.ts +12 -0
  59. package/dist/cqrsEvents/index.d.ts.map +1 -0
  60. package/dist/cqrsEvents/index.js +12 -0
  61. package/dist/cqrsEvents/index.js.map +1 -0
  62. package/dist/cqrsMiddleware/cqrsMiddleware.core.d.ts +65 -0
  63. package/dist/cqrsMiddleware/cqrsMiddleware.core.d.ts.map +1 -0
  64. package/dist/cqrsMiddleware/cqrsMiddleware.core.js +185 -0
  65. package/dist/cqrsMiddleware/cqrsMiddleware.core.js.map +1 -0
  66. package/dist/cqrsMiddleware/index.d.ts +7 -0
  67. package/dist/cqrsMiddleware/index.d.ts.map +1 -0
  68. package/dist/cqrsMiddleware/index.js +7 -0
  69. package/dist/cqrsMiddleware/index.js.map +1 -0
  70. package/dist/cqrsTypes/cqrsTypes.type.d.ts +158 -0
  71. package/dist/cqrsTypes/cqrsTypes.type.d.ts.map +1 -0
  72. package/dist/cqrsTypes/cqrsTypes.type.js +34 -0
  73. package/dist/cqrsTypes/cqrsTypes.type.js.map +1 -0
  74. package/dist/cqrsTypes/index.d.ts +7 -0
  75. package/dist/cqrsTypes/index.d.ts.map +1 -0
  76. package/dist/cqrsTypes/index.js +7 -0
  77. package/dist/cqrsTypes/index.js.map +1 -0
  78. package/dist/handlerRegistry/handlerRegistry.core.d.ts +135 -0
  79. package/dist/handlerRegistry/handlerRegistry.core.d.ts.map +1 -0
  80. package/dist/handlerRegistry/handlerRegistry.core.js +209 -0
  81. package/dist/handlerRegistry/handlerRegistry.core.js.map +1 -0
  82. package/dist/handlerRegistry/index.d.ts +7 -0
  83. package/dist/handlerRegistry/index.d.ts.map +1 -0
  84. package/dist/handlerRegistry/index.js +7 -0
  85. package/dist/handlerRegistry/index.js.map +1 -0
  86. package/dist/index.d.ts +17 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +26 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/query/index.d.ts +10 -0
  91. package/dist/query/index.d.ts.map +1 -0
  92. package/dist/query/index.js +10 -0
  93. package/dist/query/index.js.map +1 -0
  94. package/dist/query/query.core.d.ts +50 -0
  95. package/dist/query/query.core.d.ts.map +1 -0
  96. package/dist/query/query.core.js +61 -0
  97. package/dist/query/query.core.js.map +1 -0
  98. package/dist/query/queryBus.core.d.ts +91 -0
  99. package/dist/query/queryBus.core.d.ts.map +1 -0
  100. package/dist/query/queryBus.core.js +177 -0
  101. package/dist/query/queryBus.core.js.map +1 -0
  102. package/dist/query/queryHandler.core.d.ts +43 -0
  103. package/dist/query/queryHandler.core.d.ts.map +1 -0
  104. package/dist/query/queryHandler.core.js +57 -0
  105. package/dist/query/queryHandler.core.js.map +1 -0
  106. package/dist/query/queryResult.type.d.ts +56 -0
  107. package/dist/query/queryResult.type.d.ts.map +1 -0
  108. package/dist/query/queryResult.type.js +86 -0
  109. package/dist/query/queryResult.type.js.map +1 -0
  110. package/package.json +52 -0
@@ -0,0 +1,185 @@
1
+ import { BaseError, ErrorCategory, ErrorCode, ErrorSeverity, } from "@zudojs/errors";
2
+ /**
3
+ * Middleware that measures command or query execution time.
4
+ */
5
+ export function timingMiddleware(options = {}) {
6
+ const name = options.name ?? "timing";
7
+ return async (request, context, next) => {
8
+ if (options.enabled === false) {
9
+ return next(request, context);
10
+ }
11
+ const startedAt = Date.now();
12
+ try {
13
+ return await next(request, context);
14
+ }
15
+ finally {
16
+ const duration = Date.now() - startedAt;
17
+ void name;
18
+ void duration;
19
+ }
20
+ };
21
+ }
22
+ /**
23
+ * Middleware that catches unknown exceptions and normalizes them
24
+ * into BaseError instances.
25
+ */
26
+ export function errorMiddleware(options = {}) {
27
+ return async (request, context, next) => {
28
+ if (options.enabled === false) {
29
+ return next(request, context);
30
+ }
31
+ try {
32
+ return await next(request, context);
33
+ }
34
+ catch (error) {
35
+ if (error instanceof BaseError) {
36
+ throw error;
37
+ }
38
+ throw new BaseError(error instanceof Error ? error.message : "CQRS execution failed.", {
39
+ code: ErrorCode.INTERNAL_ERROR,
40
+ category: ErrorCategory.SYSTEM,
41
+ severity: ErrorSeverity.ERROR,
42
+ statusCode: 500,
43
+ expose: false,
44
+ isOperational: false,
45
+ cause: error,
46
+ metadata: {
47
+ requestType: request.type,
48
+ },
49
+ });
50
+ }
51
+ };
52
+ }
53
+ /**
54
+ * Middleware that validates the basic CQRS request structure.
55
+ */
56
+ export function validationMiddleware(options = {}) {
57
+ return async (request, context, next) => {
58
+ if (options.enabled === false) {
59
+ return next(request, context);
60
+ }
61
+ if (!request ||
62
+ typeof request !== "object" ||
63
+ typeof request.type !== "string" ||
64
+ request.type.trim().length === 0) {
65
+ throw new BaseError("A valid CQRS request with a type is required.", {
66
+ code: ErrorCode.INVALID_INPUT,
67
+ category: ErrorCategory.VALIDATION,
68
+ severity: ErrorSeverity.WARNING,
69
+ statusCode: 400,
70
+ expose: true,
71
+ isOperational: true,
72
+ });
73
+ }
74
+ return next(request, context);
75
+ };
76
+ }
77
+ /**
78
+ * Middleware that adds execution metadata to the CQRS context.
79
+ */
80
+ export function contextMiddleware(options = {}) {
81
+ return async (request, context, next) => {
82
+ if (options.enabled === false) {
83
+ return next(request, context);
84
+ }
85
+ const enrichedContext = {
86
+ ...(context ?? {}),
87
+ metadata: {
88
+ ...(context?.metadata ?? {}),
89
+ cqrsRequestType: request.type,
90
+ },
91
+ };
92
+ return next(request, enrichedContext);
93
+ };
94
+ }
95
+ /**
96
+ * Creates locking middleware.
97
+ */
98
+ export function lockMiddleware(lock, options = {}) {
99
+ if (!lock || typeof lock.acquire !== "function") {
100
+ throw new TypeError("A valid CQRS lock implementation is required.");
101
+ }
102
+ return async (request, context, next) => {
103
+ if (options.enabled === false) {
104
+ return next(request, context);
105
+ }
106
+ const release = await lock.acquire(request.type);
107
+ try {
108
+ return await next(request, context);
109
+ }
110
+ finally {
111
+ release();
112
+ }
113
+ };
114
+ }
115
+ /**
116
+ * Adapts command-specific middleware to generic CQRS middleware.
117
+ */
118
+ export function commandMiddleware(middleware) {
119
+ return async (request, context, next) => {
120
+ return middleware(request, context, async (command, nextContext) => next(command, nextContext));
121
+ };
122
+ }
123
+ /**
124
+ * Adapts query-specific middleware to generic CQRS middleware.
125
+ */
126
+ export function queryMiddleware(middleware) {
127
+ return async (request, context, next) => {
128
+ return middleware(request, context, async (query, nextContext) => next(query, nextContext));
129
+ };
130
+ }
131
+ /**
132
+ * Combines multiple middleware functions into a single middleware.
133
+ */
134
+ export function composeMiddleware(middleware) {
135
+ const stack = [...middleware];
136
+ return async (request, context, terminal) => {
137
+ let index = -1;
138
+ const dispatch = async (currentIndex, currentRequest, currentContext) => {
139
+ if (currentIndex <= index) {
140
+ throw new Error("CQRS middleware called next() more than once.");
141
+ }
142
+ index = currentIndex;
143
+ const current = stack[currentIndex];
144
+ if (!current) {
145
+ return terminal(currentRequest, currentContext);
146
+ }
147
+ return current(currentRequest, currentContext, (nextRequest, nextContext) => dispatch(currentIndex + 1, nextRequest, nextContext));
148
+ };
149
+ return dispatch(0, request, context);
150
+ };
151
+ }
152
+ /**
153
+ * Creates a middleware that runs a callback before execution.
154
+ */
155
+ export function beforeMiddleware(callback) {
156
+ return async (request, context, next) => {
157
+ await callback(request, context);
158
+ return next(request, context);
159
+ };
160
+ }
161
+ /**
162
+ * Creates a middleware that runs a callback after successful execution.
163
+ */
164
+ export function afterMiddleware(callback) {
165
+ return async (request, context, next) => {
166
+ const result = await next(request, context);
167
+ await callback(request, result, context);
168
+ return result;
169
+ };
170
+ }
171
+ /**
172
+ * Creates a middleware that runs a callback when execution fails.
173
+ */
174
+ export function onErrorMiddleware(callback) {
175
+ return async (request, context, next) => {
176
+ try {
177
+ return await next(request, context);
178
+ }
179
+ catch (error) {
180
+ await callback(request, error, context);
181
+ throw error;
182
+ }
183
+ };
184
+ }
185
+ //# sourceMappingURL=cqrsMiddleware.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cqrsMiddleware.core.js","sourceRoot":"","sources":["../../src/cqrsMiddleware/cqrsMiddleware.core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @zudojs/cqrs/cqrsMiddleware
3
+ *
4
+ * Built-in CQRS middleware: timing, error handling, validation, and composition.
5
+ */
6
+ export * from "./cqrsMiddleware.core.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cqrsMiddleware/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @zudojs/cqrs/cqrsMiddleware
3
+ *
4
+ * Built-in CQRS middleware: timing, error handling, validation, and composition.
5
+ */
6
+ export * from "./cqrsMiddleware.core.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cqrsMiddleware/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Core CQRS types.
3
+ *
4
+ * The CQRS package intentionally keeps commands and queries separate.
5
+ * Commands represent state-changing operations, while queries represent
6
+ * read-only operations.
7
+ */
8
+ /**
9
+ * Base contract for every command.
10
+ */
11
+ export interface Command<TType extends string = string> {
12
+ readonly type: TType;
13
+ }
14
+ /**
15
+ * Base contract for every query.
16
+ */
17
+ export interface Query<TType extends string = string> {
18
+ readonly type: TType;
19
+ }
20
+ /**
21
+ * Context available during command or query execution.
22
+ */
23
+ export interface CqrsContext {
24
+ readonly requestId?: string;
25
+ readonly correlationId?: string;
26
+ readonly causationId?: string;
27
+ readonly userId?: string;
28
+ readonly tenantId?: string;
29
+ readonly metadata?: Readonly<Record<string, unknown>>;
30
+ }
31
+ /**
32
+ * Result returned by a command handler.
33
+ */
34
+ export interface CommandResult<TResult = void> {
35
+ readonly result: TResult;
36
+ readonly commandType?: string;
37
+ }
38
+ /**
39
+ * Result returned by a query handler.
40
+ */
41
+ export interface QueryResult<TResult> {
42
+ readonly result: TResult;
43
+ readonly queryType?: string;
44
+ }
45
+ /**
46
+ * Generic command handler contract.
47
+ */
48
+ export interface CommandHandler<TCommand extends Command = Command, TResult = void> {
49
+ execute(command: TCommand, context?: CqrsContext): Promise<TResult> | TResult;
50
+ }
51
+ /**
52
+ * Generic query handler contract.
53
+ */
54
+ export interface QueryHandler<TQuery extends Query = Query, TResult = unknown> {
55
+ execute(query: TQuery, context?: CqrsContext): Promise<TResult> | TResult;
56
+ }
57
+ /**
58
+ * Function-based command handler.
59
+ */
60
+ export type CommandHandlerFunction<TCommand extends Command = Command, TResult = void> = (command: TCommand, context?: CqrsContext) => TResult | Promise<TResult>;
61
+ /**
62
+ * Function-based query handler.
63
+ */
64
+ export type QueryHandlerFunction<TQuery extends Query = Query, TResult = unknown> = (query: TQuery, context?: CqrsContext) => TResult | Promise<TResult>;
65
+ /**
66
+ * Union of supported command handler implementations.
67
+ */
68
+ export type CommandHandlerLike<TCommand extends Command = Command, TResult = void> = CommandHandler<TCommand, TResult> | CommandHandlerFunction<TCommand, TResult>;
69
+ /**
70
+ * Union of supported query handler implementations.
71
+ */
72
+ export type QueryHandlerLike<TQuery extends Query = Query, TResult = unknown> = QueryHandler<TQuery, TResult> | QueryHandlerFunction<TQuery, TResult>;
73
+ /**
74
+ * Middleware surrounding command execution.
75
+ */
76
+ export type CommandMiddleware = <TCommand extends Command = Command, TResult = void>(command: TCommand, context: CqrsContext | undefined, next: (command: TCommand, context?: CqrsContext) => Promise<TResult>) => Promise<TResult>;
77
+ /**
78
+ * Middleware surrounding query execution.
79
+ */
80
+ export type QueryMiddleware = <TQuery extends Query = Query, TResult = unknown>(query: TQuery, context: CqrsContext | undefined, next: (query: TQuery, context?: CqrsContext) => Promise<TResult>) => Promise<TResult>;
81
+ /**
82
+ * Generic middleware usable by both command and query pipelines.
83
+ */
84
+ export type CqrsMiddleware = (request: Command | Query, context: CqrsContext | undefined, next: (request: Command | Query, context?: CqrsContext) => Promise<unknown>) => Promise<unknown>;
85
+ /**
86
+ * Identifies whether a request is a command or query.
87
+ */
88
+ export type CqrsRequest = Command | Query;
89
+ /**
90
+ * Result of resolving a command handler.
91
+ */
92
+ export interface CommandHandlerRegistration<TCommand extends Command = Command, TResult = void> {
93
+ readonly commandType: TCommand["type"];
94
+ readonly handler: CommandHandlerLike<TCommand, TResult>;
95
+ }
96
+ /**
97
+ * Result of resolving a query handler.
98
+ */
99
+ export interface QueryHandlerRegistration<TQuery extends Query = Query, TResult = unknown> {
100
+ readonly queryType: TQuery["type"];
101
+ readonly handler: QueryHandlerLike<TQuery, TResult>;
102
+ }
103
+ /**
104
+ * Configuration shared by CQRS buses.
105
+ */
106
+ export interface CqrsBusOptions {
107
+ readonly middleware?: readonly CqrsMiddleware[];
108
+ readonly contextFactory?: () => CqrsContext | Promise<CqrsContext>;
109
+ }
110
+ /**
111
+ * Command bus contract.
112
+ */
113
+ export interface CommandBus {
114
+ execute<TCommand extends Command, TResult = void>(command: TCommand, context?: CqrsContext): Promise<TResult>;
115
+ }
116
+ /**
117
+ * Query bus contract.
118
+ */
119
+ export interface QueryBus {
120
+ execute<TQuery extends Query, TResult = unknown>(query: TQuery, context?: CqrsContext): Promise<TResult>;
121
+ }
122
+ /**
123
+ * Converts a command type into a strongly typed command definition.
124
+ */
125
+ export type CommandOf<TType extends string, TPayload extends Record<string, unknown> = Record<string, never>> = Readonly<{
126
+ readonly type: TType;
127
+ } & TPayload>;
128
+ /**
129
+ * Converts a query type into a strongly typed query definition.
130
+ */
131
+ export type QueryOf<TType extends string, TPayload extends Record<string, unknown> = Record<string, never>> = Readonly<{
132
+ readonly type: TType;
133
+ } & TPayload>;
134
+ /**
135
+ * Extracts the type discriminator from a CQRS request.
136
+ */
137
+ export type CqrsRequestType<TRequest extends CqrsRequest> = TRequest["type"];
138
+ /**
139
+ * Extracts the payload of a command or query without its discriminator.
140
+ */
141
+ export type CqrsPayload<TRequest extends CqrsRequest> = Omit<TRequest, "type">;
142
+ /**
143
+ * Determines whether a value is a command.
144
+ */
145
+ export declare function isCommand(value: unknown): value is Command;
146
+ /**
147
+ * Determines whether a value is a query.
148
+ *
149
+ * Since commands and queries share the same runtime shape, this helper
150
+ * should normally be used only when the surrounding code already knows
151
+ * the request belongs to the query pipeline.
152
+ */
153
+ export declare function isQuery(value: unknown): value is Query;
154
+ /**
155
+ * Determines whether an unknown value satisfies the basic CQRS request shape.
156
+ */
157
+ export declare function isCqrsRequest(value: unknown): value is CqrsRequest;
158
+ //# sourceMappingURL=cqrsTypes.type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cqrsTypes.type.d.ts","sourceRoot":"","sources":["../../src/cqrsTypes/cqrsTypes.type.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Core CQRS types.
3
+ *
4
+ * The CQRS package intentionally keeps commands and queries separate.
5
+ * Commands represent state-changing operations, while queries represent
6
+ * read-only operations.
7
+ */
8
+ /**
9
+ * Determines whether a value is a command.
10
+ */
11
+ export function isCommand(value) {
12
+ return isCqrsRequest(value) && "type" in value;
13
+ }
14
+ /**
15
+ * Determines whether a value is a query.
16
+ *
17
+ * Since commands and queries share the same runtime shape, this helper
18
+ * should normally be used only when the surrounding code already knows
19
+ * the request belongs to the query pipeline.
20
+ */
21
+ export function isQuery(value) {
22
+ return isCqrsRequest(value);
23
+ }
24
+ /**
25
+ * Determines whether an unknown value satisfies the basic CQRS request shape.
26
+ */
27
+ export function isCqrsRequest(value) {
28
+ return (typeof value === "object" &&
29
+ value !== null &&
30
+ "type" in value &&
31
+ typeof value.type === "string" &&
32
+ value.type.length > 0);
33
+ }
34
+ //# sourceMappingURL=cqrsTypes.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cqrsTypes.type.js","sourceRoot":"","sources":["../../src/cqrsTypes/cqrsTypes.type.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmNH;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,MAAM,IAAI,KAAK,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,OACE,KAGD,CAAC,IAAI,KAAK,QAAQ;QAEjB,KAGD,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAClB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @zudojs/cqrs/cqrsTypes
3
+ *
4
+ * Core CQRS type definitions: commands, queries, handlers, middleware, and bus contracts.
5
+ */
6
+ export * from "./cqrsTypes.type.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cqrsTypes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @zudojs/cqrs/cqrsTypes
3
+ *
4
+ * Core CQRS type definitions: commands, queries, handlers, middleware, and bus contracts.
5
+ */
6
+ export * from "./cqrsTypes.type.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cqrsTypes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,135 @@
1
+ import type { Command, Query, CommandHandlerLike, QueryHandlerLike } from "../cqrsTypes/cqrsTypes.type.js";
2
+ /**
3
+ * Supported handler kinds.
4
+ */
5
+ export type HandlerKind = "command" | "query";
6
+ /**
7
+ * Registry entry for a command handler.
8
+ */
9
+ export interface CommandHandlerEntry<TCommand extends Command = Command, TResult = void> {
10
+ readonly kind: "command";
11
+ readonly type: TCommand["type"];
12
+ readonly handler: CommandHandlerLike<TCommand, TResult>;
13
+ }
14
+ /**
15
+ * Registry entry for a query handler.
16
+ */
17
+ export interface QueryHandlerEntry<TQuery extends Query = Query, TResult = unknown> {
18
+ readonly kind: "query";
19
+ readonly type: TQuery["type"];
20
+ readonly handler: QueryHandlerLike<TQuery, TResult>;
21
+ }
22
+ /**
23
+ * Union of all CQRS handler registrations.
24
+ */
25
+ export type HandlerEntry = CommandHandlerEntry | QueryHandlerEntry;
26
+ /**
27
+ * Central registry for CQRS command and query handlers.
28
+ *
29
+ * The registry is intentionally independent from the buses so handlers
30
+ * can be registered during application bootstrap and later consumed by
31
+ * one or more buses.
32
+ */
33
+ export declare class HandlerRegistry {
34
+ private readonly commandHandlers;
35
+ private readonly queryHandlers;
36
+ /**
37
+ * Registers a command handler.
38
+ */
39
+ registerCommand<TCommand extends Command, TResult = void>(type: TCommand["type"], handler: CommandHandlerLike<TCommand, TResult>): this;
40
+ /**
41
+ * Registers a query handler.
42
+ */
43
+ registerQuery<TQuery extends Query, TResult = unknown>(type: TQuery["type"], handler: QueryHandlerLike<TQuery, TResult>): this;
44
+ /**
45
+ * Registers a generic handler entry.
46
+ */
47
+ register(entry: HandlerEntry): this;
48
+ /**
49
+ * Registers multiple handlers.
50
+ */
51
+ registerMany(entries: readonly HandlerEntry[]): this;
52
+ /**
53
+ * Replaces a command handler.
54
+ */
55
+ replaceCommand<TCommand extends Command, TResult = void>(type: TCommand["type"], handler: CommandHandlerLike<TCommand, TResult>): this;
56
+ /**
57
+ * Replaces a query handler.
58
+ */
59
+ replaceQuery<TQuery extends Query, TResult = unknown>(type: TQuery["type"], handler: QueryHandlerLike<TQuery, TResult>): this;
60
+ /**
61
+ * Removes a command handler.
62
+ */
63
+ unregisterCommand(type: string): boolean;
64
+ /**
65
+ * Removes a query handler.
66
+ */
67
+ unregisterQuery(type: string): boolean;
68
+ /**
69
+ * Removes either a command or query handler.
70
+ */
71
+ unregister(kind: HandlerKind, type: string): boolean;
72
+ /**
73
+ * Returns a command handler.
74
+ */
75
+ getCommandHandler<TCommand extends Command, TResult = void>(type: TCommand["type"]): CommandHandlerLike<TCommand, TResult> | undefined;
76
+ /**
77
+ * Returns a query handler.
78
+ */
79
+ getQueryHandler<TQuery extends Query, TResult = unknown>(type: TQuery["type"]): QueryHandlerLike<TQuery, TResult> | undefined;
80
+ /**
81
+ * Returns whether a command handler exists.
82
+ */
83
+ hasCommand(type: string): boolean;
84
+ /**
85
+ * Returns whether a query handler exists.
86
+ */
87
+ hasQuery(type: string): boolean;
88
+ /**
89
+ * Returns whether either kind of handler exists.
90
+ */
91
+ has(kind: HandlerKind, type: string): boolean;
92
+ /**
93
+ * Returns all registered command types.
94
+ */
95
+ getCommandTypes(): readonly string[];
96
+ /**
97
+ * Returns all registered query types.
98
+ */
99
+ getQueryTypes(): readonly string[];
100
+ /**
101
+ * Returns all registered handlers.
102
+ */
103
+ getEntries(): readonly HandlerEntry[];
104
+ /**
105
+ * Returns the number of registered command handlers.
106
+ */
107
+ commandCount(): number;
108
+ /**
109
+ * Returns the number of registered query handlers.
110
+ */
111
+ queryCount(): number;
112
+ /**
113
+ * Returns the total number of handlers.
114
+ */
115
+ size(): number;
116
+ /**
117
+ * Clears all handlers.
118
+ */
119
+ clear(): void;
120
+ /**
121
+ * Clears only command handlers.
122
+ */
123
+ clearCommands(): void;
124
+ /**
125
+ * Clears only query handlers.
126
+ */
127
+ clearQueries(): void;
128
+ private validateType;
129
+ private validateHandler;
130
+ }
131
+ /**
132
+ * Creates a new handler registry.
133
+ */
134
+ export declare function createHandlerRegistry(): HandlerRegistry;
135
+ //# sourceMappingURL=handlerRegistry.core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlerRegistry.core.d.ts","sourceRoot":"","sources":["../../src/handlerRegistry/handlerRegistry.core.ts"],"names":[],"mappings":"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"}