ddd-node 17.3.0 → 20.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/dist/core/aggregate/aggregate-base/aggregate.builder.d.ts +7 -0
- package/dist/core/aggregate/aggregate-base/aggregate.builder.js +18 -0
- package/dist/core/aggregate/aggregate-base/aggregate.d.ts +16 -0
- package/dist/core/aggregate/{base.js → aggregate-base/aggregate.js} +12 -5
- package/dist/core/aggregate/aggregate-base/index.d.ts +2 -0
- package/dist/core/aggregate/aggregate-base/index.js +18 -0
- package/dist/core/aggregate/event-dispatcher.interface.d.ts +4 -0
- package/dist/core/aggregate/event-dispatcher.interface.js +2 -0
- package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.builder.d.ts +12 -0
- package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.builder.js +35 -0
- package/dist/core/aggregate/{event-sourced-aggregate.d.ts → event-sourced-aggregate/event-sourced-aggregate.d.ts} +11 -13
- package/dist/core/aggregate/{event-sourced-aggregate.js → event-sourced-aggregate/event-sourced-aggregate.js} +26 -36
- package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.model-metadata.d.ts +9 -0
- package/dist/core/aggregate/event-sourced-aggregate/event-sourced-aggregate.model-metadata.js +22 -0
- package/dist/core/aggregate/event-sourced-aggregate/index.d.ts +3 -0
- package/dist/core/aggregate/event-sourced-aggregate/index.js +19 -0
- package/dist/core/aggregate/index.d.ts +2 -0
- package/dist/core/aggregate/index.js +2 -0
- package/dist/core/aggregate/state-aggregate/index.d.ts +2 -0
- package/dist/core/aggregate/state-aggregate/index.js +18 -0
- package/dist/core/aggregate/state-aggregate/state-aggregate.builder.d.ts +7 -0
- package/dist/core/aggregate/state-aggregate/state-aggregate.builder.js +19 -0
- package/dist/core/aggregate/{state-aggregate.d.ts → state-aggregate/state-aggregate.d.ts} +5 -9
- package/dist/core/aggregate/{state-aggregate.js → state-aggregate/state-aggregate.js} +2 -8
- package/dist/core/aggregate/types.d.ts +3 -3
- package/dist/core/entity/entity.builder.d.ts +9 -0
- package/dist/core/entity/entity.builder.js +17 -0
- package/dist/core/{entity.d.ts → entity/entity.d.ts} +4 -5
- package/dist/core/entity/entity.js +26 -0
- package/dist/core/entity/index.d.ts +2 -0
- package/dist/core/entity/index.js +18 -0
- package/dist/core/enum/enum.builder.d.ts +9 -0
- package/dist/core/enum/enum.builder.js +20 -0
- package/dist/core/enum/enum.d.ts +21 -0
- package/dist/core/enum/enum.js +60 -0
- package/dist/core/enum/index.d.ts +2 -0
- package/dist/{meta/helpers → core/enum}/index.js +2 -1
- package/dist/core/id/index.d.ts +1 -1
- package/dist/core/id/index.js +1 -1
- package/dist/core/index.d.ts +3 -4
- package/dist/core/index.js +3 -4
- package/dist/core/message/command/command.builder.d.ts +7 -0
- package/dist/core/message/command/command.builder.js +20 -0
- package/dist/core/message/{command.d.ts → command/command.d.ts} +10 -7
- package/dist/core/message/command/command.js +27 -0
- package/dist/core/message/command/index.d.ts +2 -0
- package/dist/core/message/command/index.js +18 -0
- package/dist/core/message/event/event.builder.d.ts +9 -0
- package/dist/core/message/event/event.builder.js +27 -0
- package/dist/core/message/{event.d.ts → event/event.d.ts} +13 -10
- package/dist/core/message/event/event.js +31 -0
- package/dist/core/message/event/index.d.ts +2 -0
- package/dist/core/message/event/index.js +18 -0
- package/dist/core/message/index.d.ts +1 -1
- package/dist/core/message/index.js +1 -1
- package/dist/core/message/message-base/index.d.ts +2 -0
- package/dist/core/message/message-base/index.js +18 -0
- package/dist/core/message/message-base/message.builder.d.ts +16 -0
- package/dist/core/message/message-base/message.builder.js +45 -0
- package/dist/core/message/message-base/message.d.ts +31 -0
- package/dist/core/message/message-base/message.js +47 -0
- package/dist/core/model-with-id/index.d.ts +2 -0
- package/dist/core/model-with-id/index.js +18 -0
- package/dist/core/model-with-id/model-with-id.builder.d.ts +11 -0
- package/dist/core/model-with-id/model-with-id.builder.js +22 -0
- package/dist/core/{model → model-with-id}/model-with-id.d.ts +1 -3
- package/dist/core/{model → model-with-id}/model-with-id.js +1 -10
- package/dist/core/value-object/index.d.ts +2 -0
- package/dist/core/value-object/index.js +18 -0
- package/dist/core/value-object/value-object.builder.d.ts +7 -0
- package/dist/core/value-object/value-object.builder.js +16 -0
- package/dist/core/{value-object.d.ts → value-object/value-object.d.ts} +2 -2
- package/dist/core/value-object/value-object.js +40 -0
- package/dist/decorators/aggregate-es/handle.js +1 -1
- package/dist/decorators/aggregate-es/when.js +1 -1
- package/dist/decorators/enum.d.ts +2 -0
- package/dist/decorators/{model/enum.js → enum.js} +2 -2
- package/dist/decorators/index.d.ts +1 -2
- package/dist/decorators/index.js +1 -2
- package/dist/decorators/message/command.js +1 -1
- package/dist/decorators/message/event.js +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/meta/aggregate-es/command-handler-map.d.ts +8 -0
- package/dist/meta/aggregate-es/command-handler-map.js +43 -0
- package/dist/meta/aggregate-es/event-applier-map.d.ts +9 -0
- package/dist/meta/aggregate-es/event-applier-map.js +43 -0
- package/dist/meta/aggregate-es/index.d.ts +2 -0
- package/dist/meta/aggregate-es/index.js +18 -0
- package/dist/meta/command.metadata.d.ts +6 -2
- package/dist/meta/command.metadata.js +19 -5
- package/dist/meta/event.metadata.d.ts +6 -2
- package/dist/meta/event.metadata.js +19 -5
- package/dist/meta/id.metadata.js +2 -3
- package/dist/meta/index.d.ts +1 -3
- package/dist/meta/index.js +1 -3
- package/dist/model/core/index.d.ts +2 -0
- package/dist/{core/model → model/core}/index.js +1 -1
- package/dist/model/core/model.builder.d.ts +11 -0
- package/dist/model/core/model.builder.js +18 -0
- package/dist/model/core/model.d.ts +41 -0
- package/dist/{core/model → model/core}/model.js +36 -57
- package/dist/model/decorators/index.d.ts +4 -0
- package/dist/{decorators/model → model/decorators}/index.js +1 -3
- package/dist/model/decorators/model.d.ts +12 -0
- package/dist/model/decorators/model.js +54 -0
- package/dist/model/decorators/mutable.d.ts +2 -0
- package/dist/model/decorators/mutable.js +10 -0
- package/dist/model/decorators/prop.d.ts +2 -0
- package/dist/{decorators/model → model/decorators}/prop.js +2 -2
- package/dist/model/decorators/static.d.ts +3 -0
- package/dist/model/decorators/static.js +11 -0
- package/dist/model/domain.d.ts +20 -0
- package/dist/model/domain.js +40 -0
- package/dist/model/index.d.ts +5 -0
- package/dist/model/index.js +21 -0
- package/dist/model/meta/index.d.ts +8 -0
- package/dist/model/meta/index.js +24 -0
- package/dist/model/meta/model-domain.d.ts +5 -0
- package/dist/model/meta/model-domain.js +15 -0
- package/dist/model/meta/model-id.d.ts +16 -0
- package/dist/model/meta/model-id.js +39 -0
- package/dist/model/meta/model-mutable.d.ts +2 -0
- package/dist/model/meta/model-mutable.js +14 -0
- package/dist/model/meta/model-name.d.ts +8 -0
- package/dist/model/meta/model-name.js +25 -0
- package/dist/model/meta/model-props-map.d.ts +6 -0
- package/dist/model/meta/model-props-map.js +45 -0
- package/dist/model/meta/model-props-validator.d.ts +6 -0
- package/dist/model/meta/model-props-validator.js +33 -0
- package/dist/model/meta/model-static-values.d.ts +13 -0
- package/dist/model/meta/model-static-values.js +54 -0
- package/dist/model/meta/model-version.d.ts +8 -0
- package/dist/model/meta/model-version.js +25 -0
- package/dist/model/model-registry.d.ts +17 -0
- package/dist/model/model-registry.js +55 -0
- package/dist/package.json +1 -1
- package/package.json +2 -2
- package/dist/core/aggregate/base.d.ts +0 -12
- package/dist/core/domain.d.ts +0 -17
- package/dist/core/domain.js +0 -47
- package/dist/core/entity.js +0 -20
- package/dist/core/enum.d.ts +0 -18
- package/dist/core/enum.js +0 -45
- package/dist/core/message/command.js +0 -25
- package/dist/core/message/event.js +0 -30
- package/dist/core/message/message.d.ts +0 -23
- package/dist/core/message/message.js +0 -33
- package/dist/core/model/index.d.ts +0 -2
- package/dist/core/model/model.d.ts +0 -47
- package/dist/core/value-object.js +0 -27
- package/dist/decorators/id.d.ts +0 -2
- package/dist/decorators/id.js +0 -10
- package/dist/decorators/model/enum.d.ts +0 -2
- package/dist/decorators/model/index.d.ts +0 -6
- package/dist/decorators/model/model.d.ts +0 -2
- package/dist/decorators/model/model.js +0 -10
- package/dist/decorators/model/prop.d.ts +0 -2
- package/dist/decorators/model/static.d.ts +0 -3
- package/dist/decorators/model/static.js +0 -20
- package/dist/decorators/model/validator.d.ts +0 -3
- package/dist/decorators/model/validator.js +0 -11
- package/dist/decorators/model/version.d.ts +0 -2
- package/dist/decorators/model/version.js +0 -10
- package/dist/meta/aggregate.metadata.d.ts +0 -8
- package/dist/meta/aggregate.metadata.js +0 -34
- package/dist/meta/helpers/index.d.ts +0 -1
- package/dist/meta/helpers/static-value.d.ts +0 -7
- package/dist/meta/helpers/static-value.js +0 -15
- package/dist/meta/model.metadata.d.ts +0 -24
- package/dist/meta/model.metadata.js +0 -145
- /package/dist/core/id/{common → services}/index.d.ts +0 -0
- /package/dist/core/id/{common → services}/index.js +0 -0
- /package/dist/core/id/{common → services}/snowflake.d.ts +0 -0
- /package/dist/core/id/{common → services}/snowflake.js +0 -0
- /package/dist/core/id/{common → services}/uuid4.d.ts +0 -0
- /package/dist/core/id/{common → services}/uuid4.js +0 -0
- /package/dist/{core/model → model/core}/errors.d.ts +0 -0
- /package/dist/{core/model → model/core}/errors.js +0 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defineStaticValueProperty = exports.getStaticValue = exports.setStaticValue = exports.getOwnStaticValues = exports.StaticValuesMap = exports.StaticValue = void 0;
|
|
4
|
+
class StaticValue {
|
|
5
|
+
constructor(value) {
|
|
6
|
+
this._value = value;
|
|
7
|
+
}
|
|
8
|
+
get value() {
|
|
9
|
+
if (typeof this._value === "function") {
|
|
10
|
+
this._value = this._value();
|
|
11
|
+
}
|
|
12
|
+
return this._value;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.StaticValue = StaticValue;
|
|
16
|
+
const OwnStaticValuesMetaKey = Symbol.for("OWN_STATIC_VALUES");
|
|
17
|
+
class StaticValuesMap extends Map {
|
|
18
|
+
}
|
|
19
|
+
exports.StaticValuesMap = StaticValuesMap;
|
|
20
|
+
const getOwnStaticValues = (target) => {
|
|
21
|
+
if (!Reflect.hasOwnMetadata(OwnStaticValuesMetaKey, target))
|
|
22
|
+
Reflect.defineMetadata(OwnStaticValuesMetaKey, new StaticValuesMap(), target);
|
|
23
|
+
return Reflect.getOwnMetadata(OwnStaticValuesMetaKey, target);
|
|
24
|
+
};
|
|
25
|
+
exports.getOwnStaticValues = getOwnStaticValues;
|
|
26
|
+
const setStaticValue = (target, key, value) => {
|
|
27
|
+
const staticValues = (0, exports.getOwnStaticValues)(target);
|
|
28
|
+
staticValues.set(key, new StaticValue(value));
|
|
29
|
+
};
|
|
30
|
+
exports.setStaticValue = setStaticValue;
|
|
31
|
+
const getStaticValue = (target, key) => {
|
|
32
|
+
let _target = target;
|
|
33
|
+
do {
|
|
34
|
+
const staticValues = (0, exports.getOwnStaticValues)(_target);
|
|
35
|
+
if (staticValues.has(key))
|
|
36
|
+
return staticValues.get(key)?.value;
|
|
37
|
+
_target = Reflect.getPrototypeOf(_target);
|
|
38
|
+
} while (_target !== null);
|
|
39
|
+
return undefined;
|
|
40
|
+
};
|
|
41
|
+
exports.getStaticValue = getStaticValue;
|
|
42
|
+
const defineStaticValueProperty = (target, key) => {
|
|
43
|
+
Object.defineProperty(target, key, {
|
|
44
|
+
configurable: false,
|
|
45
|
+
enumerable: true,
|
|
46
|
+
get() {
|
|
47
|
+
return (0, exports.getStaticValue)(target, key);
|
|
48
|
+
},
|
|
49
|
+
set() {
|
|
50
|
+
throw new Error("Static value is readonly");
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
exports.defineStaticValueProperty = defineStaticValueProperty;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AnyModel, ModelClass } from "../core";
|
|
2
|
+
export type ModelVersion = number;
|
|
3
|
+
export declare class MVersion extends Number {
|
|
4
|
+
static validate(modelVersion: ModelVersion): void;
|
|
5
|
+
constructor(modelVersion: ModelVersion);
|
|
6
|
+
}
|
|
7
|
+
export declare const defineModelVersion: <T extends AnyModel>(target: ModelClass<T>, modelVersion: ModelVersion) => void;
|
|
8
|
+
export declare const getModelVersion: <T extends AnyModel>(target: ModelClass<T>) => ModelVersion;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getModelVersion = exports.defineModelVersion = exports.MVersion = void 0;
|
|
4
|
+
class MVersion extends Number {
|
|
5
|
+
static validate(modelVersion) {
|
|
6
|
+
if (modelVersion < 0 && Number.isInteger(modelVersion))
|
|
7
|
+
throw new Error("Model version must be a non-negative integer number");
|
|
8
|
+
}
|
|
9
|
+
constructor(modelVersion) {
|
|
10
|
+
MVersion.validate(modelVersion);
|
|
11
|
+
super(modelVersion);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.MVersion = MVersion;
|
|
15
|
+
const ModelVersionMetaKey = Symbol.for("MODEL_VERSION");
|
|
16
|
+
const defineModelVersion = (target, modelVersion) => {
|
|
17
|
+
Reflect.defineMetadata(ModelVersionMetaKey, new MVersion(modelVersion), target);
|
|
18
|
+
};
|
|
19
|
+
exports.defineModelVersion = defineModelVersion;
|
|
20
|
+
const getModelVersion = (target) => {
|
|
21
|
+
if (!Reflect.hasOwnMetadata(ModelVersionMetaKey, target))
|
|
22
|
+
(0, exports.defineModelVersion)(target, 0);
|
|
23
|
+
return Reflect.getOwnMetadata(ModelVersionMetaKey, target).valueOf();
|
|
24
|
+
};
|
|
25
|
+
exports.getModelVersion = getModelVersion;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AnyModel, ModelClass } from "./core";
|
|
2
|
+
import { ModelId, ModelName, ModelVersion } from "./meta";
|
|
3
|
+
export declare class ModelVersionMap<T extends AnyModel = AnyModel> extends Map<ModelVersion, ModelClass<T>> {
|
|
4
|
+
readonly modelName: ModelName;
|
|
5
|
+
constructor(modelName: ModelName);
|
|
6
|
+
}
|
|
7
|
+
export declare class ModelMap<T extends AnyModel = AnyModel> extends Map<ModelName, ModelVersionMap<T>> {
|
|
8
|
+
}
|
|
9
|
+
export declare class ModelRegistry {
|
|
10
|
+
private readonly modelMap;
|
|
11
|
+
getModelVersionMap<T extends AnyModel = AnyModel>(modelName: ModelName): ModelVersionMap<T>;
|
|
12
|
+
getModel<T extends AnyModel = AnyModel>(modelName: ModelName, modelVersion?: ModelVersion): ModelClass<T> | undefined;
|
|
13
|
+
getModelByModelId<T extends AnyModel = AnyModel>(modelId: ModelId): ModelClass<T> | undefined;
|
|
14
|
+
hasRegisteredModel(modelName: ModelName, modelVersion: ModelVersion): boolean;
|
|
15
|
+
hasRegisteredModel(model: ModelClass): boolean;
|
|
16
|
+
registerModel(modelClass: ModelClass): this;
|
|
17
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModelRegistry = exports.ModelMap = exports.ModelVersionMap = void 0;
|
|
4
|
+
const meta_1 = require("./meta");
|
|
5
|
+
class ModelVersionMap extends Map {
|
|
6
|
+
constructor(modelName) {
|
|
7
|
+
super();
|
|
8
|
+
this.modelName = modelName;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.ModelVersionMap = ModelVersionMap;
|
|
12
|
+
class ModelMap extends Map {
|
|
13
|
+
}
|
|
14
|
+
exports.ModelMap = ModelMap;
|
|
15
|
+
class ModelRegistry {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.modelMap = new ModelMap();
|
|
18
|
+
}
|
|
19
|
+
getModelVersionMap(modelName) {
|
|
20
|
+
const modelVersionMap = () => this.modelMap.get(modelName);
|
|
21
|
+
if (!modelVersionMap())
|
|
22
|
+
this.modelMap.set(modelName, new ModelVersionMap(modelName));
|
|
23
|
+
return modelVersionMap();
|
|
24
|
+
}
|
|
25
|
+
getModel(modelName, modelVersion = 0) {
|
|
26
|
+
const modelVersionMap = this.getModelVersionMap(modelName);
|
|
27
|
+
return modelVersionMap.get(modelVersion);
|
|
28
|
+
}
|
|
29
|
+
getModelByModelId(modelId) {
|
|
30
|
+
const { modelName, modelVersion } = meta_1.MId.fromValue(modelId);
|
|
31
|
+
return this.getModel(modelName, modelVersion);
|
|
32
|
+
}
|
|
33
|
+
hasRegisteredModel(p1, p2) {
|
|
34
|
+
let modelName, modelVersion;
|
|
35
|
+
if (typeof p1 === "string") {
|
|
36
|
+
modelName = p1;
|
|
37
|
+
modelVersion = p2;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
modelName = p1.modelMetadata().modelName;
|
|
41
|
+
modelVersion = p1.modelMetadata().modelVersion;
|
|
42
|
+
}
|
|
43
|
+
return Boolean(this.getModel(modelName, modelVersion));
|
|
44
|
+
}
|
|
45
|
+
registerModel(modelClass) {
|
|
46
|
+
const modelName = modelClass.modelMetadata().modelName;
|
|
47
|
+
const modelVersion = modelClass.modelMetadata().modelVersion;
|
|
48
|
+
if (this.hasRegisteredModel(modelName, modelVersion))
|
|
49
|
+
throw new Error(`Model ${modelName} with version ${modelVersion} has been registered`);
|
|
50
|
+
const modelVersionMap = this.getModelVersionMap(modelName);
|
|
51
|
+
modelVersionMap.set(modelVersion, modelClass);
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.ModelRegistry = ModelRegistry;
|
package/dist/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"ddd-node","version":"
|
|
1
|
+
{"name":"ddd-node","version":"20.0.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.20.1","uuid":"^9.0.1"}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ddd-node",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "20.0.0",
|
|
4
4
|
"description": "Domain Driven Design base for NodeJs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"nodejs-snowflake": "^2.0.1",
|
|
44
44
|
"reflect-metadata": "^0.1.13",
|
|
45
45
|
"tsc-alias": "^1.8.8",
|
|
46
|
-
"type-fest": "^4.
|
|
46
|
+
"type-fest": "^4.20.1",
|
|
47
47
|
"uuid": "^9.0.1"
|
|
48
48
|
},
|
|
49
49
|
"mocha": {
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { EntityBase, EntityMetadata } from "../entity";
|
|
2
|
-
import { AnyEvent, EventClassWithTypedConstructor } from "../message";
|
|
3
|
-
import { Props, PropsOf } from "../model";
|
|
4
|
-
export interface AggregateMetadata extends EntityMetadata {
|
|
5
|
-
version: number;
|
|
6
|
-
}
|
|
7
|
-
export declare abstract class AggregateBase<P extends Props> extends EntityBase<P> {
|
|
8
|
-
protected readonly _version: number;
|
|
9
|
-
constructor(metadata: AggregateMetadata, props?: P);
|
|
10
|
-
abstract version(): number;
|
|
11
|
-
protected newEvent<E extends AnyEvent>(eventClass: EventClassWithTypedConstructor<E>, props: PropsOf<E>): E;
|
|
12
|
-
}
|
package/dist/core/domain.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { ModelName, ModelVersion } from "../meta";
|
|
2
|
-
import { AnyModel, ModelClass } from "./model";
|
|
3
|
-
export declare class ModelVersionRegistry<T extends AnyModel = AnyModel> extends Map<ModelVersion, ModelClass<T>> {
|
|
4
|
-
}
|
|
5
|
-
export declare class ModelRegistry<T extends AnyModel = AnyModel> extends Map<ModelName, ModelVersionRegistry<T>> {
|
|
6
|
-
}
|
|
7
|
-
export type DomainName = string;
|
|
8
|
-
export declare class Domain {
|
|
9
|
-
readonly name: DomainName;
|
|
10
|
-
private readonly modelRegistry;
|
|
11
|
-
constructor(name: DomainName);
|
|
12
|
-
getModelVersionRegistry(modelName: ModelName): ModelVersionRegistry<AnyModel>;
|
|
13
|
-
getModel(modelName: ModelName, modelVersion?: ModelVersion): ModelClass<AnyModel> | undefined;
|
|
14
|
-
hasRegisteredModel(modelName: ModelName, modelVersion: ModelVersion): boolean;
|
|
15
|
-
hasRegisteredModel(model: ModelClass): boolean;
|
|
16
|
-
registerModel(modelClass: ModelClass): this;
|
|
17
|
-
}
|
package/dist/core/domain.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Domain = exports.ModelRegistry = exports.ModelVersionRegistry = void 0;
|
|
4
|
-
class ModelVersionRegistry extends Map {
|
|
5
|
-
}
|
|
6
|
-
exports.ModelVersionRegistry = ModelVersionRegistry;
|
|
7
|
-
class ModelRegistry extends Map {
|
|
8
|
-
}
|
|
9
|
-
exports.ModelRegistry = ModelRegistry;
|
|
10
|
-
class Domain {
|
|
11
|
-
constructor(name) {
|
|
12
|
-
this.modelRegistry = new ModelRegistry();
|
|
13
|
-
this.name = name;
|
|
14
|
-
}
|
|
15
|
-
getModelVersionRegistry(modelName) {
|
|
16
|
-
const modelVersionRegistry = () => this.modelRegistry.get(modelName);
|
|
17
|
-
if (!modelVersionRegistry())
|
|
18
|
-
this.modelRegistry.set(modelName, new ModelVersionRegistry());
|
|
19
|
-
return modelVersionRegistry();
|
|
20
|
-
}
|
|
21
|
-
getModel(modelName, modelVersion = 0) {
|
|
22
|
-
const modelVersionRegistry = this.getModelVersionRegistry(modelName);
|
|
23
|
-
return modelVersionRegistry.get(modelVersion);
|
|
24
|
-
}
|
|
25
|
-
hasRegisteredModel(p1, p2) {
|
|
26
|
-
let modelName, modelVersion;
|
|
27
|
-
if (typeof p1 === "string") {
|
|
28
|
-
modelName = p1;
|
|
29
|
-
modelVersion = p2;
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
modelName = p1.modelName();
|
|
33
|
-
modelVersion = p1.modelVersion();
|
|
34
|
-
}
|
|
35
|
-
return Boolean(this.getModel(modelName, modelVersion));
|
|
36
|
-
}
|
|
37
|
-
registerModel(modelClass) {
|
|
38
|
-
const modelName = modelClass.modelName();
|
|
39
|
-
const modelVersion = modelClass.modelVersion();
|
|
40
|
-
if (this.hasRegisteredModel(modelName, modelVersion))
|
|
41
|
-
throw new Error(`Model ${modelName} with version ${modelVersion} has been registered`);
|
|
42
|
-
const modelVersionRegistry = this.getModelVersionRegistry(modelName);
|
|
43
|
-
modelVersionRegistry.set(modelVersion, modelClass);
|
|
44
|
-
return this;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
exports.Domain = Domain;
|
package/dist/core/entity.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EntityBase = void 0;
|
|
4
|
-
const model_1 = require("./model");
|
|
5
|
-
class EntityBase extends model_1.ModelWithId {
|
|
6
|
-
constructor(metadata, props) {
|
|
7
|
-
super(metadata.id);
|
|
8
|
-
if (props)
|
|
9
|
-
this.initializeProps(props);
|
|
10
|
-
}
|
|
11
|
-
static mutable() {
|
|
12
|
-
return true;
|
|
13
|
-
}
|
|
14
|
-
static newEntity(props, id) {
|
|
15
|
-
return new this({
|
|
16
|
-
id: this.id(id),
|
|
17
|
-
}, props);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
exports.EntityBase = EntityBase;
|
package/dist/core/enum.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { ClassStatic } from "../types";
|
|
2
|
-
import { Class } from "type-fest";
|
|
3
|
-
import { ModelBase } from "./model";
|
|
4
|
-
export type EnumValue = string | number;
|
|
5
|
-
export interface EnumProps {
|
|
6
|
-
value: EnumValue;
|
|
7
|
-
}
|
|
8
|
-
export declare class EnumBase extends ModelBase<EnumProps> {
|
|
9
|
-
static values(): EnumBase[];
|
|
10
|
-
static parseSafe<T extends EnumBase>(this: EnumClass<T>, providedValue: EnumValue): T | undefined;
|
|
11
|
-
static parse<T extends EnumBase>(this: EnumClass<T>, providedValue: EnumValue): T;
|
|
12
|
-
constructor(value: EnumValue);
|
|
13
|
-
props(): EnumProps;
|
|
14
|
-
get value(): EnumValue;
|
|
15
|
-
equals<T extends EnumBase>(other: T): boolean;
|
|
16
|
-
}
|
|
17
|
-
export interface EnumClass<T extends EnumBase = EnumBase> extends Class<T>, ClassStatic<typeof EnumBase> {
|
|
18
|
-
}
|
package/dist/core/enum.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EnumBase = void 0;
|
|
4
|
-
const model_1 = require("./model");
|
|
5
|
-
class EnumBase extends model_1.ModelBase {
|
|
6
|
-
static values() {
|
|
7
|
-
return Array.from(this.ownStaticValues().values()).map((staticValue) => staticValue.value);
|
|
8
|
-
}
|
|
9
|
-
static parseSafe(providedValue) {
|
|
10
|
-
let key = undefined;
|
|
11
|
-
this.ownStaticValues().forEach((staticValue, staticValueKey) => {
|
|
12
|
-
if (staticValue.value instanceof this) {
|
|
13
|
-
const staticEnum = staticValue.value;
|
|
14
|
-
if (staticEnum.value === providedValue && !key) {
|
|
15
|
-
key = staticValueKey;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
if (key)
|
|
20
|
-
return this.ownStaticValues().get(key)?.value;
|
|
21
|
-
return undefined;
|
|
22
|
-
}
|
|
23
|
-
static parse(providedValue) {
|
|
24
|
-
const parsedEnum = this.parseSafe(providedValue);
|
|
25
|
-
if (!parsedEnum)
|
|
26
|
-
throw new Error(`Invalid provided value for enum ${this.modelName()}`);
|
|
27
|
-
return parsedEnum;
|
|
28
|
-
}
|
|
29
|
-
constructor(value) {
|
|
30
|
-
super();
|
|
31
|
-
this.initializeProps({ value });
|
|
32
|
-
}
|
|
33
|
-
props() {
|
|
34
|
-
return super.props();
|
|
35
|
-
}
|
|
36
|
-
get value() {
|
|
37
|
-
return this._props.value;
|
|
38
|
-
}
|
|
39
|
-
equals(other) {
|
|
40
|
-
const equalType = other instanceof this.constructor;
|
|
41
|
-
const equalValue = other.value === this.value;
|
|
42
|
-
return equalType && equalValue;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
exports.EnumBase = EnumBase;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CommandBase = void 0;
|
|
4
|
-
const message_1 = require("./message");
|
|
5
|
-
const meta_1 = require("../../meta");
|
|
6
|
-
class CommandBase extends message_1.MessageBase {
|
|
7
|
-
constructor(metadata, props) {
|
|
8
|
-
super({ ...metadata, messageType: CommandBase.COMMAND_MESSAGE_TYPE }, props);
|
|
9
|
-
}
|
|
10
|
-
static commandType() {
|
|
11
|
-
return (0, meta_1.getCommandType)(this) || this.modelName();
|
|
12
|
-
}
|
|
13
|
-
static newCommand(props, context, timestamp) {
|
|
14
|
-
return new this({
|
|
15
|
-
id: this.id(),
|
|
16
|
-
context,
|
|
17
|
-
timestamp,
|
|
18
|
-
}, props);
|
|
19
|
-
}
|
|
20
|
-
commandType() {
|
|
21
|
-
return this.constructor.commandType();
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
exports.CommandBase = CommandBase;
|
|
25
|
-
CommandBase.COMMAND_MESSAGE_TYPE = "command";
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EventBase = void 0;
|
|
4
|
-
const message_1 = require("./message");
|
|
5
|
-
const meta_1 = require("../../meta");
|
|
6
|
-
class EventBase extends message_1.MessageBase {
|
|
7
|
-
constructor(metadata, props) {
|
|
8
|
-
super({ ...metadata, messageType: EventBase.EVENT_MESSAGE_TYPE }, props);
|
|
9
|
-
this._source = metadata.source;
|
|
10
|
-
}
|
|
11
|
-
static eventType() {
|
|
12
|
-
return (0, meta_1.getEventType)(this) || this.modelName();
|
|
13
|
-
}
|
|
14
|
-
static newEvent(source, props, context, timestamp) {
|
|
15
|
-
return new this({
|
|
16
|
-
id: this.id(),
|
|
17
|
-
source,
|
|
18
|
-
context,
|
|
19
|
-
timestamp,
|
|
20
|
-
}, props);
|
|
21
|
-
}
|
|
22
|
-
source() {
|
|
23
|
-
return this._source;
|
|
24
|
-
}
|
|
25
|
-
eventType() {
|
|
26
|
-
return this.constructor.eventType();
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
exports.EventBase = EventBase;
|
|
30
|
-
EventBase.EVENT_MESSAGE_TYPE = "event";
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Id } from "../id";
|
|
2
|
-
import { ModelWithId, Props } from "../model";
|
|
3
|
-
export interface MessageContext {
|
|
4
|
-
correlationId?: string;
|
|
5
|
-
causationId?: string;
|
|
6
|
-
}
|
|
7
|
-
export interface MessageMetadata {
|
|
8
|
-
readonly id: Id;
|
|
9
|
-
readonly messageType: string;
|
|
10
|
-
readonly timestamp?: number;
|
|
11
|
-
context?: MessageContext;
|
|
12
|
-
}
|
|
13
|
-
export declare class MessageBase<P extends Props> extends ModelWithId<P> {
|
|
14
|
-
private readonly _messageType;
|
|
15
|
-
private readonly _timestamp;
|
|
16
|
-
private _context?;
|
|
17
|
-
protected constructor(metadata: MessageMetadata, props: P);
|
|
18
|
-
props(): P;
|
|
19
|
-
messageType(): string;
|
|
20
|
-
timestamp(): number;
|
|
21
|
-
context(): MessageContext | undefined;
|
|
22
|
-
setContext(context: Partial<MessageContext>): void;
|
|
23
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.MessageBase = void 0;
|
|
7
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
-
const model_1 = require("../model");
|
|
9
|
-
class MessageBase extends model_1.ModelWithId {
|
|
10
|
-
constructor(metadata, props) {
|
|
11
|
-
super(metadata.id);
|
|
12
|
-
this._messageType = metadata.messageType;
|
|
13
|
-
this._context = metadata?.context ?? {};
|
|
14
|
-
this._timestamp = metadata.timestamp ?? Date.now();
|
|
15
|
-
this.initializeProps(props);
|
|
16
|
-
}
|
|
17
|
-
props() {
|
|
18
|
-
return super.props();
|
|
19
|
-
}
|
|
20
|
-
messageType() {
|
|
21
|
-
return this._messageType;
|
|
22
|
-
}
|
|
23
|
-
timestamp() {
|
|
24
|
-
return this._timestamp;
|
|
25
|
-
}
|
|
26
|
-
context() {
|
|
27
|
-
return this._context;
|
|
28
|
-
}
|
|
29
|
-
setContext(context) {
|
|
30
|
-
this._context = lodash_1.default.merge(this._context, context);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
exports.MessageBase = MessageBase;
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { Class } from "type-fest";
|
|
2
|
-
import { ModelId } from "../../meta";
|
|
3
|
-
import { ClassStatic } from "../../types";
|
|
4
|
-
export type PropKey = string | symbol;
|
|
5
|
-
export interface Props {
|
|
6
|
-
[key: PropKey]: any;
|
|
7
|
-
}
|
|
8
|
-
export type EmptyProps = {
|
|
9
|
-
[key: PropKey]: never;
|
|
10
|
-
};
|
|
11
|
-
export declare class ModelBase<P extends Props> {
|
|
12
|
-
static readonly EMPTY_PROPS: EmptyProps;
|
|
13
|
-
protected _props: P;
|
|
14
|
-
static isModel(model: any): model is AnyModel;
|
|
15
|
-
static mutable(): boolean;
|
|
16
|
-
static modelName<T extends AnyModel>(this: ModelClass<T>): string;
|
|
17
|
-
static modelVersion<T extends AnyModel>(this: ModelClass<T>): number;
|
|
18
|
-
static modelId<T extends AnyModel>(this: ModelClass<T>): `${string}|${number}`;
|
|
19
|
-
static hasModelId<T extends AnyModel>(this: ModelClass<T>, modelId: ModelId): boolean;
|
|
20
|
-
static ownPropsValidator<T extends AnyModel>(this: ModelClass<T>): import("../../meta").PropsValidator<T> | undefined;
|
|
21
|
-
static propsValidators<T extends AnyModel>(this: ModelClass<T>): import("../../meta").PropsValidator<AnyModel>[];
|
|
22
|
-
static ownStaticValues<T extends AnyModel>(this: ModelClass<T>): Map<PropertyKey, import("../../meta").StaticValue<T>>;
|
|
23
|
-
static ownPropsMap(): import("../../meta").PropsMap<ModelBase<any>>;
|
|
24
|
-
static propsMap(): import("../../meta").PropsMap<ModelBase<any>>;
|
|
25
|
-
constructor();
|
|
26
|
-
protected redefineModel(): void;
|
|
27
|
-
protected redefineProp(key: keyof this, propTargetKey: keyof P): void;
|
|
28
|
-
protected get _modelClass(): ModelClass<typeof this>;
|
|
29
|
-
isMutable(): boolean;
|
|
30
|
-
modelName(): string;
|
|
31
|
-
modelVersion(): number;
|
|
32
|
-
modelId(): `${string}|${number}`;
|
|
33
|
-
hasModelId(modelId: ModelId): boolean;
|
|
34
|
-
ownPropsValidator(): import("../../meta").PropsValidator<this> | undefined;
|
|
35
|
-
propsValidators(): import("../../meta").PropsValidator<AnyModel>[];
|
|
36
|
-
ownPropsMap(): import("../../meta").PropsMap<ModelBase<any>>;
|
|
37
|
-
propsMap(): import("../../meta").PropsMap<any>;
|
|
38
|
-
validateProps(props: P): void;
|
|
39
|
-
validate(): void;
|
|
40
|
-
propsIsEmpty(): boolean;
|
|
41
|
-
props(): P | null;
|
|
42
|
-
protected initializeProps(props: P): void;
|
|
43
|
-
}
|
|
44
|
-
export type AnyModel = ModelBase<Props>;
|
|
45
|
-
export type PropsOf<T extends AnyModel> = T extends ModelBase<infer P extends Props> ? P : never;
|
|
46
|
-
export interface ModelClass<T extends AnyModel = AnyModel> extends Class<T>, ClassStatic<typeof ModelBase<PropsOf<T>>> {
|
|
47
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.ValueObjectBase = void 0;
|
|
7
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
-
const model_1 = require("./model");
|
|
9
|
-
class ValueObjectBase extends model_1.ModelBase {
|
|
10
|
-
constructor(props) {
|
|
11
|
-
super();
|
|
12
|
-
this.initializeProps(props);
|
|
13
|
-
}
|
|
14
|
-
props() {
|
|
15
|
-
return super.props();
|
|
16
|
-
}
|
|
17
|
-
equals(vo) {
|
|
18
|
-
const equalsType = vo instanceof this.constructor;
|
|
19
|
-
const equalsValue = JSON.stringify(vo.props()) === JSON.stringify(this.props());
|
|
20
|
-
return equalsType && equalsValue;
|
|
21
|
-
}
|
|
22
|
-
with(props) {
|
|
23
|
-
const newProps = lodash_1.default.merge(this.props(), props);
|
|
24
|
-
return new this.constructor(newProps);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
exports.ValueObjectBase = ValueObjectBase;
|
package/dist/decorators/id.d.ts
DELETED
package/dist/decorators/id.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UseIdService = void 0;
|
|
4
|
-
const meta_1 = require("../meta");
|
|
5
|
-
const UseIdService = (idService) => {
|
|
6
|
-
return (target) => {
|
|
7
|
-
(0, meta_1.defineIdService)(target, idService);
|
|
8
|
-
};
|
|
9
|
-
};
|
|
10
|
-
exports.UseIdService = UseIdService;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Model = void 0;
|
|
4
|
-
const meta_1 = require("../../meta");
|
|
5
|
-
const Model = (name) => {
|
|
6
|
-
return (target) => {
|
|
7
|
-
(0, meta_1.setModelName)(target, name);
|
|
8
|
-
};
|
|
9
|
-
};
|
|
10
|
-
exports.Model = Model;
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { ModelClass } from "../../core";
|
|
2
|
-
import { StaticValueBuilder } from "../../meta";
|
|
3
|
-
export declare const Static: <T extends ModelClass<import("../../core").AnyModel>, I extends InstanceType<T> = InstanceType<T>>(builder: StaticValueBuilder<I>) => (target: T, key: string) => void;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Static = void 0;
|
|
4
|
-
const meta_1 = require("../../meta");
|
|
5
|
-
const Static = (builder) => {
|
|
6
|
-
return (target, key) => {
|
|
7
|
-
(0, meta_1.setStaticValue)(target, key, builder);
|
|
8
|
-
Object.defineProperty(target, key, {
|
|
9
|
-
configurable: false,
|
|
10
|
-
enumerable: true,
|
|
11
|
-
get() {
|
|
12
|
-
return (0, meta_1.getStaticValue)(target, key);
|
|
13
|
-
},
|
|
14
|
-
set() {
|
|
15
|
-
throw new Error("Static value is readonly");
|
|
16
|
-
},
|
|
17
|
-
});
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
exports.Static = Static;
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { ModelClass } from "../../core";
|
|
2
|
-
import { PropsValidator } from "../../meta";
|
|
3
|
-
export declare const Validator: <T extends ModelClass<import("../../core").AnyModel>, I extends InstanceType<T> = InstanceType<T>>(validator?: PropsValidator<I> | undefined) => (target: T) => void;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Validator = void 0;
|
|
4
|
-
const meta_1 = require("../../meta");
|
|
5
|
-
const Validator = (validator) => {
|
|
6
|
-
return (target) => {
|
|
7
|
-
if (validator)
|
|
8
|
-
(0, meta_1.setPropsValidator)(target, validator);
|
|
9
|
-
};
|
|
10
|
-
};
|
|
11
|
-
exports.Validator = Validator;
|