ddd-node 17.3.0 → 20.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 (179) hide show
  1. package/dist/core/aggregate/aggregate-base/aggregate.builder.d.ts +7 -0
  2. package/dist/core/aggregate/aggregate-base/aggregate.builder.js +18 -0
  3. package/dist/core/aggregate/aggregate-base/aggregate.d.ts +16 -0
  4. package/dist/core/aggregate/{base.js → aggregate-base/aggregate.js} +12 -5
  5. package/dist/core/aggregate/aggregate-base/index.d.ts +2 -0
  6. package/dist/core/aggregate/aggregate-base/index.js +18 -0
  7. package/dist/core/aggregate/event-dispatcher.interface.d.ts +4 -0
  8. package/dist/core/aggregate/event-dispatcher.interface.js +2 -0
  9. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.builder.d.ts +12 -0
  10. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.builder.js +35 -0
  11. package/dist/core/aggregate/{event-sourced-aggregate.d.ts → event-sourced-aggregate/event-sourced-aggregate.d.ts} +11 -13
  12. package/dist/core/aggregate/{event-sourced-aggregate.js → event-sourced-aggregate/event-sourced-aggregate.js} +26 -36
  13. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.model-metadata.d.ts +9 -0
  14. package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.model-metadata.js +22 -0
  15. package/dist/core/aggregate/event-sourced-aggregate/index.d.ts +3 -0
  16. package/dist/core/aggregate/event-sourced-aggregate/index.js +19 -0
  17. package/dist/core/aggregate/index.d.ts +2 -0
  18. package/dist/core/aggregate/index.js +2 -0
  19. package/dist/core/aggregate/state-aggregate/index.d.ts +2 -0
  20. package/dist/core/aggregate/state-aggregate/index.js +18 -0
  21. package/dist/core/aggregate/state-aggregate/state-aggregate.builder.d.ts +7 -0
  22. package/dist/core/aggregate/state-aggregate/state-aggregate.builder.js +19 -0
  23. package/dist/core/aggregate/{state-aggregate.d.ts → state-aggregate/state-aggregate.d.ts} +5 -9
  24. package/dist/core/aggregate/{state-aggregate.js → state-aggregate/state-aggregate.js} +2 -8
  25. package/dist/core/aggregate/types.d.ts +3 -3
  26. package/dist/core/entity/entity.builder.d.ts +9 -0
  27. package/dist/core/entity/entity.builder.js +17 -0
  28. package/dist/core/{entity.d.ts → entity/entity.d.ts} +4 -5
  29. package/dist/core/entity/entity.js +26 -0
  30. package/dist/core/entity/index.d.ts +2 -0
  31. package/dist/core/entity/index.js +18 -0
  32. package/dist/core/enum/enum.builder.d.ts +9 -0
  33. package/dist/core/enum/enum.builder.js +20 -0
  34. package/dist/core/enum/enum.d.ts +21 -0
  35. package/dist/core/enum/enum.js +60 -0
  36. package/dist/core/enum/index.d.ts +2 -0
  37. package/dist/{meta/helpers → core/enum}/index.js +2 -1
  38. package/dist/core/id/index.d.ts +1 -1
  39. package/dist/core/id/index.js +1 -1
  40. package/dist/core/index.d.ts +3 -4
  41. package/dist/core/index.js +3 -4
  42. package/dist/core/message/command/command.builder.d.ts +7 -0
  43. package/dist/core/message/command/command.builder.js +20 -0
  44. package/dist/core/message/{command.d.ts → command/command.d.ts} +10 -7
  45. package/dist/core/message/command/command.js +27 -0
  46. package/dist/core/message/command/index.d.ts +2 -0
  47. package/dist/core/message/command/index.js +18 -0
  48. package/dist/core/message/event/event.builder.d.ts +9 -0
  49. package/dist/core/message/event/event.builder.js +27 -0
  50. package/dist/core/message/{event.d.ts → event/event.d.ts} +13 -10
  51. package/dist/core/message/event/event.js +31 -0
  52. package/dist/core/message/event/index.d.ts +2 -0
  53. package/dist/core/message/event/index.js +18 -0
  54. package/dist/core/message/index.d.ts +1 -1
  55. package/dist/core/message/index.js +1 -1
  56. package/dist/core/message/message-base/index.d.ts +2 -0
  57. package/dist/core/message/message-base/index.js +18 -0
  58. package/dist/core/message/message-base/message.builder.d.ts +16 -0
  59. package/dist/core/message/message-base/message.builder.js +45 -0
  60. package/dist/core/message/message-base/message.d.ts +31 -0
  61. package/dist/core/message/message-base/message.js +47 -0
  62. package/dist/core/model-with-id/index.d.ts +2 -0
  63. package/dist/core/model-with-id/index.js +18 -0
  64. package/dist/core/model-with-id/model-with-id.builder.d.ts +11 -0
  65. package/dist/core/model-with-id/model-with-id.builder.js +22 -0
  66. package/dist/core/{model → model-with-id}/model-with-id.d.ts +1 -3
  67. package/dist/core/{model → model-with-id}/model-with-id.js +1 -10
  68. package/dist/core/value-object/index.d.ts +2 -0
  69. package/dist/core/value-object/index.js +18 -0
  70. package/dist/core/value-object/value-object.builder.d.ts +7 -0
  71. package/dist/core/value-object/value-object.builder.js +16 -0
  72. package/dist/core/{value-object.d.ts → value-object/value-object.d.ts} +2 -2
  73. package/dist/core/value-object/value-object.js +40 -0
  74. package/dist/decorators/aggregate-es/handle.js +1 -1
  75. package/dist/decorators/aggregate-es/when.js +1 -1
  76. package/dist/decorators/enum.d.ts +2 -0
  77. package/dist/decorators/{model/enum.js → enum.js} +2 -2
  78. package/dist/decorators/index.d.ts +1 -2
  79. package/dist/decorators/index.js +1 -2
  80. package/dist/decorators/message/command.js +1 -1
  81. package/dist/decorators/message/event.js +1 -1
  82. package/dist/index.d.ts +2 -0
  83. package/dist/index.js +2 -0
  84. package/dist/meta/aggregate-es/command-handler-map.d.ts +8 -0
  85. package/dist/meta/aggregate-es/command-handler-map.js +43 -0
  86. package/dist/meta/aggregate-es/event-applier-map.d.ts +9 -0
  87. package/dist/meta/aggregate-es/event-applier-map.js +43 -0
  88. package/dist/meta/aggregate-es/index.d.ts +2 -0
  89. package/dist/meta/aggregate-es/index.js +18 -0
  90. package/dist/meta/command.metadata.d.ts +6 -2
  91. package/dist/meta/command.metadata.js +19 -5
  92. package/dist/meta/event.metadata.d.ts +6 -2
  93. package/dist/meta/event.metadata.js +19 -5
  94. package/dist/meta/id.metadata.js +2 -3
  95. package/dist/meta/index.d.ts +1 -3
  96. package/dist/meta/index.js +1 -3
  97. package/dist/model/core/index.d.ts +2 -0
  98. package/dist/{core/model → model/core}/index.js +1 -1
  99. package/dist/model/core/model.builder.d.ts +11 -0
  100. package/dist/model/core/model.builder.js +18 -0
  101. package/dist/model/core/model.d.ts +41 -0
  102. package/dist/{core/model → model/core}/model.js +36 -57
  103. package/dist/model/decorators/index.d.ts +4 -0
  104. package/dist/{decorators/model → model/decorators}/index.js +1 -3
  105. package/dist/model/decorators/model.d.ts +12 -0
  106. package/dist/model/decorators/model.js +54 -0
  107. package/dist/model/decorators/mutable.d.ts +2 -0
  108. package/dist/model/decorators/mutable.js +10 -0
  109. package/dist/model/decorators/prop.d.ts +2 -0
  110. package/dist/{decorators/model → model/decorators}/prop.js +2 -2
  111. package/dist/model/decorators/static.d.ts +3 -0
  112. package/dist/model/decorators/static.js +11 -0
  113. package/dist/model/domain.d.ts +20 -0
  114. package/dist/model/domain.js +40 -0
  115. package/dist/model/index.d.ts +5 -0
  116. package/dist/model/index.js +21 -0
  117. package/dist/model/meta/index.d.ts +8 -0
  118. package/dist/model/meta/index.js +24 -0
  119. package/dist/model/meta/model-domain.d.ts +5 -0
  120. package/dist/model/meta/model-domain.js +15 -0
  121. package/dist/model/meta/model-id.d.ts +16 -0
  122. package/dist/model/meta/model-id.js +39 -0
  123. package/dist/model/meta/model-mutable.d.ts +2 -0
  124. package/dist/model/meta/model-mutable.js +14 -0
  125. package/dist/model/meta/model-name.d.ts +8 -0
  126. package/dist/model/meta/model-name.js +25 -0
  127. package/dist/model/meta/model-props-map.d.ts +6 -0
  128. package/dist/model/meta/model-props-map.js +45 -0
  129. package/dist/model/meta/model-props-validator.d.ts +6 -0
  130. package/dist/model/meta/model-props-validator.js +33 -0
  131. package/dist/model/meta/model-static-values.d.ts +13 -0
  132. package/dist/model/meta/model-static-values.js +54 -0
  133. package/dist/model/meta/model-version.d.ts +8 -0
  134. package/dist/model/meta/model-version.js +25 -0
  135. package/dist/model/model-registry.d.ts +17 -0
  136. package/dist/model/model-registry.js +55 -0
  137. package/dist/package.json +1 -1
  138. package/package.json +2 -2
  139. package/dist/core/aggregate/base.d.ts +0 -12
  140. package/dist/core/domain.d.ts +0 -17
  141. package/dist/core/domain.js +0 -47
  142. package/dist/core/entity.js +0 -20
  143. package/dist/core/enum.d.ts +0 -18
  144. package/dist/core/enum.js +0 -45
  145. package/dist/core/message/command.js +0 -25
  146. package/dist/core/message/event.js +0 -30
  147. package/dist/core/message/message.d.ts +0 -23
  148. package/dist/core/message/message.js +0 -33
  149. package/dist/core/model/index.d.ts +0 -2
  150. package/dist/core/model/model.d.ts +0 -47
  151. package/dist/core/value-object.js +0 -27
  152. package/dist/decorators/id.d.ts +0 -2
  153. package/dist/decorators/id.js +0 -10
  154. package/dist/decorators/model/enum.d.ts +0 -2
  155. package/dist/decorators/model/index.d.ts +0 -6
  156. package/dist/decorators/model/model.d.ts +0 -2
  157. package/dist/decorators/model/model.js +0 -10
  158. package/dist/decorators/model/prop.d.ts +0 -2
  159. package/dist/decorators/model/static.d.ts +0 -3
  160. package/dist/decorators/model/static.js +0 -20
  161. package/dist/decorators/model/validator.d.ts +0 -3
  162. package/dist/decorators/model/validator.js +0 -11
  163. package/dist/decorators/model/version.d.ts +0 -2
  164. package/dist/decorators/model/version.js +0 -10
  165. package/dist/meta/aggregate.metadata.d.ts +0 -8
  166. package/dist/meta/aggregate.metadata.js +0 -34
  167. package/dist/meta/helpers/index.d.ts +0 -1
  168. package/dist/meta/helpers/static-value.d.ts +0 -7
  169. package/dist/meta/helpers/static-value.js +0 -15
  170. package/dist/meta/model.metadata.d.ts +0 -24
  171. package/dist/meta/model.metadata.js +0 -145
  172. /package/dist/core/id/{common → services}/index.d.ts +0 -0
  173. /package/dist/core/id/{common → services}/index.js +0 -0
  174. /package/dist/core/id/{common → services}/snowflake.d.ts +0 -0
  175. /package/dist/core/id/{common → services}/snowflake.js +0 -0
  176. /package/dist/core/id/{common → services}/uuid4.d.ts +0 -0
  177. /package/dist/core/id/{common → services}/uuid4.js +0 -0
  178. /package/dist/{core/model → model/core}/errors.d.ts +0 -0
  179. /package/dist/{core/model → model/core}/errors.js +0 -0
