ddd-node 34.2.0 → 35.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.
- package/base/meta/model-id.js +1 -1
- package/base/meta/model-props-validator.js +1 -1
- package/base/model/model-descriptor.d.ts +11 -11
- package/base/model/model-descriptor.js +11 -11
- package/base/model/model.d.ts +7 -7
- package/base/model/model.js +9 -13
- package/base/model-registry.d.ts +1 -1
- package/base/model-registry.js +3 -3
- package/core/decorators/enum/is-enum.d.ts +2 -2
- package/core/decorators/enum/is-enum.js +4 -1
- package/core/decorators/es-aggregate/handle.js +1 -1
- package/core/decorators/es-aggregate/when.js +1 -1
- package/core/meta/{command.metadata.js → command.js} +5 -5
- package/core/meta/enum.d.ts +7 -0
- package/core/meta/enum.js +33 -0
- package/core/meta/es-aggregate/{command-handler-map.d.ts → command-handler.d.ts} +2 -3
- package/core/meta/es-aggregate/{command-handler-map.js → command-handler.js} +11 -10
- package/core/meta/es-aggregate/{event-applier-map.d.ts → event-applier.d.ts} +1 -3
- package/core/meta/es-aggregate/{event-applier-map.js → event-applier.js} +11 -11
- package/core/meta/es-aggregate/index.d.ts +2 -2
- package/core/meta/es-aggregate/index.js +2 -2
- package/core/meta/{event.metadata.js → event.js} +4 -4
- package/core/meta/index.d.ts +3 -2
- package/core/meta/index.js +3 -2
- package/core/model/aggregate/aggregate.d.ts +9 -14
- package/core/model/aggregate/aggregate.js +11 -25
- package/core/model/aggregate/es-aggregate.d.ts +13 -9
- package/core/model/aggregate/es-aggregate.js +27 -25
- package/core/model/aggregate/event-releaser.d.ts +4 -0
- package/core/model/aggregate/index.d.ts +1 -0
- package/core/model/aggregate/index.js +1 -0
- package/core/model/aggregate/state-aggregate.d.ts +9 -10
- package/core/model/aggregate/state-aggregate.js +12 -11
- package/core/model/aggregate/types.d.ts +0 -4
- package/core/model/entity/entity.d.ts +4 -6
- package/core/model/entity/entity.js +7 -7
- package/core/model/enum/enum.d.ts +1 -0
- package/core/model/enum/enum.js +12 -10
- package/core/model/identified-model/id.js +2 -0
- package/core/model/identified-model/identified-model.d.ts +16 -0
- package/core/model/identified-model/identified-model.js +21 -0
- package/core/model/identified-model/index.d.ts +2 -0
- package/core/model/{model-with-id → identified-model}/index.js +1 -1
- package/core/model/index.d.ts +1 -1
- package/core/model/index.js +1 -1
- package/core/model/message/command.d.ts +8 -6
- package/core/model/message/command.js +5 -10
- package/core/model/message/event.d.ts +8 -10
- package/core/model/message/event.js +6 -12
- package/core/model/message/message.d.ts +12 -22
- package/core/model/message/message.js +23 -34
- package/package.json +1 -1
- package/core/model/model-with-id/index.d.ts +0 -2
- package/core/model/model-with-id/model-with-id.d.ts +0 -13
- package/core/model/model-with-id/model-with-id.js +0 -23
- /package/core/meta/{command.metadata.d.ts → command.d.ts} +0 -0
- /package/core/meta/{event.metadata.d.ts → event.d.ts} +0 -0
- /package/core/model/{model-with-id/id.js → aggregate/event-releaser.js} +0 -0
- /package/core/model/{model-with-id → identified-model}/id.d.ts +0 -0
package/base/meta/model-id.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getModelId = exports.setModelId = exports.$ModelId = void 0;
|
|
4
4
|
const model_name_1 = require("./model-name");
|
|
5
5
|
const model_version_1 = require("./model-version");
|
|
6
|
+
const MODEL_ID = Symbol.for("MODEL_ID");
|
|
6
7
|
class $ModelId extends String {
|
|
7
8
|
static fromValue(value) {
|
|
8
9
|
if (!this.Format.test(value))
|
|
@@ -23,7 +24,6 @@ class $ModelId extends String {
|
|
|
23
24
|
exports.$ModelId = $ModelId;
|
|
24
25
|
$ModelId.Divider = "|";
|
|
25
26
|
$ModelId.Format = new RegExp(/^.+\|[0-9]+$/);
|
|
26
|
-
const MODEL_ID = Symbol.for("MODEL_ID");
|
|
27
27
|
const setModelId = (target, modelId) => {
|
|
28
28
|
Reflect.defineMetadata(MODEL_ID, modelId, target);
|
|
29
29
|
};
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.getModelPropsValidators = exports.getOwnModelPropsValidator = exports.defineModelPropsValidator = exports.ModelPropsValidatorWrapper = void 0;
|
|
7
7
|
const is_class_1 = __importDefault(require("is-class"));
|
|
8
8
|
const lodash_1 = __importDefault(require("lodash"));
|
|
9
|
+
const OWN_MODEL_PROPS_VALIDATOR = Symbol.for("OWN_MODEL_PROPS_VALIDATOR");
|
|
9
10
|
class ModelPropsValidatorWrapper {
|
|
10
11
|
constructor(input) {
|
|
11
12
|
this.input = input;
|
|
@@ -27,7 +28,6 @@ class ModelPropsValidatorWrapper {
|
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
exports.ModelPropsValidatorWrapper = ModelPropsValidatorWrapper;
|
|
30
|
-
const OWN_MODEL_PROPS_VALIDATOR = Symbol.for("OWN_MODEL_PROPS_VALIDATOR");
|
|
31
31
|
const defineModelPropsValidator = (target, validator) => {
|
|
32
32
|
Reflect.defineMetadata(OWN_MODEL_PROPS_VALIDATOR, validator, target);
|
|
33
33
|
};
|
|
@@ -4,15 +4,15 @@ import { ModelId, ModelName, ModelPropertyAccessorMap, ModelPropsValidator, Mode
|
|
|
4
4
|
export declare class ModelDescriptor<T extends AnyDomainModel = AnyDomainModel> {
|
|
5
5
|
readonly modelClass: DomainModelClass<T>;
|
|
6
6
|
constructor(modelClass: DomainModelClass<T>);
|
|
7
|
-
modelDomain(): string;
|
|
8
|
-
modelMutable(): boolean;
|
|
9
|
-
modelName(): ModelName;
|
|
10
|
-
modelVersion(): ModelVersion;
|
|
11
|
-
modelId(): ModelId;
|
|
12
|
-
ownModelPropsValidator(): ModelPropsValidator<T> | undefined;
|
|
13
|
-
modelPropsValidators(): ModelPropsValidator[];
|
|
14
|
-
ownModelStaticValues(): ModelStaticValuesMap<T>;
|
|
15
|
-
declaredPropertyAccessors(): ModelPropertyAccessorMap<T>;
|
|
16
|
-
resolvedPropertyAccessors(): ModelPropertyAccessorMap<T>;
|
|
17
|
-
propsType(): Class<InferredProps<T>> | undefined;
|
|
7
|
+
get modelDomain(): string;
|
|
8
|
+
get modelMutable(): boolean;
|
|
9
|
+
get modelName(): ModelName;
|
|
10
|
+
get modelVersion(): ModelVersion;
|
|
11
|
+
get modelId(): ModelId;
|
|
12
|
+
get ownModelPropsValidator(): ModelPropsValidator<T> | undefined;
|
|
13
|
+
get modelPropsValidators(): ModelPropsValidator[];
|
|
14
|
+
get ownModelStaticValues(): ModelStaticValuesMap<T>;
|
|
15
|
+
get declaredPropertyAccessors(): ModelPropertyAccessorMap<T>;
|
|
16
|
+
get resolvedPropertyAccessors(): ModelPropertyAccessorMap<T>;
|
|
17
|
+
get propsType(): Class<InferredProps<T>> | undefined;
|
|
18
18
|
}
|
|
@@ -6,37 +6,37 @@ class ModelDescriptor {
|
|
|
6
6
|
constructor(modelClass) {
|
|
7
7
|
this.modelClass = modelClass;
|
|
8
8
|
}
|
|
9
|
-
modelDomain() {
|
|
9
|
+
get modelDomain() {
|
|
10
10
|
return (0, meta_1.getModelDomain)(this.modelClass);
|
|
11
11
|
}
|
|
12
|
-
modelMutable() {
|
|
12
|
+
get modelMutable() {
|
|
13
13
|
return (0, meta_1.getModelMutable)(this.modelClass) ?? false;
|
|
14
14
|
}
|
|
15
|
-
modelName() {
|
|
15
|
+
get modelName() {
|
|
16
16
|
return (0, meta_1.getModelName)(this.modelClass);
|
|
17
17
|
}
|
|
18
|
-
modelVersion() {
|
|
18
|
+
get modelVersion() {
|
|
19
19
|
return (0, meta_1.getModelVersion)(this.modelClass);
|
|
20
20
|
}
|
|
21
|
-
modelId() {
|
|
21
|
+
get modelId() {
|
|
22
22
|
return (0, meta_1.getModelId)(this.modelClass);
|
|
23
23
|
}
|
|
24
|
-
ownModelPropsValidator() {
|
|
24
|
+
get ownModelPropsValidator() {
|
|
25
25
|
return (0, meta_1.getOwnModelPropsValidator)(this.modelClass);
|
|
26
26
|
}
|
|
27
|
-
modelPropsValidators() {
|
|
27
|
+
get modelPropsValidators() {
|
|
28
28
|
return (0, meta_1.getModelPropsValidators)(this.modelClass);
|
|
29
29
|
}
|
|
30
|
-
ownModelStaticValues() {
|
|
30
|
+
get ownModelStaticValues() {
|
|
31
31
|
return (0, meta_1.getOwnModelStaticValues)(this.modelClass);
|
|
32
32
|
}
|
|
33
|
-
declaredPropertyAccessors() {
|
|
33
|
+
get declaredPropertyAccessors() {
|
|
34
34
|
return (0, meta_1.getDeclaredPropertyAccessors)(this.modelClass.prototype);
|
|
35
35
|
}
|
|
36
|
-
resolvedPropertyAccessors() {
|
|
36
|
+
get resolvedPropertyAccessors() {
|
|
37
37
|
return (0, meta_1.getResolvedPropertyAccessors)(this.modelClass.prototype);
|
|
38
38
|
}
|
|
39
|
-
propsType() {
|
|
39
|
+
get propsType() {
|
|
40
40
|
return (0, meta_1.getModelPropsType)(this.modelClass);
|
|
41
41
|
}
|
|
42
42
|
}
|
package/base/model/model.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AbstractClass, Class } from "type-fest";
|
|
2
|
+
import { PropertyConverter } from "..";
|
|
2
3
|
import { ClassStatic } from "../../types";
|
|
3
4
|
import { ModelDescriptor } from "./model-descriptor";
|
|
4
|
-
import { PropertyConverter } from "..";
|
|
5
5
|
export interface Props {
|
|
6
6
|
[key: PropertyKey]: any;
|
|
7
7
|
}
|
|
@@ -17,18 +17,18 @@ export declare class DomainModel<P extends Props> {
|
|
|
17
17
|
constructor();
|
|
18
18
|
definePropertyAccessors(): void;
|
|
19
19
|
protected definePropAccessor<K extends keyof P>(key: keyof this, propTargetKey: K, propConverter?: PropertyConverter): void;
|
|
20
|
-
modelDescriptor(): ModelDescriptor<AnyDomainModel>;
|
|
20
|
+
get modelDescriptor(): ModelDescriptor<AnyDomainModel>;
|
|
21
21
|
validateProps(props: P): void;
|
|
22
22
|
validate(): void;
|
|
23
|
-
isPropsEmpty():
|
|
23
|
+
isPropsEmpty(): boolean;
|
|
24
|
+
isPropsInitialized<T extends AnyDomainModel>(this: T): this is InitializedDomainModel<typeof this>;
|
|
24
25
|
props(): P | null;
|
|
25
|
-
metadata(): any;
|
|
26
26
|
protected initializeProps(propsOrBuilder: P | PropsBuilder<typeof this>): void;
|
|
27
27
|
}
|
|
28
|
-
export type InitializedDomainModel<P extends Props> = DomainModel<P> & {
|
|
29
|
-
props(): P;
|
|
30
|
-
};
|
|
31
28
|
export type AnyDomainModel = DomainModel<Props>;
|
|
29
|
+
export type InitializedDomainModel<T extends AnyDomainModel> = T & {
|
|
30
|
+
props(): InferredProps<T>;
|
|
31
|
+
};
|
|
32
32
|
export type InferredProps<T extends AnyDomainModel> = T extends DomainModel<infer P> ? P : never;
|
|
33
33
|
export type DomainModelClass<T extends AnyDomainModel = AnyDomainModel> = Class<T> & ClassStatic<typeof DomainModel<InferredProps<T>>>;
|
|
34
34
|
export type AbstractDomainModelClass<T extends AnyDomainModel = AnyDomainModel> = AbstractClass<T> & ClassStatic<typeof DomainModel<InferredProps<T>>>;
|
package/base/model/model.js
CHANGED
|
@@ -19,9 +19,7 @@ class DomainModel {
|
|
|
19
19
|
this.definePropertyAccessors();
|
|
20
20
|
}
|
|
21
21
|
definePropertyAccessors() {
|
|
22
|
-
this.modelDescriptor()
|
|
23
|
-
.resolvedPropertyAccessors()
|
|
24
|
-
.forEach(({ targetKey, converter }, key) => {
|
|
22
|
+
this.modelDescriptor.resolvedPropertyAccessors.forEach(({ targetKey, converter }, key) => {
|
|
25
23
|
this.definePropAccessor(key, targetKey, converter);
|
|
26
24
|
});
|
|
27
25
|
}
|
|
@@ -37,14 +35,12 @@ class DomainModel {
|
|
|
37
35
|
},
|
|
38
36
|
});
|
|
39
37
|
}
|
|
40
|
-
modelDescriptor() {
|
|
38
|
+
get modelDescriptor() {
|
|
41
39
|
return new model_descriptor_1.ModelDescriptor(this.constructor);
|
|
42
40
|
}
|
|
43
41
|
validateProps(props) {
|
|
44
|
-
const modelPropsValidators = this.modelDescriptor
|
|
45
|
-
modelPropsValidators.forEach((propsValidator) => propsValidator.validate(props)
|
|
46
|
-
// propsValidator.call(this.constructor, props)
|
|
47
|
-
);
|
|
42
|
+
const modelPropsValidators = this.modelDescriptor.modelPropsValidators;
|
|
43
|
+
modelPropsValidators.forEach((propsValidator) => propsValidator.validate(props));
|
|
48
44
|
}
|
|
49
45
|
validate() {
|
|
50
46
|
this.validateProps(this._props);
|
|
@@ -52,23 +48,23 @@ class DomainModel {
|
|
|
52
48
|
isPropsEmpty() {
|
|
53
49
|
return this._props === DomainModel.EMPTY_PROPS;
|
|
54
50
|
}
|
|
51
|
+
isPropsInitialized() {
|
|
52
|
+
return !this.isPropsEmpty();
|
|
53
|
+
}
|
|
55
54
|
props() {
|
|
56
55
|
if (this.isPropsEmpty())
|
|
57
56
|
return null;
|
|
58
57
|
return lodash_1.default.cloneDeep(this._props);
|
|
59
58
|
}
|
|
60
|
-
metadata() {
|
|
61
|
-
return {};
|
|
62
|
-
}
|
|
63
59
|
initializeProps(propsOrBuilder) {
|
|
64
|
-
if (
|
|
60
|
+
if (this.isPropsInitialized())
|
|
65
61
|
throw new errors_1.PropsInitializedError();
|
|
66
62
|
let props;
|
|
67
63
|
if (typeof propsOrBuilder === "function")
|
|
68
64
|
props = propsOrBuilder.call(this);
|
|
69
65
|
else
|
|
70
66
|
props = propsOrBuilder;
|
|
71
|
-
if (!this.modelDescriptor
|
|
67
|
+
if (!this.modelDescriptor.modelMutable) {
|
|
72
68
|
this._props = props;
|
|
73
69
|
Object.freeze(this._props);
|
|
74
70
|
}
|
package/base/model-registry.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AnyDomainModel, DomainModelClass } from "./model";
|
|
2
1
|
import { ModelId, ModelName, ModelVersion } from "./meta";
|
|
2
|
+
import { AnyDomainModel, DomainModelClass } from "./model";
|
|
3
3
|
export declare class ModelVersions<T extends AnyDomainModel = AnyDomainModel> extends Map<ModelVersion, DomainModelClass<T>> {
|
|
4
4
|
readonly modelName: ModelName;
|
|
5
5
|
constructor(modelName: ModelName);
|
package/base/model-registry.js
CHANGED
|
@@ -26,7 +26,7 @@ class ModelRegistry {
|
|
|
26
26
|
if (typeof p1 === "string") {
|
|
27
27
|
return new meta_1.$ModelId(p1, p2);
|
|
28
28
|
}
|
|
29
|
-
return meta_1.$ModelId.fromValue(p1.modelDescriptor().modelId
|
|
29
|
+
return meta_1.$ModelId.fromValue(p1.modelDescriptor().modelId);
|
|
30
30
|
}
|
|
31
31
|
getModel(modelName, modelVersion = 0) {
|
|
32
32
|
const versions = this.getModelVersions(modelName);
|
|
@@ -45,8 +45,8 @@ class ModelRegistry {
|
|
|
45
45
|
return Boolean(this.getModel(modelName, modelVersion));
|
|
46
46
|
}
|
|
47
47
|
registerModel(modelClass) {
|
|
48
|
-
const modelName = modelClass.modelDescriptor().modelName
|
|
49
|
-
const modelVersion = modelClass.modelDescriptor().modelVersion
|
|
48
|
+
const modelName = modelClass.modelDescriptor().modelName;
|
|
49
|
+
const modelVersion = modelClass.modelDescriptor().modelVersion;
|
|
50
50
|
if (this.hasRegisteredModel(modelName, modelVersion))
|
|
51
51
|
throw new Error(`Cannot register: Model ${modelName} with version ${modelVersion} is already registered.`);
|
|
52
52
|
const versions = this.getModelVersions(modelName);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const IsEnum: (value?: EnumValue) => <T extends
|
|
1
|
+
import { EnumClassWithTypedConstructor, EnumProperty, EnumValue } from "../../../core";
|
|
2
|
+
export declare const IsEnum: (value?: EnumValue) => <T extends EnumClassWithTypedConstructor>(target: T, key: EnumProperty<T>) => void;
|
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.IsEnum = void 0;
|
|
4
4
|
const base_1 = require("../../../base");
|
|
5
|
+
const core_1 = require("../../../core");
|
|
5
6
|
const IsEnum = (value) => {
|
|
6
7
|
return (target, key) => {
|
|
7
|
-
(0,
|
|
8
|
+
(0, core_1.markEnumProperty)(target, key);
|
|
9
|
+
const enumBuilder = () => new target(value ?? key);
|
|
10
|
+
(0, base_1.Static)(enumBuilder)(target, key);
|
|
8
11
|
};
|
|
9
12
|
};
|
|
10
13
|
exports.IsEnum = IsEnum;
|
|
@@ -6,7 +6,7 @@ const Handle = (commandClass) => {
|
|
|
6
6
|
return (target, propertyKey, descriptor) => {
|
|
7
7
|
if (typeof descriptor.value === "function") {
|
|
8
8
|
const commandType = commandClass.commandType();
|
|
9
|
-
(0, meta_1.
|
|
9
|
+
(0, meta_1.defineOwnCommandHandler)(target, commandType, descriptor.value);
|
|
10
10
|
}
|
|
11
11
|
};
|
|
12
12
|
};
|
|
@@ -6,7 +6,7 @@ const When = (eventClass) => {
|
|
|
6
6
|
return (target, propertyKey, descriptor) => {
|
|
7
7
|
if (typeof descriptor.value === "function") {
|
|
8
8
|
const eventType = eventClass.eventType();
|
|
9
|
-
(0, meta_1.
|
|
9
|
+
(0, meta_1.defineOwnEventApplier)(target, eventType, descriptor.value);
|
|
10
10
|
}
|
|
11
11
|
};
|
|
12
12
|
};
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getCommandType = exports.defineCommandType = exports.$CommandType = void 0;
|
|
4
4
|
require("reflect-metadata");
|
|
5
|
+
const COMMAND_TYPE = Symbol.for("COMMAND_TYPE");
|
|
5
6
|
class $CommandType extends String {
|
|
6
7
|
static validate(commandType) {
|
|
7
8
|
if (commandType.trim().length === 0)
|
|
8
|
-
throw new Error("
|
|
9
|
+
throw new Error("Command type cannot be an empty string");
|
|
9
10
|
}
|
|
10
11
|
constructor(commandType) {
|
|
11
12
|
$CommandType.validate(commandType);
|
|
@@ -13,15 +14,14 @@ class $CommandType extends String {
|
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
16
|
exports.$CommandType = $CommandType;
|
|
16
|
-
const CommandTypeMetaKey = Symbol.for("COMMAND_TYPE");
|
|
17
17
|
const defineCommandType = (target, commandType) => {
|
|
18
|
-
Reflect.defineMetadata(
|
|
18
|
+
Reflect.defineMetadata(COMMAND_TYPE, new $CommandType(commandType), target);
|
|
19
19
|
};
|
|
20
20
|
exports.defineCommandType = defineCommandType;
|
|
21
21
|
const getCommandType = (target) => {
|
|
22
|
-
const commandType = Reflect.getOwnMetadata(
|
|
22
|
+
const commandType = Reflect.getOwnMetadata(COMMAND_TYPE, target);
|
|
23
23
|
if (!commandType)
|
|
24
|
-
throw new Error("
|
|
24
|
+
throw new Error("Command's type is not defined");
|
|
25
25
|
return commandType.valueOf();
|
|
26
26
|
};
|
|
27
27
|
exports.getCommandType = getCommandType;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
export type EnumProperty<T extends Object = Object> = Extract<keyof T, string>;
|
|
3
|
+
export declare class EnumPropertySet<T extends Object = Object> extends Set<EnumProperty<T>> {
|
|
4
|
+
}
|
|
5
|
+
export declare const markEnumProperty: <T extends Object>(target: T, key: EnumProperty<T>) => void;
|
|
6
|
+
export declare const getOwnEnumPropertySet: <T extends Object>(target: T) => EnumPropertySet<T>;
|
|
7
|
+
export declare const getEnumPropertySet: <T extends Object>(target: T) => EnumPropertySet<T>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getEnumPropertySet = exports.getOwnEnumPropertySet = exports.markEnumProperty = exports.EnumPropertySet = void 0;
|
|
4
|
+
require("reflect-metadata");
|
|
5
|
+
const ENUM_PROP_SET = Symbol.for("ENUM_PROP_SET");
|
|
6
|
+
class EnumPropertySet extends Set {
|
|
7
|
+
}
|
|
8
|
+
exports.EnumPropertySet = EnumPropertySet;
|
|
9
|
+
const markEnumProperty = (target, key) => {
|
|
10
|
+
const enumSet = (0, exports.getOwnEnumPropertySet)(target);
|
|
11
|
+
enumSet.add(key);
|
|
12
|
+
};
|
|
13
|
+
exports.markEnumProperty = markEnumProperty;
|
|
14
|
+
const getOwnEnumPropertySet = (target) => {
|
|
15
|
+
if (!Reflect.getOwnMetadata(ENUM_PROP_SET, target)) {
|
|
16
|
+
Reflect.defineMetadata(ENUM_PROP_SET, new EnumPropertySet(), target);
|
|
17
|
+
}
|
|
18
|
+
return Reflect.getOwnMetadata(ENUM_PROP_SET, target);
|
|
19
|
+
};
|
|
20
|
+
exports.getOwnEnumPropertySet = getOwnEnumPropertySet;
|
|
21
|
+
const getEnumPropertySet = (target) => {
|
|
22
|
+
let _target = target;
|
|
23
|
+
const result = new EnumPropertySet();
|
|
24
|
+
do {
|
|
25
|
+
const ownMarkedEnumValues = (0, exports.getOwnEnumPropertySet)(_target);
|
|
26
|
+
ownMarkedEnumValues.forEach((markedEnumValue) => {
|
|
27
|
+
result.add(markedEnumValue);
|
|
28
|
+
});
|
|
29
|
+
_target = Reflect.getPrototypeOf(_target);
|
|
30
|
+
} while (_target !== null);
|
|
31
|
+
return result;
|
|
32
|
+
};
|
|
33
|
+
exports.getEnumPropertySet = getEnumPropertySet;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
1
2
|
import { AnyCommand, CommandHandler } from "../../model";
|
|
2
3
|
export declare class CommandHandlerMap extends Map<string, CommandHandler> {
|
|
3
4
|
}
|
|
4
|
-
export declare const OwnCommandHandlerMapMetaKey: unique symbol;
|
|
5
5
|
export declare const getOwnCommandHandlerMap: (target: object) => CommandHandlerMap;
|
|
6
|
-
export declare const
|
|
7
|
-
export declare const CommandHandlerMapMetaKey: unique symbol;
|
|
6
|
+
export declare const defineOwnCommandHandler: <T extends AnyCommand>(target: object, commandType: string, handler: CommandHandler<T>) => void;
|
|
8
7
|
export declare const getCommandHandlerMap: (target: object) => CommandHandlerMap;
|
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getCommandHandlerMap = exports.
|
|
3
|
+
exports.getCommandHandlerMap = exports.defineOwnCommandHandler = exports.getOwnCommandHandlerMap = exports.CommandHandlerMap = void 0;
|
|
4
|
+
require("reflect-metadata");
|
|
5
|
+
const OWN_COMMAND_HANDLER_MAP = Symbol.for("OWN_COMMAND_HANDLER_MAP");
|
|
6
|
+
const COMMAND_HANDLER_MAP = Symbol.for("COMMAND_HANDLER_MAP");
|
|
4
7
|
class CommandHandlerMap extends Map {
|
|
5
8
|
}
|
|
6
9
|
exports.CommandHandlerMap = CommandHandlerMap;
|
|
7
|
-
exports.OwnCommandHandlerMapMetaKey = Symbol.for("OWN_COMMAND_HANDLER_MAP");
|
|
8
10
|
const getOwnCommandHandlerMap = (target) => {
|
|
9
|
-
const ownCommandHandlerMap = () => Reflect.getOwnMetadata(
|
|
11
|
+
const ownCommandHandlerMap = () => Reflect.getOwnMetadata(OWN_COMMAND_HANDLER_MAP, target);
|
|
10
12
|
if (!ownCommandHandlerMap())
|
|
11
|
-
Reflect.defineMetadata(
|
|
13
|
+
Reflect.defineMetadata(OWN_COMMAND_HANDLER_MAP, new CommandHandlerMap(), target);
|
|
12
14
|
return ownCommandHandlerMap();
|
|
13
15
|
};
|
|
14
16
|
exports.getOwnCommandHandlerMap = getOwnCommandHandlerMap;
|
|
15
|
-
const
|
|
17
|
+
const defineOwnCommandHandler = (target, commandType, handler) => {
|
|
16
18
|
const commandHandlersMap = (0, exports.getOwnCommandHandlerMap)(target);
|
|
17
19
|
commandHandlersMap.set(commandType, handler);
|
|
18
20
|
};
|
|
19
|
-
exports.
|
|
20
|
-
exports.CommandHandlerMapMetaKey = Symbol.for("COMMAND_HANDLER_MAP");
|
|
21
|
+
exports.defineOwnCommandHandler = defineOwnCommandHandler;
|
|
21
22
|
const getCommandHandlerMap = (target) => {
|
|
22
|
-
if (!Reflect.hasOwnMetadata(
|
|
23
|
+
if (!Reflect.hasOwnMetadata(COMMAND_HANDLER_MAP, target)) {
|
|
23
24
|
const buildCommandHandlerMap = (target) => {
|
|
24
25
|
let _target = target;
|
|
25
26
|
const result = new CommandHandlerMap();
|
|
@@ -36,8 +37,8 @@ const getCommandHandlerMap = (target) => {
|
|
|
36
37
|
});
|
|
37
38
|
return result;
|
|
38
39
|
};
|
|
39
|
-
Reflect.defineMetadata(
|
|
40
|
+
Reflect.defineMetadata(COMMAND_HANDLER_MAP, buildCommandHandlerMap(target), target);
|
|
40
41
|
}
|
|
41
|
-
return Reflect.getOwnMetadata(
|
|
42
|
+
return Reflect.getOwnMetadata(COMMAND_HANDLER_MAP, target);
|
|
42
43
|
};
|
|
43
44
|
exports.getCommandHandlerMap = getCommandHandlerMap;
|
|
@@ -2,8 +2,6 @@ import "reflect-metadata";
|
|
|
2
2
|
import { AnyEvent, EventApplier } from "../../model";
|
|
3
3
|
export declare class EventApplierMap extends Map<string, EventApplier> {
|
|
4
4
|
}
|
|
5
|
-
export declare const OwnEventApplierMapMetaKey: unique symbol;
|
|
6
5
|
export declare const getOwnEventApplierMap: (target: object) => EventApplierMap;
|
|
7
|
-
export declare const
|
|
8
|
-
export declare const EventApplierMapMetaKey: unique symbol;
|
|
6
|
+
export declare const defineOwnEventApplier: <T extends AnyEvent>(target: object, eventType: string, applier: EventApplier<T>) => void;
|
|
9
7
|
export declare const getEventApplierMap: (target: object) => EventApplierMap;
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getEventApplierMap = exports.
|
|
3
|
+
exports.getEventApplierMap = exports.defineOwnEventApplier = exports.getOwnEventApplierMap = exports.EventApplierMap = void 0;
|
|
4
4
|
require("reflect-metadata");
|
|
5
|
+
const OWN_EVENT_APPLIER_MAP = Symbol.for("OWN_EVENT_APPLIER_MAP");
|
|
6
|
+
const EVENT_APPLIER_MAP = Symbol.for("EVENT_HANDLER_MAP");
|
|
5
7
|
class EventApplierMap extends Map {
|
|
6
8
|
}
|
|
7
9
|
exports.EventApplierMap = EventApplierMap;
|
|
8
|
-
exports.OwnEventApplierMapMetaKey = Symbol.for("OWN_EVENT_APPLIER_MAP");
|
|
9
10
|
const getOwnEventApplierMap = (target) => {
|
|
10
|
-
if (!Reflect.hasOwnMetadata(
|
|
11
|
-
Reflect.defineMetadata(
|
|
12
|
-
return Reflect.getMetadata(
|
|
11
|
+
if (!Reflect.hasOwnMetadata(OWN_EVENT_APPLIER_MAP, target))
|
|
12
|
+
Reflect.defineMetadata(OWN_EVENT_APPLIER_MAP, new EventApplierMap(), target);
|
|
13
|
+
return Reflect.getMetadata(OWN_EVENT_APPLIER_MAP, target);
|
|
13
14
|
};
|
|
14
15
|
exports.getOwnEventApplierMap = getOwnEventApplierMap;
|
|
15
|
-
const
|
|
16
|
+
const defineOwnEventApplier = (target, eventType, applier) => {
|
|
16
17
|
const eventAppliersMap = (0, exports.getOwnEventApplierMap)(target);
|
|
17
18
|
eventAppliersMap.set(eventType, applier);
|
|
18
19
|
};
|
|
19
|
-
exports.
|
|
20
|
-
exports.EventApplierMapMetaKey = Symbol.for("EVENT_HANDLER_MAP");
|
|
20
|
+
exports.defineOwnEventApplier = defineOwnEventApplier;
|
|
21
21
|
const getEventApplierMap = (target) => {
|
|
22
|
-
if (!Reflect.hasOwnMetadata(
|
|
22
|
+
if (!Reflect.hasOwnMetadata(EVENT_APPLIER_MAP, target)) {
|
|
23
23
|
const buildEventApplierMap = (target) => {
|
|
24
24
|
let _target = target;
|
|
25
25
|
const result = new EventApplierMap();
|
|
@@ -36,8 +36,8 @@ const getEventApplierMap = (target) => {
|
|
|
36
36
|
});
|
|
37
37
|
return result;
|
|
38
38
|
};
|
|
39
|
-
Reflect.defineMetadata(
|
|
39
|
+
Reflect.defineMetadata(EVENT_APPLIER_MAP, buildEventApplierMap(target), target);
|
|
40
40
|
}
|
|
41
|
-
return Reflect.getOwnMetadata(
|
|
41
|
+
return Reflect.getOwnMetadata(EVENT_APPLIER_MAP, target);
|
|
42
42
|
};
|
|
43
43
|
exports.getEventApplierMap = getEventApplierMap;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./event-applier
|
|
2
|
-
export * from "./command-handler
|
|
1
|
+
export * from "./event-applier";
|
|
2
|
+
export * from "./command-handler";
|
|
@@ -14,5 +14,5 @@ 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("./event-applier
|
|
18
|
-
__exportStar(require("./command-handler
|
|
17
|
+
__exportStar(require("./event-applier"), exports);
|
|
18
|
+
__exportStar(require("./command-handler"), exports);
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getEventType = exports.defineEventType = exports.$EventType = void 0;
|
|
4
4
|
require("reflect-metadata");
|
|
5
|
+
const EVENT_TYPE = Symbol.for("EVENT_TYPE");
|
|
5
6
|
class $EventType extends String {
|
|
6
7
|
static validate(eventType) {
|
|
7
8
|
if (eventType.trim().length === 0)
|
|
8
|
-
throw new Error("
|
|
9
|
+
throw new Error("Event type cannot be an empty string");
|
|
9
10
|
}
|
|
10
11
|
constructor(eventType) {
|
|
11
12
|
$EventType.validate(eventType);
|
|
@@ -13,13 +14,12 @@ class $EventType extends String {
|
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
16
|
exports.$EventType = $EventType;
|
|
16
|
-
const EventTypeMetaKey = Symbol.for("EVENT_TYPE");
|
|
17
17
|
const defineEventType = (target, eventType) => {
|
|
18
|
-
Reflect.defineMetadata(
|
|
18
|
+
Reflect.defineMetadata(EVENT_TYPE, new $EventType(eventType), target);
|
|
19
19
|
};
|
|
20
20
|
exports.defineEventType = defineEventType;
|
|
21
21
|
const getEventType = (target) => {
|
|
22
|
-
const eventType = Reflect.getOwnMetadata(
|
|
22
|
+
const eventType = Reflect.getOwnMetadata(EVENT_TYPE, target);
|
|
23
23
|
if (!eventType)
|
|
24
24
|
throw new Error("Event's type is not defined");
|
|
25
25
|
return eventType.valueOf();
|
package/core/meta/index.d.ts
CHANGED
package/core/meta/index.js
CHANGED
|
@@ -15,5 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./es-aggregate"), exports);
|
|
18
|
-
__exportStar(require("./event
|
|
19
|
-
__exportStar(require("./command
|
|
18
|
+
__exportStar(require("./event"), exports);
|
|
19
|
+
__exportStar(require("./command"), exports);
|
|
20
|
+
__exportStar(require("./enum"), exports);
|
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Id, IdentifiedModel } from "../identified-model";
|
|
2
|
+
import { AnyEvent, EventClassWithTypedConstructor, EventSource, NewEventOptions } from "../message";
|
|
3
3
|
import { InferredProps, Props } from "./../../../base";
|
|
4
|
-
import {
|
|
5
|
-
export
|
|
6
|
-
version: number;
|
|
7
|
-
}
|
|
8
|
-
export declare abstract class Aggregate<P extends Props> extends ModelWithId<P> {
|
|
9
|
-
static createMetadata: (metadata?: Partial<AggregateMetadata>) => AggregateMetadata;
|
|
4
|
+
import { IEventReleaser } from "./event-releaser";
|
|
5
|
+
export declare abstract class Aggregate<P extends Props> extends IdentifiedModel<P> {
|
|
10
6
|
protected readonly _version: number;
|
|
11
|
-
constructor(
|
|
12
|
-
abstract version(): number;
|
|
13
|
-
|
|
14
|
-
protected
|
|
15
|
-
|
|
16
|
-
abstract publishEvents<R = any>(publisher: IAggregateEventPublisher<R>): R;
|
|
7
|
+
constructor(id: Id, version: number, props?: P);
|
|
8
|
+
abstract get version(): number;
|
|
9
|
+
protected asEventSource(): EventSource;
|
|
10
|
+
protected newEvent<E extends AnyEvent>(eventClass: EventClassWithTypedConstructor<E>, props: InferredProps<E>, options?: NewEventOptions): E;
|
|
11
|
+
abstract releaseEvents<R = any>(eventReleaser: IEventReleaser<R>): R;
|
|
17
12
|
}
|
|
18
13
|
export type AnyAggregate = Aggregate<Props>;
|
|
@@ -10,41 +10,27 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.Aggregate = void 0;
|
|
13
|
-
const
|
|
14
|
-
const model_with_id_1 = require("../model-with-id");
|
|
13
|
+
const identified_model_1 = require("../identified-model");
|
|
15
14
|
const base_1 = require("./../../../base");
|
|
16
|
-
let Aggregate = class Aggregate extends
|
|
17
|
-
constructor(
|
|
18
|
-
super(
|
|
15
|
+
let Aggregate = class Aggregate extends identified_model_1.IdentifiedModel {
|
|
16
|
+
constructor(id, version, props) {
|
|
17
|
+
super(id);
|
|
18
|
+
this._version = version;
|
|
19
19
|
if (props)
|
|
20
20
|
this.initializeProps(props);
|
|
21
|
-
this._version = metadata.version;
|
|
22
21
|
}
|
|
23
|
-
|
|
22
|
+
asEventSource() {
|
|
24
23
|
return {
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
aggregateId: this.id,
|
|
25
|
+
aggregateVersion: this.version,
|
|
27
26
|
};
|
|
28
27
|
}
|
|
29
|
-
|
|
30
|
-
return
|
|
31
|
-
aggregateId: this.id(),
|
|
32
|
-
aggregateVersion: this.version(),
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
newEvent(eventClass, props) {
|
|
36
|
-
return eventClass.build(props, { source: this.createEventSource() });
|
|
28
|
+
newEvent(eventClass, props, options) {
|
|
29
|
+
return eventClass.new(this.asEventSource(), props, options);
|
|
37
30
|
}
|
|
38
31
|
};
|
|
39
32
|
exports.Aggregate = Aggregate;
|
|
40
|
-
Aggregate.createMetadata = (metadata) => {
|
|
41
|
-
return {
|
|
42
|
-
id: (0, uuid_1.v4)(),
|
|
43
|
-
version: 0,
|
|
44
|
-
...metadata,
|
|
45
|
-
};
|
|
46
|
-
};
|
|
47
33
|
exports.Aggregate = Aggregate = __decorate([
|
|
48
34
|
(0, base_1.Mutable)(true),
|
|
49
|
-
__metadata("design:paramtypes", [
|
|
35
|
+
__metadata("design:paramtypes", [String, Number, Object])
|
|
50
36
|
], Aggregate);
|