ddd-node 29.2.0 → 29.4.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 (193) hide show
  1. package/dist/base/decorators/index.d.ts +5 -0
  2. package/dist/base/decorators/index.js +21 -0
  3. package/dist/base/decorators/model.d.ts +13 -0
  4. package/dist/base/decorators/model.js +56 -0
  5. package/dist/base/decorators/mutable.d.ts +2 -0
  6. package/dist/base/decorators/mutable.js +10 -0
  7. package/dist/base/decorators/prop.d.ts +2 -0
  8. package/dist/base/decorators/prop.js +10 -0
  9. package/dist/base/decorators/props-validator.d.ts +2 -0
  10. package/dist/base/decorators/props-validator.js +8 -0
  11. package/dist/base/decorators/static.d.ts +3 -0
  12. package/dist/base/decorators/static.js +11 -0
  13. package/dist/base/domain.d.ts +24 -0
  14. package/dist/base/domain.js +49 -0
  15. package/dist/base/index.d.ts +5 -0
  16. package/dist/base/index.js +21 -0
  17. package/dist/base/meta/index.d.ts +8 -0
  18. package/dist/base/meta/index.js +24 -0
  19. package/dist/base/meta/model-domain.d.ts +4 -0
  20. package/dist/base/meta/model-domain.js +15 -0
  21. package/dist/base/meta/model-id.d.ts +16 -0
  22. package/dist/base/meta/model-id.js +39 -0
  23. package/dist/base/meta/model-mutable.d.ts +2 -0
  24. package/dist/base/meta/model-mutable.js +14 -0
  25. package/dist/base/meta/model-name.d.ts +8 -0
  26. package/dist/base/meta/model-name.js +25 -0
  27. package/dist/base/meta/model-props-map.d.ts +6 -0
  28. package/dist/base/meta/model-props-map.js +45 -0
  29. package/dist/base/meta/model-props-validator.d.ts +6 -0
  30. package/dist/base/meta/model-props-validator.js +33 -0
  31. package/dist/base/meta/model-static-values.d.ts +13 -0
  32. package/dist/base/meta/model-static-values.js +54 -0
  33. package/dist/base/meta/model-version.d.ts +8 -0
  34. package/dist/base/meta/model-version.js +25 -0
  35. package/dist/base/model/errors.d.ts +3 -0
  36. package/dist/base/model/errors.js +9 -0
  37. package/dist/base/model/index.d.ts +3 -0
  38. package/dist/base/model/index.js +19 -0
  39. package/dist/base/model/model-descriptor.d.ts +13 -0
  40. package/dist/base/model/model-descriptor.js +2 -0
  41. package/dist/base/model/model.builder.d.ts +11 -0
  42. package/dist/base/model/model.builder.js +18 -0
  43. package/dist/base/model/model.d.ts +40 -0
  44. package/dist/base/model/model.js +117 -0
  45. package/dist/base/model-registry.d.ts +17 -0
  46. package/dist/base/model-registry.js +55 -0
  47. package/dist/core/aggregate/aggregate-base/aggregate-event-publisher.interface.d.ts +4 -0
  48. package/dist/core/aggregate/aggregate-base/aggregate-event-publisher.interface.js +2 -0
  49. package/dist/core/aggregate/aggregate-base/aggregate.builder.d.ts +6 -0
  50. package/dist/core/aggregate/aggregate-base/aggregate.builder.js +15 -0
  51. package/dist/core/aggregate/aggregate-base/aggregate.d.ts +17 -0
  52. package/dist/core/aggregate/aggregate-base/aggregate.js +46 -0
  53. package/dist/core/aggregate/aggregate-base/index.d.ts +3 -0
  54. package/dist/core/aggregate/aggregate-base/index.js +19 -0
  55. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate-model-descriptor.d.ts +9 -0
  56. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate-model-descriptor.js +2 -0
  57. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.builder.d.ts +13 -0
  58. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.builder.js +33 -0
  59. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.d.ts +49 -0
  60. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.js +141 -0
  61. package/dist/core/aggregate/event-sourced-aggregate/index.d.ts +2 -0
  62. package/dist/core/aggregate/event-sourced-aggregate/index.js +18 -0
  63. package/dist/core/aggregate/event-sourced-aggregate/snapshot.d.ts +8 -0
  64. package/dist/core/aggregate/event-sourced-aggregate/snapshot.js +2 -0
  65. package/dist/core/aggregate/index.d.ts +4 -0
  66. package/dist/core/aggregate/index.js +20 -0
  67. package/dist/core/aggregate/state-aggregate/index.d.ts +2 -0
  68. package/dist/core/aggregate/state-aggregate/index.js +18 -0
  69. package/dist/core/aggregate/state-aggregate/state-aggregate.builder.d.ts +7 -0
  70. package/dist/core/aggregate/state-aggregate/state-aggregate.builder.js +19 -0
  71. package/dist/core/aggregate/state-aggregate/state-aggregate.d.ts +25 -0
  72. package/dist/core/aggregate/state-aggregate/state-aggregate.js +41 -0
  73. package/dist/core/aggregate/types.d.ts +4 -0
  74. package/dist/core/aggregate/types.js +2 -0
  75. package/dist/core/entity/entity.builder.d.ts +7 -0
  76. package/dist/core/entity/entity.builder.js +16 -0
  77. package/dist/core/entity/entity.d.ts +18 -0
  78. package/dist/core/entity/entity.js +29 -0
  79. package/dist/core/entity/index.d.ts +2 -0
  80. package/dist/core/entity/index.js +18 -0
  81. package/dist/core/enum/enum-builder.d.ts +9 -0
  82. package/dist/core/enum/enum-builder.js +32 -0
  83. package/dist/core/enum/enum.d.ts +22 -0
  84. package/dist/core/enum/enum.js +44 -0
  85. package/dist/core/enum/index.d.ts +2 -0
  86. package/dist/core/enum/index.js +18 -0
  87. package/dist/core/index.d.ts +7 -0
  88. package/dist/core/index.js +23 -0
  89. package/dist/core/message/command/command-model-descriptor.d.ts +6 -0
  90. package/dist/core/message/command/command-model-descriptor.js +2 -0
  91. package/dist/core/message/command/command.builder.d.ts +7 -0
  92. package/dist/core/message/command/command.builder.js +21 -0
  93. package/dist/core/message/command/command.d.ts +24 -0
  94. package/dist/core/message/command/command.js +35 -0
  95. package/dist/core/message/command/index.d.ts +3 -0
  96. package/dist/core/message/command/index.js +19 -0
  97. package/dist/core/message/event/event-model-descriptor.d.ts +6 -0
  98. package/dist/core/message/event/event-model-descriptor.js +2 -0
  99. package/dist/core/message/event/event.builder.d.ts +9 -0
  100. package/dist/core/message/event/event.builder.js +28 -0
  101. package/dist/core/message/event/event.d.ts +35 -0
  102. package/dist/core/message/event/event.js +40 -0
  103. package/dist/core/message/event/index.d.ts +3 -0
  104. package/dist/core/message/event/index.js +19 -0
  105. package/dist/core/message/index.d.ts +3 -0
  106. package/dist/core/message/index.js +19 -0
  107. package/dist/core/message/message-base/index.d.ts +2 -0
  108. package/dist/core/message/message-base/index.js +18 -0
  109. package/dist/core/message/message-base/message.builder.d.ts +16 -0
  110. package/dist/core/message/message-base/message.builder.js +44 -0
  111. package/dist/core/message/message-base/message.d.ts +31 -0
  112. package/dist/core/message/message-base/message.js +58 -0
  113. package/dist/core/model-with-id/id.d.ts +1 -0
  114. package/dist/core/model-with-id/id.js +2 -0
  115. package/dist/core/model-with-id/index.d.ts +3 -0
  116. package/dist/core/model-with-id/index.js +19 -0
  117. package/dist/core/model-with-id/model-with-id.builder.d.ts +9 -0
  118. package/dist/core/model-with-id/model-with-id.builder.js +22 -0
  119. package/dist/core/model-with-id/model-with-id.d.ts +13 -0
  120. package/dist/core/model-with-id/model-with-id.js +23 -0
  121. package/dist/core/repository/index.d.ts +1 -0
  122. package/dist/core/repository/index.js +17 -0
  123. package/dist/core/repository/repository.d.ts +6 -0
  124. package/dist/core/repository/repository.js +2 -0
  125. package/dist/core/value-object/index.d.ts +2 -0
  126. package/dist/core/value-object/index.js +18 -0
  127. package/dist/core/value-object/value-object.builder.d.ts +7 -0
  128. package/dist/core/value-object/value-object.builder.js +16 -0
  129. package/dist/core/value-object/value-object.d.ts +17 -0
  130. package/dist/core/value-object/value-object.js +64 -0
  131. package/dist/decorators/aggregate-es/handle.d.ts +2 -0
  132. package/dist/decorators/aggregate-es/handle.js +13 -0
  133. package/dist/decorators/aggregate-es/index.d.ts +2 -0
  134. package/dist/decorators/aggregate-es/index.js +18 -0
  135. package/dist/decorators/aggregate-es/when.d.ts +2 -0
  136. package/dist/decorators/aggregate-es/when.js +13 -0
  137. package/dist/decorators/enum.d.ts +2 -0
  138. package/dist/decorators/enum.js +10 -0
  139. package/dist/decorators/index.d.ts +3 -0
  140. package/dist/decorators/index.js +19 -0
  141. package/dist/decorators/message/command.d.ts +3 -0
  142. package/dist/decorators/message/command.js +10 -0
  143. package/dist/decorators/message/event.d.ts +3 -0
  144. package/dist/decorators/message/event.js +10 -0
  145. package/dist/decorators/message/index.d.ts +2 -0
  146. package/dist/decorators/message/index.js +18 -0
  147. package/dist/decorators/type.d.ts +2 -0
  148. package/dist/decorators/type.js +2 -0
  149. package/dist/event-pubsub/decorators/index.d.ts +1 -0
  150. package/dist/event-pubsub/decorators/index.js +17 -0
  151. package/dist/event-pubsub/decorators/subscribe-to-events.d.ts +5 -0
  152. package/dist/event-pubsub/decorators/subscribe-to-events.js +11 -0
  153. package/dist/event-pubsub/event-publisher.d.ts +7 -0
  154. package/dist/event-pubsub/event-publisher.js +13 -0
  155. package/dist/event-pubsub/event-subscriber-registry.d.ts +23 -0
  156. package/dist/event-pubsub/event-subscriber-registry.js +80 -0
  157. package/dist/event-pubsub/event-subscriber.d.ts +13 -0
  158. package/dist/event-pubsub/event-subscriber.js +24 -0
  159. package/dist/event-pubsub/index.d.ts +5 -0
  160. package/dist/event-pubsub/index.js +21 -0
  161. package/dist/event-pubsub/interfaces/event-publisher.interface.d.ts +4 -0
  162. package/dist/event-pubsub/interfaces/event-publisher.interface.js +2 -0
  163. package/dist/event-pubsub/interfaces/event-subscriber-registry.interface.d.ts +13 -0
  164. package/dist/event-pubsub/interfaces/event-subscriber-registry.interface.js +2 -0
  165. package/dist/event-pubsub/interfaces/event-subscriber.interface.d.ts +9 -0
  166. package/dist/event-pubsub/interfaces/event-subscriber.interface.js +2 -0
  167. package/dist/event-pubsub/interfaces/index.d.ts +3 -0
  168. package/dist/event-pubsub/interfaces/index.js +19 -0
  169. package/dist/index.d.ts +8 -0
  170. package/dist/meta/aggregate-es/command-handler-map.d.ts +8 -0
  171. package/dist/meta/aggregate-es/command-handler-map.js +43 -0
  172. package/dist/meta/aggregate-es/event-applier-map.d.ts +9 -0
  173. package/dist/meta/aggregate-es/event-applier-map.js +43 -0
  174. package/dist/meta/aggregate-es/index.d.ts +2 -0
  175. package/dist/meta/aggregate-es/index.js +18 -0
  176. package/dist/meta/command.metadata.d.ts +8 -0
  177. package/dist/meta/command.metadata.js +27 -0
  178. package/dist/meta/event.metadata.d.ts +8 -0
  179. package/dist/meta/event.metadata.js +27 -0
  180. package/dist/meta/index.d.ts +3 -0
  181. package/dist/meta/index.js +19 -0
  182. package/dist/types/class-static.d.ts +2 -0
  183. package/dist/types/class-static.js +2 -0
  184. package/dist/types/class.d.ts +2 -0
  185. package/dist/types/class.js +2 -0
  186. package/dist/types/index.d.ts +2 -0
  187. package/dist/types/index.js +18 -0
  188. package/dist/utils/index.d.ts +1 -0
  189. package/dist/utils/index.js +17 -0
  190. package/dist/utils/to-array.d.ts +1 -0
  191. package/dist/utils/to-array.js +7 -0
  192. package/package.json +62 -1
  193. /package/{index.js → dist/index.js} +0 -0
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ var ValueObjectBase_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.ValueObjectBase = void 0;
17
+ const lodash_1 = __importDefault(require("lodash"));
18
+ const base_1 = require("../../base");
19
+ let ValueObjectBase = ValueObjectBase_1 = class ValueObjectBase extends base_1.ModelBase {
20
+ constructor(props) {
21
+ super();
22
+ this.initializeProps(props);
23
+ }
24
+ props() {
25
+ return super.props();
26
+ }
27
+ equals(vo) {
28
+ const equalsType = vo instanceof this.constructor;
29
+ const equalsValue = this.getEqualityValue() === vo.getEqualityValue();
30
+ return equalsType && equalsValue;
31
+ }
32
+ with(props) {
33
+ const newProps = lodash_1.default.merge(this.props(), props);
34
+ return new this.constructor(newProps);
35
+ }
36
+ clone() {
37
+ return this.with({});
38
+ }
39
+ getEqualityValue() {
40
+ return JSON.stringify(this.getEqualityObject());
41
+ }
42
+ getEqualityObject() {
43
+ const result = {};
44
+ const props = this.props();
45
+ const valueOf = (v) => v instanceof ValueObjectBase_1 ? v.getEqualityObject() : v;
46
+ for (let [key, value] of Object.entries(props)) {
47
+ if (Array.isArray(value)) {
48
+ result[key] = value.map((v) => valueOf(v));
49
+ const stringValueOf = (v) => JSON.stringify(v);
50
+ result[key].sort((a, b) => {
51
+ return stringValueOf(a).localeCompare(stringValueOf(b));
52
+ });
53
+ continue;
54
+ }
55
+ result[key] = valueOf(value);
56
+ }
57
+ return result;
58
+ }
59
+ };
60
+ exports.ValueObjectBase = ValueObjectBase;
61
+ exports.ValueObjectBase = ValueObjectBase = ValueObjectBase_1 = __decorate([
62
+ (0, base_1.Mutable)(false),
63
+ __metadata("design:paramtypes", [Object])
64
+ ], ValueObjectBase);
@@ -0,0 +1,2 @@
1
+ import { AnyCommand, AnyEventSourcedAggregate, CommandClass, CommandHandler } from "../../core";
2
+ export declare const Handle: <T extends AnyCommand>(commandClass: CommandClass<T, any[]>) => <U extends CommandHandler<T>>(target: AnyEventSourcedAggregate, propertyKey: string, descriptor: TypedPropertyDescriptor<U>) => void;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Handle = void 0;
4
+ const meta_1 = require("../../meta");
5
+ const Handle = (commandClass) => {
6
+ return (target, propertyKey, descriptor) => {
7
+ if (typeof descriptor.value === "function") {
8
+ const commandType = commandClass.commandType();
9
+ (0, meta_1.defineCommandHandler)(target, commandType, descriptor.value);
10
+ }
11
+ };
12
+ };
13
+ exports.Handle = Handle;
@@ -0,0 +1,2 @@
1
+ export * from "./handle";
2
+ export * from "./when";
@@ -0,0 +1,18 @@
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("./handle"), exports);
18
+ __exportStar(require("./when"), exports);
@@ -0,0 +1,2 @@
1
+ import { AnyEvent, AnyEventSourcedAggregate, EventApplier, EventClass } from "../../core";
2
+ export declare const When: <T extends AnyEvent>(eventClass: EventClass<T, any[]>) => <U extends EventApplier<T>>(target: AnyEventSourcedAggregate, propertyKey: string, descriptor: TypedPropertyDescriptor<U>) => void;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.When = void 0;
4
+ const meta_1 = require("../../meta");
5
+ const When = (eventClass) => {
6
+ return (target, propertyKey, descriptor) => {
7
+ if (typeof descriptor.value === "function") {
8
+ const eventType = eventClass.eventType();
9
+ (0, meta_1.defineEventApplier)(target, eventType, descriptor.value);
10
+ }
11
+ };
12
+ };
13
+ exports.When = When;
@@ -0,0 +1,2 @@
1
+ import { EnumClass, EnumValue } from "../core";
2
+ export declare const Enum: (value?: EnumValue) => <T extends EnumClass<import("../core").EnumBase, any[]>>(target: T, key: string) => void;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Enum = void 0;
4
+ const base_1 = require("../base");
5
+ const Enum = (value) => {
6
+ return (target, key) => {
7
+ (0, base_1.Static)(() => new target(value ?? key))(target, key);
8
+ };
9
+ };
10
+ exports.Enum = Enum;
@@ -0,0 +1,3 @@
1
+ export * from "./aggregate-es";
2
+ export * from "./message";
3
+ export * from "./enum";
@@ -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("./aggregate-es"), exports);
18
+ __exportStar(require("./message"), exports);
19
+ __exportStar(require("./enum"), exports);
@@ -0,0 +1,3 @@
1
+ import { AnyCommand, CommandClass } from "../../core";
2
+ import { CommandType } from "../../meta";
3
+ export declare const Command: (commandType: CommandType) => <T extends AnyCommand>(target: CommandClass<T, any[]>) => void;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Command = void 0;
4
+ const meta_1 = require("../../meta");
5
+ const Command = (commandType) => {
6
+ return (target) => {
7
+ (0, meta_1.defineCommandType)(target, commandType);
8
+ };
9
+ };
10
+ exports.Command = Command;
@@ -0,0 +1,3 @@
1
+ import { AnyEvent, EventClass } from "../../core";
2
+ import { EventType } from "../../meta";
3
+ export declare const Event: (eventType: EventType) => <T extends AnyEvent>(target: EventClass<T, any[]>) => void;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Event = void 0;
4
+ const meta_1 = require("../../meta");
5
+ const Event = (eventType) => {
6
+ return (target) => {
7
+ (0, meta_1.defineEventType)(target, eventType);
8
+ };
9
+ };
10
+ exports.Event = Event;
@@ -0,0 +1,2 @@
1
+ export * from "./command";
2
+ export * from "./event";
@@ -0,0 +1,18 @@
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("./event"), exports);
@@ -0,0 +1,2 @@
1
+ import { Class } from "type-fest";
2
+ export type TypedClassDecorator<T extends Class<any> = Class<any>> = (target: T) => T | void;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export * from "./subscribe-to-events";
@@ -0,0 +1,17 @@
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("./subscribe-to-events"), exports);
@@ -0,0 +1,5 @@
1
+ import { Class } from "type-fest";
2
+ import { EventClass } from "../../core";
3
+ import { IEventSubscriber } from "../interfaces";
4
+ export declare const SubscribedEventsMetaKey: unique symbol;
5
+ export declare const SubscribeToEvents: <T extends EventClass<import("../../core").AnyEvent, any[]>>(subscribedEvents: T | T[]) => (target: Class<IEventSubscriber<InstanceType<T>>>) => void;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SubscribeToEvents = exports.SubscribedEventsMetaKey = void 0;
4
+ const utils_1 = require("../../utils");
5
+ exports.SubscribedEventsMetaKey = Symbol.for("SUBSCRIBED_EVENTS");
6
+ const SubscribeToEvents = (subscribedEvents) => {
7
+ return (target) => {
8
+ Reflect.defineMetadata(exports.SubscribedEventsMetaKey, (0, utils_1.toArray)(subscribedEvents), target);
9
+ };
10
+ };
11
+ exports.SubscribeToEvents = SubscribeToEvents;
@@ -0,0 +1,7 @@
1
+ import { AnyEvent } from "../core";
2
+ import { IEventPublisher, IEventSubscriberRegistry } from "./interfaces";
3
+ export declare class EventPublisher implements IEventPublisher {
4
+ private subscriberRegistry;
5
+ constructor(subscriberRegistry: IEventSubscriberRegistry);
6
+ publish<T extends AnyEvent = AnyEvent>(event: T): Promise<void>;
7
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventPublisher = void 0;
4
+ class EventPublisher {
5
+ constructor(subscriberRegistry) {
6
+ this.subscriberRegistry = subscriberRegistry;
7
+ }
8
+ async publish(event) {
9
+ const subscribers = this.subscriberRegistry.getAllSubscribersForEvent(event.constructor);
10
+ await Promise.all(subscribers.map((subscriber) => subscriber.handleEvent(event)));
11
+ }
12
+ }
13
+ exports.EventPublisher = EventPublisher;
@@ -0,0 +1,23 @@
1
+ import { AnyEvent, EventClass } from "../core";
2
+ import { IEventSubscriber, IEventSubscriberRegistry, IGlobalEventSubscriber, Unsubscriber } from "./interfaces";
3
+ export declare class EventSubscriberRegistry implements IEventSubscriberRegistry {
4
+ private static _instance;
5
+ static instance(): EventSubscriberRegistry;
6
+ private _globalSubscribers;
7
+ private _subscribers;
8
+ constructor(subscribers?: IEventSubscriber[]);
9
+ private _setSubscribersForEvent;
10
+ private _initSubscribersForEvent;
11
+ private _getSubscribersForEvent;
12
+ private _hasSubscriber;
13
+ private _addSubscriber;
14
+ private _removeSubscriber;
15
+ registerGlobalSubscriber(subscriber: IGlobalEventSubscriber): Unsubscriber;
16
+ deregisterGlobalSubscriber(subscriber: IGlobalEventSubscriber): void;
17
+ registerSubscriber(subscriber: IEventSubscriber): Unsubscriber;
18
+ deregisterSubscriber(subscriber: IEventSubscriber<AnyEvent>): void;
19
+ getGlobalSubscribers(): IGlobalEventSubscriber[];
20
+ getSubscribers(): IEventSubscriber[];
21
+ getSubscribersForEvent<T extends AnyEvent = AnyEvent>(eventType: EventClass<T>): IEventSubscriber<T>[];
22
+ getAllSubscribersForEvent<T extends AnyEvent = AnyEvent>(eventType: EventClass<T>): (IGlobalEventSubscriber | IEventSubscriber<T>)[];
23
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventSubscriberRegistry = void 0;
4
+ const utils_1 = require("../utils");
5
+ class EventSubscriberRegistry {
6
+ static instance() {
7
+ if (!this._instance)
8
+ this._instance = new EventSubscriberRegistry();
9
+ return this._instance;
10
+ }
11
+ constructor(subscribers = []) {
12
+ this._globalSubscribers = new Set();
13
+ this._subscribers = new Map();
14
+ subscribers.forEach((subscriber) => {
15
+ this.registerSubscriber(subscriber);
16
+ });
17
+ }
18
+ _setSubscribersForEvent(eventType, subscribers) {
19
+ this._subscribers.set(eventType, subscribers);
20
+ }
21
+ _initSubscribersForEvent(eventType) {
22
+ this._setSubscribersForEvent(eventType, []);
23
+ }
24
+ _getSubscribersForEvent(eventType) {
25
+ const subscribers = () => this._subscribers.get(eventType);
26
+ if (!subscribers())
27
+ this._initSubscribersForEvent(eventType);
28
+ return subscribers();
29
+ }
30
+ _hasSubscriber(subscribedEvent, subscriber) {
31
+ const subscribers = this._getSubscribersForEvent(subscribedEvent);
32
+ return subscribers.some((_subscriber) => _subscriber === subscriber);
33
+ }
34
+ _addSubscriber(subscribedEvent, subscriber) {
35
+ if (!this._hasSubscriber(subscribedEvent, subscriber)) {
36
+ const subscribers = this._getSubscribersForEvent(subscribedEvent);
37
+ subscribers.push(subscriber);
38
+ }
39
+ }
40
+ _removeSubscriber(subscribedEvent, subscriber) {
41
+ const subscribers = this._getSubscribersForEvent(subscribedEvent);
42
+ this._setSubscribersForEvent(subscribedEvent, subscribers.filter((_subscriber) => _subscriber !== subscriber));
43
+ }
44
+ registerGlobalSubscriber(subscriber) {
45
+ this._globalSubscribers.add(subscriber);
46
+ return () => this.deregisterGlobalSubscriber(subscriber);
47
+ }
48
+ deregisterGlobalSubscriber(subscriber) {
49
+ this._globalSubscribers.delete(subscriber);
50
+ }
51
+ registerSubscriber(subscriber) {
52
+ const subscribedEvents = (0, utils_1.toArray)(subscriber.subscribeToEvents());
53
+ subscribedEvents.forEach((subscribedEvent) => {
54
+ this._addSubscriber(subscribedEvent, subscriber);
55
+ });
56
+ return () => this.deregisterSubscriber(subscriber);
57
+ }
58
+ deregisterSubscriber(subscriber) {
59
+ const subscribedEvents = (0, utils_1.toArray)(subscriber.subscribeToEvents());
60
+ subscribedEvents.forEach((subscribedEvent) => {
61
+ this._removeSubscriber(subscribedEvent, subscriber);
62
+ });
63
+ }
64
+ getGlobalSubscribers() {
65
+ return Array.from(this._globalSubscribers);
66
+ }
67
+ getSubscribers() {
68
+ return Array.from(this._subscribers.values()).flat();
69
+ }
70
+ getSubscribersForEvent(eventType) {
71
+ return Array.from(this._getSubscribersForEvent(eventType));
72
+ }
73
+ getAllSubscribersForEvent(eventType) {
74
+ return [
75
+ ...this.getGlobalSubscribers(),
76
+ ...this.getSubscribersForEvent(eventType),
77
+ ];
78
+ }
79
+ }
80
+ exports.EventSubscriberRegistry = EventSubscriberRegistry;
@@ -0,0 +1,13 @@
1
+ import { AnyEvent, EventClass } from "../core";
2
+ import { EventSubscriberHandler, IEventSubscriber } from "./interfaces";
3
+ export declare abstract class EventSubscriber<T extends AnyEvent = AnyEvent> implements IEventSubscriber<T> {
4
+ subscribeToEvents(): EventClass<T, any[]> | EventClass<T, any[]>[];
5
+ abstract handleEvent(event: T): Promise<void>;
6
+ }
7
+ export declare class DynamicEventSubscriber<T extends AnyEvent = AnyEvent> implements IEventSubscriber<T> {
8
+ private readonly subscribedEvents;
9
+ private readonly eventHandler;
10
+ constructor(subscribedEvents: EventClass<T> | EventClass<T>[], eventHandler: EventSubscriberHandler<T>);
11
+ subscribeToEvents(): EventClass<T, any[]> | EventClass<T, any[]>[];
12
+ handleEvent(event: T): Promise<void>;
13
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DynamicEventSubscriber = exports.EventSubscriber = void 0;
4
+ const decorators_1 = require("./decorators");
5
+ class EventSubscriber {
6
+ subscribeToEvents() {
7
+ const subscribedEvents = Reflect.getOwnMetadata(decorators_1.SubscribedEventsMetaKey, this.constructor) ?? [];
8
+ return subscribedEvents;
9
+ }
10
+ }
11
+ exports.EventSubscriber = EventSubscriber;
12
+ class DynamicEventSubscriber {
13
+ constructor(subscribedEvents, eventHandler) {
14
+ this.subscribedEvents = subscribedEvents;
15
+ this.eventHandler = eventHandler;
16
+ }
17
+ subscribeToEvents() {
18
+ return this.subscribedEvents;
19
+ }
20
+ handleEvent(event) {
21
+ return this.eventHandler(event);
22
+ }
23
+ }
24
+ exports.DynamicEventSubscriber = DynamicEventSubscriber;
@@ -0,0 +1,5 @@
1
+ export * from "./interfaces";
2
+ export * from "./decorators";
3
+ export * from "./event-subscriber";
4
+ export * from "./event-publisher";
5
+ export * from "./event-subscriber-registry";
@@ -0,0 +1,21 @@
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("./interfaces"), exports);
18
+ __exportStar(require("./decorators"), exports);
19
+ __exportStar(require("./event-subscriber"), exports);
20
+ __exportStar(require("./event-publisher"), exports);
21
+ __exportStar(require("./event-subscriber-registry"), exports);
@@ -0,0 +1,4 @@
1
+ import { AnyEvent } from "../../core";
2
+ export interface IEventPublisher {
3
+ publish<T extends AnyEvent = AnyEvent>(event: T): Promise<void>;
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,13 @@
1
+ import { AnyEvent, EventClass } from "../../core";
2
+ import { IEventSubscriber, IGlobalEventSubscriber } from "./event-subscriber.interface";
3
+ export type Unsubscriber = () => void;
4
+ export interface IEventSubscriberRegistry {
5
+ registerGlobalSubscriber(subscriber: IGlobalEventSubscriber): Unsubscriber;
6
+ deregisterGlobalSubscriber(subscriber: IGlobalEventSubscriber): void;
7
+ registerSubscriber(subscriber: IEventSubscriber): Unsubscriber;
8
+ deregisterSubscriber(subscriber: IEventSubscriber): void;
9
+ getGlobalSubscribers(): IGlobalEventSubscriber[];
10
+ getSubscribers(): IEventSubscriber[];
11
+ getSubscribersForEvent<T extends AnyEvent = AnyEvent>(eventType: EventClass<T>): IEventSubscriber<T>[];
12
+ getAllSubscribersForEvent<T extends AnyEvent = AnyEvent>(eventType: EventClass<T>): (IGlobalEventSubscriber | IEventSubscriber<T>)[];
13
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,9 @@
1
+ import { AnyEvent, EventClass } from "../../core";
2
+ export interface IGlobalEventSubscriber {
3
+ handleEvent(event: AnyEvent): Promise<void>;
4
+ }
5
+ export interface IEventSubscriber<T extends AnyEvent = AnyEvent> {
6
+ subscribeToEvents(): EventClass<T> | EventClass<T>[];
7
+ handleEvent(event: T): Promise<void>;
8
+ }
9
+ export type EventSubscriberHandler<T extends AnyEvent = AnyEvent> = IEventSubscriber<T>["handleEvent"];
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ export * from "./event-publisher.interface";
2
+ export * from "./event-subscriber.interface";
3
+ export * from "./event-subscriber-registry.interface";
@@ -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("./event-publisher.interface"), exports);
18
+ __exportStar(require("./event-subscriber.interface"), exports);
19
+ __exportStar(require("./event-subscriber-registry.interface"), exports);
@@ -0,0 +1,8 @@
1
+ /// <reference types="src/#declarations" />
2
+ export * from "./base";
3
+ export * from "./meta";
4
+ export * from "./types";
5
+ export * from "./utils";
6
+ export * from "./core";
7
+ export * from "./event-pubsub";
8
+ export * from "./decorators";
@@ -0,0 +1,8 @@
1
+ import { AnyCommand, CommandHandler } from "../../core";
2
+ export declare class CommandHandlerMap extends Map<string, CommandHandler> {
3
+ }
4
+ export declare const OwnCommandHandlerMapMetaKey: unique symbol;
5
+ export declare const getOwnCommandHandlerMap: (target: object) => CommandHandlerMap;
6
+ export declare const defineCommandHandler: <T extends AnyCommand>(target: object, commandType: string, handler: CommandHandler<T>) => void;
7
+ export declare const CommandHandlerMapMetaKey: unique symbol;
8
+ export declare const getCommandHandlerMap: (target: object) => CommandHandlerMap;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCommandHandlerMap = exports.CommandHandlerMapMetaKey = exports.defineCommandHandler = exports.getOwnCommandHandlerMap = exports.OwnCommandHandlerMapMetaKey = exports.CommandHandlerMap = void 0;
4
+ class CommandHandlerMap extends Map {
5
+ }
6
+ exports.CommandHandlerMap = CommandHandlerMap;
7
+ exports.OwnCommandHandlerMapMetaKey = Symbol.for("OWN_COMMAND_HANDLER_MAP");
8
+ const getOwnCommandHandlerMap = (target) => {
9
+ const ownCommandHandlerMap = () => Reflect.getOwnMetadata(exports.OwnCommandHandlerMapMetaKey, target);
10
+ if (!ownCommandHandlerMap())
11
+ Reflect.defineMetadata(exports.OwnCommandHandlerMapMetaKey, new CommandHandlerMap(), target);
12
+ return ownCommandHandlerMap();
13
+ };
14
+ exports.getOwnCommandHandlerMap = getOwnCommandHandlerMap;
15
+ const defineCommandHandler = (target, commandType, handler) => {
16
+ const commandHandlersMap = (0, exports.getOwnCommandHandlerMap)(target);
17
+ commandHandlersMap.set(commandType, handler);
18
+ };
19
+ exports.defineCommandHandler = defineCommandHandler;
20
+ exports.CommandHandlerMapMetaKey = Symbol.for("COMMAND_HANDLER_MAP");
21
+ const getCommandHandlerMap = (target) => {
22
+ if (!Reflect.hasOwnMetadata(exports.CommandHandlerMapMetaKey, target)) {
23
+ const buildCommandHandlerMap = (target) => {
24
+ let _target = target;
25
+ const result = new CommandHandlerMap();
26
+ const ownCommandHandlerMaps = [];
27
+ do {
28
+ const ownCommandHandlerMap = (0, exports.getOwnCommandHandlerMap)(_target);
29
+ ownCommandHandlerMaps.unshift(ownCommandHandlerMap);
30
+ _target = Reflect.getPrototypeOf(_target);
31
+ } while (_target !== null);
32
+ ownCommandHandlerMaps.forEach((ownCommandHandlerMap) => {
33
+ ownCommandHandlerMap.forEach((commandHandler, commandType) => {
34
+ result.set(commandType, commandHandler);
35
+ });
36
+ });
37
+ return result;
38
+ };
39
+ Reflect.defineMetadata(exports.CommandHandlerMapMetaKey, buildCommandHandlerMap(target), target);
40
+ }
41
+ return Reflect.getOwnMetadata(exports.CommandHandlerMapMetaKey, target);
42
+ };
43
+ exports.getCommandHandlerMap = getCommandHandlerMap;
@@ -0,0 +1,9 @@
1
+ import "reflect-metadata";
2
+ import { AnyEvent, EventApplier } from "../../core";
3
+ export declare class EventApplierMap extends Map<string, EventApplier> {
4
+ }
5
+ export declare const OwnEventApplierMapMetaKey: unique symbol;
6
+ export declare const getOwnEventApplierMap: (target: object) => EventApplierMap;
7
+ export declare const defineEventApplier: <T extends AnyEvent>(target: object, eventType: string, applier: EventApplier<T>) => void;
8
+ export declare const EventApplierMapMetaKey: unique symbol;
9
+ export declare const getEventApplierMap: (target: object) => EventApplierMap;