@hexaijs/application 0.1.0

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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +331 -0
  3. package/dist/abstract-application-context.d.ts +13 -0
  4. package/dist/abstract-application-context.d.ts.map +1 -0
  5. package/dist/abstract-application-context.js +35 -0
  6. package/dist/abstract-application-context.js.map +1 -0
  7. package/dist/application-context.d.ts +2 -0
  8. package/dist/application-context.d.ts.map +1 -0
  9. package/dist/application-context.js +6 -0
  10. package/dist/application-context.js.map +1 -0
  11. package/dist/application-event-publisher.d.ts +16 -0
  12. package/dist/application-event-publisher.d.ts.map +1 -0
  13. package/dist/application-event-publisher.js +37 -0
  14. package/dist/application-event-publisher.js.map +1 -0
  15. package/dist/application.d.ts +59 -0
  16. package/dist/application.d.ts.map +1 -0
  17. package/dist/application.js +237 -0
  18. package/dist/application.js.map +1 -0
  19. package/dist/command-handler.d.ts +5 -0
  20. package/dist/command-handler.d.ts.map +1 -0
  21. package/dist/command-handler.js +3 -0
  22. package/dist/command-handler.js.map +1 -0
  23. package/dist/command.d.ts +12 -0
  24. package/dist/command.d.ts.map +1 -0
  25. package/dist/command.js +46 -0
  26. package/dist/command.js.map +1 -0
  27. package/dist/error.d.ts +37 -0
  28. package/dist/error.d.ts.map +1 -0
  29. package/dist/error.js +28 -0
  30. package/dist/error.js.map +1 -0
  31. package/dist/event-handler.d.ts +6 -0
  32. package/dist/event-handler.d.ts.map +1 -0
  33. package/dist/event-handler.js +3 -0
  34. package/dist/event-handler.js.map +1 -0
  35. package/dist/event-publisher.d.ts +4 -0
  36. package/dist/event-publisher.d.ts.map +1 -0
  37. package/dist/event-publisher.js +3 -0
  38. package/dist/event-publisher.js.map +1 -0
  39. package/dist/index.d.ts +18 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +34 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/intercepted-application.d.ts +33 -0
  44. package/dist/intercepted-application.d.ts.map +1 -0
  45. package/dist/intercepted-application.js +111 -0
  46. package/dist/intercepted-application.js.map +1 -0
  47. package/dist/interceptor.d.ts +25 -0
  48. package/dist/interceptor.d.ts.map +1 -0
  49. package/dist/interceptor.js +3 -0
  50. package/dist/interceptor.js.map +1 -0
  51. package/dist/logging/create-logger.d.ts +16 -0
  52. package/dist/logging/create-logger.d.ts.map +1 -0
  53. package/dist/logging/create-logger.js +48 -0
  54. package/dist/logging/create-logger.js.map +1 -0
  55. package/dist/logging/index.d.ts +7 -0
  56. package/dist/logging/index.d.ts.map +1 -0
  57. package/dist/logging/index.js +32 -0
  58. package/dist/logging/index.js.map +1 -0
  59. package/dist/logging/logger.d.ts +42 -0
  60. package/dist/logging/logger.d.ts.map +1 -0
  61. package/dist/logging/logger.js +3 -0
  62. package/dist/logging/logger.js.map +1 -0
  63. package/dist/logging/logging-interceptor.d.ts +9 -0
  64. package/dist/logging/logging-interceptor.d.ts.map +1 -0
  65. package/dist/logging/logging-interceptor.js +48 -0
  66. package/dist/logging/logging-interceptor.js.map +1 -0
  67. package/dist/logging/logging-utils.d.ts +16 -0
  68. package/dist/logging/logging-utils.d.ts.map +1 -0
  69. package/dist/logging/logging-utils.js +91 -0
  70. package/dist/logging/logging-utils.js.map +1 -0
  71. package/dist/logging/trace-interceptor.d.ts +16 -0
  72. package/dist/logging/trace-interceptor.d.ts.map +1 -0
  73. package/dist/logging/trace-interceptor.js +53 -0
  74. package/dist/logging/trace-interceptor.js.map +1 -0
  75. package/dist/message-handler.d.ts +4 -0
  76. package/dist/message-handler.d.ts.map +1 -0
  77. package/dist/message-handler.js +3 -0
  78. package/dist/message-handler.js.map +1 -0
  79. package/dist/messaging-support.d.ts +11 -0
  80. package/dist/messaging-support.d.ts.map +1 -0
  81. package/dist/messaging-support.js +40 -0
  82. package/dist/messaging-support.js.map +1 -0
  83. package/dist/query-handler.d.ts +5 -0
  84. package/dist/query-handler.d.ts.map +1 -0
  85. package/dist/query-handler.js +3 -0
  86. package/dist/query-handler.js.map +1 -0
  87. package/dist/query.d.ts +12 -0
  88. package/dist/query.d.ts.map +1 -0
  89. package/dist/query.js +46 -0
  90. package/dist/query.js.map +1 -0
  91. package/dist/request.d.ts +3 -0
  92. package/dist/request.d.ts.map +1 -0
  93. package/dist/request.js +19 -0
  94. package/dist/request.js.map +1 -0
  95. package/dist/result.d.ts +18 -0
  96. package/dist/result.d.ts.map +1 -0
  97. package/dist/result.js +28 -0
  98. package/dist/result.js.map +1 -0
  99. package/dist/selector-based-event-handler.d.ts +29 -0
  100. package/dist/selector-based-event-handler.d.ts.map +1 -0
  101. package/dist/selector-based-event-handler.js +78 -0
  102. package/dist/selector-based-event-handler.js.map +1 -0
  103. package/dist/simple-composite-application.d.ts +15 -0
  104. package/dist/simple-composite-application.d.ts.map +1 -0
  105. package/dist/simple-composite-application.js +61 -0
  106. package/dist/simple-composite-application.js.map +1 -0
  107. package/dist/test/expectations.d.ts +10 -0
  108. package/dist/test/expectations.d.ts.map +1 -0
  109. package/dist/test/expectations.js +33 -0
  110. package/dist/test/expectations.js.map +1 -0
  111. package/dist/test/fixtures/index.d.ts +24 -0
  112. package/dist/test/fixtures/index.d.ts.map +1 -0
  113. package/dist/test/fixtures/index.js +40 -0
  114. package/dist/test/fixtures/index.js.map +1 -0
  115. package/dist/test/fixtures/interceptor-test-helpers.d.ts +34 -0
  116. package/dist/test/fixtures/interceptor-test-helpers.d.ts.map +1 -0
  117. package/dist/test/fixtures/interceptor-test-helpers.js +59 -0
  118. package/dist/test/fixtures/interceptor-test-helpers.js.map +1 -0
  119. package/dist/test/index.d.ts +3 -0
  120. package/dist/test/index.d.ts.map +1 -0
  121. package/dist/test/index.js +19 -0
  122. package/dist/test/index.js.map +1 -0
  123. package/package.json +64 -0
