ddd-node 30.1.2 → 32.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/base/decorators/model.d.ts +5 -5
  2. package/base/decorators/mutable.d.ts +2 -2
  3. package/base/decorators/prop.d.ts +2 -2
  4. package/base/decorators/props-validator.d.ts +2 -2
  5. package/base/decorators/static.d.ts +2 -2
  6. package/base/domain.d.ts +1 -0
  7. package/base/domain.js +3 -0
  8. package/base/meta/model-domain.d.ts +4 -3
  9. package/base/meta/model-id.d.ts +3 -3
  10. package/base/meta/model-mutable.d.ts +1 -0
  11. package/base/meta/model-mutable.js +1 -0
  12. package/base/meta/model-name.d.ts +3 -3
  13. package/base/meta/model-props-map.d.ts +5 -5
  14. package/base/meta/model-props-map.js +1 -1
  15. package/base/meta/model-props-validator.d.ts +4 -4
  16. package/base/meta/model-static-values.d.ts +8 -8
  17. package/base/meta/model-version.d.ts +3 -3
  18. package/base/model/index.d.ts +0 -1
  19. package/base/model/index.js +0 -1
  20. package/base/model/model-descriptor.d.ts +15 -12
  21. package/base/model/model-descriptor.js +39 -0
  22. package/base/model/model.d.ts +10 -20
  23. package/base/model/model.js +23 -52
  24. package/base/model-registry.d.ts +14 -10
  25. package/base/model-registry.js +42 -27
  26. package/core/decorators/enum/index.d.ts +1 -0
  27. package/core/decorators/enum/index.js +17 -0
  28. package/core/decorators/enum/is-enum.d.ts +2 -0
  29. package/{decorators/enum.js → core/decorators/enum/is-enum.js} +4 -4
  30. package/core/decorators/es-aggregate/handle.d.ts +2 -0
  31. package/core/decorators/es-aggregate/when.d.ts +2 -0
  32. package/{decorators → core/decorators}/index.d.ts +1 -1
  33. package/{decorators → core/decorators}/index.js +1 -1
  34. package/core/decorators/message/index.d.ts +2 -0
  35. package/core/decorators/message/index.js +18 -0
  36. package/core/decorators/message/is-command.d.ts +4 -0
  37. package/{decorators/message/command.js → core/decorators/message/is-command.js} +4 -4
  38. package/core/decorators/message/is-event.d.ts +4 -0
  39. package/{decorators/message/event.js → core/decorators/message/is-event.js} +4 -4
  40. package/core/index.d.ts +3 -6
  41. package/core/index.js +3 -6
  42. package/{meta → core/meta}/command.metadata.js +2 -2
  43. package/{meta/aggregate-es → core/meta/es-aggregate}/command-handler-map.d.ts +1 -1
  44. package/{meta/aggregate-es → core/meta/es-aggregate}/event-applier-map.d.ts +1 -1
  45. package/{meta → core/meta}/event.metadata.js +1 -1
  46. package/{meta → core/meta}/index.d.ts +1 -1
  47. package/{meta → core/meta}/index.js +1 -1
  48. package/core/{aggregate/aggregate-base → model/aggregate}/aggregate.d.ts +7 -6
  49. package/core/{aggregate/aggregate-base → model/aggregate}/aggregate.js +12 -12
  50. package/core/model/aggregate/es-aggregate.d.ts +50 -0
  51. package/core/{aggregate/event-sourced-aggregate/event-sourced-aggregate.js → model/aggregate/es-aggregate.js} +40 -33
  52. package/core/model/aggregate/index.d.ts +4 -0
  53. package/core/{aggregate → model/aggregate}/index.js +2 -2
  54. package/core/{aggregate/state-aggregate → model/aggregate}/state-aggregate.d.ts +10 -9
  55. package/core/{aggregate/state-aggregate → model/aggregate}/state-aggregate.js +9 -7
  56. package/core/model/aggregate/types.d.ts +7 -0
  57. package/core/model/entity/entity.d.ts +18 -0
  58. package/core/{entity → model/entity}/entity.js +12 -9
  59. package/core/model/entity/index.d.ts +1 -0
  60. package/core/{entity → model/entity}/index.js +0 -1
  61. package/core/{enum → model/enum}/enum.d.ts +7 -10
  62. package/core/{enum → model/enum}/enum.js +24 -16
  63. package/core/model/enum/index.d.ts +1 -0
  64. package/core/{enum → model/enum}/index.js +0 -1
  65. package/core/model/index.d.ts +6 -0
  66. package/core/{aggregate/aggregate-base → model}/index.js +5 -2
  67. package/core/model/message/command.d.ts +20 -0
  68. package/core/model/message/command.js +27 -0
  69. package/core/model/message/event.d.ts +32 -0
  70. package/core/model/message/event.js +31 -0
  71. package/{decorators → core/model}/message/index.d.ts +2 -1
  72. package/{decorators → core/model}/message/index.js +2 -1
  73. package/core/model/message/message.d.ts +37 -0
  74. package/core/{message/message-base → model/message}/message.js +13 -6
  75. package/core/{model-with-id → model/model-with-id}/index.d.ts +0 -1
  76. package/core/{model-with-id → model/model-with-id}/index.js +0 -1
  77. package/core/{model-with-id → model/model-with-id}/model-with-id.d.ts +2 -2
  78. package/core/{model-with-id → model/model-with-id}/model-with-id.js +2 -2
  79. package/core/model/value-object/index.d.ts +1 -0
  80. package/core/{value-object → model/value-object}/index.js +0 -1
  81. package/core/model/value-object/value-object.d.ts +18 -0
  82. package/core/{value-object → model/value-object}/value-object.js +13 -9
  83. package/core/repository/repository.d.ts +1 -2
  84. package/event-pubsub/decorators/subscribe-to-events.d.ts +1 -1
  85. package/event-pubsub/event-dispatcher.d.ts +7 -0
  86. package/event-pubsub/{event-publisher.js → event-dispatcher.js} +4 -4
  87. package/event-pubsub/event-subscriber.d.ts +1 -1
  88. package/event-pubsub/index.d.ts +1 -1
  89. package/event-pubsub/index.js +1 -1
  90. package/event-pubsub/interfaces/event-dispatcher.interface.d.ts +4 -0
  91. package/event-pubsub/interfaces/index.d.ts +1 -1
  92. package/event-pubsub/interfaces/index.js +1 -1
  93. package/index.d.ts +1 -3
  94. package/index.js +1 -3
  95. package/package.json +1 -1
  96. package/base/model/model.builder.d.ts +0 -11
  97. package/base/model/model.builder.js +0 -18
  98. package/core/aggregate/aggregate-base/aggregate-event-publisher.interface.d.ts +0 -4
  99. package/core/aggregate/aggregate-base/aggregate.builder.d.ts +0 -6
  100. package/core/aggregate/aggregate-base/aggregate.builder.js +0 -15
  101. package/core/aggregate/aggregate-base/index.d.ts +0 -3
  102. package/core/aggregate/event-sourced-aggregate/event-sourced-aggregate-model-descriptor.d.ts +0 -9
  103. package/core/aggregate/event-sourced-aggregate/event-sourced-aggregate-model-descriptor.js +0 -2
  104. package/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.builder.d.ts +0 -13
  105. package/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.builder.js +0 -33
  106. package/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.d.ts +0 -49
  107. package/core/aggregate/event-sourced-aggregate/index.d.ts +0 -2
  108. package/core/aggregate/event-sourced-aggregate/index.js +0 -18
  109. package/core/aggregate/event-sourced-aggregate/snapshot.d.ts +0 -8
  110. package/core/aggregate/event-sourced-aggregate/snapshot.js +0 -2
  111. package/core/aggregate/index.d.ts +0 -4
  112. package/core/aggregate/state-aggregate/index.d.ts +0 -2
  113. package/core/aggregate/state-aggregate/index.js +0 -18
  114. package/core/aggregate/state-aggregate/state-aggregate.builder.d.ts +0 -7
  115. package/core/aggregate/state-aggregate/state-aggregate.builder.js +0 -19
  116. package/core/aggregate/types.d.ts +0 -4
  117. package/core/entity/entity.builder.d.ts +0 -7
  118. package/core/entity/entity.builder.js +0 -16
  119. package/core/entity/entity.d.ts +0 -18
  120. package/core/entity/index.d.ts +0 -2
  121. package/core/enum/enum-builder.d.ts +0 -9
  122. package/core/enum/enum-builder.js +0 -32
  123. package/core/enum/index.d.ts +0 -2
  124. package/core/message/command/command-model-descriptor.d.ts +0 -6
  125. package/core/message/command/command-model-descriptor.js +0 -2
  126. package/core/message/command/command.builder.d.ts +0 -7
  127. package/core/message/command/command.builder.js +0 -21
  128. package/core/message/command/command.d.ts +0 -24
  129. package/core/message/command/command.js +0 -29
  130. package/core/message/command/index.d.ts +0 -3
  131. package/core/message/command/index.js +0 -19
  132. package/core/message/event/event-model-descriptor.d.ts +0 -6
  133. package/core/message/event/event-model-descriptor.js +0 -2
  134. package/core/message/event/event.builder.d.ts +0 -9
  135. package/core/message/event/event.builder.js +0 -28
  136. package/core/message/event/event.d.ts +0 -35
  137. package/core/message/event/event.js +0 -33
  138. package/core/message/event/index.d.ts +0 -3
  139. package/core/message/event/index.js +0 -19
  140. package/core/message/index.d.ts +0 -3
  141. package/core/message/index.js +0 -19
  142. package/core/message/message-base/index.d.ts +0 -2
  143. package/core/message/message-base/index.js +0 -18
  144. package/core/message/message-base/message.builder.d.ts +0 -16
  145. package/core/message/message-base/message.builder.js +0 -44
  146. package/core/message/message-base/message.d.ts +0 -31
  147. package/core/model-with-id/model-with-id.builder.d.ts +0 -9
  148. package/core/model-with-id/model-with-id.builder.js +0 -22
  149. package/core/value-object/index.d.ts +0 -2
  150. package/core/value-object/value-object.builder.d.ts +0 -7
  151. package/core/value-object/value-object.builder.js +0 -16
  152. package/core/value-object/value-object.d.ts +0 -17
  153. package/decorators/aggregate-es/handle.d.ts +0 -2
  154. package/decorators/aggregate-es/when.d.ts +0 -2
  155. package/decorators/enum.d.ts +0 -2
  156. package/decorators/message/command.d.ts +0 -4
  157. package/decorators/message/event.d.ts +0 -4
  158. package/event-pubsub/event-publisher.d.ts +0 -7
  159. package/event-pubsub/interfaces/event-publisher.interface.d.ts +0 -4
  160. package/event-pubsub/interfaces/event-publisher.interface.js +0 -2
  161. /package/{decorators/aggregate-es → core/decorators/es-aggregate}/handle.js +0 -0
  162. /package/{decorators/aggregate-es → core/decorators/es-aggregate}/index.d.ts +0 -0
  163. /package/{decorators/aggregate-es → core/decorators/es-aggregate}/index.js +0 -0
  164. /package/{decorators/aggregate-es → core/decorators/es-aggregate}/when.js +0 -0
  165. /package/{decorators → core/decorators}/type.d.ts +0 -0
  166. /package/{decorators → core/decorators}/type.js +0 -0
  167. /package/{meta → core/meta}/command.metadata.d.ts +0 -0
  168. /package/{meta/aggregate-es → core/meta/es-aggregate}/command-handler-map.js +0 -0
  169. /package/{meta/aggregate-es → core/meta/es-aggregate}/event-applier-map.js +0 -0
  170. /package/{meta/aggregate-es → core/meta/es-aggregate}/index.d.ts +0 -0
  171. /package/{meta/aggregate-es → core/meta/es-aggregate}/index.js +0 -0
  172. /package/{meta → core/meta}/event.metadata.d.ts +0 -0
  173. /package/core/{aggregate → model/aggregate}/types.js +0 -0
  174. /package/core/{model-with-id → model/model-with-id}/id.d.ts +0 -0
  175. /package/core/{model-with-id → model/model-with-id}/id.js +0 -0
  176. /package/{core/aggregate/aggregate-base/aggregate-event-publisher.interface.js → event-pubsub/interfaces/event-dispatcher.interface.js} +0 -0
