ddd-node 15.1.1 → 15.3.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.
@@ -13,16 +13,19 @@ export declare class ModelBase<P extends Props> {
13
13
  static isModel(model: any): model is AnyModel;
14
14
  static mutable(): boolean;
15
15
  static modelName<T extends AnyModel>(this: ModelClass<T>): string;
16
- static propsValidator<T extends AnyModel>(this: ModelClass<T>): import("../../meta").PropsValidator<T> | undefined;
16
+ static ownPropsValidator<T extends AnyModel>(this: ModelClass<T>): import("../../meta").PropsValidator<T> | undefined;
17
+ static propsValidators<T extends AnyModel>(this: ModelClass<T>): import("../../meta").PropsValidator<AnyModel>[];
17
18
  static ownStaticValues<T extends AnyModel>(this: ModelClass<T>): Map<string | symbol, import("../../meta").StaticValue<T>>;
18
19
  static ownPropsMap(): import("../../meta").PropsMap<ModelBase<any>>;
19
20
  static propsMap(): import("../../meta").PropsMap<ModelBase<any>>;
20
21
  constructor();
21
- private redefineModel;
22
- protected get currentModelType(): ModelClass<this>;
22
+ protected redefineModel(): void;
23
+ protected redefineProp(key: keyof this, propTargetKey: keyof P): void;
24
+ protected get _modelClass(): ModelClass<this>;
23
25
  isMutable(): boolean;
24
26
  modelName(): string;
25
- propsValidator(): import("../../meta").PropsValidator<this> | undefined;
27
+ ownPropsValidator(): import("../../meta").PropsValidator<this> | undefined;
28
+ propsValidators(): import("../../meta").PropsValidator<AnyModel>[];
26
29
  ownPropsMap(): import("../../meta").PropsMap<ModelBase<any>>;
27
30
  propsMap(): import("../../meta").PropsMap<any>;
28
31
  validateProps(props: P): void;
@@ -17,8 +17,11 @@ class ModelBase {
17
17
  static modelName() {
18
18
  return (0, meta_1.getModelName)(this);
19
19
  }
20
- static propsValidator() {
21
- return (0, meta_1.getPropsValidator)(this);
20
+ static ownPropsValidator() {
21
+ return (0, meta_1.getOwnPropsValidator)(this);
22
+ }
23
+ static propsValidators() {
24
+ return (0, meta_1.getPropsValidators)(this);
22
25
  }
23
26
  static ownStaticValues() {
24
27
  return (0, meta_1.getOwnStaticValues)(this);
@@ -34,38 +37,44 @@ class ModelBase {
34
37
  this.redefineModel();
35
38
  }
36
39
  redefineModel() {
37
- this.propsMap().forEach((propKeyTarget, key) => {
38
- Object.defineProperty(this, key, {
39
- configurable: true,
40
- enumerable: true,
41
- get() {
42
- return this._props?.[propKeyTarget];
43
- },
44
- });
40
+ this.propsMap().forEach((propTargetKey, key) => {
41
+ this.redefineProp(key, propTargetKey);
45
42
  });
46
43
  }
47
- get currentModelType() {
44
+ redefineProp(key, propTargetKey) {
45
+ Object.defineProperty(this, key, {
46
+ // must be true because the props() method need to recall redefineModel(-> redefineProp)
47
+ configurable: true,
48
+ enumerable: true,
49
+ get() {
50
+ return this._props?.[propTargetKey];
51
+ },
52
+ });
53
+ }
54
+ get _modelClass() {
48
55
  return this.constructor;
49
56
  }
50
57
  isMutable() {
51
- return this.currentModelType.mutable();
58
+ return this._modelClass.mutable();
52
59
  }
53
60
  modelName() {
54
- return this.currentModelType.modelName();
61
+ return this._modelClass.modelName();
62
+ }
63
+ ownPropsValidator() {
64
+ return this._modelClass.ownPropsValidator();
55
65
  }
56
- propsValidator() {
57
- return this.currentModelType.propsValidator();
66
+ propsValidators() {
67
+ return this._modelClass.propsValidators();
58
68
  }
59
69
  ownPropsMap() {
60
- return this.currentModelType.ownPropsMap();
70
+ return this._modelClass.ownPropsMap();
61
71
  }
62
72
  propsMap() {
63
73
  return (0, meta_1.getPropsMap)(Reflect.getPrototypeOf(this));
64
74
  }
65
75
  validateProps(props) {
66
- const propsValidator = this.propsValidator();
67
- if (propsValidator)
68
- propsValidator(props);
76
+ const propsValidators = this.propsValidators();
77
+ propsValidators.forEach((propsValidator) => propsValidator(props));
69
78
  }
70
79
  validate() {
71
80
  this.validateProps(this._props);
@@ -1,2 +1,2 @@
1
- import { AnyCommand, CommandClass, CommandHandler } from "../../core";
2
- export declare const Handle: <T extends AnyCommand>(commandClass: CommandClass<T, any[]>) => <U extends CommandHandler<T>>(target: object, propertyKey: string, descriptor: TypedPropertyDescriptor<U>) => void;
1
+ import { AnyCommand, AnyEventSourcedAggregate, CommandClass, CommandHandler } from "../../core";
2
+ export declare const Handle: <T extends AnyCommand>(commandClass: CommandClass<T, any[]>) => <U extends CommandHandler<T>>(target: AnyEventSourcedAggregate, propertyKey: string, descriptor: TypedPropertyDescriptor<U>) => void;
@@ -1,2 +1,2 @@
1
- import { AnyEvent, EventApplier, EventClass } from "../../core";
2
- export declare const When: <T extends AnyEvent>(eventClass: EventClass<T, any[]>) => <U extends EventApplier<T>>(target: object, propertyKey: string, descriptor: TypedPropertyDescriptor<U>) => void;
1
+ import { AnyEvent, AnyEventSourcedAggregate, EventApplier, EventClass } from "../../core";
2
+ export declare const When: <T extends AnyEvent>(eventClass: EventClass<T, any[]>) => <U extends EventApplier<T>>(target: AnyEventSourcedAggregate, propertyKey: string, descriptor: TypedPropertyDescriptor<U>) => void;
@@ -1,2 +1,2 @@
1
1
  import { AnyModel, PropKey, PropsOf } from "../../core";
2
- export declare const Prop: <T extends AnyModel>(propKey?: keyof PropsOf<T> | undefined) => (target: T, key: PropKey) => void;
2
+ export declare const Prop: <T extends AnyModel>(propTargetKey?: keyof PropsOf<T> | undefined) => (target: T, key: PropKey) => void;
@@ -2,9 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Prop = void 0;
4
4
  const meta_1 = require("../../meta");
5
- const Prop = (propKey) => {
5
+ const Prop = (propTargetKey) => {
6
6
  return (target, key) => {
7
- (0, meta_1.setProp)(target, key, propKey ?? key);
7
+ (0, meta_1.setProp)(target, key, propTargetKey ?? key);
8
8
  };
9
9
  };
10
10
  exports.Prop = Prop;
@@ -3,13 +3,15 @@ import { StaticValue, StaticValueBuilder } from "./helpers/static-value";
3
3
  export declare class PropsMap<T extends AnyModel = AnyModel> extends Map<PropKey, keyof PropsOf<T>> {
4
4
  }
5
5
  export declare const getOwnPropsMap: <T extends AnyModel = AnyModel>(target: T) => PropsMap<T>;
6
- export declare const setProp: <T extends AnyModel = AnyModel>(target: T, key: PropKey, targetPropKey?: keyof PropsOf<T> | undefined) => void;
6
+ export declare const setProp: <T extends AnyModel = AnyModel>(target: T, key: PropKey, propTargetKey?: keyof PropsOf<T> | undefined) => void;
7
7
  export declare const getPropsMap: <T extends AnyModel = AnyModel>(target: T) => PropsMap<T>;
8
8
  export declare const setModelName: <T extends AnyModel>(target: ModelClass<T>, name?: string) => void;
9
9
  export declare const getModelName: <T extends AnyModel>(target: ModelClass<T>) => string;
10
10
  export type PropsValidator<T extends AnyModel = AnyModel> = (props: PropsOf<T>) => void;
11
11
  export declare const setPropsValidator: <T extends AnyModel>(target: object, validator: PropsValidator<T>) => void;
12
- export declare const getPropsValidator: <T extends AnyModel>(target: object) => PropsValidator<T> | undefined;
12
+ export declare const getOwnPropsValidator: <T extends AnyModel>(target: object) => PropsValidator<T> | undefined;
13
+ export declare const PropsValidatorsMetaKey: unique symbol;
14
+ export declare const getPropsValidators: (target: object) => PropsValidator<AnyModel>[];
13
15
  export declare const getOwnStaticValues: <T extends AnyModel>(target: object) => Map<string | symbol, StaticValue<T>>;
14
16
  export declare const setStaticValue: <T extends AnyModel>(target: object, key: string, value: T | StaticValueBuilder<T>) => void;
15
17
  export declare const getStaticValue: (target: object, key: string | symbol) => AnyModel | undefined;
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getStaticValue = exports.setStaticValue = exports.getOwnStaticValues = exports.getPropsValidator = exports.setPropsValidator = exports.getModelName = exports.setModelName = exports.getPropsMap = exports.setProp = exports.getOwnPropsMap = exports.PropsMap = void 0;
3
+ exports.getStaticValue = exports.setStaticValue = exports.getOwnStaticValues = exports.getPropsValidators = exports.PropsValidatorsMetaKey = exports.getOwnPropsValidator = exports.setPropsValidator = exports.getModelName = exports.setModelName = exports.getPropsMap = exports.setProp = exports.getOwnPropsMap = exports.PropsMap = void 0;
4
4
  const core_1 = require("../core");
5
5
  const static_value_1 = require("./helpers/static-value");
6
6
  const OwnPropsMapMetaKey = Symbol.for("OWN_PROPS_MAP");
7
- // Prop keys map is a Map<Key, TargetPropKey>;
8
7
  class PropsMap extends Map {
9
8
  }
10
9
  exports.PropsMap = PropsMap;
@@ -16,10 +15,10 @@ const getOwnPropsMap = (target) => {
16
15
  return ownPropsMap();
17
16
  };
18
17
  exports.getOwnPropsMap = getOwnPropsMap;
19
- const setProp = (target, key, targetPropKey) => {
18
+ const setProp = (target, key, propTargetKey) => {
20
19
  const ownPropsMap = (0, exports.getOwnPropsMap)(target);
21
- if (targetPropKey)
22
- ownPropsMap.set(key, targetPropKey);
20
+ if (propTargetKey)
21
+ ownPropsMap.set(key, propTargetKey);
23
22
  };
24
23
  exports.setProp = setProp;
25
24
  const PropsMapMetaKey = Symbol.for("PROPS_MAP");
@@ -60,15 +59,32 @@ const getModelName = (target) => {
60
59
  return modelName();
61
60
  };
62
61
  exports.getModelName = getModelName;
63
- const PropsValidatorMetaKey = Symbol.for("PROPS_VALIDATOR");
62
+ const OwnPropsValidatorMetaKey = Symbol.for("OWN_PROPS_VALIDATOR");
64
63
  const setPropsValidator = (target, validator) => {
65
- Reflect.defineMetadata(PropsValidatorMetaKey, validator, target);
64
+ Reflect.defineMetadata(OwnPropsValidatorMetaKey, validator, target);
66
65
  };
67
66
  exports.setPropsValidator = setPropsValidator;
68
- const getPropsValidator = (target) => {
69
- return Reflect.getMetadata(PropsValidatorMetaKey, target);
67
+ const getOwnPropsValidator = (target) => {
68
+ return Reflect.getOwnMetadata(OwnPropsValidatorMetaKey, target);
70
69
  };
71
- exports.getPropsValidator = getPropsValidator;
70
+ exports.getOwnPropsValidator = getOwnPropsValidator;
71
+ exports.PropsValidatorsMetaKey = Symbol.for("PROPS_VALIDATORS");
72
+ const getPropsValidators = (target) => {
73
+ const validators = () => Reflect.getOwnMetadata(exports.PropsValidatorsMetaKey, target);
74
+ if (validators())
75
+ return validators();
76
+ const result = [];
77
+ let _target = target;
78
+ do {
79
+ const ownValidator = (0, exports.getOwnPropsValidator)(_target);
80
+ if (ownValidator)
81
+ result.push(ownValidator);
82
+ _target = Reflect.getPrototypeOf(_target);
83
+ } while (_target !== null);
84
+ Reflect.defineMetadata(exports.PropsValidatorsMetaKey, result, target);
85
+ return validators();
86
+ };
87
+ exports.getPropsValidators = getPropsValidators;
72
88
  //
73
89
  const OwnStaticValuesMetaKey = Symbol.for("OWN_STATIC_VALUES");
74
90
  const getOwnStaticValues = (target) => {
package/dist/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"ddd-node","version":"15.1.1","description":"Domain Driven Design base for NodeJs","type":"commonjs","main":"index.js","types":"index.d.ts","files":["dist"],"repository":{"type":"git","url":"https://github.com/nqd881/ddd-node"},"keywords":["ddd","ddd-node","ddd-base","ddd-ts","ddd-js"],"author":"Quoc Dai","license":"ISC","devDependencies":{"@types/chai":"^4.3.16","@types/lodash":"^4.14.200","@types/mocha":"^10.0.6","@types/uuid":"^9.0.6","chai":"^5.1.1","chai-deep-match":"^1.2.1","ddd-node":"file:dist","mocha":"^10.4.0","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^5.2.2"},"dependencies":{"lodash":"^4.17.21","nodejs-snowflake":"^2.0.1","reflect-metadata":"^0.1.13","tsc-alias":"^1.8.8","type-fest":"^4.15.0","uuid":"^9.0.1"}}
1
+ {"name":"ddd-node","version":"15.3.0","description":"Domain Driven Design base for NodeJs","type":"commonjs","main":"index.js","types":"index.d.ts","files":["dist"],"repository":{"type":"git","url":"https://github.com/nqd881/ddd-node"},"keywords":["ddd","ddd-node","ddd-base","ddd-ts","ddd-js"],"author":"Quoc Dai","license":"ISC","devDependencies":{"@types/chai":"^4.3.16","@types/lodash":"^4.14.200","@types/mocha":"^10.0.6","@types/uuid":"^9.0.6","chai":"^5.1.1","chai-deep-match":"^1.2.1","ddd-node":"file:dist","mocha":"^10.4.0","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^5.2.2"},"dependencies":{"lodash":"^4.17.21","nodejs-snowflake":"^2.0.1","reflect-metadata":"^0.1.13","tsc-alias":"^1.8.8","type-fest":"^4.15.0","uuid":"^9.0.1"}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ddd-node",
3
- "version": "15.1.1",
3
+ "version": "15.3.0",
4
4
  "description": "Domain Driven Design base for NodeJs",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",