@@ -0,0 +1,11 @@
1
+ import { Message } from "@hexaijs/core";
2
+ export interface MessageTrace {
3
+ id: string;
4
+ type: string;
5
+ }
6
+ export declare function asTrace(message: Message): MessageTrace;
7
+ export declare function causationOf(message: Message): MessageTrace | undefined;
8
+ export declare function setCausationOf<T extends Message>(message: T, causation: MessageTrace): T;
9
+ export declare function correlationOf(message: Message): MessageTrace | undefined;
10
+ export declare function setCorrelationOf<T extends Message>(message: T, correlation: MessageTrace): T;
11
+ //# sourceMappingURL=messaging-support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging-support.d.ts","sourceRoot":"","sources":["../src/messaging-support.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAKtD;AAGD,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAMtE;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,EAC5C,OAAO,EAAE,CAAC,EACV,SAAS,EAAE,YAAY,GACxB,CAAC,CAIH;AAGD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAMxE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,OAAO,EAC9C,OAAO,EAAE,CAAC,EACV,WAAW,EAAE,YAAY,GAC1B,CAAC,CAIH"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.asTrace = asTrace;
4
+ exports.causationOf = causationOf;
5
+ exports.setCausationOf = setCausationOf;
6
+ exports.correlationOf = correlationOf;
7
+ exports.setCorrelationOf = setCorrelationOf;
8
+ function asTrace(message) {
9
+ return {
10
+ id: message.getMessageId(),
11
+ type: message.getMessageType(),
12
+ };
13
+ }
14
+ // Causation functions
15
+ function causationOf(message) {
16
+ const causationId = message.getHeader("causationId");
17
+ const causationType = message.getHeader("causationType");
18
+ if (causationId && causationType) {
19
+ return { id: causationId, type: causationType };
20
+ }
21
+ }
22
+ function setCausationOf(message, causation) {
23
+ return message
24
+ .withHeader("causationId", causation.id)
25
+ .withHeader("causationType", causation.type);
26
+ }
27
+ // Correlation functions
28
+ function correlationOf(message) {
29
+ const correlationId = message.getHeader("correlationId");
30
+ const correlationType = message.getHeader("correlationType");
31
+ if (correlationId && correlationType) {
32
+ return { id: correlationId, type: correlationType };
33
+ }
34
+ }
35
+ function setCorrelationOf(message, correlation) {
36
+ return message
37
+ .withHeader("correlationId", correlation.id)
38
+ .withHeader("correlationType", correlation.type);
39
+ }
40
+ //# sourceMappingURL=messaging-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging-support.js","sourceRoot":"","sources":["../src/messaging-support.ts"],"names":[],"mappings":";;AAOA,0BAKC;AAGD,kCAMC;AAED,wCAOC;AAGD,sCAMC;AAED,4CAOC;AAzCD,SAAgB,OAAO,CAAC,OAAgB;IACpC,OAAO;QACH,EAAE,EAAE,OAAO,CAAC,YAAY,EAAE;QAC1B,IAAI,EAAE,OAAO,CAAC,cAAc,EAAE;KACjC,CAAC;AACN,CAAC;AAED,sBAAsB;AACtB,SAAgB,WAAW,CAAC,OAAgB;IACxC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACzD,IAAI,WAAW,IAAI,aAAa,EAAE,CAAC;QAC/B,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACpD,CAAC;AACL,CAAC;AAED,SAAgB,cAAc,CAC1B,OAAU,EACV,SAAuB;IAEvB,OAAO,OAAO;SACT,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE,CAAC;SACvC,UAAU,CAAC,eAAe,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,wBAAwB;AACxB,SAAgB,aAAa,CAAC,OAAgB;IAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC7D,IAAI,aAAa,IAAI,eAAe,EAAE,CAAC;QACnC,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IACxD,CAAC;AACL,CAAC;AAED,SAAgB,gBAAgB,CAC5B,OAAU,EACV,WAAyB;IAEzB,OAAO,OAAO;SACT,UAAU,CAAC,eAAe,EAAE,WAAW,CAAC,EAAE,CAAC;SAC3C,UAAU,CAAC,iBAAiB,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Query } from "./query";
2
+ export interface QueryHandler<I extends Query = Query, O = any, Ctx = any> {
3
+ execute(query: I, ctx?: Ctx): Promise<O>;
4
+ }
5
+ //# sourceMappingURL=query-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-handler.d.ts","sourceRoot":"","sources":["../src/query-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,MAAM,WAAW,YAAY,CACzB,CAAC,SAAS,KAAK,GAAG,KAAK,EACvB,CAAC,GAAG,GAAG,EACP,GAAG,GAAG,GAAG;IAET,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5C"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=query-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-handler.js","sourceRoot":"","sources":["../src/query-handler.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { Message } from "@hexaijs/core";
2
+ export declare class Query<P = any, SC = any> extends Message<P> {
3
+ static getIntent(): string;
4
+ private securityContext?;
5
+ constructor(payload: P, headers?: Record<string, unknown>, securityContext?: SC);
6
+ withHeader(field: string, value: unknown): this;
7
+ protected clone(): this;
8
+ protected cloneWithHeaders(headers: Record<string, unknown>): this;
9
+ getSecurityContext(): SC;
10
+ withSecurityContext(securityContext: SC): this;
11
+ }
12
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,qBAAa,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;WACpC,SAAS,IAAI,MAAM;IAInC,OAAO,CAAC,eAAe,CAAC,CAAK;gBAGzB,OAAO,EAAE,CAAC,EACV,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,eAAe,CAAC,EAAE,EAAE;IAMR,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAK/D,SAAS,CAAC,KAAK,IAAI,IAAI;IAMvB,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAW3D,kBAAkB,IAAI,EAAE;IAQxB,mBAAmB,CAAC,eAAe,EAAE,EAAE,GAAG,IAAI;CAKxD"}
package/dist/query.js ADDED
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Query = void 0;
4
+ const core_1 = require("@hexaijs/core");
5
+ class Query extends core_1.Message {
6
+ static getIntent() {
7
+ return "query";
8
+ }
9
+ securityContext;
10
+ constructor(payload, headers = {}, securityContext) {
11
+ super(payload, headers);
12
+ this.securityContext = securityContext;
13
+ }
14
+ withHeader(field, value) {
15
+ const newHeaders = { ...this.getHeaders(), [field]: value };
16
+ return this.cloneWithHeaders(newHeaders);
17
+ }
18
+ clone() {
19
+ const cloned = Object.create(Object.getPrototypeOf(this));
20
+ Object.assign(cloned, this);
21
+ return cloned;
22
+ }
23
+ cloneWithHeaders(headers) {
24
+ const cloned = this.clone();
25
+ // Bypass frozen headers from parent Message class
26
+ Object.defineProperty(cloned, "headers", {
27
+ value: Object.freeze(headers),
28
+ writable: false,
29
+ configurable: true,
30
+ });
31
+ return cloned;
32
+ }
33
+ getSecurityContext() {
34
+ if (!this.securityContext) {
35
+ throw new Error("security context is not set");
36
+ }
37
+ return this.securityContext;
38
+ }
39
+ withSecurityContext(securityContext) {
40
+ const cloned = this.clone();
41
+ cloned.securityContext = securityContext;
42
+ return cloned;
43
+ }
44
+ }
45
+ exports.Query = Query;
46
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":";;;AAAA,wCAAwC;AAExC,MAAa,KAAyB,SAAQ,cAAU;IACpD,MAAM,CAAU,SAAS;QACrB,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,eAAe,CAAM;IAE7B,YACI,OAAU,EACV,UAAmC,EAAE,EACrC,eAAoB;QAEpB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IAC3C,CAAC;IAEe,UAAU,CAAC,KAAa,EAAE,KAAc;QACpD,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAES,KAAK;QACX,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC;IAClB,CAAC;IAES,gBAAgB,CAAC,OAAgC;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,kDAAkD;QAClD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE;YACrC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAC7B,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,kBAAkB;QACrB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,IAAI,CAAC,eAAgB,CAAC;IACjC,CAAC;IAEM,mBAAmB,CAAC,eAAmB;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,CAAC,eAAe,GAAG,eAAe,CAAC;QACzC,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAnDD,sBAmDC"}
@@ -0,0 +1,3 @@
1
+ export * from "./command";
2
+ export * from "./query";
3
+ //# sourceMappingURL=request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./command"), exports);
18
+ __exportStar(require("./query"), exports);
19
+ //# sourceMappingURL=request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,0CAAwB"}
@@ -0,0 +1,18 @@
1
+ export declare class SuccessResult<R> {
2
+ readonly data: R;
3
+ readonly isSuccess = true;
4
+ readonly isError = false;
5
+ constructor(data: R);
6
+ getOrThrow(): R;
7
+ }
8
+ export declare class ErrorResult<E extends Error = Error> {
9
+ readonly error: E;
10
+ readonly isSuccess = false;
11
+ readonly isError = true;
12
+ constructor(error: E);
13
+ getOrThrow(): never;
14
+ }
15
+ export type Result<R, E extends Error = Error> = (SuccessResult<R> | ErrorResult<E>) & {
16
+ getOrThrow(): R;
17
+ };
18
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAa,CAAC,CAAC;aAII,IAAI,EAAE,CAAC;IAHnC,SAAgB,SAAS,QAAQ;IACjC,SAAgB,OAAO,SAAS;gBAEJ,IAAI,EAAE,CAAC;IAEnC,UAAU,IAAI,CAAC;CAGlB;AAED,qBAAa,WAAW,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK;aAIhB,KAAK,EAAE,CAAC;IAHpC,SAAgB,SAAS,SAAS;IAClC,SAAgB,OAAO,QAAQ;gBAEH,KAAK,EAAE,CAAC;IAEpC,UAAU,IAAI,KAAK;CAGtB;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI,CAC3C,aAAa,CAAC,CAAC,CAAC,GAChB,WAAW,CAAC,CAAC,CAAC,CACnB,GAAG;IACA,UAAU,IAAI,CAAC,CAAC;CACnB,CAAC"}
package/dist/result.js ADDED
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ErrorResult = exports.SuccessResult = void 0;
4
+ class SuccessResult {
5
+ data;
6
+ isSuccess = true;
7
+ isError = false;
8
+ constructor(data) {
9
+ this.data = data;
10
+ }
11
+ getOrThrow() {
12
+ return this.data;
13
+ }
14
+ }
15
+ exports.SuccessResult = SuccessResult;
16
+ class ErrorResult {
17
+ error;
18
+ isSuccess = false;
19
+ isError = true;
20
+ constructor(error) {
21
+ this.error = error;
22
+ }
23
+ getOrThrow() {
24
+ throw this.error;
25
+ }
26
+ }
27
+ exports.ErrorResult = ErrorResult;
28
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;IAIM;IAHZ,SAAS,GAAG,IAAI,CAAC;IACjB,OAAO,GAAG,KAAK,CAAC;IAEhC,YAA4B,IAAO;QAAP,SAAI,GAAJ,IAAI,CAAG;IAAG,CAAC;IAEvC,UAAU;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;CACJ;AATD,sCASC;AAED,MAAa,WAAW;IAIQ;IAHZ,SAAS,GAAG,KAAK,CAAC;IAClB,OAAO,GAAG,IAAI,CAAC;IAE/B,YAA4B,KAAQ;QAAR,UAAK,GAAL,KAAK,CAAG;IAAG,CAAC;IAExC,UAAU;QACN,MAAM,IAAI,CAAC,KAAK,CAAC;IACrB,CAAC;CACJ;AATD,kCASC"}
@@ -0,0 +1,29 @@
1
+ import { Message } from "@hexaijs/core";
2
+ import { EventHandler } from "./event-handler";
3
+ interface Selector {
4
+ method: string;
5
+ predicate(event: Message): boolean;
6
+ }
7
+ export declare function When(predicate: (event: Message) => boolean): MethodDecorator;
8
+ export declare function eventTypeMatches(type: string | string[] | RegExp): (event: Message) => boolean;
9
+ /**
10
+ * Base class for event handlers that use @When decorator for routing.
11
+ *
12
+ * Implements EventHandler interface with selector-based event routing.
13
+ * Uses @When decorator to register predicates that determine which method handles each event.
14
+ *
15
+ * @typeParam E - The event type (extends Message)
16
+ * @typeParam Ctx - The application context type
17
+ */
18
+ export declare class SelectorBasedEventHandler<E extends Message = Message, Ctx = any> implements EventHandler<E, Ctx> {
19
+ protected static selectors: Selector[];
20
+ static registerSelector(selector: Selector): void;
21
+ static canHandleStatic(event: Message): boolean;
22
+ canHandle(message: Message): boolean;
23
+ protected getSelectors(): Selector[];
24
+ protected selectHandlingMethod(event: E): keyof this | null;
25
+ handle(event: E, ctx: Ctx): Promise<void>;
26
+ protected doHandle(method: keyof this, event: E, ctx: Ctx): Promise<void>;
27
+ }
28
+ export {};
29
+ //# sourceMappingURL=selector-based-event-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-based-event-handler.d.ts","sourceRoot":"","sources":["../src/selector-based-event-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,UAAU,QAAQ;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;CACtC;AAED,wBAAgB,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,GAAG,eAAe,CAO5E;AAED,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GACjC,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAQ7B;AAED;;;;;;;;GAQG;AACH,qBAAa,yBAAyB,CAClC,CAAC,SAAS,OAAO,GAAG,OAAO,EAC3B,GAAG,GAAG,GAAG,CACX,YAAW,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC;IAC7B,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC;WAEzB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;WAc1C,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAQ/C,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAM3C,SAAS,CAAC,YAAY,IAAI,QAAQ,EAAE;IAIpC,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,IAAI,GAAG,IAAI;IAkB9C,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;cAUtC,QAAQ,CACpB,MAAM,EAAE,MAAM,IAAI,EAClB,KAAK,EAAE,CAAC,EACR,GAAG,EAAE,GAAG,GACT,OAAO,CAAC,IAAI,CAAC;CAInB"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelectorBasedEventHandler = void 0;
4
+ exports.When = When;
5
+ exports.eventTypeMatches = eventTypeMatches;
6
+ function When(predicate) {
7
+ return function (target, propertyKey) {
8
+ target.constructor.registerSelector({
9
+ method: propertyKey.toString(),
10
+ predicate,
11
+ });
12
+ };
13
+ }
14
+ function eventTypeMatches(type) {
15
+ if (Array.isArray(type)) {
16
+ return (event) => type.includes(event.getMessageType());
17
+ }
18
+ else if (type instanceof RegExp) {
19
+ return (event) => type.test(event.getMessageType());
20
+ }
21
+ return (event) => event.getMessageType() === type;
22
+ }
23
+ /**
24
+ * Base class for event handlers that use @When decorator for routing.
25
+ *
26
+ * Implements EventHandler interface with selector-based event routing.
27
+ * Uses @When decorator to register predicates that determine which method handles each event.
28
+ *
29
+ * @typeParam E - The event type (extends Message)
30
+ * @typeParam Ctx - The application context type
31
+ */
32
+ class SelectorBasedEventHandler {
33
+ static selectors;
34
+ static registerSelector(selector) {
35
+ if (this === SelectorBasedEventHandler) {
36
+ throw new Error("cannot register selector to SelectorBasedEventHandler");
37
+ }
38
+ if (!this.selectors) {
39
+ this.selectors = [];
40
+ }
41
+ this.selectors.push(selector);
42
+ }
43
+ static canHandleStatic(event) {
44
+ if (!this.selectors) {
45
+ return false;
46
+ }
47
+ return this.selectors.some(({ predicate }) => predicate(event));
48
+ }
49
+ canHandle(message) {
50
+ return this.constructor.canHandleStatic(message);
51
+ }
52
+ getSelectors() {
53
+ return this.constructor.selectors || [];
54
+ }
55
+ selectHandlingMethod(event) {
56
+ const methods = this.getSelectors().filter(({ predicate }) => predicate(event));
57
+ if (methods.length > 1) {
58
+ throw new Error(`Multiple handling routines selected for event '${event.getMessageType()}'`);
59
+ }
60
+ if (methods.length === 0) {
61
+ return null;
62
+ }
63
+ return methods[0].method;
64
+ }
65
+ async handle(event, ctx) {
66
+ const handlingMethod = this.selectHandlingMethod(event);
67
+ if (handlingMethod === null) {
68
+ return;
69
+ }
70
+ await this.doHandle(handlingMethod, event, ctx);
71
+ }
72
+ async doHandle(method, event, ctx) {
73
+ const handler = this[method];
74
+ await handler.call(this, event, ctx);
75
+ }
76
+ }
77
+ exports.SelectorBasedEventHandler = SelectorBasedEventHandler;
78
+ //# sourceMappingURL=selector-based-event-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-based-event-handler.js","sourceRoot":"","sources":["../src/selector-based-event-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Message, UnitOfWork } from "@hexaijs/core";
2
+ import { Application, EventHandlingResult, Result } from "./application";
3
+ import { Command } from "./command";
4
+ import { Query } from "./query";
5
+ export declare class SimpleCompositeApplication implements Application {
6
+ private applicationByCommandPrefix;
7
+ private unitOfWork?;
8
+ constructor(applicationByCommandPrefix: Record<string, Application>, unitOfWork?: UnitOfWork);
9
+ setUnitOfWork(unitOfWork: UnitOfWork): void;
10
+ executeCommand<T = unknown>(command: Command): Promise<Result<T>>;
11
+ executeQuery<T = unknown>(query: Query): Promise<Result<T>>;
12
+ private findAppropriateApplication;
13
+ handleEvent(event: Message): Promise<Result<EventHandlingResult>>;
14
+ }
15
+ //# sourceMappingURL=simple-composite-application.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-composite-application.d.ts","sourceRoot":"","sources":["../src/simple-composite-application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACH,WAAW,EAEX,mBAAmB,EACnB,MAAM,EAET,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,qBAAa,0BAA2B,YAAW,WAAW;IAItD,OAAO,CAAC,0BAA0B;IAHtC,OAAO,CAAC,UAAU,CAAC,CAAa;gBAGpB,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAC/D,UAAU,CAAC,EAAE,UAAU;IAK3B,aAAa,CAAC,UAAU,EAAE,UAAU;IAIvB,cAAc,CAAC,CAAC,GAAG,OAAO,EACnC,OAAO,EAAE,OAAO,GACjB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAcR,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAUxE,OAAO,CAAC,0BAA0B;IAWrB,WAAW,CACpB,KAAK,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;CAyB1C"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SimpleCompositeApplication = void 0;
4
+ const application_1 = require("./application");
5
+ const error_1 = require("./error");
6
+ class SimpleCompositeApplication {
7
+ applicationByCommandPrefix;
8
+ unitOfWork;
9
+ constructor(applicationByCommandPrefix, unitOfWork) {
10
+ this.applicationByCommandPrefix = applicationByCommandPrefix;
11
+ this.unitOfWork = unitOfWork;
12
+ }
13
+ setUnitOfWork(unitOfWork) {
14
+ this.unitOfWork = unitOfWork;
15
+ }
16
+ async executeCommand(command) {
17
+ const handler = this.findAppropriateApplication(command.getMessageType());
18
+ if (handler) {
19
+ return handler.executeCommand(command);
20
+ }
21
+ return new application_1.ErrorResult(error_1.ApplicationErrorFactory.handlerNotFound(command));
22
+ }
23
+ async executeQuery(query) {
24
+ const handler = this.findAppropriateApplication(query.getMessageType());
25
+ if (handler) {
26
+ return handler.executeQuery(query);
27
+ }
28
+ return new application_1.ErrorResult(error_1.ApplicationErrorFactory.handlerNotFound(query));
29
+ }
30
+ findAppropriateApplication(messageType) {
31
+ const prefixes = Object.keys(this.applicationByCommandPrefix);
32
+ for (const prefix of prefixes) {
33
+ if (messageType.startsWith(prefix)) {
34
+ return this.applicationByCommandPrefix[prefix];
35
+ }
36
+ }
37
+ }
38
+ async handleEvent(event) {
39
+ if (!this.unitOfWork) {
40
+ throw new Error("Unit of work not set for CompositeApplication. Set it using setUnitOfWork() method.");
41
+ }
42
+ const apps = Object.values(this.applicationByCommandPrefix);
43
+ const throwIfError = async (app) => {
44
+ const result = await app.handleEvent(event);
45
+ if (result.isError) {
46
+ throw result;
47
+ }
48
+ };
49
+ return await this.unitOfWork.wrap(async () => {
50
+ try {
51
+ await Promise.all(apps.map((app) => throwIfError(app)));
52
+ }
53
+ catch (e) {
54
+ return e;
55
+ }
56
+ return new application_1.SuccessResult(null);
57
+ });
58
+ }
59
+ }
60
+ exports.SimpleCompositeApplication = SimpleCompositeApplication;
61
+ //# sourceMappingURL=simple-composite-application.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-composite-application.js","sourceRoot":"","sources":["../src/simple-composite-application.ts"],"names":[],"mappings":";;;AACA,+CAMuB;AACvB,mCAAkD;AAIlD,MAAa,0BAA0B;IAIvB;IAHJ,UAAU,CAAc;IAEhC,YACY,0BAAuD,EAC/D,UAAuB;QADf,+BAA0B,GAA1B,0BAA0B,CAA6B;QAG/D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAED,aAAa,CAAC,UAAsB;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,cAAc,CACvB,OAAgB;QAEhB,MAAM,OAAO,GAAG,IAAI,CAAC,0BAA0B,CAC3C,OAAO,CAAC,cAAc,EAAE,CAC3B,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,IAAI,yBAAW,CAClB,+BAAuB,CAAC,eAAe,CAAC,OAAO,CAAC,CACnD,CAAC;IACN,CAAC;IAEM,KAAK,CAAC,YAAY,CAAc,KAAY;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;QAExE,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,IAAI,yBAAW,CAAC,+BAAuB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,CAAC;IAEO,0BAA0B,CAC9B,WAAmB;QAEnB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC9D,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;YACnD,CAAC;QACL,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,WAAW,CACpB,KAAc;QAEd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACX,qFAAqF,CACxF,CAAC;QACN,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,KAAK,EAAE,GAAgB,EAAE,EAAE;YAC5C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,MAAM,CAAC;YACjB,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACzC,IAAI,CAAC;gBACD,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAgB,CAAC;YAC5B,CAAC;YAED,OAAO,IAAI,2BAAa,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AA9ED,gEA8EC"}
@@ -0,0 +1,10 @@
1
+ import { ErrorResult, SuccessResult } from "../application";
2
+ import { ApplicationError } from "../error";
3
+ export declare function expectSuccessResult<T = any>(result: unknown): asserts result is SuccessResult<T>;
4
+ export declare function expectErrorResult(result: unknown): asserts result is ErrorResult<ApplicationError>;
5
+ export declare function expectApplicationError(result: unknown, { message, cause, }?: Partial<{
6
+ message: string;
7
+ cause: Error;
8
+ }>): void;
9
+ export declare function expectExecutionTimeLessThan(fn: () => Promise<any>, timeMs: number): Promise<void>;
10
+ //# sourceMappingURL=expectations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expectations.d.ts","sourceRoot":"","sources":["../../src/test/expectations.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,wBAAgB,mBAAmB,CAAC,CAAC,GAAG,GAAG,EACvC,MAAM,EAAE,OAAO,GAChB,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,CAEpC;AAED,wBAAgB,iBAAiB,CAC7B,MAAM,EAAE,OAAO,GAChB,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAEjD;AAED,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,OAAO,EACf,EACI,OAAO,EACP,KAAK,GACR,GAAE,OAAO,CAAC;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;CAChB,CAAM,QAaV;AAED,wBAAsB,2BAA2B,CAC7C,EAAE,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EACtB,MAAM,EAAE,MAAM,iBAOjB"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.expectSuccessResult = expectSuccessResult;
4
+ exports.expectErrorResult = expectErrorResult;
5
+ exports.expectApplicationError = expectApplicationError;
6
+ exports.expectExecutionTimeLessThan = expectExecutionTimeLessThan;
7
+ const vitest_1 = require("vitest");
8
+ const application_1 = require("../application");
9
+ const error_1 = require("../error");
10
+ function expectSuccessResult(result) {
11
+ (0, vitest_1.expect)(result).toBeInstanceOf(application_1.SuccessResult);
12
+ }
13
+ function expectErrorResult(result) {
14
+ (0, vitest_1.expect)(result).toBeInstanceOf(application_1.ErrorResult);
15
+ }
16
+ function expectApplicationError(result, { message, cause, } = {}) {
17
+ expectErrorResult(result);
18
+ (0, vitest_1.expect)(result.isError).toBe(true);
19
+ (0, vitest_1.expect)(result.error).toBeInstanceOf(error_1.ApplicationError);
20
+ if (message) {
21
+ (0, vitest_1.expect)(result.error.message).toBe(message);
22
+ }
23
+ if (cause) {
24
+ (0, vitest_1.expect)(result.error.cause).toBe(cause);
25
+ }
26
+ }
27
+ async function expectExecutionTimeLessThan(fn, timeMs) {
28
+ const startTime = Date.now();
29
+ await fn();
30
+ const endTime = Date.now();
31
+ (0, vitest_1.expect)(endTime - startTime).toBeLessThan(timeMs);
32
+ }
33
+ //# sourceMappingURL=expectations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expectations.js","sourceRoot":"","sources":["../../src/test/expectations.ts"],"names":[],"mappings":";;AAKA,kDAIC;AAED,8CAIC;AAED,wDAqBC;AAED,kEASC;AAjDD,mCAAgC;AAEhC,+CAA2D;AAC3D,mCAA2C;AAE3C,SAAgB,mBAAmB,CAC/B,MAAe;IAEf,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,cAAc,CAAC,2BAAa,CAAC,CAAC;AACjD,CAAC;AAED,SAAgB,iBAAiB,CAC7B,MAAe;IAEf,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,cAAc,CAAC,yBAAW,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,sBAAsB,CAClC,MAAe,EACf,EACI,OAAO,EACP,KAAK,MAIJ,EAAE;IAEP,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,IAAA,eAAM,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,wBAAgB,CAAC,CAAC;IAEtD,IAAI,OAAO,EAAE,CAAC;QACV,IAAA,eAAM,EAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACR,IAAA,eAAM,EAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,2BAA2B,CAC7C,EAAsB,EACtB,MAAc;IAEd,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,EAAE,EAAE,CAAC;IACX,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,IAAA,eAAM,EAAC,OAAO,GAAG,SAAS,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,24 @@
1
+ export * from "./interceptor-test-helpers";
2
+ import { Command } from "../../command";
3
+ import { Query } from "../../query";
4
+ import { Message } from "@hexaijs/core";
5
+ export declare class DummyCommand extends Command<null, {
6
+ role: string;
7
+ }> {
8
+ constructor(sc?: {
9
+ role: string;
10
+ });
11
+ }
12
+ export declare class DummyQuery extends Query<{
13
+ id: string;
14
+ }, {
15
+ role: string;
16
+ }> {
17
+ constructor(id?: string, sc?: {
18
+ role: string;
19
+ });
20
+ }
21
+ export declare class DummyEvent extends Message<null> {
22
+ constructor();
23
+ }
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/test/fixtures/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,qBAAa,YAAa,SAAQ,OAAO,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;gBACjD,EAAE,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;CAGpC;AAED,qBAAa,UAAW,SAAQ,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;gBACvD,EAAE,GAAE,MAAkB,EAAE,EAAE,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;CAG5D;AAED,qBAAa,UAAW,SAAQ,OAAO,CAAC,IAAI,CAAC;;CAI5C"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.DummyEvent = exports.DummyQuery = exports.DummyCommand = void 0;
18
+ __exportStar(require("./interceptor-test-helpers"), exports);
19
+ const command_1 = require("../../command");
20
+ const query_1 = require("../../query");
21
+ const core_1 = require("@hexaijs/core");
22
+ class DummyCommand extends command_1.Command {
23
+ constructor(sc) {
24
+ super(null, sc);
25
+ }
26
+ }
27
+ exports.DummyCommand = DummyCommand;
28
+ class DummyQuery extends query_1.Query {
29
+ constructor(id = "test-id", sc) {
30
+ super({ id }, {}, sc);
31
+ }
32
+ }
33
+ exports.DummyQuery = DummyQuery;
34
+ class DummyEvent extends core_1.Message {
35
+ constructor() {
36
+ super(null);
37
+ }
38
+ }
39
+ exports.DummyEvent = DummyEvent;
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test/fixtures/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6DAA2C;AAE3C,uCAAoC;AACpC,mCAAgC;AAChC,wCAAwC;AAExC,MAAa,YAAa,SAAQ,iBAA+B;IAC7D,YAAY,EAAqB;QAC7B,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpB,CAAC;CACJ;AAJD,oCAIC;AAED,MAAa,UAAW,SAAQ,aAAuC;IACnE,YAAY,KAAa,SAAS,EAAE,EAAqB;QACrD,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC;CACJ;AAJD,gCAIC;AAED,MAAa,UAAW,SAAQ,cAAa;IACzC;QACI,KAAK,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;CACJ;AAJD,gCAIC"}
@@ -0,0 +1,34 @@
1
+ import { ApplicationBuilder } from "../../application";
2
+ import { AbstractApplicationContext } from "../../abstract-application-context";
3
+ import { CommandInterceptor, EventInterceptor } from "../../interceptor";
4
+ /**
5
+ * Shared test helpers for interceptor tests
6
+ */
7
+ export declare class DummyApplicationContext extends AbstractApplicationContext {
8
+ }
9
+ /**
10
+ * Creates a mock command handler that returns a SuccessResult
11
+ */
12
+ export declare function createMockCommandHandler(data?: any): {
13
+ execute: import("vitest").Mock<(...args: any[]) => any>;
14
+ };
15
+ /**
16
+ * Creates a mock event handler that returns void
17
+ */
18
+ export declare function createMockEventHandler(): {
19
+ canHandle: import("vitest").Mock<(...args: any[]) => any>;
20
+ handle: import("vitest").Mock<(...args: any[]) => any>;
21
+ };
22
+ /**
23
+ * Creates a basic application builder with DummyApplicationContext pre-configured
24
+ */
25
+ export declare function createApplicationBuilder(): ApplicationBuilder;
26
+ /**
27
+ * Creates a command interceptor that tracks execution by appending an ID to an array
28
+ */
29
+ export declare function createCommandExecutionTrackingInterceptor(executionOrder: number[], id: number): CommandInterceptor;
30
+ /**
31
+ * Creates an event interceptor that tracks execution by appending an ID to an array
32
+ */
33
+ export declare function createEventExecutionTrackingInterceptor(executionOrder: number[], id: number): EventInterceptor;
34
+ //# sourceMappingURL=interceptor-test-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interceptor-test-helpers.d.ts","sourceRoot":"","sources":["../../../src/test/fixtures/interceptor-test-helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAiB,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAErE;;GAEG;AAEH,qBAAa,uBAAwB,SAAQ,0BAA0B;CAAG;AAE1E;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,GAAE,GAAoB;;EAIlE;AAED;;GAEG;AACH,wBAAgB,sBAAsB;;;EAKrC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,uBAIvC;AAED;;GAEG;AACH,wBAAgB,yCAAyC,CACrD,cAAc,EAAE,MAAM,EAAE,EACxB,EAAE,EAAE,MAAM,GACX,kBAAkB,CAKpB;AAED;;GAEG;AACH,wBAAgB,uCAAuC,CACnD,cAAc,EAAE,MAAM,EAAE,EACxB,EAAE,EAAE,MAAM,GACX,gBAAgB,CAKlB"}