@@ -9,21 +9,29 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.EnumBase = void 0;
13
- const base_1 = require("../../base");
14
- const _1 = require(".");
15
- let EnumBase = class EnumBase extends base_1.ModelBase {
16
- static builder() {
17
- return new _1.EnumBuilder(this);
18
- }
12
+ exports.Enum = void 0;
13
+ const base_1 = require("../../../base");
14
+ let Enum = class Enum extends base_1.DomainModel {
19
15
  static values() {
20
- return Array.from(this.ownModelStaticValues().values()).map((staticValue) => staticValue.value);
16
+ return Array.from(this.modelDescriptor().ownModelStaticValues().values()).map((staticValue) => staticValue.value);
21
17
  }
22
18
  static from(value) {
23
- return this.builder().withValue(value).build();
24
- }
25
- static fromSafe(value) {
26
- return this.builder().withValue(value).buildSafe();
19
+ if (!value)
20
+ throw new Error("Cannot parse enum without value");
21
+ let result;
22
+ this.modelDescriptor()
23
+ .ownModelStaticValues()
24
+ .forEach((staticValue) => {
25
+ if (staticValue.value instanceof this) {
26
+ const staticEnum = staticValue.value;
27
+ if (staticEnum.value === value && !result) {
28
+ result = staticEnum;
29
+ }
30
+ }
31
+ });
32
+ if (!result)
33
+ throw new Error(`Invalid provided value for enum ${this.modelDescriptor().modelName()}`);
34
+ return result;
27
35
  }
28
36
  constructor(value) {
29
37
  super();
@@ -33,12 +41,12 @@ let EnumBase = class EnumBase extends base_1.ModelBase {
33
41
  return this.value;
34
42
  }
35
43
  };
36
- exports.EnumBase = EnumBase;
44
+ exports.Enum = Enum;
37
45
  __decorate([
38
46
  (0, base_1.Prop)(),
39
47
  __metadata("design:type", Object)
40
- ], EnumBase.prototype, "value", void 0);
41
- exports.EnumBase = EnumBase = __decorate([
48
+ ], Enum.prototype, "value", void 0);
49
+ exports.Enum = Enum = __decorate([
42
50
  (0, base_1.Mutable)(false),
43
51
  __metadata("design:paramtypes", [Object])
44
- ], EnumBase);
52
+ ], Enum);
@@ -0,0 +1 @@
1
+ export * from "./enum";
@@ -15,4 +15,3 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./enum"), exports);
18
- __exportStar(require("./enum-builder"), exports);
@@ -0,0 +1,6 @@
1
+ export * from "./value-object";
2
+ export * from "./enum";
3
+ export * from "./model-with-id";
4
+ export * from "./entity";
5
+ export * from "./aggregate";
6
+ export * from "./message";
@@ -14,6 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./value-object"), exports);
18
+ __exportStar(require("./enum"), exports);
19
+ __exportStar(require("./model-with-id"), exports);
20
+ __exportStar(require("./entity"), exports);
17
21
  __exportStar(require("./aggregate"), exports);
