ddd-node 5.0.1 → 6.1.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 (85) hide show
  1. package/dist/core/aggregate.d.ts +67 -0
  2. package/dist/core/aggregate.js +178 -0
  3. package/dist/core/command.d.ts +13 -0
  4. package/dist/core/command.js +18 -0
  5. package/dist/core/entity.d.ts +17 -0
  6. package/dist/core/entity.js +23 -0
  7. package/dist/core/event.d.ts +27 -0
  8. package/dist/core/event.js +23 -0
  9. package/dist/{base → core}/id.d.ts +2 -1
  10. package/dist/{base → core}/id.js +6 -0
  11. package/dist/{base → core}/index.d.ts +5 -3
  12. package/dist/{base → core}/index.js +5 -3
  13. package/dist/core/message.d.ts +21 -0
  14. package/dist/core/message.js +30 -0
  15. package/dist/core/metadata.d.ts +14 -0
  16. package/dist/core/metadata.js +43 -0
  17. package/dist/core/model-type.d.ts +86 -0
  18. package/dist/core/model-type.js +55 -0
  19. package/dist/core/model.d.ts +14 -0
  20. package/dist/{base/props-envelope.js → core/model.js} +17 -14
  21. package/dist/core/registry.d.ts +12 -0
  22. package/dist/core/registry.js +28 -0
  23. package/dist/core/value-object.d.ts +10 -0
  24. package/dist/{base → core}/value-object.js +3 -11
  25. package/dist/decorators/aggregate.d.ts +6 -7
  26. package/dist/decorators/aggregate.js +16 -19
  27. package/dist/decorators/command.d.ts +2 -2
  28. package/dist/decorators/command.js +7 -11
  29. package/dist/decorators/entity.d.ts +2 -2
  30. package/dist/decorators/entity.js +7 -9
  31. package/dist/decorators/event.d.ts +2 -2
  32. package/dist/decorators/event.js +7 -11
  33. package/dist/decorators/index.d.ts +2 -2
  34. package/dist/decorators/index.js +2 -2
  35. package/dist/decorators/model.d.ts +3 -0
  36. package/dist/decorators/model.js +12 -0
  37. package/dist/decorators/value-object.d.ts +2 -2
  38. package/dist/decorators/value-object.js +7 -9
  39. package/dist/index.d.ts +1 -2
  40. package/dist/index.js +1 -2
  41. package/dist/types/class.d.ts +0 -5
  42. package/dist/utils/index.d.ts +0 -1
  43. package/dist/utils/index.js +0 -1
  44. package/package.json +1 -1
  45. package/tsconfig.json +1 -2
  46. package/dist/base/aggregate.d.ts +0 -70
  47. package/dist/base/aggregate.js +0 -175
  48. package/dist/base/command.d.ts +0 -21
  49. package/dist/base/command.js +0 -22
  50. package/dist/base/entity.d.ts +0 -25
  51. package/dist/base/entity.js +0 -31
  52. package/dist/base/errors/aggregate.error.d.ts +0 -21
  53. package/dist/base/errors/aggregate.error.js +0 -45
  54. package/dist/base/event.d.ts +0 -29
  55. package/dist/base/event.js +0 -26
  56. package/dist/base/message.d.ts +0 -33
  57. package/dist/base/message.js +0 -42
  58. package/dist/base/props-envelope.d.ts +0 -11
  59. package/dist/base/repository.d.ts +0 -6
  60. package/dist/base/repository.js +0 -2
  61. package/dist/base/value-object.d.ts +0 -16
  62. package/dist/decorators/message.d.ts +0 -2
  63. package/dist/decorators/message.js +0 -10
  64. package/dist/metadata/aggregate.d.ts +0 -14
  65. package/dist/metadata/aggregate.js +0 -70
  66. package/dist/metadata/command.d.ts +0 -6
  67. package/dist/metadata/command.js +0 -19
  68. package/dist/metadata/constants.d.ts +0 -8
  69. package/dist/metadata/constants.js +0 -11
  70. package/dist/metadata/entity.d.ts +0 -6
  71. package/dist/metadata/entity.js +0 -19
  72. package/dist/metadata/errors.d.ts +0 -18
  73. package/dist/metadata/errors.js +0 -39
  74. package/dist/metadata/event.d.ts +0 -6
  75. package/dist/metadata/event.js +0 -19
  76. package/dist/metadata/index.d.ts +0 -7
  77. package/dist/metadata/index.js +0 -23
  78. package/dist/metadata/message.d.ts +0 -3
  79. package/dist/metadata/message.js +0 -16
  80. package/dist/metadata/registry.d.ts +0 -9
  81. package/dist/metadata/registry.js +0 -23
  82. package/dist/metadata/value-object.d.ts +0 -6
  83. package/dist/metadata/value-object.js +0 -19
  84. package/dist/utils/id.d.ts +0 -1
  85. package/dist/utils/id.js +0 -8
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ValueObjectType = exports.ValueObjectTypePrefix = exports.CommandType = exports.CommandTypePrefix = exports.EventType = exports.EventTypePrefix = exports.AggregateType = exports.AggregateTypePrefix = exports.EntityType = exports.EntityTypePrefix = exports.createPrefixedModelTypeClass = exports.ModelType = exports.ModelTypePatternRegex = exports.seperator = void 0;
4
+ exports.seperator = "#";
5
+ exports.ModelTypePatternRegex = new RegExp(".+" + exports.seperator + ".+");
6
+ class ModelType {
7
+ constructor(prefix, name) {
8
+ this.prefix = prefix;
9
+ this.name = name;
10
+ }
11
+ static from(value) {
12
+ if (!this.isPattern(value))
13
+ throw new Error("Invalid value");
14
+ const [prefix, ...names] = value.split(exports.seperator);
15
+ const name = names.join(exports.seperator);
16
+ return new ModelType(prefix, name);
17
+ }
18
+ static isPattern(type) {
19
+ return exports.ModelTypePatternRegex.test(type);
20
+ }
21
+ get value() {
22
+ return `${this.prefix}${exports.seperator}${this.name}`;
23
+ }
24
+ }
25
+ exports.ModelType = ModelType;
26
+ //
27
+ const createPrefixedModelTypeClass = (prefix) => {
28
+ return class extends ModelType {
29
+ constructor(name) {
30
+ super(prefix, name);
31
+ }
32
+ };
33
+ };
34
+ exports.createPrefixedModelTypeClass = createPrefixedModelTypeClass;
35
+ //
36
+ exports.EntityTypePrefix = "Entity";
37
+ class EntityType extends (0, exports.createPrefixedModelTypeClass)(exports.EntityTypePrefix) {
38
+ }
39
+ exports.EntityType = EntityType;
40
+ exports.AggregateTypePrefix = "Aggregate";
41
+ class AggregateType extends (0, exports.createPrefixedModelTypeClass)(exports.AggregateTypePrefix) {
42
+ }
43
+ exports.AggregateType = AggregateType;
44
+ exports.EventTypePrefix = "Event";
45
+ class EventType extends (0, exports.createPrefixedModelTypeClass)(exports.EventTypePrefix) {
46
+ }
47
+ exports.EventType = EventType;
48
+ exports.CommandTypePrefix = "Command";
49
+ class CommandType extends (0, exports.createPrefixedModelTypeClass)(exports.CommandTypePrefix) {
50
+ }
51
+ exports.CommandType = CommandType;
52
+ exports.ValueObjectTypePrefix = "ValueObject";
53
+ class ValueObjectType extends (0, exports.createPrefixedModelTypeClass)(exports.ValueObjectTypePrefix) {
54
+ }
55
+ exports.ValueObjectType = ValueObjectType;
@@ -0,0 +1,14 @@
1
+ import { Class } from "../types/class";
2
+ export declare class Model<Props extends object> {
3
+ protected _props?: Props;
4
+ constructor(props?: Props);
5
+ static isModel(obj: object): boolean;
6
+ protected setProps(props: Props): void;
7
+ validate(): void;
8
+ get type(): `${string}#${string}`;
9
+ props(): Props | undefined;
10
+ }
11
+ export type AnyModel = Model<object>;
12
+ export type PropsOf<T> = T extends Model<infer P> ? P : never;
13
+ export type ModelClass<T extends AnyModel = AnyModel> = Class<T>;
14
+ export type EmptyProps = {};
@@ -3,25 +3,28 @@ 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.PropsEnvelope = void 0;
6
+ exports.Model = void 0;
7
7
  const lodash_1 = __importDefault(require("lodash"));
