@event-nest/core 3.3.0 → 3.3.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.
- package/package.json +4 -4
- package/src/lib/aggregate-root/aggregate-root-name.js +1 -1
- package/src/lib/aggregate-root/aggregate-root-name.js.map +1 -1
- package/src/lib/aggregate-root/aggregate-root.js +18 -17
- package/src/lib/aggregate-root/aggregate-root.js.map +1 -1
- package/src/lib/aggregate-root/reflection.js +1 -1
- package/src/lib/aggregate-root/reflection.js.map +1 -1
- package/src/lib/domain-event-registrations.d.ts +5 -5
- package/src/lib/domain-event-registrations.js +9 -9
- package/src/lib/domain-event-registrations.js.map +1 -1
- package/src/lib/domain-event-subscription.d.ts +2 -2
- package/src/lib/domain-event-subscription.js +12 -12
- package/src/lib/domain-event-subscription.js.map +1 -1
- package/src/lib/storage/abstract-event-store.js +9 -9
- package/src/lib/storage/abstract-event-store.js.map +1 -1
- package/src/lib/storage/event-store.d.ts +5 -2
- package/src/lib/storage/event-store.js +3 -0
- package/src/lib/storage/event-store.js.map +1 -1
- package/src/lib/utils/type-utils.d.ts +1 -1
- package/src/lib/utils/type-utils.js +4 -4
- package/src/lib/utils/type-utils.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@event-nest/core",
|
|
3
|
-
"version": "3.3.
|
|
3
|
+
"version": "3.3.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 classes to build an application based on event sourcing.",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"url": "https://github.com/NickTsitlakidis/event-nest.git"
|
|
19
19
|
},
|
|
20
20
|
"engines": {
|
|
21
|
-
"node": ">=
|
|
21
|
+
"node": ">= 18"
|
|
22
22
|
},
|
|
23
23
|
"type": "commonjs",
|
|
24
24
|
"peerDependencies": {
|
|
@@ -31,6 +31,6 @@
|
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"class-transformer": "^0.5.1"
|
|
33
33
|
},
|
|
34
|
-
"
|
|
35
|
-
"
|
|
34
|
+
"types": "./src/index.d.ts",
|
|
35
|
+
"main": "./src/index.js"
|
|
36
36
|
}
|
|
@@ -19,7 +19,7 @@ const AggregateRootName = (name) => {
|
|
|
19
19
|
};
|
|
20
20
|
};
|
|
21
21
|
exports.AggregateRootName = AggregateRootName;
|
|
22
|
-
// eslint-disable-next-line @typescript-eslint/
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
23
23
|
function getAggregateRootName(targetClass) {
|
|
24
24
|
return Reflect.getMetadata(metadata_keys_1.AGGREGATE_ROOT_NAME_KEY, targetClass)?.aggregateRootName;
|
|
25
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate-root-name.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/aggregate-root/aggregate-root-name.ts"],"names":[],"mappings":";;;AAoBA,oDAEC;AAtBD,4BAA0B;AAE1B,oDAA2D;AAE3D;;;;;;;;GAQG;AACI,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,
|
|
1
|
+
{"version":3,"file":"aggregate-root-name.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/aggregate-root/aggregate-root-name.ts"],"names":[],"mappings":";;;AAoBA,oDAEC;AAtBD,4BAA0B;AAE1B,oDAA2D;AAE3D;;;;;;;;GAQG;AACI,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,sEAAsE;AACtE,SAAgB,oBAAoB,CAAC,WAAqB;IACtD,OAAO,OAAO,CAAC,WAAW,CAAC,uCAAuB,EAAE,WAAW,CAAC,EAAE,iBAAiB,CAAC;AACxF,CAAC"}
|
|
@@ -18,7 +18,7 @@ class AggregateRoot {
|
|
|
18
18
|
* Returns a clone array of all the currently appended events of the entity.
|
|
19
19
|
*/
|
|
20
20
|
get appendedEvents() {
|
|
21
|
-
return this._appendedEvents
|
|
21
|
+
return [...this._appendedEvents];
|
|
22
22
|
}
|
|
23
23
|
get id() {
|
|
24
24
|
return this._id;
|
|
@@ -57,7 +57,7 @@ class AggregateRoot {
|
|
|
57
57
|
* Call this once all the events you want, have been appended.
|
|
58
58
|
*/
|
|
59
59
|
async commit() {
|
|
60
|
-
const toPublish = this._appendedEvents
|
|
60
|
+
const toPublish = [...this._appendedEvents];
|
|
61
61
|
if (toPublish.length > 0) {
|
|
62
62
|
await this.publish(toPublish);
|
|
63
63
|
this._appendedEvents = [];
|
|
@@ -88,53 +88,54 @@ class AggregateRoot {
|
|
|
88
88
|
if (events.length > 0) {
|
|
89
89
|
const [unregistered, missingProcessor, known] = this.splitEvents(this.sortEvents(events));
|
|
90
90
|
if (unregistered.length > 0 || missingProcessor.length > 0) {
|
|
91
|
-
const
|
|
92
|
-
this.logger.error(
|
|
93
|
-
throw
|
|
91
|
+
const throwable = new unknown_event_exception_1.UnknownEventException(unregistered, missingProcessor, this.id);
|
|
92
|
+
this.logger.error(throwable.message);
|
|
93
|
+
throw throwable;
|
|
94
94
|
}
|
|
95
|
-
known
|
|
95
|
+
for (const knownEvent of known) {
|
|
96
96
|
try {
|
|
97
|
-
this[
|
|
97
|
+
this[knownEvent.processorKey](knownEvent.payload);
|
|
98
98
|
}
|
|
99
99
|
catch (error) {
|
|
100
100
|
this.logger.error(`Unable to process domain event due to error in processor function: ${error}`);
|
|
101
101
|
throw error;
|
|
102
102
|
}
|
|
103
|
-
}
|
|
103
|
+
}
|
|
104
104
|
this.resolveVersion(events);
|
|
105
105
|
}
|
|
106
106
|
const duration = Date.now() - startedAt;
|
|
107
107
|
this._logger.debug(`Reconstitution of ${this.constructor.name} took ${duration}ms`);
|
|
108
108
|
}
|
|
109
109
|
resolveVersion(events) {
|
|
110
|
-
const sorted = events.sort((
|
|
111
|
-
|
|
110
|
+
const sorted = events.sort((event1, event2) => event1.aggregateRootVersion - event2.aggregateRootVersion);
|
|
111
|
+
const lastElement = sorted.at(-1);
|
|
112
|
+
this._version = (0, type_utils_1.isNil)(lastElement) ? 0 : lastElement.aggregateRootVersion;
|
|
112
113
|
}
|
|
113
114
|
sortEvents(events) {
|
|
114
|
-
return events.sort((
|
|
115
|
+
return events.sort((event1, event2) => event1.aggregateRootVersion - event2.aggregateRootVersion);
|
|
115
116
|
}
|
|
116
117
|
splitEvents(events) {
|
|
117
118
|
const known = [];
|
|
118
119
|
const unregistered = [];
|
|
119
120
|
const missingProcessor = [];
|
|
120
|
-
events
|
|
121
|
-
const eventClass = (0, domain_event_registrations_1.getEventClass)(
|
|
121
|
+
for (const storedEvent of events) {
|
|
122
|
+
const eventClass = (0, domain_event_registrations_1.getEventClass)(storedEvent.eventName);
|
|
122
123
|
if ((0, type_utils_1.isNil)(eventClass)) {
|
|
123
|
-
unregistered.push(
|
|
124
|
+
unregistered.push(storedEvent.eventName);
|
|
124
125
|
}
|
|
125
126
|
else {
|
|
126
127
|
const processorKey = (0, reflection_1.getDecoratedPropertyKey)(this, eventClass);
|
|
127
128
|
if ((0, type_utils_1.isNil)(processorKey)) {
|
|
128
|
-
missingProcessor.push(
|
|
129
|
+
missingProcessor.push(storedEvent.eventName);
|
|
129
130
|
}
|
|
130
131
|
else {
|
|
131
132
|
known.push({
|
|
132
|
-
payload:
|
|
133
|
+
payload: storedEvent.getPayloadAs(eventClass),
|
|
133
134
|
processorKey
|
|
134
135
|
});
|
|
135
136
|
}
|
|
136
137
|
}
|
|
137
|
-
}
|
|
138
|
+
}
|
|
138
139
|
return [unregistered, missingProcessor, known];
|
|
139
140
|
}
|
|
140
141
|
}
|
|
@@ -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,6CAAuD;AAOvD,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,
|
|
1
|
+
{"version":3,"file":"aggregate-root.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/aggregate-root/aggregate-root.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ exports.getDecoratedPropertyKey = getDecoratedPropertyKey;
|
|
|
4
4
|
require("reflect-metadata");
|
|
5
5
|
function getDecoratedPropertyKey(entity, eventClass) {
|
|
6
6
|
const metadataKeys = Reflect.getMetadataKeys(entity);
|
|
7
|
-
if (!metadataKeys || metadataKeys.length
|
|
7
|
+
if (!metadataKeys || metadataKeys.length === 0) {
|
|
8
8
|
return undefined;
|
|
9
9
|
}
|
|
10
10
|
const matchingKey = metadataKeys.find((metadataKey) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reflection.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/aggregate-root/reflection.ts"],"names":[],"mappings":";;AAKA,0DAgBC;AArBD,4BAA0B;AAK1B,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,
|
|
1
|
+
{"version":3,"file":"reflection.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/aggregate-root/reflection.ts"],"names":[],"mappings":";;AAKA,0DAgBC;AArBD,4BAA0B;AAK1B,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,KAAK,CAAC,EAAE,CAAC;QAC7C,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"}
|
|
@@ -3,16 +3,16 @@ type Registration = {
|
|
|
3
3
|
eventClass: unknown;
|
|
4
4
|
eventName: string;
|
|
5
5
|
};
|
|
6
|
-
/**
|
|
7
|
-
* Returns the event name that matches the class of the provided object.
|
|
8
|
-
* @param target
|
|
9
|
-
*/
|
|
10
|
-
export declare function getEventName(target: object): string | undefined;
|
|
11
6
|
/**
|
|
12
7
|
* Returns the class that matches the provided name. Or undefined.
|
|
13
8
|
* @param name The event name to be checked.
|
|
14
9
|
*/
|
|
15
10
|
export declare function getEventClass<T>(name: string): Class<T> | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Returns the event name that matches the class of the provided object.
|
|
13
|
+
* @param target
|
|
14
|
+
*/
|
|
15
|
+
export declare function getEventName(target: object): string | undefined;
|
|
16
16
|
export declare function isRegistered(event: object): boolean;
|
|
17
17
|
export declare function registerEvent(newRegistration: Registration): void;
|
|
18
18
|
export {};
|
|
@@ -1,20 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getEventName = getEventName;
|
|
4
3
|
exports.getEventClass = getEventClass;
|
|
4
|
+
exports.getEventName = getEventName;
|
|
5
5
|
exports.isRegistered = isRegistered;
|
|
6
6
|
exports.registerEvent = registerEvent;
|
|
7
7
|
const event_name_conflict_exception_1 = require("./exceptions/event-name-conflict-exception");
|
|
8
8
|
const type_utils_1 = require("./utils/type-utils");
|
|
9
9
|
const registrations = [];
|
|
10
|
-
/**
|
|
11
|
-
* Returns the event name that matches the class of the provided object.
|
|
12
|
-
* @param target
|
|
13
|
-
*/
|
|
14
|
-
function getEventName(target) {
|
|
15
|
-
const found = registrations.find((registration) => registration.eventClass === target.constructor);
|
|
16
|
-
return found ? found.eventName : undefined;
|
|
17
|
-
}
|
|
18
10
|
/**
|
|
19
11
|
* Returns the class that matches the provided name. Or undefined.
|
|
20
12
|
* @param name The event name to be checked.
|
|
@@ -23,6 +15,14 @@ function getEventClass(name) {
|
|
|
23
15
|
const found = registrations.find((registration) => registration.eventName === name);
|
|
24
16
|
return (0, type_utils_1.isNil)(found) ? undefined : found.eventClass;
|
|
25
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Returns the event name that matches the class of the provided object.
|
|
20
|
+
* @param target
|
|
21
|
+
*/
|
|
22
|
+
function getEventName(target) {
|
|
23
|
+
const found = registrations.find((registration) => registration.eventClass === target.constructor);
|
|
24
|
+
return found ? found.eventName : undefined;
|
|
25
|
+
}
|
|
26
26
|
function isRegistered(event) {
|
|
27
27
|
return !(0, type_utils_1.isNil)(getEventName(event));
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain-event-registrations.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/domain-event-registrations.ts"],"names":[],"mappings":";;AAgBA,
|
|
1
|
+
{"version":3,"file":"domain-event-registrations.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/domain-event-registrations.ts"],"names":[],"mappings":";;AAgBA,sCAGC;AAMD,oCAGC;AAED,oCAEC;AAED,sCAMC;AAtCD,8FAAwF;AACxF,mDAA2C;AAO3C,MAAM,aAAa,GAAwB,EAAE,CAAC;AAE9C;;;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;AAED;;;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;AAED,SAAgB,YAAY,CAAC,KAAa;IACtC,OAAO,CAAC,IAAA,kBAAK,EAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,CAAC;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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Class } from "type-fest";
|
|
2
2
|
import { OnDomainEvent } from "./on-domain-event";
|
|
3
3
|
export declare const DomainEventSubscription: (...eventClasses: Class<unknown>[]) => ClassDecorator;
|
|
4
|
-
export declare function isDomainEventSubscription(targetInstance: object): boolean;
|
|
5
|
-
export declare function getEventsFromDomainEventSubscription(subscriptionInstance: OnDomainEvent<unknown>): any[];
|
|
6
4
|
export declare function getEventId(eventConstructor: Function): string | undefined;
|
|
5
|
+
export declare function getEventsFromDomainEventSubscription(subscriptionInstance: OnDomainEvent<unknown>): any[];
|
|
6
|
+
export declare function isDomainEventSubscription(targetInstance: object): boolean;
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DomainEventSubscription = void 0;
|
|
4
|
-
exports.isDomainEventSubscription = isDomainEventSubscription;
|
|
5
|
-
exports.getEventsFromDomainEventSubscription = getEventsFromDomainEventSubscription;
|
|
6
4
|
exports.getEventId = getEventId;
|
|
7
|
-
|
|
5
|
+
exports.getEventsFromDomainEventSubscription = getEventsFromDomainEventSubscription;
|
|
6
|
+
exports.isDomainEventSubscription = isDomainEventSubscription;
|
|
7
|
+
const node_crypto_1 = require("node:crypto");
|
|
8
8
|
const metadata_keys_1 = require("./metadata-keys");
|
|
9
9
|
const type_utils_1 = require("./utils/type-utils");
|
|
10
10
|
const DomainEventSubscription = (...eventClasses) => {
|
|
11
11
|
return (target) => {
|
|
12
|
-
|
|
12
|
+
for (const event of eventClasses) {
|
|
13
13
|
if (!Reflect.hasOwnMetadata(metadata_keys_1.DOMAIN_EVENT_KEY, event)) {
|
|
14
|
-
Reflect.defineMetadata(metadata_keys_1.DOMAIN_EVENT_KEY, { eventSubscriptionId: `${event.name}-${(0,
|
|
14
|
+
Reflect.defineMetadata(metadata_keys_1.DOMAIN_EVENT_KEY, { eventSubscriptionId: `${event.name}-${(0, node_crypto_1.randomUUID)()}` }, event);
|
|
15
15
|
}
|
|
16
|
-
}
|
|
16
|
+
}
|
|
17
17
|
Reflect.defineMetadata(metadata_keys_1.DOMAIN_EVENT_SUBSCRIPTION_KEY, { events: eventClasses }, target);
|
|
18
18
|
};
|
|
19
19
|
};
|
|
20
20
|
exports.DomainEventSubscription = DomainEventSubscription;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
22
|
+
function getEventId(eventConstructor) {
|
|
23
|
+
return Reflect.getMetadata(metadata_keys_1.DOMAIN_EVENT_KEY, eventConstructor)?.eventSubscriptionId;
|
|
24
24
|
}
|
|
25
25
|
function getEventsFromDomainEventSubscription(subscriptionInstance) {
|
|
26
26
|
const metadata = Reflect.getMetadata(metadata_keys_1.DOMAIN_EVENT_SUBSCRIPTION_KEY, subscriptionInstance.constructor);
|
|
27
27
|
return (0, type_utils_1.isNil)(metadata) ? [] : metadata.events;
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return
|
|
29
|
+
function isDomainEventSubscription(targetInstance) {
|
|
30
|
+
const hasMetadata = Reflect.hasOwnMetadata(metadata_keys_1.DOMAIN_EVENT_SUBSCRIPTION_KEY, targetInstance.constructor);
|
|
31
|
+
return hasMetadata && typeof targetInstance.onDomainEvent === "function";
|
|
32
32
|
}
|
|
33
33
|
//# sourceMappingURL=domain-event-subscription.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain-event-subscription.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/domain-event-subscription.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"domain-event-subscription.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/domain-event-subscription.ts"],"names":[],"mappings":";;;AAwBA,gCAEC;AAED,oFAGC;AAED,8DAGC;AApCD,6CAAyC;AAGzC,mDAAkF;AAElF,mDAA2C;AAEpC,MAAM,uBAAuB,GAAG,CAAC,GAAG,YAA8B,EAAkB,EAAE;IACzF,OAAO,CAAC,MAAc,EAAE,EAAE;QACtB,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YAC/B,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,wBAAU,GAAE,EAAE,EAAE,EACxD,KAAK,CACR,CAAC;YACN,CAAC;QACL,CAAC;QAED,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,sEAAsE;AACtE,SAAgB,UAAU,CAAC,gBAA0B;IACjD,OAAO,OAAO,CAAC,WAAW,CAAC,gCAAgB,EAAE,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;AACxF,CAAC;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;AAED,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"}
|
|
@@ -23,8 +23,8 @@ class AbstractEventStore {
|
|
|
23
23
|
if ((0, type_utils_1.isNil)(aggregateRootName)) {
|
|
24
24
|
throw new missing_aggregate_root_name_exception_1.MissingAggregateRootNameException(aggregateRoot.constructor.name);
|
|
25
25
|
}
|
|
26
|
-
if (events.length
|
|
27
|
-
return
|
|
26
|
+
if (events.length === 0) {
|
|
27
|
+
return [];
|
|
28
28
|
}
|
|
29
29
|
const ids = await Promise.all(events.map(() => this.generateEntityId()));
|
|
30
30
|
if (ids.length !== events.length || !(0, type_utils_1.hasAllValues)(ids)) {
|
|
@@ -32,7 +32,7 @@ class AbstractEventStore {
|
|
|
32
32
|
}
|
|
33
33
|
const published = [];
|
|
34
34
|
const storedEvents = [];
|
|
35
|
-
|
|
35
|
+
for (const event of events) {
|
|
36
36
|
const id = ids.pop();
|
|
37
37
|
storedEvents.push(stored_event_1.StoredEvent.fromPublishedEvent(id, aggregateRoot.id, aggregateRootName, event.payload, event.occurredAt));
|
|
38
38
|
published.push({
|
|
@@ -40,16 +40,16 @@ class AbstractEventStore {
|
|
|
40
40
|
eventId: id,
|
|
41
41
|
version: aggregateRoot.version
|
|
42
42
|
});
|
|
43
|
-
}
|
|
43
|
+
}
|
|
44
44
|
const toStore = new stored_aggregate_root_1.StoredAggregateRoot(aggregateRoot.id, aggregateRoot.version);
|
|
45
45
|
const saved = await this.save(storedEvents, toStore);
|
|
46
|
-
published
|
|
47
|
-
const found = saved.find((s) => s.id ===
|
|
46
|
+
for (const publishedEvent of published) {
|
|
47
|
+
const found = saved.find((s) => s.id === publishedEvent.eventId);
|
|
48
48
|
if ((0, type_utils_1.isNil)(found)) {
|
|
49
|
-
throw new unknown_event_version_exception_1.UnknownEventVersionException(
|
|
49
|
+
throw new unknown_event_version_exception_1.UnknownEventVersionException(publishedEvent.eventId, publishedEvent.aggregateRootId);
|
|
50
50
|
}
|
|
51
|
-
|
|
52
|
-
}
|
|
51
|
+
publishedEvent.version = found.aggregateRootVersion;
|
|
52
|
+
}
|
|
53
53
|
this._eventEmitter.emitMultiple(published);
|
|
54
54
|
aggregateRoot.resolveVersion(saved);
|
|
55
55
|
return saved;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract-event-store.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/storage/abstract-event-store.ts"],"names":[],"mappings":";;;AAEA,+EAA6E;AAE7E,mFAA8E;AAC9E,+GAAwG;AACxG,mGAA6F;AAE7F,oDAA0D;AAE1D,mEAA8D;AAC9D,iDAA6C;AAE7C;;;;GAIG;AACH,MAAsB,kBAAkB;IACpC,YAA8B,aAAiC;QAAjC,kBAAa,GAAb,aAAa,CAAoB;IAAG,CAAC;IAEnE,YAAY,CAA0B,aAAgB;QAClD,aAAa,CAAC,OAAO,GAAG,KAAK,EAAE,MAAyC,EAAE,EAAE;YACxE,MAAM,iBAAiB,GAAG,IAAA,0CAAoB,EAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAC1E,IAAI,IAAA,kBAAK,EAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,yEAAiC,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAChF,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"abstract-event-store.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/storage/abstract-event-store.ts"],"names":[],"mappings":";;;AAEA,+EAA6E;AAE7E,mFAA8E;AAC9E,+GAAwG;AACxG,mGAA6F;AAE7F,oDAA0D;AAE1D,mEAA8D;AAC9D,iDAA6C;AAE7C;;;;GAIG;AACH,MAAsB,kBAAkB;IACpC,YAA8B,aAAiC;QAAjC,kBAAa,GAAb,aAAa,CAAoB;IAAG,CAAC;IAEnE,YAAY,CAA0B,aAAgB;QAClD,aAAa,CAAC,OAAO,GAAG,KAAK,EAAE,MAAyC,EAAE,EAAE;YACxE,MAAM,iBAAiB,GAAG,IAAA,0CAAoB,EAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAC1E,IAAI,IAAA,kBAAK,EAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,yEAAiC,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAChF,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,EAAE,CAAC;YACd,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YACzE,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,CAAC,IAAA,yBAAY,EAAC,GAAG,CAAC,EAAE,CAAC;gBACrD,MAAM,IAAI,+CAAqB,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/D,CAAC;YACD,MAAM,SAAS,GAAwC,EAAE,CAAC;YAC1D,MAAM,YAAY,GAAuB,EAAE,CAAC;YAE5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACzB,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,EAAY,CAAC;gBAC/B,YAAY,CAAC,IAAI,CACb,0BAAW,CAAC,kBAAkB,CAC1B,EAAE,EACF,aAAa,CAAC,EAAE,EAChB,iBAAiB,EACjB,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,UAAU,CACnB,CACJ,CAAC;gBACF,SAAS,CAAC,IAAI,CAAC;oBACX,GAAG,KAAK;oBACR,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,aAAa,CAAC,OAAO;iBACjC,CAAC,CAAC;YACP,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,2CAAmB,CAAC,aAAa,CAAC,EAAE,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;YACjF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACrD,KAAK,MAAM,cAAc,IAAI,SAAS,EAAE,CAAC;gBACrC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,OAAO,CAAC,CAAC;gBACjE,IAAI,IAAA,kBAAK,EAAC,KAAK,CAAC,EAAE,CAAC;oBACf,MAAM,IAAI,8DAA4B,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;gBACnG,CAAC;gBAED,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC,oBAAoB,CAAC;YACxD,CAAC;YAED,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAC3C,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACpC,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC;QACF,OAAO,aAAa,CAAC;IACzB,CAAC;CAiBJ;AAxED,gDAwEC"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { AggregateRoot } from "../aggregate-root/aggregate-root";
|
|
2
2
|
import { StoredAggregateRoot } from "./stored-aggregate-root";
|
|
3
3
|
import { StoredEvent } from "./stored-event";
|
|
4
|
-
export type AggregateRootClass<T> = {
|
|
4
|
+
export type AggregateRootClass<T> = Function & {
|
|
5
5
|
prototype: T;
|
|
6
|
-
}
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* A unique symbol that can be used to inject the event store into other classes.
|
|
9
|
+
*/
|
|
7
10
|
export declare const EVENT_STORE: unique symbol;
|
|
8
11
|
/**
|
|
9
12
|
* Defines the main EventStore interface that can be used to retrieve and save events. Each implementation of this interface
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EVENT_STORE = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* A unique symbol that can be used to inject the event store into other classes.
|
|
6
|
+
*/
|
|
4
7
|
exports.EVENT_STORE = Symbol("EVENT_NEST_EVENT_STORE");
|
|
5
8
|
//# sourceMappingURL=event-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-store.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/storage/event-store.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"event-store.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/storage/event-store.ts"],"names":[],"mappings":";;;AAOA;;GAEG;AACU,QAAA,WAAW,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
+
export declare function hasAllValues<T>(toCheck: Array<null | T | undefined>): toCheck is Array<T>;
|
|
1
2
|
export declare function isNil(toCheck: unknown): toCheck is null | undefined;
|
|
2
|
-
export declare function hasAllValues<T>(toCheck: Array<T | null | undefined>): toCheck is Array<T>;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isNil = isNil;
|
|
4
3
|
exports.hasAllValues = hasAllValues;
|
|
5
|
-
|
|
6
|
-
return toCheck === null || toCheck === undefined;
|
|
7
|
-
}
|
|
4
|
+
exports.isNil = isNil;
|
|
8
5
|
function hasAllValues(toCheck) {
|
|
9
6
|
return toCheck.every((item) => !isNil(item));
|
|
10
7
|
}
|
|
8
|
+
function isNil(toCheck) {
|
|
9
|
+
return toCheck === null || toCheck === undefined;
|
|
10
|
+
}
|
|
11
11
|
//# sourceMappingURL=type-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-utils.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/utils/type-utils.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"type-utils.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/utils/type-utils.ts"],"names":[],"mappings":";;AAAA,oCAEC;AAED,sBAEC;AAND,SAAgB,YAAY,CAAI,OAAoC;IAChE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,SAAgB,KAAK,CAAC,OAAgB;IAClC,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,CAAC;AACrD,CAAC"}
|