18
- __exportStar(require("./aggregate.builder"), exports);
19
- __exportStar(require("./aggregate-event-publisher.interface"), exports);
22
+ __exportStar(require("./message"), exports);
@@ -0,0 +1,20 @@
1
+ import { Class } from "type-fest";
2
+ import { InferredProps, Props } from "../../../base";
3
+ import { ClassStatic } from "../../../types";
4
+ import { CommandType } from "../../meta";
5
+ import { Message, MessageClass, MessageMetadata, MessageMetadataInput } from "./message";
6
+ export interface CommandMetadata extends MessageMetadata {
7
+ commandType: CommandType;
8
+ }
9
+ export declare class Command<P extends Props> extends Message<P> {
10
+ static build<T extends AnyCommand>(this: CommandClassWithTypedConstructor<T>, props: InferredProps<T>, metadata?: MessageMetadataInput): T;
11
+ static commandType<T extends AnyCommand>(this: CommandClass<T>): string;
12
+ protected readonly _commandType: CommandType;
13
+ constructor(metadata: Omit<CommandMetadata, "commandType">, props: P);
14
+ _constructor(): CommandClass<this, any[]>;
15
+ metadata(): CommandMetadata;
16
+ commandType(): string;
17
+ }
18
+ export type AnyCommand = Command<Props>;
19
+ export type CommandClass<T extends AnyCommand = AnyCommand, Arguments extends unknown[] = any[]> = MessageClass<T> & Class<T, Arguments> & ClassStatic<typeof Command<InferredProps<T>>>;
20
+ export type CommandClassWithTypedConstructor<T extends AnyCommand = AnyCommand> = CommandClass<T, ConstructorParameters<typeof Command<InferredProps<T>>>>;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Command = void 0;
4
+ const meta_1 = require("../../meta");
5
+ const message_1 = require("./message");
6
+ class Command extends message_1.Message {
7
+ static build(props, metadata) {
8
+ return new this(this.createMetadata(metadata), props);
9
+ }
10
+ static commandType() {
11
+ return (0, meta_1.getCommandType)(this);
12
+ }
13
+ constructor(metadata, props) {
14
+ super(metadata, props);
15
+ this._commandType = this._constructor().commandType();
16
+ }
17
+ _constructor() {
18
+ return this.constructor;
19
+ }
20
+ metadata() {
21
+ return Object.assign(Object.assign({}, super.metadata()), { commandType: this._commandType });
22
+ }
23
+ commandType() {
24
+ return this._commandType;
25
+ }
26
+ }
27
+ exports.Command = Command;
@@ -0,0 +1,32 @@
1
+ import { Class } from "type-fest";
2
+ import { InferredProps, Props } from "../../../base";
3
+ import { ClassStatic } from "../../../types";
4
+ import { EventType } from "../../meta";
5
+ import { Id } from "../model-with-id";
6
+ import { Message, MessageClass, MessageMetadata, MessageMetadataInput } from "./message";
7
+ export type EventSource = Readonly<{
8
+ aggregateId: Id;
9
+ aggregateVersion: number;
10
+ }>;
11
+ export interface EventMetadata extends MessageMetadata {
12
+ eventType: EventType;
13
+ source: EventSource;
14
+ }
15
+ export type EventMetadataInput = MessageMetadataInput & Pick<EventMetadata, "source">;
16
+ export declare class Event<P extends Props> extends Message<P> {
17
+ static build<T extends AnyEvent>(this: EventClassWithTypedConstructor<T>, props: InferredProps<T>, metadata: EventMetadataInput): T;
18
+ static eventType<T extends AnyEvent>(this: EventClass<T>): string;
19
+ private readonly _eventType;
20
+ private readonly _source;
21
+ constructor(metadata: Omit<EventMetadata, "eventType">, props: P);
22
+ _constructor(): EventClass<this, any[]>;
23
+ metadata(): EventMetadata;
24
+ eventType(): string;
25
+ source(): Readonly<{
26
+ aggregateId: string;
27
+ aggregateVersion: number;
28
+ }>;
29
+ }
30
+ export type AnyEvent = Event<Props>;
31
+ export type EventClass<T extends AnyEvent = AnyEvent, Arguments extends unknown[] = any[]> = MessageClass<T> & Class<T, Arguments> & ClassStatic<typeof Event<InferredProps<T>>>;
32
+ export type EventClassWithTypedConstructor<T extends AnyEvent = AnyEvent> = EventClass<T, ConstructorParameters<typeof Event<InferredProps<T>>>>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Event = void 0;
4
+ const meta_1 = require("../../meta");
5
+ const message_1 = require("./message");
6
+ class Event extends message_1.Message {
7
+ static build(props, metadata) {
8
+ return new this(Object.assign(Object.assign({}, this.createMetadata()), metadata), props);
9
+ }
10
+ static eventType() {
11
+ return (0, meta_1.getEventType)(this);
12
+ }
13
+ constructor(metadata, props) {
14
+ super(metadata, props);
15
+ this._eventType = this._constructor().eventType();
16
+ this._source = metadata.source;
17
+ }
18
+ _constructor() {
19
+ return this.constructor;
20
+ }
21
+ metadata() {
22
+ return Object.assign(Object.assign({}, super.metadata()), { eventType: this._eventType, source: this._source });
23
+ }
24
+ eventType() {
25
+ return this._eventType;
26
+ }
27
+ source() {
28
+ return this._source;
29
+ }
30
+ }
31
+ exports.Event = Event;
@@ -1,2 +1,3 @@
1
- export * from "./command";
1
+ export * from "./message";
2
2
  export * from "./event";
