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
@@ -3,50 +3,56 @@ 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.ModelBase = exports.ModelMetadata = void 0;
7
7
  const lodash_1 = __importDefault(require("lodash"));
8
- const meta_1 = require("../../meta");
8
+ const meta_1 = require("../meta");
9
9
  const errors_1 = require("./errors");
10
- class ModelBase {
11
- static isModel(model) {
12
- return model instanceof ModelBase;
10
+ class ModelMetadata {
11
+ constructor(modelClass) {
12
+ this.modelClass = modelClass;
13
13
  }
14
- static mutable() {
15
- return false;
14
+ get modelMutable() {
15
+ return (0, meta_1.getModelMutable)(this.modelClass) ?? false;
16
16
  }
17
- static modelName() {
18
- return (0, meta_1.getModelName)(this);
17
+ get modelName() {
18
+ return (0, meta_1.getModelName)(this.modelClass);
19
19
  }
20
- static modelVersion() {
21
- return (0, meta_1.getModelVersion)(this);
20
+ get modelVersion() {
21
+ return (0, meta_1.getModelVersion)(this.modelClass);
22
22
  }
23
- static modelId() {
24
- return (0, meta_1.getModelId)(this);
23
+ get modelId() {
24
+ return (0, meta_1.getModelId)(this.modelClass);
25
25
  }
26
- static hasModelId(modelId) {
27
- return this.modelId() === modelId;
26
+ get ownPropsValidator() {
27
+ return (0, meta_1.getOwnPropsValidator)(this.modelClass);
28
28
  }
29
- static ownPropsValidator() {
30
- return (0, meta_1.getOwnPropsValidator)(this);
29
+ get propsValidators() {
30
+ return (0, meta_1.getPropsValidators)(this.modelClass);
31
31
  }
32
- static propsValidators() {
33
- return (0, meta_1.getPropsValidators)(this);
32
+ get ownStaticValues() {
33
+ return (0, meta_1.getOwnStaticValues)(this.modelClass);
34
34
  }
35
- static ownStaticValues() {
36
- return (0, meta_1.getOwnStaticValues)(this);
35
+ get ownPropsMap() {
36
+ return (0, meta_1.getOwnPropsMap)(this.modelClass.prototype);
37
37
  }
38
- static ownPropsMap() {
39
- return (0, meta_1.getOwnPropsMap)(this.prototype);
38
+ get propsMap() {
39
+ return (0, meta_1.getPropsMap)(this.modelClass.prototype);
40
40
  }
41
- static propsMap() {
42
- return (0, meta_1.getPropsMap)(this.prototype);
41
+ }
42
+ exports.ModelMetadata = ModelMetadata;
43
+ class ModelBase {
44
+ static isModel(model) {
45
+ return model instanceof ModelBase;
46
+ }
47
+ static modelMetadata() {
48
+ return new ModelMetadata(this);
43
49
  }
44
50
  constructor() {
45
51
  this._props = ModelBase.EMPTY_PROPS;
46
52
  this.redefineModel();
47
53
  }
48
54
  redefineModel() {
49
- this.propsMap().forEach((propTargetKey, key) => {
55
+ this.modelMetadata().propsMap.forEach((propTargetKey, key) => {
50
56
  this.redefineProp(key, propTargetKey);
51
57
  });
52
58
  }
@@ -60,38 +66,11 @@ class ModelBase {
60
66
  },
61
67
  });
62
68
  }
63
- get _modelClass() {
64
- return this.constructor;
65
- }
66
- isMutable() {
67
- return this._modelClass.mutable();
68
- }
69
- modelName() {
70
- return this._modelClass.modelName();
71
- }
72
- modelVersion() {
73
- return this._modelClass.modelVersion();
74
- }
75
- modelId() {
76
- return this._modelClass.modelId();
77
- }
78
- hasModelId(modelId) {
79
- return this._modelClass.hasModelId(modelId);
80
- }
81
- ownPropsValidator() {
82
- return this._modelClass.ownPropsValidator();
83
- }
84
- propsValidators() {
85
- return this._modelClass.propsValidators();
86
- }
87
- ownPropsMap() {
88
- return this._modelClass.ownPropsMap();
89
- }
90
- propsMap() {
91
- return (0, meta_1.getPropsMap)(Reflect.getPrototypeOf(this));
69
+ modelMetadata() {
70
+ return this.constructor.modelMetadata();
92
71
  }
93
72
  validateProps(props) {
94
- const propsValidators = this.propsValidators();
73
+ const propsValidators = this.modelMetadata().propsValidators;
95
74
  propsValidators.forEach((propsValidator) => propsValidator(props));
96
75
  }
97
76
  validate() {
@@ -113,7 +92,7 @@ class ModelBase {
113
92
  initializeProps(props) {
114
93
  if (!this.propsIsEmpty())
115
94
  throw new errors_1.PropsInitializedError();
116
- if (!this.isMutable()) {
95
+ if (!this.modelMetadata().modelMutable) {
117
96
  this._props = props;
118
97
  Object.freeze(this._props);
119
98
  }
@@ -0,0 +1,4 @@
1
+ export * from "./prop";
2
+ export * from "./model";
3
+ export * from "./static";
4
+ export * from "./mutable";
@@ -16,7 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./prop"), exports);
18
18
  __exportStar(require("./model"), exports);
19
- __exportStar(require("./version"), exports);
20
- __exportStar(require("./validator"), exports);
21
19
  __exportStar(require("./static"), exports);
22
- __exportStar(require("./enum"), exports);
20
+ __exportStar(require("./mutable"), exports);
@@ -0,0 +1,12 @@
1
+ import { AnyModel, ModelClass } from "../core";
2
+ import { PropsValidator } from "../meta";
3
+ export type ModelOptions<T extends AnyModel = AnyModel> = {
4
+ name?: string;
5
+ version?: number;
6
+ domain?: string;
7
+ propsValidator?: PropsValidator<T>;
8
+ autoRegisterModel?: boolean;
9
+ };
10
+ export declare function Model<T extends ModelClass, I extends InstanceType<T> = InstanceType<T>>(options?: ModelOptions<I>): any;
11
+ export declare function Model<T extends ModelClass, I extends InstanceType<T> = InstanceType<T>>(name: string, options?: ModelOptions<I>): any;
12
+ export declare function Model<T extends ModelClass, I extends InstanceType<T> = InstanceType<T>>(name: string, version: number, options?: ModelOptions<I>): any;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Model = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const domain_1 = require("../domain");
9
+ const meta_1 = require("../meta");
10
+ function Model(p1, p2, p3) {
11
+ const defaultModelOptions = {
12
+ autoRegisterModel: true,
13
+ };
14
+ let modelOptions = {};
15
+ if (p1 && !p2 && !p3) {
16
+ if (typeof p1 === "string")
17
+ modelOptions = { name: p1 };
18
+ else
19
+ modelOptions = p1;
20
+ }
21
+ else if (p1 && p2 && !p3) {
22
+ if (typeof p2 === "number")
23
+ modelOptions = { name: p1, version: p2 };
24
+ else
25
+ modelOptions = { name: p1, ...p2 };
26
+ }
27
+ else if (p1 && p2 && p3) {
28
+ modelOptions = {
29
+ name: p1,
30
+ version: p2,
31
+ ...p3,
32
+ };
33
+ }
34
+ modelOptions = lodash_1.default.merge(defaultModelOptions, modelOptions);
35
+ return (target) => {
36
+ if (modelOptions?.name)
37
+ (0, meta_1.defineModelName)(target, modelOptions.name);
38
+ if (modelOptions?.version)
39
+ (0, meta_1.defineModelVersion)(target, modelOptions.version);
40
+ if (modelOptions?.domain)
41
+ (0, meta_1.defineModelDomain)(target, modelOptions.domain);
42
+ if (modelOptions?.autoRegisterModel) {
43
+ const domainName = (0, meta_1.getModelDomain)(target);
44
+ if (!domain_1.domainManager.hasDomain(domainName)) {
45
+ domain_1.domainManager.addDomain(new domain_1.Domain(domainName));
46
+ }
47
+ const domain = domain_1.domainManager.getDomain(domainName);
48
+ domain.modelRegistry.registerModel(target);
49
+ }
50
+ if (modelOptions?.propsValidator)
51
+ (0, meta_1.definePropsValidator)(target, modelOptions.propsValidator);
52
+ };
53
+ }
54
+ exports.Model = Model;
@@ -0,0 +1,2 @@
1
+ import { ModelClass } from "../core";
2
+ export declare const Mutable: (mutable?: boolean) => (target: ModelClass) => void;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Mutable = void 0;
4
+ const meta_1 = require("../meta");
5
+ const Mutable = (mutable = true) => {
6
+ return (target) => {
7
+ (0, meta_1.defineModelMutable)(target, mutable);
8
+ };
9
+ };
10
+ exports.Mutable = Mutable;
@@ -0,0 +1,2 @@
1
+ import { AnyModel, PropsOf } from "../core";
2
+ export declare const Prop: <T extends AnyModel>(propTargetKey?: keyof PropsOf<T> | undefined) => (target: T, key: PropertyKey) => void;
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Prop = void 0;
4
- const meta_1 = require("../../meta");
4
+ const meta_1 = require("../meta");
5
5
  const Prop = (propTargetKey) => {
6
6
  return (target, key) => {
7
- (0, meta_1.setProp)(target, key, propTargetKey ?? key);
7
+ (0, meta_1.defineProp)(target, key, propTargetKey ?? key);
8
8
  };
9
9
  };
10
10
  exports.Prop = Prop;
@@ -0,0 +1,3 @@
1
+ import { ModelClass } from "../core";
2
+ import { StaticValueBuilder } from "../meta";
3
+ export declare const Static: <T extends ModelClass<import("../core").AnyModel>, I extends InstanceType<T> = InstanceType<T>>(builder: StaticValueBuilder<I>) => (target: T, key: PropertyKey) => void;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Static = void 0;
4
+ const meta_1 = require("../meta");
5
+ const Static = (builder) => {
6
+ return (target, key) => {
7
+ (0, meta_1.setStaticValue)(target, key, builder);
8
+ (0, meta_1.defineStaticValueProperty)(target, key);
9
+ };
10
+ };
11
+ exports.Static = Static;
@@ -0,0 +1,20 @@
1
+ import { ModelRegistry } from "./model-registry";
2
+ export type DomainName = string;
3
+ export declare class Domain {
4
+ readonly name: DomainName;
5
+ readonly modelRegistry: ModelRegistry;
6
+ constructor(name: DomainName);
7
+ }
8
+ export declare class DomainMap extends Map<DomainName, Domain> {
9
+ }
10
+ export declare class DomainManager {
11
+ static _instance: DomainManager;
12
+ static instance(): DomainManager;
13
+ private constructor();
14
+ private _domains;
15
+ hasDomain(domainName: DomainName): boolean;
16
+ getDomain(domainName: DomainName): Domain | undefined;
17
+ addDomain(domain: Domain): void;
18
+ deleteDomain(domainName: DomainName): void;
19
+ }
20
+ export declare const domainManager: DomainManager;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.domainManager = exports.DomainManager = exports.DomainMap = exports.Domain = void 0;
4
+ const model_registry_1 = require("./model-registry");
5
+ class Domain {
6
+ constructor(name) {
7
+ this.name = name;
8
+ this.modelRegistry = new model_registry_1.ModelRegistry();
9
+ }
10
+ }
11
+ exports.Domain = Domain;
12
+ class DomainMap extends Map {
13
+ }
14
+ exports.DomainMap = DomainMap;
15
+ class DomainManager {
16
+ static instance() {
17
+ if (!this._instance)
18
+ this._instance = new DomainManager();
19
+ return this._instance;
20
+ }
21
+ constructor() {
22
+ this._domains = new DomainMap();
23
+ }
24
+ hasDomain(domainName) {
25
+ return this._domains.has(domainName);
26
+ }
27
+ getDomain(domainName) {
28
+ return this._domains.get(domainName);
29
+ }
30
+ addDomain(domain) {
31
+ if (this.hasDomain(domain.name))
32
+ throw new Error(`Domain ${domain.name} has already exist`);
33
+ this._domains.set(domain.name, domain);
34
+ }
35
+ deleteDomain(domainName) {
36
+ this._domains.delete(domainName);
37
+ }
38
+ }
39
+ exports.DomainManager = DomainManager;
40
+ exports.domainManager = DomainManager.instance();
@@ -0,0 +1,5 @@
1
+ export * from "./meta";
2
+ export * from "./core";
3
+ export * from "./decorators";
4
+ export * from "./domain";
5
+ export * from "./model-registry";
@@ -0,0 +1,21 @@
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("./meta"), exports);
18
+ __exportStar(require("./core"), exports);
19
+ __exportStar(require("./decorators"), exports);
20
+ __exportStar(require("./domain"), exports);
21
+ __exportStar(require("./model-registry"), exports);
@@ -0,0 +1,8 @@
1
+ export * from "./model-id";
2
+ export * from "./model-name";
3
+ export * from "./model-props-map";
4
+ export * from "./model-static-values";
5
+ export * from "./model-props-validator";
6
+ export * from "./model-version";
7
+ export * from "./model-domain";
8
+ export * from "./model-mutable";
@@ -0,0 +1,24 @@
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("./model-id"), exports);
18
+ __exportStar(require("./model-name"), exports);
19
+ __exportStar(require("./model-props-map"), exports);
20
+ __exportStar(require("./model-static-values"), exports);
21
+ __exportStar(require("./model-props-validator"), exports);
22
+ __exportStar(require("./model-version"), exports);
23
+ __exportStar(require("./model-domain"), exports);
24
+ __exportStar(require("./model-mutable"), exports);
@@ -0,0 +1,5 @@
1
+ import { AnyModel, ModelClass } from "../core";
2
+ export declare const ModelDomainMetaKey: unique symbol;
3
+ export declare const DEFAULT_MODEL_DOMAIN = "default";
4
+ export declare const defineModelDomain: <T extends AnyModel>(target: ModelClass<T>, domainName: string) => void;
5
+ export declare const getModelDomain: <T extends AnyModel>(target: ModelClass<T>) => string;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getModelDomain = exports.defineModelDomain = exports.DEFAULT_MODEL_DOMAIN = exports.ModelDomainMetaKey = void 0;
4
+ exports.ModelDomainMetaKey = Symbol.for("MODEL_DOMAIN");
5
+ exports.DEFAULT_MODEL_DOMAIN = "default";
6
+ const defineModelDomain = (target, domainName) => {
7
+ Reflect.defineMetadata(exports.ModelDomainMetaKey, domainName, target);
8
+ };
9
+ exports.defineModelDomain = defineModelDomain;
10
+ const getModelDomain = (target) => {
11
+ if (!Reflect.hasOwnMetadata(exports.ModelDomainMetaKey, target))
12
+ (0, exports.defineModelDomain)(target, exports.DEFAULT_MODEL_DOMAIN);
13
+ return Reflect.getOwnMetadata(exports.ModelDomainMetaKey, target);
14
+ };
15
+ exports.getModelDomain = getModelDomain;
@@ -0,0 +1,16 @@
1
+ import { AnyModel, ModelClass } from "../core";
2
+ import { ModelName } from "./model-name";
3
+ import { ModelVersion } from "./model-version";
4
+ export type ModelId = string;
5
+ export type MIdFormat = `${string}${typeof MId.Divider}${number}`;
6
+ export declare class MId extends String {
7
+ readonly modelName: ModelName;
8
+ readonly modelVersion: ModelVersion;
9
+ static Divider: "|";
10
+ static Format: RegExp;
11
+ static fromValue(value: ModelId): MId;
12
+ static makeValue(modelName: ModelName, modelVersion: ModelVersion): ModelId;
13
+ constructor(modelName: ModelName, modelVersion: ModelVersion);
14
+ }
15
+ export declare const setModelId: <T extends AnyModel>(target: ModelClass<T>, modelId: MId) => void;
16
+ export declare const getModelId: <T extends AnyModel>(target: ModelClass<T>) => ModelId;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getModelId = exports.setModelId = exports.MId = void 0;
4
+ const model_name_1 = require("./model-name");
5
+ const model_version_1 = require("./model-version");
6
+ class MId extends String {
7
+ static fromValue(value) {
8
+ if (!this.Format.test(value))
9
+ throw new Error(`Cannot parse MId from value ${value}`);
10
+ const [modelName, modelVersion] = value.split(this.Divider);
11
+ return new MId(modelName, Number(modelVersion));
12
+ }
13
+ static makeValue(modelName, modelVersion) {
14
+ const modelId = `${modelName}${this.Divider}${modelVersion}`;
15
+ return modelId;
16
+ }
17
+ constructor(modelName, modelVersion) {
18
+ super(MId.makeValue(modelName, modelVersion));
19
+ this.modelName = modelName;
20
+ this.modelVersion = modelVersion;
21
+ }
22
+ }
23
+ exports.MId = MId;
24
+ MId.Divider = "|";
25
+ MId.Format = new RegExp(/^.+\|[0-9]+$/);
26
+ const ModelIdMetaKey = Symbol.for("MODEL_ID");
27
+ const setModelId = (target, modelId) => {
28
+ Reflect.defineMetadata(ModelIdMetaKey, modelId, target);
29
+ };
30
+ exports.setModelId = setModelId;
31
+ const getModelId = (target) => {
32
+ if (!Reflect.hasOwnMetadata(ModelIdMetaKey, target)) {
33
+ const modelName = (0, model_name_1.getModelName)(target);
34
+ const modelVersion = (0, model_version_1.getModelVersion)(target);
35
+ (0, exports.setModelId)(target, new MId(modelName, modelVersion));
36
+ }
37
+ return Reflect.getOwnMetadata(ModelIdMetaKey, target).valueOf();
38
+ };
39
+ exports.getModelId = getModelId;
@@ -0,0 +1,2 @@
1
+ export declare const defineModelMutable: (target: object, mutable: boolean) => void;
2
+ export declare const getModelMutable: (target: object) => boolean | undefined;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getModelMutable = exports.defineModelMutable = void 0;
4
+ const ModelMutableMetaKey = Symbol.for("MODEL_MUTABLE");
5
+ const defineModelMutable = (target, mutable) => {
6
+ if (Reflect.hasMetadata(ModelMutableMetaKey, target))
7
+ return;
8
+ Reflect.defineMetadata(ModelMutableMetaKey, mutable, target);
9
+ };
10
+ exports.defineModelMutable = defineModelMutable;
11
+ const getModelMutable = (target) => {
12
+ return Reflect.getMetadata(ModelMutableMetaKey, target);
13
+ };
14
+ exports.getModelMutable = getModelMutable;
@@ -0,0 +1,8 @@
1
+ import { AnyModel, ModelClass } from "../core";
2
+ export type ModelName = string;
3
+ export declare class MName extends String {
4
+ static validate(modelName: ModelName): void;
5
+ constructor(modelName: ModelName);
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;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getModelName = exports.defineModelName = exports.MName = void 0;
4
+ class MName extends String {
5
+ static validate(modelName) {
6
+ if (modelName.trim().length === 0)
7
+ throw new Error("Model name cannot be an empty string");
8
+ }
9
+ constructor(modelName) {
10
+ MName.validate(modelName);
11
+ super(modelName);
12
+ }
13
+ }
14
+ exports.MName = MName;
15
+ const ModelNameMetaKey = Symbol.for("MODEL_NAME");
16
+ const defineModelName = (target, modelName) => {
17
+ Reflect.defineMetadata(ModelNameMetaKey, new MName(modelName), target);
18
+ };
19
+ exports.defineModelName = defineModelName;
20
+ const getModelName = (target) => {
21
+ if (!Reflect.hasOwnMetadata(ModelNameMetaKey, target))
22
+ (0, exports.defineModelName)(target, target.name);
23
+ return Reflect.getOwnMetadata(ModelNameMetaKey, target).valueOf();
24
+ };
25
+ exports.getModelName = getModelName;
@@ -0,0 +1,6 @@
1
+ import { AnyModel, PropsOf } from "../core";
2
+ export declare class PropsMap<T extends AnyModel = AnyModel> extends Map<PropertyKey, keyof PropsOf<T>> {
3
+ }
4
+ export declare const getOwnPropsMap: <T extends AnyModel = AnyModel>(target: object) => PropsMap<T>;
5
+ export declare const defineProp: <T extends AnyModel = AnyModel>(target: object, key: PropertyKey, propTargetKey?: keyof PropsOf<T> | undefined) => void;
6
+ export declare const getPropsMap: <T extends AnyModel = AnyModel>(target: object) => PropsMap<T>;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPropsMap = exports.defineProp = exports.getOwnPropsMap = exports.PropsMap = void 0;
4
+ const core_1 = require("../core");
5
+ const OwnPropsMapMetaKey = Symbol.for("OWN_PROPS_MAP");
6
+ class PropsMap extends Map {
7
+ }
8
+ exports.PropsMap = PropsMap;
9
+ // target is prototype
10
+ const getOwnPropsMap = (target) => {
11
+ if (!Reflect.hasOwnMetadata(OwnPropsMapMetaKey, target))
12
+ Reflect.defineMetadata(OwnPropsMapMetaKey, new PropsMap(), target);
13
+ return Reflect.getOwnMetadata(OwnPropsMapMetaKey, target);
14
+ };
15
+ exports.getOwnPropsMap = getOwnPropsMap;
16
+ const defineProp = (target, key, propTargetKey) => {
17
+ const ownPropsMap = (0, exports.getOwnPropsMap)(target);
18
+ if (propTargetKey)
19
+ ownPropsMap.set(key, propTargetKey);
20
+ };
21
+ exports.defineProp = defineProp;
22
+ const PropsMapMetaKey = Symbol.for("PROPS_MAP");
23
+ const getPropsMap = (target) => {
24
+ if (!Reflect.hasOwnMetadata(PropsMapMetaKey, target)) {
25
+ const buildPropsMap = (target) => {
26
+ let _target = target;
27
+ const result = new PropsMap();
28
+ const ownPropsMapList = [];
29
+ do {
30
+ if (core_1.ModelBase.isModel(_target)) {
31
+ const ownPropsMap = (0, exports.getOwnPropsMap)(_target);
32
+ ownPropsMapList.unshift(ownPropsMap);
33
+ }
34
+ _target = Reflect.getPrototypeOf(_target);
35
+ } while (_target !== null);
36
+ ownPropsMapList.forEach((ownPropsMap) => {
37
+ ownPropsMap.forEach((targetPropKey, key) => result.set(key, targetPropKey));
38
+ });
39
+ return result;
40
+ };
41
+ Reflect.defineMetadata(PropsMapMetaKey, buildPropsMap(target), target);
42
+ }
43
+ return Reflect.getOwnMetadata(PropsMapMetaKey, target);
44
+ };
45
+ exports.getPropsMap = getPropsMap;
@@ -0,0 +1,6 @@
1
+ import { AnyModel, PropsOf } from "../core";
2
+ export type PropsValidator<T extends AnyModel = AnyModel> = (props: PropsOf<T>) => void;
3
+ export declare const definePropsValidator: <T extends AnyModel>(target: object, validator: PropsValidator<T>) => void;
4
+ export declare const getOwnPropsValidator: <T extends AnyModel>(target: object) => PropsValidator<T> | undefined;
5
+ export declare const PropsValidatorsMetaKey: unique symbol;
6
+ export declare const getPropsValidators: (target: object) => PropsValidator[];
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getPropsValidators = exports.PropsValidatorsMetaKey = exports.getOwnPropsValidator = exports.definePropsValidator = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const OwnPropsValidatorMetaKey = Symbol.for("OWN_PROPS_VALIDATOR");
9
+ const definePropsValidator = (target, validator) => {
10
+ Reflect.defineMetadata(OwnPropsValidatorMetaKey, validator, target);
11
+ };
12
+ exports.definePropsValidator = definePropsValidator;
13
+ const getOwnPropsValidator = (target) => {
14
+ return Reflect.getOwnMetadata(OwnPropsValidatorMetaKey, target);
15
+ };
16
+ exports.getOwnPropsValidator = getOwnPropsValidator;
17
+ exports.PropsValidatorsMetaKey = Symbol.for("PROPS_VALIDATORS");
18
+ const getPropsValidators = (target) => {
19
+ if (!Reflect.hasOwnMetadata(exports.PropsValidatorsMetaKey, target)) {
20
+ let result = [];
21
+ let _target = target;
22
+ do {
23
+ const ownValidator = (0, exports.getOwnPropsValidator)(_target);
24
+ if (ownValidator)
25
+ result.push(ownValidator);
26
+ _target = Reflect.getPrototypeOf(_target);
27
+ } while (_target !== null);
28
+ result = lodash_1.default.uniq(result);
29
+ Reflect.defineMetadata(exports.PropsValidatorsMetaKey, result, target);
30
+ }
31
+ return Reflect.getOwnMetadata(exports.PropsValidatorsMetaKey, target);
32
+ };
33
+ exports.getPropsValidators = getPropsValidators;
@@ -0,0 +1,13 @@
1
+ import { AnyModel, ModelClass } from "../core";
2
+ export type StaticValueBuilder<T extends AnyModel = AnyModel> = () => T;
3
+ export declare class StaticValue<T extends AnyModel = AnyModel> {
4
+ private _value;
5
+ constructor(value: T | StaticValueBuilder<T>);
6
+ get value(): T;
7
+ }
8
+ export declare class StaticValuesMap<T extends AnyModel> extends Map<PropertyKey, StaticValue<T>> {
9
+ }
10
+ export declare const getOwnStaticValues: <T extends AnyModel>(target: object) => StaticValuesMap<T>;
11
+ export declare const setStaticValue: <T extends AnyModel>(target: object, key: PropertyKey, value: T | StaticValueBuilder<T>) => void;
12
+ export declare const getStaticValue: (target: object, key: PropertyKey) => AnyModel | undefined;
13
+ export declare const defineStaticValueProperty: (target: ModelClass, key: PropertyKey) => void;