ddd-node 17.3.0 → 18.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 (71) hide show
  1. package/dist/core/aggregate/event-sourced-aggregate.d.ts +8 -4
  2. package/dist/core/aggregate/event-sourced-aggregate.js +12 -0
  3. package/dist/core/domain.d.ts +15 -12
  4. package/dist/core/domain.js +29 -36
  5. package/dist/core/index.d.ts +1 -0
  6. package/dist/core/index.js +1 -0
  7. package/dist/core/message/command.js +1 -1
  8. package/dist/core/message/event.d.ts +2 -2
  9. package/dist/core/message/event.js +2 -2
  10. package/dist/core/model/model.d.ts +7 -9
  11. package/dist/core/model-registry.d.ts +17 -0
  12. package/dist/core/model-registry.js +55 -0
  13. package/dist/decorators/enum.d.ts +2 -0
  14. package/dist/decorators/{model/enum.js → enum.js} +1 -1
  15. package/dist/decorators/index.d.ts +1 -0
  16. package/dist/decorators/index.js +1 -0
  17. package/dist/decorators/message/command.js +1 -1
  18. package/dist/decorators/message/event.js +1 -1
  19. package/dist/decorators/model/index.d.ts +1 -3
  20. package/dist/decorators/model/index.js +1 -3
  21. package/dist/decorators/model/model.d.ts +12 -2
  22. package/dist/decorators/model/model.js +47 -3
  23. package/dist/decorators/model/prop.d.ts +2 -2
  24. package/dist/decorators/model/prop.js +1 -1
  25. package/dist/decorators/model/static.d.ts +1 -1
  26. package/dist/decorators/model/static.js +1 -10
  27. package/dist/index.d.ts +1 -0
  28. package/dist/index.js +1 -0
  29. package/dist/meta/aggregate-es/command-handler-map.d.ts +8 -0
  30. package/dist/meta/aggregate-es/command-handler-map.js +43 -0
  31. package/dist/meta/aggregate-es/event-applier-map.d.ts +9 -0
  32. package/dist/meta/aggregate-es/event-applier-map.js +43 -0
  33. package/dist/meta/aggregate-es/index.d.ts +2 -0
  34. package/dist/meta/{helpers → aggregate-es}/index.js +2 -1
  35. package/dist/meta/command.metadata.d.ts +6 -2
  36. package/dist/meta/command.metadata.js +19 -5
  37. package/dist/meta/event.metadata.d.ts +6 -2
  38. package/dist/meta/event.metadata.js +19 -5
  39. package/dist/meta/id.metadata.js +2 -3
  40. package/dist/meta/index.d.ts +2 -3
  41. package/dist/meta/index.js +2 -3
  42. package/dist/meta/model/index.d.ts +7 -0
  43. package/dist/meta/model/index.js +23 -0
  44. package/dist/meta/model/model-domain.d.ts +5 -0
  45. package/dist/meta/model/model-domain.js +15 -0
  46. package/dist/meta/model/model-id.d.ts +16 -0
  47. package/dist/meta/model/model-id.js +39 -0
  48. package/dist/meta/model/model-name.d.ts +8 -0
  49. package/dist/meta/model/model-name.js +25 -0
  50. package/dist/meta/model/model-props-map.d.ts +6 -0
  51. package/dist/meta/model/model-props-map.js +45 -0
  52. package/dist/meta/model/model-props-validator.d.ts +6 -0
  53. package/dist/meta/model/model-props-validator.js +33 -0
  54. package/dist/meta/model/model-static-values.d.ts +13 -0
  55. package/dist/meta/model/model-static-values.js +54 -0
  56. package/dist/meta/model/model-version.d.ts +8 -0
  57. package/dist/meta/model/model-version.js +25 -0
  58. package/dist/package.json +1 -1
  59. package/package.json +1 -1
  60. package/dist/decorators/model/enum.d.ts +0 -2
  61. package/dist/decorators/model/validator.d.ts +0 -3
  62. package/dist/decorators/model/validator.js +0 -11
  63. package/dist/decorators/model/version.d.ts +0 -2
  64. package/dist/decorators/model/version.js +0 -10
  65. package/dist/meta/aggregate.metadata.d.ts +0 -8
  66. package/dist/meta/aggregate.metadata.js +0 -34
  67. package/dist/meta/helpers/index.d.ts +0 -1
  68. package/dist/meta/helpers/static-value.d.ts +0 -7
  69. package/dist/meta/helpers/static-value.js +0 -15
  70. package/dist/meta/model.metadata.d.ts +0 -24
  71. package/dist/meta/model.metadata.js +0 -145
