ddd-node 18.0.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 (147) 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 -17
  12. package/dist/core/aggregate/{event-sourced-aggregate.js → event-sourced-aggregate/event-sourced-aggregate.js} +26 -48
  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/core/enum/index.js +18 -0
  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 -5
  41. package/dist/core/index.js +3 -5
  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 +1 -1
  77. package/dist/decorators/enum.js +2 -2
  78. package/dist/decorators/index.d.ts +0 -2
  79. package/dist/decorators/index.js +0 -2
  80. package/dist/index.d.ts +1 -0
  81. package/dist/index.js +1 -0
  82. package/dist/meta/index.d.ts +0 -1
  83. package/dist/meta/index.js +0 -1
  84. package/dist/model/core/index.d.ts +2 -0
  85. package/dist/{core/model → model/core}/index.js +1 -1
  86. package/dist/model/core/model.builder.d.ts +11 -0
  87. package/dist/model/core/model.builder.js +18 -0
  88. package/dist/model/core/model.d.ts +41 -0
  89. package/dist/{core/model → model/core}/model.js +36 -57
  90. package/dist/{decorators/model → model/decorators}/index.d.ts +1 -1
  91. package/dist/{decorators/model → model/decorators}/index.js +1 -1
  92. package/dist/{decorators/model → model/decorators}/model.d.ts +2 -2
  93. package/dist/{decorators/model → model/decorators}/model.js +5 -5
  94. package/dist/model/decorators/mutable.d.ts +2 -0
  95. package/dist/model/decorators/mutable.js +10 -0
  96. package/dist/{decorators/model → model/decorators}/prop.d.ts +1 -1
  97. package/dist/{decorators/model → model/decorators}/prop.js +1 -1
  98. package/dist/model/decorators/static.d.ts +3 -0
  99. package/dist/{decorators/model → model/decorators}/static.js +1 -1
  100. package/dist/model/index.d.ts +5 -0
  101. package/dist/model/index.js +21 -0
  102. package/dist/{meta/model → model/meta}/index.d.ts +1 -0
  103. package/dist/{meta/model → model/meta}/index.js +1 -0
  104. package/dist/{meta/model → model/meta}/model-domain.d.ts +1 -1
  105. package/dist/{meta/model → model/meta}/model-id.d.ts +1 -1
  106. package/dist/model/meta/model-mutable.d.ts +2 -0
  107. package/dist/model/meta/model-mutable.js +14 -0
  108. package/dist/{meta/model → model/meta}/model-name.d.ts +1 -1
  109. package/dist/{meta/model → model/meta}/model-props-map.d.ts +4 -4
  110. package/dist/{meta/model → model/meta}/model-props-map.js +1 -1
  111. package/dist/{meta/model → model/meta}/model-props-validator.d.ts +1 -1
  112. package/dist/{meta/model → model/meta}/model-static-values.d.ts +1 -1
  113. package/dist/{meta/model → model/meta}/model-version.d.ts +1 -1
  114. package/dist/{core → model}/model-registry.d.ts +5 -5
  115. package/dist/{core → model}/model-registry.js +5 -5
  116. package/dist/package.json +1 -1
  117. package/package.json +2 -2
  118. package/dist/core/aggregate/base.d.ts +0 -12
  119. package/dist/core/entity.js +0 -20
  120. package/dist/core/enum.d.ts +0 -18
  121. package/dist/core/enum.js +0 -45
  122. package/dist/core/message/command.js +0 -25
  123. package/dist/core/message/event.js +0 -30
  124. package/dist/core/message/message.d.ts +0 -23
  125. package/dist/core/message/message.js +0 -33
  126. package/dist/core/model/index.d.ts +0 -2
  127. package/dist/core/model/model.d.ts +0 -45
  128. package/dist/core/value-object.js +0 -27
  129. package/dist/decorators/id.d.ts +0 -2
  130. package/dist/decorators/id.js +0 -10
  131. package/dist/decorators/model/static.d.ts +0 -3
  132. /package/dist/core/id/{common → services}/index.d.ts +0 -0
  133. /package/dist/core/id/{common → services}/index.js +0 -0
  134. /package/dist/core/id/{common → services}/snowflake.d.ts +0 -0
  135. /package/dist/core/id/{common → services}/snowflake.js +0 -0
  136. /package/dist/core/id/{common → services}/uuid4.d.ts +0 -0
  137. /package/dist/core/id/{common → services}/uuid4.js +0 -0
  138. /package/dist/{core/model → model/core}/errors.d.ts +0 -0
  139. /package/dist/{core/model → model/core}/errors.js +0 -0
  140. /package/dist/{core → model}/domain.d.ts +0 -0
  141. /package/dist/{core → model}/domain.js +0 -0
  142. /package/dist/{meta/model → model/meta}/model-domain.js +0 -0
  143. /package/dist/{meta/model → model/meta}/model-id.js +0 -0
  144. /package/dist/{meta/model → model/meta}/model-name.js +0 -0
  145. /package/dist/{meta/model → model/meta}/model-props-validator.js +0 -0
  146. /package/dist/{meta/model → model/meta}/model-static-values.js +0 -0
  147. /package/dist/{meta/model → model/meta}/model-version.js +0 -0
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModelWithIdBuilder = void 0;
4
+ const model_1 = require("../../model");
5
+ const id_1 = require("../id");
6
+ class ModelWithIdBuilder extends model_1.ModelBuilder {
7
+ getIdService() {
8
+ return this._idService ?? new id_1.Uuid4Service();
9
+ }
10
+ getId() {
11
+ return this._id ?? new id_1.Id(this.getIdService().generateValue());
12
+ }
13
+ withId(id) {
14
+ this._id = id;
15
+ return this;
16
+ }
17
+ withIdService(idService) {
18
+ this._idService = idService;
19
+ return this;
20
+ }
21
+ }
22
+ exports.ModelWithIdBuilder = ModelWithIdBuilder;
@@ -1,10 +1,8 @@
1
+ import { ModelBase, Props } from "../../model";
1
2
  import { Id } from "../id";
