ddd-node 30.1.2 → 31.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 (175) 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/{value-object → model/value-object}/value-object.d.ts +5 -4
  82. package/core/{value-object → model/value-object}/value-object.js +7 -3
  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/decorators/aggregate-es/handle.d.ts +0 -2
  153. package/decorators/aggregate-es/when.d.ts +0 -2
  154. package/decorators/enum.d.ts +0 -2
  155. package/decorators/message/command.d.ts +0 -4
  156. package/decorators/message/event.d.ts +0 -4
  157. package/event-pubsub/event-publisher.d.ts +0 -7
  158. package/event-pubsub/interfaces/event-publisher.interface.d.ts +0 -4
  159. package/event-pubsub/interfaces/event-publisher.interface.js +0 -2
  160. /package/{decorators/aggregate-es → core/decorators/es-aggregate}/handle.js +0 -0
  161. /package/{decorators/aggregate-es → core/decorators/es-aggregate}/index.d.ts +0 -0
  162. /package/{decorators/aggregate-es → core/decorators/es-aggregate}/index.js +0 -0
  163. /package/{decorators/aggregate-es → core/decorators/es-aggregate}/when.js +0 -0
  164. /package/{decorators → core/decorators}/type.d.ts +0 -0
  165. /package/{decorators → core/decorators}/type.js +0 -0
  166. /package/{meta → core/meta}/command.metadata.d.ts +0 -0
  167. /package/{meta/aggregate-es → core/meta/es-aggregate}/command-handler-map.js +0 -0
  168. /package/{meta/aggregate-es → core/meta/es-aggregate}/event-applier-map.js +0 -0
  169. /package/{meta/aggregate-es → core/meta/es-aggregate}/index.d.ts +0 -0
  170. /package/{meta/aggregate-es → core/meta/es-aggregate}/index.js +0 -0
  171. /package/{meta → core/meta}/event.metadata.d.ts +0 -0
  172. /package/core/{aggregate → model/aggregate}/types.js +0 -0
  173. /package/core/{model-with-id → model/model-with-id}/id.d.ts +0 -0
  174. /package/core/{model-with-id → model/model-with-id}/id.js +0 -0
  175. /package/{core/aggregate/aggregate-base/aggregate-event-publisher.interface.js → event-pubsub/interfaces/event-dispatcher.interface.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  import { ModelPropsValidator } from "../meta";
2
- import { AnyModel, ModelClass } from "../model";
3
- export type ModelOptions<T extends AnyModel = AnyModel> = {
2
+ import { AnyDomainModel, DomainModelClass } from "../model";
3
+ export type ModelOptions<T extends AnyDomainModel = AnyDomainModel> = {
4
4
  name?: string;
5
5
  version?: number;
6
6
  domain?: string;
@@ -8,6 +8,6 @@ export type ModelOptions<T extends AnyModel = AnyModel> = {
8
8
  autoRegisterModel?: boolean;
9
9
  };
10
10
  export declare const DEFAULT_MODEL_OPTIONS: ModelOptions;
11
- export declare function Model<T extends ModelClass, I extends InstanceType<T> = InstanceType<T>>(options?: ModelOptions<I>): any;
12
- export declare function Model<T extends ModelClass, I extends InstanceType<T> = InstanceType<T>>(name: string, options?: ModelOptions<I>): any;
13
- export declare function Model<T extends ModelClass, I extends InstanceType<T> = InstanceType<T>>(name: string, version: number, options?: ModelOptions<I>): any;
11
+ export declare function Model<T extends DomainModelClass, I extends InstanceType<T> = InstanceType<T>>(options?: ModelOptions<I>): any;
12
+ export declare function Model<T extends DomainModelClass, I extends InstanceType<T> = InstanceType<T>>(name: string, options?: ModelOptions<I>): any;
13
+ export declare function Model<T extends DomainModelClass, I extends InstanceType<T> = InstanceType<T>>(name: string, version: number, options?: ModelOptions<I>): any;
@@ -1,2 +1,2 @@
1
- import { AbstractModelClass, ModelClass } from "../model";
2
- export declare const Mutable: (mutable?: boolean) => <T extends ModelClass<import("../model").AnyModel> | AbstractModelClass<import("../model").AnyModel>>(target: T) => void;
1
+ import { AbstractDomainModelClass, DomainModelClass } from "../model";
2
+ export declare const Mutable: (mutable?: boolean) => <T extends DomainModelClass | AbstractDomainModelClass>(target: T) => void;
@@ -1,2 +1,2 @@
1
- import { AnyModel, InferredProps } from "../model";
2
- export declare const Prop: <T extends AnyModel>(propTargetKey?: keyof InferredProps<T> | undefined) => (target: T, key: PropertyKey) => void;
1
+ import { AnyDomainModel, InferredProps } from "../model";
2
+ export declare const Prop: <T extends AnyDomainModel>(propTargetKey?: keyof InferredProps<T> | undefined) => (target: T, key: PropertyKey) => void;
@@ -1,2 +1,2 @@
1
- import { AnyModel, ModelClass, ModelPropsValidator } from "..";
2
- export declare const PropsValidator: <T extends AnyModel>(target: ModelClass<T>, key: string, propertyDescriptor: TypedPropertyDescriptor<ModelPropsValidator<T>>) => void;
1
+ import { AnyDomainModel, DomainModelClass, ModelPropsValidator } from "..";
2
+ export declare const PropsValidator: <T extends AnyDomainModel>(target: DomainModelClass<T>, key: string, propertyDescriptor: TypedPropertyDescriptor<ModelPropsValidator<T>>) => void;
@@ -1,3 +1,3 @@
1
- import { ModelClass } from "../model";
1
+ import { DomainModelClass } from "../model";
2
2
  import { ModelStaticValueBuilder } from "../meta";
3
- export declare const Static: <T extends ModelClass<import("../model").AnyModel>, I extends InstanceType<T> = InstanceType<T>>(builder: ModelStaticValueBuilder<I>) => (target: T, key: PropertyKey) => void;
3
+ export declare const Static: <T extends DomainModelClass, I extends InstanceType<T> = InstanceType<T>>(builder: ModelStaticValueBuilder<I>) => (target: T, key: PropertyKey) => void;
package/base/domain.d.ts CHANGED
@@ -5,6 +5,7 @@ export declare class Domain {
5
5
  readonly name: DomainName;
6
6
  readonly modelRegistry: ModelRegistry;
7
7
  constructor(name: DomainName);
8
+ reset(): void;
8
9
  }
9
10
  export declare class DomainMap extends Map<DomainName, Domain> {
10
11
  }
package/base/domain.js CHANGED
@@ -8,6 +8,9 @@ class Domain {
8
8
  this.name = name;
9
9
  this.modelRegistry = new model_registry_1.ModelRegistry();
10
10
  }
11
+ reset() {
12
+ this.modelRegistry.clearAll();
13
+ }
11
14
  }
12
15
  exports.Domain = Domain;
13
16
  class DomainMap extends Map {
@@ -1,4 +1,5 @@
1
- import { AnyModel, ModelClass } from "../model";
1
+ import { DomainName } from "../domain";
2
+ import { AnyDomainModel, DomainModelClass } from "../model";
2
3
  export declare const ModelDomainMetaKey: unique symbol;
3
- export declare const defineModelDomain: <T extends AnyModel>(target: ModelClass<T>, domainName: string) => void;
4
- export declare const getModelDomain: <T extends AnyModel>(target: ModelClass<T>) => string;
4
+ export declare const defineModelDomain: <T extends AnyDomainModel>(target: DomainModelClass<T>, domainName: DomainName) => void;
5
+ export declare const getModelDomain: <T extends AnyDomainModel>(target: DomainModelClass<T>) => string;
@@ -1,4 +1,4 @@
1
- import { AnyModel, ModelClass } from "../model";
1
+ import { AnyDomainModel, DomainModelClass } from "../model";
2
2
  import { ModelName } from "./model-name";
3
3
  import { ModelVersion } from "./model-version";
4
4
  export type ModelId = string;
@@ -12,5 +12,5 @@ export declare class $ModelId extends String {
12
12
  static makeValue(modelName: ModelName, modelVersion: ModelVersion): ModelId;
13
13
  constructor(modelName: ModelName, modelVersion: ModelVersion);
14
14
  }
15
- export declare const setModelId: <T extends AnyModel>(target: ModelClass<T>, modelId: $ModelId) => void;
16
- export declare const getModelId: <T extends AnyModel>(target: ModelClass<T>) => ModelId;
15
+ export declare const setModelId: <T extends AnyDomainModel>(target: DomainModelClass<T>, modelId: $ModelId) => void;
16
+ export declare const getModelId: <T extends AnyDomainModel>(target: DomainModelClass<T>) => ModelId;
@@ -1,2 +1,3 @@
1
+ import "reflect-metadata";
1
2
  export declare const defineModelMutable: (target: object, mutable: boolean) => void;
2
3
  export declare const getModelMutable: (target: object) => boolean | undefined;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getModelMutable = exports.defineModelMutable = void 0;
4
+ require("reflect-metadata");
4
5
  const ModelMutableMetaKey = Symbol.for("MODEL_MUTABLE");
5
6
  const defineModelMutable = (target, mutable) => {
6
7
  if (Reflect.hasMetadata(ModelMutableMetaKey, target))
@@ -1,8 +1,8 @@
1
- import { AnyModel, ModelClass } from "../model";
1
+ import { AnyDomainModel, DomainModelClass } from "../model";
2
2
  export type ModelName = string;
3
3
  export declare class $ModelName extends String {
4
4
  static validate(modelName: ModelName): void;
5
5
  constructor(modelName: ModelName);
6
6
  }
7
- export declare const defineModelName: <T extends AnyModel>(target: ModelClass<T>, modelName: ModelName) => void;
8
- export declare const getModelName: <T extends AnyModel>(target: ModelClass<T>) => ModelName;
7
+ export declare const defineModelName: <T extends AnyDomainModel>(target: DomainModelClass<T>, modelName: ModelName) => void;
8
+ export declare const getModelName: <T extends AnyDomainModel>(target: DomainModelClass<T>) => ModelName;
@@ -1,6 +1,6 @@
1
- import { AnyModel, InferredProps } from "../model";
2
- export declare class ModelPropsMap<T extends AnyModel = AnyModel> extends Map<PropertyKey, keyof InferredProps<T>> {
1
+ import { AnyDomainModel, InferredProps } from "../model";
2
+ export declare class ModelPropsMap<T extends AnyDomainModel = AnyDomainModel> extends Map<PropertyKey, keyof InferredProps<T>> {
3
3
  }
4
- export declare const getOwnModelPropsMap: <T extends AnyModel = AnyModel>(target: object) => ModelPropsMap<T>;
5
- export declare const defineModelProp: <T extends AnyModel = AnyModel>(target: object, key: PropertyKey, propTargetKey?: keyof InferredProps<T> | undefined) => void;
6
- export declare const getModelPropsMap: <T extends AnyModel = AnyModel>(target: object) => ModelPropsMap<T>;
4
+ export declare const getOwnModelPropsMap: <T extends AnyDomainModel = AnyDomainModel>(target: object) => ModelPropsMap<T>;
5
+ export declare const defineModelProp: <T extends AnyDomainModel = AnyDomainModel>(target: object, key: PropertyKey, propTargetKey?: keyof InferredProps<T> | undefined) => void;
6
+ export declare const getModelPropsMap: <T extends AnyDomainModel = AnyDomainModel>(target: object) => ModelPropsMap<T>;
@@ -27,7 +27,7 @@ const getModelPropsMap = (target) => {
27
27
  const result = new ModelPropsMap();
28
28
  const ownPropsMapList = [];
29
29
  do {
30
- if (model_1.ModelBase.isModel(_target)) {
30
+ if (model_1.DomainModel.isDomainModel(_target)) {
31
31
  const ownModelPropsMap = (0, exports.getOwnModelPropsMap)(_target);
32
32
  ownPropsMapList.unshift(ownModelPropsMap);
33
33
  }
@@ -1,6 +1,6 @@
1
- import { AnyModel, InferredProps } from "../model";
2
- export type ModelPropsValidator<T extends AnyModel = AnyModel> = (props: InferredProps<T>) => void;
3
- export declare const defineModelPropsValidator: <T extends AnyModel>(target: object, validator: ModelPropsValidator<T>) => void;
4
- export declare const getOwnModelPropsValidator: <T extends AnyModel>(target: object) => ModelPropsValidator<T> | undefined;
1
+ import { AnyDomainModel, InferredProps } from "../model";
2
+ export type ModelPropsValidator<T extends AnyDomainModel = AnyDomainModel> = (props: InferredProps<T>) => void;
3
+ export declare const defineModelPropsValidator: <T extends AnyDomainModel>(target: object, validator: ModelPropsValidator<T>) => void;
4
+ export declare const getOwnModelPropsValidator: <T extends AnyDomainModel>(target: object) => ModelPropsValidator<T> | undefined;
5
5
  export declare const ModelPropsValidatorsMetaKey: unique symbol;
6
6
  export declare const getModelPropsValidators: (target: object) => ModelPropsValidator[];
@@ -1,13 +1,13 @@
1
- import { AnyModel, ModelClass } from "../model";
2
- export type ModelStaticValueBuilder<T extends AnyModel = AnyModel> = () => T;
3
- export declare class ModelStaticValue<T extends AnyModel = AnyModel> {
1
+ import { AnyDomainModel, DomainModelClass } from "../model";
2
+ export type ModelStaticValueBuilder<T extends AnyDomainModel = AnyDomainModel> = () => T;
3
+ export declare class ModelStaticValue<T extends AnyDomainModel = AnyDomainModel> {
4
4
  private _value;
5
5
  constructor(value: T | ModelStaticValueBuilder<T>);
6
6
  get value(): T;
7
7
  }
8
- export declare class ModelStaticValuesMap<T extends AnyModel = AnyModel> extends Map<PropertyKey, ModelStaticValue<T>> {
8
+ export declare class ModelStaticValuesMap<T extends AnyDomainModel = AnyDomainModel> extends Map<PropertyKey, ModelStaticValue<T>> {
9
9
  }
10
- export declare const getOwnModelStaticValues: <T extends AnyModel>(target: object) => ModelStaticValuesMap<T>;
11
- export declare const setModelStaticValue: <T extends AnyModel>(target: object, key: PropertyKey, value: T | ModelStaticValueBuilder<T>) => void;
12
- export declare const getModelStaticValue: (target: object, key: PropertyKey) => AnyModel | undefined;
13
- export declare const defineModelStaticValueProperty: (target: ModelClass, key: PropertyKey) => void;
10
+ export declare const getOwnModelStaticValues: <T extends AnyDomainModel>(target: object) => ModelStaticValuesMap<T>;
11
+ export declare const setModelStaticValue: <T extends AnyDomainModel>(target: object, key: PropertyKey, value: T | ModelStaticValueBuilder<T>) => void;
12
+ export declare const getModelStaticValue: (target: object, key: PropertyKey) => AnyDomainModel | undefined;
13
+ export declare const defineModelStaticValueProperty: (target: DomainModelClass, key: PropertyKey) => void;
@@ -1,8 +1,8 @@
1
- import { AnyModel, ModelClass } from "../model";
1
+ import { AnyDomainModel, DomainModelClass } from "../model";
2
2
  export type ModelVersion = number;
3
3
  export declare class $ModelVersion extends Number {
4
4
  static validate(modelVersion: ModelVersion): void;
5
5
  constructor(modelVersion: ModelVersion);
6
6
  }
7
- export declare const defineModelVersion: <T extends AnyModel>(target: ModelClass<T>, modelVersion: ModelVersion) => void;
8
- export declare const getModelVersion: <T extends AnyModel>(target: ModelClass<T>) => ModelVersion;
7
+ export declare const defineModelVersion: <T extends AnyDomainModel>(target: DomainModelClass<T>, modelVersion: ModelVersion) => void;
8
+ export declare const getModelVersion: <T extends AnyDomainModel>(target: DomainModelClass<T>) => ModelVersion;
@@ -1,3 +1,2 @@
1
1
  export * from "./model";
2
2
  export * from "./model-descriptor";
3
- export * from "./model.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("./model"), exports);
18
18
  __exportStar(require("./model-descriptor"), exports);
19
- __exportStar(require("./model.builder"), exports);
@@ -1,13 +1,16 @@
1
- import { AnyModel } from "./model";
2
- import { ModelId, ModelName, ModelVersion, ModelPropsMap, ModelPropsValidator, ModelStaticValuesMap } from "../meta";
3
- export interface ModelDescriptor<T extends AnyModel = AnyModel> {
4
- modelId: ModelId;
5
- modelName: ModelName;
6
- modelVersion: ModelVersion;
7
- modelMutable: boolean;
8
- ownModelPropsValidator?: ModelPropsValidator<T>;
9
- modelPropsValidators: ModelPropsValidator[];
10
- ownModelStaticValues: ModelStaticValuesMap<T>;
11
- ownModelPropsMap: ModelPropsMap<T>;
12
- modelPropsMap: ModelPropsMap<T>;
1
+ import { AnyDomainModel, DomainModelClass } from ".";
2
+ import { ModelId, ModelName, ModelPropsMap, ModelPropsValidator, ModelStaticValuesMap, ModelVersion } from "../meta";
3
+ export declare class ModelDescriptor<T extends AnyDomainModel = AnyDomainModel> {
4
+ readonly modelClass: DomainModelClass<T>;
5
+ constructor(modelClass: DomainModelClass<T>);
6
+ modelDomain(): string;
7
+ modelMutable(): boolean;
8
+ modelName(): ModelName;
9
+ modelVersion(): ModelVersion;
10
+ modelId(): ModelId;
11
+ ownModelPropsValidator(): ModelPropsValidator<T> | undefined;
12
+ modelPropsValidators(): ModelPropsValidator[];
13
+ ownModelStaticValues(): ModelStaticValuesMap<T>;
14
+ ownModelPropsMap(): ModelPropsMap<T>;
15
+ modelPropsMap(): ModelPropsMap<T>;
13
16
  }
@@ -1,2 +1,41 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModelDescriptor = void 0;
4
+ const meta_1 = require("../meta");
5
+ class ModelDescriptor {
6
+ constructor(modelClass) {
7
+ this.modelClass = modelClass;
8
+ }
9
+ modelDomain() {
10
+ return (0, meta_1.getModelDomain)(this.modelClass);
11
+ }
12
+ modelMutable() {
13
+ var _a;
14
+ return (_a = (0, meta_1.getModelMutable)(this.modelClass)) !== null && _a !== void 0 ? _a : false;
15
+ }
16
+ modelName() {
17
+ return (0, meta_1.getModelName)(this.modelClass);
18
+ }
19
+ modelVersion() {
20
+ return (0, meta_1.getModelVersion)(this.modelClass);
21
+ }
22
+ modelId() {
23
+ return (0, meta_1.getModelId)(this.modelClass);
24
+ }
25
+ ownModelPropsValidator() {
26
+ return (0, meta_1.getOwnModelPropsValidator)(this.modelClass);
27
+ }
28
+ modelPropsValidators() {
29
+ return (0, meta_1.getModelPropsValidators)(this.modelClass);
30
+ }
31
+ ownModelStaticValues() {
32
+ return (0, meta_1.getOwnModelStaticValues)(this.modelClass);
33
+ }
34
+ ownModelPropsMap() {
35
+ return (0, meta_1.getOwnModelPropsMap)(this.modelClass.prototype);
36
+ }
37
+ modelPropsMap() {
38
+ return (0, meta_1.getModelPropsMap)(this.modelClass.prototype);
39
+ }
40
+ }
41
+ exports.ModelDescriptor = ModelDescriptor;
@@ -1,40 +1,30 @@
1
1
  import { AbstractClass, Class } from "type-fest";
2
2
  import { ClassStatic } from "../../types";
3
- import { ModelId, ModelName, ModelPropsMap, ModelPropsValidator, ModelStaticValuesMap, ModelVersion } from "../meta";
4
3
  import { ModelDescriptor } from "./model-descriptor";
5
4
  export interface Props {
6
5
  [key: PropertyKey]: any;
7
6
  }
7
+ export type PropsBuilder<T extends AnyDomainModel> = () => InferredProps<T>;
8
8
  export type EmptyProps = {
9
9
  [key: PropertyKey]: never;
10
10
  };
11
- export declare class ModelBase<P extends Props> {
11
+ export declare class DomainModel<P extends Props> {
12
12
  static readonly EMPTY_PROPS: EmptyProps;
13
+ static modelDescriptor<T extends AnyDomainModel>(this: DomainModelClass<T>): ModelDescriptor<T>;
14
+ static isDomainModel(model: any): model is AnyDomainModel;
13
15
  protected _props: P;
14
- static isModel(model: any): model is AnyModel;
15
- static modelMutable<T extends AnyModel>(this: ModelClass<T>): boolean;
16
- static modelName<T extends AnyModel>(this: ModelClass<T>): ModelName;
17
- static modelVersion<T extends AnyModel>(this: ModelClass<T>): ModelVersion;
18
- static modelId<T extends AnyModel>(this: ModelClass<T>): ModelId;
19
- static ownModelPropsValidator<T extends AnyModel>(this: ModelClass<T>): ModelPropsValidator<T> | undefined;
20
- static modelPropsValidators<T extends AnyModel>(this: ModelClass<T>): ModelPropsValidator[];
21
- static ownModelStaticValues<T extends AnyModel>(this: ModelClass<T>): ModelStaticValuesMap<T>;
22
- static ownModelPropsMap<T extends AnyModel>(this: ModelClass<T>): ModelPropsMap<T>;
23
- static modelPropsMap<T extends AnyModel>(this: ModelClass<T>): ModelPropsMap<T>;
24
16
  constructor();
25
17
  redefineModel(): void;
26
18
  protected redefineProp<K extends keyof P>(key: keyof this, propTargetKey: K): void;
27
- modelDescriptor(): ModelDescriptor<typeof this>;
19
+ modelDescriptor(): ModelDescriptor<AnyDomainModel>;
28
20
  validateProps(props: P): void;
29
21
  validate(): void;
30
22
  propsIsEmpty(): boolean;
31
23
  props(): P | null;
32
24
  metadata(): any;
33
- protected initializeProps(props: P): void;
34
- }
35
- export type AnyModel = ModelBase<Props>;
36
- export type InferredProps<T extends AnyModel> = T extends ModelBase<infer P> ? P : never;
37
- export interface ModelClass<T extends AnyModel = AnyModel> extends Class<T>, ClassStatic<typeof ModelBase<InferredProps<T>>> {
38
- }
39
- export interface AbstractModelClass<T extends AnyModel = AnyModel> extends AbstractClass<T>, ClassStatic<typeof ModelBase<InferredProps<T>>> {
25
+ protected initializeProps(propsOrBuilder: P | PropsBuilder<typeof this>): void;
40
26
  }
27
+ export type AnyDomainModel = DomainModel<Props>;
28
+ export type InferredProps<T extends AnyDomainModel> = T extends DomainModel<infer P> ? P : never;
29
+ export type DomainModelClass<T extends AnyDomainModel = AnyDomainModel> = Class<T> & ClassStatic<typeof DomainModel<InferredProps<T>>>;
30
+ export type AbstractDomainModelClass<T extends AnyDomainModel = AnyDomainModel> = AbstractClass<T> & ClassStatic<typeof DomainModel<InferredProps<T>>>;
@@ -3,48 +3,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ModelBase = void 0;
6
+ exports.DomainModel = void 0;
7
7
  const lodash_1 = __importDefault(require("lodash"));
8
- const meta_1 = require("../meta");
9
8
  const errors_1 = require("./errors");
10
- class ModelBase {
11
- static isModel(model) {
12
- return model instanceof ModelBase;
9
+ const model_descriptor_1 = require("./model-descriptor");
10
+ class DomainModel {
11
+ static modelDescriptor() {
12
+ return new model_descriptor_1.ModelDescriptor(this);
13
13
  }
14
- static modelMutable() {
15
- var _a;
16
- return (_a = (0, meta_1.getModelMutable)(this)) !== null && _a !== void 0 ? _a : false;
17
- }
18
- static modelName() {
19
- return (0, meta_1.getModelName)(this);
20
- }
21
- static modelVersion() {
22
- return (0, meta_1.getModelVersion)(this);
23
- }
24
- static modelId() {
25
- return (0, meta_1.getModelId)(this);
26
- }
27
- static ownModelPropsValidator() {
28
- return (0, meta_1.getOwnModelPropsValidator)(this);
29
- }
30
- static modelPropsValidators() {
31
- return (0, meta_1.getModelPropsValidators)(this);
32
- }
33
- static ownModelStaticValues() {
34
- return (0, meta_1.getOwnModelStaticValues)(this);
35
- }
36
- static ownModelPropsMap() {
37
- return (0, meta_1.getOwnModelPropsMap)(this.prototype);
38
- }
39
- static modelPropsMap() {
40
- return (0, meta_1.getModelPropsMap)(this.prototype);
14
+ static isDomainModel(model) {
15
+ return model instanceof DomainModel;
41
16
  }
42
17
  constructor() {
43
- this._props = ModelBase.EMPTY_PROPS;
18
+ this._props = DomainModel.EMPTY_PROPS;
44
19
  this.redefineModel();
45
20
  }
46
21
  redefineModel() {
47
- this.modelDescriptor().modelPropsMap.forEach((propTargetKey, key) => {
22
+ this.modelDescriptor()
23
+ .modelPropsMap()
24
+ .forEach((propTargetKey, key) => {
48
25
  this.redefineProp(key, propTargetKey);
49
26
  });
50
27
  }
@@ -60,34 +37,23 @@ class ModelBase {
60
37
  });
61
38
  }
62
39
  modelDescriptor() {
63
- const modelClass = this.constructor;
64
- return {
65
- modelMutable: modelClass.modelMutable(),
66
- modelId: modelClass.modelId(),
67
- modelName: modelClass.modelName(),
68
- modelVersion: modelClass.modelVersion(),
69
- ownModelPropsValidator: modelClass.ownModelPropsValidator(),
70
- modelPropsValidators: modelClass.modelPropsValidators(),
71
- ownModelStaticValues: modelClass.ownModelStaticValues(),
72
- ownModelPropsMap: modelClass.ownModelPropsMap(),
73
- modelPropsMap: modelClass.modelPropsMap(),
74
- };
40
+ return new model_descriptor_1.ModelDescriptor(this.constructor);
75
41
  }
76
42
  validateProps(props) {
77
- const modelPropsValidators = this.modelDescriptor().modelPropsValidators;
43
+ const modelPropsValidators = this.modelDescriptor().modelPropsValidators();
78
44
  modelPropsValidators.forEach((propsValidator) => propsValidator.call(this.constructor, props));
79
45
  }
80
46
  validate() {
81
47
  this.validateProps(this._props);
82
48
  }
83
49
  propsIsEmpty() {
84
- return this._props === ModelBase.EMPTY_PROPS;
50
+ return this._props === DomainModel.EMPTY_PROPS;
85
51
  }
86
52
  props() {
87
53
  if (this.propsIsEmpty())
88
54
  return null;
89
55
  return lodash_1.default.cloneDeepWith(this._props, (value) => {
90
- if (ModelBase.isModel(value)) {
56
+ if (DomainModel.isDomainModel(value)) {
91
57
  value.redefineModel();
92
58
  return value;
93
59
  }
@@ -96,9 +62,14 @@ class ModelBase {
96
62
  metadata() {
97
63
  return {};
98
64
  }
99
- initializeProps(props) {
65
+ initializeProps(propsOrBuilder) {
100
66
  if (!this.propsIsEmpty())
101
67
  throw new errors_1.PropsInitializedError();
68
+ let props;
69
+ if (typeof propsOrBuilder === "function")
70
+ props = propsOrBuilder.call(this);
71
+ else
72
+ props = propsOrBuilder;
102
73
  if (!this.modelDescriptor().modelMutable) {
103
74
  this._props = props;
104
75
  Object.freeze(this._props);
@@ -115,5 +86,5 @@ class ModelBase {
115
86
  this.validate();
116
87
  }
117
88
  }
118
- exports.ModelBase = ModelBase;
119
- ModelBase.EMPTY_PROPS = {};
89
+ exports.DomainModel = DomainModel;
90
+ DomainModel.EMPTY_PROPS = {};
@@ -1,17 +1,21 @@
1
- import { AnyModel, ModelClass } from "./model";
1
+ import { AnyDomainModel, DomainModelClass } from "./model";
2
2
  import { ModelId, ModelName, ModelVersion } from "./meta";
3
- export declare class ModelVersionMap<T extends AnyModel = AnyModel> extends Map<ModelVersion, ModelClass<T>> {
3
+ export declare class ModelVersions<T extends AnyDomainModel = AnyDomainModel> extends Map<ModelVersion, DomainModelClass<T>> {
4
4
  readonly modelName: ModelName;
5
5
  constructor(modelName: ModelName);
6
6
  }
7
- export declare class ModelMap<T extends AnyModel = AnyModel> extends Map<ModelName, ModelVersionMap<T>> {
7
+ export declare class ModelStore<T extends AnyDomainModel = AnyDomainModel> extends Map<ModelName, ModelVersions<T>> {
8
8
  }
9
9
  export declare class ModelRegistry {
10
- private readonly modelMap;
11
- getModelVersionMap<T extends AnyModel = AnyModel>(modelName: ModelName): ModelVersionMap<T>;
12
- getModel<T extends AnyModel = AnyModel>(modelName: ModelName, modelVersion?: ModelVersion): ModelClass<T> | undefined;
13
- getModelByModelId<T extends AnyModel = AnyModel>(modelId: ModelId): ModelClass<T> | undefined;
14
- hasRegisteredModel(modelName: ModelName, modelVersion: ModelVersion): boolean;
15
- hasRegisteredModel(model: ModelClass): boolean;
16
- registerModel(modelClass: ModelClass): this;
10
+ private store;
11
+ getModelVersions<T extends AnyDomainModel = AnyDomainModel>(modelName: ModelName): ModelVersions<T>;
12
+ private resolveModelId;
13
+ getModel<T extends AnyDomainModel = AnyDomainModel>(modelName: ModelName, modelVersion?: ModelVersion): DomainModelClass<T> | undefined;
14
+ getModelByModelId<T extends AnyDomainModel = AnyDomainModel>(modelId: ModelId): DomainModelClass<T> | undefined;
15
+ hasRegisteredModel(p1: ModelName | DomainModelClass, p2?: ModelVersion): boolean;
16
+ hasRegisteredModelWithId(modelId: ModelId): boolean;
17
+ registerModel(modelClass: DomainModelClass): this;
18
+ deregisterModel(p1: ModelName | DomainModelClass, p2?: ModelVersion): void;
19
+ clearModelVersions(modelName: ModelName): void;
20
+ clearAll(): void;
17
21
  }
@@ -1,55 +1,70 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ModelRegistry = exports.ModelMap = exports.ModelVersionMap = void 0;
3
+ exports.ModelRegistry = exports.ModelStore = exports.ModelVersions = void 0;
4
4
  const meta_1 = require("./meta");
5
- class ModelVersionMap extends Map {
5
+ class ModelVersions extends Map {
6
6
  constructor(modelName) {
7
7
  super();
8
8
  this.modelName = modelName;
9
9
  }
10
10
  }
11
- exports.ModelVersionMap = ModelVersionMap;
12
- class ModelMap extends Map {
11
+ exports.ModelVersions = ModelVersions;
12
+ class ModelStore extends Map {
13
13
  }
14
- exports.ModelMap = ModelMap;
14
+ exports.ModelStore = ModelStore;
15
15
  class ModelRegistry {
16
16
  constructor() {
17
- this.modelMap = new ModelMap();
17
+ this.store = new ModelStore();
18
18
  }
19
- getModelVersionMap(modelName) {
20
- const modelVersionMap = () => this.modelMap.get(modelName);
21
- if (!modelVersionMap())
22
- this.modelMap.set(modelName, new ModelVersionMap(modelName));
23
- return modelVersionMap();
19
+ getModelVersions(modelName) {
20
+ const current = () => this.store.get(modelName);
21
+ if (!current())
22
+ this.store.set(modelName, new ModelVersions(modelName));
23
+ return current();
24
+ }
25
+ resolveModelId(p1, p2) {
26
+ if (typeof p1 === "string") {
27
+ return new meta_1.$ModelId(p1, p2);
28
+ }
29
+ return meta_1.$ModelId.fromValue(p1.modelDescriptor().modelId());
24
30
  }
25
31
  getModel(modelName, modelVersion = 0) {
26
- const modelVersionMap = this.getModelVersionMap(modelName);
27
- return modelVersionMap.get(modelVersion);
32
+ const versions = this.getModelVersions(modelName);
33
+ return versions.get(modelVersion);
28
34
  }
29
35
  getModelByModelId(modelId) {
30
36
  const { modelName, modelVersion } = meta_1.$ModelId.fromValue(modelId);
31
37
  return this.getModel(modelName, modelVersion);
32
38
  }
33
39
  hasRegisteredModel(p1, p2) {
34
- let modelName, modelVersion;
35
- if (typeof p1 === "string") {
36
- modelName = p1;
37
- modelVersion = p2;
38
- }
39
- else {
40
- modelName = p1.modelName();
41
- modelVersion = p1.modelVersion();
42
- }
40
+ const { modelName, modelVersion } = this.resolveModelId(p1, p2);
41
+ return Boolean(this.getModel(modelName, modelVersion));
42
+ }
43
+ hasRegisteredModelWithId(modelId) {
44
+ const { modelName, modelVersion } = meta_1.$ModelId.fromValue(modelId);
43
45
  return Boolean(this.getModel(modelName, modelVersion));
44
46
  }
45
47
  registerModel(modelClass) {
46
- const modelName = modelClass.modelName();
47
- const modelVersion = modelClass.modelVersion();
48
+ const modelName = modelClass.modelDescriptor().modelName();
49
+ const modelVersion = modelClass.modelDescriptor().modelVersion();
48
50
  if (this.hasRegisteredModel(modelName, modelVersion))
49
- throw new Error(`Model ${modelName} with version ${modelVersion} has been registered`);
50
- const modelVersionMap = this.getModelVersionMap(modelName);
51
- modelVersionMap.set(modelVersion, modelClass);
51
+ throw new Error(`Cannot register: Model ${modelName} with version ${modelVersion} is already registered.`);
52
+ const versions = this.getModelVersions(modelName);
53
+ versions.set(modelVersion, modelClass);
52
54
  return this;
53
55
  }
56
+ deregisterModel(p1, p2) {
57
+ const { modelName, modelVersion } = this.resolveModelId(p1, p2);
58
+ if (!this.hasRegisteredModel(modelName, modelVersion))
59
+ return;
60
+ const versions = this.getModelVersions(modelName);
61
+ versions.delete(modelVersion);
62
+ }
63
+ clearModelVersions(modelName) {
64
+ this.store.delete(modelName);
65
+ }
66
+ clearAll() {
67
+ this.store = new ModelStore();
68
+ }
54
69
  }
55
70
  exports.ModelRegistry = ModelRegistry;
@@ -0,0 +1 @@
1
+ export * from "./is-enum";
@@ -0,0 +1,17 @@
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("./is-enum"), exports);
@@ -0,0 +1,2 @@
1
+ import { EnumClass, EnumValue } from "../../../core";
2
+ export declare const IsEnum: (value?: EnumValue) => <T extends EnumClass<import("../../../core").Enum, any[]>>(target: T, key: string) => void;
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Enum = void 0;
4
- const base_1 = require("../base");
5
- const Enum = (value) => {
3
+ exports.IsEnum = void 0;
4
+ const base_1 = require("../../../base");
5
+ const IsEnum = (value) => {
6
6
  return (target, key) => {
7
7
  (0, base_1.Static)(() => new target(value !== null && value !== void 0 ? value : key))(target, key);
8
8
  };
9
9
  };
10
- exports.Enum = Enum;
10
+ exports.IsEnum = IsEnum;
@@ -0,0 +1,2 @@
1
+ import { AnyCommand, AnyESAggregate, CommandClass, CommandHandler } from "../..";
2
+ export declare const Handle: <T extends AnyCommand>(commandClass: CommandClass<T>) => <U extends CommandHandler<T>>(target: AnyESAggregate, propertyKey: string, descriptor: TypedPropertyDescriptor<U>) => void;