@event-nest/core 0.0.1 → 0.0.2

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 (72) hide show
  1. package/package.json +3 -2
  2. package/src/index.d.ts +14 -9
  3. package/src/index.js +14 -9
  4. package/src/index.js.map +1 -1
  5. package/src/lib/aggregate-root-aware-event.d.ts +4 -0
  6. package/src/lib/aggregate-root-aware-event.js +3 -0
  7. package/src/lib/aggregate-root-aware-event.js.map +1 -0
  8. package/src/lib/aggregate-root-name.d.ts +2 -0
  9. package/src/lib/aggregate-root-name.js +16 -0
  10. package/src/lib/aggregate-root-name.js.map +1 -0
  11. package/src/lib/aggregate-root.d.ts +50 -0
  12. package/src/lib/aggregate-root.js +133 -0
  13. package/src/lib/aggregate-root.js.map +1 -0
  14. package/src/lib/core-module-options.d.ts +11 -0
  15. package/src/lib/core-module-options.js +3 -0
  16. package/src/lib/core-module-options.js.map +1 -0
  17. package/src/lib/domain-event-emitter.d.ts +13 -0
  18. package/src/lib/domain-event-emitter.js +59 -0
  19. package/src/lib/domain-event-emitter.js.map +1 -0
  20. package/src/lib/domain-event-subscription.d.ts +5 -0
  21. package/src/lib/domain-event-subscription.js +33 -0
  22. package/src/lib/domain-event-subscription.js.map +1 -0
  23. package/src/lib/event-processor.d.ts +5 -0
  24. package/src/lib/{decorators/event-processor.js → event-processor.js} +5 -5
  25. package/src/lib/event-processor.js.map +1 -0
  26. package/src/lib/{decorators → exceptions}/event-name-conflict-exception.js.map +1 -1
  27. package/src/lib/exceptions/id-generation-exception.js.map +1 -0
  28. package/src/lib/exceptions/missing-aggregate-root-name-exception.d.ts +3 -0
  29. package/src/lib/exceptions/missing-aggregate-root-name-exception.js +10 -0
  30. package/src/lib/exceptions/missing-aggregate-root-name-exception.js.map +1 -0
  31. package/src/lib/exceptions/unknown-event-exception.d.ts +3 -0
  32. package/src/lib/exceptions/unknown-event-exception.js +10 -0
  33. package/src/lib/exceptions/unknown-event-exception.js.map +1 -0
  34. package/src/lib/exceptions/unregistered-event-exception.d.ts +3 -0
  35. package/src/lib/exceptions/unregistered-event-exception.js +10 -0
  36. package/src/lib/exceptions/unregistered-event-exception.js.map +1 -0
  37. package/src/lib/metadata-keys.d.ts +4 -0
  38. package/src/lib/metadata-keys.js +8 -0
  39. package/src/lib/metadata-keys.js.map +1 -0
  40. package/src/lib/on-domain-event.d.ts +4 -0
  41. package/src/lib/{storage/event-payload.js → on-domain-event.js} +1 -1
  42. package/src/lib/on-domain-event.js.map +1 -0
  43. package/src/lib/{decorators/registered-event.d.ts → registered-event.d.ts} +2 -2
  44. package/src/lib/{decorators/registered-event.js → registered-event.js} +7 -3
  45. package/src/lib/registered-event.js.map +1 -0
  46. package/src/lib/storage/abstract-event-store.d.ts +6 -4
  47. package/src/lib/storage/abstract-event-store.js +14 -5
  48. package/src/lib/storage/abstract-event-store.js.map +1 -1
  49. package/src/lib/storage/event-store.d.ts +36 -2
  50. package/src/lib/storage/event-store.js.map +1 -1
  51. package/src/lib/storage/stored-aggregate-root.d.ts +4 -0
  52. package/src/lib/storage/stored-aggregate-root.js +4 -0
  53. package/src/lib/storage/stored-aggregate-root.js.map +1 -1
  54. package/src/lib/storage/stored-event.d.ts +37 -3
  55. package/src/lib/storage/stored-event.js +43 -5
  56. package/src/lib/storage/stored-event.js.map +1 -1
  57. package/src/lib/decorators/event-processor.d.ts +0 -5
  58. package/src/lib/decorators/event-processor.js.map +0 -1
  59. package/src/lib/decorators/registered-event.js.map +0 -1
  60. package/src/lib/domain/aggregate-root.d.ts +0 -48
  61. package/src/lib/domain/aggregate-root.js +0 -109
  62. package/src/lib/domain/aggregate-root.js.map +0 -1
  63. package/src/lib/domain/missing-event-processor-exception.d.ts +0 -3
  64. package/src/lib/domain/missing-event-processor-exception.js +0 -10
  65. package/src/lib/domain/missing-event-processor-exception.js.map +0 -1
  66. package/src/lib/storage/event-payload.d.ts +0 -3
  67. package/src/lib/storage/event-payload.js.map +0 -1
  68. package/src/lib/storage/id-generation-exception.js.map +0 -1
  69. /package/src/lib/{decorators → exceptions}/event-name-conflict-exception.d.ts +0 -0
  70. /package/src/lib/{decorators → exceptions}/event-name-conflict-exception.js +0 -0
  71. /package/src/lib/{storage → exceptions}/id-generation-exception.d.ts +0 -0
  72. /package/src/lib/{storage → exceptions}/id-generation-exception.js +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event-nest/core",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "license": "MIT",