8
- class PropsEnvelope {
8
+ const metadata_1 = require("./metadata");
9
+ class Model {
9
10
  constructor(props) {
10
- if (props)
11
- this.initProps(props);
12
- }
13
- validate() { }
14
- initProps(props) {
15
- if (this.props)
16
- return;
17
11
  this._props = props;
18
- this.validate();
19
12
  }
20
- get props() {
21
- return this._props;
13
+ static isModel(obj) {
14
+ return obj instanceof Model;
15
+ }
16
+ setProps(props) {
17
+ if (!this._props) {
18
+ this._props = props;
19
+ this.validate();
20
+ }
21
+ }
22
+ validate() { }
23
+ get type() {
24
+ return (0, metadata_1.getModelType)(Object.getPrototypeOf(this));
22
25
  }
23
- getProps() {
26
+ props() {
24
27
  return lodash_1.default.cloneDeep(this._props);
25
28
  }
26
29
  }
27
- exports.PropsEnvelope = PropsEnvelope;
30
+ exports.Model = Model;
@@ -0,0 +1,12 @@
1
+ import { ModelClass } from "./model";
2
+ import { ModelTypePattern } from "./model-type";
3
+ export declare class ModelRegistry {
4
+ private static _instance;
5
+ private modelMap;
6
+ private constructor();
7
+ static instance(): ModelRegistry;
8
+ getMap(): Map<`${string}#${string}`, ModelClass>;
9
+ hasModel(type: ModelTypePattern): boolean;
10
+ registerModel(type: ModelTypePattern, modelClass: ModelClass): void;
11
+ getModel(type: ModelTypePattern): ModelClass | undefined;
12
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModelRegistry = void 0;
4
+ class ModelRegistry {
5
+ constructor() {
6
+ this.modelMap = new Map();
7
+ }
8
+ static instance() {
9
+ if (!this._instance)
10
+ this._instance = new ModelRegistry();
11
+ return this._instance;
12
+ }
13
+ getMap() {
14
+ return this.modelMap;
15
+ }
16
+ hasModel(type) {
17
+ return this.modelMap.has(type);
18
+ }
19
+ registerModel(type, modelClass) {
20
+ if (this.hasModel(type))
21
+ throw new Error(`Duplicate model for type ${type}`);
22
+ this.modelMap.set(type, modelClass);
23
+ }
24
+ getModel(type) {
25
+ return this.modelMap.get(type);
26
+ }
27
+ }
28
+ exports.ModelRegistry = ModelRegistry;
@@ -0,0 +1,10 @@
1
+ import { Class } from "../types/class";
2
+ import { Model, PropsOf } from "./model";
3
+ export declare class ValueObject<Props extends object> extends Model<Props> {
4
+ constructor(props: Props);
5
+ equals<V extends AnyValueObject>(vo: V): boolean;
6
+ with(props: Partial<Props>): this;
7
+ }
8
+ export type AnyValueObject = ValueObject<any>;
9
+ export type ValueObjectClass<T extends AnyValueObject = AnyValueObject> = Class<T>;
10
+ export type ValueObjectClassWithTypedConstructor<T extends AnyValueObject = AnyValueObject> = Class<T, ConstructorParameters<typeof ValueObject<PropsOf<T>>>>;
@@ -4,27 +4,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ValueObject = void 0;
7
- const value_object_1 = require("../metadata/value-object");
8
7
  const lodash_1 = __importDefault(require("lodash"));
9
- const props_envelope_1 = require("./props-envelope");
10
- class ValueObject extends props_envelope_1.PropsEnvelope {
8
+ const model_1 = require("./model");
9
+ class ValueObject extends model_1.Model {
11
10
  constructor(props) {
12
11
  super(props);
13
12
  }
14
- static valueObjectType() {
15
- return (0, value_object_1.getValueObjectType)(this.prototype);
16
- }
17
- valueObjectType() {
18
- const prototype = Object.getPrototypeOf(this);
19
- return (0, value_object_1.getValueObjectType)(prototype);
20
- }
21
13
  equals(vo) {
22
14
  const equalsType = vo instanceof this.constructor;
23
15
  const equalsValue = JSON.stringify(vo) === JSON.stringify(this);
24
16
  return equalsType && equalsValue;
25
17
  }
26
18
  with(props) {
27
- const newProps = lodash_1.default.merge(this.getProps(), props);
19
+ const newProps = lodash_1.default.merge(this.props(), props);
28
20
  return new this.constructor(newProps);
29
21
  }
30
22
  }
@@ -1,7 +1,6 @@
1
- import { AggregateClass, AggregateCommandHandler, AggregateEventApplier, AnyAggregate } from "../base/aggregate";
2
- import { AnyCommand } from "../base/command";
3
- import { AnyEvent } from "../base/event";
4
- import { Class } from "../types/class";
5
- export declare const TypeAggregate: <T extends AnyAggregate>(aggregateType?: string) => <U extends AggregateClass<T>>(target: U) => void;
6
- export declare const ApplyEvent: <E extends AnyEvent>(eventClass: Class<E>) => <T extends AggregateEventApplier<E>>(target: object, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => void;
7
- export declare const ProcessCommand: <C extends AnyCommand>(commandClass: Class<C>) => <T extends AggregateCommandHandler<C>>(target: object, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => void;
1
+ import { AggregateClass, AggregateESClass, CommandHandler, EventApplier } from "../core/aggregate";
2
+ import { AnyCommand, CommandClass } from "../core/command";
3
+ import { AnyEvent, EventClass } from "../core/event";
4
+ export declare const aggregate: (name?: string) => <T extends AggregateClass | AggregateESClass>(target: T) => void;
5
+ export declare const applyEvent: <T extends AnyEvent>(eventClass: EventClass<T>) => <U extends EventApplier<T>>(target: object, propertyKey: string, descriptor: TypedPropertyDescriptor<U>) => void;
6
+ export declare const handleCommand: <T extends AnyCommand>(commandClass: CommandClass<T>) => <U extends CommandHandler<T>>(target: object, propertyKey: string, descriptor: TypedPropertyDescriptor<U>) => void;
@@ -1,32 +1,29 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ProcessCommand = exports.ApplyEvent = exports.TypeAggregate = void 0;
4
- const aggregate_1 = require("../metadata/aggregate");
5
- const command_1 = require("../metadata/command");
6
- const event_1 = require("../metadata/event");
7
- const TypeAggregate = (aggregateType) => {
8
- return (target) => {
9
- aggregateType = aggregateType !== null && aggregateType !== void 0 ? aggregateType : target.name;
10
- (0, aggregate_1.defineAggregateType)(target.prototype, aggregateType);
11
- aggregate_1.AggregateRegistry.register(aggregateType, target);
12
- };
3
+ exports.handleCommand = exports.applyEvent = exports.aggregate = void 0;
4
+ const metadata_1 = require("../core/metadata");
5
+ const model_type_1 = require("../core/model-type");
6
+ const model_1 = require("./model");
7
+ const aggregate = (name) => (target) => {
8
+ const aggregateType = new model_type_1.AggregateType(name !== null && name !== void 0 ? name : target.name);
9
+ (0, model_1.model)(aggregateType.value)(target);
13
10
  };
14
- exports.TypeAggregate = TypeAggregate;
15
- const ApplyEvent = (eventClass) => {
11
+ exports.aggregate = aggregate;
12
+ const applyEvent = (eventClass) => {
16
13
  return (target, propertyKey, descriptor) => {
17
14
  if (typeof descriptor.value === "function") {
18
- const eventType = (0, event_1.getEventType)(eventClass.prototype);
19
- (0, aggregate_1.defineAggregateEventApplier)(target, eventType, descriptor.value);
15
+ const type = (0, metadata_1.getModelType)(eventClass.prototype);
16
+ (0, metadata_1.defineEventApplier)(target, type, descriptor.value);
20
17
  }
21
18
  };
22
19
  };
23
- exports.ApplyEvent = ApplyEvent;
24
- const ProcessCommand = (commandClass) => {
20
+ exports.applyEvent = applyEvent;
21
+ const handleCommand = (commandClass) => {
25
22
  return (target, propertyKey, descriptor) => {
26
23
  if (typeof descriptor.value === "function") {
27
- const commandType = (0, command_1.getCommandType)(commandClass.prototype);
28
- (0, aggregate_1.defineAggregateCommandHandler)(target, commandType, descriptor.value);
24
+ const type = (0, metadata_1.getModelType)(commandClass.prototype);
25
+ (0, metadata_1.defineCommandHandler)(target, type, descriptor.value);
29
26
  }
30
27
  };
31
28
  };
32
- exports.ProcessCommand = ProcessCommand;
29
+ exports.handleCommand = handleCommand;
@@ -1,2 +1,2 @@
1
- import { AnyCommand, CommandClass } from "../base/command";
2
- export declare const TypeCommand: <T extends AnyCommand>(aggregateType: string, commandType?: string) => <U extends CommandClass<T>>(target: U) => void;
1
+ import { CommandClass } from "../core/command";
2
+ export declare const command: (name?: string) => <T extends CommandClass>(target: T) => void;
@@ -1,14 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TypeCommand = void 0;
4
- const command_1 = require("../metadata/command");
5
- const message_1 = require("./message");
6
- const TypeCommand = (aggregateType, commandType) => {
7
- return (target) => {
8
- (0, message_1.TypeMessage)(aggregateType)(target);
9
- commandType = commandType !== null && commandType !== void 0 ? commandType : target.name;
10
- (0, command_1.defineCommandType)(target.prototype, commandType);
11
- command_1.CommandRegistry.register(commandType, target);
12
- };
3
+ exports.command = void 0;
4
+ const model_type_1 = require("../core/model-type");
5
+ const model_1 = require("./model");
6
+ const command = (name) => (target) => {
7
+ const commandType = new model_type_1.CommandType(name !== null && name !== void 0 ? name : target.name);
8
+ (0, model_1.model)(commandType.value)(target);
13
9
  };
14
- exports.TypeCommand = TypeCommand;
10
+ exports.command = command;
@@ -1,2 +1,2 @@
1
- import { AnyEntity, EntityClass } from "../base/entity";
2
- export declare const TypeEntity: <T extends AnyEntity>(entityType?: string) => <U extends EntityClass<T>>(target: U) => void;
1
+ import { EntityClass } from "../core/entity";
2
+ export declare const entity: (name?: string) => <T extends EntityClass>(target: T) => void;
@@ -1,12 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TypeEntity = void 0;
4
- const entity_1 = require("../metadata/entity");
5
- const TypeEntity = (entityType) => {
6
- return (target) => {
7
- entityType = entityType !== null && entityType !== void 0 ? entityType : target.name;
8
- (0, entity_1.defineEntityType)(target.prototype, entityType);
9
- entity_1.EntityRegistry.register(entityType, target);
10
- };
3
+ exports.entity = void 0;
4
+ const model_type_1 = require("../core/model-type");
5
+ const model_1 = require("./model");
6
+ const entity = (name) => (target) => {
7
+ const entityType = new model_type_1.EntityType(name !== null && name !== void 0 ? name : target.name);
8
+ (0, model_1.model)(entityType.value)(target);
11
9
  };
12
- exports.TypeEntity = TypeEntity;
10
+ exports.entity = entity;
@@ -1,2 +1,2 @@
1
- import { AnyEvent, EventClass } from "../base/event";
2
- export declare const TypeEvent: <T extends AnyEvent>(aggregateType: string, eventType?: string) => <U extends EventClass<T>>(target: U) => void;
1
+ import { EventClass } from "../core/event";
2
+ export declare const event: (name?: string) => <T extends EventClass>(target: T) => void;
@@ -1,14 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TypeEvent = void 0;
4
- const event_1 = require("../metadata/event");
5
- const message_1 = require("./message");
6
- const TypeEvent = (aggregateType, eventType) => {
7
- return (target) => {
8
- (0, message_1.TypeMessage)(aggregateType)(target);
9
- eventType = eventType !== null && eventType !== void 0 ? eventType : target.name;
10
- (0, event_1.defineEventType)(target.prototype, eventType !== null && eventType !== void 0 ? eventType : target.name);
11
- event_1.EventRegistry.register(eventType, target);
12
- };
3
+ exports.event = void 0;
4
+ const model_type_1 = require("../core/model-type");
5
+ const model_1 = require("./model");
6
+ const event = (name) => (target) => {
7
+ const eventType = new model_type_1.EventType(name !== null && name !== void 0 ? name : target.name);
8
+ (0, model_1.model)(eventType.value)(target);
13
9
  };
14
- exports.TypeEvent = TypeEvent;
10
+ exports.event = event;
@@ -1,6 +1,6 @@
1
1
  export * from "./aggregate";
2
- export * from "./message";
3
- export * from "./entity";
4
2
  export * from "./command";
3
+ export * from "./entity";
5
4
  export * from "./event";
5
+ export * from "./model";
6
6
  export * from "./value-object";
@@ -15,8 +15,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./aggregate"), exports);
18
- __exportStar(require("./message"), exports);
19
- __exportStar(require("./entity"), exports);
20
18
  __exportStar(require("./command"), exports);
19
+ __exportStar(require("./entity"), exports);
21
20
  __exportStar(require("./event"), exports);
21
+ __exportStar(require("./model"), exports);
22
22
  __exportStar(require("./value-object"), exports);
@@ -0,0 +1,3 @@
1
+ import { ModelClass } from "../core/model";
2
+ import { ModelTypePattern } from "../core/model-type";
3
+ export declare const model: (type: ModelTypePattern) => <T extends ModelClass>(target: T) => void;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.model = void 0;
4
+ const metadata_1 = require("../core/metadata");
5
+ const registry_1 = require("../core/registry");
6
+ const model = (type) => {
7
+ return (target) => {
8
+ registry_1.ModelRegistry.instance().registerModel(type, target);
9
+ (0, metadata_1.defineModelType)(target.prototype, type);
10
+ };
11
+ };
12
+ exports.model = model;
@@ -1,2 +1,2 @@
1
- import { AnyValueObject, ValueObjectClass } from "../base/value-object";
2
- export declare const TypeValueObject: <T extends AnyValueObject>(valueObjectType?: string) => <U extends ValueObjectClass<T>>(target: U) => void;
1
+ import { ValueObjectClass } from "../core/value-object";
2
+ export declare const valueObject: (name?: string) => <T extends ValueObjectClass>(target: T) => void;
@@ -1,12 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TypeValueObject = void 0;
4
- const value_object_1 = require("../metadata/value-object");
5
- const TypeValueObject = (valueObjectType) => {
6
- return (target) => {
7
- valueObjectType = valueObjectType !== null && valueObjectType !== void 0 ? valueObjectType : target.name;
8
- (0, value_object_1.defineValueObjectType)(target.prototype, valueObjectType);
9
- value_object_1.ValueObjectRegistry.register(valueObjectType, target);
10
- };
3
+ exports.valueObject = void 0;
4
+ const model_type_1 = require("../core/model-type");
5
+ const model_1 = require("./model");
6
+ const valueObject = (name) => (target) => {
7
+ const valueObjectType = new model_type_1.ValueObjectType(name !== null && name !== void 0 ? name : target.name);
8
+ (0, model_1.model)(valueObjectType.value)(target);
11
9
  };
12
- exports.TypeValueObject = TypeValueObject;
10
+ exports.valueObject = valueObject;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
- export * from "./base";
1
+ export * from "./core";
2
2
  export * from "./decorators";
3
- export * from "./metadata";
4
3
  export * from "./types";
5
4
  export * from "./utils";
package/dist/index.js CHANGED
@@ -14,8 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./base"), exports);
17
+ __exportStar(require("./core"), exports);
18
18
  __exportStar(require("./decorators"), exports);
19
- __exportStar(require("./metadata"), exports);
20
19
  __exportStar(require("./types"), exports);
21
20
  __exportStar(require("./utils"), exports);
@@ -2,8 +2,3 @@ export type Constructor<T, Arguments extends unknown[] = any[]> = new (...argume
2
2
  export type Class<T, Arguments extends unknown[] = any[]> = Constructor<T, Arguments> & {
3
3
  prototype: T;
4
4
  };
5
- export type AbstractConstructor<T, Arguments extends unknown[] = any[]> = abstract new (...arguments_: Arguments) => T;
6
- export type AbstractClass<T, Arguments extends unknown[] = any[]> = AbstractConstructor<T, Arguments> & {
7
- prototype: T;
8
- };
9
- export type AbstractableClass<T, Arguments extends unknown[] = any[]> = Class<T, Arguments> | AbstractClass<T, Arguments>;
@@ -1,2 +1 @@
1
- export * from "./id";
2
1
  export * from "./to-array";
@@ -14,5 +14,4 @@ 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("./id"), exports);
18
17
  __exportStar(require("./to-array"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ddd-node",
3
- "version": "5.0.1",
3
+ "version": "6.1.0",
4
4
  "description": "Domain Driven Design base for NodeJs",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
package/tsconfig.json CHANGED
@@ -30,9 +30,8 @@
30
30
  // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
31
31
  "baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */,
32
32
  "paths": {
33
- "#base/*": ["src/base/*"],
33
+ "#core/*": ["src/core/*"],
34
34
  "#decorators/*": ["src/decorator/*"],
35
- "#metadata/*": ["src/metadata/*"],
36
35
  "#utils/*": ["src/utils/*"],
37
36
  "#types/*": ["src/types/*"]
38
37
  } /* Specify a set of entries that re-map imports to additional lookup locations. */,
@@ -1,70 +0,0 @@
1
- import { Class } from "../types/class";
2
- import { ClassStatic } from "../types/class-static";
3
- import { AnyCommand } from "./command";
4
- import { Entity, IEntityMetadata } from "./entity";
5
- import { AnyEvent, EventClass, NewEventMetadataOptions } from "./event";
6
- import { Id } from "./id";
7
- import { PropsOf } from "./props-envelope";
8
- export interface IAggregateMetadata extends IEntityMetadata {
9
- readonly aggregateType: string;
10
- readonly version: number;
11
- }
12
- export type AggregateMetadataWithoutEntityType = Omit<IAggregateMetadata, "entityType">;
13
- export type NewAggregateMetadata = Partial<Omit<IAggregateMetadata, "aggregateType">>;
14
- export declare class Aggregate<P extends object> extends Entity<P> implements IAggregateMetadata {
15
- private readonly _aggregateType;
16
- protected readonly _version: number;
17
- protected events: AnyEvent[];
18
- constructor(metadata: AggregateMetadataWithoutEntityType, props?: P);
19
- static aggregateType(): string;
20
- static newAggregate<T extends AnyAggregate>(this: AggregateClass<T>, props?: PropsOf<T>, metadata?: NewAggregateMetadata): T;
21
- get version(): number;
22
- get aggregateType(): string;
23
- getEvents(): AnyEvent[];
24
- hasEvents(): boolean;
25
- nextVersion(): number;
26
- protected newEvent<E extends AnyEvent>(eventClass: EventClass<E>, props: PropsOf<E>, metadata?: NewEventMetadataOptions): E;
27
- protected addEvent<E extends AnyEvent>(event: E): void;
28
- protected addNewEvent<E extends AnyEvent>(eventClass: EventClass<E>, props: PropsOf<E>, metadata?: NewEventMetadataOptions): void;
29
- }
30
- export type SnapshotAggregateMetadata = AggregateMetadataWithoutEntityType;
31
- export interface SnapshotWithProps<P extends object> {
32
- metadata: SnapshotAggregateMetadata;
33
- props: P;
34
- }
35
- export interface Snapshot<T extends AnyAggregateES> extends SnapshotWithProps<PropsOf<T>> {
36
- }
37
- export declare class AggregateES<P extends object> extends Aggregate<P> {
38
- protected handledCommands: AnyCommand[];
39
- protected pastEvents: AnyEvent[];
40
- static stream<T extends AnyAggregateES>(this: AggregateESClass<T>, id: Id, events: AnyEvent[]): T;
41
- static snapshot<T extends AnyAggregateES>(this: AggregateESClass<T>, snapshot: Snapshot<T>, eventsAfterSnapshot: AnyEvent[]): T;
42
- getHandledCommands(): AnyCommand[];
43
- getPastEvents(): AnyEvent[];
44
- lastEvent(): AnyEvent | undefined;
45
- currentVersion(): number;
46
- nextVersion(): number;
47
- private addPastEvent;
48
- private validateEventBeforeApply;
49
- getEventApplierSafe(eventType: string): AggregateEventApplier<AnyEvent> | null;
50
- getEventApplier(eventType: string): AggregateEventApplier<AnyEvent>;
51
- applyEvent<E extends AnyEvent>(event: E, fromHistory?: boolean): void;
52
- applyEvents(events: AnyEvent[], fromHistory?: boolean): void;
53
- getCommandHandlerSafe(commandType: string): AggregateCommandHandler<AnyCommand> | null;
54
- getCommandHandler(commandType: string): AggregateCommandHandler<AnyCommand>;
55
- private validateCommandBeforeProcess;
56
- processCommand<C extends AnyCommand>(command: C): AnyEvent[];
57
- snap(): SnapshotWithProps<P>;
58
- }
59
- export type AnyAggregate = Aggregate<any>;
60
- export type AnyAggregateES = AggregateES<any>;
61
- export type AggregateEventApplier<E extends AnyEvent> = (event: E) => void;
62
- export type AggregateCommandHandler<C extends AnyCommand, E extends AnyEvent = AnyEvent> = (command: C) => E | E[];
63
- export type AggregateConstructorParamsWithProps<P extends object> = ConstructorParameters<typeof Aggregate<P>>;
64
- export type AggregateClassWithProps<P extends object> = Class<Aggregate<P>, AggregateConstructorParamsWithProps<P>> & ClassStatic<typeof Aggregate<P>>;
65
- export type AggregateESClassWithProps<P extends object> = Class<AggregateES<P>, AggregateConstructorParamsWithProps<P>> & ClassStatic<typeof AggregateES<P>>;
66
- export type AggregateConstructorParams<T extends AnyAggregate> = AggregateConstructorParamsWithProps<PropsOf<T>>;
67
- export type AggregateClass<T extends AnyAggregate> = Class<T, AggregateConstructorParams<T>> & ClassStatic<typeof Aggregate<PropsOf<T>>>;
68
- export type AggregateESClass<T extends AnyAggregateES> = Class<T, AggregateConstructorParams<T>> & ClassStatic<typeof AggregateES<PropsOf<T>>>;
69
- export type InferAggregateClass<T extends AnyAggregate> = T extends AnyAggregateES ? AggregateESClass<T> : AggregateClass<T>;
70
- export type AnyAggregateClass = Class<AnyAggregate>;