@hg-ts/cqrs 0.1.23

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 (195) hide show
  1. package/.eslintcache +1 -0
  2. package/.turbo/turbo-build.log +2 -0
  3. package/.turbo/turbo-lint$colon$ts.log +2 -0
  4. package/.turbo/turbo-test.log +30 -0
  5. package/README.md +1 -0
  6. package/dist/abstracts/base.command-handler.d.ts +6 -0
  7. package/dist/abstracts/base.command-handler.d.ts.map +1 -0
  8. package/dist/abstracts/base.command-handler.js +7 -0
  9. package/dist/abstracts/base.command-handler.js.map +1 -0
  10. package/dist/abstracts/base.command.d.ts +6 -0
  11. package/dist/abstracts/base.command.d.ts.map +1 -0
  12. package/dist/abstracts/base.command.js +9 -0
  13. package/dist/abstracts/base.command.js.map +1 -0
  14. package/dist/abstracts/base.executor.d.ts +11 -0
  15. package/dist/abstracts/base.executor.d.ts.map +1 -0
  16. package/dist/abstracts/base.executor.js +22 -0
  17. package/dist/abstracts/base.executor.js.map +1 -0
  18. package/dist/abstracts/base.executor.test-suite.d.ts +17 -0
  19. package/dist/abstracts/base.executor.test-suite.d.ts.map +1 -0
  20. package/dist/abstracts/base.executor.test-suite.js +60 -0
  21. package/dist/abstracts/base.executor.test-suite.js.map +1 -0
  22. package/dist/abstracts/base.query-handler.d.ts +6 -0
  23. package/dist/abstracts/base.query-handler.d.ts.map +1 -0
  24. package/dist/abstracts/base.query-handler.js +7 -0
  25. package/dist/abstracts/base.query-handler.js.map +1 -0
  26. package/dist/abstracts/base.query.d.ts +6 -0
  27. package/dist/abstracts/base.query.d.ts.map +1 -0
  28. package/dist/abstracts/base.query.js +9 -0
  29. package/dist/abstracts/base.query.js.map +1 -0
  30. package/dist/abstracts/index.d.ts +8 -0
  31. package/dist/abstracts/index.d.ts.map +1 -0
  32. package/dist/abstracts/index.js +11 -0
  33. package/dist/abstracts/index.js.map +1 -0
  34. package/dist/command/command.executor.d.ts +6 -0
  35. package/dist/command/command.executor.d.ts.map +1 -0
  36. package/dist/command/command.executor.js +14 -0
  37. package/dist/command/command.executor.js.map +1 -0
  38. package/dist/command/index.d.ts +2 -0
  39. package/dist/command/index.d.ts.map +1 -0
  40. package/dist/command/index.js +5 -0
  41. package/dist/command/index.js.map +1 -0
  42. package/dist/command/query.executor.d.ts +6 -0
  43. package/dist/command/query.executor.d.ts.map +1 -0
  44. package/dist/command/query.executor.js +14 -0
  45. package/dist/command/query.executor.js.map +1 -0
  46. package/dist/cqrs.module.d.ts +12 -0
  47. package/dist/cqrs.module.d.ts.map +1 -0
  48. package/dist/cqrs.module.js +96 -0
  49. package/dist/cqrs.module.js.map +1 -0
  50. package/dist/decorators/command-handler.decorator.d.ts +4 -0
  51. package/dist/decorators/command-handler.decorator.d.ts.map +1 -0
  52. package/dist/decorators/command-handler.decorator.js +11 -0
  53. package/dist/decorators/command-handler.decorator.js.map +1 -0
  54. package/dist/decorators/index.d.ts +4 -0
  55. package/dist/decorators/index.d.ts.map +1 -0
  56. package/dist/decorators/index.js +7 -0
  57. package/dist/decorators/index.js.map +1 -0
  58. package/dist/decorators/query-handler.decorator.d.ts +4 -0
  59. package/dist/decorators/query-handler.decorator.d.ts.map +1 -0
  60. package/dist/decorators/query-handler.decorator.js +11 -0
  61. package/dist/decorators/query-handler.decorator.js.map +1 -0
  62. package/dist/exceptions/handler-already-added.exception.d.ts +6 -0
  63. package/dist/exceptions/handler-already-added.exception.d.ts.map +1 -0
  64. package/dist/exceptions/handler-already-added.exception.js +11 -0
  65. package/dist/exceptions/handler-already-added.exception.js.map +1 -0
  66. package/dist/exceptions/handler-not-found.exception.d.ts +6 -0
  67. package/dist/exceptions/handler-not-found.exception.d.ts.map +1 -0
  68. package/dist/exceptions/handler-not-found.exception.js +11 -0
  69. package/dist/exceptions/handler-not-found.exception.js.map +1 -0
  70. package/dist/exceptions/index.d.ts +3 -0
  71. package/dist/exceptions/index.d.ts.map +1 -0
  72. package/dist/exceptions/index.js +6 -0
  73. package/dist/exceptions/index.js.map +1 -0
  74. package/dist/executors/command.executor.d.ts +6 -0
  75. package/dist/executors/command.executor.d.ts.map +1 -0
  76. package/dist/executors/command.executor.js +14 -0
  77. package/dist/executors/command.executor.js.map +1 -0
  78. package/dist/executors/index.d.ts +3 -0
  79. package/dist/executors/index.d.ts.map +1 -0
  80. package/dist/executors/index.js +6 -0
  81. package/dist/executors/index.js.map +1 -0
  82. package/dist/executors/query.executor.d.ts +6 -0
  83. package/dist/executors/query.executor.d.ts.map +1 -0
  84. package/dist/executors/query.executor.js +14 -0
  85. package/dist/executors/query.executor.js.map +1 -0
  86. package/dist/index.d.ts +6 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +17 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/tests/command-executor.mock.d.ts +5 -0
  91. package/dist/tests/command-executor.mock.d.ts.map +1 -0
  92. package/dist/tests/command-executor.mock.js +13 -0
  93. package/dist/tests/command-executor.mock.js.map +1 -0
  94. package/dist/tests/command-executor.test.d.ts +9 -0
  95. package/dist/tests/command-executor.test.d.ts.map +1 -0
  96. package/dist/tests/command-executor.test.js +28 -0
  97. package/dist/tests/command-executor.test.js.map +1 -0
  98. package/dist/tests/commands/index.d.ts +3 -0
  99. package/dist/tests/commands/index.d.ts.map +1 -0
  100. package/dist/tests/commands/index.js +6 -0
  101. package/dist/tests/commands/index.js.map +1 -0
  102. package/dist/tests/commands/test.command.d.ts +6 -0
  103. package/dist/tests/commands/test.command.d.ts.map +1 -0
  104. package/dist/tests/commands/test.command.js +13 -0
  105. package/dist/tests/commands/test.command.js.map +1 -0
  106. package/dist/tests/commands/unknown.command.d.ts +6 -0
  107. package/dist/tests/commands/unknown.command.d.ts.map +1 -0
  108. package/dist/tests/commands/unknown.command.js +13 -0
  109. package/dist/tests/commands/unknown.command.js.map +1 -0
  110. package/dist/tests/cqrs-test.module.d.ts +3 -0
  111. package/dist/tests/cqrs-test.module.d.ts.map +1 -0
  112. package/dist/tests/cqrs-test.module.js +15 -0
  113. package/dist/tests/cqrs-test.module.js.map +1 -0
  114. package/dist/tests/cqrs.module.test.d.ts +13 -0
  115. package/dist/tests/cqrs.module.test.d.ts.map +1 -0
  116. package/dist/tests/cqrs.module.test.js +79 -0
  117. package/dist/tests/cqrs.module.test.js.map +1 -0
  118. package/dist/tests/queries/index.d.ts +3 -0
  119. package/dist/tests/queries/index.d.ts.map +1 -0
  120. package/dist/tests/queries/index.js +6 -0
  121. package/dist/tests/queries/index.js.map +1 -0
  122. package/dist/tests/queries/test.query.d.ts +6 -0
  123. package/dist/tests/queries/test.query.d.ts.map +1 -0
  124. package/dist/tests/queries/test.query.js +13 -0
  125. package/dist/tests/queries/test.query.js.map +1 -0
  126. package/dist/tests/queries/unknown.query.d.ts +6 -0
  127. package/dist/tests/queries/unknown.query.d.ts.map +1 -0
  128. package/dist/tests/queries/unknown.query.js +13 -0
  129. package/dist/tests/queries/unknown.query.js.map +1 -0
  130. package/dist/tests/query-executor.test.d.ts +9 -0
  131. package/dist/tests/query-executor.test.d.ts.map +1 -0
  132. package/dist/tests/query-executor.test.js +28 -0
  133. package/dist/tests/query-executor.test.js.map +1 -0
  134. package/dist/tests/test-command.handler.d.ts +6 -0
  135. package/dist/tests/test-command.handler.d.ts.map +1 -0
  136. package/dist/tests/test-command.handler.js +21 -0
  137. package/dist/tests/test-command.handler.js.map +1 -0
  138. package/dist/tests/test-query.handler.d.ts +6 -0
  139. package/dist/tests/test-query.handler.d.ts.map +1 -0
  140. package/dist/tests/test-query.handler.js +21 -0
  141. package/dist/tests/test-query.handler.js.map +1 -0
  142. package/dist/tests/test.command.d.ts +6 -0
  143. package/dist/tests/test.command.d.ts.map +1 -0
  144. package/dist/tests/test.command.js +13 -0
  145. package/dist/tests/test.command.js.map +1 -0
  146. package/dist/tests/test.query.d.ts +6 -0
  147. package/dist/tests/test.query.d.ts.map +1 -0
  148. package/dist/tests/test.query.js +13 -0
  149. package/dist/tests/test.query.js.map +1 -0
  150. package/dist/tests/unknown.command.d.ts +6 -0
  151. package/dist/tests/unknown.command.d.ts.map +1 -0
  152. package/dist/tests/unknown.command.js +13 -0
  153. package/dist/tests/unknown.command.js.map +1 -0
  154. package/dist/tests/unknown.query.d.ts +6 -0
  155. package/dist/tests/unknown.query.d.ts.map +1 -0
  156. package/dist/tests/unknown.query.js +13 -0
  157. package/dist/tests/unknown.query.js.map +1 -0
  158. package/dist/types.d.ts +7 -0
  159. package/dist/types.d.ts.map +1 -0
  160. package/dist/types.js +3 -0
  161. package/dist/types.js.map +1 -0
  162. package/eslint.config.mjs +3 -0
  163. package/package.json +38 -0
  164. package/src/abstracts/base.command-handler.ts +6 -0
  165. package/src/abstracts/base.command.ts +5 -0
  166. package/src/abstracts/base.executor.test-suite.ts +64 -0
  167. package/src/abstracts/base.executor.ts +46 -0
  168. package/src/abstracts/base.query-handler.ts +6 -0
  169. package/src/abstracts/base.query.ts +5 -0
  170. package/src/abstracts/index.ts +7 -0
  171. package/src/cqrs.module.ts +120 -0
  172. package/src/decorators/command-handler.decorator.ts +14 -0
  173. package/src/decorators/index.ts +4 -0
  174. package/src/decorators/query-handler.decorator.ts +14 -0
  175. package/src/exceptions/handler-already-added.exception.ts +8 -0
  176. package/src/exceptions/handler-not-found.exception.ts +8 -0
  177. package/src/exceptions/index.ts +2 -0
  178. package/src/executors/command.executor.ts +18 -0
  179. package/src/executors/index.ts +2 -0
  180. package/src/executors/query.executor.ts +18 -0
  181. package/src/index.ts +10 -0
  182. package/src/tests/command-executor.test.ts +31 -0
  183. package/src/tests/commands/index.ts +2 -0
  184. package/src/tests/commands/test.command.ts +11 -0
  185. package/src/tests/commands/unknown.command.ts +11 -0
  186. package/src/tests/cqrs-test.module.ts +7 -0
  187. package/src/tests/cqrs.module.test.ts +73 -0
  188. package/src/tests/queries/index.ts +2 -0
  189. package/src/tests/queries/test.query.ts +11 -0
  190. package/src/tests/queries/unknown.query.ts +11 -0
  191. package/src/tests/query-executor.test.ts +30 -0
  192. package/src/tests/test-command.handler.ts +17 -0
  193. package/src/tests/test-query.handler.ts +18 -0
  194. package/src/types.ts +29 -0
  195. package/tsconfig.json +9 -0
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QueryExecutorTest = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const ioc_1 = require("@hg-ts/ioc");
6
+ const tests_1 = require("@hg-ts/tests");
7
+ const exceptions_1 = require("../exceptions");
8
+ const executors_1 = require("../executors");
9
+ const commands_1 = require("./commands");
10
+ const cqrs_test_module_1 = require("./cqrs-test.module");
11
+ const queries_1 = require("./queries");
12
+ let QueryExecutorTest = class QueryExecutorTest extends tests_1.Suite {
13
+ container;
14
+ commandExecutor;
15
+ queryExecutor;
16
+ async executorProvides() {
17
+ (0, tests_1.expect)(this.commandExecutor).toBeInstanceOf(executors_1.CommandExecutor);
18
+ (0, tests_1.expect)(this.queryExecutor).toBeInstanceOf(executors_1.QueryExecutor);
19
+ }
20
+ async commandSuccess() {
21
+ const value = String(Math.random());
22
+ const result = await this.commandExecutor.execute(new commands_1.TestCommand(value));
23
+ (0, tests_1.expect)(result).toBe(value);
24
+ }
25
+ async unknownCommand() {
26
+ await this.commandExecutor.execute(new commands_1.UnknownCommand(''));
27
+ }
28
+ async querySuccess() {
29
+ const value = String(Math.random());
30
+ const result = await this.queryExecutor.execute(new queries_1.TestQuery(value));
31
+ (0, tests_1.expect)(result).toBe(value);
32
+ }
33
+ async unknownQuery() {
34
+ await this.queryExecutor.execute(new queries_1.UnknownQuery(''));
35
+ }
36
+ async beforeEach() {
37
+ this.container = await ioc_1.TestContainer.create(cqrs_test_module_1.CqrsTestModule);
38
+ await this.container.init();
39
+ this.queryExecutor = this.container.get(executors_1.QueryExecutor);
40
+ this.commandExecutor = this.container.get(executors_1.CommandExecutor);
41
+ }
42
+ };
43
+ exports.QueryExecutorTest = QueryExecutorTest;
44
+ tslib_1.__decorate([
45
+ (0, tests_1.Test)(),
46
+ tslib_1.__metadata("design:type", Function),
47
+ tslib_1.__metadata("design:paramtypes", []),
48
+ tslib_1.__metadata("design:returntype", Promise)
49
+ ], QueryExecutorTest.prototype, "executorProvides", null);
50
+ tslib_1.__decorate([
51
+ (0, tests_1.Test)(),
52
+ tslib_1.__metadata("design:type", Function),
53
+ tslib_1.__metadata("design:paramtypes", []),
54
+ tslib_1.__metadata("design:returntype", Promise)
55
+ ], QueryExecutorTest.prototype, "commandSuccess", null);
56
+ tslib_1.__decorate([
57
+ (0, tests_1.Test)(),
58
+ (0, tests_1.ExpectException)(exceptions_1.HandlerNotFoundException),
59
+ tslib_1.__metadata("design:type", Function),
60
+ tslib_1.__metadata("design:paramtypes", []),
61
+ tslib_1.__metadata("design:returntype", Promise)
62
+ ], QueryExecutorTest.prototype, "unknownCommand", null);
63
+ tslib_1.__decorate([
64
+ (0, tests_1.Test)(),
65
+ tslib_1.__metadata("design:type", Function),
66
+ tslib_1.__metadata("design:paramtypes", []),
67
+ tslib_1.__metadata("design:returntype", Promise)
68
+ ], QueryExecutorTest.prototype, "querySuccess", null);
69
+ tslib_1.__decorate([
70
+ (0, tests_1.Test)(),
71
+ (0, tests_1.ExpectException)(exceptions_1.HandlerNotFoundException),
72
+ tslib_1.__metadata("design:type", Function),
73
+ tslib_1.__metadata("design:paramtypes", []),
74
+ tslib_1.__metadata("design:returntype", Promise)
75
+ ], QueryExecutorTest.prototype, "unknownQuery", null);
76
+ exports.QueryExecutorTest = QueryExecutorTest = tslib_1.__decorate([
77
+ (0, tests_1.Describe)()
78
+ ], QueryExecutorTest);
79
+ //# sourceMappingURL=cqrs.module.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cqrs.module.test.js","sourceRoot":"","sources":["../../src/tests/cqrs.module.test.ts"],"names":[],"mappings":";;;;AAAA,oCAA2C;AAC3C,wCAMsB;AAEtB,8CAAyD;AACzD,4CAGsB;AACtB,yCAGoB;AACpB,yDAAoD;AACpD,uCAGmB;AAGZ,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,aAAK;IACnC,SAAS,CAAgB;IACzB,eAAe,CAAkB;IACjC,aAAa,CAAgB;IAGxB,AAAN,KAAK,CAAC,gBAAgB;QAC5B,IAAA,cAAM,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC,cAAc,CAAC,2BAAe,CAAC,CAAC;QAC7D,IAAA,cAAM,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,yBAAa,CAAC,CAAC;IAC1D,CAAC;IAGY,AAAN,KAAK,CAAC,cAAc;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,sBAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAE1E,IAAA,cAAM,EAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAIY,AAAN,KAAK,CAAC,cAAc;QAC1B,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,yBAAc,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IAGY,AAAN,KAAK,CAAC,YAAY;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,mBAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAEtE,IAAA,cAAM,EAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAIY,AAAN,KAAK,CAAC,YAAY;QACxB,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,sBAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAEe,KAAK,CAAC,UAAU;QAC/B,IAAI,CAAC,SAAS,GAAG,MAAM,mBAAa,CAAC,MAAM,CAAC,iCAAc,CAAC,CAAC;QAE5D,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,yBAAa,CAAC,CAAC;QACvD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,2BAAe,CAAC,CAAC;IAC5D,CAAC;CACD,CAAA;AA/CY,8CAAiB;AAMhB;IADZ,IAAA,YAAI,GAAE;;;;yDAIN;AAGY;IADZ,IAAA,YAAI,GAAE;;;;uDAMN;AAIY;IAFZ,IAAA,YAAI,GAAE;IACN,IAAA,uBAAe,EAAC,qCAAwB,CAAC;;;;uDAGzC;AAGY;IADZ,IAAA,YAAI,GAAE;;;;qDAMN;AAIY;IAFZ,IAAA,YAAI,GAAE;IACN,IAAA,uBAAe,EAAC,qCAAwB,CAAC;;;;qDAGzC;4BArCW,iBAAiB;IAD7B,IAAA,gBAAQ,GAAE;GACE,iBAAiB,CA+C7B"}
@@ -0,0 +1,3 @@
1
+ export * from './unknown.query';
2
+ export * from './test.query';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tests/queries/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./unknown.query"), exports);
5
+ tslib_1.__exportStar(require("./test.query"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tests/queries/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC;AAChC,uDAA6B"}
@@ -0,0 +1,6 @@
1
+ import { BaseQuery } from '../../abstracts';
2
+ export declare class TestQuery extends BaseQuery<string> {
3
+ readonly expectedResult: string;
4
+ constructor(expectedResult: string);
5
+ }
6
+ //# sourceMappingURL=test.query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.query.d.ts","sourceRoot":"","sources":["../../../src/tests/queries/test.query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,qBAAa,SAAU,SAAQ,SAAS,CAAC,MAAM,CAAC;IAC/C,SAAgB,cAAc,EAAE,MAAM,CAAC;gBAEpB,cAAc,EAAE,MAAM;CAKzC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestQuery = void 0;
4
+ const abstracts_1 = require("../../abstracts");
5
+ class TestQuery extends abstracts_1.BaseQuery {
6
+ expectedResult;
7
+ constructor(expectedResult) {
8
+ super();
9
+ this.expectedResult = expectedResult;
10
+ }
11
+ }
12
+ exports.TestQuery = TestQuery;
13
+ //# sourceMappingURL=test.query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.query.js","sourceRoot":"","sources":["../../../src/tests/queries/test.query.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAE5C,MAAa,SAAU,SAAQ,qBAAiB;IAC/B,cAAc,CAAS;IAEvC,YAAmB,cAAsB;QACxC,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,CAAC;CACD;AARD,8BAQC"}
@@ -0,0 +1,6 @@
1
+ import { BaseQuery } from '../../abstracts';
2
+ export declare class UnknownQuery extends BaseQuery<string> {
3
+ readonly expectedResult: string;
4
+ constructor(expectedResult: string);
5
+ }
6
+ //# sourceMappingURL=unknown.query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unknown.query.d.ts","sourceRoot":"","sources":["../../../src/tests/queries/unknown.query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,qBAAa,YAAa,SAAQ,SAAS,CAAC,MAAM,CAAC;IAClD,SAAgB,cAAc,EAAE,MAAM,CAAC;gBAEpB,cAAc,EAAE,MAAM;CAKzC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnknownQuery = void 0;
4
+ const abstracts_1 = require("../../abstracts");
5
+ class UnknownQuery extends abstracts_1.BaseQuery {
6
+ expectedResult;
7
+ constructor(expectedResult) {
8
+ super();
9
+ this.expectedResult = expectedResult;
10
+ }
11
+ }
12
+ exports.UnknownQuery = UnknownQuery;
13
+ //# sourceMappingURL=unknown.query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unknown.query.js","sourceRoot":"","sources":["../../../src/tests/queries/unknown.query.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAE5C,MAAa,YAAa,SAAQ,qBAAiB;IAClC,cAAc,CAAS;IAEvC,YAAmB,cAAsB;QACxC,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,CAAC;CACD;AARD,oCAQC"}
@@ -0,0 +1,9 @@
1
+ import { BaseExecutor, BaseExecutorTestSuite, BaseQuery, BaseQueryHandler } from '../abstracts';
2
+ import { TestQuery } from './queries';
3
+ export declare class QueryExecutorTest extends BaseExecutorTestSuite<BaseQuery<any>> {
4
+ protected getCommandOrQuery(input: string): TestQuery;
5
+ protected getExecutor(): BaseExecutor<BaseQuery<any>>;
6
+ protected getHandler(): BaseQueryHandler<BaseQuery<any>>;
7
+ protected getCommandOrQueryCtor(): Class<BaseQuery<any>, [string]>;
8
+ }
9
+ //# sourceMappingURL=query-executor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-executor.test.d.ts","sourceRoot":"","sources":["../../src/tests/query-executor.test.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,YAAY,EACZ,qBAAqB,EACrB,SAAS,EACT,gBAAgB,EAChB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,qBACa,iBAAkB,SAAQ,qBAAqB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;cACxD,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS;cAI3C,WAAW,IAAI,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;cAI3C,UAAU,IAAI,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;cAI9C,qBAAqB,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;CAG3E"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QueryExecutorTest = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const tests_1 = require("@hg-ts/tests");
6
+ const abstracts_1 = require("../abstracts");
7
+ const executors_1 = require("../executors");
8
+ const queries_1 = require("./queries");
9
+ const test_query_handler_1 = require("./test-query.handler");
10
+ let QueryExecutorTest = class QueryExecutorTest extends abstracts_1.BaseExecutorTestSuite {
11
+ getCommandOrQuery(input) {
12
+ return new queries_1.TestQuery(input);
13
+ }
14
+ getExecutor() {
15
+ return new executors_1.QueryExecutor();
16
+ }
17
+ getHandler() {
18
+ return new test_query_handler_1.TestQueryHandler();
19
+ }
20
+ getCommandOrQueryCtor() {
21
+ return queries_1.TestQuery;
22
+ }
23
+ };
24
+ exports.QueryExecutorTest = QueryExecutorTest;
25
+ exports.QueryExecutorTest = QueryExecutorTest = tslib_1.__decorate([
26
+ (0, tests_1.Describe)()
27
+ ], QueryExecutorTest);
28
+ //# sourceMappingURL=query-executor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-executor.test.js","sourceRoot":"","sources":["../../src/tests/query-executor.test.ts"],"names":[],"mappings":";;;;AAAA,wCAAwC;AAExC,4CAKsB;AACtB,4CAA6C;AAC7C,uCAAsC;AACtC,6DAAwD;AAGjD,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,iCAAqC;IACxD,iBAAiB,CAAC,KAAa;QACjD,OAAO,IAAI,mBAAS,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEkB,WAAW;QAC7B,OAAO,IAAI,yBAAa,EAAE,CAAC;IAC5B,CAAC;IAEkB,UAAU;QAC5B,OAAO,IAAI,qCAAgB,EAAE,CAAC;IAC/B,CAAC;IAEkB,qBAAqB;QACvC,OAAO,mBAAS,CAAC;IAClB,CAAC;CACD,CAAA;AAhBY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,gBAAQ,GAAE;GACE,iBAAiB,CAgB7B"}
@@ -0,0 +1,6 @@
1
+ import { BaseCommandHandler } from '../abstracts';
2
+ import { TestCommand } from './commands';
3
+ export declare class TestCommandHandler extends BaseCommandHandler<TestCommand> {
4
+ execute(command: TestCommand): Promise<string>;
5
+ }
6
+ //# sourceMappingURL=test-command.handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-command.handler.d.ts","sourceRoot":"","sources":["../../src/tests/test-command.handler.ts"],"names":[],"mappings":"AACA,OAAO,EACN,kBAAkB,EAElB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,qBACa,kBAAmB,SAAQ,kBAAkB,CAAC,WAAW,CAAC;IACzD,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;CAM3D"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestCommandHandler = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const exception_1 = require("@hg-ts/exception");
6
+ const abstracts_1 = require("../abstracts");
7
+ const decorators_1 = require("../decorators");
8
+ const commands_1 = require("./commands");
9
+ let TestCommandHandler = class TestCommandHandler extends abstracts_1.BaseCommandHandler {
10
+ async execute(command) {
11
+ if (command.expectedResult === abstracts_1.INPUT_FOR_EXCEPTION) {
12
+ throw new exception_1.UnknownException(command.expectedResult);
13
+ }
14
+ return command.expectedResult;
15
+ }
16
+ };
17
+ exports.TestCommandHandler = TestCommandHandler;
18
+ exports.TestCommandHandler = TestCommandHandler = tslib_1.__decorate([
19
+ (0, decorators_1.CommandHandler)(commands_1.TestCommand)
20
+ ], TestCommandHandler);
21
+ //# sourceMappingURL=test-command.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-command.handler.js","sourceRoot":"","sources":["../../src/tests/test-command.handler.ts"],"names":[],"mappings":";;;;AAAA,gDAAoD;AACpD,4CAGsB;AACtB,8CAA+C;AAC/C,yCAAyC;AAGlC,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,8BAA+B;IAC/D,KAAK,CAAC,OAAO,CAAC,OAAoB;QACxC,IAAI,OAAO,CAAC,cAAc,KAAK,+BAAmB,EAAE,CAAC;YACpD,MAAM,IAAI,4BAAgB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,OAAO,CAAC,cAAc,CAAC;IAC/B,CAAC;CACD,CAAA;AAPY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,2BAAc,EAAC,sBAAW,CAAC;GACf,kBAAkB,CAO9B"}
@@ -0,0 +1,6 @@
1
+ import { BaseQueryHandler } from '../abstracts';
2
+ import { TestQuery } from './queries';
3
+ export declare class TestQueryHandler extends BaseQueryHandler<TestQuery> {
4
+ execute(command: TestQuery): Promise<string>;
5
+ }
6
+ //# sourceMappingURL=test-query.handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-query.handler.d.ts","sourceRoot":"","sources":["../../src/tests/test-query.handler.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,gBAAgB,EAEhB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,qBACa,gBAAiB,SAAQ,gBAAgB,CAAC,SAAS,CAAC;IACnD,OAAO,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;CAMzD"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestQueryHandler = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const exception_1 = require("@hg-ts/exception");
6
+ const abstracts_1 = require("../abstracts");
7
+ const decorators_1 = require("../decorators");
8
+ const queries_1 = require("./queries");
9
+ let TestQueryHandler = class TestQueryHandler extends abstracts_1.BaseQueryHandler {
10
+ async execute(command) {
11
+ if (command.expectedResult === abstracts_1.INPUT_FOR_EXCEPTION) {
12
+ throw new exception_1.UnknownException(command.expectedResult);
13
+ }
14
+ return command.expectedResult;
15
+ }
16
+ };
17
+ exports.TestQueryHandler = TestQueryHandler;
18
+ exports.TestQueryHandler = TestQueryHandler = tslib_1.__decorate([
19
+ (0, decorators_1.QueryHandler)(queries_1.TestQuery)
20
+ ], TestQueryHandler);
21
+ //# sourceMappingURL=test-query.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-query.handler.js","sourceRoot":"","sources":["../../src/tests/test-query.handler.ts"],"names":[],"mappings":";;;;AAAA,gDAAoD;AAEpD,4CAGsB;AACtB,8CAA6C;AAC7C,uCAAsC;AAG/B,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,4BAA2B;IACzD,KAAK,CAAC,OAAO,CAAC,OAAkB;QACtC,IAAI,OAAO,CAAC,cAAc,KAAK,+BAAmB,EAAE,CAAC;YACpD,MAAM,IAAI,4BAAgB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,OAAO,CAAC,cAAc,CAAC;IAC/B,CAAC;CACD,CAAA;AAPY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,yBAAY,EAAC,mBAAS,CAAC;GACX,gBAAgB,CAO5B"}
@@ -0,0 +1,6 @@
1
+ import { BaseCommand } from '../abstracts';
2
+ export declare class TestCommand extends BaseCommand<string> {
3
+ readonly expectedResult: string;
4
+ constructor(expectedResult: string);
5
+ }
6
+ //# sourceMappingURL=test.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.command.d.ts","sourceRoot":"","sources":["../../src/tests/test.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,qBAAa,WAAY,SAAQ,WAAW,CAAC,MAAM,CAAC;IACnD,SAAgB,cAAc,EAAE,MAAM,CAAC;gBAEpB,cAAc,EAAE,MAAM;CAKzC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestCommand = void 0;
4
+ const abstracts_1 = require("../abstracts");
5
+ class TestCommand extends abstracts_1.BaseCommand {
6
+ expectedResult;
7
+ constructor(expectedResult) {
8
+ super();
9
+ this.expectedResult = expectedResult;
10
+ }
11
+ }
12
+ exports.TestCommand = TestCommand;
13
+ //# sourceMappingURL=test.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.command.js","sourceRoot":"","sources":["../../src/tests/test.command.ts"],"names":[],"mappings":";;;AAAA,4CAA2C;AAE3C,MAAa,WAAY,SAAQ,uBAAmB;IACnC,cAAc,CAAS;IAEvC,YAAmB,cAAsB;QACxC,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,CAAC;CACD;AARD,kCAQC"}
@@ -0,0 +1,6 @@
1
+ import { BaseQuery } from '../abstracts';
2
+ export declare class TestQuery extends BaseQuery<string> {
3
+ readonly expectedResult: string;
4
+ constructor(expectedResult: string);
5
+ }
6
+ //# sourceMappingURL=test.query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.query.d.ts","sourceRoot":"","sources":["../../src/tests/test.query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,qBAAa,SAAU,SAAQ,SAAS,CAAC,MAAM,CAAC;IAC/C,SAAgB,cAAc,EAAE,MAAM,CAAC;gBAEpB,cAAc,EAAE,MAAM;CAKzC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestQuery = void 0;
4
+ const abstracts_1 = require("../abstracts");
5
+ class TestQuery extends abstracts_1.BaseQuery {
6
+ expectedResult;
7
+ constructor(expectedResult) {
8
+ super();
9
+ this.expectedResult = expectedResult;
10
+ }
11
+ }
12
+ exports.TestQuery = TestQuery;
13
+ //# sourceMappingURL=test.query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.query.js","sourceRoot":"","sources":["../../src/tests/test.query.ts"],"names":[],"mappings":";;;AAAA,4CAAyC;AAEzC,MAAa,SAAU,SAAQ,qBAAiB;IAC/B,cAAc,CAAS;IAEvC,YAAmB,cAAsB;QACxC,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,CAAC;CACD;AARD,8BAQC"}
@@ -0,0 +1,6 @@
1
+ import { BaseCommand } from '../abstracts';
2
+ export declare class TestCommand extends BaseCommand<string> {
3
+ readonly expectedResult: string;
4
+ constructor(expectedResult: string);
5
+ }
6
+ //# sourceMappingURL=unknown.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unknown.command.d.ts","sourceRoot":"","sources":["../../src/tests/unknown.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,qBAAa,WAAY,SAAQ,WAAW,CAAC,MAAM,CAAC;IACnD,SAAgB,cAAc,EAAE,MAAM,CAAC;gBAEpB,cAAc,EAAE,MAAM;CAKzC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestCommand = void 0;
4
+ const abstracts_1 = require("../abstracts");
5
+ class TestCommand extends abstracts_1.BaseCommand {
6
+ expectedResult;
7
+ constructor(expectedResult) {
8
+ super();
9
+ this.expectedResult = expectedResult;
10
+ }
11
+ }
12
+ exports.TestCommand = TestCommand;
13
+ //# sourceMappingURL=unknown.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unknown.command.js","sourceRoot":"","sources":["../../src/tests/unknown.command.ts"],"names":[],"mappings":";;;AAAA,4CAA2C;AAE3C,MAAa,WAAY,SAAQ,uBAAmB;IACnC,cAAc,CAAS;IAEvC,YAAmB,cAAsB;QACxC,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,CAAC;CACD;AARD,kCAQC"}
@@ -0,0 +1,6 @@
1
+ import { BaseQuery } from '../abstracts';
2
+ export declare class TestQuery extends BaseQuery<string> {
3
+ readonly expectedResult: string;
4
+ constructor(expectedResult: string);
5
+ }
6
+ //# sourceMappingURL=unknown.query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unknown.query.d.ts","sourceRoot":"","sources":["../../src/tests/unknown.query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,qBAAa,SAAU,SAAQ,SAAS,CAAC,MAAM,CAAC;IAC/C,SAAgB,cAAc,EAAE,MAAM,CAAC;gBAEpB,cAAc,EAAE,MAAM;CAKzC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestQuery = void 0;
4
+ const abstracts_1 = require("../abstracts");
5
+ class TestQuery extends abstracts_1.BaseQuery {
6
+ expectedResult;
7
+ constructor(expectedResult) {
8
+ super();
9
+ this.expectedResult = expectedResult;
10
+ }
11
+ }
12
+ exports.TestQuery = TestQuery;
13
+ //# sourceMappingURL=unknown.query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unknown.query.js","sourceRoot":"","sources":["../../src/tests/unknown.query.ts"],"names":[],"mappings":";;;AAAA,4CAAyC;AAEzC,MAAa,SAAU,SAAQ,qBAAiB;IAC/B,cAAc,CAAS;IAEvC,YAAmB,cAAsB;QACxC,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,CAAC;CACD;AARD,8BAQC"}
@@ -0,0 +1,7 @@
1
+ import { BaseQuery, BaseCommand, BaseQueryHandler, BaseCommandHandler } from './abstracts';
2
+ export type CommandResult<Command extends BaseCommand<any>> = Command extends BaseCommand<infer Result> ? Result : never;
3
+ export type QueryResult<Command extends BaseQuery<any>> = Command extends BaseQuery<infer Result> ? Result : never;
4
+ export type BaseCommandOrQuery = BaseQuery<any> | BaseCommand<any>;
5
+ export type CommonHandler<CommandOrQuery extends BaseCommandOrQuery> = CommandOrQuery extends BaseQuery<any> ? BaseQueryHandler<CommandOrQuery> : CommandOrQuery extends BaseCommand<any> ? BaseCommandHandler<CommandOrQuery> : never;
6
+ export type CommonResult<CommandOrQuery extends BaseCommandOrQuery> = CommandOrQuery extends BaseQuery<any> ? QueryResult<CommandOrQuery> : CommandOrQuery extends BaseCommand<any> ? CommandResult<CommandOrQuery> : never;
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,WAAW,CAAC,GAAG,CAAC,IAAI,OAAO,SAAS,WAAW,CAAC,MAAM,MAAM,CAAC,GACpG,MAAM,GACN,KAAK,CAAC;AACT,MAAM,MAAM,WAAW,CAAC,OAAO,SAAS,SAAS,CAAC,GAAG,CAAC,IAAI,OAAO,SAAS,SAAS,CAAC,MAAM,MAAM,CAAC,GAC9F,MAAM,GACN,KAAK,CAAC;AAET,MAAM,MAAM,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;AAEnE,MAAM,MAAM,aAAa,CAAC,cAAc,SAAS,kBAAkB,IAClE,cAAc,SAAS,SAAS,CAAC,GAAG,CAAC,GAClC,gBAAgB,CAAC,cAAc,CAAC,GAChC,cAAc,SAAS,WAAW,CAAC,GAAG,CAAC,GACtC,kBAAkB,CAAC,cAAc,CAAC,GAClC,KAAK,CAAC;AAEX,MAAM,MAAM,YAAY,CAAC,cAAc,SAAS,kBAAkB,IACjE,cAAc,SAAS,SAAS,CAAC,GAAG,CAAC,GAClC,WAAW,CAAC,cAAc,CAAC,GAC3B,cAAc,SAAS,WAAW,CAAC,GAAG,CAAC,GACtC,aAAa,CAAC,cAAc,CAAC,GAC7B,KAAK,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import config from '@hg-ts/linter';
2
+
3
+ export default config;
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@hg-ts/cqrs",
3
+ "version": "0.1.23",
4
+ "main": "dist/index.js",
5
+ "exports": {
6
+ ".": "./dist/index.js"
7
+ },
8
+ "repository": "git@gitlab.com:hyper-graph/framework.git",
9
+ "scripts": {
10
+ "prepack": "yarn build && yarn lint:ts && yarn test",
11
+ "build": "tsc",
12
+ "build:dev": "tsc-watch",
13
+ "lint:ts": "lint-ts",
14
+ "lint:ts:fix": "lint-ts --fix",
15
+ "test": "node --test",
16
+ "test:dev": "yarn build:dev --onSuccess \"yarn test\""
17
+ },
18
+ "devDependencies": {
19
+ "@hg-ts-config/typescript": "0.1.23",
20
+ "@hg-ts/exception": "0.1.23",
21
+ "@hg-ts/ioc": "0.1.23",
22
+ "@hg-ts/linter": "0.1.23",
23
+ "@hg-ts/tests": "0.1.23",
24
+ "@hg-ts/types": "0.1.23",
25
+ "@types/node": "22.10.6",
26
+ "eslint": "9.18.0",
27
+ "reflect-metadata": "0.2.2",
28
+ "tsc-watch": "6.3.0",
29
+ "tslib": "2.8.1",
30
+ "typescript": "5.7.3"
31
+ },
32
+ "peerDependencies": {
33
+ "@hg-ts/exception": "0.1.23",
34
+ "@hg-ts/ioc": "0.1.23",
35
+ "reflect-metadata": "*",
36
+ "tslib": "*"
37
+ }
38
+ }
@@ -0,0 +1,6 @@
1
+ import { CommandResult } from '../types';
2
+ import { BaseCommand } from './base.command';
3
+
4
+ export abstract class BaseCommandHandler<Command extends BaseCommand<any>> {
5
+ public abstract execute(command: Command): Promise<CommandResult<Command>>;
6
+ }
@@ -0,0 +1,5 @@
1
+ const COMMAND_SYMBOL = Symbol('Hyper Graph Command');
2
+
3
+ export abstract class BaseCommand<Result = void> {
4
+ protected readonly [COMMAND_SYMBOL]: Nullable<Result> = null;
5
+ }
@@ -0,0 +1,64 @@
1
+ import {
2
+ expect,
3
+ Test,
4
+ Suite,
5
+ ExpectException,
6
+ } from '@hg-ts/tests';
7
+ import { UnknownException } from '@hg-ts/exception';
8
+
9
+ import {
10
+ HandlerAlreadyAddedException,
11
+ HandlerNotFoundException,
12
+ } from '../exceptions';
13
+ import {
14
+ BaseCommandOrQuery,
15
+ CommonHandler,
16
+ } from '../types';
17
+ import { BaseExecutor } from './base.executor';
18
+
19
+
20
+ export const INPUT_FOR_EXCEPTION = 'Some special string that will throw an exception';
21
+
22
+ export abstract class BaseExecutorTestSuite<CommandOrQuery extends BaseCommandOrQuery> extends Suite {
23
+ private executor: BaseExecutor<CommandOrQuery>;
24
+
25
+ @Test()
26
+ public async successExecute(): Promise<void> {
27
+ const expectedResult = String(Math.random());
28
+
29
+ this.executor['addHandler'](this.getCommandOrQueryCtor(), this.getHandler());
30
+
31
+ const result = await this.executor.execute(this.getCommandOrQuery(expectedResult));
32
+
33
+ expect(result).toBe(expectedResult);
34
+ }
35
+
36
+ @ExpectException(HandlerAlreadyAddedException)
37
+ @Test()
38
+ public async multipleHandlers(): Promise<void> {
39
+ this.executor['addHandler'](this.getCommandOrQueryCtor(), this.getHandler());
40
+ this.executor['addHandler'](this.getCommandOrQueryCtor(), this.getHandler());
41
+ }
42
+
43
+ @ExpectException(HandlerNotFoundException)
44
+ @Test()
45
+ public async handlerNotFound(): Promise<void> {
46
+ await this.executor.execute(this.getCommandOrQuery(''));
47
+ }
48
+
49
+ @ExpectException(UnknownException)
50
+ @Test()
51
+ public async successPassException(): Promise<void> {
52
+ this.executor['addHandler'](this.getCommandOrQueryCtor(), this.getHandler());
53
+ await this.executor.execute(this.getCommandOrQuery(INPUT_FOR_EXCEPTION));
54
+ }
55
+
56
+ public override async beforeEach(): Promise<void> {
57
+ this.executor = this.getExecutor();
58
+ }
59
+
60
+ protected abstract getExecutor(): BaseExecutor<CommandOrQuery>;
61
+ protected abstract getHandler(): CommonHandler<CommandOrQuery>;
62
+ protected abstract getCommandOrQueryCtor(): Class<CommandOrQuery, [string]>;
63
+ protected abstract getCommandOrQuery(input: string): CommandOrQuery;
64
+ }
@@ -0,0 +1,46 @@
1
+ import assert from 'node:assert/strict';
2
+ import {
3
+ HandlerAlreadyAddedException,
4
+ HandlerNotFoundException,
5
+ } from '../exceptions';
6
+ import {
7
+ CommonHandler,
8
+ CommonResult,
9
+ } from '../types';
10
+
11
+ import { BaseCommand } from './base.command';
12
+ import { BaseQuery } from './base.query';
13
+
14
+ export abstract class BaseExecutor<
15
+ BaseCommandOrQuery extends BaseQuery<any> | BaseCommand<any>
16
+ > {
17
+ protected readonly handlers = new Map<Class<BaseCommandOrQuery>, CommonHandler<BaseCommandOrQuery>>();
18
+
19
+ public async execute<CommandOrQuery extends BaseCommandOrQuery>(
20
+ commandOrQuery: CommandOrQuery,
21
+ ): Promise<CommonResult<CommandOrQuery>> {
22
+ return this.executeHandler(commandOrQuery);
23
+ }
24
+
25
+ protected addHandler<CommandOrQuery extends BaseCommandOrQuery>(
26
+ command: Class<CommandOrQuery, any[]>,
27
+ handler: CommonHandler<BaseCommandOrQuery>,
28
+ ): void {
29
+ const existHandler = this.handlers.get(command);
30
+
31
+ assert.ok(!existHandler, new HandlerAlreadyAddedException(command));
32
+
33
+ this.handlers.set(command, handler);
34
+ }
35
+
36
+ protected assertHandler(
37
+ handler: Nullable<CommonHandler<BaseCommandOrQuery>>,
38
+ commandOrQuery: Class<BaseCommandOrQuery, any[]>,
39
+ ): asserts handler {
40
+ assert.ok(handler, new HandlerNotFoundException(commandOrQuery));
41
+ }
42
+
43
+ protected abstract executeHandler<CommandOrQuery extends BaseCommandOrQuery>(
44
+ commandOrQuery: CommandOrQuery,
45
+ ): Promise<CommonResult<CommandOrQuery>>;
46
+ }
@@ -0,0 +1,6 @@
1
+ import { QueryResult } from '../types';
2
+ import { BaseQuery } from './base.query';
3
+
4
+ export abstract class BaseQueryHandler<Query extends BaseQuery<any>> {
5
+ public abstract execute(query: Query): Promise<QueryResult<Query>>;
6
+ }
@@ -0,0 +1,5 @@
1
+ const QUERY_SYMBOL = Symbol('Hyper Graph Query');
2
+
3
+ export abstract class BaseQuery<Result> {
4
+ protected readonly [QUERY_SYMBOL]: Nullable<Result> = null;
5
+ }
@@ -0,0 +1,7 @@
1
+ export * from './base.command';
2
+ export * from './base.query';
3
+ export * from './base.executor';
4
+ export * from './base.query-handler';
5
+ export * from './base.command-handler';
6
+ export * from './base.executor';
7
+ export * from './base.executor.test-suite';