5
5
  "author": "Nick Tsitlakidis",
6
6
  "description": "Event sourcing module for NestJS. It provides a set of decorators and interfaces to help you build your event sourcing application.",
@@ -18,7 +18,8 @@
18
18
  },
19
19
  "dependencies": {
20
20
  "class-transformer": "^0.5.1",
21
- "reflect-metadata": "^0.1.13"
21
+ "reflect-metadata": "^0.1.13",
22
+ "rxjs": "^7.8.0"
22
23
  },
23
24
  "main": "./src/index.js",
24
25
  "types": "./src/index.d.ts"
package/src/index.d.ts CHANGED
@@ -1,12 +1,17 @@
1
- export * from "./lib/decorators/event-name-conflict-exception";
2
- export * from "./lib/decorators/event-processor";
3
- export * from "./lib/decorators/registered-event";
4
- export * from "./lib/domain/aggregate-root";
5
- export * from "./lib/domain/missing-event-processor-exception";
6
- export * from "./lib/storage/abstract-event-store";
7
- export * from "./lib/storage/event-store";
8
- export * from "./lib/storage/event-payload";
9
- export * from "./lib/storage/id-generation-exception";
1
+ export * from "./lib/exceptions/event-name-conflict-exception";
2
+ export * from "./lib/exceptions/unknown-event-exception";
3
+ export * from "./lib/exceptions/missing-aggregate-root-name-exception";
4
+ export * from "./lib/event-processor";
5
+ export * from "./lib/registered-event";
6
+ export * from "./lib/domain-event-subscription";
7
+ export * from "./lib/aggregate-root";
8
+ export * from "./lib/aggregate-root-name";
9
+ export * from "./lib/aggregate-root-aware-event";
10
+ export * from "./lib/on-domain-event";
11
+ export * from "./lib/domain-event-emitter";
12
+ export * from "./lib/core-module-options";
10
13
  export * from "./lib/storage/stored-event";
11
14
  export * from "./lib/storage/stored-aggregate-root";
15
+ export * from "./lib/storage/abstract-event-store";
16
+ export * from "./lib/storage/event-store";
12
17
  export * from "./lib/utils/type-utils";
package/src/index.js CHANGED
@@ -1,16 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./lib/decorators/event-name-conflict-exception"), exports);
5
- tslib_1.__exportStar(require("./lib/decorators/event-processor"), exports);
6
- tslib_1.__exportStar(require("./lib/decorators/registered-event"), exports);
7
- tslib_1.__exportStar(require("./lib/domain/aggregate-root"), exports);
8
- tslib_1.__exportStar(require("./lib/domain/missing-event-processor-exception"), exports);
9
- tslib_1.__exportStar(require("./lib/storage/abstract-event-store"), exports);
10
- tslib_1.__exportStar(require("./lib/storage/event-store"), exports);
11
- tslib_1.__exportStar(require("./lib/storage/event-payload"), exports);
12
- tslib_1.__exportStar(require("./lib/storage/id-generation-exception"), exports);
4
+ tslib_1.__exportStar(require("./lib/exceptions/event-name-conflict-exception"), exports);
5
+ tslib_1.__exportStar(require("./lib/exceptions/unknown-event-exception"), exports);
6
+ tslib_1.__exportStar(require("./lib/exceptions/missing-aggregate-root-name-exception"), exports);
7
+ tslib_1.__exportStar(require("./lib/event-processor"), exports);
8
+ tslib_1.__exportStar(require("./lib/registered-event"), exports);
9
+ tslib_1.__exportStar(require("./lib/domain-event-subscription"), exports);
10
+ tslib_1.__exportStar(require("./lib/aggregate-root"), exports);
11
+ tslib_1.__exportStar(require("./lib/aggregate-root-name"), exports);
12
+ tslib_1.__exportStar(require("./lib/aggregate-root-aware-event"), exports);
13
+ tslib_1.__exportStar(require("./lib/on-domain-event"), exports);
14
+ tslib_1.__exportStar(require("./lib/domain-event-emitter"), exports);
15
+ tslib_1.__exportStar(require("./lib/core-module-options"), exports);
13
16
  tslib_1.__exportStar(require("./lib/storage/stored-event"), exports);
