ddd-node 21.0.2 → 22.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 (95) hide show
  1. package/dist/core/aggregate/aggregate-base/aggregate.builder.d.ts +1 -2
  2. package/dist/core/aggregate/aggregate-base/aggregate.builder.js +4 -7
  3. package/dist/core/aggregate/aggregate-base/aggregate.d.ts +2 -2
  4. package/dist/core/aggregate/aggregate-base/aggregate.js +6 -1
  5. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate-model-metadata.d.ts +9 -0
  6. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.builder.d.ts +4 -3
  7. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.builder.js +10 -12
  8. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.d.ts +8 -10
  9. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.js +31 -18
  10. package/dist/core/aggregate/event-sourced-aggregate/index.d.ts +0 -1
  11. package/dist/core/aggregate/event-sourced-aggregate/index.js +0 -1
  12. package/dist/core/aggregate/event-sourced-aggregate/snapshot.d.ts +8 -0
  13. package/dist/core/aggregate/event-sourced-aggregate/snapshot.js +2 -0
  14. package/dist/core/aggregate/state-aggregate/state-aggregate.builder.js +4 -4
  15. package/dist/core/aggregate/state-aggregate/state-aggregate.d.ts +2 -2
  16. package/dist/core/aggregate/state-aggregate/state-aggregate.js +1 -2
  17. package/dist/core/entity/entity.builder.d.ts +2 -2
  18. package/dist/core/entity/entity.builder.js +2 -2
  19. package/dist/core/entity/entity.d.ts +3 -5
  20. package/dist/core/entity/entity.js +3 -3
  21. package/dist/core/enum/enum.d.ts +3 -5
  22. package/dist/core/enum/enum.js +10 -17
  23. package/dist/core/enum/index.d.ts +0 -1
  24. package/dist/core/enum/index.js +0 -1
  25. package/dist/core/id/id.d.ts +6 -4
  26. package/dist/core/id/id.js +17 -8
  27. package/dist/core/id/index.d.ts +0 -2
  28. package/dist/core/id/index.js +0 -2
  29. package/dist/core/identifiable-model/identifiable-model.builder.d.ts +9 -0
  30. package/dist/core/identifiable-model/identifiable-model.builder.js +23 -0
  31. package/dist/core/identifiable-model/identifiable-model.d.ts +13 -0
  32. package/dist/core/identifiable-model/identifiable-model.js +23 -0
  33. package/dist/core/identifiable-model/index.d.ts +2 -0
  34. package/dist/core/{id/services → identifiable-model}/index.js +2 -2
  35. package/dist/core/index.d.ts +3 -3
  36. package/dist/core/index.js +3 -3
  37. package/dist/core/message/command/command-model.metadata.d.ts +6 -0
  38. package/dist/core/message/command/command-model.metadata.js +2 -0
  39. package/dist/core/message/command/command.builder.js +5 -5
  40. package/dist/core/message/command/command.d.ts +4 -9
  41. package/dist/core/message/command/command.js +11 -17
  42. package/dist/core/message/command/index.d.ts +1 -0
  43. package/dist/core/message/command/index.js +1 -0
  44. package/dist/core/message/event/event-model.metadata.d.ts +5 -0
  45. package/dist/core/message/event/event-model.metadata.js +2 -0
  46. package/dist/core/message/event/event.builder.d.ts +1 -1
  47. package/dist/core/message/event/event.builder.js +8 -8
  48. package/dist/core/message/event/event.d.ts +7 -12
  49. package/dist/core/message/event/event.js +16 -16
  50. package/dist/core/message/event/index.d.ts +1 -0
  51. package/dist/core/message/event/index.js +1 -0
  52. package/dist/core/message/message-base/message.builder.d.ts +5 -7
  53. package/dist/core/message/message-base/message.builder.js +15 -22
  54. package/dist/core/message/message-base/message.d.ts +5 -9
  55. package/dist/core/message/message-base/message.js +9 -6
  56. package/dist/core/value-object/value-object.builder.js +2 -2
  57. package/dist/core/value-object/value-object.d.ts +1 -1
  58. package/dist/decorators/aggregate-es/handle.js +1 -1
  59. package/dist/decorators/aggregate-es/when.js +1 -1
  60. package/dist/meta/index.d.ts +0 -1
  61. package/dist/meta/index.js +0 -1
  62. package/dist/model/core/index.d.ts +1 -0
  63. package/dist/model/core/index.js +1 -0
  64. package/dist/model/core/model-metadata.d.ts +13 -0
  65. package/dist/model/core/model-metadata.js +2 -0
  66. package/dist/model/core/model.builder.d.ts +1 -1
  67. package/dist/model/core/model.builder.js +1 -1
  68. package/dist/model/core/model.d.ts +12 -15
  69. package/dist/model/core/model.js +37 -32
  70. package/dist/model/domain.d.ts +4 -0
  71. package/dist/model/domain.js +10 -2
  72. package/dist/model/meta/model-domain.d.ts +0 -1
  73. package/dist/model/meta/model-domain.js +3 -3
  74. package/dist/model/model-registry.js +4 -4
  75. package/dist/package.json +1 -1
  76. package/package.json +1 -2
  77. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.model-metadata.d.ts +0 -9
  78. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.model-metadata.js +0 -22
  79. package/dist/core/enum/enum.builder.d.ts +0 -9
  80. package/dist/core/enum/enum.builder.js +0 -20
  81. package/dist/core/id/interface.d.ts +0 -4
  82. package/dist/core/id/services/index.d.ts +0 -2
  83. package/dist/core/id/services/snowflake.d.ts +0 -8
  84. package/dist/core/id/services/snowflake.js +0 -14
  85. package/dist/core/id/services/uuid4.d.ts +0 -5
  86. package/dist/core/id/services/uuid4.js +0 -18
  87. package/dist/core/model-with-id/index.d.ts +0 -2
  88. package/dist/core/model-with-id/index.js +0 -18
  89. package/dist/core/model-with-id/model-with-id.builder.d.ts +0 -11
  90. package/dist/core/model-with-id/model-with-id.builder.js +0 -22
  91. package/dist/core/model-with-id/model-with-id.d.ts +0 -9
  92. package/dist/core/model-with-id/model-with-id.js +0 -17
  93. package/dist/meta/id.metadata.d.ts +0 -4
  94. package/dist/meta/id.metadata.js +0 -16
  95. /package/dist/core/{id/interface.js → aggregate/event-sourced-aggregate/event-sourced-aggregate-model-metadata.js} +0 -0
