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,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventSourcedAggregateBase = void 0;
4
+ const meta_1 = require("../../../meta");
5
+ const utils_1 = require("../../../utils");
6
+ const aggregate_base_1 = require("../aggregate-base");
7
+ const _1 = require(".");
8
+ class EventSourcedAggregateBase extends aggregate_base_1.AggregateBase {
9
+ static builder() {
10
+ return new _1.EventSourcedAggregateBuilder(this);
11
+ }
12
+ constructor(metadata, props) {
13
+ super(metadata, props);
14
+ this._handledCommands = [];
15
+ this._events = [];
16
+ this._pastEvents = [];
17
+ }
18
+ static ownEventApplierMap() {
19
+ return (0, meta_1.getOwnEventApplierMap)(this.prototype);
20
+ }
21
+ static eventApplierMap() {
22
+ return (0, meta_1.getEventApplierMap)(this.prototype);
23
+ }
24
+ static ownCommandHandlerMap() {
25
+ return (0, meta_1.getOwnCommandHandlerMap)(this.prototype);
26
+ }
27
+ static commandHandlerMap() {
28
+ return (0, meta_1.getCommandHandlerMap)(this.prototype);
29
+ }
30
+ modelDescriptor() {
31
+ const aggregateClass = this.constructor;
32
+ return {
33
+ ...super.modelDescriptor(),
34
+ ownEventApplierMap: aggregateClass.ownEventApplierMap(),
35
+ eventApplierMap: aggregateClass.eventApplierMap(),
36
+ ownCommandHandlerMap: aggregateClass.ownCommandHandlerMap(),
37
+ commandHandlerMap: aggregateClass.commandHandlerMap(),
38
+ };
39
+ }
40
+ version() {
41
+ return this._version + this._pastEvents.length + this._events.length;
42
+ }
43
+ pastEvents() {
44
+ return Array.from(this._pastEvents);
45
+ }
46
+ events() {
47
+ return Array.from(this._events);
48
+ }
49
+ handledCommands() {
50
+ return Array.from(this._handledCommands);
51
+ }
52
+ hasNewEvent() {
53
+ return Boolean(this._events.length);
54
+ }
55
+ getEventApplier(event) {
56
+ const { eventType } = event.modelDescriptor();
57
+ const { eventApplierMap } = this.modelDescriptor();
58
+ const applier = eventApplierMap.get(eventType);
59
+ if (!applier)
60
+ throw new Error("Event applier not found");
61
+ return applier;
62
+ }
63
+ validateEventBeforeApply(event) {
64
+ const { aggregateId, aggregateVersion } = event.source();
65
+ if (aggregateId !== this._id)
66
+ throw new Error("Invalid aggregate id");
67
+ if (aggregateVersion !== this.version())
68
+ throw new Error("Invalid aggregate version");
69
+ }
70
+ _applyEvent(event) {
71
+ const applier = this.getEventApplier(event);
72
+ this.validateEventBeforeApply(event);
73
+ applier.call(this, event);
74
+ }
75
+ applyPastEvent(event) {
76
+ if (this.hasNewEvent())
77
+ throw new Error("Cannot apply a past event when new event is recorded");
78
+ this._applyEvent(event);
79
+ this._pastEvents.push(event);
80
+ }
81
+ applyPastEvents(pastEvents) {
82
+ pastEvents.forEach((pastEvent) => {
83
+ this.applyPastEvent(pastEvent);
84
+ });
85
+ }
86
+ applyEvent(event) {
87
+ this._applyEvent(event);
88
+ this._events.push(event);
89
+ }
90
+ applyEvents(events) {
91
+ events.forEach((event) => {
92
+ this.applyEvent(event);
93
+ });
94
+ }
95
+ applyNewEvent(eventClass, props) {
96
+ this.applyEvent(this.newEvent(eventClass, props));
97
+ }
98
+ getCommandHandler(command) {
99
+ const { commandType } = command.modelDescriptor();
100
+ const { commandHandlerMap } = this.modelDescriptor();
101
+ const handler = commandHandlerMap.get(commandType);
102
+ if (!handler)
103
+ throw new Error("Command handler not found");
104
+ return handler;
105
+ }
106
+ handleCommand(command) {
107
+ const handler = this.getCommandHandler(command);
108
+ const events = (0, utils_1.toArray)(handler.call(this, command));
109
+ events.forEach((event) => {
110
+ event.setCausationId(command.id());
111
+ event.setCorrelationIds(command.correlationIds());
112
+ });
113
+ this.applyEvents(events);
114
+ this._handledCommands.push(command);
115
+ return events;
116
+ }
117
+ snapMetadata() {
118
+ return {
119
+ id: this.id(),
120
+ version: this.version(),
121
+ };
122
+ }
123
+ snap() {
124
+ if (this.propsIsEmpty())
125
+ throw new Error("Cannot create snapshot when the props is not initialized");
126
+ return {
127
+ metadata: this.snapMetadata(),
128
+ props: this.props(),
129
+ };
130
+ }
131
+ archiveEvents() {
132
+ const events = this.events();
133
+ this._events = [];
134
+ this._pastEvents.push(...events);
135
+ }
136
+ publishEvents(publisher) {
137
+ publisher.publish(this.events());
138
+ this.archiveEvents();
139
+ }
140
+ }
141
+ exports.EventSourcedAggregateBase = EventSourcedAggregateBase;
@@ -0,0 +1,2 @@
1
+ export * from "./event-sourced-aggregate";
2
+ export * from "./event-sourced-aggregate.builder";
@@ -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("./event-sourced-aggregate"), exports);
18
+ __exportStar(require("./event-sourced-aggregate.builder"), exports);
@@ -0,0 +1,8 @@
1
+ import { InferredProps } from "../../../base";
2
+ import { AnyEventSourcedAggregate, EventSourceAggregateMetadata } from "./event-sourced-aggregate";
3
+ export interface SnapshotMetadata extends EventSourceAggregateMetadata {
4
+ }
5
+ export interface Snapshot<T extends AnyEventSourcedAggregate> {
6
+ metadata: SnapshotMetadata;
7
+ props: InferredProps<T>;
8
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ export * from "./aggregate-base";
2
+ export * from "./state-aggregate";
3
+ export * from "./event-sourced-aggregate";
4
+ export * from "./types";
@@ -0,0 +1,20 @@
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-base"), exports);
18
+ __exportStar(require("./state-aggregate"), exports);
19
+ __exportStar(require("./event-sourced-aggregate"), exports);
20
+ __exportStar(require("./types"), exports);
@@ -0,0 +1,2 @@
1
+ export * from "./state-aggregate";
2
+ export * from "./state-aggregate.builder";
@@ -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("./state-aggregate"), exports);
18
+ __exportStar(require("./state-aggregate.builder"), exports);
@@ -0,0 +1,7 @@
1
+ import { AggregateBuilderBase } from "../aggregate-base";
2
+ import { AnyStateAggregate, StateAggregateClassWithTypedConstructor } from "./state-aggregate";
3
+ export declare class StateAggregateBuilder<T extends AnyStateAggregate> extends AggregateBuilderBase<T> {
4
+ private aggregateClass;
5
+ constructor(aggregateClass: StateAggregateClassWithTypedConstructor<T>);
6
+ build(): T;
7
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StateAggregateBuilder = void 0;
4
+ const aggregate_base_1 = require("../aggregate-base");
5
+ class StateAggregateBuilder extends aggregate_base_1.AggregateBuilderBase {
6
+ constructor(aggregateClass) {
7
+ super();
8
+ this.aggregateClass = aggregateClass;
9
+ }
10
+ build() {
11
+ if (!this.props)
12
+ throw new Error("The props must be set before build");
13
+ return new this.aggregateClass({
14
+ id: this.id,
15
+ version: this.version,
16
+ }, this.props);
17
+ }
18
+ }
19
+ exports.StateAggregateBuilder = StateAggregateBuilder;
@@ -0,0 +1,25 @@
1
+ import { Class } from "type-fest";
2
+ import { Props, InferredProps } from "../../../base";
3
+ import { ClassStatic } from "../../../types";
4
+ import { AnyEvent, EventClassWithTypedConstructor } from "../../message";
5
+ import { AggregateBase, AggregateMetadata, IAggregateEventPublisher } from "../aggregate-base";
6
+ import { StateAggregateBuilder } from ".";
7
+ export interface StateAggregateMetadata extends AggregateMetadata {
8
+ }
9
+ export declare class StateAggregateBase<P extends Props> extends AggregateBase<P> {
10
+ static builder<T extends AnyStateAggregate>(this: StateAggregateClass<T>): StateAggregateBuilder<T>;
11
+ private _events;
12
+ constructor(metadata: StateAggregateMetadata, props: P);
13
+ props(): P;
14
+ version(): number;
15
+ events(): AnyEvent[];
16
+ protected recordEvent<E extends AnyEvent>(event: E): void;
17
+ protected recordEvent<E extends AnyEvent>(eventClass: EventClassWithTypedConstructor<E>, props: InferredProps<E>): void;
18
+ clearEvents(): void;
19
+ publishEvents(publisher: IAggregateEventPublisher): void;
20
+ }
21
+ export type AnyStateAggregate = StateAggregateBase<Props>;
22
+ export interface StateAggregateClass<T extends AnyStateAggregate = AnyStateAggregate, Arguments extends unknown[] = any[]> extends Class<T, Arguments>, ClassStatic<typeof StateAggregateBase<InferredProps<T>>> {
23
+ }
24
+ export interface StateAggregateClassWithTypedConstructor<T extends AnyStateAggregate = AnyStateAggregate> extends StateAggregateClass<T, ConstructorParameters<typeof StateAggregateBase<InferredProps<T>>>> {
25
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StateAggregateBase = void 0;
4
+ const aggregate_base_1 = require("../aggregate-base");
5
+ const _1 = require(".");
6
+ class StateAggregateBase extends aggregate_base_1.AggregateBase {
7
+ static builder() {
8
+ return new _1.StateAggregateBuilder(this);
9
+ }
10
+ constructor(metadata, props) {
11
+ super(metadata, props);
12
+ this._events = [];
13
+ }
14
+ props() {
15
+ return super.props();
16
+ }
17
+ version() {
18
+ return this._version;
19
+ }
20
+ events() {
21
+ return Array.from(this._events);
22
+ }
23
+ recordEvent(param1, param2) {
24
+ let event;
25
+ if (typeof param1 === "function" && param2) {
26
+ event = this.newEvent(param1, param2);
27
+ }
28
+ else {
29
+ event = param1;
30
+ }
31
+ this._events.push(event);
32
+ }
33
+ clearEvents() {
34
+ this._events = [];
35
+ }
36
+ publishEvents(publisher) {
37
+ publisher.publish(this.events());
38
+ this.clearEvents();
39
+ }
40
+ }
41
+ exports.StateAggregateBase = StateAggregateBase;
@@ -0,0 +1,4 @@
1
+ import { AnyEventSourcedAggregate, EventSourcedAggregateClass } from "./event-sourced-aggregate/event-sourced-aggregate";
2
+ import { AnyStateAggregate, StateAggregateClass } from "./state-aggregate";
3
+ export type Aggregate = AnyStateAggregate | AnyEventSourcedAggregate;
4
+ export type AggregateClass = StateAggregateClass | EventSourcedAggregateClass;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ import { ModelWithIdBuilder } from "../model-with-id";
2
+ import { AnyEntity, EntityClassWithTypedConstructor } from "./entity";
3
+ export declare class EntityBuilder<T extends AnyEntity> extends ModelWithIdBuilder<T> {
4
+ private entityClass;
5
+ constructor(entityClass: EntityClassWithTypedConstructor<T>);
6
+ build(): T;
7
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EntityBuilder = void 0;
4
+ const model_with_id_1 = require("../model-with-id");
5
+ class EntityBuilder extends model_with_id_1.ModelWithIdBuilder {
6
+ constructor(entityClass) {
7
+ super();
8
+ this.entityClass = entityClass;
9
+ }
10
+ build() {
11
+ if (!this.props)
12
+ throw new Error("The props must be set before build");
13
+ return new this.entityClass({ id: this.id }, this.props);
14
+ }
15
+ }
16
+ exports.EntityBuilder = EntityBuilder;
@@ -0,0 +1,18 @@
1
+ import { Class } from "type-fest";
2
+ import { Props, InferredProps } from "../../base";
3
+ import { ClassStatic } from "../../types";
4
+ import { ModelWithId, ModelWithIdMetadata } from "../model-with-id";
5
+ import { EntityBuilder } from ".";
6
+ export interface EntityMetadata extends ModelWithIdMetadata {
7
+ }
8
+ export declare class EntityBase<P extends Props> extends ModelWithId<P> {
9
+ static builder<T extends AnyEntity>(this: EntityClass<T>): EntityBuilder<T>;
10
+ constructor(metadata: EntityMetadata, props: P);
11
+ }
12
+ export type AnyEntity = EntityBase<Props>;
13
+ export interface EntityClass<T extends AnyEntity = AnyEntity, Arguments extends unknown[] = any[]> extends Class<T, Arguments>, ClassStatic<typeof EntityBase<InferredProps<T>>> {
14
+ }
15
+ export interface EntityClassWithTypedConstructor<T extends AnyEntity = AnyEntity> extends EntityClass<T, ConstructorParameters<typeof EntityBase<InferredProps<T>>>> {
16
+ }
17
+ export interface EntityClassWithProps<P extends Props> extends EntityClass<EntityBase<P>> {
18
+ }
@@ -0,0 +1,29 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EntityBase = void 0;
13
+ const base_1 = require("../../base");
14
+ const model_with_id_1 = require("../model-with-id");
15
+ const _1 = require(".");
16
+ let EntityBase = class EntityBase extends model_with_id_1.ModelWithId {
17
+ static builder() {
18
+ return new _1.EntityBuilder(this);
19
+ }
20
+ constructor(metadata, props) {
21
+ super(metadata);
22
+ this.initializeProps(props);
23
+ }
24
+ };
25
+ exports.EntityBase = EntityBase;
26
+ exports.EntityBase = EntityBase = __decorate([
27
+ (0, base_1.Mutable)(true),
28
+ __metadata("design:paramtypes", [Object, Object])
29
+ ], EntityBase);
@@ -0,0 +1,2 @@
1
+ export * from "./entity";
2
+ export * from "./entity.builder";
@@ -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("./entity"), exports);
18
+ __exportStar(require("./entity.builder"), exports);
@@ -0,0 +1,9 @@
1
+ import { ModelBuilder } from "../../base";
2
+ import { AnyEnum, EnumClass, EnumValue } from "./enum";
3
+ export declare class EnumBuilder<T extends AnyEnum> extends ModelBuilder<T> {
4
+ private enumClass;
5
+ protected _value?: EnumValue;
6
+ constructor(enumClass: EnumClass<T>);
7
+ withValue(value: EnumValue): this;
8
+ build(): T;
9
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnumBuilder = void 0;
4
+ const base_1 = require("../../base");
5
+ class EnumBuilder extends base_1.ModelBuilder {
6
+ constructor(enumClass) {
7
+ super();
8
+ this.enumClass = enumClass;
9
+ }
10
+ withValue(value) {
11
+ this._value = value;
12
+ return this;
13
+ }
14
+ build() {
15
+ if (!this._value)
16
+ throw new Error("Cannot parse enum without value");
17
+ const { enumClass } = this;
18
+ let result;
19
+ enumClass.ownModelStaticValues().forEach((staticValue) => {
20
+ if (staticValue.value instanceof enumClass) {
21
+ const staticEnum = staticValue.value;
22
+ if (staticEnum.value === this._value && !result) {
23
+ result = staticEnum;
24
+ }
25
+ }
26
+ });
27
+ if (!result)
28
+ throw new Error(`Invalid provided value for enum ${enumClass.modelName()}`);
29
+ return result;
30
+ }
31
+ }
32
+ exports.EnumBuilder = EnumBuilder;
@@ -0,0 +1,22 @@
1
+ import { Class } from "type-fest";
2
+ import { ModelBase } from "../../base";
3
+ import { ClassStatic } from "../../types";
4
+ import { EnumBuilder } from ".";
5
+ export type EnumValue = string | number;
6
+ export interface EnumProps {
7
+ value: EnumValue;
8
+ }
9
+ export declare class EnumBase extends ModelBase<EnumProps> {
10
+ static builder<T extends AnyEnum>(this: EnumClass<T>): EnumBuilder<T>;
11
+ static values(): EnumBase[];
12
+ static from<T extends AnyEnum>(this: EnumClass<T>, value: EnumValue): T;
13
+ static fromSafe<T extends AnyEnum>(this: EnumClass<T>, value: EnumValue): T | null;
14
+ constructor(value: EnumValue);
15
+ value: EnumValue;
16
+ valueOf(): EnumValue;
17
+ }
18
+ export type AnyEnum = EnumBase;
19
+ export interface EnumClass<T extends AnyEnum = AnyEnum, Arguments extends unknown[] = any[]> extends Class<T, Arguments>, ClassStatic<typeof EnumBase> {
20
+ }
21
+ export interface EnumClassWithTypedConstructor<T extends AnyEnum = AnyEnum> extends EnumClass<T, ConstructorParameters<typeof EnumBase>> {
22
+ }
@@ -0,0 +1,44 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EnumBase = void 0;
13
+ const base_1 = require("../../base");
14
+ const _1 = require(".");
15
+ let EnumBase = class EnumBase extends base_1.ModelBase {
16
+ static builder() {
17
+ return new _1.EnumBuilder(this);
18
+ }
19
+ static values() {
20
+ return Array.from(this.ownModelStaticValues().values()).map((staticValue) => staticValue.value);
21
+ }
22
+ static from(value) {
23
+ return this.builder().withValue(value).build();
24
+ }
25
+ static fromSafe(value) {
26
+ return this.builder().withValue(value).buildSafe();
27
+ }
28
+ constructor(value) {
29
+ super();
30
+ this.initializeProps({ value });
31
+ }
32
+ valueOf() {
33
+ return this.value;
34
+ }
35
+ };
36
+ exports.EnumBase = EnumBase;
37
+ __decorate([
38
+ (0, base_1.Prop)(),
39
+ __metadata("design:type", Object)
40
+ ], EnumBase.prototype, "value", void 0);
41
+ exports.EnumBase = EnumBase = __decorate([
42
+ (0, base_1.Mutable)(false),
43
+ __metadata("design:paramtypes", [Object])
44
+ ], EnumBase);
@@ -0,0 +1,2 @@
1
+ export * from "./enum";
2
+ export * from "./enum-builder";
@@ -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("./enum"), exports);
18
+ __exportStar(require("./enum-builder"), exports);
@@ -0,0 +1,7 @@
1
+ export * from "./value-object";
2
+ export * from "./enum";
3
+ export * from "./model-with-id";
4
+ export * from "./entity";
5
+ export * from "./aggregate";
6
+ export * from "./message";
7
+ export * from "./repository";
@@ -0,0 +1,23 @@
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("./value-object"), exports);
18
+ __exportStar(require("./enum"), exports);
19
+ __exportStar(require("./model-with-id"), exports);
20
+ __exportStar(require("./entity"), exports);
21
+ __exportStar(require("./aggregate"), exports);
22
+ __exportStar(require("./message"), exports);
23
+ __exportStar(require("./repository"), exports);
@@ -0,0 +1,6 @@
1
+ import { AnyCommand } from "./command";
2
+ import { CommandType } from "../../../meta";
3
+ import { ModelDescriptor } from "../../../base";
4
+ export interface CommandModelDescriptor<T extends AnyCommand> extends ModelDescriptor<T> {
5
+ commandType: CommandType;
6
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ import { AnyCommand, CommandClassWithTypedConstructor } from "./command";
2
+ import { MessageBuilderBase } from "../message-base";
3
+ export declare class CommandBuilder<T extends AnyCommand> extends MessageBuilderBase<T> {
4
+ private commandClass;
5
+ constructor(commandClass: CommandClassWithTypedConstructor<T>);
6
+ build(): T;
7
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CommandBuilder = void 0;
4
+ const message_base_1 = require("../message-base");
5
+ class CommandBuilder extends message_base_1.MessageBuilderBase {
6
+ constructor(commandClass) {
7
+ super();
8
+ this.commandClass = commandClass;
9
+ }
10
+ build() {
11
+ if (!this.props)
12
+ throw new Error("The props must be set before build");
13
+ return new this.commandClass({
14
+ id: this.id,
15
+ timestamp: this.timestamp,
16
+ causationId: this.causationId,
17
+ correlationIds: this.correlationIds,
18
+ }, this.props);
19
+ }
20
+ }
21
+ exports.CommandBuilder = CommandBuilder;