14
17
  tslib_1.__exportStar(require("./lib/storage/stored-aggregate-root"), exports);
18
+ tslib_1.__exportStar(require("./lib/storage/abstract-event-store"), exports);
19
+ tslib_1.__exportStar(require("./lib/storage/event-store"), exports);
15
20
  tslib_1.__exportStar(require("./lib/utils/type-utils"), exports);
16
21
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/core/src/index.ts"],"names":[],"mappings":";;;AAAA,yFAA+D;AAC/D,2EAAiD;AACjD,4EAAkD;AAElD,sEAA4C;AAC5C,yFAA+D;AAE/D,6EAAmD;AACnD,oEAA0C;AAC1C,sEAA4C;AAC5C,gFAAsD;AACtD,qEAA2C;AAC3C,8EAAoD;AAEpD,iEAAuC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/core/src/index.ts"],"names":[],"mappings":";;;AAAA,yFAA+D;AAC/D,mFAAyD;AACzD,iGAAuE;AAEvE,gEAAsC;AACtC,iEAAuC;AACvC,0EAAgD;AAChD,+DAAqC;AACrC,oEAA0C;AAC1C,2EAAiD;AACjD,gEAAsC;AACtC,qEAA2C;AAC3C,oEAA0C;AAE1C,qEAA2C;AAC3C,8EAAoD;AACpD,6EAAmD;AACnD,oEAA0C;AAE1C,iEAAuC"}
@@ -0,0 +1,4 @@
1
+ export interface AggregateRootAwareEvent<T> {
2
+ aggregateRootId: string;
3
+ payload: T;
4
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=aggregate-root-aware-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate-root-aware-event.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/aggregate-root-aware-event.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const AggregateRootName: (name: string) => ClassDecorator;
2
+ export declare function getAggregateRootName(targetClass: Function): string | undefined;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAggregateRootName = exports.AggregateRootName = void 0;
4
+ const metadata_keys_1 = require("./metadata-keys");
5
+ const AggregateRootName = (name) => {
6
+ return (target) => {
7
+ Reflect.defineMetadata(metadata_keys_1.AGGREGATE_ROOT_NAME_KEY, { aggregateRootName: name }, target);
8
+ };
9
+ };
10
+ exports.AggregateRootName = AggregateRootName;
11
+ // eslint-disable-next-line @typescript-eslint/ban-types
12
+ function getAggregateRootName(targetClass) {
13
+ return Reflect.getMetadata(metadata_keys_1.AGGREGATE_ROOT_NAME_KEY, targetClass)?.aggregateRootName;
14
+ }
15
+ exports.getAggregateRootName = getAggregateRootName;
16
+ //# sourceMappingURL=aggregate-root-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate-root-name.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/aggregate-root-name.ts"],"names":[],"mappings":";;;AAAA,mDAA0D;AAEnD,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAkB,EAAE;IAC9D,OAAO,CAAC,MAAc,EAAE,EAAE;QACtB,OAAO,CAAC,cAAc,CAAC,uCAAuB,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IACzF,CAAC,CAAC;AACN,CAAC,CAAC;AAJW,QAAA,iBAAiB,qBAI5B;AAEF,wDAAwD;AACxD,SAAgB,oBAAoB,CAAC,WAAqB;IACtD,OAAO,OAAO,CAAC,WAAW,CAAC,uCAAuB,EAAE,WAAW,CAAC,EAAE,iBAAiB,CAAC;AACxF,CAAC;AAFD,oDAEC"}
@@ -0,0 +1,50 @@
1
+ import { Logger } from "@nestjs/common";
2
+ import { StoredEvent } from "./storage/stored-event";
3
+ import { AggregateRootAwareEvent } from "./aggregate-root-aware-event";
4
+ export declare abstract class AggregateRoot {
5
+ private readonly _id;
6
+ private _appendedEvents;
7
+ private _version;
8
+ private readonly _logger;
9
+ protected constructor(_id: string, logger?: Logger);
10
+ get id(): string;
11
+ get version(): number;
12
+ get logger(): Logger;
13
+ /**
14
+ * Publishes all the provided events using a connected event publisher. To connect a publisher, use the
15
+ * {@link EventStore}. Normally this should never be called by application logic. Instead, after you append the
16
+ * events, you should call the commit method which will end up calling this method.
17
+ *
18
+ * If a publisher is not connected, the method will return a rejected promise.
19
+ * @param events The events to be published
20
+ */
21
+ publish(events: Array<AggregateRootAwareEvent<object>>): Promise<Array<StoredEvent>>;
22
+ /**
23
+ * All the events that have been previously appended will be committed once this method runs. After publishing,
24
+ * the appended events will be deleted so that the next commit publishes newer events.
25
+ * During publishing, the events will be saved and after the successful save, all the application event
26
+ * handlers will be called to take care of async updates.
27
+ * Call this once all the events you want, have been appended.
28
+ */
29
+ commit(): Promise<AggregateRoot>;
30
+ /**
31
+ * Adds an event to the currently existing events of the entity. This will not publish the event. Use the {@link commit}
32
+ * method once all the events you want are appended.
33
+ * @param event The event to be appended
34
+ */
35
+ append(event: object): void;
36
+ /**
37
+ * Returns a clone array of all the currently appended events of the entity.
38
+ */
39
+ get appendedEvents(): Array<AggregateRootAwareEvent<object>>;
40
+ /**
41
+ * Used when a set of events have been retrieved from the database. These events can be passed to the method and the
42
+ * method will trigger all the matching {@link EventProcessor} functions of the entity to populate the object based on
43
+ * application logic.
44
+ * @param events The events that will be sent to EventProcessor functions
45
+ */
46
+ reconstitute(events: Array<StoredEvent>): void;
47
+ protected resolveVersion(events: Array<StoredEvent>): void;
48
+ protected sortEvents(events: Array<StoredEvent>): Array<StoredEvent>;
49
+ private splitEvents;
50
+ }
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AggregateRoot = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const registered_event_1 = require("./registered-event");
6
+ const event_processor_1 = require("./event-processor");
7
+ const unknown_event_exception_1 = require("./exceptions/unknown-event-exception");
8
+ const type_utils_1 = require("./utils/type-utils");
9
+ const unregistered_event_exception_1 = require("./exceptions/unregistered-event-exception");
10
+ class AggregateRoot {
11
+ constructor(_id, logger) {
12
+ this._id = _id;
13
+ this._appendedEvents = [];
14
+ this._version = 0;
15
+ this._logger = (0, type_utils_1.isNil)(logger) ? new common_1.Logger(AggregateRoot.name) : logger;
16
+ }
17
+ get id() {
18
+ return this._id;
19
+ }
20
+ get version() {
21
+ return this._version;
22
+ }
23
+ get logger() {
24
+ return this._logger;
25
+ }
26
+ /**
27
+ * Publishes all the provided events using a connected event publisher. To connect a publisher, use the
28
+ * {@link EventStore}. Normally this should never be called by application logic. Instead, after you append the
29
+ * events, you should call the commit method which will end up calling this method.
30
+ *
31
+ * If a publisher is not connected, the method will return a rejected promise.
32
+ * @param events The events to be published
33
+ */
34
+ publish(events) {
35
+ this.logger.error("There is no event publisher assigned");
36
+ return Promise.reject("There is no event publisher assigned");
37
+ }
38
+ /**
39
+ * All the events that have been previously appended will be committed once this method runs. After publishing,
40
+ * the appended events will be deleted so that the next commit publishes newer events.
41
+ * During publishing, the events will be saved and after the successful save, all the application event
42
+ * handlers will be called to take care of async updates.
43
+ * Call this once all the events you want, have been appended.
44
+ */
45
+ commit() {
46
+ const toPublish = this._appendedEvents.slice(0);
47
+ this._appendedEvents = [];
48
+ if (toPublish.length > 0) {
49
+ return this.publish(toPublish).then(() => Promise.resolve(this));
50
+ }
51
+ return Promise.resolve(this);
52
+ }
53
+ /**
54
+ * Adds an event to the currently existing events of the entity. This will not publish the event. Use the {@link commit}
55
+ * method once all the events you want are appended.
56
+ * @param event The event to be appended
57
+ */
58
+ append(event) {
59
+ if (!(0, registered_event_1.isRegistered)(event)) {
60
+ this.logger.error(`Event ${event.constructor.name} is not registered.`);
61
+ throw new unregistered_event_exception_1.UnregisteredEventException(event.constructor.name);
62
+ }
63
+ this._appendedEvents.push({
64
+ aggregateRootId: this.id,
65
+ payload: event
66
+ });
67
+ }
68
+ /**
69
+ * Returns a clone array of all the currently appended events of the entity.
70
+ */
71
+ get appendedEvents() {
72
+ return this._appendedEvents.slice(0);
73
+ }
74
+ /**
75
+ * Used when a set of events have been retrieved from the database. These events can be passed to the method and the
76
+ * method will trigger all the matching {@link EventProcessor} functions of the entity to populate the object based on
77
+ * application logic.
78
+ * @param events The events that will be sent to EventProcessor functions
79
+ */
80
+ reconstitute(events) {
81
+ if (events.length > 0) {
82
+ const [unregistered, missingProcessor, known] = this.splitEvents(this.sortEvents(events));
83
+ if (unregistered.length > 0 || missingProcessor.length > 0) {
84
+ const e = new unknown_event_exception_1.UnknownEventException(unregistered, missingProcessor, this.id);
85
+ this.logger.error(e.message);
86
+ throw e;
87
+ }
88
+ known.forEach((event) => {
89
+ try {
90
+ this[event.processorKey](event.payload);
91
+ }
92
+ catch (error) {
93
+ this.logger.error(`Unable to process domain event due to error in processor function: ${error}`);
94
+ throw error;
95
+ }
96
+ });
97
+ this.resolveVersion(events);
98
+ }
99
+ }
100
+ resolveVersion(events) {
101
+ const sorted = events.sort((e1, e2) => e1.aggregateRootVersion - e2.aggregateRootVersion);
102
+ this._version = sorted.slice(-1)[0].aggregateRootVersion;
103
+ }
104
+ sortEvents(events) {
105
+ return events.sort((e1, e2) => e1.aggregateRootVersion - e2.aggregateRootVersion);
106
+ }
107
+ splitEvents(events) {
108
+ const known = [];
109
+ const unregistered = [];
110
+ const missingProcessor = [];
111
+ events.forEach((ev) => {
112
+ const eventClass = (0, registered_event_1.getEventClass)(ev.eventName);
113
+ if ((0, type_utils_1.isNil)(eventClass)) {
114
+ unregistered.push(ev.eventName);
115
+ }
116
+ else {
117
+ const processorKey = (0, event_processor_1.getDecoratedPropertyKey)(this, eventClass);
118
+ if ((0, type_utils_1.isNil)(processorKey)) {
119
+ missingProcessor.push(ev.eventName);
120
+ }
121
+ else {
122
+ known.push({
123
+ processorKey,
124
+ payload: ev.getPayloadAs(eventClass)
125
+ });
126
+ }
127
+ }
128
+ });
129
+ return [unregistered, missingProcessor, known];
130
+ }
131
+ }
132
+ exports.AggregateRoot = AggregateRoot;
133
+ //# sourceMappingURL=aggregate-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate-root.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/aggregate-root.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface CoreModuleOptions {
2
+ /**
3
+ * Each domain event that is saved in the store will then be passed to any classes you have registered with the
4
+ * {@link DomainEventSubscription} decorator.
5
+ * By default, the events will be processed sequentially to make sure that a subscription can count on the fact that
6
+ * the previous event has been processed. If you don't need this functionality, and you want faster event processing,
7
+ * you can set this to true.
8
+ *
9
+ */
10
+ runParallelSubscriptions?: boolean;
11
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=core-module-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-module-options.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/core-module-options.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { Module } from "@nestjs/core/injector/module";
2
+ import { AggregateRootAwareEvent } from "./aggregate-root-aware-event";
3
+ import { OnModuleDestroy } from "@nestjs/common";
4
+ export declare class DomainEventEmitter implements OnModuleDestroy {
5
+ private _runParallelSubscriptions;
6
+ private _handlers;
7
+ private _logger;
8
+ constructor(_runParallelSubscriptions?: boolean);
9
+ onModuleDestroy(): void;
10
+ bindSubscriptions(injectorModules: Map<string, Module>): void;
11
+ emit(withAggregate: AggregateRootAwareEvent<object>): Promise<unknown>;
12
+ emitMultiple(withAggregate: AggregateRootAwareEvent<object>[]): Promise<unknown>;
13
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DomainEventEmitter = void 0;
4
+ const domain_event_subscription_1 = require("./domain-event-subscription");
5
+ const type_utils_1 = require("./utils/type-utils");
6
+ const common_1 = require("@nestjs/common");
7
+ const rxjs_1 = require("rxjs");
8
+ class DomainEventEmitter {
9
+ constructor(_runParallelSubscriptions = false) {
10
+ this._runParallelSubscriptions = _runParallelSubscriptions;
11
+ this._handlers = new Map();
12
+ this._logger = new common_1.Logger(DomainEventEmitter.name);
13
+ }
14
+ onModuleDestroy() {
15
+ this._handlers.clear();
16
+ }
17
+ bindSubscriptions(injectorModules) {
18
+ injectorModules.forEach((module) => {
19
+ module.providers.forEach((provider) => {
20
+ if (!provider.instance || !provider.instance.constructor) {
21
+ return;
22
+ }
23
+ if ((0, domain_event_subscription_1.isDomainEventSubscription)(provider.instance)) {
24
+ const events = (0, domain_event_subscription_1.getEventsFromDomainEventSubscription)(provider.instance);
25
+ events.forEach((event) => {
26
+ const eventId = (0, domain_event_subscription_1.getEventId)(event);
27
+ if (!this._handlers.has(eventId)) {
28
+ this._handlers.set(eventId, []);
29
+ }
30
+ this._logger.debug(`Binding ${provider.instance?.constructor.name} to event ${eventId}`);
31
+ this._handlers.get(eventId).push(provider.instance);
32
+ });
33
+ }
34
+ });
35
+ });
36
+ }
37
+ emit(withAggregate) {
38
+ if (this._handlers.size === 0) {
39
+ this._logger.warn(`Event ${withAggregate.payload.constructor.name} can't be passed to subscriptions. Make sure you use the @DomainEventSubscription decorator`);
40
+ return Promise.resolve();
41
+ }
42
+ const eventId = (0, domain_event_subscription_1.getEventId)(withAggregate.payload.constructor);
43
+ if ((0, type_utils_1.isNil)(eventId) || !this._handlers.has(eventId)) {
44
+ this._logger.warn(`Event ${withAggregate.payload.constructor.name} can't be passed to subscriptions. Make sure you use the @DomainEventSubscription decorator`);
45
+ return Promise.resolve();
46
+ }
47
+ const promises = this._handlers.get(eventId).map((handler) => handler.onDomainEvent(withAggregate));
48
+ return Promise.all(promises);
49
+ }
50
+ emitMultiple(withAggregate) {
51
+ if (!this._runParallelSubscriptions) {
52
+ return Promise.all(withAggregate.map((aggregate) => this.emit(aggregate)));
53
+ }
54
+ const deferred = withAggregate.map((w) => (0, rxjs_1.defer)(() => (0, rxjs_1.from)(this.emit(w))));
55
+ return (0, rxjs_1.firstValueFrom)((0, rxjs_1.concat)(...deferred).pipe((0, rxjs_1.last)()));
56
+ }
57
+ }
58
+ exports.DomainEventEmitter = DomainEventEmitter;
59
+ //# sourceMappingURL=domain-event-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-event-emitter.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/domain-event-emitter.ts"],"names":[],"mappings":";;;AACA,2EAIqC;AAErC,mDAA2C;AAC3C,2CAAyD;AAEzD,+BAAiE;AAEjE,MAAa,kBAAkB;IAI3B,YAAoB,4BAAqC,KAAK;QAA1C,8BAAyB,GAAzB,yBAAyB,CAAiB;QAC1D,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAwC,CAAC;QACjE,IAAI,CAAC,OAAO,GAAG,IAAI,eAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,eAAe;QACX,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,iBAAiB,CAAC,eAAoC;QAClD,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC/B,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAClC,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE;oBACtD,OAAO;iBACV;gBAED,IAAI,IAAA,qDAAyB,EAAC,QAAQ,CAAC,QAAkB,CAAC,EAAE;oBACxD,MAAM,MAAM,GAAG,IAAA,gEAAoC,EAAC,QAAQ,CAAC,QAAkC,CAAC,CAAC;oBACjG,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;wBACrB,MAAM,OAAO,GAAG,IAAA,sCAAU,EAAC,KAAK,CAAW,CAAC;wBAC5C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;4BAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;yBACnC;wBAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,aAAa,OAAO,EAAE,CAAC,CAAC;wBACzF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAA8B,CAAC,CAAC;oBAC/E,CAAC,CAAC,CAAC;iBACN;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,IAAI,CAAC,aAA8C;QAC/C,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE;YAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CACb,SAAS,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,6FAA6F,CAC/I,CAAC;YACF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;SAC5B;QACD,MAAM,OAAO,GAAG,IAAA,sCAAU,EAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9D,IAAI,IAAA,kBAAK,EAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAChD,IAAI,CAAC,OAAO,CAAC,IAAI,CACb,SAAS,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,6FAA6F,CAC/I,CAAC;YACF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;SAC5B;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;QACrG,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,YAAY,CAAC,aAAgD;QACzD,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACjC,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAC9E;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,YAAK,EAAC,GAAG,EAAE,CAAC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,OAAO,IAAA,qBAAc,EAAC,IAAA,aAAM,EAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAA,WAAI,GAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;CACJ;AA/DD,gDA+DC"}
@@ -0,0 +1,5 @@
1
+ import { OnDomainEvent } from "./on-domain-event";
2
+ export declare const DomainEventSubscription: (...events: any[]) => ClassDecorator;
3
+ export declare function isDomainEventSubscription(targetInstance: object): boolean;
4
+ export declare function getEventsFromDomainEventSubscription(subscriptionInstance: OnDomainEvent<unknown>): any[];
5
+ export declare function getEventId(eventConstructor: Function): string | undefined;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getEventId = exports.getEventsFromDomainEventSubscription = exports.isDomainEventSubscription = exports.DomainEventSubscription = void 0;
4
+ const metadata_keys_1 = require("./metadata-keys");
5
+ const crypto_1 = require("crypto");
6
+ const type_utils_1 = require("./utils/type-utils");
7
+ const DomainEventSubscription = (...events) => {
8
+ return (target) => {
9
+ events.forEach((event) => {
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);
12
+ }
13
+ });
14
+ Reflect.defineMetadata(metadata_keys_1.DOMAIN_EVENT_SUBSCRIPTION_KEY, { events }, target);
15
+ };
16
+ };
17
+ exports.DomainEventSubscription = DomainEventSubscription;
18
+ function isDomainEventSubscription(targetInstance) {
19
+ const hasMetadata = Reflect.hasOwnMetadata(metadata_keys_1.DOMAIN_EVENT_SUBSCRIPTION_KEY, targetInstance.constructor);
20
+ return hasMetadata && typeof targetInstance.onDomainEvent === "function";
21
+ }
22
+ exports.isDomainEventSubscription = isDomainEventSubscription;
23
+ function getEventsFromDomainEventSubscription(subscriptionInstance) {
24
+ const metadata = Reflect.getMetadata(metadata_keys_1.DOMAIN_EVENT_SUBSCRIPTION_KEY, subscriptionInstance.constructor);
25
+ return (0, type_utils_1.isNil)(metadata) ? [] : metadata.events;
26
+ }
27
+ exports.getEventsFromDomainEventSubscription = getEventsFromDomainEventSubscription;
28
+ // eslint-disable-next-line @typescript-eslint/ban-types
29
+ function getEventId(eventConstructor) {
30
+ return Reflect.getMetadata(metadata_keys_1.DOMAIN_EVENT_KEY, eventConstructor)?.eventSubscriptionId;
31
+ }
32
+ exports.getEventId = getEventId;
33
+ //# sourceMappingURL=domain-event-subscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-event-subscription.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/domain-event-subscription.ts"],"names":[],"mappings":";;;AAAA,mDAAkF;AAClF,mCAAoC;AAEpC,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;gBAClD,OAAO,CAAC,cAAc,CAAC,gCAAgB,EAAE,EAAE,mBAAmB,EAAE,IAAA,mBAAU,GAAE,EAAE,EAAE,KAAK,CAAC,CAAC;aAC1F;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"}
@@ -0,0 +1,5 @@
1
+ import "reflect-metadata";
2
+ import { AggregateRoot } from "./aggregate-root";
3
+ import { ClassConstructor } from "class-transformer";
4
+ export declare function getDecoratedPropertyKey(entity: AggregateRoot, eventClass: ClassConstructor<unknown>): string | undefined;
5
+ export declare function EventProcessor(eventClass: ClassConstructor<unknown>): PropertyDecorator;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EventProcessor = exports.getProcessFunctionKey = void 0;
3
+ exports.EventProcessor = exports.getDecoratedPropertyKey = void 0;
4
4
  require("reflect-metadata");
