ddd-node 16.0.0 → 16.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/domain.d.ts +17 -0
- package/dist/core/domain.js +49 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.js +1 -0
- package/dist/core/model/model.d.ts +2 -0
- package/dist/core/model/model.js +6 -0
- package/dist/decorators/model/index.d.ts +2 -1
- package/dist/decorators/model/index.js +2 -1
- package/dist/decorators/model/model.d.ts +2 -0
- package/dist/decorators/model/{model-name.js → model.js} +3 -3
- package/dist/decorators/model/{model-name.d.ts → version.d.ts} +1 -1
- package/dist/decorators/model/version.js +10 -0
- package/dist/meta/model.metadata.d.ts +3 -1
- package/dist/meta/model.metadata.js +23 -5
- package/dist/package.json +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AnyModel, ModelClass } from "./model";
|
|
2
|
+
type ModelName = string;
|
|
3
|
+
type ModelVersion = number;
|
|
4
|
+
export declare class ModelVersionRegistry<T extends AnyModel = AnyModel> extends Map<ModelVersion, ModelClass<T>> {
|
|
5
|
+
}
|
|
6
|
+
export declare class ModelRegistry<T extends AnyModel = AnyModel> extends Map<ModelName, ModelVersionRegistry<T>> {
|
|
7
|
+
}
|
|
8
|
+
export declare class Domain {
|
|
9
|
+
private modelRegistry;
|
|
10
|
+
constructor(models?: ModelClass[]);
|
|
11
|
+
getModelVersionRegistry(modelName: ModelName): ModelVersionRegistry<AnyModel>;
|
|
12
|
+
getRegisteredModel(modelName: ModelName, modelVersion?: ModelVersion): ModelClass<AnyModel> | undefined;
|
|
13
|
+
hasRegisteredModel(modelName: ModelName, modelVersion: ModelVersion): boolean;
|
|
14
|
+
hasRegisteredModel(model: ModelClass): boolean;
|
|
15
|
+
registerModel(modelClass: ModelClass): this;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
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(models) {
|
|
12
|
+
this.modelRegistry = new ModelRegistry();
|
|
13
|
+
if (models) {
|
|
14
|
+
models.forEach((model) => this.registerModel(model));
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
getModelVersionRegistry(modelName) {
|
|
18
|
+
const modelVersionRegistry = () => this.modelRegistry.get(modelName);
|
|
19
|
+
if (!modelVersionRegistry())
|
|
20
|
+
this.modelRegistry.set(modelName, new ModelVersionRegistry());
|
|
21
|
+
return modelVersionRegistry();
|
|
22
|
+
}
|
|
23
|
+
getRegisteredModel(modelName, modelVersion = 0) {
|
|
24
|
+
const modelVersionRegistry = this.getModelVersionRegistry(modelName);
|
|
25
|
+
return modelVersionRegistry.get(modelVersion);
|
|
26
|
+
}
|
|
27
|
+
hasRegisteredModel(p1, p2) {
|
|
28
|
+
let modelName, modelVersion;
|
|
29
|
+
if (typeof p1 === "string") {
|
|
30
|
+
modelName = p1;
|
|
31
|
+
modelVersion = p2;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
modelName = p1.modelName();
|
|
35
|
+
modelVersion = p1.modelVersion();
|
|
36
|
+
}
|
|
37
|
+
return Boolean(this.getRegisteredModel(modelName, modelVersion));
|
|
38
|
+
}
|
|
39
|
+
registerModel(modelClass) {
|
|
40
|
+
const modelName = modelClass.modelName();
|
|
41
|
+
const modelVersion = modelClass.modelVersion();
|
|
42
|
+
if (this.hasRegisteredModel(modelName, modelVersion))
|
|
43
|
+
throw new Error(`Model ${modelName} with version ${modelVersion} has been registered`);
|
|
44
|
+
const versionRegistry = this.getModelVersionRegistry(modelName);
|
|
45
|
+
versionRegistry.set(modelVersion, modelClass);
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.Domain = Domain;
|
package/dist/core/index.d.ts
CHANGED
package/dist/core/index.js
CHANGED
|
@@ -13,6 +13,7 @@ export declare class ModelBase<P extends Props> {
|
|
|
13
13
|
static isModel(model: any): model is AnyModel;
|
|
14
14
|
static mutable(): boolean;
|
|
15
15
|
static modelName<T extends AnyModel>(this: ModelClass<T>): string;
|
|
16
|
+
static modelVersion<T extends AnyModel>(this: ModelClass<T>): number;
|
|
16
17
|
static ownPropsValidator<T extends AnyModel>(this: ModelClass<T>): import("../../meta").PropsValidator<T> | undefined;
|
|
17
18
|
static propsValidators<T extends AnyModel>(this: ModelClass<T>): import("../../meta").PropsValidator<AnyModel>[];
|
|
18
19
|
static ownStaticValues<T extends AnyModel>(this: ModelClass<T>): Map<string | symbol, import("../../meta").StaticValue<T>>;
|
|
@@ -24,6 +25,7 @@ export declare class ModelBase<P extends Props> {
|
|
|
24
25
|
protected get _modelClass(): ModelClass<this>;
|
|
25
26
|
isMutable(): boolean;
|
|
26
27
|
modelName(): string;
|
|
28
|
+
modelVersion(): number;
|
|
27
29
|
ownPropsValidator(): import("../../meta").PropsValidator<this> | undefined;
|
|
28
30
|
propsValidators(): import("../../meta").PropsValidator<AnyModel>[];
|
|
29
31
|
ownPropsMap(): import("../../meta").PropsMap<ModelBase<any>>;
|
package/dist/core/model/model.js
CHANGED
|
@@ -17,6 +17,9 @@ class ModelBase {
|
|
|
17
17
|
static modelName() {
|
|
18
18
|
return (0, meta_1.getModelName)(this);
|
|
19
19
|
}
|
|
20
|
+
static modelVersion() {
|
|
21
|
+
return (0, meta_1.getModelVersion)(this);
|
|
22
|
+
}
|
|
20
23
|
static ownPropsValidator() {
|
|
21
24
|
return (0, meta_1.getOwnPropsValidator)(this);
|
|
22
25
|
}
|
|
@@ -60,6 +63,9 @@ class ModelBase {
|
|
|
60
63
|
modelName() {
|
|
61
64
|
return this._modelClass.modelName();
|
|
62
65
|
}
|
|
66
|
+
modelVersion() {
|
|
67
|
+
return this._modelClass.modelVersion();
|
|
68
|
+
}
|
|
63
69
|
ownPropsValidator() {
|
|
64
70
|
return this._modelClass.ownPropsValidator();
|
|
65
71
|
}
|
|
@@ -15,7 +15,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./prop"), exports);
|
|
18
|
-
__exportStar(require("./model
|
|
18
|
+
__exportStar(require("./model"), exports);
|
|
19
|
+
__exportStar(require("./version"), exports);
|
|
19
20
|
__exportStar(require("./validator"), exports);
|
|
20
21
|
__exportStar(require("./static"), exports);
|
|
21
22
|
__exportStar(require("./enum"), exports);
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.Model = void 0;
|
|
4
4
|
const meta_1 = require("../../meta");
|
|
5
|
-
const
|
|
5
|
+
const Model = (name) => {
|
|
6
6
|
return (target) => {
|
|
7
7
|
(0, meta_1.setModelName)(target, name);
|
|
8
8
|
};
|
|
9
9
|
};
|
|
10
|
-
exports.
|
|
10
|
+
exports.Model = Model;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { ModelClass } from "../../core";
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const Version: (version: number) => <T extends ModelClass<import("../../core").AnyModel>>(target: T) => void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Version = void 0;
|
|
4
|
+
const meta_1 = require("../../meta");
|
|
5
|
+
const Version = (version) => {
|
|
6
|
+
return (target) => {
|
|
7
|
+
(0, meta_1.setModelVersion)(target, version);
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
exports.Version = Version;
|
|
@@ -5,8 +5,10 @@ export declare class PropsMap<T extends AnyModel = AnyModel> extends Map<PropKey
|
|
|
5
5
|
export declare const getOwnPropsMap: <T extends AnyModel = AnyModel>(target: T) => PropsMap<T>;
|
|
6
6
|
export declare const setProp: <T extends AnyModel = AnyModel>(target: T, key: PropKey, propTargetKey?: keyof PropsOf<T> | undefined) => void;
|
|
7
7
|
export declare const getPropsMap: <T extends AnyModel = AnyModel>(target: T) => PropsMap<T>;
|
|
8
|
-
export declare const setModelName: <T extends AnyModel>(target: ModelClass<T>, name
|
|
8
|
+
export declare const setModelName: <T extends AnyModel>(target: ModelClass<T>, name: string) => void;
|
|
9
9
|
export declare const getModelName: <T extends AnyModel>(target: ModelClass<T>) => string;
|
|
10
|
+
export declare const setModelVersion: <T extends AnyModel>(target: ModelClass<T>, version: number) => void;
|
|
11
|
+
export declare const getModelVersion: <T extends AnyModel>(target: ModelClass<T>) => number;
|
|
10
12
|
export type PropsValidator<T extends AnyModel = AnyModel> = (props: PropsOf<T>) => void;
|
|
11
13
|
export declare const setPropsValidator: <T extends AnyModel>(target: object, validator: PropsValidator<T>) => void;
|
|
12
14
|
export declare const getOwnPropsValidator: <T extends AnyModel>(target: object) => PropsValidator<T> | undefined;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getStaticValue = exports.setStaticValue = exports.getOwnStaticValues = exports.getPropsValidators = exports.PropsValidatorsMetaKey = exports.getOwnPropsValidator = exports.setPropsValidator = exports.getModelName = exports.setModelName = exports.getPropsMap = exports.setProp = exports.getOwnPropsMap = exports.PropsMap = void 0;
|
|
6
|
+
exports.getStaticValue = exports.setStaticValue = exports.getOwnStaticValues = exports.getPropsValidators = exports.PropsValidatorsMetaKey = exports.getOwnPropsValidator = exports.setPropsValidator = exports.getModelVersion = exports.setModelVersion = exports.getModelName = exports.setModelName = exports.getPropsMap = exports.setProp = exports.getOwnPropsMap = exports.PropsMap = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
4
8
|
const core_1 = require("../core");
|
|
5
9
|
const static_value_1 = require("./helpers/static-value");
|
|
6
10
|
const OwnPropsMapMetaKey = Symbol.for("OWN_PROPS_MAP");
|
|
@@ -49,16 +53,29 @@ exports.getPropsMap = getPropsMap;
|
|
|
49
53
|
//
|
|
50
54
|
const ModelNameMetaKey = Symbol.for("MODEL_NAME");
|
|
51
55
|
const setModelName = (target, name) => {
|
|
52
|
-
Reflect.defineMetadata(ModelNameMetaKey, name
|
|
56
|
+
Reflect.defineMetadata(ModelNameMetaKey, name, target);
|
|
53
57
|
};
|
|
54
58
|
exports.setModelName = setModelName;
|
|
55
59
|
const getModelName = (target) => {
|
|
56
|
-
const modelName = () => Reflect.
|
|
60
|
+
const modelName = () => Reflect.getOwnMetadata(ModelNameMetaKey, target);
|
|
57
61
|
if (!modelName())
|
|
58
|
-
(0, exports.setModelName)(target);
|
|
62
|
+
(0, exports.setModelName)(target, target.name);
|
|
59
63
|
return modelName();
|
|
60
64
|
};
|
|
61
65
|
exports.getModelName = getModelName;
|
|
66
|
+
//
|
|
67
|
+
const ModelVersionMetaKey = Symbol.for("MODEL_VERSION");
|
|
68
|
+
const setModelVersion = (target, version) => {
|
|
69
|
+
Reflect.defineMetadata(ModelVersionMetaKey, version, target);
|
|
70
|
+
};
|
|
71
|
+
exports.setModelVersion = setModelVersion;
|
|
72
|
+
const getModelVersion = (target) => {
|
|
73
|
+
const modelVersion = () => Reflect.getOwnMetadata(ModelVersionMetaKey, target);
|
|
74
|
+
if (!modelVersion())
|
|
75
|
+
(0, exports.setModelVersion)(target, 0);
|
|
76
|
+
return modelVersion();
|
|
77
|
+
};
|
|
78
|
+
exports.getModelVersion = getModelVersion;
|
|
62
79
|
const OwnPropsValidatorMetaKey = Symbol.for("OWN_PROPS_VALIDATOR");
|
|
63
80
|
const setPropsValidator = (target, validator) => {
|
|
64
81
|
Reflect.defineMetadata(OwnPropsValidatorMetaKey, validator, target);
|
|
@@ -73,7 +90,7 @@ const getPropsValidators = (target) => {
|
|
|
73
90
|
const validators = () => Reflect.getOwnMetadata(exports.PropsValidatorsMetaKey, target);
|
|
74
91
|
if (validators())
|
|
75
92
|
return validators();
|
|
76
|
-
|
|
93
|
+
let result = [];
|
|
77
94
|
let _target = target;
|
|
78
95
|
do {
|
|
79
96
|
const ownValidator = (0, exports.getOwnPropsValidator)(_target);
|
|
@@ -81,6 +98,7 @@ const getPropsValidators = (target) => {
|
|
|
81
98
|
result.push(ownValidator);
|
|
82
99
|
_target = Reflect.getPrototypeOf(_target);
|
|
83
100
|
} while (_target !== null);
|
|
101
|
+
result = lodash_1.default.uniq(result);
|
|
84
102
|
Reflect.defineMetadata(exports.PropsValidatorsMetaKey, result, target);
|
|
85
103
|
return validators();
|
|
86
104
|
};
|
package/dist/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"ddd-node","version":"16.
|
|
1
|
+
{"name":"ddd-node","version":"16.1.0","description":"Domain Driven Design base for NodeJs","type":"commonjs","main":"index.js","types":"index.d.ts","files":["dist"],"repository":{"type":"git","url":"https://github.com/nqd881/ddd-node"},"keywords":["ddd","ddd-node","ddd-base","ddd-ts","ddd-js"],"author":"Quoc Dai","license":"ISC","devDependencies":{"@types/chai":"^4.3.16","@types/lodash":"^4.14.200","@types/mocha":"^10.0.6","@types/uuid":"^9.0.6","chai":"^5.1.1","chai-deep-match":"^1.2.1","ddd-node":"file:dist","mocha":"^10.4.0","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^5.2.2"},"dependencies":{"lodash":"^4.17.21","nodejs-snowflake":"^2.0.1","reflect-metadata":"^0.1.13","tsc-alias":"^1.8.8","type-fest":"^4.15.0","uuid":"^9.0.1"}}
|