ddd-node 34.0.0 → 34.2.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.
- package/base/decorators/model.d.ts +17 -7
- package/base/decorators/model.js +65 -41
- package/base/decorators/prop.js +1 -2
- package/base/decorators/props-validator.d.ts +2 -2
- package/base/decorators/props-validator.js +1 -1
- package/base/meta/index.d.ts +1 -0
- package/base/meta/index.js +1 -0
- package/base/meta/model-domain.d.ts +0 -1
- package/base/meta/model-domain.js +5 -5
- package/base/meta/model-name.js +1 -1
- package/base/meta/model-property-accessor.js +11 -18
- package/base/meta/model-props-type.d.ts +4 -0
- package/base/meta/model-props-type.js +12 -0
- package/base/meta/model-props-validator.d.ts +13 -3
- package/base/meta/model-props-validator.js +35 -17
- package/base/meta/model-static-values.js +2 -3
- package/base/meta/model-version.js +1 -1
- package/base/model/model-descriptor.d.ts +3 -1
- package/base/model/model-descriptor.js +4 -2
- package/base/model/model.js +4 -3
- package/common/index.d.ts +1 -0
- package/common/index.js +17 -0
- package/common/props-validator/index.d.ts +1 -0
- package/common/props-validator/index.js +17 -0
- package/common/props-validator/use-class-validator.d.ts +17 -0
- package/common/props-validator/use-class-validator.js +62 -0
- package/core/decorators/enum/is-enum.d.ts +1 -1
- package/core/decorators/enum/is-enum.js +1 -1
- package/core/model/aggregate/aggregate.js +9 -2
- package/core/model/aggregate/es-aggregate.d.ts +3 -3
- package/core/model/aggregate/state-aggregate.d.ts +1 -1
- package/core/model/entity/entity.d.ts +1 -1
- package/core/model/entity/entity.js +1 -1
- package/core/model/message/command.d.ts +1 -1
- package/core/model/message/command.js +4 -1
- package/core/model/message/event.d.ts +2 -2
- package/core/model/message/event.js +6 -2
- package/core/model/message/message.d.ts +2 -2
- package/core/model/message/message.js +12 -2
- package/core/model/model-with-id/model-with-id.js +4 -1
- package/core/model/value-object/value-object.d.ts +1 -1
- package/handling-event/event-dispatcher.js +3 -14
- package/handling-event/event-subscriber.js +1 -2
- package/index.d.ts +1 -1
- package/index.js +1 -0
- package/package.json +1 -1
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Class } from "type-fest";
|
|
2
|
+
import { ModelPropsValidatorWrapperInput } from "../meta";
|
|
3
|
+
import { AnyDomainModel, DomainModelClass, InferredProps } from "../model";
|
|
3
4
|
export type ModelOptions<T extends AnyDomainModel = AnyDomainModel> = {
|
|
4
5
|
name?: string;
|
|
5
6
|
version?: number;
|
|
6
7
|
domain?: string;
|
|
7
|
-
propsValidator?:
|
|
8
|
+
propsValidator?: ModelPropsValidatorWrapperInput<T>;
|
|
9
|
+
propsType?: Class<InferredProps<T>>;
|
|
8
10
|
autoRegisterModel?: boolean;
|
|
9
11
|
};
|
|
10
|
-
export declare const DEFAULT_MODEL_OPTIONS: ModelOptions
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
export declare const DEFAULT_MODEL_OPTIONS: Required<Pick<ModelOptions, "autoRegisterModel">>;
|
|
13
|
+
/**
|
|
14
|
+
* @Model decorator — registers a DomainModel with metadata and domain context.
|
|
15
|
+
*
|
|
16
|
+
* Usage examples:
|
|
17
|
+
* @Model()
|
|
18
|
+
* @Model("User")
|
|
19
|
+
* @Model("User", 2)
|
|
20
|
+
* @Model("User", { domain: "Auth" })
|
|
21
|
+
* @Model("User", 2, { domain: "Auth" })
|
|
22
|
+
*/
|
|
23
|
+
export declare function Model<T extends DomainModelClass, I extends InstanceType<T> = InstanceType<T>>(nameOrOptions?: string | ModelOptions<I>, versionOrOptions?: number | ModelOptions<I>, options?: ModelOptions<I>): (target: T) => void;
|
package/base/decorators/model.js
CHANGED
|
@@ -1,52 +1,76 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
|
|
3
|
+
exports.DEFAULT_MODEL_OPTIONS = void 0;
|
|
4
|
+
exports.Model = Model;
|
|
8
5
|
const domain_1 = require("../domain");
|
|
9
6
|
const meta_1 = require("../meta");
|
|
10
7
|
exports.DEFAULT_MODEL_OPTIONS = {
|
|
11
8
|
autoRegisterModel: true,
|
|
12
9
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
else
|
|
26
|
-
modelOptions = Object.assign({ name: p1 }, p2);
|
|
27
|
-
}
|
|
28
|
-
else if (p1 && p2 && p3) {
|
|
29
|
-
modelOptions = Object.assign({ name: p1, version: p2 }, p3);
|
|
30
|
-
}
|
|
31
|
-
modelOptions = lodash_1.default.merge(defaultModelOptions, modelOptions);
|
|
10
|
+
/**
|
|
11
|
+
* @Model decorator — registers a DomainModel with metadata and domain context.
|
|
12
|
+
*
|
|
13
|
+
* Usage examples:
|
|
14
|
+
* @Model()
|
|
15
|
+
* @Model("User")
|
|
16
|
+
* @Model("User", 2)
|
|
17
|
+
* @Model("User", { domain: "Auth" })
|
|
18
|
+
* @Model("User", 2, { domain: "Auth" })
|
|
19
|
+
*/
|
|
20
|
+
function Model(nameOrOptions, versionOrOptions, options) {
|
|
21
|
+
const modelOptions = normalizeModelOptions(nameOrOptions, versionOrOptions, options);
|
|
32
22
|
return (target) => {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
(0, meta_1.defineModelVersion)(target, modelOptions.version);
|
|
37
|
-
if (modelOptions === null || modelOptions === void 0 ? void 0 : modelOptions.domain)
|
|
38
|
-
(0, meta_1.defineModelDomain)(target, modelOptions.domain);
|
|
39
|
-
if (modelOptions === null || modelOptions === void 0 ? void 0 : modelOptions.autoRegisterModel) {
|
|
40
|
-
const domainName = (0, meta_1.getModelDomain)(target);
|
|
41
|
-
const domainManager = domain_1.DomainManager.instance();
|
|
42
|
-
if (!domainManager.hasDomain(domainName)) {
|
|
43
|
-
domainManager.addDomain(new domain_1.Domain(domainName));
|
|
44
|
-
}
|
|
45
|
-
const domain = domainManager.getDomain(domainName);
|
|
46
|
-
domain.modelRegistry.registerModel(target);
|
|
23
|
+
defineModel(target, modelOptions);
|
|
24
|
+
if (modelOptions.autoRegisterModel) {
|
|
25
|
+
registerModel(target);
|
|
47
26
|
}
|
|
48
|
-
if (modelOptions === null || modelOptions === void 0 ? void 0 : modelOptions.propsValidator)
|
|
49
|
-
(0, meta_1.defineModelPropGettersValidator)(target, modelOptions.propsValidator);
|
|
50
27
|
};
|
|
51
28
|
}
|
|
52
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Normalizes decorator overload arguments into a unified ModelOptions object.
|
|
31
|
+
*/
|
|
32
|
+
function normalizeModelOptions(p1, p2, p3) {
|
|
33
|
+
let options = {};
|
|
34
|
+
if (typeof p1 === "string" && typeof p2 === "number") {
|
|
35
|
+
options = { name: p1, version: p2, ...p3 };
|
|
36
|
+
}
|
|
37
|
+
else if (typeof p1 === "string" && typeof p2 === "object") {
|
|
38
|
+
options = { name: p1, ...p2 };
|
|
39
|
+
}
|
|
40
|
+
else if (typeof p1 === "string") {
|
|
41
|
+
options = { name: p1 };
|
|
42
|
+
}
|
|
43
|
+
else if (typeof p1 === "object") {
|
|
44
|
+
options = { ...p1 };
|
|
45
|
+
}
|
|
46
|
+
return { ...exports.DEFAULT_MODEL_OPTIONS, ...options };
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Defines model metadata such as name, version, domain, propsType, and validator.
|
|
50
|
+
*/
|
|
51
|
+
function defineModel(target, options) {
|
|
52
|
+
if (options.name)
|
|
53
|
+
(0, meta_1.defineModelName)(target, options.name);
|
|
54
|
+
if (options.version)
|
|
55
|
+
(0, meta_1.defineModelVersion)(target, options.version);
|
|
56
|
+
if (options.domain)
|
|
57
|
+
(0, meta_1.defineModelDomain)(target, options.domain);
|
|
58
|
+
if (options.propsValidator) {
|
|
59
|
+
(0, meta_1.defineModelPropsValidator)(target, new meta_1.ModelPropsValidatorWrapper(options.propsValidator));
|
|
60
|
+
}
|
|
61
|
+
if (options.propsType) {
|
|
62
|
+
(0, meta_1.defineModelPropsType)(target, options.propsType);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Registers the model in its associated domain via DomainManager.
|
|
67
|
+
*/
|
|
68
|
+
function registerModel(target) {
|
|
69
|
+
const domainName = (0, meta_1.getModelDomain)(target);
|
|
70
|
+
const domainManager = domain_1.DomainManager.instance();
|
|
71
|
+
if (!domainManager.hasDomain(domainName)) {
|
|
72
|
+
domainManager.addDomain(new domain_1.Domain(domainName));
|
|
73
|
+
}
|
|
74
|
+
const domain = domainManager.getDomain(domainName);
|
|
75
|
+
domain.modelRegistry.registerModel(target);
|
|
76
|
+
}
|
package/base/decorators/prop.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Prop =
|
|
3
|
+
exports.Prop = Prop;
|
|
4
4
|
const meta_1 = require("../meta");
|
|
5
5
|
function Prop(p1, p2) {
|
|
6
6
|
let propTargetKey, converter;
|
|
@@ -24,4 +24,3 @@ function Prop(p1, p2) {
|
|
|
24
24
|
(0, meta_1.registerPropertyAccessor)(target, key, propTargetKey, converter);
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
-
exports.Prop = Prop;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { AnyDomainModel, DomainModelClass,
|
|
2
|
-
export declare const PropsValidator: <T extends AnyDomainModel>(target: DomainModelClass<T>, key: string, propertyDescriptor: TypedPropertyDescriptor<
|
|
1
|
+
import { AnyDomainModel, DomainModelClass, ModelPropsValidateFn } from "..";
|
|
2
|
+
export declare const PropsValidator: <T extends AnyDomainModel>(target: DomainModelClass<T>, key: string, propertyDescriptor: TypedPropertyDescriptor<ModelPropsValidateFn<T>>) => void;
|
|
@@ -3,6 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PropsValidator = void 0;
|
|
4
4
|
const __1 = require("..");
|
|
5
5
|
const PropsValidator = (target, key, propertyDescriptor) => {
|
|
6
|
-
(0, __1.
|
|
6
|
+
(0, __1.defineModelPropsValidator)(target, new __1.ModelPropsValidatorWrapper(propertyDescriptor.value.bind(target)));
|
|
7
7
|
};
|
|
8
8
|
exports.PropsValidator = PropsValidator;
|
package/base/meta/index.d.ts
CHANGED
package/base/meta/index.js
CHANGED
|
@@ -22,3 +22,4 @@ __exportStar(require("./model-props-validator"), exports);
|
|
|
22
22
|
__exportStar(require("./model-version"), exports);
|
|
23
23
|
__exportStar(require("./model-domain"), exports);
|
|
24
24
|
__exportStar(require("./model-mutable"), exports);
|
|
25
|
+
__exportStar(require("./model-props-type"), exports);
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { DomainName } from "../domain";
|
|
2
2
|
import { AnyDomainModel, DomainModelClass } from "../model";
|
|
3
|
-
export declare const MODEL_DOMAIN: unique symbol;
|
|
4
3
|
export declare const defineModelDomain: <T extends AnyDomainModel>(target: DomainModelClass<T>, domainName: DomainName) => void;
|
|
5
4
|
export declare const getModelDomain: <T extends AnyDomainModel>(target: DomainModelClass<T>) => string;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getModelDomain = exports.defineModelDomain =
|
|
3
|
+
exports.getModelDomain = exports.defineModelDomain = void 0;
|
|
4
4
|
const domain_1 = require("../domain");
|
|
5
|
-
|
|
5
|
+
const MODEL_DOMAIN = Symbol.for("MODEL_DOMAIN");
|
|
6
6
|
const defineModelDomain = (target, domainName) => {
|
|
7
|
-
Reflect.defineMetadata(
|
|
7
|
+
Reflect.defineMetadata(MODEL_DOMAIN, domainName, target);
|
|
8
8
|
};
|
|
9
9
|
exports.defineModelDomain = defineModelDomain;
|
|
10
10
|
const getModelDomain = (target) => {
|
|
11
|
-
if (!Reflect.hasOwnMetadata(
|
|
11
|
+
if (!Reflect.hasOwnMetadata(MODEL_DOMAIN, target))
|
|
12
12
|
(0, exports.defineModelDomain)(target, domain_1.DEFAULT_DOMAIN);
|
|
13
|
-
return Reflect.getOwnMetadata(
|
|
13
|
+
return Reflect.getOwnMetadata(MODEL_DOMAIN, target);
|
|
14
14
|
};
|
|
15
15
|
exports.getModelDomain = getModelDomain;
|
package/base/meta/model-name.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getModelName = exports.defineModelName = exports.$ModelName = void 0;
|
|
4
|
+
const MODEL_NAME = Symbol.for("MODEL_NAME");
|
|
4
5
|
class $ModelName extends String {
|
|
5
6
|
static validate(modelName) {
|
|
6
7
|
if (modelName.trim().length === 0)
|
|
@@ -12,7 +13,6 @@ class $ModelName extends String {
|
|
|
12
13
|
}
|
|
13
14
|
}
|
|
14
15
|
exports.$ModelName = $ModelName;
|
|
15
|
-
const MODEL_NAME = Symbol.for("MODEL_NAME");
|
|
16
16
|
const defineModelName = (target, modelName) => {
|
|
17
17
|
Reflect.defineMetadata(MODEL_NAME, new $ModelName(modelName), target);
|
|
18
18
|
};
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getResolvedPropertyAccessors = exports.registerPropertyAccessor = exports.getDeclaredPropertyAccessors = exports.ModelPropertyAccessorMap = void 0;
|
|
4
4
|
const model_1 = require("../model");
|
|
5
5
|
const OWN_MODEL_PROPERTY_ACCESSORS = Symbol.for("OWN_MODEL_PROPERTY_ACCESSORS");
|
|
6
|
-
const MODEL_PROPERTY_ACCESSORS = Symbol.for("MODEL_PROPERTY_ACCESSORS");
|
|
7
6
|
class ModelPropertyAccessorMap extends Map {
|
|
8
7
|
}
|
|
9
8
|
exports.ModelPropertyAccessorMap = ModelPropertyAccessorMap;
|
|
@@ -24,22 +23,16 @@ const registerPropertyAccessor = (target, key, propTargetKey, propConverter) =>
|
|
|
24
23
|
};
|
|
25
24
|
exports.registerPropertyAccessor = registerPropertyAccessor;
|
|
26
25
|
const getResolvedPropertyAccessors = (target) => {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
ownMaps.forEach((map) => map.forEach((meta, key) => result.set(key, meta)));
|
|
39
|
-
return result;
|
|
40
|
-
};
|
|
41
|
-
Reflect.defineMetadata(MODEL_PROPERTY_ACCESSORS, buildMap(target), target);
|
|
42
|
-
}
|
|
43
|
-
return Reflect.getOwnMetadata(MODEL_PROPERTY_ACCESSORS, target);
|
|
26
|
+
const result = new ModelPropertyAccessorMap();
|
|
27
|
+
const ownMaps = [];
|
|
28
|
+
let current = target;
|
|
29
|
+
do {
|
|
30
|
+
if (model_1.DomainModel.isDomainModel(current)) {
|
|
31
|
+
ownMaps.unshift((0, exports.getDeclaredPropertyAccessors)(current));
|
|
32
|
+
}
|
|
33
|
+
current = Reflect.getPrototypeOf(current);
|
|
34
|
+
} while (current !== null);
|
|
35
|
+
ownMaps.forEach((map) => map.forEach((meta, key) => result.set(key, meta)));
|
|
36
|
+
return result;
|
|
44
37
|
};
|
|
45
38
|
exports.getResolvedPropertyAccessors = getResolvedPropertyAccessors;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Class } from "type-fest";
|
|
2
|
+
import { AnyDomainModel, DomainModelClass, InferredProps } from "../model";
|
|
3
|
+
export declare const defineModelPropsType: <T extends AnyDomainModel>(target: DomainModelClass<T>, propsType: Class<InferredProps<T>>) => void;
|
|
4
|
+
export declare const getModelPropsType: <T extends AnyDomainModel>(target: DomainModelClass<T>) => Class<InferredProps<T>> | undefined;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getModelPropsType = exports.defineModelPropsType = void 0;
|
|
4
|
+
const MODEL_PROPS_TYPE = Symbol.for("MODEL_PROPS_TYPE");
|
|
5
|
+
const defineModelPropsType = (target, propsType) => {
|
|
6
|
+
Reflect.defineMetadata(MODEL_PROPS_TYPE, propsType, target);
|
|
7
|
+
};
|
|
8
|
+
exports.defineModelPropsType = defineModelPropsType;
|
|
9
|
+
const getModelPropsType = (target) => {
|
|
10
|
+
return Reflect.getMetadata(MODEL_PROPS_TYPE, target);
|
|
11
|
+
};
|
|
12
|
+
exports.getModelPropsType = getModelPropsType;
|
|
@@ -1,6 +1,16 @@
|
|
|
1
|
+
import { Class } from "type-fest";
|
|
1
2
|
import { AnyDomainModel, InferredProps } from "../model";
|
|
2
|
-
export
|
|
3
|
-
|
|
3
|
+
export interface ModelPropsValidator<T extends AnyDomainModel = AnyDomainModel> {
|
|
4
|
+
validate(props: InferredProps<T>): void;
|
|
5
|
+
}
|
|
6
|
+
export type ModelPropsValidateFn<T extends AnyDomainModel> = ModelPropsValidator<T>["validate"];
|
|
7
|
+
export type ModelPropsValidatorBuilder<T extends AnyDomainModel> = () => ModelPropsValidator<T>;
|
|
8
|
+
export type ModelPropsValidatorWrapperInput<T extends AnyDomainModel> = Class<ModelPropsValidator<T>, []> | ModelPropsValidator<T> | ModelPropsValidateFn<T> | ModelPropsValidatorBuilder<T>;
|
|
9
|
+
export declare class ModelPropsValidatorWrapper<T extends AnyDomainModel> implements ModelPropsValidator<T> {
|
|
10
|
+
private input;
|
|
11
|
+
constructor(input: ModelPropsValidatorWrapperInput<T>);
|
|
12
|
+
validate(props: InferredProps<T>): void;
|
|
13
|
+
}
|
|
14
|
+
export declare const defineModelPropsValidator: <T extends AnyDomainModel>(target: object, validator: ModelPropsValidator<T>) => void;
|
|
4
15
|
export declare const getOwnModelPropsValidator: <T extends AnyDomainModel>(target: object) => ModelPropsValidator<T> | undefined;
|
|
5
|
-
export declare const MODEL_PROPS_VALIDATORS: unique symbol;
|
|
6
16
|
export declare const getModelPropsValidators: (target: object) => ModelPropsValidator[];
|
|
@@ -3,31 +3,49 @@ 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.getModelPropsValidators = exports.
|
|
6
|
+
exports.getModelPropsValidators = exports.getOwnModelPropsValidator = exports.defineModelPropsValidator = exports.ModelPropsValidatorWrapper = void 0;
|
|
7
|
+
const is_class_1 = __importDefault(require("is-class"));
|
|
7
8
|
const lodash_1 = __importDefault(require("lodash"));
|
|
9
|
+
class ModelPropsValidatorWrapper {
|
|
10
|
+
constructor(input) {
|
|
11
|
+
this.input = input;
|
|
12
|
+
}
|
|
13
|
+
validate(props) {
|
|
14
|
+
if ((0, is_class_1.default)(this.input)) {
|
|
15
|
+
const instance = new this.input();
|
|
16
|
+
return instance.validate(props);
|
|
17
|
+
}
|
|
18
|
+
if (typeof this.input === "function") {
|
|
19
|
+
const res = this.input(props);
|
|
20
|
+
const resIsValidator = res && typeof res === "object" && "validate" in res;
|
|
21
|
+
if (resIsValidator) {
|
|
22
|
+
return res.validate(props);
|
|
23
|
+
}
|
|
24
|
+
return res;
|
|
25
|
+
}
|
|
26
|
+
return this.input.validate(props);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.ModelPropsValidatorWrapper = ModelPropsValidatorWrapper;
|
|
8
30
|
const OWN_MODEL_PROPS_VALIDATOR = Symbol.for("OWN_MODEL_PROPS_VALIDATOR");
|
|
9
|
-
const
|
|
31
|
+
const defineModelPropsValidator = (target, validator) => {
|
|
10
32
|
Reflect.defineMetadata(OWN_MODEL_PROPS_VALIDATOR, validator, target);
|
|
11
33
|
};
|
|
12
|
-
exports.
|
|
34
|
+
exports.defineModelPropsValidator = defineModelPropsValidator;
|
|
13
35
|
const getOwnModelPropsValidator = (target) => {
|
|
14
36
|
return Reflect.getOwnMetadata(OWN_MODEL_PROPS_VALIDATOR, target);
|
|
15
37
|
};
|
|
16
38
|
exports.getOwnModelPropsValidator = getOwnModelPropsValidator;
|
|
17
|
-
exports.MODEL_PROPS_VALIDATORS = Symbol.for("MODEL_PROPS_VALIDATORS");
|
|
18
39
|
const getModelPropsValidators = (target) => {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
Reflect.defineMetadata(exports.MODEL_PROPS_VALIDATORS, result, target);
|
|
30
|
-
}
|
|
31
|
-
return Reflect.getOwnMetadata(exports.MODEL_PROPS_VALIDATORS, target);
|
|
40
|
+
let result = [];
|
|
41
|
+
let _target = target;
|
|
42
|
+
do {
|
|
43
|
+
const ownValidator = (0, exports.getOwnModelPropsValidator)(_target);
|
|
44
|
+
if (ownValidator)
|
|
45
|
+
result.push(ownValidator);
|
|
46
|
+
_target = Reflect.getPrototypeOf(_target);
|
|
47
|
+
} while (_target !== null);
|
|
48
|
+
result = lodash_1.default.uniq(result);
|
|
49
|
+
return result;
|
|
32
50
|
};
|
|
33
51
|
exports.getModelPropsValidators = getModelPropsValidators;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.defineModelStaticValueProperty = exports.getModelStaticValue = exports.setModelStaticValue = exports.getOwnModelStaticValues = exports.ModelStaticValuesMap = exports.ModelStaticValue = void 0;
|
|
4
|
+
const OWN_MODEL_STATIC_VALUES = Symbol.for("OWN_MODEL_STATIC_VALUES");
|
|
4
5
|
class ModelStaticValue {
|
|
5
6
|
constructor(value) {
|
|
6
7
|
this._value = value;
|
|
@@ -13,7 +14,6 @@ class ModelStaticValue {
|
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
16
|
exports.ModelStaticValue = ModelStaticValue;
|
|
16
|
-
const OWN_MODEL_STATIC_VALUES = Symbol.for("OWN_MODEL_STATIC_VALUES");
|
|
17
17
|
class ModelStaticValuesMap extends Map {
|
|
18
18
|
}
|
|
19
19
|
exports.ModelStaticValuesMap = ModelStaticValuesMap;
|
|
@@ -29,12 +29,11 @@ const setModelStaticValue = (target, key, value) => {
|
|
|
29
29
|
};
|
|
30
30
|
exports.setModelStaticValue = setModelStaticValue;
|
|
31
31
|
const getModelStaticValue = (target, key) => {
|
|
32
|
-
var _a;
|
|
33
32
|
let _target = target;
|
|
34
33
|
do {
|
|
35
34
|
const staticValues = (0, exports.getOwnModelStaticValues)(_target);
|
|
36
35
|
if (staticValues.has(key))
|
|
37
|
-
return
|
|
36
|
+
return staticValues.get(key)?.value;
|
|
38
37
|
_target = Reflect.getPrototypeOf(_target);
|
|
39
38
|
} while (_target !== null);
|
|
40
39
|
return undefined;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getModelVersion = exports.defineModelVersion = exports.$ModelVersion = void 0;
|
|
4
|
+
const MODEL_VERSION = Symbol.for("MODEL_VERSION");
|
|
4
5
|
class $ModelVersion extends Number {
|
|
5
6
|
static validate(modelVersion) {
|
|
6
7
|
if (modelVersion < 0 && Number.isInteger(modelVersion))
|
|
@@ -12,7 +13,6 @@ class $ModelVersion extends Number {
|
|
|
12
13
|
}
|
|
13
14
|
}
|
|
14
15
|
exports.$ModelVersion = $ModelVersion;
|
|
15
|
-
const MODEL_VERSION = Symbol.for("MODEL_VERSION");
|
|
16
16
|
const defineModelVersion = (target, modelVersion) => {
|
|
17
17
|
Reflect.defineMetadata(MODEL_VERSION, new $ModelVersion(modelVersion), target);
|
|
18
18
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Class } from "type-fest";
|
|
2
|
+
import { AnyDomainModel, DomainModelClass, InferredProps } from ".";
|
|
2
3
|
import { ModelId, ModelName, ModelPropertyAccessorMap, ModelPropsValidator, ModelStaticValuesMap, ModelVersion } from "../meta";
|
|
3
4
|
export declare class ModelDescriptor<T extends AnyDomainModel = AnyDomainModel> {
|
|
4
5
|
readonly modelClass: DomainModelClass<T>;
|
|
@@ -13,4 +14,5 @@ export declare class ModelDescriptor<T extends AnyDomainModel = AnyDomainModel>
|
|
|
13
14
|
ownModelStaticValues(): ModelStaticValuesMap<T>;
|
|
14
15
|
declaredPropertyAccessors(): ModelPropertyAccessorMap<T>;
|
|
15
16
|
resolvedPropertyAccessors(): ModelPropertyAccessorMap<T>;
|
|
17
|
+
propsType(): Class<InferredProps<T>> | undefined;
|
|
16
18
|
}
|
|
@@ -10,8 +10,7 @@ class ModelDescriptor {
|
|
|
10
10
|
return (0, meta_1.getModelDomain)(this.modelClass);
|
|
11
11
|
}
|
|
12
12
|
modelMutable() {
|
|
13
|
-
|
|
14
|
-
return (_a = (0, meta_1.getModelMutable)(this.modelClass)) !== null && _a !== void 0 ? _a : false;
|
|
13
|
+
return (0, meta_1.getModelMutable)(this.modelClass) ?? false;
|
|
15
14
|
}
|
|
16
15
|
modelName() {
|
|
17
16
|
return (0, meta_1.getModelName)(this.modelClass);
|
|
@@ -37,5 +36,8 @@ class ModelDescriptor {
|
|
|
37
36
|
resolvedPropertyAccessors() {
|
|
38
37
|
return (0, meta_1.getResolvedPropertyAccessors)(this.modelClass.prototype);
|
|
39
38
|
}
|
|
39
|
+
propsType() {
|
|
40
|
+
return (0, meta_1.getModelPropsType)(this.modelClass);
|
|
41
|
+
}
|
|
40
42
|
}
|
|
41
43
|
exports.ModelDescriptor = ModelDescriptor;
|
package/base/model/model.js
CHANGED
|
@@ -30,8 +30,7 @@ class DomainModel {
|
|
|
30
30
|
configurable: false,
|
|
31
31
|
enumerable: true,
|
|
32
32
|
get() {
|
|
33
|
-
|
|
34
|
-
const value = (_a = this._props) === null || _a === void 0 ? void 0 : _a[propTargetKey];
|
|
33
|
+
const value = this._props?.[propTargetKey];
|
|
35
34
|
if (!propConverter)
|
|
36
35
|
return value;
|
|
37
36
|
return propConverter(value);
|
|
@@ -43,7 +42,9 @@ class DomainModel {
|
|
|
43
42
|
}
|
|
44
43
|
validateProps(props) {
|
|
45
44
|
const modelPropsValidators = this.modelDescriptor().modelPropsValidators();
|
|
46
|
-
modelPropsValidators.forEach((propsValidator) => propsValidator.
|
|
45
|
+
modelPropsValidators.forEach((propsValidator) => propsValidator.validate(props)
|
|
46
|
+
// propsValidator.call(this.constructor, props)
|
|
47
|
+
);
|
|
47
48
|
}
|
|
48
49
|
validate() {
|
|
49
50
|
this.validateProps(this._props);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./props-validator";
|
package/common/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
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("./props-validator"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./use-class-validator";
|
|
@@ -0,0 +1,17 @@
|
|
|
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("./use-class-validator"), exports);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ValidationError, ValidatorOptions } from "class-validator";
|
|
2
|
+
import { Class } from "type-fest";
|
|
3
|
+
import { AnyDomainModel, InferredProps, ModelPropsValidator } from "../../base";
|
|
4
|
+
export declare function UseClassValidator<T extends AnyDomainModel>(validatorOptions?: ValidatorOptions): ClassDecorator;
|
|
5
|
+
export declare function UseClassValidator<T extends AnyDomainModel>(propsType: Class<InferredProps<T>>, validatorOptions?: ValidatorOptions): ClassDecorator;
|
|
6
|
+
export declare class ClassValidatorError extends Error {
|
|
7
|
+
readonly errors: ValidationError[];
|
|
8
|
+
static getErrorMessage(errors: ValidationError[]): string;
|
|
9
|
+
constructor(errors: ValidationError[]);
|
|
10
|
+
}
|
|
11
|
+
export declare class ClassValidatorModelPropsValidator<T extends AnyDomainModel> implements ModelPropsValidator<T> {
|
|
12
|
+
readonly propsClass: Class<InferredProps<T>>;
|
|
13
|
+
readonly validatorOptions?: ValidatorOptions | undefined;
|
|
14
|
+
constructor(propsClass: Class<InferredProps<T>>, validatorOptions?: ValidatorOptions | undefined);
|
|
15
|
+
transform(props: InferredProps<T>): InferredProps<T>;
|
|
16
|
+
validate(props: InferredProps<T>): void;
|
|
17
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ClassValidatorModelPropsValidator = exports.ClassValidatorError = void 0;
|
|
4
|
+
exports.UseClassValidator = UseClassValidator;
|
|
5
|
+
const class_transformer_1 = require("class-transformer");
|
|
6
|
+
const class_validator_1 = require("class-validator");
|
|
7
|
+
const base_1 = require("../../base");
|
|
8
|
+
function UseClassValidator(p1, p2) {
|
|
9
|
+
return ((target) => {
|
|
10
|
+
const { propsType, validatorOptions } = resolveUseClassValidatorArgs(p1, p2, target);
|
|
11
|
+
const builder = () => new ClassValidatorModelPropsValidator(propsType, validatorOptions);
|
|
12
|
+
(0, base_1.defineModelPropsValidator)(target, new base_1.ModelPropsValidatorWrapper(builder));
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Internal helper for resolving @UseClassValidator overloads.
|
|
17
|
+
*/
|
|
18
|
+
function resolveUseClassValidatorArgs(p1, p2, target) {
|
|
19
|
+
let propsType;
|
|
20
|
+
let validatorOptions;
|
|
21
|
+
if (typeof p1 === "function") {
|
|
22
|
+
propsType = p1;
|
|
23
|
+
validatorOptions = p2;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
validatorOptions = p1;
|
|
27
|
+
}
|
|
28
|
+
propsType ?? (propsType = (0, base_1.getModelPropsType)(target));
|
|
29
|
+
if (!propsType) {
|
|
30
|
+
throw new Error(`Props type must be provided or defined for ${target.name}`);
|
|
31
|
+
}
|
|
32
|
+
return { propsType, validatorOptions };
|
|
33
|
+
}
|
|
34
|
+
class ClassValidatorError extends Error {
|
|
35
|
+
static getErrorMessage(errors) {
|
|
36
|
+
return errors
|
|
37
|
+
.map((error) => Object.values(error.constraints || {}).join(", "))
|
|
38
|
+
.join("\n");
|
|
39
|
+
}
|
|
40
|
+
constructor(errors) {
|
|
41
|
+
super(ClassValidatorError.getErrorMessage(errors));
|
|
42
|
+
this.errors = errors;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.ClassValidatorError = ClassValidatorError;
|
|
46
|
+
class ClassValidatorModelPropsValidator {
|
|
47
|
+
constructor(propsClass, validatorOptions) {
|
|
48
|
+
this.propsClass = propsClass;
|
|
49
|
+
this.validatorOptions = validatorOptions;
|
|
50
|
+
}
|
|
51
|
+
transform(props) {
|
|
52
|
+
return (0, class_transformer_1.plainToInstance)(this.propsClass, props);
|
|
53
|
+
}
|
|
54
|
+
validate(props) {
|
|
55
|
+
const transformedProps = this.transform(props);
|
|
56
|
+
const errors = (0, class_validator_1.validateSync)(transformedProps, this.validatorOptions);
|
|
57
|
+
if (errors.length) {
|
|
58
|
+
throw new ClassValidatorError(errors);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.ClassValidatorModelPropsValidator = ClassValidatorModelPropsValidator;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { EnumClass, EnumValue } from "../../../core";
|
|
2
|
-
export declare const IsEnum: (value?: EnumValue) => <T extends EnumClass
|
|
2
|
+
export declare const IsEnum: (value?: EnumValue) => <T extends EnumClass>(target: T, key: string) => void;
|
|
@@ -4,7 +4,7 @@ exports.IsEnum = void 0;
|
|
|
4
4
|
const base_1 = require("../../../base");
|
|
5
5
|
const IsEnum = (value) => {
|
|
6
6
|
return (target, key) => {
|
|
7
|
-
(0, base_1.Static)(() => new target(value
|
|
7
|
+
(0, base_1.Static)(() => new target(value ?? key))(target, key);
|
|
8
8
|
};
|
|
9
9
|
};
|
|
10
10
|
exports.IsEnum = IsEnum;
|
|
@@ -21,7 +21,10 @@ let Aggregate = class Aggregate extends model_with_id_1.ModelWithId {
|
|
|
21
21
|
this._version = metadata.version;
|
|
22
22
|
}
|
|
23
23
|
metadata() {
|
|
24
|
-
return
|
|
24
|
+
return {
|
|
25
|
+
...super.metadata(),
|
|
26
|
+
version: this.version(),
|
|
27
|
+
};
|
|
25
28
|
}
|
|
26
29
|
createEventSource() {
|
|
27
30
|
return {
|
|
@@ -35,7 +38,11 @@ let Aggregate = class Aggregate extends model_with_id_1.ModelWithId {
|
|
|
35
38
|
};
|
|
36
39
|
exports.Aggregate = Aggregate;
|
|
37
40
|
Aggregate.createMetadata = (metadata) => {
|
|
38
|
-
return
|
|
41
|
+
return {
|
|
42
|
+
id: (0, uuid_1.v4)(),
|
|
43
|
+
version: 0,
|
|
44
|
+
...metadata,
|
|
45
|
+
};
|
|
39
46
|
};
|
|
40
47
|
exports.Aggregate = Aggregate = __decorate([
|
|
41
48
|
(0, base_1.Mutable)(true),
|
|
@@ -17,7 +17,7 @@ export declare class ESAggregate<P extends Props> extends Aggregate<P> {
|
|
|
17
17
|
private _pastEvents;
|
|
18
18
|
private _events;
|
|
19
19
|
constructor(metadata: AggregateMetadata, props?: P);
|
|
20
|
-
_constructor(): ESAggregateClass<this
|
|
20
|
+
_constructor(): ESAggregateClass<typeof this>;
|
|
21
21
|
version(): number;
|
|
22
22
|
pastEvents(): AnyEvent[];
|
|
23
23
|
events(): AnyEvent[];
|
|
@@ -31,9 +31,9 @@ export declare class ESAggregate<P extends Props> extends Aggregate<P> {
|
|
|
31
31
|
applyEvent<E extends AnyEvent>(event: E): void;
|
|
32
32
|
applyEvents(events: AnyEvent[]): void;
|
|
33
33
|
applyNewEvent<E extends AnyEvent>(eventClass: EventClassWithTypedConstructor<E>, props: InferredProps<E>): void;
|
|
34
|
-
getCommandHandler<C extends AnyCommand>(command: C): CommandHandler<C
|
|
34
|
+
getCommandHandler<C extends AnyCommand>(command: C): CommandHandler<C>;
|
|
35
35
|
handleCommand<C extends AnyCommand>(command: C): AnyEvent[];
|
|
36
|
-
takeSnapshot(): Snapshot<this>;
|
|
36
|
+
takeSnapshot(): Snapshot<typeof this>;
|
|
37
37
|
protected commitEvents(): void;
|
|
38
38
|
publishEvents<R = any>(publisher: IAggregateEventPublisher<R>): R;
|
|
39
39
|
}
|
|
@@ -10,7 +10,7 @@ export declare class StateAggregate<P extends Props> extends Aggregate<P> {
|
|
|
10
10
|
static build<T extends AnyStateAggregate>(this: StateAggregateClassWithTypedConstructor<T>, props: InferredProps<T>, metadata?: Partial<StateAggregateMetadata>): T;
|
|
11
11
|
private _events;
|
|
12
12
|
constructor(metadata: StateAggregateMetadata, props: P);
|
|
13
|
-
_constructor(): StateAggregateClass<this
|
|
13
|
+
_constructor(): StateAggregateClass<typeof this>;
|
|
14
14
|
props(): P;
|
|
15
15
|
version(): number;
|
|
16
16
|
events(): AnyEvent[];
|
|
@@ -7,7 +7,7 @@ export interface EntityMetadata extends ModelWithIdMetadata {
|
|
|
7
7
|
export declare class Entity<P extends Props> extends ModelWithId<P> {
|
|
8
8
|
static build<T extends AnyEntity>(this: EntityClassWithTypedConstructor<T>, props: InferredProps<T>, id?: Id): T;
|
|
9
9
|
constructor(metadata: EntityMetadata, props: P);
|
|
10
|
-
_constructor(): EntityClass<this
|
|
10
|
+
_constructor(): EntityClass<typeof this>;
|
|
11
11
|
}
|
|
12
12
|
export type AnyEntity = Entity<Props>;
|
|
13
13
|
export interface EntityClass<T extends AnyEntity = AnyEntity, Arguments extends unknown[] = any[]> extends Class<T, Arguments>, ClassStatic<typeof Entity<InferredProps<T>>> {
|
|
@@ -15,7 +15,7 @@ const base_1 = require("../../../base");
|
|
|
15
15
|
const model_with_id_1 = require("../model-with-id");
|
|
16
16
|
let Entity = class Entity extends model_with_id_1.ModelWithId {
|
|
17
17
|
static build(props, id) {
|
|
18
|
-
return new this({ id: id
|
|
18
|
+
return new this({ id: id ?? (0, uuid_1.v4)() }, props);
|
|
19
19
|
}
|
|
20
20
|
constructor(metadata, props) {
|
|
21
21
|
super(metadata);
|
|
@@ -11,7 +11,7 @@ export declare class Command<P extends Props> extends Message<P> {
|
|
|
11
11
|
static commandType<T extends AnyCommand>(this: CommandClass<T>): string;
|
|
12
12
|
protected readonly _commandType: CommandType;
|
|
13
13
|
constructor(metadata: Omit<CommandMetadata, "commandType">, props: P);
|
|
14
|
-
_constructor(): CommandClass<this
|
|
14
|
+
_constructor(): CommandClass<typeof this>;
|
|
15
15
|
metadata(): CommandMetadata;
|
|
16
16
|
commandType(): string;
|
|
17
17
|
}
|
|
@@ -18,7 +18,10 @@ class Command extends message_1.Message {
|
|
|
18
18
|
return this.constructor;
|
|
19
19
|
}
|
|
20
20
|
metadata() {
|
|
21
|
-
return
|
|
21
|
+
return {
|
|
22
|
+
...super.metadata(),
|
|
23
|
+
commandType: this._commandType,
|
|
24
|
+
};
|
|
22
25
|
}
|
|
23
26
|
commandType() {
|
|
24
27
|
return this._commandType;
|
|
@@ -19,11 +19,11 @@ export declare class Event<P extends Props> extends Message<P> {
|
|
|
19
19
|
private readonly _eventType;
|
|
20
20
|
private readonly _source;
|
|
21
21
|
constructor(metadata: Omit<EventMetadata, "eventType">, props: P);
|
|
22
|
-
_constructor(): EventClass<this
|
|
22
|
+
_constructor(): EventClass<typeof this>;
|
|
23
23
|
metadata(): EventMetadata;
|
|
24
24
|
eventType(): string;
|
|
25
25
|
source(): Readonly<{
|
|
26
|
-
aggregateId:
|
|
26
|
+
aggregateId: Id;
|
|
27
27
|
aggregateVersion: number;
|
|
28
28
|
}>;
|
|
29
29
|
}
|
|
@@ -5,7 +5,7 @@ const meta_1 = require("../../meta");
|
|
|
5
5
|
const message_1 = require("./message");
|
|
6
6
|
class Event extends message_1.Message {
|
|
7
7
|
static build(props, metadata) {
|
|
8
|
-
return new this(
|
|
8
|
+
return new this({ ...this.createMetadata(), ...metadata }, props);
|
|
9
9
|
}
|
|
10
10
|
static eventType() {
|
|
11
11
|
return (0, meta_1.getEventType)(this);
|
|
@@ -19,7 +19,11 @@ class Event extends message_1.Message {
|
|
|
19
19
|
return this.constructor;
|
|
20
20
|
}
|
|
21
21
|
metadata() {
|
|
22
|
-
return
|
|
22
|
+
return {
|
|
23
|
+
...super.metadata(),
|
|
24
|
+
eventType: this._eventType,
|
|
25
|
+
source: this._source,
|
|
26
|
+
};
|
|
23
27
|
}
|
|
24
28
|
eventType() {
|
|
25
29
|
return this._eventType;
|
|
@@ -14,9 +14,9 @@ export type MessageMetadataInput = Partial<MessageMetadata>;
|
|
|
14
14
|
export declare class Message<P extends Props> extends ModelWithId<P> {
|
|
15
15
|
static createMetadata: (metadata?: MessageMetadataInput) => {
|
|
16
16
|
timestamp: number;
|
|
17
|
-
causationId?: string
|
|
17
|
+
causationId?: string;
|
|
18
18
|
correlationIds: CorrelationIds;
|
|
19
|
-
id:
|
|
19
|
+
id: import("../model-with-id").Id;
|
|
20
20
|
};
|
|
21
21
|
static buildMessage<T extends AnyMessage>(this: MessageClassWithTypedConstructor<T>, props: InferredProps<T>, metadata?: MessageMetadataInput): T;
|
|
22
22
|
private readonly _timestamp;
|
|
@@ -28,7 +28,12 @@ let Message = class Message extends model_with_id_1.ModelWithId {
|
|
|
28
28
|
return super.props();
|
|
29
29
|
}
|
|
30
30
|
metadata() {
|
|
31
|
-
return
|
|
31
|
+
return {
|
|
32
|
+
...super.metadata(),
|
|
33
|
+
timestamp: this._timestamp,
|
|
34
|
+
correlationIds: this._correlationIds,
|
|
35
|
+
causationId: this._causationId,
|
|
36
|
+
};
|
|
32
37
|
}
|
|
33
38
|
timestamp() {
|
|
34
39
|
return this._timestamp;
|
|
@@ -52,7 +57,12 @@ let Message = class Message extends model_with_id_1.ModelWithId {
|
|
|
52
57
|
};
|
|
53
58
|
exports.Message = Message;
|
|
54
59
|
Message.createMetadata = (metadata) => {
|
|
55
|
-
return
|
|
60
|
+
return {
|
|
61
|
+
id: (0, uuid_1.v4)(),
|
|
62
|
+
timestamp: Date.now(),
|
|
63
|
+
correlationIds: {},
|
|
64
|
+
...metadata,
|
|
65
|
+
};
|
|
56
66
|
};
|
|
57
67
|
exports.Message = Message = __decorate([
|
|
58
68
|
(0, base_1.Mutable)(false),
|
|
@@ -8,7 +8,10 @@ class ModelWithId extends base_1.DomainModel {
|
|
|
8
8
|
this._id = metadata.id;
|
|
9
9
|
}
|
|
10
10
|
metadata() {
|
|
11
|
-
return
|
|
11
|
+
return {
|
|
12
|
+
...super.metadata(),
|
|
13
|
+
id: this._id,
|
|
14
|
+
};
|
|
12
15
|
}
|
|
13
16
|
id() {
|
|
14
17
|
return this._id;
|
|
@@ -3,7 +3,7 @@ import { DomainModel, InferredProps, Props, PropsBuilder } from "../../../base";
|
|
|
3
3
|
import { ClassStatic } from "../../../types";
|
|
4
4
|
export declare class ValueObject<P extends Props> extends DomainModel<P> {
|
|
5
5
|
constructor(props?: P | PropsBuilder<ValueObject<P>>);
|
|
6
|
-
_constructor(): ValueObjectClass<this>;
|
|
6
|
+
_constructor(): ValueObjectClass<typeof this>;
|
|
7
7
|
props(): P;
|
|
8
8
|
equals<V extends AnyValueObject>(vo: V): boolean;
|
|
9
9
|
with(props: Partial<P>): typeof this;
|
|
@@ -1,24 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.EventDispatcher = void 0;
|
|
13
4
|
class EventDispatcher {
|
|
14
5
|
constructor(subscriberRegistry) {
|
|
15
6
|
this.subscriberRegistry = subscriberRegistry;
|
|
16
7
|
}
|
|
17
|
-
dispatch(event) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
yield Promise.all(subscribers.map((subscriber) => subscriber.handleEvent(event)));
|
|
21
|
-
});
|
|
8
|
+
async dispatch(event) {
|
|
9
|
+
const subscribers = this.subscriberRegistry.getAllSubscribersForEvent(event.constructor);
|
|
10
|
+
await Promise.all(subscribers.map((subscriber) => subscriber.handleEvent(event)));
|
|
22
11
|
}
|
|
23
12
|
}
|
|
24
13
|
exports.EventDispatcher = EventDispatcher;
|
|
@@ -4,8 +4,7 @@ exports.DynamicEventSubscriber = exports.EventSubscriber = void 0;
|
|
|
4
4
|
const decorators_1 = require("./decorators");
|
|
5
5
|
class EventSubscriber {
|
|
6
6
|
subscribeToEvents() {
|
|
7
|
-
|
|
8
|
-
const subscribedEvents = (_a = Reflect.getOwnMetadata(decorators_1.SubscribedEventsMetaKey, this.constructor)) !== null && _a !== void 0 ? _a : [];
|
|
7
|
+
const subscribedEvents = Reflect.getOwnMetadata(decorators_1.SubscribedEventsMetaKey, this.constructor) ?? [];
|
|
9
8
|
return subscribedEvents;
|
|
10
9
|
}
|
|
11
10
|
}
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"ddd-node","version":"34.
|
|
1
|
+
{"name":"ddd-node","version":"34.2.0","description":"Domain Driven Design base for NodeJs","type":"commonjs","main":"index.js","types":"index.d.ts","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","tsconfig-paths":"^4.2.0","typescript":"^5.9.3"},"dependencies":{"class-transformer":"^0.5.1","is-class":"^0.0.9","lodash":"^4.17.21","reflect-metadata":"^0.1.13","ts-node":"^10.9.2","tsc-alias":"^1.8.8","type-fest":"^4.20.1","uuid":"^9.0.1"},"peerDependencies":{"class-validator":"^0.14.2"}}
|