2
- import { ModelBase, Props } from "./model";
3
3
  export declare class ModelWithId<P extends Props> extends ModelBase<P> {
4
4
  protected readonly _id: Id;
5
5
  constructor(id: Id);
6
- static idService(): import("../id").IIdService;
7
- static id(id?: Id | string): Id;
8
6
  id(): Id;
9
7
  hasId(id: Id): boolean;
10
8
  }
@@ -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
  };
@@ -1,2 +1,2 @@
1
1
  import { EnumClass, EnumValue } from "../core";
2
- export declare const Enum: (value: EnumValue) => <T extends EnumClass<import("../core").EnumBase>>(target: T, key: string) => void;
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("./model/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,5 +1,3 @@
1
1
  export * from "./aggregate-es";
2
- export * from "./id";
3
- export * from "./model";
4
2
  export * from "./message";
5
3
  export * from "./enum";
@@ -15,7 +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);
21
19
  __exportStar(require("./enum"), exports);
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  /// <reference types="src/declarations" />
2
+ export * from "./model";
2
3
  export * from "./meta";
3
4
  export * from "./types";
4
5
  export * from "./utils";
package/dist/index.js CHANGED
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
16
16
  };
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
+ __exportStar(require("./model"), exports);
18
19
  __exportStar(require("./meta"), exports);
19
20
  __exportStar(require("./types"), exports);
20
21
  __exportStar(require("./utils"), exports);
@@ -1,4 +1,3 @@
1
- export * from "./model";
2
1
  export * from "./aggregate-es";
3
2
  export * from "./id.metadata";
4
3
  export * from "./event.metadata";
@@ -14,7 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./model"), exports);
18
17
  __exportStar(require("./aggregate-es"), exports);
19
18
  __exportStar(require("./id.metadata"), exports);
20
19
  __exportStar(require("./event.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
+ }
@@ -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
  }
@@ -1,4 +1,4 @@
1
1
  export * from "./prop";
2
2
  export * from "./model";
3
3
  export * from "./static";