3
+ export * from "./command";
@@ -14,5 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./command"), exports);
17
+ __exportStar(require("./message"), exports);
18
18
  __exportStar(require("./event"), exports);
19
+ __exportStar(require("./command"), exports);
@@ -0,0 +1,37 @@
1
+ import { Class } from "type-fest";
2
+ import { DomainModelClass, InferredProps, Props } from "../../../base";
3
+ import { ClassStatic } from "../../../types";
4
+ import { ModelWithId, ModelWithIdMetadata } from "../model-with-id";
5
+ export interface CorrelationIds {
6
+ [type: string]: string | undefined;
7
+ }
8
+ export interface MessageMetadata extends ModelWithIdMetadata {
9
+ timestamp: number;
10
+ causationId?: string;
11
+ correlationIds: CorrelationIds;
12
+ }
13
+ export type MessageMetadataInput = Partial<MessageMetadata>;
14
+ export declare class Message<P extends Props> extends ModelWithId<P> {
15
+ static createMetadata: (metadata?: MessageMetadataInput) => {
16
+ timestamp: number;
17
+ causationId?: string | undefined;
18
+ correlationIds: CorrelationIds;
19
+ id: string;
20
+ };
21
+ static buildMessage<T extends AnyMessage>(this: MessageClassWithTypedConstructor<T>, props: InferredProps<T>, metadata?: MessageMetadataInput): T;
22
+ private readonly _timestamp;
23
+ private _causationId?;
24
+ private _correlationIds;
25
+ constructor(metadata: MessageMetadata, props: P);
26
+ props(): P;
27
+ metadata(): MessageMetadata;
28
+ timestamp(): number;
29
+ correlationIds(): CorrelationIds;
30
+ causationId(): string | undefined;
31
+ setCausationId(causationId: string): void;
32
+ addCorrelationId(type: string, correlationId: string): void;
33
+ setCorrelationIds(correlationIds: CorrelationIds): void;
34
+ }
35
+ export type AnyMessage = Message<Props>;
36
+ export type MessageClass<T extends AnyMessage = AnyMessage, Arguments extends unknown[] = any[]> = DomainModelClass<T> & Class<T, Arguments> & ClassStatic<typeof Message<InferredProps<T>>>;
37
+ export type MessageClassWithTypedConstructor<T extends AnyMessage = AnyMessage> = MessageClass<T, ConstructorParameters<typeof Message<InferredProps<T>>>>;
@@ -9,10 +9,14 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.MessageBase = void 0;
12
+ exports.Message = void 0;
13
+ const uuid_1 = require("uuid");
13
14
  const base_1 = require("../../../base");