@@ -1,7 +1,6 @@
1
1
  import { EntityBuilderBase } from "../../entity";
2
2
  import { AnyAggregate } from "./aggregate";
3
3
  export declare abstract class AggregateBuilderBase<T extends AnyAggregate> extends EntityBuilderBase<T> {
4
- protected _version?: number;
5
- getVersion(): number;
4
+ protected version: number;
6
5
  withVersion(version: number): this;
7
6
  }
@@ -1,17 +1,14 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.AggregateBuilderBase = void 0;
7
- const lodash_1 = __importDefault(require("lodash"));
8
4
  const entity_1 = require("../../entity");
9
5
  class AggregateBuilderBase extends entity_1.EntityBuilderBase {
10
- getVersion() {
11
- return !lodash_1.default.isUndefined(this._version) ? this._version : 0;
6
+ constructor() {
7
+ super(...arguments);
8
+ this.version = 0;
12
9
  }
13
10
  withVersion(version) {
14
- this._version = version;
11
+ this.version = version;
15
12
  return this;
16
13
  }
17
14
  }
@@ -1,15 +1,15 @@
1
- import { EntityBase, EntityMetadata } from "../../entity";
2
1
  import { Props, PropsOf } from "../../../model";
2
+ import { EntityBase, EntityMetadata } from "../../entity";
3
3
  import { AnyEvent, EventClassWithTypedConstructor, EventSource } from "../../message";
4
4
  import { IEventDispatcher } from "../event-dispatcher.interface";
5
5
  export interface AggregateMetadata extends EntityMetadata {
6
- aggregateType: string;
7
6
  version: number;
8
7
  }
9
8
  export declare abstract class AggregateBase<P extends Props> extends EntityBase<P> {
10
9
  protected readonly _version: number;
11
10
  constructor(metadata: AggregateMetadata, props?: P);
12
11
  abstract version(): number;
12
+ metadata(): AggregateMetadata;
13
13
  protected createEventSource(): EventSource;
14
14
  protected newEvent<E extends AnyEvent>(eventClass: EventClassWithTypedConstructor<E>, props: PropsOf<E>): E;
15
15
  abstract dispatchEvents(dispatcher: IEventDispatcher): void;
@@ -8,9 +8,14 @@ class AggregateBase extends entity_1.EntityBase {
8
8
  super(metadata, props);
9
9
  this._version = metadata.version;
10
10
  }
11
+ metadata() {
12
+ return {
13
+ ...super.metadata(),
14
+ version: this.version(),
15
+ };
16
+ }
11
17
  createEventSource() {
12
18
  return {
13
- aggregateModelId: this.modelMetadata().modelId,
14
19
  aggregateId: this.id(),
15
20
  aggregateVersion: this.version(),
16
21
  };
@@ -0,0 +1,9 @@
1
+ import { AnyEventSourcedAggregate } from ".";
2
+ import { CommandHandlerMap, EventApplierMap } from "../../../meta";
3
+ import { IModelMetadata } from "../../../model";
4
+ export interface IEventSourcedAggregateModelMetadata<T extends AnyEventSourcedAggregate> extends IModelMetadata<T> {
5
+ ownEventApplierMap: EventApplierMap;
6
+ eventApplierMap: EventApplierMap;
7
+ ownCommandHandlerMap: CommandHandlerMap;
8
+ commandHandlerMap: CommandHandlerMap;
9
+ }
@@ -1,10 +1,11 @@
1
1
  import { AnyEvent } from "../../message";
2
2
  import { AggregateBuilderBase } from "../aggregate-base";
3
- import { AnyEventSourcedAggregate, EventSourcedAggregateClassWithTypedConstructor, Snapshot } from "./event-sourced-aggregate";
3
+ import { AnyEventSourcedAggregate, EventSourcedAggregateClassWithTypedConstructor } from "./event-sourced-aggregate";
4
+ import { Snapshot } from "./snapshot";
4
5
  export declare class EventSourcedAggregateBuilder<T extends AnyEventSourcedAggregate> extends AggregateBuilderBase<T> {
5
6
  private aggregateClass;
6
- private _pastEvents?;
7
- private _snapshot?;
7
+ private pastEvents?;
8
+ private snapshot?;
8
9
  constructor(aggregateClass: EventSourcedAggregateClassWithTypedConstructor<T>);
9
10
  withPastEvents(pastEvents: AnyEvent[]): this;
10
11
  withSnapshot(snapshot: Snapshot<T>): this;
@@ -8,27 +8,25 @@ class EventSourcedAggregateBuilder extends aggregate_base_1.AggregateBuilderBase
8
8
  this.aggregateClass = aggregateClass;
9
9
  }
10
10
  withPastEvents(pastEvents) {
11
- this._pastEvents = pastEvents;
11
+ this.pastEvents = pastEvents;
12
12
  return this;
13
13
  }
14
14
  withSnapshot(snapshot) {
15
- this._snapshot = snapshot;
15
+ this.snapshot = snapshot;
16
16
  return this;
17
17
  }
18
18
  build() {
19
- if (this._snapshot) {
20
- const { id, version } = this._snapshot.metadata;
21
- const { props } = this._snapshot;
19
+ if (this.snapshot) {
20
+ const { id, version } = this.snapshot.metadata;
21
+ const { props } = this.snapshot;
22
22
  this.withId(id).withVersion(version).withProps(props);
23
23
  }
24
24
  const instance = new this.aggregateClass({
25
- id: this.getId(),
26
- version: this.getVersion(),
27
- }, this._props);
28
- if (this._pastEvents) {
29
- const pastEvents = this._pastEvents.filter((_pastEvent) => _pastEvent.source().aggregateVersion >= instance.version());
30
- instance.applyPastEvents(pastEvents);
31
- }
25
+ id: this.id,
26
+ version: this.version,
27
+ }, this.props);
28
+ if (this.pastEvents)
29
+ instance.applyPastEvents(this.pastEvents);
32
30
  return instance;
33
31
  }
34
32
  }
@@ -4,22 +4,20 @@ import { ClassStatic } from "../../../types";
4
4
  import { AnyCommand, AnyEvent, EventClassWithTypedConstructor } from "../../message";
5
5
  import { AggregateBase, AggregateMetadata } from "../aggregate-base";
6
6
  import { IEventDispatcher } from "../event-dispatcher.interface";
7
- import { ESAModelMetadata } from "./event-sourced-aggregate.model-metadata";
8
- export type EventSourceAggregateMetadata = Omit<AggregateMetadata, "aggregateType">;
9
- export interface SnapshotMetadata extends EventSourceAggregateMetadata {
10
- }
11
- export interface Snapshot<T extends AnyEventSourcedAggregate> {
12
- metadata: SnapshotMetadata;
13
- props: PropsOf<T>;
7
+ import { IEventSourcedAggregateModelMetadata } from "./event-sourced-aggregate-model-metadata";
8
+ import { Snapshot, SnapshotMetadata } from "./snapshot";
9
+ export interface EventSourceAggregateMetadata extends AggregateMetadata {
14
10
  }
15
11
  export declare class EventSourcedAggregateBase<P extends Props> extends AggregateBase<P> {
16
- static readonly AGGREGATE_TYPE = "event_sourced";
17
12
  private _handledCommands;
18
13
  private _pastEvents;
19
14
  private _events;
20
15
  constructor(metadata: EventSourceAggregateMetadata, props?: P);
21
- static esaModelMetadata<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClass<T>): ESAModelMetadata<T>;
22
- esaModelMetadata(): ESAModelMetadata<this>;
16
+ static ownEventApplierMap<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClass<T>): import("../../../meta").EventApplierMap;
17
+ static eventApplierMap<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClass<T>): import("../../../meta").EventApplierMap;
18
+ static ownCommandHandlerMap<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClass<T>): import("../../../meta").CommandHandlerMap;
19
+ static commandHandlerMap<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClass<T>): import("../../../meta").CommandHandlerMap;
20
+ modelMetadata(): IEventSourcedAggregateModelMetadata<typeof this>;
23
21
  version(): number;
