@event-nest/core 2.0.0 → 3.0.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.
package/README.md CHANGED
@@ -123,7 +123,7 @@ An event is a representation of something that has happened in the past. It is i
123
123
  Each event serves three purposes :
124
124
  * It will be persisted so that it can be used to reconstruct the state of an aggregate root
125
125
  * It will be passed to any internal subscribers that need to react to this event (e.g. updating the read model)
126
- * When it's time to recreate the aggregate root, the event will be processed by the correct method in the aggregate root
126
+ * When it's time to recreate the aggregate root, the event will be applied by the correct method in the aggregate root
127
127
 
128
128
  There is no specific requirement for the structure of an event, but it is recommended to keep it simple and immutable. The [class-transformer](https://github.com/typestack/class-transformer) library is utilized under the hood to save and read the events from the database. Therefore, your event classes should adhere to the rules of class-transformer to be properly serialized and deserialized.
129
129
 
@@ -175,7 +175,7 @@ export class UserUpdatedEvent {
175
175
  We start this example by defining two simple events for a user: a creation event and an update event. Each one has its own data, and they are identified by a unique name which is set with the `@DomainEvent` decorator.
176
176
 
177
177
  ```typescript
178
- import { AggregateRoot, AggregateRootName, EventProcessor, StoredEvent } from "@event-nest/core";
178
+ import { AggregateRoot, AggregateRootName, ApplyEvent, StoredEvent } from "@event-nest/core";
179
179
 
180
180
  @AggregateRootName("User")
181
181
  export class User extends AggregateRoot {
@@ -189,7 +189,7 @@ export class User extends AggregateRoot {
189
189
  public static createNew(id: string, name: string, email: string): User {
190
190
  const user = new User(id);
191
191
  const event = new UserCreatedEvent(name, email);
192
- user.processUserCreatedEvent(event);
192
+ user.applyUserCreatedEvent(event);
193
193
  user.append(event);
194
194
  return user;
195
195
  }
@@ -202,18 +202,18 @@ export class User extends AggregateRoot {
202
202
 
203
203
  public update(newName: string) {
204
204
  const event = new UserUpdatedEvent(newName);
205
- this.processUserUpdatedEvent(event);
205
+ this.applyUserUpdatedEvent(event);
206
206
  this.append(event);
207
207
  }
208
208
 
209
- @EventProcessor(UserCreatedEvent)
210
- private processUserCreatedEvent = (event: UserCreatedEvent) => {
209
+ @ApplyEvent(UserCreatedEvent)
210
+ private applyUserCreatedEvent = (event: UserCreatedEvent) => {
211
211
  this.name = event.name;
212
212
  this.email = event.email;
213
213
  };
214
214
 
215
- @EventProcessor(UserUpdatedEvent)
216
- private processUserUpdatedEvent = (event: UserUpdatedEvent) => {
215
+ @ApplyEvent(UserUpdatedEvent)
216
+ private applyUserUpdatedEvent = (event: UserUpdatedEvent) => {
217
217
  this.name = event.newName;
218
218
  };
219
219
 
@@ -232,7 +232,7 @@ In our case, we have the following creation cases :
232
232
 
233
233
  The `reconstitute` method will initiate the event processing based on the events order.
234
234
 
235
- To process each event, we have defined two private methods which are decorated with the `@EventProcessor` decorator. Each method will be called when the corresponding event is retrieved, and it's ready to be processed.
235
+ To apply each event, we have defined two private methods which are decorated with the `@ApplyEvent` decorator. Each method will be called when the corresponding event is retrieved, and it's ready to be processed.
236
236
  This is the place to update the object's internal state based on the event's data. **Make sure that these methods are defined as arrow functions, otherwise they won't be called.**
237
237
 
238
238
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event-nest/core",
3
- "version": "2.0.0",
3
+ "version": "3.0.0",
4
4
  "license": "MIT",
5
5
  "author": "Nick Tsitlakidis",
6
6
  "description": "Event sourcing module for NestJS. It provides a set of decorators and classes to build an application based on event sourcing.",
@@ -32,4 +32,4 @@
32
32
  "class-transformer": "^0.5.1"
33
33
  },
34
34
  "main": "./src/index.js"
35
- }
35
+ }
package/src/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export * from "./lib/aggregate-root/aggregate-root";
2
2
  export * from "./lib/aggregate-root/aggregate-root-name";
3
- export * from "./lib/aggregate-root/event-processor";
3
+ export * from "./lib/aggregate-root/apply-event.decorator";
4
4
  export * from "./lib/exceptions/event-name-conflict-exception";
5
5
  export * from "./lib/exceptions/unknown-event-exception";
6
6
  export * from "./lib/exceptions/missing-aggregate-root-name-exception";
package/src/index.js CHANGED
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./lib/aggregate-root/aggregate-root"), exports);
5
5
  tslib_1.__exportStar(require("./lib/aggregate-root/aggregate-root-name"), exports);
6
- tslib_1.__exportStar(require("./lib/aggregate-root/event-processor"), exports);
6
+ tslib_1.__exportStar(require("./lib/aggregate-root/apply-event.decorator"), exports);
7
7
  tslib_1.__exportStar(require("./lib/exceptions/event-name-conflict-exception"), exports);
8
8
  tslib_1.__exportStar(require("./lib/exceptions/unknown-event-exception"), exports);
9
9
  tslib_1.__exportStar(require("./lib/exceptions/missing-aggregate-root-name-exception"), exports);
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/core/src/index.ts"],"names":[],"mappings":";;;AAAA,8EAAoD;AACpD,mFAAyD;AACzD,+EAAqD;AAErD,yFAA+D;AAC/D,mFAAyD;AACzD,iGAAuE;AACvE,uFAA6D;AAE7D,6DAAmC;AACnC,uEAA6C;AAC7C,0EAAgD;AAEhD,gEAAsC;AACtC,qEAA2C;AAC3C,oEAA0C;AAE1C,qEAA2C;AAC3C,8EAAoD;AACpD,6EAAmD;AACnD,oEAA0C;AAE1C,iEAAuC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/core/src/index.ts"],"names":[],"mappings":";;;AAAA,8EAAoD;AACpD,mFAAyD;AACzD,qFAA2D;AAE3D,yFAA+D;AAC/D,mFAAyD;AACzD,iGAAuE;AACvE,uFAA6D;AAE7D,6DAAmC;AACnC,uEAA6C;AAC7C,0EAAgD;AAEhD,gEAAsC;AACtC,qEAA2C;AAC3C,oEAA0C;AAE1C,qEAA2C;AAC3C,8EAAoD;AACpD,6EAAmD;AACnD,oEAA0C;AAE1C,iEAAuC"}
@@ -6,7 +6,7 @@ const domain_event_registrations_1 = require("../domain-event-registrations");
6
6
  const unknown_event_exception_1 = require("../exceptions/unknown-event-exception");
7
7
  const unregistered_event_exception_1 = require("../exceptions/unregistered-event-exception");
8
8
  const type_utils_1 = require("../utils/type-utils");
9
- const event_processor_1 = require("./event-processor");
9
+ const reflection_1 = require("./reflection");
10
10
  class AggregateRoot {
11
11
  constructor(_id, logger) {
12
12
  this._id = _id;
@@ -64,13 +64,14 @@ class AggregateRoot {
64
64
  * handlers will be called to take care of async updates.
65
65
  * Call this once all the events you want, have been appended.
66
66
  */
67
- commit() {
67
+ async commit() {
68
68
  const toPublish = this._appendedEvents.slice(0);
69
- this._appendedEvents = [];
70
69
  if (toPublish.length > 0) {
71
- return this.publish(toPublish).then(() => Promise.resolve(this));
70
+ await this.publish(toPublish);
71
+ this._appendedEvents = [];
72
+ return this;
72
73
  }
73
- return Promise.resolve(this);
74
+ return this;
74
75
  }
75
76
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
76
77
  publish(events) {
@@ -120,7 +121,7 @@ class AggregateRoot {
120
121
  unregistered.push(ev.eventName);
121
122
  }
122
123
  else {
123
- const processorKey = (0, event_processor_1.getDecoratedPropertyKey)(this, eventClass);
124
+ const processorKey = (0, reflection_1.getDecoratedPropertyKey)(this, eventClass);
124
125
  if ((0, type_utils_1.isNil)(processorKey)) {
125
126
  missingProcessor.push(ev.eventName);
126
127
  }
@@ -1 +1 @@
1
- {"version":3,"file":"aggregate-root.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/aggregate-root/aggregate-root.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAExC,8EAA4E;AAC5E,mFAA8E;AAC9E,6FAAwF;AAExF,oDAA4C;AAE5C,uDAA4D;AAO5D,MAAsB,aAAa;IAK/B,YACqB,GAAW,EAC5B,MAAe;QADE,QAAG,GAAH,GAAG,CAAQ;QAG5B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,IAAA,kBAAK,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,eAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,EAAE;QACF,OAAO,IAAI,CAAC,GAAG,CAAC;IACpB,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;;;;;;OAOG;IACH;;;OAGG;IACH,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAa;QAChB,IAAI,CAAC,IAAA,yCAAY,EAAC,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,WAAW,CAAC,IAAI,qBAAqB,CAAC,CAAC;YACxE,MAAM,IAAI,yDAA0B,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YACtB,eAAe,EAAE,IAAI,CAAC,EAAE;YACxB,UAAU,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,OAAO,EAAE,KAAK;SACjB,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACH,MAAM;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,6DAA6D;IAC7D,OAAO,CAAC,MAAyC;QAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,OAAO,OAAO,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC;IAClE,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,MAA0B;QACnC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,YAAY,EAAE,gBAAgB,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAE1F,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzD,MAAM,CAAC,GAAG,IAAI,+CAAqB,CAAC,YAAY,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC7E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC7B,MAAM,CAAC,CAAC;YACZ,CAAC;YAED,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACpB,IAAI,CAAC;oBACA,IAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACrD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sEAAsE,KAAK,EAAE,CAAC,CAAC;oBACjG,MAAM,KAAK,CAAC;gBAChB,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;IACL,CAAC;IAED,cAAc,CAAC,MAA0B;QACrC,MAAM,MAAM,GAAuB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,oBAAoB,GAAG,EAAE,CAAC,oBAAoB,CAAC,CAAC;QAC9G,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;IAC7D,CAAC;IAES,UAAU,CAAC,MAA0B;QAC3C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,oBAAoB,GAAG,EAAE,CAAC,oBAAoB,CAAC,CAAC;IACtF,CAAC;IAEO,WAAW,CAAC,MAA0B;QAC1C,MAAM,KAAK,GAAsB,EAAE,CAAC;QACpC,MAAM,YAAY,GAAkB,EAAE,CAAC;QACvC,MAAM,gBAAgB,GAAkB,EAAE,CAAC;QAE3C,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAClB,MAAM,UAAU,GAAG,IAAA,0CAAa,EAAC,EAAE,CAAC,SAAS,CAAC,CAAC;YAC/C,IAAI,IAAA,kBAAK,EAAC,UAAU,CAAC,EAAE,CAAC;gBACpB,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACJ,MAAM,YAAY,GAAG,IAAA,yCAAuB,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAC/D,IAAI,IAAA,kBAAK,EAAC,YAAY,CAAC,EAAE,CAAC;oBACtB,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;gBACxC,CAAC;qBAAM,CAAC;oBACJ,KAAK,CAAC,IAAI,CAAC;wBACP,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC;wBACpC,YAAY;qBACf,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,YAAY,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;CACJ;AAlJD,sCAkJC"}
1
+ {"version":3,"file":"aggregate-root.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/aggregate-root/aggregate-root.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import "reflect-metadata";
2
+ import { ClassConstructor } from "class-transformer";
3
+ /**
4
+ * A decorator to mark that a method is used to apply a specific event to an aggregate root.
5
+ * When an aggregate root has to be reconstituted based on persisted events, these methods
6
+ * are called to process the events.
7
+ *
8
+ * @param eventClass The class of the event to be applied.
9
+ * @constructor
10
+ */
11
+ export declare function ApplyEvent(eventClass: ClassConstructor<unknown>): PropertyDecorator;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApplyEvent = void 0;
4
+ require("reflect-metadata");
5
+ const metadata_keys_1 = require("../metadata-keys");
6
+ /**
7
+ * A decorator to mark that a method is used to apply a specific event to an aggregate root.
8
+ * When an aggregate root has to be reconstituted based on persisted events, these methods
9
+ * are called to process the events.
10
+ *
11
+ * @param eventClass The class of the event to be applied.
12
+ * @constructor
13
+ */
14
+ function ApplyEvent(eventClass) {
15
+ return (propertyParent, propertyKey) => {
16
+ Reflect.defineMetadata(metadata_keys_1.APPLY_EVENT_DECORATOR_KEY + "-" + propertyKey.toString(), { eventClass: eventClass, key: propertyKey }, propertyParent);
17
+ };
18
+ }
19
+ exports.ApplyEvent = ApplyEvent;
20
+ //# sourceMappingURL=apply-event.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-event.decorator.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/aggregate-root/apply-event.decorator.ts"],"names":[],"mappings":";;;AAAA,4BAA0B;AAI1B,oDAA6D;AAE7D;;;;;;;GAOG;AACH,SAAgB,UAAU,CAAC,UAAqC;IAC5D,OAAO,CAAC,cAAc,EAAE,WAAW,EAAE,EAAE;QACnC,OAAO,CAAC,cAAc,CAClB,yCAAyB,GAAG,GAAG,GAAG,WAAW,CAAC,QAAQ,EAAE,EACxD,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,EAC5C,cAAc,CACjB,CAAC;IACN,CAAC,CAAC;AACN,CAAC;AARD,gCAQC"}
@@ -0,0 +1,4 @@
1
+ import "reflect-metadata";
2
+ import { ClassConstructor } from "class-transformer";
3
+ import { AggregateRoot } from "./aggregate-root";
4
+ export declare function getDecoratedPropertyKey(entity: AggregateRoot, eventClass: ClassConstructor<unknown>): string | undefined;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDecoratedPropertyKey = void 0;
4
+ require("reflect-metadata");
5
+ function getDecoratedPropertyKey(entity, eventClass) {
6
+ const metadataKeys = Reflect.getMetadataKeys(entity);
7
+ if (!metadataKeys || metadataKeys.length == 0) {
8
+ return undefined;
9
+ }
10
+ const matchingKey = metadataKeys.find((metadataKey) => {
11
+ const metadata = Reflect.getMetadata(metadataKey, entity);
12
+ return metadata.eventClass === eventClass;
13
+ });
14
+ if (!matchingKey) {
15
+ return undefined;
16
+ }
17
+ return Reflect.getMetadata(matchingKey, entity).key;
18
+ }
19
+ exports.getDecoratedPropertyKey = getDecoratedPropertyKey;
20
+ //# sourceMappingURL=reflection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflection.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/aggregate-root/reflection.ts"],"names":[],"mappings":";;;AAAA,4BAA0B;AAM1B,SAAgB,uBAAuB,CACnC,MAAqB,EACrB,UAAqC;IAErC,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC5C,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC1D,OAAO,QAAQ,CAAC,UAAU,KAAK,UAAU,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC;AACxD,CAAC;AAnBD,0DAmBC"}
@@ -8,7 +8,7 @@ const DomainEventSubscription = (...events) => {
8
8
  return (target) => {
9
9
  events.forEach((event) => {
10
10
  if (!Reflect.hasOwnMetadata(metadata_keys_1.DOMAIN_EVENT_KEY, event)) {
11
- Reflect.defineMetadata(metadata_keys_1.DOMAIN_EVENT_KEY, { eventSubscriptionId: (0, crypto_1.randomUUID)() }, event);
11
+ Reflect.defineMetadata(metadata_keys_1.DOMAIN_EVENT_KEY, { eventSubscriptionId: `${event.name}-${(0, crypto_1.randomUUID)()}` }, event);
12
12
  }
13
13
  });
14
14
  Reflect.defineMetadata(metadata_keys_1.DOMAIN_EVENT_SUBSCRIPTION_KEY, { events }, target);
@@ -1 +1 @@
1
- {"version":3,"file":"domain-event-subscription.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/domain-event-subscription.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AAEpC,mDAAkF;AAElF,mDAA2C;AAEpC,MAAM,uBAAuB,GAAG,CAAC,GAAG,MAAa,EAAkB,EAAE;IACxE,OAAO,CAAC,MAAc,EAAE,EAAE;QACtB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,gCAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;gBACnD,OAAO,CAAC,cAAc,CAAC,gCAAgB,EAAE,EAAE,mBAAmB,EAAE,IAAA,mBAAU,GAAE,EAAE,EAAE,KAAK,CAAC,CAAC;YAC3F,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,cAAc,CAAC,6CAA6B,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC,CAAC;AACN,CAAC,CAAC;AAVW,QAAA,uBAAuB,2BAUlC;AAEF,SAAgB,yBAAyB,CAAC,cAAsB;IAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,6CAA6B,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACtG,OAAO,WAAW,IAAI,OAAQ,cAAyC,CAAC,aAAa,KAAK,UAAU,CAAC;AACzG,CAAC;AAHD,8DAGC;AAED,SAAgB,oCAAoC,CAAC,oBAA4C;IAC7F,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,6CAA6B,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACtG,OAAO,IAAA,kBAAK,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AAClD,CAAC;AAHD,oFAGC;AAED,wDAAwD;AACxD,SAAgB,UAAU,CAAC,gBAA0B;IACjD,OAAO,OAAO,CAAC,WAAW,CAAC,gCAAgB,EAAE,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;AACxF,CAAC;AAFD,gCAEC"}
1
+ {"version":3,"file":"domain-event-subscription.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/domain-event-subscription.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AAEpC,mDAAkF;AAElF,mDAA2C;AAEpC,MAAM,uBAAuB,GAAG,CAAC,GAAG,MAAa,EAAkB,EAAE;IACxE,OAAO,CAAC,MAAc,EAAE,EAAE;QACtB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,gCAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;gBACnD,OAAO,CAAC,cAAc,CAClB,gCAAgB,EAChB,EAAE,mBAAmB,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,IAAA,mBAAU,GAAE,EAAE,EAAE,EACxD,KAAK,CACR,CAAC;YACN,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,cAAc,CAAC,6CAA6B,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC,CAAC;AACN,CAAC,CAAC;AAdW,QAAA,uBAAuB,2BAclC;AAEF,SAAgB,yBAAyB,CAAC,cAAsB;IAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,6CAA6B,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACtG,OAAO,WAAW,IAAI,OAAQ,cAAyC,CAAC,aAAa,KAAK,UAAU,CAAC;AACzG,CAAC;AAHD,8DAGC;AAED,SAAgB,oCAAoC,CAAC,oBAA4C;IAC7F,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,6CAA6B,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACtG,OAAO,IAAA,kBAAK,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AAClD,CAAC;AAHD,oFAGC;AAED,wDAAwD;AACxD,SAAgB,UAAU,CAAC,gBAA0B;IACjD,OAAO,OAAO,CAAC,WAAW,CAAC,gCAAgB,EAAE,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;AACxF,CAAC;AAFD,gCAEC"}
@@ -1,3 +1,3 @@
1
1
  export declare class UnknownEventException extends Error {
2
- constructor(unregisteredEventNames: Array<string>, missingProcessorEventNames: Array<string>, aggregateRootId: string);
2
+ constructor(unregisteredEventNames: Array<string>, missingApplyEventNames: Array<string>, aggregateRootId: string);
3
3
  }
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UnknownEventException = void 0;
4
4
  class UnknownEventException extends Error {
5
- constructor(unregisteredEventNames, missingProcessorEventNames, aggregateRootId) {
6
- super(`Found unknown events for aggregate root ${aggregateRootId}. Unregistered : ${unregisteredEventNames.join(", ")}. Missing processor: ${missingProcessorEventNames.join(", ")}`);
5
+ constructor(unregisteredEventNames, missingApplyEventNames, aggregateRootId) {
6
+ super(`Found unknown events for aggregate root ${aggregateRootId}. Unregistered : ${unregisteredEventNames.join(", ")}. Missing apply method: ${missingApplyEventNames.join(", ")}`);
7
7
  }
8
8
  }
9
9
  exports.UnknownEventException = UnknownEventException;
@@ -1 +1 @@
1
- {"version":3,"file":"unknown-event-exception.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/exceptions/unknown-event-exception.ts"],"names":[],"mappings":";;;AAAA,MAAa,qBAAsB,SAAQ,KAAK;IAC5C,YACI,sBAAqC,EACrC,0BAAyC,EACzC,eAAuB;QAEvB,KAAK,CACD,2CAA2C,eAAe,oBAAoB,sBAAsB,CAAC,IAAI,CACrG,IAAI,CACP,wBAAwB,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnE,CAAC;IACN,CAAC;CACJ;AAZD,sDAYC"}
1
+ {"version":3,"file":"unknown-event-exception.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/exceptions/unknown-event-exception.ts"],"names":[],"mappings":";;;AAAA,MAAa,qBAAsB,SAAQ,KAAK;IAC5C,YAAY,sBAAqC,EAAE,sBAAqC,EAAE,eAAuB;QAC7G,KAAK,CACD,2CAA2C,eAAe,oBAAoB,sBAAsB,CAAC,IAAI,CACrG,IAAI,CACP,2BAA2B,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClE,CAAC;IACN,CAAC;CACJ;AARD,sDAQC"}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UnregisteredEventException = void 0;
4
4
  class UnregisteredEventException extends Error {
5
5
  constructor(eventClassName) {
6
- super(`${eventClassName} is not registered to be processed. Use @RegisteredEvent decorator to register it.`);
6
+ super(`${eventClassName} is not registered to be processed. Use the @DomainEvent decorator to register it.`);
7
7
  }
8
8
  }
9
9
  exports.UnregisteredEventException = UnregisteredEventException;
@@ -1,4 +1,4 @@
1
- export declare const EVENT_PROCESSOR_KEY = "event-nest-process-event-meta";
1
+ export declare const APPLY_EVENT_DECORATOR_KEY = "event-nest-process-event-meta";
2
2
  export declare const DOMAIN_EVENT_SUBSCRIPTION_KEY = "event-nest-domain-event-subscription-meta";
3
3
  export declare const DOMAIN_EVENT_KEY = "event-nest-domain-event-meta";
4
4
  export declare const AGGREGATE_ROOT_NAME_KEY = "event-nest-aggregate-root-name-meta";
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AGGREGATE_ROOT_NAME_KEY = exports.DOMAIN_EVENT_KEY = exports.DOMAIN_EVENT_SUBSCRIPTION_KEY = exports.EVENT_PROCESSOR_KEY = void 0;
4
- exports.EVENT_PROCESSOR_KEY = "event-nest-process-event-meta";
3
+ exports.AGGREGATE_ROOT_NAME_KEY = exports.DOMAIN_EVENT_KEY = exports.DOMAIN_EVENT_SUBSCRIPTION_KEY = exports.APPLY_EVENT_DECORATOR_KEY = void 0;
4
+ exports.APPLY_EVENT_DECORATOR_KEY = "event-nest-process-event-meta";
5
5
  exports.DOMAIN_EVENT_SUBSCRIPTION_KEY = "event-nest-domain-event-subscription-meta";
6
6
  exports.DOMAIN_EVENT_KEY = "event-nest-domain-event-meta";
7
7
  exports.AGGREGATE_ROOT_NAME_KEY = "event-nest-aggregate-root-name-meta";
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-keys.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/metadata-keys.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG,+BAA+B,CAAC;AACtD,QAAA,6BAA6B,GAAG,2CAA2C,CAAC;AAC5E,QAAA,gBAAgB,GAAG,8BAA8B,CAAC;AAClD,QAAA,uBAAuB,GAAG,qCAAqC,CAAC"}
1
+ {"version":3,"file":"metadata-keys.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/metadata-keys.ts"],"names":[],"mappings":";;;AAAa,QAAA,yBAAyB,GAAG,+BAA+B,CAAC;AAC5D,QAAA,6BAA6B,GAAG,2CAA2C,CAAC;AAC5E,QAAA,gBAAgB,GAAG,8BAA8B,CAAC;AAClD,QAAA,uBAAuB,GAAG,qCAAqC,CAAC"}
@@ -1,4 +1,7 @@
1
1
  import { AggregateRootEvent } from "./aggregate-root/aggregate-root-event";
2
+ /**
3
+ * Represents an event that has passed through an aggregate root and it has been commited and published to the event store.
4
+ */
2
5
  export interface PublishedDomainEvent<T> extends AggregateRootEvent<T> {
3
6
  /**
4
7
  * The unique id of the event
@@ -1,13 +0,0 @@
1
- import "reflect-metadata";
2
- import { ClassConstructor } from "class-transformer";
3
- import { AggregateRoot } from "./aggregate-root";
4
- export declare function getDecoratedPropertyKey(entity: AggregateRoot, eventClass: ClassConstructor<unknown>): string | undefined;
5
- /**
6
- * A decorator to mark a method as an event processor.
7
- * When an aggregate root has to be recreated based on database events, these methods
8
- * are called to process the events.
9
- *
10
- * @param eventClass The event class that this method processes.
11
- * @constructor
12
- */
13
- export declare function EventProcessor(eventClass: ClassConstructor<unknown>): PropertyDecorator;
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EventProcessor = exports.getDecoratedPropertyKey = void 0;
4
- require("reflect-metadata");
5
- const metadata_keys_1 = require("../metadata-keys");
6
- function getDecoratedPropertyKey(entity, eventClass) {
7
- const metadataKeys = Reflect.getMetadataKeys(entity);
8
- if (!metadataKeys || metadataKeys.length == 0) {
9
- return undefined;
10
- }
11
- const matchingKey = metadataKeys.find((metadataKey) => {
12
- const metadata = Reflect.getMetadata(metadataKey, entity);
13
- return metadata.eventClass === eventClass;
14
- });
15
- if (!matchingKey) {
16
- return undefined;
17
- }
18
- return Reflect.getMetadata(matchingKey, entity).key;
19
- }
20
- exports.getDecoratedPropertyKey = getDecoratedPropertyKey;
21
- /**
22
- * A decorator to mark a method as an event processor.
23
- * When an aggregate root has to be recreated based on database events, these methods
24
- * are called to process the events.
25
- *
26
- * @param eventClass The event class that this method processes.
27
- * @constructor
28
- */
29
- function EventProcessor(eventClass) {
30
- return (propertyParent, propertyKey) => {
31
- Reflect.defineMetadata(metadata_keys_1.EVENT_PROCESSOR_KEY + "-" + propertyKey.toString(), { eventClass: eventClass, key: propertyKey }, propertyParent);
32
- };
33
- }
34
- exports.EventProcessor = EventProcessor;
35
- //# sourceMappingURL=event-processor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-processor.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/aggregate-root/event-processor.ts"],"names":[],"mappings":";;;AAAA,4BAA0B;AAI1B,oDAAuD;AAGvD,SAAgB,uBAAuB,CACnC,MAAqB,EACrB,UAAqC;IAErC,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC5C,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC1D,OAAO,QAAQ,CAAC,UAAU,KAAK,UAAU,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC;AACxD,CAAC;AAnBD,0DAmBC;AAED;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,UAAqC;IAChE,OAAO,CAAC,cAAc,EAAE,WAAW,EAAE,EAAE;QACnC,OAAO,CAAC,cAAc,CAClB,mCAAmB,GAAG,GAAG,GAAG,WAAW,CAAC,QAAQ,EAAE,EAClD,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,EAC5C,cAAc,CACjB,CAAC;IACN,CAAC,CAAC;AACN,CAAC;AARD,wCAQC"}