5
- const METADATA_KEY = "process-event-meta";
6
- function getProcessFunctionKey(entity, eventClass) {
5
+ const metadata_keys_1 = require("./metadata-keys");
6
+ function getDecoratedPropertyKey(entity, eventClass) {
7
7
  const metadataKeys = Reflect.getMetadataKeys(entity);
8
8
  if (!metadataKeys || metadataKeys.length == 0) {
9
9
  return undefined;
@@ -17,10 +17,10 @@ function getProcessFunctionKey(entity, eventClass) {
17
17
  }
18
18
  return Reflect.getMetadata(matchingKey, entity).key;
19
19
  }
20
- exports.getProcessFunctionKey = getProcessFunctionKey;
20
+ exports.getDecoratedPropertyKey = getDecoratedPropertyKey;
21
21
  function EventProcessor(eventClass) {
22
22
  return (propertyParent, propertyKey) => {
23
- Reflect.defineMetadata(METADATA_KEY + "-" + propertyKey.toString(), { eventClass: eventClass, key: propertyKey }, propertyParent);
23
+ Reflect.defineMetadata(metadata_keys_1.EVENT_PROCESSOR_KEY + "-" + propertyKey.toString(), { eventClass: eventClass, key: propertyKey }, propertyParent);
24
24
  };
25
25
  }
26
26
  exports.EventProcessor = EventProcessor;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-processor.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/event-processor.ts"],"names":[],"mappings":";;;AAAA,4BAA0B;AAG1B,mDAAsD;AAEtD,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;QAC3C,OAAO,SAAS,CAAC;KACpB;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;QACd,OAAO,SAAS,CAAC;KACpB;IAED,OAAO,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC;AACxD,CAAC;AAnBD,0DAmBC;AAED,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"event-name-conflict-exception.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/decorators/event-name-conflict-exception.ts"],"names":[],"mappings":";;;AAAA,MAAa,0BAA2B,SAAQ,KAAK;IACjD,YAAY,IAAY;QACpB,KAAK,CAAC,GAAG,IAAI,6DAA6D,CAAC,CAAC;IAChF,CAAC;CACJ;AAJD,gEAIC"}