24
22
  pastEvents(): AnyEvent[];
25
23
  events(): AnyEvent[];
@@ -1,21 +1,37 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EventSourcedAggregateBase = void 0;
4
+ const meta_1 = require("../../../meta");
4
5
  const utils_1 = require("../../../utils");
5
6
  const aggregate_base_1 = require("../aggregate-base");
6
- const event_sourced_aggregate_model_metadata_1 = require("./event-sourced-aggregate.model-metadata");
7
7
  class EventSourcedAggregateBase extends aggregate_base_1.AggregateBase {
8
8
  constructor(metadata, props) {
9
- super({ ...metadata, aggregateType: EventSourcedAggregateBase.AGGREGATE_TYPE }, props);
9
+ super(metadata, props);
10
10
  this._handledCommands = [];
11
11
  this._events = [];
12
12
  this._pastEvents = [];
13
13
  }
14
- static esaModelMetadata() {
15
- return new event_sourced_aggregate_model_metadata_1.ESAModelMetadata(this);
14
+ static ownEventApplierMap() {
15
+ return (0, meta_1.getOwnEventApplierMap)(this.prototype);
16
16
  }
17
- esaModelMetadata() {
18
- return this.constructor.esaModelMetadata();
17
+ static eventApplierMap() {
18
+ return (0, meta_1.getEventApplierMap)(this.prototype);
19
+ }
20
+ static ownCommandHandlerMap() {
21
+ return (0, meta_1.getOwnCommandHandlerMap)(this.prototype);
22
+ }
23
+ static commandHandlerMap() {
24
+ return (0, meta_1.getCommandHandlerMap)(this.prototype);
25
+ }
26
+ modelMetadata() {
27
+ const aggregateClass = this.constructor;
28
+ return {
29
+ ...super.modelMetadata(),
30
+ ownEventApplierMap: aggregateClass.ownEventApplierMap(),
31
+ eventApplierMap: aggregateClass.eventApplierMap(),
32
+ ownCommandHandlerMap: aggregateClass.ownCommandHandlerMap(),
33
+ commandHandlerMap: aggregateClass.commandHandlerMap(),
34
+ };
19
35
  }
20
36
  version() {
21
37
  return this._version + this._pastEvents.length + this._events.length;
@@ -33,21 +49,19 @@ class EventSourcedAggregateBase extends aggregate_base_1.AggregateBase {
33
49
  return Boolean(this._events.length);
34
50
  }
35
51
  getApplierForEvent(event) {
36
- const { eventType } = event.eventModelMetadata();
37
- const { eventApplierMap } = this.esaModelMetadata();
52
+ const { eventType } = event.modelMetadata();
53
+ const { eventApplierMap } = this.modelMetadata();
38
54
  const applier = eventApplierMap.get(eventType);
39
55
  if (!applier)
40
56
  throw new Error("Event applier not found");
41
57
  return applier;
42
58
  }
43
59
  validateEventBeforeApply(event) {
44
- const eventSource = event.source();
45
- if (eventSource.aggregateModelId !== this.modelMetadata().modelId)
46
- throw new Error("Invalid source type");
47
- if (!eventSource.aggregateId.equals(this._id))
48
- throw new Error("Invalid source id");
49
- if (eventSource.aggregateVersion !== this.version())
50
- throw new Error("Invalid source version");
60
+ const { aggregateId, aggregateVersion } = event.source();
61
+ if (!aggregateId.equals(this._id))
62
+ throw new Error("Invalid aggregate id");
63
+ if (aggregateVersion !== this.version())
64
+ throw new Error("Invalid aggregate version");
51
65
  }
52
66
  _applyEvent(event) {
53
67
  const applier = this.getApplierForEvent(event);
@@ -78,8 +92,8 @@ class EventSourcedAggregateBase extends aggregate_base_1.AggregateBase {
78
92
  this.applyEvent(this.newEvent(eventClass, props));
79
93
  }
80
94
  getHandlerForCommand(command) {
81
- const { commandType } = command.commandModelMetadata();
82
- const { commandHandlerMap } = this.esaModelMetadata();
95
+ const { commandType } = command.modelMetadata();
96
+ const { commandHandlerMap } = this.modelMetadata();
83
97
  const handler = commandHandlerMap.get(commandType);
84
98
  if (!handler)
85
99
  throw new Error("Command handler not found");
@@ -125,4 +139,3 @@ class EventSourcedAggregateBase extends aggregate_base_1.AggregateBase {
125
139
  }
126
140
  }
127
141
  exports.EventSourcedAggregateBase = EventSourcedAggregateBase;
128
- EventSourcedAggregateBase.AGGREGATE_TYPE = "event_sourced";
@@ -1,3 +1,2 @@
1
1
  export * from "./event-sourced-aggregate";
2
2
  export * from "./event-sourced-aggregate.builder";
3
- export * from "./event-sourced-aggregate.model-metadata";
@@ -16,4 +16,3 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./event-sourced-aggregate"), exports);
18
18
  __exportStar(require("./event-sourced-aggregate.builder"), exports);
19
- __exportStar(require("./event-sourced-aggregate.model-metadata"), exports);
@@ -0,0 +1,8 @@
1
+ import { PropsOf } from "../../../model";
2
+ import { AnyEventSourcedAggregate, EventSourceAggregateMetadata } from "./event-sourced-aggregate";
3
+ export interface SnapshotMetadata extends EventSourceAggregateMetadata {
4
+ }
5
+ export interface Snapshot<T extends AnyEventSourcedAggregate> {
6
+ metadata: SnapshotMetadata;
7
+ props: PropsOf<T>;
8
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -8,12 +8,12 @@ class StateAggregateBuilder extends aggregate_base_1.AggregateBuilderBase {
8
8
  this.aggregateClass = aggregateClass;
9
9
  }
10
10
  build() {
11
- if (!this._props)
11
+ if (!this.props)
12
12
  throw new Error("The props must be set before build");
13
13
  return new this.aggregateClass({
14
- id: this.getId(),
15
- version: this.getVersion(),
16
- }, this._props);
14
+ id: this.id,
15
+ version: this.version,
16
+ }, this.props);
17
17
  }
18
18
  }
19
19
  exports.StateAggregateBuilder = StateAggregateBuilder;
@@ -4,9 +4,9 @@ import { ClassStatic } from "../../../types";
4
4
  import { AnyEvent, EventClassWithTypedConstructor } from "../../message";
5
5
  import { AggregateBase, AggregateMetadata } from "../aggregate-base";
6
6
  import { IEventDispatcher } from "../event-dispatcher.interface";
7
- export type StateAggregateMetadata = Omit<AggregateMetadata, "aggregateType">;
7
+ export interface StateAggregateMetadata extends AggregateMetadata {
8
+ }
8
9
  export declare class StateAggregateBase<P extends Props> extends AggregateBase<P> {
9
- static readonly AGGREGATE_TYPE = "state";
10
10
  private _events;
11
11
  constructor(metadata: StateAggregateMetadata, props: P);
12
12
  props(): P;
@@ -4,7 +4,7 @@ exports.StateAggregateBase = void 0;
4
4
  const aggregate_base_1 = require("../aggregate-base");
5
5
  class StateAggregateBase extends aggregate_base_1.AggregateBase {
6
6
  constructor(metadata, props) {
7
- super({ ...metadata, aggregateType: StateAggregateBase.AGGREGATE_TYPE }, props);
7
+ super(metadata, props);
8
8
  this._events = [];
9
9
  }
10
10
  props() {
@@ -37,4 +37,3 @@ class StateAggregateBase extends aggregate_base_1.AggregateBase {
37
37
  }
38
38
  }
39
39
  exports.StateAggregateBase = StateAggregateBase;
40
- StateAggregateBase.AGGREGATE_TYPE = "state";
@@ -1,6 +1,6 @@
1
- import { ModelWithIdBuilder } from "..";
1
+ import { IdentifiableModelBuilder } from "..";
2
2
  import { AnyEntity, EntityClassWithTypedConstructor } from "./entity";
3
- export declare abstract class EntityBuilderBase<T extends AnyEntity> extends ModelWithIdBuilder<T> {
3
+ export declare abstract class EntityBuilderBase<T extends AnyEntity> extends IdentifiableModelBuilder<T> {
4
4
  }
5
5
  export declare class EntityBuilder<T extends AnyEntity> extends EntityBuilderBase<T> {
6
6
  private entityClass;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EntityBuilder = exports.EntityBuilderBase = void 0;
4
4
  const __1 = require("..");
5
- class EntityBuilderBase extends __1.ModelWithIdBuilder {
5
+ class EntityBuilderBase extends __1.IdentifiableModelBuilder {
6
6
  }
7
7
  exports.EntityBuilderBase = EntityBuilderBase;
8
8
  class EntityBuilder extends EntityBuilderBase {
@@ -11,7 +11,7 @@ class EntityBuilder extends EntityBuilderBase {
11
11
  this.entityClass = entityClass;
12
12
  }
13
13
  build() {
14
- return new this.entityClass({ id: this.getId() }, this._props);
14
+ return new this.entityClass({ id: this.id }, this.props);
15
15
  }
16
16
  }
17
17
  exports.EntityBuilder = EntityBuilder;
@@ -1,12 +1,10 @@
1
1
  import { Class } from "type-fest";
2
2
  import { Props, PropsOf } from "../../model";
3
3
  import { ClassStatic } from "../../types";
4
- import { Id } from "../id";
5
- import { ModelWithId } from "../model-with-id";
6
- export interface EntityMetadata {
7
- readonly id: Id;
4
+ import { IdentifiableModel, IdentifiableModelMetadata } from "../identifiable-model";
5
+ export interface EntityMetadata extends IdentifiableModelMetadata {
8
6
  }
9
- export declare class EntityBase<P extends Props> extends ModelWithId<P> {
7
+ export declare class EntityBase<P extends Props> extends IdentifiableModel<P> {
10
8
  constructor(metadata: EntityMetadata, props?: P);
11
9
  }
12
10
  export type AnyEntity = EntityBase<Props>;
@@ -11,10 +11,10 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.EntityBase = void 0;
13
13
  const model_1 = require("../../model");
14
- const model_with_id_1 = require("../model-with-id");
15
- let EntityBase = class EntityBase extends model_with_id_1.ModelWithId {
14
+ const identifiable_model_1 = require("../identifiable-model");
15
+ let EntityBase = class EntityBase extends identifiable_model_1.IdentifiableModel {
16
16
  constructor(metadata, props) {
17
- super(metadata.id);
17
+ super(metadata);
18
18
  if (props)
19
19
  this.initializeProps(props);
20
20
  }
@@ -1,18 +1,16 @@
1
1
  import { Class } from "type-fest";
2
- import { ModelBase } from "../../model";
2
+ import { ValueObjectBase } from "..";
3
3
  import { ClassStatic } from "../../types";
4
4
  export type EnumValue = string | number;
5
5
  export interface EnumProps {
6
6
  value: EnumValue;
7
7
  }
8
- export declare class EnumBase extends ModelBase<EnumProps> {
8
+ export declare class EnumBase extends ValueObjectBase<EnumProps> {
9
9
  static values(): EnumBase[];
10
10
  static parse<T extends AnyEnum>(this: EnumClass<T>, providedValue: EnumValue): T;
11
11
  static parseSafe<T extends AnyEnum>(this: EnumClass<T>, providedValue: EnumValue): T | null;
12
12
  constructor(value: EnumValue);
13
- props(): EnumProps;
14
- get value(): EnumValue;
15
- equals<T extends AnyEnum>(other: T): boolean;
13
+ value: EnumValue;
16
14
  }
17
15
  export type AnyEnum = EnumBase;
18
16
  export interface EnumClass<T extends AnyEnum = AnyEnum, Arguments extends unknown[] = any[]> extends Class<T, Arguments>, ClassStatic<typeof EnumBase> {
@@ -10,14 +10,15 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.EnumBase = void 0;
13
+ const __1 = require("..");
13
14
  const model_1 = require("../../model");
14
- let EnumBase = class EnumBase extends model_1.ModelBase {
15
+ let EnumBase = class EnumBase extends __1.ValueObjectBase {
15
16
  static values() {
16
- return Array.from(this.modelMetadata().ownStaticValues.values()).map((staticValue) => staticValue.value);
17
+ return Array.from(this.ownStaticValues().values()).map((staticValue) => staticValue.value);
17
18
  }
18
19
  static parse(providedValue) {
19
20
  let result = undefined;
20
- this.modelMetadata().ownStaticValues.forEach((staticValue) => {
21
+ this.ownStaticValues().forEach((staticValue) => {
21
22
  if (staticValue.value instanceof this) {
22
23
  const staticEnum = staticValue.value;
23
24
  if (staticEnum.value === providedValue && !result) {
@@ -26,7 +27,7 @@ let EnumBase = class EnumBase extends model_1.ModelBase {
26
27
  }
27
28
  });
28
29
  if (!result)
29
- throw new Error(`Invalid provided value for enum ${this.modelMetadata().modelName}`);
30
+ throw new Error(`Invalid provided value for enum ${this.modelName()}`);
30
31
  return result;
31
32
  }
32
33
  static parseSafe(providedValue) {
@@ -38,22 +39,14 @@ let EnumBase = class EnumBase extends model_1.ModelBase {
38
39
  }
39
40
  }
40
41
  constructor(value) {
41
- super();
42
- this.initializeProps({ value });
43
- }
44
- props() {
45
- return super.props();
46
- }
47
- get value() {
48
- return this._props.value;
49
- }
50
- equals(other) {
51
- const equalType = other instanceof this.constructor;
52
- const equalValue = other.value === this.value;
53
- return equalType && equalValue;
42
+ super({ value });
54
43
  }
55
44
  };
56
45
  exports.EnumBase = EnumBase;
46
+ __decorate([
47
+ (0, model_1.Prop)(),
48
+ __metadata("design:type", Object)
49
+ ], EnumBase.prototype, "value", void 0);
57
50
  exports.EnumBase = EnumBase = __decorate([
58
51
  (0, model_1.Mutable)(false),
59
52
  __metadata("design:paramtypes", [Object])
@@ -1,2 +1 @@
1
1
  export * from "./enum";
2
- export * from "./enum.builder";
@@ -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);
@@ -1,6 +1,8 @@
1
- export declare class Id {
2
- private _value;
1
+ import { ValueObjectBase } from "../value-object";
2
+ export interface IdProps {
3
+ value: string;
4
+ }
5
+ export declare class Id extends ValueObjectBase<IdProps> {
3
6
  constructor(idOrValue: Id | string);
4
- get value(): string;
5
- equals(id: Id): boolean;
7
+ value: string;
6
8
  }
@@ -1,15 +1,24 @@
1
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
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.Id = void 0;
4
- class Id {
13
+ const model_1 = require("../../model");
14
+ const value_object_1 = require("../value-object");
15
+ class Id extends value_object_1.ValueObjectBase {
5
16
  constructor(idOrValue) {
6
- this._value = idOrValue instanceof Id ? idOrValue.value : idOrValue;
7
- }
8
- get value() {
9
- return this._value;
10
- }
11
- equals(id) {
12
- return id._value === this._value;
17
+ super({ value: idOrValue instanceof Id ? idOrValue.value : idOrValue });
13
18
  }
14
19
  }
15
20
  exports.Id = Id;
21
+ __decorate([
22
+ (0, model_1.Prop)(),
23
+ __metadata("design:type", String)
24
+ ], Id.prototype, "value", void 0);
@@ -1,3 +1 @@
1
- export * from "./interface";
2
1
  export * from "./id";
3
- export * from "./services";
@@ -14,6 +14,4 @@ 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("./interface"), exports);
18
17
  __exportStar(require("./id"), exports);
19
- __exportStar(require("./services"), exports);
@@ -0,0 +1,9 @@
1
+ import { ModelBuilder } from "../../model";
2
+ import { Id } from "../id";
3
+ import { AnyIdentifiableModel } from "./identifiable-model";
4
+ export declare abstract class IdentifiableModelBuilder<T extends AnyIdentifiableModel> extends ModelBuilder<T> {
5
+ protected id: Id;
6
+ newId(): Id;
7
+ withId(id: Id): this;
8
+ withNewId(): this;
9
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IdentifiableModelBuilder = void 0;
4
+ const uuid_1 = require("uuid");
5
+ const model_1 = require("../../model");
6
+ const id_1 = require("../id");
7
+ class IdentifiableModelBuilder extends model_1.ModelBuilder {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.id = this.newId();
11
+ }
12
+ newId() {
13
+ return new id_1.Id((0, uuid_1.v4)());
14
+ }
15
+ withId(id) {
16
+ this.id = id;
17
+ return this;
18
+ }
19
+ withNewId() {
20
+ return this.withId(this.newId());
21
+ }
22
+ }
23
+ exports.IdentifiableModelBuilder = IdentifiableModelBuilder;
@@ -0,0 +1,13 @@
1
+ import { ModelBase, Props } from "../../model";
2
+ import { Id } from "../id";
3
+ export interface IdentifiableModelMetadata {
4
+ id: Id;
5
+ }
6
+ export declare class IdentifiableModel<P extends Props> extends ModelBase<P> {
7
+ protected readonly _id: Id;
8
+ constructor(metadata: IdentifiableModelMetadata);
9
+ metadata(): IdentifiableModelMetadata;
10
+ id(): Id;
11
+ hasId(id: Id): boolean;
12
+ }
13
+ export type AnyIdentifiableModel = IdentifiableModel<Props>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IdentifiableModel = void 0;
4
+ const model_1 = require("../../model");
5
+ class IdentifiableModel extends model_1.ModelBase {
6
+ constructor(metadata) {
7
+ super();
8
+ this._id = metadata.id;
9
+ }
10
+ metadata() {
11
+ return {
12
+ ...super.metadata(),
13
+ id: this._id,
14
+ };
15
+ }
16
+ id() {
17
+ return this._id;
18
+ }
19
+ hasId(id) {
20
+ return this._id.equals(id);
21
+ }
22
+ }
23
+ exports.IdentifiableModel = IdentifiableModel;
@@ -0,0 +1,2 @@
1
+ export * from "./identifiable-model";
2
+ export * from "./identifiable-model.builder";
@@ -14,5 +14,5 @@ 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("./snowflake"), exports);
18
- __exportStar(require("./uuid4"), exports);
17
+ __exportStar(require("./identifiable-model"), exports);
18
+ __exportStar(require("./identifiable-model.builder"), exports);
@@ -1,9 +1,9 @@
1
+ export * from "./value-object";
2
+ export * from "./enum";
1
3
  export * from "./id";
2
- export * from "./model-with-id";
4
+ export * from "./identifiable-model";
3
5
  export * from "./entity";
4
6
  export * from "./aggregate";
5
7
  export * from "./message";
6
- export * from "./enum";
7
- export * from "./value-object";
8
8
  export * from "./repository";
9
9
  export * from "./event-pubsub";