@@ -1,21 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ModelWithId = void 0;
4
- const meta_1 = require("../../meta");
5
- const id_1 = require("../id");
6
- const model_1 = require("./model");
4
+ const model_1 = require("../../model");
7
5
  class ModelWithId extends model_1.ModelBase {
8
6
  constructor(id) {
9
7
  super();
10
8
  this._id = id;
11
9
  }
12
- static idService() {
13
- return (0, meta_1.getIdService)(this);
14
- }
15
- static id(id) {
16
- const idService = this.idService();
17
- return new id_1.Id(id ?? idService.generateValue());
18
- }
19
10
  id() {
20
11
  return this._id;
21
12
  }
@@ -0,0 +1,2 @@
1
+ export * from "./value-object";
2
+ export * from "./value-object.builder";
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./value-object"), exports);
18
+ __exportStar(require("./value-object.builder"), exports);
@@ -0,0 +1,7 @@
1
+ import { ModelBuilder } from "../../model";
2
+ import { AnyValueObject, ValueObjectClassWithTypedConstructor } from "./value-object";
3
+ export declare class ValueObjectBuilder<T extends AnyValueObject> extends ModelBuilder<T> {
4
+ private valueObjectClass;
5
+ constructor(valueObjectClass: ValueObjectClassWithTypedConstructor<T>);
6
+ build(): T;
7
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ValueObjectBuilder = void 0;
4
+ const model_1 = require("../../model");
5
+ class ValueObjectBuilder extends model_1.ModelBuilder {
6
+ constructor(valueObjectClass) {
7
+ super();
8
+ this.valueObjectClass = valueObjectClass;
9
+ }
10
+ build() {
11
+ if (!this._props)
12
+ throw new Error("The props must be set before build");
13
+ return new this.valueObjectClass(this._props);
14
+ }
15
+ }
16
+ exports.ValueObjectBuilder = ValueObjectBuilder;
@@ -1,6 +1,6 @@
1
1
  import { Class } from "type-fest";
2
- import { ModelBase, Props, PropsOf } from "./model";
3
- import { ClassStatic } from "../types";
2
+ import { ModelBase, Props, PropsOf } from "../../model";
3
+ import { ClassStatic } from "../../types";
4
4
  export declare class ValueObjectBase<P extends Props> extends ModelBase<P> {
5
5
  constructor(props: P);
6
6
  props(): P;
@@ -0,0 +1,40 @@
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
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ValueObjectBase = void 0;
16
+ const lodash_1 = __importDefault(require("lodash"));
17
+ const model_1 = require("../../model");
18
+ let ValueObjectBase = class ValueObjectBase extends model_1.ModelBase {
19
+ constructor(props) {
20
+ super();
21
+ this.initializeProps(props);
22
+ }
23
+ props() {
24
+ return super.props();
25
+ }
26
+ equals(vo) {
27
+ const equalsType = vo instanceof this.constructor;
28
+ const equalsValue = JSON.stringify(vo.props()) === JSON.stringify(this.props());
29
+ return equalsType && equalsValue;
30
+ }
31
+ with(props) {
32
+ const newProps = lodash_1.default.merge(this.props(), props);
33
+ return new this.constructor(newProps);
34
+ }
35
+ };
36
+ exports.ValueObjectBase = ValueObjectBase;
37
+ exports.ValueObjectBase = ValueObjectBase = __decorate([
38
+ (0, model_1.Mutable)(false),
39
+ __metadata("design:paramtypes", [Object])
40
+ ], ValueObjectBase);
@@ -5,7 +5,7 @@ const meta_1 = require("../../meta");
5
5
  const Handle = (commandClass) => {
6
6
  return (target, propertyKey, descriptor) => {
7
7
  if (typeof descriptor.value === "function") {
8
- const commandType = commandClass.commandType();
8
+ const { commandType } = commandClass.commandModelMetadata();
9
9
  (0, meta_1.defineCommandHandler)(target, commandType, descriptor.value);
10
10
  }
11
11
  };
@@ -5,7 +5,7 @@ const meta_1 = require("../../meta");
5
5
  const When = (eventClass) => {
6
6
  return (target, propertyKey, descriptor) => {
7
7
  if (typeof descriptor.value === "function") {
8
- const eventType = eventClass.eventType();
8
+ const { eventType } = eventClass.eventModelMetadata();
9
9
  (0, meta_1.defineEventApplier)(target, eventType, descriptor.value);
10
10
  }
11
11
  };
@@ -0,0 +1,2 @@
1
+ import { EnumClass, EnumValue } from "../core";
2
+ export declare const Enum: (value: EnumValue) => <T extends EnumClass<import("../core").EnumBase, any[]>>(target: T, key: string) => void;
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Enum = void 0;
4
- const static_1 = require("./static");
4
+ const model_1 = require("../model");
5
5
  const Enum = (value) => {
6
6
  return (target, key) => {
7
- (0, static_1.Static)(() => new target(value))(target, key);
7
+ (0, model_1.Static)(() => new target(value))(target, key);
8
8
  };
9
9
  };
10
10
  exports.Enum = Enum;
@@ -1,4 +1,3 @@
1
1
  export * from "./aggregate-es";
2
- export * from "./id";
3
- export * from "./model";
4
2
  export * from "./message";
3
+ export * from "./enum";
@@ -15,6 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./aggregate-es"), exports);
18
- __exportStar(require("./id"), exports);
19
- __exportStar(require("./model"), exports);
20
18
  __exportStar(require("./message"), exports);
19
+ __exportStar(require("./enum"), exports);
@@ -4,7 +4,7 @@ exports.Command = void 0;
4
4
  const meta_1 = require("../../meta");
5
5
  const Command = (commandType) => {
6
6
  return (target) => {
7
- (0, meta_1.setCommandType)(target, commandType);
7
+ (0, meta_1.defineCommandType)(target, commandType);
8
8
  };
9
9
  };
10
10
  exports.Command = Command;
@@ -4,7 +4,7 @@ exports.Event = void 0;
4
4
  const meta_1 = require("../../meta");
5
5
  const Event = (eventType) => {
6
6
  return (target) => {
7
- (0, meta_1.setEventType)(target, eventType);
7
+ (0, meta_1.defineEventType)(target, eventType);
8
8
  };
9
9
  };
10
10
  exports.Event = Event;
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ /// <reference types="src/declarations" />
2
+ export * from "./model";
1
3
  export * from "./meta";
2
4
  export * from "./types";
3
5
  export * from "./utils";
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ /// <reference path="./declarations/index.d.ts" />
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -14,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
15
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
16
  };
16
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
+ __exportStar(require("./model"), exports);
17
19
  __exportStar(require("./meta"), exports);
18
20
  __exportStar(require("./types"), exports);
19
21
  __exportStar(require("./utils"), exports);
@@ -0,0 +1,8 @@
1
+ import { AnyCommand, CommandHandler } from "../../core";
2
+ export declare class CommandHandlerMap extends Map<string, CommandHandler> {
3
+ }
4
+ export declare const OwnCommandHandlerMapMetaKey: unique symbol;
5
+ export declare const getOwnCommandHandlerMap: (target: object) => CommandHandlerMap;
6
+ export declare const defineCommandHandler: <T extends AnyCommand>(target: object, commandType: string, handler: CommandHandler<T>) => void;
7
+ export declare const CommandHandlerMapMetaKey: unique symbol;
8
+ export declare const getCommandHandlerMap: (target: object) => CommandHandlerMap;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCommandHandlerMap = exports.CommandHandlerMapMetaKey = exports.defineCommandHandler = exports.getOwnCommandHandlerMap = exports.OwnCommandHandlerMapMetaKey = exports.CommandHandlerMap = void 0;
4
+ class CommandHandlerMap extends Map {
5
+ }
6
+ exports.CommandHandlerMap = CommandHandlerMap;
7
+ exports.OwnCommandHandlerMapMetaKey = Symbol.for("OWN_COMMAND_HANDLER_MAP");
8
+ const getOwnCommandHandlerMap = (target) => {
9
+ const ownCommandHandlerMap = () => Reflect.getOwnMetadata(exports.OwnCommandHandlerMapMetaKey, target);
10
+ if (!ownCommandHandlerMap())
11
+ Reflect.defineMetadata(exports.OwnCommandHandlerMapMetaKey, new CommandHandlerMap(), target);
12
+ return ownCommandHandlerMap();
13
+ };
14
+ exports.getOwnCommandHandlerMap = getOwnCommandHandlerMap;
15
+ const defineCommandHandler = (target, commandType, handler) => {
16
+ const commandHandlersMap = (0, exports.getOwnCommandHandlerMap)(target);
17
+ commandHandlersMap.set(commandType, handler);
18
+ };
19
+ exports.defineCommandHandler = defineCommandHandler;
20
+ exports.CommandHandlerMapMetaKey = Symbol.for("COMMAND_HANDLER_MAP");
21
+ const getCommandHandlerMap = (target) => {
22
+ if (!Reflect.hasOwnMetadata(exports.CommandHandlerMapMetaKey, target)) {
23
+ const buildCommandHandlerMap = (target) => {
24
+ let _target = target;
25
+ const result = new CommandHandlerMap();
26
+ const ownCommandHandlerMaps = [];
27
+ do {
28
+ const ownCommandHandlerMap = (0, exports.getOwnCommandHandlerMap)(_target);
29
+ ownCommandHandlerMaps.unshift(ownCommandHandlerMap);
30
+ _target = Reflect.getPrototypeOf(_target);
31
+ } while (_target !== null);
32
+ ownCommandHandlerMaps.forEach((ownCommandHandlerMap) => {
33
+ ownCommandHandlerMap.forEach((commandHandler, methodName) => {
34
+ result.set(methodName, commandHandler);
35
+ });
36
+ });
37
+ return result;
38
+ };
39
+ Reflect.defineMetadata(exports.CommandHandlerMapMetaKey, buildCommandHandlerMap(target), target);
40
+ }
41
+ return Reflect.getOwnMetadata(exports.CommandHandlerMapMetaKey, target);
42
+ };
43
+ exports.getCommandHandlerMap = getCommandHandlerMap;
@@ -0,0 +1,9 @@
1
+ import "reflect-metadata";
2
+ import { AnyEvent, EventApplier } from "../../core";
3
+ export declare class EventApplierMap extends Map<string, EventApplier> {
4
+ }
5
+ export declare const OwnEventApplierMapMetaKey: unique symbol;
6
+ export declare const getOwnEventApplierMap: (target: object) => EventApplierMap;
7
+ export declare const defineEventApplier: <T extends AnyEvent>(target: object, eventType: string, applier: EventApplier<T>) => void;
8
+ export declare const EventApplierMapMetaKey: unique symbol;
9
+ export declare const getEventApplierMap: (target: object) => EventApplierMap;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getEventApplierMap = exports.EventApplierMapMetaKey = exports.defineEventApplier = exports.getOwnEventApplierMap = exports.OwnEventApplierMapMetaKey = exports.EventApplierMap = void 0;
4
+ require("reflect-metadata");
5
+ class EventApplierMap extends Map {
6
+ }
7
+ exports.EventApplierMap = EventApplierMap;
8
+ exports.OwnEventApplierMapMetaKey = Symbol.for("OWN_EVENT_APPLIER_MAP");
9
+ const getOwnEventApplierMap = (target) => {
10
+ if (!Reflect.hasOwnMetadata(exports.OwnEventApplierMapMetaKey, target))
11
+ Reflect.defineMetadata(exports.OwnEventApplierMapMetaKey, new EventApplierMap(), target);
12
+ return Reflect.getMetadata(exports.OwnEventApplierMapMetaKey, target);
13
+ };
14
+ exports.getOwnEventApplierMap = getOwnEventApplierMap;
15
+ const defineEventApplier = (target, eventType, applier) => {
16
+ const eventAppliersMap = (0, exports.getOwnEventApplierMap)(target);
17
+ eventAppliersMap.set(eventType, applier);
18
+ };
19
+ exports.defineEventApplier = defineEventApplier;
20
+ exports.EventApplierMapMetaKey = Symbol.for("EVENT_HANDLER_MAP");
21
+ const getEventApplierMap = (target) => {
22
+ if (!Reflect.hasOwnMetadata(exports.EventApplierMapMetaKey, target)) {
23
+ const buildEventApplierMap = (target) => {
24
+ let _target = target;
25
+ const result = new EventApplierMap();
26
+ const ownEventApplierMaps = [];
27
+ do {
28
+ const ownEventApplierMap = (0, exports.getOwnEventApplierMap)(_target);
29
+ ownEventApplierMaps.unshift(ownEventApplierMap);
30
+ _target = Reflect.getPrototypeOf(_target);
31
+ } while (_target !== null);
32
+ ownEventApplierMaps.forEach((ownEventApplierMap) => {
33
+ ownEventApplierMap.forEach((eventApplier, methodName) => {
34
+ result.set(methodName, eventApplier);
35
+ });
36
+ });
37
+ return result;
38
+ };
39
+ Reflect.defineMetadata(exports.EventApplierMapMetaKey, buildEventApplierMap(target), target);
40
+ }
41
+ return Reflect.getOwnMetadata(exports.EventApplierMapMetaKey, target);
42
+ };
43
+ exports.getEventApplierMap = getEventApplierMap;
@@ -0,0 +1,2 @@
1
+ export * from "./event-applier-map";
2
+ export * from "./command-handler-map";
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./event-applier-map"), exports);
18
+ __exportStar(require("./command-handler-map"), exports);
@@ -1,4 +1,8 @@
1
1
  import "reflect-metadata";
2
2
  export type CommandType = string;
3
- export declare const setCommandType: (target: object, commandType: CommandType) => void;
4
- export declare const getCommandType: (target: object) => CommandType | undefined;
3
+ export declare class CType extends String {
4
+ static validate(commandType: string): void;
5
+ constructor(commandType: CommandType);
6
+ }
7
+ export declare const defineCommandType: (target: object, commandType: CommandType) => void;
8
+ export declare const getCommandType: (target: object) => CommandType;
@@ -1,13 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCommandType = exports.setCommandType = void 0;
3
+ exports.getCommandType = exports.defineCommandType = exports.CType = void 0;
4
4
  require("reflect-metadata");
5
+ class CType extends String {
6
+ static validate(commandType) {
7
+ if (commandType.trim().length === 0)
8
+ throw new Error("Command type cannot be an empty string");
9
+ }
10
+ constructor(commandType) {
11
+ CType.validate(commandType);
12
+ super(commandType);
13
+ }
14
+ }
15
+ exports.CType = CType;
5
16
  const CommandTypeMetaKey = Symbol.for("COMMAND_TYPE");
6
- const setCommandType = (target, commandType) => {
7
- Reflect.defineMetadata(CommandTypeMetaKey, commandType, target);
17
+ const defineCommandType = (target, commandType) => {
18
+ Reflect.defineMetadata(CommandTypeMetaKey, new CType(commandType), target);
8
19
  };
9
- exports.setCommandType = setCommandType;
20
+ exports.defineCommandType = defineCommandType;
10
21
  const getCommandType = (target) => {
11
- return Reflect.getOwnMetadata(CommandTypeMetaKey, target);
22
+ const commandType = Reflect.getOwnMetadata(CommandTypeMetaKey, target);
23
+ if (!commandType)
24
+ throw new Error("Command's type is not defined");
25
+ return commandType.valueOf();
12
26
  };
13
27
  exports.getCommandType = getCommandType;
@@ -1,4 +1,8 @@
1
1
  import "reflect-metadata";
2
2
  export type EventType = string;
3
- export declare const setEventType: (target: object, eventType: EventType) => void;
4
- export declare const getEventType: (target: object) => EventType | undefined;
3
+ export declare class EType extends String {
4
+ static validate(eventType: string): void;
5
+ constructor(eventType: EventType);
6
+ }
7
+ export declare const defineEventType: (target: object, eventType: EventType) => void;
8
+ export declare const getEventType: (target: object) => EventType;
@@ -1,13 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getEventType = exports.setEventType = void 0;
3
+ exports.getEventType = exports.defineEventType = exports.EType = void 0;
4
4
  require("reflect-metadata");
5
+ class EType extends String {
6
+ static validate(eventType) {
7
+ if (eventType.trim().length === 0)
8
+ throw new Error("Event type cannot be an empty string");
9
+ }
10
+ constructor(eventType) {
11
+ EType.validate(eventType);
12
+ super(eventType);
13
+ }
14
+ }
15
+ exports.EType = EType;
5
16
  const EventTypeMetaKey = Symbol.for("EVENT_TYPE");
6
- const setEventType = (target, eventType) => {
7
- Reflect.defineMetadata(EventTypeMetaKey, eventType, target);
17
+ const defineEventType = (target, eventType) => {
18
+ Reflect.defineMetadata(EventTypeMetaKey, new EType(eventType), target);
8
19
  };
9
- exports.setEventType = setEventType;
20
+ exports.defineEventType = defineEventType;
10
21
  const getEventType = (target) => {
11
- return Reflect.getOwnMetadata(EventTypeMetaKey, target);
22
+ const eventType = Reflect.getOwnMetadata(EventTypeMetaKey, target);
23
+ if (!eventType)
24
+ throw new Error("Event's type is not defined");
25
+ return eventType.valueOf();
12
26
  };
13
27
  exports.getEventType = getEventType;
@@ -9,9 +9,8 @@ const defineIdService = (target, idService) => {
9
9
  exports.defineIdService = defineIdService;
10
10
  const getIdService = (target) => {
11
11
  const idService = () => Reflect.getMetadata(exports.IdServiceMetaKey, target);
12
- if (idService())
13
- return idService();
14
- Reflect.defineMetadata(exports.IdServiceMetaKey, new core_1.Uuid4Service(), target);
12
+ if (!idService())
13
+ (0, exports.defineIdService)(target, new core_1.Uuid4Service());
15
14
  return idService();
16
15
  };
17
16
  exports.getIdService = getIdService;
@@ -1,6 +1,4 @@
1
- export * from "./helpers";
2
- export * from "./aggregate.metadata";
1
+ export * from "./aggregate-es";
3
2
  export * from "./id.metadata";
4
- export * from "./model.metadata";
5
3
  export * from "./event.metadata";
6
4
  export * from "./command.metadata";
@@ -14,9 +14,7 @@ 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("./helpers"), exports);
18
- __exportStar(require("./aggregate.metadata"), exports);
17
+ __exportStar(require("./aggregate-es"), exports);
19
18
  __exportStar(require("./id.metadata"), exports);
20
- __exportStar(require("./model.metadata"), exports);
21
19
  __exportStar(require("./event.metadata"), exports);
22
20
  __exportStar(require("./command.metadata"), exports);
@@ -0,0 +1,2 @@
1
+ export * from "./model";
2
+ export * from "./model.builder";
@@ -15,4 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./model"), exports);
18
- __exportStar(require("./model-with-id"), exports);
18
+ __exportStar(require("./model.builder"), exports);
@@ -0,0 +1,11 @@
1
+ import { AnyModel, PropsOf } 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?: PropsOf<T>;
8
+ withProps(props: PropsOf<T>): this;
9
+ abstract build(): T;
10
+ buildSafe(): T | null;
11
+ }
@@ -0,0 +1,18 @@
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;
@@ -0,0 +1,41 @@
1
+ import { Class } from "type-fest";
2
+ import { ModelId, ModelName, ModelVersion, PropsMap, PropsValidator, StaticValuesMap } from "../meta";
3
+ import { ClassStatic } from "../../types";
4
+ export interface Props {
5
+ [key: PropertyKey]: any;
6
+ }
7
+ export type EmptyProps = {
8
+ [key: PropertyKey]: never;
9
+ };
10
+ export declare class ModelMetadata<T extends AnyModel = AnyModel> {
11
+ private modelClass;
12
+ constructor(modelClass: ModelClass<T>);
13
+ get modelMutable(): boolean;
14
+ get modelName(): ModelName;
15
+ get modelVersion(): ModelVersion;
16
+ get modelId(): ModelId;
17
+ get ownPropsValidator(): PropsValidator<T> | undefined;
18
+ get propsValidators(): PropsValidator[];
19
+ get ownStaticValues(): StaticValuesMap<T>;
20
+ get ownPropsMap(): PropsMap<T>;
21
+ get propsMap(): PropsMap<T>;
22
+ }
23
+ export declare class ModelBase<P extends Props> {
24
+ static readonly EMPTY_PROPS: EmptyProps;
25
+ protected _props: P;
26
+ static isModel(model: any): model is AnyModel;
27
+ static modelMetadata<T extends AnyModel>(this: ModelClass<T>): ModelMetadata<T>;
28
+ constructor();
29
+ protected redefineModel(): void;
30
+ protected redefineProp(key: keyof this, propTargetKey: keyof P): void;
31
+ protected modelMetadata(): ModelMetadata<typeof this>;
32
+ validateProps(props: P): void;
33
+ validate(): void;
34
+ propsIsEmpty(): boolean;
35
+ props(): P | null;
36
+ protected initializeProps(props: P): void;
37
+ }
38
+ export type AnyModel = ModelBase<Props>;
39
+ export type PropsOf<T extends AnyModel> = T extends ModelBase<infer P extends Props> ? P : never;
40
+ export interface ModelClass<T extends AnyModel = AnyModel> extends Class<T>, ClassStatic<typeof ModelBase<PropsOf<T>>> {
41
+ }