14
- const model_with_id_1 = require("../../model-with-id");
15
- let MessageBase = class MessageBase extends model_with_id_1.ModelWithId {
15
+ const model_with_id_1 = require("../model-with-id");
16
+ let Message = class Message extends model_with_id_1.ModelWithId {
17
+ static buildMessage(props, metadata) {
18
+ return new this(this.createMetadata(metadata), props);
19
+ }
16
20
  constructor(metadata, props) {
17
21
  super(metadata);
18
22
  this._timestamp = metadata.timestamp;
@@ -46,8 +50,11 @@ let MessageBase = class MessageBase extends model_with_id_1.ModelWithId {
46
50
  this._correlationIds = correlationIds;
47
51
  }
48
52
  };
49
- exports.MessageBase = MessageBase;
50
- exports.MessageBase = MessageBase = __decorate([
53
+ exports.Message = Message;
54
+ Message.createMetadata = (metadata) => {
55
+ return Object.assign({ id: (0, uuid_1.v4)(), timestamp: Date.now(), correlationIds: {} }, metadata);
56
+ };
57
+ exports.Message = Message = __decorate([
51
58
  (0, base_1.Mutable)(false),
52
59
  __metadata("design:paramtypes", [Object, Object])
53
- ], MessageBase);
60
+ ], Message);
@@ -1,3 +1,2 @@
1
1
  export * from "./id";
2
2
  export * from "./model-with-id";
3
- export * from "./model-with-id.builder";
@@ -16,4 +16,3 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./id"), exports);
18
18
  __exportStar(require("./model-with-id"), exports);
19
- __exportStar(require("./model-with-id.builder"), exports);
@@ -1,9 +1,9 @@
1
1
  import { Id } from "./id";
2
- import { ModelBase, Props } from "../../base";
2
+ import { DomainModel, Props } from "../../../base";
3
3
  export interface ModelWithIdMetadata {
4
4
  id: Id;
5
5
  }
6
- export declare class ModelWithId<P extends Props> extends ModelBase<P> {
6
+ export declare class ModelWithId<P extends Props> extends DomainModel<P> {
7
7
  protected readonly _id: Id;
8
8
  constructor(metadata: ModelWithIdMetadata);
9
9
  metadata(): ModelWithIdMetadata;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ModelWithId = void 0;
4
- const base_1 = require("../../base");
5
- class ModelWithId extends base_1.ModelBase {
4
+ const base_1 = require("../../../base");
5
+ class ModelWithId extends base_1.DomainModel {
6
6
  constructor(metadata) {
7
7
  super();
8
8
  this._id = metadata.id;
@@ -0,0 +1 @@
1
+ export * from "./value-object";
@@ -15,4 +15,3 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./value-object"), exports);
18
- __exportStar(require("./value-object.builder"), exports);
@@ -0,0 +1,18 @@
1
+ import { Class } from "type-fest";
2
+ import { DomainModel, InferredProps, Props, PropsBuilder } from "../../../base";
3
+ import { ClassStatic } from "../../../types";
4
+ export declare class ValueObject<P extends Props> extends DomainModel<P> {
5
+ constructor(props?: P | PropsBuilder<ValueObject<P>>);
6
+ _constructor(): ValueObjectClass<this>;
7
+ props(): P;
8
+ equals<V extends AnyValueObject>(vo: V): boolean;
9
+ with(props: Partial<P>): typeof this;
10
+ clone(): this;
11
+ getEqualityValue(): string;
12
+ protected getEqualityObject(): any;
13
+ }
14
+ export type AnyValueObject = ValueObject<Props>;
15
+ export interface ValueObjectClass<T extends AnyValueObject = AnyValueObject> extends Class<T>, ClassStatic<typeof ValueObject<InferredProps<T>>> {
16
+ }
17
+ export interface ValueObjectClassWithTypedConstructor<T extends AnyValueObject = AnyValueObject> extends Class<T, ConstructorParameters<typeof ValueObject<InferredProps<T>>>> {
18
+ }
@@ -11,15 +11,19 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
- var ValueObjectBase_1;
14
+ var ValueObject_1;
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.ValueObjectBase = void 0;
16
+ exports.ValueObject = void 0;
17
17
  const lodash_1 = __importDefault(require("lodash"));
18
- const base_1 = require("../../base");
19
- let ValueObjectBase = ValueObjectBase_1 = class ValueObjectBase extends base_1.ModelBase {
18
+ const base_1 = require("../../../base");
19
+ let ValueObject = ValueObject_1 = class ValueObject extends base_1.DomainModel {
20
20
  constructor(props) {
21
21
  super();
22
- this.initializeProps(props);
22
+ if (props)
23
+ this.initializeProps(props);
24
+ }
25
+ _constructor() {
26
+ return this.constructor;
23
27
  }
24
28
  props() {
25
29
  return super.props();
@@ -42,7 +46,7 @@ let ValueObjectBase = ValueObjectBase_1 = class ValueObjectBase extends base_1.M
42
46
  getEqualityObject() {
43
47
  const result = {};
44
48
  const props = this.props();
45
- const valueOf = (v) => v instanceof ValueObjectBase_1 ? v.getEqualityObject() : v;
49
+ const valueOf = (v) => v instanceof ValueObject_1 ? v.getEqualityObject() : v;
46
50
  for (let [key, value] of Object.entries(props)) {
47
51
  if (Array.isArray(value)) {
48
52
  result[key] = value.map((v) => valueOf(v));
@@ -57,8 +61,8 @@ let ValueObjectBase = ValueObjectBase_1 = class ValueObjectBase extends base_1.M
57
61
  return result;
58
62
  }
59
63
  };
60
- exports.ValueObjectBase = ValueObjectBase;
61
- exports.ValueObjectBase = ValueObjectBase = ValueObjectBase_1 = __decorate([
64
+ exports.ValueObject = ValueObject;
65
+ exports.ValueObject = ValueObject = ValueObject_1 = __decorate([
62
66
  (0, base_1.Mutable)(false),
63
67
  __metadata("design:paramtypes", [Object])
64
- ], ValueObjectBase);
68
+ ], ValueObject);
@@ -1,5 +1,4 @@
1
- import { Id } from "../model-with-id";
2
- import { AnyAggregate } from "../aggregate";
1
+ import { AnyAggregate, Id } from "../model";
3
2
  export interface IRepository<T extends AnyAggregate> {
4
3
  id(id: Id): Promise<T | null>;
5
4
  save(instance: T): Promise<any>;
@@ -2,4 +2,4 @@ import { Class } from "type-fest";
2
2
  import { EventClass } from "../../core";
3
3
  import { IEventSubscriber } from "../interfaces";
4
4
  export declare const SubscribedEventsMetaKey: unique symbol;
5
- export declare const SubscribeToEvents: <T extends EventClass<import("../../core").AnyEvent, any[]>>(subscribedEvents: T | T[]) => (target: Class<IEventSubscriber<InstanceType<T>>>) => void;
5
+ export declare const SubscribeToEvents: <T extends EventClass>(subscribedEvents: T | T[]) => (target: Class<IEventSubscriber<InstanceType<T>>>) => void;
@@ -0,0 +1,7 @@
1
+ import { AnyEvent } from "../core";
2
+ import { IEventDispatcher, IEventSubscriberRegistry } from "./interfaces";
3
+ export declare class EventDispatcher implements IEventDispatcher {
4
+ private subscriberRegistry;
5
+ constructor(subscriberRegistry: IEventSubscriberRegistry);
6
+ dispatch<T extends AnyEvent = AnyEvent>(event: T): Promise<void>;
7
+ }
@@ -9,16 +9,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.EventPublisher = void 0;
13
- class EventPublisher {
12
+ exports.EventDispatcher = void 0;
13
+ class EventDispatcher {
14
14
  constructor(subscriberRegistry) {
15
15
  this.subscriberRegistry = subscriberRegistry;
16
16
  }
17
- publish(event) {
17
+ dispatch(event) {
18
18
  return __awaiter(this, void 0, void 0, function* () {
19
19
  const subscribers = this.subscriberRegistry.getAllSubscribersForEvent(event.constructor);
20
20
  yield Promise.all(subscribers.map((subscriber) => subscriber.handleEvent(event)));
21
21
  });
22
22
  }
23
23
  }
24
- exports.EventPublisher = EventPublisher;
24
+ exports.EventDispatcher = EventDispatcher;
@@ -8,6 +8,6 @@ export declare class DynamicEventSubscriber<T extends AnyEvent = AnyEvent> imple
8
8
  private readonly subscribedEvents;
9
9
  private readonly eventHandler;
10
10
  constructor(subscribedEvents: EventClass<T> | EventClass<T>[], eventHandler: EventSubscriberHandler<T>);
11
- subscribeToEvents(): EventClass<T, any[]> | EventClass<T, any[]>[];
11
+ subscribeToEvents(): EventClass<T> | EventClass<T>[];
12
12
  handleEvent(event: T): Promise<void>;
13
13
  }
@@ -1,5 +1,5 @@
1
1
  export * from "./interfaces";
2
2
  export * from "./decorators";
3
3
  export * from "./event-subscriber";
4
- export * from "./event-publisher";
4
+ export * from "./event-dispatcher";
5
5
  export * from "./event-subscriber-registry";
@@ -17,5 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./interfaces"), exports);
18
18
  __exportStar(require("./decorators"), exports);
19
19
  __exportStar(require("./event-subscriber"), exports);
20
- __exportStar(require("./event-publisher"), exports);
20
+ __exportStar(require("./event-dispatcher"), exports);
21
21
  __exportStar(require("./event-subscriber-registry"), exports);
@@ -0,0 +1,4 @@
1
+ import { AnyEvent } from "../../core";
2
+ export interface IEventDispatcher {
3
+ dispatch<T extends AnyEvent = AnyEvent>(event: T): Promise<void>;
4
+ }
@@ -1,3 +1,3 @@
1
- export * from "./event-publisher.interface";
1
+ export * from "./event-dispatcher.interface";
2
2
  export * from "./event-subscriber.interface";
3
3
  export * from "./event-subscriber-registry.interface";
@@ -14,6 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./event-publisher.interface"), exports);
17
+ __exportStar(require("./event-dispatcher.interface"), exports);
18
18
  __exportStar(require("./event-subscriber.interface"), exports);
19
19
  __exportStar(require("./event-subscriber-registry.interface"), exports);
package/index.d.ts CHANGED
@@ -1,8 +1,6 @@
1
1
  /// <reference types="src/#declarations" />
2
2
  export * from "./base";
3
- export * from "./meta";
4
3
  export * from "./types";
5
- export * from "./utils";
6
4
  export * from "./core";
7
5
  export * from "./event-pubsub";
8
- export * from "./decorators";
6
+ export * from "./utils";
package/index.js CHANGED
@@ -16,9 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  };
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  __exportStar(require("./base"), exports);
19
- __exportStar(require("./meta"), exports);
20
19
  __exportStar(require("./types"), exports);
21
- __exportStar(require("./utils"), exports);
22
20
  __exportStar(require("./core"), exports);
23
21
  __exportStar(require("./event-pubsub"), exports);
24
- __exportStar(require("./decorators"), exports);
22
+ __exportStar(require("./utils"), exports);
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"ddd-node","version":"30.1.2","description":"Domain Driven Design base for NodeJs","type":"commonjs","main":"index.js","types":"index.d.ts","repository":{"type":"git","url":"https://github.com/nqd881/ddd-node"},"keywords":["ddd","ddd-node","ddd-base","ddd-ts","ddd-js"],"author":"Quoc Dai","license":"ISC","devDependencies":{"@types/chai":"^4.3.16","@types/lodash":"^4.14.200","@types/mocha":"^10.0.6","@types/uuid":"^9.0.6","chai":"^5.1.1","chai-deep-match":"^1.2.1","ddd-node":"file:dist","mocha":"^10.4.0","tsconfig-paths":"^4.2.0","typescript":"^5.2.2"},"dependencies":{"lodash":"^4.17.21","reflect-metadata":"^0.1.13","ts-node":"^10.9.2","tsc-alias":"^1.8.8","type-fest":"^4.20.1","uuid":"^9.0.1"}}
1
+ {"name":"ddd-node","version":"32.0.0","description":"Domain Driven Design base for NodeJs","type":"commonjs","main":"index.js","types":"index.d.ts","repository":{"type":"git","url":"https://github.com/nqd881/ddd-node"},"keywords":["ddd","ddd-node","ddd-base","ddd-ts","ddd-js"],"author":"Quoc Dai","license":"ISC","devDependencies":{"@types/chai":"^4.3.16","@types/lodash":"^4.14.200","@types/mocha":"^10.0.6","@types/uuid":"^9.0.6","chai":"^5.1.1","chai-deep-match":"^1.2.1","ddd-node":"file:dist","mocha":"^10.4.0","tsconfig-paths":"^4.2.0","typescript":"^5.2.2"},"dependencies":{"lodash":"^4.17.21","reflect-metadata":"^0.1.13","ts-node":"^10.9.2","tsc-alias":"^1.8.8","type-fest":"^4.20.1","uuid":"^9.0.1"}}
@@ -1,11 +0,0 @@
1
- import { AnyModel, InferredProps } from "./model";
2
- export interface IModelBuilder<T extends AnyModel = AnyModel> {
3
- buildSafe(): T | null;
4
- build(): T;
5
- }
6
- export declare abstract class ModelBuilder<T extends AnyModel = AnyModel> implements IModelBuilder<T> {
7
- protected props?: InferredProps<T>;
8
- withProps(props: InferredProps<T>): this;
9
- abstract build(): T;
10
- buildSafe(): T | null;
11
- }
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ModelBuilder = void 0;
4
- class ModelBuilder {
5
- withProps(props) {
6
- this.props = props;
7
- return this;
8
- }
9
- buildSafe() {
10
- try {
11
- return this.build();
12
- }
13
- catch (err) {
14
- return null;
15
- }
16
- }
17
- }
18
- exports.ModelBuilder = ModelBuilder;
@@ -1,4 +0,0 @@
1
- import { AnyEvent } from "../../message";
2
- export interface IAggregateEventPublisher {
3
- publish(events: AnyEvent | AnyEvent[]): void;
4
- }
@@ -1,6 +0,0 @@
1
- import { ModelWithIdBuilder } from "../../model-with-id";
2
- import { AnyAggregate } from "./aggregate";
3
- export declare abstract class AggregateBuilderBase<T extends AnyAggregate> extends ModelWithIdBuilder<T> {
4
- protected version: number;
5
- withVersion(version: number): this;
6
- }
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AggregateBuilderBase = void 0;
4
- const model_with_id_1 = require("../../model-with-id");
5
- class AggregateBuilderBase extends model_with_id_1.ModelWithIdBuilder {
6
- constructor() {
7
- super(...arguments);
8
- this.version = 0;
9
- }
10
- withVersion(version) {
11
- this.version = version;
12
- return this;
13
- }
14
- }
15
- exports.AggregateBuilderBase = AggregateBuilderBase;
@@ -1,3 +0,0 @@
1
- export * from "./aggregate";
2
- export * from "./aggregate.builder";
3
- export * from "./aggregate-event-publisher.interface";
@@ -1,9 +0,0 @@
1
- import { AnyEventSourcedAggregate } from ".";
2
- import { CommandHandlerMap, EventApplierMap } from "../../../meta";
3
- import { ModelDescriptor } from "../../../base";
4
- export interface EventSourcedAggregateModelDescriptor<T extends AnyEventSourcedAggregate> extends ModelDescriptor<T> {
5
- ownEventApplierMap: EventApplierMap;
6
- eventApplierMap: EventApplierMap;
7
- ownCommandHandlerMap: CommandHandlerMap;
8
- commandHandlerMap: CommandHandlerMap;
9
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,13 +0,0 @@
1
- import { AnyEvent } from "../../message";
2
- import { AggregateBuilderBase } from "../aggregate-base";
3
- import { AnyEventSourcedAggregate, EventSourcedAggregateClassWithTypedConstructor } from "./event-sourced-aggregate";
4
- import { Snapshot } from "./snapshot";
5
- export declare class EventSourcedAggregateBuilder<T extends AnyEventSourcedAggregate> extends AggregateBuilderBase<T> {
6
- private aggregateClass;
7
- private pastEvents?;
8
- private snapshot?;
9
- constructor(aggregateClass: EventSourcedAggregateClassWithTypedConstructor<T>);
10
- withPastEvents(pastEvents: AnyEvent[]): this;
11
- withSnapshot(snapshot: Snapshot<T>): this;
12
- build(): T;
13
- }