@nestjslatam/ddd-lib 1.0.46 → 1.0.48
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/ddd-aggregate-root.d.ts +19 -1
- package/ddd-aggregate-root.js +44 -2
- package/ddd-aggregate-root.js.map +1 -1
- package/ddd-events/impl/domain-event-cli.registry.d.ts +6 -0
- package/ddd-events/impl/domain-event-cli.registry.js +18 -0
- package/ddd-events/impl/domain-event-cli.registry.js.map +1 -0
- package/ddd-events/impl/domain-event.d.ts +9 -5
- package/ddd-events/impl/domain-event.deserializer.d.ts +8 -0
- package/ddd-events/impl/domain-event.deserializer.js +31 -0
- package/ddd-events/impl/domain-event.deserializer.js.map +1 -0
- package/ddd-events/impl/domain-event.js +2 -0
- package/ddd-events/impl/domain-event.js.map +1 -1
- package/ddd-events/impl/domain-event.serializer.d.ts +6 -0
- package/ddd-events/impl/domain-event.serializer.js +45 -0
- package/ddd-events/impl/domain-event.serializer.js.map +1 -0
- package/ddd-events/impl/index.d.ts +3 -0
- package/ddd-events/impl/index.js +3 -0
- package/ddd-events/impl/index.js.map +1 -1
- package/ddd-events/interfaces/domain-event-serializable.interface.d.ts +11 -0
- package/ddd-events/interfaces/domain-event-serializable.interface.js +3 -0
- package/ddd-events/interfaces/domain-event-serializable.interface.js.map +1 -0
- package/ddd-events/interfaces/index.d.ts +1 -0
- package/ddd-events/interfaces/index.js +1 -0
- package/ddd-events/interfaces/index.js.map +1 -1
- package/ddd-helpers/domain-object.helper.d.ts +3 -0
- package/ddd-helpers/domain-object.helper.js +8 -0
- package/ddd-helpers/domain-object.helper.js.map +1 -1
- package/package.json +1 -1
- package/tsconfig.lib.tsbuildinfo +1 -1
package/ddd-aggregate-root.d.ts
CHANGED
|
@@ -1,7 +1,24 @@
|
|
|
1
|
+
import { ITrackingProps } from './ddd-core';
|
|
1
2
|
import { DomainEntity } from './ddd-entity';
|
|
2
|
-
import { IDomainEvent } from './ddd-events';
|
|
3
|
+
import { IDomainEvent, ISerializableEvent } from './ddd-events';
|
|
4
|
+
import { DomainIdAsString } from './ddd-valueobjects';
|
|
5
|
+
declare const VERSION: unique symbol;
|
|
6
|
+
declare const IS_AUTOCOMMIT_ENABLED: unique symbol;
|
|
3
7
|
export declare abstract class DomainAggregateRoot<TProps, TDomainEventBase extends IDomainEvent = IDomainEvent> extends DomainEntity<TProps> {
|
|
4
8
|
protected _domainEvents: TDomainEventBase[];
|
|
9
|
+
protected [IS_AUTOCOMMIT_ENABLED]: boolean;
|
|
10
|
+
protected [VERSION]: number;
|
|
11
|
+
constructor(id: DomainIdAsString, props: TProps, trackingProps: ITrackingProps);
|
|
12
|
+
get version(): number;
|
|
13
|
+
set autoCommit(value: boolean);
|
|
14
|
+
get autoCommit(): boolean;
|
|
15
|
+
protected setVersion(version: number): void;
|
|
16
|
+
loadFromHistory(history: ISerializableEvent[]): void;
|
|
17
|
+
apply<T extends TDomainEventBase = TDomainEventBase>(event: T, isFromHistory?: boolean): void;
|
|
18
|
+
apply<T extends TDomainEventBase = TDomainEventBase>(event: T, options?: {
|
|
19
|
+
fromHistory?: boolean;
|
|
20
|
+
skipHandler?: boolean;
|
|
21
|
+
}): void;
|
|
5
22
|
publish<T extends TDomainEventBase = TDomainEventBase>(domainEvent: T): void;
|
|
6
23
|
publishAll<T extends TDomainEventBase = TDomainEventBase>(domainEvents: T[]): void;
|
|
7
24
|
commit(): void;
|
|
@@ -12,3 +29,4 @@ export declare abstract class DomainAggregateRoot<TProps, TDomainEventBase exten
|
|
|
12
29
|
get DomainEvents(): TDomainEventBase[];
|
|
13
30
|
uncommit(): void;
|
|
14
31
|
}
|
|
32
|
+
export {};
|
package/ddd-aggregate-root.js
CHANGED
|
@@ -1,11 +1,52 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var _a, _b;
|
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
4
|
exports.DomainAggregateRoot = void 0;
|
|
4
5
|
const ddd_entity_1 = require("./ddd-entity");
|
|
6
|
+
const ddd_helpers_1 = require("./ddd-helpers");
|
|
7
|
+
const VERSION = Symbol('version');
|
|
8
|
+
const IS_AUTOCOMMIT_ENABLED = Symbol();
|
|
5
9
|
class DomainAggregateRoot extends ddd_entity_1.DomainEntity {
|
|
6
|
-
constructor() {
|
|
7
|
-
super(
|
|
10
|
+
constructor(id, props, trackingProps) {
|
|
11
|
+
super({ id, props, trackingProps });
|
|
8
12
|
this._domainEvents = [];
|
|
13
|
+
this[_a] = false;
|
|
14
|
+
this[_b] = 0;
|
|
15
|
+
this.setVersion(0);
|
|
16
|
+
}
|
|
17
|
+
get version() {
|
|
18
|
+
return this[VERSION];
|
|
19
|
+
}
|
|
20
|
+
set autoCommit(value) {
|
|
21
|
+
this[IS_AUTOCOMMIT_ENABLED] = value;
|
|
22
|
+
}
|
|
23
|
+
get autoCommit() {
|
|
24
|
+
return this[IS_AUTOCOMMIT_ENABLED];
|
|
25
|
+
}
|
|
26
|
+
setVersion(version) {
|
|
27
|
+
this[VERSION] = version;
|
|
28
|
+
}
|
|
29
|
+
loadFromHistory(history) {
|
|
30
|
+
const domainEvents = history.map((event) => event.data);
|
|
31
|
+
domainEvents.forEach((event) => this.apply(event, true));
|
|
32
|
+
const lastEvent = history[history.length - 1];
|
|
33
|
+
this.setVersion(lastEvent.position);
|
|
34
|
+
}
|
|
35
|
+
apply(event, optionsOrIsFromHistory = {}) {
|
|
36
|
+
const isFromHistory = (typeof optionsOrIsFromHistory === 'boolean'
|
|
37
|
+
? optionsOrIsFromHistory
|
|
38
|
+
: optionsOrIsFromHistory.fromHistory) ?? false;
|
|
39
|
+
const skipHandler = typeof optionsOrIsFromHistory === 'boolean'
|
|
40
|
+
? false
|
|
41
|
+
: optionsOrIsFromHistory.skipHandler;
|
|
42
|
+
if (!isFromHistory && !this.autoCommit) {
|
|
43
|
+
this.addDomainEvent(event);
|
|
44
|
+
}
|
|
45
|
+
this.autoCommit && this.publish(event);
|
|
46
|
+
if (!skipHandler) {
|
|
47
|
+
const handler = ddd_helpers_1.DomainObjectHelper.getEventHandler(event);
|
|
48
|
+
handler && handler.call(this, event);
|
|
49
|
+
}
|
|
9
50
|
}
|
|
10
51
|
publish(domainEvent) { }
|
|
11
52
|
publishAll(domainEvents) { }
|
|
@@ -42,4 +83,5 @@ class DomainAggregateRoot extends ddd_entity_1.DomainEntity {
|
|
|
42
83
|
}
|
|
43
84
|
}
|
|
44
85
|
exports.DomainAggregateRoot = DomainAggregateRoot;
|
|
86
|
+
_a = IS_AUTOCOMMIT_ENABLED, _b = VERSION;
|
|
45
87
|
//# sourceMappingURL=ddd-aggregate-root.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ddd-aggregate-root.js","sourceRoot":"","sources":["../../../libs/ddd/src/ddd-aggregate-root.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ddd-aggregate-root.js","sourceRoot":"","sources":["../../../libs/ddd/src/ddd-aggregate-root.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DomainEventClsRegistry = void 0;
|
|
4
|
+
class DomainEventClsRegistry {
|
|
5
|
+
static add(eventCls) {
|
|
6
|
+
this.eventClsMap.set(eventCls.name, eventCls);
|
|
7
|
+
}
|
|
8
|
+
static get(eventClsName) {
|
|
9
|
+
const eventCls = this.eventClsMap.get(eventClsName);
|
|
10
|
+
if (!eventCls) {
|
|
11
|
+
throw new Error(`Event class "${eventClsName}" not registered`);
|
|
12
|
+
}
|
|
13
|
+
return eventCls;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.DomainEventClsRegistry = DomainEventClsRegistry;
|
|
17
|
+
DomainEventClsRegistry.eventClsMap = new Map();
|
|
18
|
+
//# sourceMappingURL=domain-event-cli.registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-event-cli.registry.js","sourceRoot":"","sources":["../../../../../libs/ddd/src/ddd-events/impl/domain-event-cli.registry.ts"],"names":[],"mappings":";;;AAEA,MAAa,sBAAsB;IAGjC,MAAM,CAAC,GAAG,CAAC,QAAc;QACvB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,YAAoB;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,gBAAgB,YAAY,kBAAkB,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;;AAbH,wDAcC;AAbyB,kCAAW,GAAG,IAAI,GAAG,EAAe,CAAC"}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { IDomainEvent, IDomainEventMetadata } from '../interfaces';
|
|
2
|
-
export
|
|
2
|
+
export interface DomainEventProps {
|
|
3
3
|
readonly aggregateId?: string;
|
|
4
|
+
readonly type?: string;
|
|
5
|
+
readonly position?: number;
|
|
4
6
|
readonly eventName?: string;
|
|
5
|
-
readonly data?:
|
|
7
|
+
readonly data?: Record<string, any>;
|
|
6
8
|
readonly metadata?: IDomainEventMetadata;
|
|
7
|
-
}
|
|
9
|
+
}
|
|
8
10
|
export declare abstract class DomainEvent implements IDomainEvent {
|
|
9
11
|
readonly domainEventId: string;
|
|
12
|
+
readonly type: string;
|
|
13
|
+
readonly position: number;
|
|
10
14
|
readonly aggregateId: string;
|
|
11
15
|
readonly eventName: string;
|
|
12
|
-
readonly data:
|
|
16
|
+
readonly data: Record<string, any>;
|
|
13
17
|
readonly metadata: IDomainEventMetadata;
|
|
14
|
-
constructor(props: DomainEventProps
|
|
18
|
+
constructor(props: DomainEventProps);
|
|
15
19
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Type } from '@nestjs/common';
|
|
2
|
+
import { ISerializableEvent } from '../interfaces';
|
|
3
|
+
import { DomainEvent } from './domain-event';
|
|
4
|
+
export declare class DomainEventDeserializer {
|
|
5
|
+
deserialize<T>(event: DomainEvent): ISerializableEvent<T>;
|
|
6
|
+
getEventClassByType(type: string): Type<any>;
|
|
7
|
+
instantiateSerializedEvent<T extends Type>(eventCls: T, data: Record<string, any>): any;
|
|
8
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DomainEventDeserializer = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const domain_event_cli_registry_1 = require("./domain-event-cli.registry");
|
|
12
|
+
let DomainEventDeserializer = class DomainEventDeserializer {
|
|
13
|
+
deserialize(event) {
|
|
14
|
+
const eventCls = this.getEventClassByType(event.type);
|
|
15
|
+
return {
|
|
16
|
+
...event,
|
|
17
|
+
data: this.instantiateSerializedEvent(eventCls, event.data),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
getEventClassByType(type) {
|
|
21
|
+
return domain_event_cli_registry_1.DomainEventClsRegistry.get(type);
|
|
22
|
+
}
|
|
23
|
+
instantiateSerializedEvent(eventCls, data) {
|
|
24
|
+
return Object.assign(Object.create(eventCls.prototype), data);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
exports.DomainEventDeserializer = DomainEventDeserializer;
|
|
28
|
+
exports.DomainEventDeserializer = DomainEventDeserializer = __decorate([
|
|
29
|
+
(0, common_1.Injectable)()
|
|
30
|
+
], DomainEventDeserializer);
|
|
31
|
+
//# sourceMappingURL=domain-event.deserializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-event.deserializer.js","sourceRoot":"","sources":["../../../../../libs/ddd/src/ddd-events/impl/domain-event.deserializer.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAkD;AAGlD,2EAAqE;AAI9D,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClC,WAAW,CAAI,KAAkB;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO;YACL,GAAG,KAAK;YACR,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC;SAC5D,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,IAAY;QAC9B,OAAO,kDAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,0BAA0B,CACxB,QAAW,EACX,IAAyB;QAEzB,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC;CACF,CAAA;AAnBY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;GACA,uBAAuB,CAmBnC"}
|
|
@@ -8,6 +8,8 @@ class DomainEvent {
|
|
|
8
8
|
constructor(props) {
|
|
9
9
|
try {
|
|
10
10
|
this.domainEventId = (0, uuid_1.v4)().toString();
|
|
11
|
+
this.type = props.type || 'DomainEvent';
|
|
12
|
+
this.position = props?.position || 0;
|
|
11
13
|
this.eventName = props?.eventName || this.constructor.name;
|
|
12
14
|
this.data = props?.data;
|
|
13
15
|
this.metadata = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain-event.js","sourceRoot":"","sources":["../../../../../libs/ddd/src/ddd-events/impl/domain-event.ts"],"names":[],"mappings":";;;AAGA,+BAA0B;AAG1B,mDAAmD;AACnD,yDAA4D;
|
|
1
|
+
{"version":3,"file":"domain-event.js","sourceRoot":"","sources":["../../../../../libs/ddd/src/ddd-events/impl/domain-event.ts"],"names":[],"mappings":";;;AAGA,+BAA0B;AAG1B,mDAAmD;AACnD,yDAA4D;AAiB5D,MAAsB,WAAW;IAqC/B,YAAY,KAAuB;QACjC,IAAI,CAAC;YACH,IAAI,CAAC,aAAa,GAAG,IAAA,SAAE,GAAE,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,aAAa,CAAC;YACxC,IAAI,CAAC,QAAQ,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAC3D,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC;YACxB,IAAI,CAAC,QAAQ,GAAG;gBACd,WAAW,EAAE,KAAK,EAAE,WAAW,IAAI,EAAE;gBACrC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU;gBACrC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS;gBACnC,SAAS,EAAE,4BAAc,CAAC,YAAY,EAAE;gBACxC,SAAS,EAAE,4BAAc,CAAC,UAAU,EAAE;aACvC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,qCAAoB,CAC5B,GAAG,IAAI,CAAC,SAAS,sCAAsC,KAAK,EAAE,CAC/D,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAzDD,kCAyDC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DomainAggregateRoot } from '../../ddd-aggregate-root';
|
|
2
|
+
import { ISerializableEvent } from '../interfaces';
|
|
3
|
+
export declare class DomainEventSerializer {
|
|
4
|
+
serialize<T>(event: T, dispatcher: DomainAggregateRoot<any>): ISerializableEvent<T>;
|
|
5
|
+
private toJSON;
|
|
6
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DomainEventSerializer = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
let DomainEventSerializer = class DomainEventSerializer {
|
|
12
|
+
serialize(event, dispatcher) {
|
|
13
|
+
const eventType = event.constructor?.name;
|
|
14
|
+
if (!eventType) {
|
|
15
|
+
throw new Error('Incompatible event type');
|
|
16
|
+
}
|
|
17
|
+
const aggregateId = dispatcher.id;
|
|
18
|
+
return {
|
|
19
|
+
aggregateId,
|
|
20
|
+
position: dispatcher.version + 1,
|
|
21
|
+
type: eventType,
|
|
22
|
+
data: this.toJSON(event),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
toJSON(data) {
|
|
26
|
+
if (typeof data !== 'object' || data === null) {
|
|
27
|
+
return data;
|
|
28
|
+
}
|
|
29
|
+
if ('toJSON' in data && typeof data.toJSON === 'function') {
|
|
30
|
+
return data.toJSON();
|
|
31
|
+
}
|
|
32
|
+
if (Array.isArray(data)) {
|
|
33
|
+
return data.map((item) => this.toJSON(item));
|
|
34
|
+
}
|
|
35
|
+
return Object.entries(data).reduce((acc, [key, value]) => {
|
|
36
|
+
acc[key] = this.toJSON(value);
|
|
37
|
+
return acc;
|
|
38
|
+
}, {});
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
exports.DomainEventSerializer = DomainEventSerializer;
|
|
42
|
+
exports.DomainEventSerializer = DomainEventSerializer = __decorate([
|
|
43
|
+
(0, common_1.Injectable)()
|
|
44
|
+
], DomainEventSerializer);
|
|
45
|
+
//# sourceMappingURL=domain-event.serializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-event.serializer.js","sourceRoot":"","sources":["../../../../../libs/ddd/src/ddd-events/impl/domain-event.serializer.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAMrC,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,SAAS,CACP,KAAQ,EACR,UAAoC;QAEpC,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC;QAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,EAAE,CAAC;QAElC,OAAO;YACL,WAAW;YACX,QAAQ,EAAE,UAAU,CAAC,OAAO,GAAG,CAAC;YAChC,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;SACzB,CAAC;IACJ,CAAC;IAEO,MAAM,CAAI,IAAO;QACvB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,QAAQ,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1D,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACvD,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9B,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;CACF,CAAA;AAtCY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;GACA,qBAAqB,CAsCjC"}
|
|
@@ -3,3 +3,6 @@ export * from './domain-event-collection';
|
|
|
3
3
|
export * from './domain-event';
|
|
4
4
|
export * from './domain-event-publisher';
|
|
5
5
|
export * from './domain-event-types';
|
|
6
|
+
export * from './domain-event.deserializer';
|
|
7
|
+
export * from './domain-event.serializer';
|
|
8
|
+
export * from './domain-event-cli.registry';
|
package/ddd-events/impl/index.js
CHANGED
|
@@ -19,4 +19,7 @@ __exportStar(require("./domain-event-collection"), exports);
|
|
|
19
19
|
__exportStar(require("./domain-event"), exports);
|
|
20
20
|
__exportStar(require("./domain-event-publisher"), exports);
|
|
21
21
|
__exportStar(require("./domain-event-types"), exports);
|
|
22
|
+
__exportStar(require("./domain-event.deserializer"), exports);
|
|
23
|
+
__exportStar(require("./domain-event.serializer"), exports);
|
|
24
|
+
__exportStar(require("./domain-event-cli.registry"), exports);
|
|
22
25
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/ddd/src/ddd-events/impl/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,4DAA0C;AAC1C,iDAA+B;AAC/B,2DAAyC;AACzC,uDAAqC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/ddd/src/ddd-events/impl/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,4DAA0C;AAC1C,iDAA+B;AAC/B,2DAAyC;AACzC,uDAAqC;AACrC,8DAA4C;AAC5C,4DAA0C;AAC1C,8DAA4C"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type SerializedEventPayload<T> = T extends object ? {
|
|
2
|
+
[K in keyof T]: T[K] extends {
|
|
3
|
+
toJSON(): infer U;
|
|
4
|
+
} ? U : SerializedEventPayload<T[K]>;
|
|
5
|
+
} : T;
|
|
6
|
+
export interface ISerializableEvent<T = any> {
|
|
7
|
+
aggregateId: string;
|
|
8
|
+
type: string;
|
|
9
|
+
position: number;
|
|
10
|
+
data: SerializedEventPayload<T>;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-event-serializable.interface.js","sourceRoot":"","sources":["../../../../../libs/ddd/src/ddd-events/interfaces/domain-event-serializable.interface.ts"],"names":[],"mappings":""}
|
|
@@ -19,4 +19,5 @@ __exportStar(require("./domain-event.interface"), exports);
|
|
|
19
19
|
__exportStar(require("./domain-event-publisher.interface"), exports);
|
|
20
20
|
__exportStar(require("./domain-event-metadata.interface"), exports);
|
|
21
21
|
__exportStar(require("./domain-event-handler.interface"), exports);
|
|
22
|
+
__exportStar(require("./domain-event-serializable.interface"), exports);
|
|
22
23
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/ddd/src/ddd-events/interfaces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+DAA6C;AAC7C,2DAAyC;AACzC,qEAAmD;AACnD,oEAAkD;AAClD,mEAAiD"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/ddd/src/ddd-events/interfaces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+DAA6C;AAC7C,2DAAyC;AACzC,qEAAmD;AACnD,oEAAkD;AAClD,mEAAiD;AACjD,wEAAsD"}
|
|
@@ -2,6 +2,7 @@ import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';
|
|
|
2
2
|
import { Module } from '@nestjs/core/injector/module';
|
|
3
3
|
import { DomainEntity } from '../ddd-entity';
|
|
4
4
|
import { Type } from '../types';
|
|
5
|
+
import { IDomainEvent, IDomainEventHandler } from '../ddd-events';
|
|
5
6
|
export declare class DomainObjectHelper {
|
|
6
7
|
static isEntity(obj: unknown): obj is DomainEntity<unknown>;
|
|
7
8
|
static convertToPlainObject(item: any): any;
|
|
@@ -10,4 +11,6 @@ export declare class DomainObjectHelper {
|
|
|
10
11
|
static flatMap<T>(modules: Module[], callback: (instance: InstanceWrapper) => Type<any> | undefined): Type<T>[];
|
|
11
12
|
static filterProvider(wrapper: InstanceWrapper, metadataKey: string): Type<any> | undefined;
|
|
12
13
|
static extractMetadata(instance: Record<string, any>, metadataKey: string): Type<any>;
|
|
14
|
+
static getEventHandler<T extends IDomainEvent = IDomainEvent>(event: T): Type<IDomainEventHandler> | undefined;
|
|
15
|
+
static getEventName(event: any): string;
|
|
13
16
|
}
|
|
@@ -58,6 +58,14 @@ class DomainObjectHelper {
|
|
|
58
58
|
const metadata = Reflect.getMetadata(metadataKey, instance.constructor);
|
|
59
59
|
return metadata ? instance.constructor : undefined;
|
|
60
60
|
}
|
|
61
|
+
static getEventHandler(event) {
|
|
62
|
+
const handler = `on${this.getEventName(event)}`;
|
|
63
|
+
return this[handler];
|
|
64
|
+
}
|
|
65
|
+
static getEventName(event) {
|
|
66
|
+
const { constructor } = Object.getPrototypeOf(event);
|
|
67
|
+
return constructor.name;
|
|
68
|
+
}
|
|
61
69
|
}
|
|
62
70
|
exports.DomainObjectHelper = DomainObjectHelper;
|
|
63
71
|
//# sourceMappingURL=domain-object.helper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain-object.helper.js","sourceRoot":"","sources":["../../../../libs/ddd/src/ddd-helpers/domain-object.helper.ts"],"names":[],"mappings":";;;AAGA,8CAA6C;AAE7C,sDAAyD;
|
|
1
|
+
{"version":3,"file":"domain-object.helper.js","sourceRoot":"","sources":["../../../../libs/ddd/src/ddd-helpers/domain-object.helper.ts"],"names":[],"mappings":"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"}
|