4
- export * from "../enum";
4
+ export * from "./mutable";
@@ -17,4 +17,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./prop"), exports);
18
18
  __exportStar(require("./model"), exports);
19
19
  __exportStar(require("./static"), exports);
20
- __exportStar(require("../enum"), exports);
20
+ __exportStar(require("./mutable"), exports);
@@ -1,5 +1,5 @@
1
- import { AnyModel, ModelClass } from "../../core";
2
- import { PropsValidator } from "../../meta";
1
+ import { AnyModel, ModelClass } from "../core";
2
+ import { PropsValidator } from "../meta";
3
3
  export type ModelOptions<T extends AnyModel = AnyModel> = {
4
4
  name?: string;
5
5
  version?: number;
@@ -5,8 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Model = void 0;
7
7
  const lodash_1 = __importDefault(require("lodash"));
8
- const core_1 = require("../../core");
9
- const meta_1 = require("../../meta");
8
+ const domain_1 = require("../domain");
9
+ const meta_1 = require("../meta");
10
10
  function Model(p1, p2, p3) {
11
11
  const defaultModelOptions = {
12
12
  autoRegisterModel: true,
@@ -41,10 +41,10 @@ function Model(p1, p2, p3) {
41
41
  (0, meta_1.defineModelDomain)(target, modelOptions.domain);
42
42
  if (modelOptions?.autoRegisterModel) {
43
43
  const domainName = (0, meta_1.getModelDomain)(target);
44
- if (!core_1.domainManager.hasDomain(domainName)) {
45
- core_1.domainManager.addDomain(new core_1.Domain(domainName));
44
+ if (!domain_1.domainManager.hasDomain(domainName)) {
45
+ domain_1.domainManager.addDomain(new domain_1.Domain(domainName));
46
46
  }
47
- const domain = core_1.domainManager.getDomain(domainName);
47
+ const domain = domain_1.domainManager.getDomain(domainName);
48
48
  domain.modelRegistry.registerModel(target);
49
49
  }
50
50
  if (modelOptions?.propsValidator)
@@ -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;
@@ -1,2 +1,2 @@
1
- import { AnyModel, PropsOf } from "../../core";
1
+ import { AnyModel, PropsOf } from "../core";
2
2
  export declare const Prop: <T extends AnyModel>(propTargetKey?: keyof PropsOf<T> | undefined) => (target: T, key: PropertyKey) => void;
@@ -1,7 +1,7 @@
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
7
  (0, meta_1.defineProp)(target, key, propTargetKey ?? key);
@@ -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;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Static = void 0;
4
- const meta_1 = require("../../meta");
4
+ const meta_1 = require("../meta");
5
5
  const Static = (builder) => {
6
6
  return (target, key) => {
7
7
  (0, meta_1.setStaticValue)(target, key, builder);
@@ -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);
@@ -5,3 +5,4 @@ export * from "./model-static-values";
5
5
  export * from "./model-props-validator";
6
6
  export * from "./model-version";
7
7
  export * from "./model-domain";
8
+ export * from "./model-mutable";
@@ -21,3 +21,4 @@ __exportStar(require("./model-static-values"), exports);
21
21
  __exportStar(require("./model-props-validator"), exports);
22
22
  __exportStar(require("./model-version"), exports);
23
23
  __exportStar(require("./model-domain"), exports);
24
+ __exportStar(require("./model-mutable"), exports);
@@ -1,4 +1,4 @@
1
- import { AnyModel, ModelClass } from "../../core";
1
+ import { AnyModel, ModelClass } from "../core";
2
2
  export declare const ModelDomainMetaKey: unique symbol;
3
3
  export declare const DEFAULT_MODEL_DOMAIN = "default";
4
4
  export declare const defineModelDomain: <T extends AnyModel>(target: ModelClass<T>, domainName: string) => void;
@@ -1,4 +1,4 @@
1
- import { AnyModel, ModelClass } from "../../core";
1
+ import { AnyModel, ModelClass } from "../core";
2
2
  import { ModelName } from "./model-name";
3
3
  import { ModelVersion } from "./model-version";
4
4
  export type ModelId = string;
@@ -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;