@@ -18,13 +18,16 @@ export declare class EventSourcedAggregateBase<P extends Props> extends Aggregat
18
18
  static newStream<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClassWithTypedConstructor<T>, id?: Id): T;
19
19
  static fromStream<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClassWithTypedConstructor<T>, id: Id, pastEvents?: AnyEvent[]): T;
20
20
  static fromSnapshot<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClassWithTypedConstructor<T>, snapshot: Snapshot<T>, pastEventsAfterSnapshot?: AnyEvent[]): T;
21
- static eventApplierMap<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClass<T>): Map<string, EventApplier>;
22
- static commandHandlerMap<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClass<T>): Map<string, CommandHandler>;
21
+ static ownEventApplierMap(): import("../../meta").EventApplierMap;
22
+ static eventApplierMap<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClass<T>): import("../../meta").EventApplierMap;
23
+ static ownCommandHandlerMap(): import("../../meta").CommandHandlerMap;
24
+ static commandHandlerMap<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClass<T>): import("../../meta").CommandHandlerMap;
23
25
  version(): number;
24
26
  pastEvents(): AnyEvent[];
25
27
  events(): AnyEvent[];
26
28
  handledCommands(): AnyCommand[];
27
- eventApplierMap(): Map<string, EventApplier>;
29
+ ownEventApplierMap(): import("../../meta").EventApplierMap;
30
+ eventApplierMap(): import("../../meta").EventApplierMap;
28
31
  hasNewEvent(): boolean;
29
32
  getApplierForEvent<E extends AnyEvent>(event: E): EventApplier<E>;
30
33
  private validateEventBeforeApply;
@@ -34,7 +37,8 @@ export declare class EventSourcedAggregateBase<P extends Props> extends Aggregat
34
37
  applyEvent<E extends AnyEvent>(event: E): void;
35
38
  applyEvents(events: AnyEvent[]): void;
36
39
  applyNewEvent<E extends AnyEvent>(eventClass: EventClassWithTypedConstructor<E>, props: PropsOf<E>): void;
37
- commandHandlerMap(): Map<string, CommandHandler>;
40
+ ownCommandHandlerMap(): import("../../meta").CommandHandlerMap;
41
+ commandHandlerMap(): import("../../meta").CommandHandlerMap;
38
42
  getHandlerForCommand<C extends AnyCommand>(command: C): CommandHandler<C, AnyEvent | AnyEvent[]>;
39
43
  handleCommand<C extends AnyCommand>(command: C): AnyEvent[];
40
44
  snapMetadata(): SnapshotMetadata;
@@ -28,9 +28,15 @@ class EventSourcedAggregateBase extends base_1.AggregateBase {
28
28
  instance.applyPastEvents(pastEventsAfterSnapshot);
29
29
  return instance;
30
30
  }
31
+ static ownEventApplierMap() {
32
+ return (0, meta_1.getOwnEventApplierMap)(this.prototype);
33
+ }
31
34
  static eventApplierMap() {
32
35
  return (0, meta_1.getEventApplierMap)(this.prototype);
33
36
  }
37
+ static ownCommandHandlerMap() {
38
+ return (0, meta_1.getOwnCommandHandlerMap)(this.prototype);
39
+ }
34
40
  static commandHandlerMap() {
35
41
  return (0, meta_1.getCommandHandlerMap)(this.prototype);
36
42
  }
