@event-nest/core 2.0.0 → 3.0.1
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 +9 -9
- package/package.json +2 -2
- package/src/index.d.ts +1 -1
- package/src/index.js +1 -1
- package/src/index.js.map +1 -1
- package/src/lib/aggregate-root/aggregate-root.js +7 -6
- package/src/lib/aggregate-root/aggregate-root.js.map +1 -1
- package/src/lib/aggregate-root/apply-event.decorator.d.ts +11 -0
- package/src/lib/aggregate-root/apply-event.decorator.js +20 -0
- package/src/lib/aggregate-root/apply-event.decorator.js.map +1 -0
- package/src/lib/aggregate-root/reflection.d.ts +4 -0
- package/src/lib/aggregate-root/reflection.js +20 -0
- package/src/lib/aggregate-root/reflection.js.map +1 -0
- package/src/lib/domain-event-registrations.d.ts +2 -2
- package/src/lib/domain-event-registrations.js.map +1 -1
- package/src/lib/domain-event-subscription.d.ts +2 -1
- package/src/lib/domain-event-subscription.js +4 -4
- package/src/lib/domain-event-subscription.js.map +1 -1
- package/src/lib/exceptions/unknown-event-exception.d.ts +1 -1
- package/src/lib/exceptions/unknown-event-exception.js +2 -2
- package/src/lib/exceptions/unknown-event-exception.js.map +1 -1
- package/src/lib/exceptions/unregistered-event-exception.js +1 -1
- package/src/lib/metadata-keys.d.ts +1 -1
- package/src/lib/metadata-keys.js +2 -2
- package/src/lib/metadata-keys.js.map +1 -1
- package/src/lib/published-domain-event.d.ts +3 -0
- package/src/lib/storage/stored-aggregate-root.d.ts +1 -0
- package/src/lib/storage/stored-aggregate-root.js +3 -0
- package/src/lib/storage/stored-aggregate-root.js.map +1 -1
- package/src/lib/storage/stored-event.d.ts +2 -2
- package/src/lib/storage/stored-event.js.map +1 -1
- package/src/lib/aggregate-root/event-processor.d.ts +0 -13
- package/src/lib/aggregate-root/event-processor.js +0 -35
- package/src/lib/aggregate-root/event-processor.js.map +0 -1
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
|
|
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,
|
|
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.
|
|
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.
|
|
205
|
+
this.applyUserUpdatedEvent(event);
|
|
206
206
|
this.append(event);
|
|
207
207
|
}
|
|
208
208
|
|
|
209
|
-
@
|
|
210
|
-
private
|
|
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
|
-
@
|
|
216
|
-
private
|
|
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
|
|
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": "
|
|
3
|
+
"version": "3.0.1",
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
70
|
+
await this.publish(toPublish);
|
|
71
|
+
this._appendedEvents = [];
|
|
72
|
+
return this;
|
|
72
73
|
}
|
|
73
|
-
return
|
|
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,
|
|
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,
|
|
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 { Class } from "type-fest";
|
|
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: Class<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;AAK1B,oDAA6D;AAE7D;;;;;;;GAOG;AACH,SAAgB,UAAU,CAAC,UAA0B;IACjD,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,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;AAO1B,SAAgB,uBAAuB,CAAC,MAAqB,EAAE,UAA0B;IACrF,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;AAhBD,0DAgBC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Class } from "type-fest";
|
|
2
2
|
type Registration = {
|
|
3
3
|
eventClass: unknown;
|
|
4
4
|
eventName: string;
|
|
@@ -12,7 +12,7 @@ export declare function getEventName(target: object): string | undefined;
|
|
|
12
12
|
* Returns the class that matches the provided name. Or undefined.
|
|
13
13
|
* @param name The event name to be checked.
|
|
14
14
|
*/
|
|
15
|
-
export declare function getEventClass<T>(name: string):
|
|
15
|
+
export declare function getEventClass<T>(name: string): Class<T> | undefined;
|
|
16
16
|
export declare function isRegistered(event: object): boolean;
|
|
17
17
|
export declare function registerEvent(newRegistration: Registration): void;
|
|
18
18
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain-event-registrations.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/domain-event-registrations.ts"],"names":[],"mappings":";;;AAEA,8FAAwF;AACxF,mDAA2C;AAO3C,MAAM,aAAa,GAAwB,EAAE,CAAC;AAE9C;;;GAGG;AACH,SAAgB,YAAY,CAAC,MAAc;IACvC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC;IACnG,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAHD,oCAGC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAAI,IAAY;IACzC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC;IACpF,OAAO,IAAA,kBAAK,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"domain-event-registrations.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/domain-event-registrations.ts"],"names":[],"mappings":";;;AAEA,8FAAwF;AACxF,mDAA2C;AAO3C,MAAM,aAAa,GAAwB,EAAE,CAAC;AAE9C;;;GAGG;AACH,SAAgB,YAAY,CAAC,MAAc;IACvC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC;IACnG,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAHD,oCAGC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAAI,IAAY;IACzC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC;IACpF,OAAO,IAAA,kBAAK,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,KAAK,CAAC,UAAuB,CAAC;AACrE,CAAC;AAHD,sCAGC;AAED,SAAgB,YAAY,CAAC,KAAa;IACtC,OAAO,CAAC,IAAA,kBAAK,EAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,CAAC;AAFD,oCAEC;AAED,SAAgB,aAAa,CAAC,eAA6B;IACvD,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,KAAK,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7F,MAAM,IAAI,0DAA0B,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACpE,CAAC;IAED,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAND,sCAMC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { Class } from "type-fest";
|
|
1
2
|
import { OnDomainEvent } from "./on-domain-event";
|
|
2
|
-
export declare const DomainEventSubscription: (...
|
|
3
|
+
export declare const DomainEventSubscription: (...eventClasses: Class<unknown>[]) => ClassDecorator;
|
|
3
4
|
export declare function isDomainEventSubscription(targetInstance: object): boolean;
|
|
4
5
|
export declare function getEventsFromDomainEventSubscription(subscriptionInstance: OnDomainEvent<unknown>): any[];
|
|
5
6
|
export declare function getEventId(eventConstructor: Function): string | undefined;
|
|
@@ -4,14 +4,14 @@ exports.getEventId = exports.getEventsFromDomainEventSubscription = exports.isDo
|
|
|
4
4
|
const crypto_1 = require("crypto");
|
|
5
5
|
const metadata_keys_1 = require("./metadata-keys");
|
|
6
6
|
const type_utils_1 = require("./utils/type-utils");
|
|
7
|
-
const DomainEventSubscription = (...
|
|
7
|
+
const DomainEventSubscription = (...eventClasses) => {
|
|
8
8
|
return (target) => {
|
|
9
|
-
|
|
9
|
+
eventClasses.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
|
-
Reflect.defineMetadata(metadata_keys_1.DOMAIN_EVENT_SUBSCRIPTION_KEY, { events }, target);
|
|
14
|
+
Reflect.defineMetadata(metadata_keys_1.DOMAIN_EVENT_SUBSCRIPTION_KEY, { events: eventClasses }, target);
|
|
15
15
|
};
|
|
16
16
|
};
|
|
17
17
|
exports.DomainEventSubscription = DomainEventSubscription;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain-event-subscription.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/domain-event-subscription.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;
|
|
1
|
+
{"version":3,"file":"domain-event-subscription.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/domain-event-subscription.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AAGpC,mDAAkF;AAElF,mDAA2C;AAEpC,MAAM,uBAAuB,GAAG,CAAC,GAAG,YAA8B,EAAkB,EAAE;IACzF,OAAO,CAAC,MAAc,EAAE,EAAE;QACtB,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,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,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC;IAC5F,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>,
|
|
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,
|
|
6
|
-
super(`Found unknown events for aggregate root ${aggregateRootId}. Unregistered : ${unregisteredEventNames.join(", ")}. Missing
|
|
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,
|
|
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 @
|
|
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
|
|
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";
|
package/src/lib/metadata-keys.js
CHANGED
|
@@ -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.
|
|
4
|
-
exports.
|
|
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,
|
|
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
|
|
@@ -10,6 +10,9 @@ class StoredAggregateRoot {
|
|
|
10
10
|
this.id = id;
|
|
11
11
|
this.version = version;
|
|
12
12
|
}
|
|
13
|
+
isOutdated(toCompare) {
|
|
14
|
+
return this.version !== toCompare.version;
|
|
15
|
+
}
|
|
13
16
|
}
|
|
14
17
|
exports.StoredAggregateRoot = StoredAggregateRoot;
|
|
15
18
|
//# sourceMappingURL=stored-aggregate-root.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stored-aggregate-root.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/storage/stored-aggregate-root.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,MAAa,mBAAmB;IAC5B,YACW,EAAU,EACV,OAAe;QADf,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAQ;IACvB,CAAC;
|
|
1
|
+
{"version":3,"file":"stored-aggregate-root.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/storage/stored-aggregate-root.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,MAAa,mBAAmB;IAC5B,YACW,EAAU,EACV,OAAe;QADf,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAQ;IACvB,CAAC;IAEJ,UAAU,CAAC,SAA8B;QACrC,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO,CAAC;IAC9C,CAAC;CACJ;AATD,kDASC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Class } from "type-fest";
|
|
2
2
|
/**
|
|
3
3
|
* Represents an event that will be persisted according to the storage solution that is used.
|
|
4
4
|
* The event is defined by metadata like aggregate root id, version and creation date, and it also includes its payload
|
|
@@ -50,5 +50,5 @@ export declare class StoredEvent {
|
|
|
50
50
|
get eventName(): string;
|
|
51
51
|
get id(): string;
|
|
52
52
|
get payload(): unknown;
|
|
53
|
-
getPayloadAs<T>(payloadClass:
|
|
53
|
+
getPayloadAs<T>(payloadClass: Class<T>): T;
|
|
54
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stored-event.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/storage/stored-event.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"stored-event.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/storage/stored-event.ts"],"names":[],"mappings":";;;AAAA,yDAAkE;AAGlE,8EAA6D;AAC7D,oDAA4C;AAE5C;;;;;;;;;GASG;AACH,MAAa,WAAW;IAUpB,YAAoB,EAAU,EAAE,eAAuB;QACnD,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;IAClB,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,kBAAkB,CACrB,EAAU,EACV,eAAuB,EACvB,iBAAyB,EACzB,OAAe,EACf,UAAgB;QAEhB,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QACtD,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;QACjC,QAAQ,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;QAEhD,MAAM,SAAS,GAAG,IAAA,yCAAY,EAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,IAAA,kBAAK,EAAC,SAAS,CAAC,EAAE,CAAC;YACpB,QAAQ,CAAC,QAAQ,GAAG,IAAA,mCAAe,EAAC,OAAO,CAAC,CAAC;YAC7C,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC;QACpC,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,WAAW,CACd,EAAU,EACV,eAAuB,EACvB,SAAiB,EACjB,SAAe,EACf,oBAA4B,EAC5B,iBAAyB,EACzB,OAAgB;QAEhB,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QACtD,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC;QAChC,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC;QAChC,QAAQ,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACrD,QAAQ,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;QAChD,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC5B,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,IAAI,iBAAiB;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,IAAI,EAAE;QACF,OAAO,IAAI,CAAC,GAAG,CAAC;IACpB,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAEM,YAAY,CAAI,YAAsB;QACzC,OAAO,IAAA,gCAAY,EAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;CACJ;AAvGD,kCAuGC"}
|
|
@@ -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"}
|