1
+ {"version":3,"file":"event-name-conflict-exception.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/exceptions/event-name-conflict-exception.ts"],"names":[],"mappings":";;;AAAA,MAAa,0BAA2B,SAAQ,KAAK;IACjD,YAAY,IAAY;QACpB,KAAK,CAAC,GAAG,IAAI,6DAA6D,CAAC,CAAC;IAChF,CAAC;CACJ;AAJD,gEAIC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-generation-exception.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/exceptions/id-generation-exception.ts"],"names":[],"mappings":";;;AAAA,MAAa,qBAAsB,SAAQ,KAAK;IAC5C,YAAY,SAAiB,EAAE,cAAsB;QACjD,KAAK,CAAC,mDAAmD,SAAS,eAAe,cAAc,EAAE,CAAC,CAAC;IACvG,CAAC;CACJ;AAJD,sDAIC"}
@@ -0,0 +1,3 @@
1
+ export declare class MissingAggregateRootNameException extends Error {
2
+ constructor(aggregateRootClassName: string);
3
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MissingAggregateRootNameException = void 0;
4
+ class MissingAggregateRootNameException extends Error {
5
+ constructor(aggregateRootClassName) {
6
+ super(`${aggregateRootClassName} is not decorated with @AggregateRootName. Use the decorator to set the name of the aggregate root`);
7
+ }
8
+ }
9
+ exports.MissingAggregateRootNameException = MissingAggregateRootNameException;
10
+ //# sourceMappingURL=missing-aggregate-root-name-exception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing-aggregate-root-name-exception.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/exceptions/missing-aggregate-root-name-exception.ts"],"names":[],"mappings":";;;AAAA,MAAa,iCAAkC,SAAQ,KAAK;IACxD,YAAY,sBAA8B;QACtC,KAAK,CACD,GAAG,sBAAsB,oGAAoG,CAChI,CAAC;IACN,CAAC;CACJ;AAND,8EAMC"}
@@ -0,0 +1,3 @@
1
+ export declare class UnknownEventException extends Error {
2
+ constructor(unregisteredEventNames: Array<string>, missingProcessorEventNames: Array<string>, aggregateRootId: string);
3
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnknownEventException = void 0;
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(", ")}`);
7
+ }
8
+ }
9
+ exports.UnknownEventException = UnknownEventException;
10
+ //# sourceMappingURL=unknown-event-exception.js.map
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ export declare class UnregisteredEventException extends Error {
2
+ constructor(eventClassName: string);
3
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnregisteredEventException = void 0;
4
+ class UnregisteredEventException extends Error {
5
+ constructor(eventClassName) {
6
+ super(`${eventClassName} is not registered to be processed. Use @RegisteredEvent decorator to register it.`);
7
+ }
8
+ }
9
+ exports.UnregisteredEventException = UnregisteredEventException;
10
+ //# sourceMappingURL=unregistered-event-exception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unregistered-event-exception.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/exceptions/unregistered-event-exception.ts"],"names":[],"mappings":";;;AAAA,MAAa,0BAA2B,SAAQ,KAAK;IACjD,YAAY,cAAsB;QAC9B,KAAK,CAAC,GAAG,cAAc,oFAAoF,CAAC,CAAC;IACjH,CAAC;CACJ;AAJD,gEAIC"}
@@ -0,0 +1,4 @@
1
+ export declare const EVENT_PROCESSOR_KEY = "event-nest-process-event-meta";
2
+ export declare const DOMAIN_EVENT_SUBSCRIPTION_KEY = "event-nest-domain-event-subscription-meta";
3
+ export declare const DOMAIN_EVENT_KEY = "event-nest-domain-event-meta";
4
+ export declare const AGGREGATE_ROOT_NAME_KEY = "event-nest-aggregate-root-name-meta";
@@ -0,0 +1,8 @@
1
+ "use strict";
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";
5
+ exports.DOMAIN_EVENT_SUBSCRIPTION_KEY = "event-nest-domain-event-subscription-meta";
6
+ exports.DOMAIN_EVENT_KEY = "event-nest-domain-event-meta";
7
+ exports.AGGREGATE_ROOT_NAME_KEY = "event-nest-aggregate-root-name-meta";
8
+ //# sourceMappingURL=metadata-keys.js.map
@@ -0,0 +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"}
@@ -0,0 +1,4 @@
1
+ import { AggregateRootAwareEvent } from "./aggregate-root-aware-event";
2
+ export interface OnDomainEvent<T> {
3
+ onDomainEvent(event: AggregateRootAwareEvent<T>): Promise<unknown>;
4
+ }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=event-payload.js.map
3
+ //# sourceMappingURL=on-domain-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-domain-event.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/on-domain-event.ts"],"names":[],"mappings":""}