@@ -46,6 +52,9 @@ class EventSourcedAggregateBase extends base_1.AggregateBase {
46
52
  handledCommands() {
47
53
  return Array.from(this._handledCommands);
48
54
  }
55
+ ownEventApplierMap() {
56
+ return this.constructor.ownEventApplierMap();
57
+ }
49
58
  eventApplierMap() {
50
59
  return this.constructor.eventApplierMap();
51
60
  }
@@ -96,6 +105,9 @@ class EventSourcedAggregateBase extends base_1.AggregateBase {
96
105
  applyNewEvent(eventClass, props) {
97
106
  this.applyEvent(this.newEvent(eventClass, props));
98
107
  }
108
+ ownCommandHandlerMap() {
109
+ return this.constructor.ownCommandHandlerMap();
110
+ }
99
111
  commandHandlerMap() {
100
112
  return this.constructor.commandHandlerMap();
101
113
  }
@@ -1,17 +1,20 @@
1
- import { ModelName, ModelVersion } from "../meta";
2
- import { AnyModel, ModelClass } from "./model";
3
- export declare class ModelVersionRegistry<T extends AnyModel = AnyModel> extends Map<ModelVersion, ModelClass<T>> {
4
- }
5
- export declare class ModelRegistry<T extends AnyModel = AnyModel> extends Map<ModelName, ModelVersionRegistry<T>> {
6
- }
1
+ import { ModelRegistry } from "./model-registry";
7
2
  export type DomainName = string;
8
3
  export declare class Domain {
9
4
  readonly name: DomainName;
10
- private readonly modelRegistry;
5
+ readonly modelRegistry: ModelRegistry;
11
6
  constructor(name: DomainName);
12
- getModelVersionRegistry(modelName: ModelName): ModelVersionRegistry<AnyModel>;
13
- getModel(modelName: ModelName, modelVersion?: ModelVersion): ModelClass<AnyModel> | undefined;
14
- hasRegisteredModel(modelName: ModelName, modelVersion: ModelVersion): boolean;
15
- hasRegisteredModel(model: ModelClass): boolean;
16
- registerModel(modelClass: ModelClass): this;
17
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;
@@ -1,47 +1,40 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Domain = exports.ModelRegistry = exports.ModelVersionRegistry = void 0;
4
- class ModelVersionRegistry extends Map {
5
- }
6
- exports.ModelVersionRegistry = ModelVersionRegistry;
7
- class ModelRegistry extends Map {
8
- }
9
- exports.ModelRegistry = ModelRegistry;
3
+ exports.domainManager = exports.DomainManager = exports.DomainMap = exports.Domain = void 0;
4
+ const model_registry_1 = require("./model-registry");
10
5
  class Domain {
11
6
  constructor(name) {
12
- this.modelRegistry = new ModelRegistry();
13
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;
14
20
  }
15
- getModelVersionRegistry(modelName) {
16
- const modelVersionRegistry = () => this.modelRegistry.get(modelName);
17
- if (!modelVersionRegistry())
18
- this.modelRegistry.set(modelName, new ModelVersionRegistry());
19
- return modelVersionRegistry();
21
+ constructor() {
22
+ this._domains = new DomainMap();
20
23
  }
21
- getModel(modelName, modelVersion = 0) {
22
- const modelVersionRegistry = this.getModelVersionRegistry(modelName);
23
- return modelVersionRegistry.get(modelVersion);
24
+ hasDomain(domainName) {
25
+ return this._domains.has(domainName);
24
26
  }
25
- hasRegisteredModel(p1, p2) {
26
- let modelName, modelVersion;
27
- if (typeof p1 === "string") {
28
- modelName = p1;
29
- modelVersion = p2;
30
- }
31
- else {
32
- modelName = p1.modelName();
33
- modelVersion = p1.modelVersion();
34
- }
35
- return Boolean(this.getModel(modelName, modelVersion));
27
+ getDomain(domainName) {
28
+ return this._domains.get(domainName);
36
29
  }
37
- registerModel(modelClass) {
38
- const modelName = modelClass.modelName();
39
- const modelVersion = modelClass.modelVersion();
40
- if (this.hasRegisteredModel(modelName, modelVersion))
41
- throw new Error(`Model ${modelName} with version ${modelVersion} has been registered`);
42
- const modelVersionRegistry = this.getModelVersionRegistry(modelName);
43
- modelVersionRegistry.set(modelVersion, modelClass);
44
- return this;
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);
45
37
  }
46
38
  }
47
- exports.Domain = Domain;
39
+ exports.DomainManager = DomainManager;
40
+ exports.domainManager = DomainManager.instance();
@@ -8,3 +8,4 @@ export * from "./value-object";
8
8
  export * from "./repository";
9
9
  export * from "./domain";
10
10
  export * from "./event-pubsub";
11
+ export * from "./model-registry";
@@ -24,3 +24,4 @@ __exportStar(require("./value-object"), exports);
24
24
  __exportStar(require("./repository"), exports);
25
25
  __exportStar(require("./domain"), exports);
26
26
  __exportStar(require("./event-pubsub"), exports);
27
+ __exportStar(require("./model-registry"), exports);
@@ -8,7 +8,7 @@ class CommandBase extends message_1.MessageBase {
8
8
  super({ ...metadata, messageType: CommandBase.COMMAND_MESSAGE_TYPE }, props);
9
9
  }
10
10
  static commandType() {
11
- return (0, meta_1.getCommandType)(this) || this.modelName();
11
+ return (0, meta_1.getCommandType)(this);
12
12
  }
13
13
  static newCommand(props, context, timestamp) {
14
14
  return new this({
@@ -1,9 +1,9 @@
1
- import { ClassStatic } from "../../types";
2
1
  import { Class } from "type-fest";
2
+ import { EventType } from "../../meta";
3
+ import { ClassStatic } from "../../types";
3
4
  import { Id } from "../id";
4
5
  import { Props, PropsOf } from "../model";
5
6
  import { MessageBase, MessageContext, MessageMetadata } from "./message";
6
- import { EventType } from "../../meta";
7
7
  export type EventSource = Readonly<{
8
8
  aggregateModel: string;
9
9
  aggregateId: Id;
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EventBase = void 0;
4
- const message_1 = require("./message");
5
4
  const meta_1 = require("../../meta");
5
+ const message_1 = require("./message");
6
6
  class EventBase extends message_1.MessageBase {
7
7
  constructor(metadata, props) {
8
8
  super({ ...metadata, messageType: EventBase.EVENT_MESSAGE_TYPE }, props);
9
9
  this._source = metadata.source;
10
10
  }
11
11
  static eventType() {
12
- return (0, meta_1.getEventType)(this) || this.modelName();
12
+ return (0, meta_1.getEventType)(this);
13
13
  }
14
14
  static newEvent(source, props, context, timestamp) {
15
15
  return new this({
@@ -1,12 +1,10 @@
1
1
  import { Class } from "type-fest";
2
- import { ModelId } from "../../meta";
3
2
  import { ClassStatic } from "../../types";
4
- export type PropKey = string | symbol;
5
3
  export interface Props {
6
- [key: PropKey]: any;
4
+ [key: PropertyKey]: any;
7
5
  }
8
6
  export type EmptyProps = {
9
- [key: PropKey]: never;
7
+ [key: PropertyKey]: never;
10
8
  };
11
9
  export declare class ModelBase<P extends Props> {
12
10
  static readonly EMPTY_PROPS: EmptyProps;
@@ -15,11 +13,11 @@ export declare class ModelBase<P extends Props> {
15
13
  static mutable(): boolean;
16
14
  static modelName<T extends AnyModel>(this: ModelClass<T>): string;
17
15
  static modelVersion<T extends AnyModel>(this: ModelClass<T>): number;
18
- static modelId<T extends AnyModel>(this: ModelClass<T>): `${string}|${number}`;
19
- static hasModelId<T extends AnyModel>(this: ModelClass<T>, modelId: ModelId): boolean;
16
+ static modelId<T extends AnyModel>(this: ModelClass<T>): string;
17
+ static hasModelId<T extends AnyModel>(this: ModelClass<T>, modelId: string): boolean;
20
18
  static ownPropsValidator<T extends AnyModel>(this: ModelClass<T>): import("../../meta").PropsValidator<T> | undefined;
21
19
  static propsValidators<T extends AnyModel>(this: ModelClass<T>): import("../../meta").PropsValidator<AnyModel>[];
22
- static ownStaticValues<T extends AnyModel>(this: ModelClass<T>): Map<PropertyKey, import("../../meta").StaticValue<T>>;
20
+ static ownStaticValues<T extends AnyModel>(this: ModelClass<T>): import("../../meta").StaticValuesMap<T>;
23
21
  static ownPropsMap(): import("../../meta").PropsMap<ModelBase<any>>;
24
22
  static propsMap(): import("../../meta").PropsMap<ModelBase<any>>;
25
23
  constructor();
@@ -29,8 +27,8 @@ export declare class ModelBase<P extends Props> {
29
27
  isMutable(): boolean;
30
28
  modelName(): string;
31
29
  modelVersion(): number;
32
- modelId(): `${string}|${number}`;
33
- hasModelId(modelId: ModelId): boolean;
30
+ modelId(): string;
31
+ hasModelId(modelId: string): boolean;
34
32
  ownPropsValidator(): import("../../meta").PropsValidator<this> | undefined;
35
33
  propsValidators(): import("../../meta").PropsValidator<AnyModel>[];
36
34
  ownPropsMap(): import("../../meta").PropsMap<ModelBase<any>>;
@@ -0,0 +1,17 @@
1
+ import { ModelId, ModelName, ModelVersion } from "../meta";
2
+ import { AnyModel, ModelClass } from "./model";
3
+ export declare class ModelVersionMap<T extends AnyModel = AnyModel> extends Map<ModelVersion, ModelClass<T>> {
4
+ readonly modelName: ModelName;
5
+ constructor(modelName: ModelName);
6
+ }
7
+ export declare class ModelMap<T extends AnyModel = AnyModel> extends Map<ModelName, ModelVersionMap<T>> {
8
+ }
9
+ export declare class ModelRegistry {
10
+ private readonly modelMap;
11
+ getModelVersionMap(modelName: ModelName): ModelVersionMap<AnyModel>;
12
+ getModel(modelName: ModelName, modelVersion?: ModelVersion): ModelClass<AnyModel> | undefined;
13
+ getModelByModelId(modelId: ModelId): ModelClass<AnyModel> | undefined;
14
+ hasRegisteredModel(modelName: ModelName, modelVersion: ModelVersion): boolean;
15
+ hasRegisteredModel(model: ModelClass): boolean;
16
+ registerModel(modelClass: ModelClass): this;
17
+ }
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModelRegistry = exports.ModelMap = exports.ModelVersionMap = void 0;
4
+ const meta_1 = require("../meta");
5
+ class ModelVersionMap extends Map {
6
+ constructor(modelName) {
7
+ super();
8
+ this.modelName = modelName;
9
+ }
10
+ }
11
+ exports.ModelVersionMap = ModelVersionMap;
12
+ class ModelMap extends Map {
13
+ }
14
+ exports.ModelMap = ModelMap;
15
+ class ModelRegistry {
16
+ constructor() {
17
+ this.modelMap = new ModelMap();
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();
24
+ }
25
+ getModel(modelName, modelVersion = 0) {
26
+ const modelVersionMap = this.getModelVersionMap(modelName);
27
+ return modelVersionMap.get(modelVersion);
28
+ }
29
+ getModelByModelId(modelId) {
30
+ const { modelName, modelVersion } = meta_1.MId.fromValue(modelId);
31
+ return this.getModel(modelName, modelVersion);
32
+ }
33
+ 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
+ }
43
+ return Boolean(this.getModel(modelName, modelVersion));
44
+ }
45
+ registerModel(modelClass) {
46
+ const modelName = modelClass.modelName();
47
+ const modelVersion = modelClass.modelVersion();
48
+ 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);
52
+ return this;
53
+ }
54
+ }
55
+ exports.ModelRegistry = ModelRegistry;
@@ -0,0 +1,2 @@
1
+ import { EnumClass, EnumValue } from "../core";
2
+ export declare const Enum: (value: EnumValue) => <T extends EnumClass<import("../core").EnumBase>>(target: T, key: string) => void;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Enum = void 0;
4
- const static_1 = require("./static");
4
+ const static_1 = require("./model/static");
5
5
  const Enum = (value) => {
6
6
  return (target, key) => {
7
7
  (0, static_1.Static)(() => new target(value))(target, key);
@@ -2,3 +2,4 @@ export * from "./aggregate-es";
2
2
  export * from "./id";
3
3
  export * from "./model";
4
4
  export * from "./message";
5
+ export * from "./enum";
@@ -18,3 +18,4 @@ __exportStar(require("./aggregate-es"), exports);
18
18
  __exportStar(require("./id"), exports);
19
19
  __exportStar(require("./model"), exports);
20
20
  __exportStar(require("./message"), exports);
21
+ __exportStar(require("./enum"), exports);
@@ -4,7 +4,7 @@ exports.Command = void 0;
4
4
  const meta_1 = require("../../meta");
5
5
  const Command = (commandType) => {
6
6
  return (target) => {
7
- (0, meta_1.setCommandType)(target, commandType);
7
+ (0, meta_1.defineCommandType)(target, commandType);
8
8
  };
9
9
  };
10
10
  exports.Command = Command;
@@ -4,7 +4,7 @@ exports.Event = void 0;
4
4
  const meta_1 = require("../../meta");
5
5
  const Event = (eventType) => {
6
6
  return (target) => {
7
- (0, meta_1.setEventType)(target, eventType);
7
+ (0, meta_1.defineEventType)(target, eventType);
8
8
  };
9
9
  };
10
10
  exports.Event = Event;
@@ -1,6 +1,4 @@
1
1
  export * from "./prop";
2
2
  export * from "./model";
3
- export * from "./version";
4
- export * from "./validator";
5
3
  export * from "./static";
6
- export * from "./enum";
4
+ export * from "../enum";
@@ -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("../enum"), exports);
@@ -1,2 +1,12 @@
1
- import { ModelClass } from "../../core";
2
- export declare const Model: (name: string) => <T extends ModelClass<import("../../core").AnyModel>>(target: T) => void;
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;
@@ -1,10 +1,54 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.Model = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const core_1 = require("../../core");
4
9
  const meta_1 = require("../../meta");
5
- const Model = (name) => {
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);
6
35
  return (target) => {
7
- (0, meta_1.setModelName)(target, name);
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 (!core_1.domainManager.hasDomain(domainName)) {
45
+ core_1.domainManager.addDomain(new core_1.Domain(domainName));
46
+ }
47
+ const domain = core_1.domainManager.getDomain(domainName);
48
+ domain.modelRegistry.registerModel(target);
49
+ }
50
+ if (modelOptions?.propsValidator)
51
+ (0, meta_1.definePropsValidator)(target, modelOptions.propsValidator);
8
52
  };
9
- };
53
+ }
10
54
  exports.Model = Model;
@@ -1,2 +1,2 @@
1
- import { AnyModel, PropKey, PropsOf } from "../../core";
2
- export declare const Prop: <T extends AnyModel>(propTargetKey?: keyof PropsOf<T> | undefined) => (target: T, key: PropKey) => void;
1
+ import { AnyModel, PropsOf } from "../../core";
2
+ export declare const Prop: <T extends AnyModel>(propTargetKey?: keyof PropsOf<T> | undefined) => (target: T, key: PropertyKey) => void;
@@ -4,7 +4,7 @@ exports.Prop = void 0;
4
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;
@@ -1,3 +1,3 @@
1
1
  import { ModelClass } from "../../core";
2
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: string) => void;
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;
@@ -5,16 +5,7 @@ const meta_1 = require("../../meta");
5
5
  const Static = (builder) => {
6
6
  return (target, key) => {
7
7
  (0, meta_1.setStaticValue)(target, key, builder);
8
- Object.defineProperty(target, key, {
9
- configurable: false,
10
- enumerable: true,
11
- get() {
12
- return (0, meta_1.getStaticValue)(target, key);
13
- },
14
- set() {
15
- throw new Error("Static value is readonly");
16
- },
17
- });
8
+ (0, meta_1.defineStaticValueProperty)(target, key);
18
9
  };
19
10
  };
20
11
  exports.Static = Static;
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ /// <reference types="src/declarations" />
1
2
  export * from "./meta";
2
3
  export * from "./types";
3
4
  export * from "./utils";
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ /// <reference path="./declarations/index.d.ts" />
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -0,0 +1,8 @@
1
+ import { AnyCommand, CommandHandler } from "../../core";
2
+ export declare class CommandHandlerMap extends Map<string, CommandHandler> {
3
+ }
4
+ export declare const OwnCommandHandlerMapMetaKey: unique symbol;
5
+ export declare const getOwnCommandHandlerMap: (target: object) => CommandHandlerMap;
6
+ export declare const defineCommandHandler: <T extends AnyCommand>(target: object, commandType: string, handler: CommandHandler<T>) => void;
7
+ export declare const CommandHandlerMapMetaKey: unique symbol;
8
+ export declare const getCommandHandlerMap: (target: object) => CommandHandlerMap;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCommandHandlerMap = exports.CommandHandlerMapMetaKey = exports.defineCommandHandler = exports.getOwnCommandHandlerMap = exports.OwnCommandHandlerMapMetaKey = exports.CommandHandlerMap = void 0;
4
+ class CommandHandlerMap extends Map {
5
+ }
6
+ exports.CommandHandlerMap = CommandHandlerMap;
7
+ exports.OwnCommandHandlerMapMetaKey = Symbol.for("OWN_COMMAND_HANDLER_MAP");
8
+ const getOwnCommandHandlerMap = (target) => {
9
+ const ownCommandHandlerMap = () => Reflect.getOwnMetadata(exports.OwnCommandHandlerMapMetaKey, target);
10
+ if (!ownCommandHandlerMap())
11
+ Reflect.defineMetadata(exports.OwnCommandHandlerMapMetaKey, new CommandHandlerMap(), target);
12
+ return ownCommandHandlerMap();
13
+ };
14
+ exports.getOwnCommandHandlerMap = getOwnCommandHandlerMap;
15
+ const defineCommandHandler = (target, commandType, handler) => {
16
+ const commandHandlersMap = (0, exports.getOwnCommandHandlerMap)(target);
17
+ commandHandlersMap.set(commandType, handler);
18
+ };
19
+ exports.defineCommandHandler = defineCommandHandler;
20
+ exports.CommandHandlerMapMetaKey = Symbol.for("COMMAND_HANDLER_MAP");
21
+ const getCommandHandlerMap = (target) => {
22
+ if (!Reflect.hasOwnMetadata(exports.CommandHandlerMapMetaKey, target)) {
23
+ const buildCommandHandlerMap = (target) => {
24
+ let _target = target;
25
+ const result = new CommandHandlerMap();
26
+ const ownCommandHandlerMaps = [];
27
+ do {
28
+ const ownCommandHandlerMap = (0, exports.getOwnCommandHandlerMap)(_target);
29
+ ownCommandHandlerMaps.unshift(ownCommandHandlerMap);
30
+ _target = Reflect.getPrototypeOf(_target);
31
+ } while (_target !== null);
32
+ ownCommandHandlerMaps.forEach((ownCommandHandlerMap) => {
33
+ ownCommandHandlerMap.forEach((commandHandler, methodName) => {
34
+ result.set(methodName, commandHandler);
35
+ });
36
+ });
37
+ return result;
38
+ };
39
+ Reflect.defineMetadata(exports.CommandHandlerMapMetaKey, buildCommandHandlerMap(target), target);
40
+ }
41
+ return Reflect.getOwnMetadata(exports.CommandHandlerMapMetaKey, target);
42
+ };
43
+ exports.getCommandHandlerMap = getCommandHandlerMap;
@@ -0,0 +1,9 @@
1
+ import "reflect-metadata";
2
+ import { AnyEvent, EventApplier } from "../../core";
3
+ export declare class EventApplierMap extends Map<string, EventApplier> {
4
+ }
5
+ export declare const OwnEventApplierMapMetaKey: unique symbol;
6
+ export declare const getOwnEventApplierMap: (target: object) => EventApplierMap;
7
+ export declare const defineEventApplier: <T extends AnyEvent>(target: object, eventType: string, applier: EventApplier<T>) => void;
8
+ export declare const EventApplierMapMetaKey: unique symbol;
9
+ export declare const getEventApplierMap: (target: object) => EventApplierMap;