ddd-node 17.2.0 → 18.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/event-sourced-aggregate.d.ts +8 -4
- package/dist/core/aggregate/event-sourced-aggregate.js +12 -0
- package/dist/core/domain.d.ts +15 -12
- package/dist/core/domain.js +29 -36
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.js +1 -0
- package/dist/core/message/command.js +1 -1
- package/dist/core/message/event.d.ts +2 -2
- package/dist/core/message/event.js +2 -2
- package/dist/core/model/model.d.ts +7 -9
- package/dist/core/model/model.js +1 -1
- package/dist/core/model-registry.d.ts +17 -0
- package/dist/core/model-registry.js +55 -0
- package/dist/decorators/enum.d.ts +2 -0
- package/dist/decorators/{model/enum.js → enum.js} +1 -1
- package/dist/decorators/index.d.ts +1 -0
- package/dist/decorators/index.js +1 -0
- package/dist/decorators/message/command.js +1 -1
- package/dist/decorators/message/event.js +1 -1
- package/dist/decorators/model/index.d.ts +1 -3
- package/dist/decorators/model/index.js +1 -3
- package/dist/decorators/model/model.d.ts +12 -2
- package/dist/decorators/model/model.js +47 -3
- package/dist/decorators/model/prop.d.ts +2 -2
- package/dist/decorators/model/prop.js +1 -1
- package/dist/decorators/model/static.d.ts +1 -1
- package/dist/decorators/model/static.js +1 -10
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -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/{helpers → aggregate-es}/index.js +2 -1
- 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 +2 -3
- package/dist/meta/index.js +2 -3
- package/dist/meta/model/index.d.ts +7 -0
- package/dist/meta/model/index.js +23 -0
- package/dist/meta/model/model-domain.d.ts +5 -0
- package/dist/meta/model/model-domain.js +15 -0
- package/dist/meta/model/model-id.d.ts +16 -0
- package/dist/meta/model/model-id.js +39 -0
- package/dist/meta/model/model-name.d.ts +8 -0
- package/dist/meta/model/model-name.js +25 -0
- package/dist/meta/model/model-props-map.d.ts +6 -0
- package/dist/meta/model/model-props-map.js +45 -0
- package/dist/meta/model/model-props-validator.d.ts +6 -0
- package/dist/meta/model/model-props-validator.js +33 -0
- package/dist/meta/model/model-static-values.d.ts +13 -0
- package/dist/meta/model/model-static-values.js +54 -0
- package/dist/meta/model/model-version.d.ts +8 -0
- package/dist/meta/model/model-version.js +25 -0
- package/dist/package.json +1 -1
- package/package.json +1 -1
- package/dist/decorators/model/enum.d.ts +0 -2
- 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 -35
- package/dist/meta/model.metadata.js +0 -169
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getEventApplierMap = exports.EventApplierMapMetaKey = exports.defineEventApplier = exports.getOwnEventApplierMap = exports.OwnEventApplierMapMetaKey = exports.EventApplierMap = void 0;
|
|
4
|
+
require("reflect-metadata");
|
|
5
|
+
class EventApplierMap extends Map {
|
|
6
|
+
}
|
|
7
|
+
exports.EventApplierMap = EventApplierMap;
|
|
8
|
+
exports.OwnEventApplierMapMetaKey = Symbol.for("OWN_EVENT_APPLIER_MAP");
|
|
9
|
+
const getOwnEventApplierMap = (target) => {
|
|
10
|
+
if (!Reflect.hasOwnMetadata(exports.OwnEventApplierMapMetaKey, target))
|
|
11
|
+
Reflect.defineMetadata(exports.OwnEventApplierMapMetaKey, new EventApplierMap(), target);
|
|
12
|
+
return Reflect.getMetadata(exports.OwnEventApplierMapMetaKey, target);
|
|
13
|
+
};
|
|
14
|
+
exports.getOwnEventApplierMap = getOwnEventApplierMap;
|
|
15
|
+
const defineEventApplier = (target, eventType, applier) => {
|
|
16
|
+
const eventAppliersMap = (0, exports.getOwnEventApplierMap)(target);
|
|
17
|
+
eventAppliersMap.set(eventType, applier);
|
|
18
|
+
};
|
|
19
|
+
exports.defineEventApplier = defineEventApplier;
|
|
20
|
+
exports.EventApplierMapMetaKey = Symbol.for("EVENT_HANDLER_MAP");
|
|
21
|
+
const getEventApplierMap = (target) => {
|
|
22
|
+
if (!Reflect.hasOwnMetadata(exports.EventApplierMapMetaKey, target)) {
|
|
23
|
+
const buildEventApplierMap = (target) => {
|
|
24
|
+
let _target = target;
|
|
25
|
+
const result = new EventApplierMap();
|
|
26
|
+
const ownEventApplierMaps = [];
|
|
27
|
+
do {
|
|
28
|
+
const ownEventApplierMap = (0, exports.getOwnEventApplierMap)(_target);
|
|
29
|
+
ownEventApplierMaps.unshift(ownEventApplierMap);
|
|
30
|
+
_target = Reflect.getPrototypeOf(_target);
|
|
31
|
+
} while (_target !== null);
|
|
32
|
+
ownEventApplierMaps.forEach((ownEventApplierMap) => {
|
|
33
|
+
ownEventApplierMap.forEach((eventApplier, methodName) => {
|
|
34
|
+
result.set(methodName, eventApplier);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
Reflect.defineMetadata(exports.EventApplierMapMetaKey, buildEventApplierMap(target), target);
|
|
40
|
+
}
|
|
41
|
+
return Reflect.getOwnMetadata(exports.EventApplierMapMetaKey, target);
|
|
42
|
+
};
|
|
43
|
+
exports.getEventApplierMap = getEventApplierMap;
|
|
@@ -14,4 +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("./
|
|
17
|
+
__exportStar(require("./event-applier-map"), exports);
|
|
18
|
+
__exportStar(require("./command-handler-map"), exports);
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
2
|
export type CommandType = string;
|
|
3
|
-
export declare
|
|
4
|
-
|
|
3
|
+
export declare class CType extends String {
|
|
4
|
+
static validate(commandType: string): void;
|
|
5
|
+
constructor(commandType: CommandType);
|
|
6
|
+
}
|
|
7
|
+
export declare const defineCommandType: (target: object, commandType: CommandType) => void;
|
|
8
|
+
export declare const getCommandType: (target: object) => CommandType;
|
|
@@ -1,13 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getCommandType = exports.
|
|
3
|
+
exports.getCommandType = exports.defineCommandType = exports.CType = void 0;
|
|
4
4
|
require("reflect-metadata");
|
|
5
|
+
class CType extends String {
|
|
6
|
+
static validate(commandType) {
|
|
7
|
+
if (commandType.trim().length === 0)
|
|
8
|
+
throw new Error("Command type cannot be an empty string");
|
|
9
|
+
}
|
|
10
|
+
constructor(commandType) {
|
|
11
|
+
CType.validate(commandType);
|
|
12
|
+
super(commandType);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.CType = CType;
|
|
5
16
|
const CommandTypeMetaKey = Symbol.for("COMMAND_TYPE");
|
|
6
|
-
const
|
|
7
|
-
Reflect.defineMetadata(CommandTypeMetaKey, commandType, target);
|
|
17
|
+
const defineCommandType = (target, commandType) => {
|
|
18
|
+
Reflect.defineMetadata(CommandTypeMetaKey, new CType(commandType), target);
|
|
8
19
|
};
|
|
9
|
-
exports.
|
|
20
|
+
exports.defineCommandType = defineCommandType;
|
|
10
21
|
const getCommandType = (target) => {
|
|
11
|
-
|
|
22
|
+
const commandType = Reflect.getOwnMetadata(CommandTypeMetaKey, target);
|
|
23
|
+
if (!commandType)
|
|
24
|
+
throw new Error("Command's type is not defined");
|
|
25
|
+
return commandType.valueOf();
|
|
12
26
|
};
|
|
13
27
|
exports.getCommandType = getCommandType;
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
2
|
export type EventType = string;
|
|
3
|
-
export declare
|
|
4
|
-
|
|
3
|
+
export declare class EType extends String {
|
|
4
|
+
static validate(eventType: string): void;
|
|
5
|
+
constructor(eventType: EventType);
|
|
6
|
+
}
|
|
7
|
+
export declare const defineEventType: (target: object, eventType: EventType) => void;
|
|
8
|
+
export declare const getEventType: (target: object) => EventType;
|
|
@@ -1,13 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getEventType = exports.
|
|
3
|
+
exports.getEventType = exports.defineEventType = exports.EType = void 0;
|
|
4
4
|
require("reflect-metadata");
|
|
5
|
+
class EType extends String {
|
|
6
|
+
static validate(eventType) {
|
|
7
|
+
if (eventType.trim().length === 0)
|
|
8
|
+
throw new Error("Event type cannot be an empty string");
|
|
9
|
+
}
|
|
10
|
+
constructor(eventType) {
|
|
11
|
+
EType.validate(eventType);
|
|
12
|
+
super(eventType);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.EType = EType;
|
|
5
16
|
const EventTypeMetaKey = Symbol.for("EVENT_TYPE");
|
|
6
|
-
const
|
|
7
|
-
Reflect.defineMetadata(EventTypeMetaKey, eventType, target);
|
|
17
|
+
const defineEventType = (target, eventType) => {
|
|
18
|
+
Reflect.defineMetadata(EventTypeMetaKey, new EType(eventType), target);
|
|
8
19
|
};
|
|
9
|
-
exports.
|
|
20
|
+
exports.defineEventType = defineEventType;
|
|
10
21
|
const getEventType = (target) => {
|
|
11
|
-
|
|
22
|
+
const eventType = Reflect.getOwnMetadata(EventTypeMetaKey, target);
|
|
23
|
+
if (!eventType)
|
|
24
|
+
throw new Error("Event's type is not defined");
|
|
25
|
+
return eventType.valueOf();
|
|
12
26
|
};
|
|
13
27
|
exports.getEventType = getEventType;
|
package/dist/meta/id.metadata.js
CHANGED
|
@@ -9,9 +9,8 @@ const defineIdService = (target, idService) => {
|
|
|
9
9
|
exports.defineIdService = defineIdService;
|
|
10
10
|
const getIdService = (target) => {
|
|
11
11
|
const idService = () => Reflect.getMetadata(exports.IdServiceMetaKey, target);
|
|
12
|
-
if (idService())
|
|
13
|
-
|
|
14
|
-
Reflect.defineMetadata(exports.IdServiceMetaKey, new core_1.Uuid4Service(), target);
|
|
12
|
+
if (!idService())
|
|
13
|
+
(0, exports.defineIdService)(target, new core_1.Uuid4Service());
|
|
15
14
|
return idService();
|
|
16
15
|
};
|
|
17
16
|
exports.getIdService = getIdService;
|
package/dist/meta/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export * from "./
|
|
2
|
-
export * from "./aggregate
|
|
1
|
+
export * from "./model";
|
|
2
|
+
export * from "./aggregate-es";
|
|
3
3
|
export * from "./id.metadata";
|
|
4
|
-
export * from "./model.metadata";
|
|
5
4
|
export * from "./event.metadata";
|
|
6
5
|
export * from "./command.metadata";
|
package/dist/meta/index.js
CHANGED
|
@@ -14,9 +14,8 @@ 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("./
|
|
18
|
-
__exportStar(require("./aggregate
|
|
17
|
+
__exportStar(require("./model"), exports);
|
|
18
|
+
__exportStar(require("./aggregate-es"), exports);
|
|
19
19
|
__exportStar(require("./id.metadata"), exports);
|
|
20
|
-
__exportStar(require("./model.metadata"), exports);
|
|
21
20
|
__exportStar(require("./event.metadata"), exports);
|
|
22
21
|
__exportStar(require("./command.metadata"), exports);
|
|
@@ -0,0 +1,23 @@
|
|
|
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("./model-id"), exports);
|
|
18
|
+
__exportStar(require("./model-name"), exports);
|
|
19
|
+
__exportStar(require("./model-props-map"), exports);
|
|
20
|
+
__exportStar(require("./model-static-values"), exports);
|
|
21
|
+
__exportStar(require("./model-props-validator"), exports);
|
|
22
|
+
__exportStar(require("./model-version"), exports);
|
|
23
|
+
__exportStar(require("./model-domain"), exports);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AnyModel, ModelClass } from "../../core";
|
|
2
|
+
export declare const ModelDomainMetaKey: unique symbol;
|
|
3
|
+
export declare const DEFAULT_MODEL_DOMAIN = "default";
|
|
4
|
+
export declare const defineModelDomain: <T extends AnyModel>(target: ModelClass<T>, domainName: string) => void;
|
|
5
|
+
export declare const getModelDomain: <T extends AnyModel>(target: ModelClass<T>) => string;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getModelDomain = exports.defineModelDomain = exports.DEFAULT_MODEL_DOMAIN = exports.ModelDomainMetaKey = void 0;
|
|
4
|
+
exports.ModelDomainMetaKey = Symbol.for("MODEL_DOMAIN");
|
|
5
|
+
exports.DEFAULT_MODEL_DOMAIN = "default";
|
|
6
|
+
const defineModelDomain = (target, domainName) => {
|
|
7
|
+
Reflect.defineMetadata(exports.ModelDomainMetaKey, domainName, target);
|
|
8
|
+
};
|
|
9
|
+
exports.defineModelDomain = defineModelDomain;
|
|
10
|
+
const getModelDomain = (target) => {
|
|
11
|
+
if (!Reflect.hasOwnMetadata(exports.ModelDomainMetaKey, target))
|
|
12
|
+
(0, exports.defineModelDomain)(target, exports.DEFAULT_MODEL_DOMAIN);
|
|
13
|
+
return Reflect.getOwnMetadata(exports.ModelDomainMetaKey, target);
|
|
14
|
+
};
|
|
15
|
+
exports.getModelDomain = getModelDomain;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AnyModel, ModelClass } from "../../core";
|
|
2
|
+
import { ModelName } from "./model-name";
|
|
3
|
+
import { ModelVersion } from "./model-version";
|
|
4
|
+
export type ModelId = string;
|
|
5
|
+
export type MIdFormat = `${string}${typeof MId.Divider}${number}`;
|
|
6
|
+
export declare class MId extends String {
|
|
7
|
+
readonly modelName: ModelName;
|
|
8
|
+
readonly modelVersion: ModelVersion;
|
|
9
|
+
static Divider: "|";
|
|
10
|
+
static Format: RegExp;
|
|
11
|
+
static fromValue(value: ModelId): MId;
|
|
12
|
+
static makeValue(modelName: ModelName, modelVersion: ModelVersion): ModelId;
|
|
13
|
+
constructor(modelName: ModelName, modelVersion: ModelVersion);
|
|
14
|
+
}
|
|
15
|
+
export declare const setModelId: <T extends AnyModel>(target: ModelClass<T>, modelId: MId) => void;
|
|
16
|
+
export declare const getModelId: <T extends AnyModel>(target: ModelClass<T>) => ModelId;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getModelId = exports.setModelId = exports.MId = void 0;
|
|
4
|
+
const model_name_1 = require("./model-name");
|
|
5
|
+
const model_version_1 = require("./model-version");
|
|
6
|
+
class MId extends String {
|
|
7
|
+
static fromValue(value) {
|
|
8
|
+
if (!this.Format.test(value))
|
|
9
|
+
throw new Error(`Cannot parse MId from value ${value}`);
|
|
10
|
+
const [modelName, modelVersion] = value.split(this.Divider);
|
|
11
|
+
return new MId(modelName, Number(modelVersion));
|
|
12
|
+
}
|
|
13
|
+
static makeValue(modelName, modelVersion) {
|
|
14
|
+
const modelId = `${modelName}${this.Divider}${modelVersion}`;
|
|
15
|
+
return modelId;
|
|
16
|
+
}
|
|
17
|
+
constructor(modelName, modelVersion) {
|
|
18
|
+
super(MId.makeValue(modelName, modelVersion));
|
|
19
|
+
this.modelName = modelName;
|
|
20
|
+
this.modelVersion = modelVersion;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.MId = MId;
|
|
24
|
+
MId.Divider = "|";
|
|
25
|
+
MId.Format = new RegExp(/^.+\|[0-9]+$/);
|
|
26
|
+
const ModelIdMetaKey = Symbol.for("MODEL_ID");
|
|
27
|
+
const setModelId = (target, modelId) => {
|
|
28
|
+
Reflect.defineMetadata(ModelIdMetaKey, modelId, target);
|
|
29
|
+
};
|
|
30
|
+
exports.setModelId = setModelId;
|
|
31
|
+
const getModelId = (target) => {
|
|
32
|
+
if (!Reflect.hasOwnMetadata(ModelIdMetaKey, target)) {
|
|
33
|
+
const modelName = (0, model_name_1.getModelName)(target);
|
|
34
|
+
const modelVersion = (0, model_version_1.getModelVersion)(target);
|
|
35
|
+
(0, exports.setModelId)(target, new MId(modelName, modelVersion));
|
|
36
|
+
}
|
|
37
|
+
return Reflect.getOwnMetadata(ModelIdMetaKey, target).valueOf();
|
|
38
|
+
};
|
|
39
|
+
exports.getModelId = getModelId;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AnyModel, ModelClass } from "../../core";
|
|
2
|
+
export type ModelName = string;
|
|
3
|
+
export declare class MName extends String {
|
|
4
|
+
static validate(modelName: ModelName): void;
|
|
5
|
+
constructor(modelName: ModelName);
|
|
6
|
+
}
|
|
7
|
+
export declare const defineModelName: <T extends AnyModel>(target: ModelClass<T>, modelName: ModelName) => void;
|
|
8
|
+
export declare const getModelName: <T extends AnyModel>(target: ModelClass<T>) => ModelName;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getModelName = exports.defineModelName = exports.MName = void 0;
|
|
4
|
+
class MName extends String {
|
|
5
|
+
static validate(modelName) {
|
|
6
|
+
if (modelName.trim().length === 0)
|
|
7
|
+
throw new Error("Model name cannot be an empty string");
|
|
8
|
+
}
|
|
9
|
+
constructor(modelName) {
|
|
10
|
+
MName.validate(modelName);
|
|
11
|
+
super(modelName);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.MName = MName;
|
|
15
|
+
const ModelNameMetaKey = Symbol.for("MODEL_NAME");
|
|
16
|
+
const defineModelName = (target, modelName) => {
|
|
17
|
+
Reflect.defineMetadata(ModelNameMetaKey, new MName(modelName), target);
|
|
18
|
+
};
|
|
19
|
+
exports.defineModelName = defineModelName;
|
|
20
|
+
const getModelName = (target) => {
|
|
21
|
+
if (!Reflect.hasOwnMetadata(ModelNameMetaKey, target))
|
|
22
|
+
(0, exports.defineModelName)(target, target.name);
|
|
23
|
+
return Reflect.getOwnMetadata(ModelNameMetaKey, target).valueOf();
|
|
24
|
+
};
|
|
25
|
+
exports.getModelName = getModelName;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AnyModel, PropsOf } from "../../core";
|
|
2
|
+
export declare class PropsMap<T extends AnyModel = AnyModel> extends Map<PropertyKey, keyof PropsOf<T>> {
|
|
3
|
+
}
|
|
4
|
+
export declare const getOwnPropsMap: <T extends AnyModel = AnyModel>(target: T) => PropsMap<T>;
|
|
5
|
+
export declare const defineProp: <T extends AnyModel = AnyModel>(target: T, key: PropertyKey, propTargetKey?: keyof PropsOf<T> | undefined) => void;
|
|
6
|
+
export declare const getPropsMap: <T extends AnyModel = AnyModel>(target: T) => PropsMap<T>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPropsMap = exports.defineProp = exports.getOwnPropsMap = exports.PropsMap = void 0;
|
|
4
|
+
const core_1 = require("../../core");
|
|
5
|
+
const OwnPropsMapMetaKey = Symbol.for("OWN_PROPS_MAP");
|
|
6
|
+
class PropsMap extends Map {
|
|
7
|
+
}
|
|
8
|
+
exports.PropsMap = PropsMap;
|
|
9
|
+
// target is prototype
|
|
10
|
+
const getOwnPropsMap = (target) => {
|
|
11
|
+
if (!Reflect.hasOwnMetadata(OwnPropsMapMetaKey, target))
|
|
12
|
+
Reflect.defineMetadata(OwnPropsMapMetaKey, new PropsMap(), target);
|
|
13
|
+
return Reflect.getOwnMetadata(OwnPropsMapMetaKey, target);
|
|
14
|
+
};
|
|
15
|
+
exports.getOwnPropsMap = getOwnPropsMap;
|
|
16
|
+
const defineProp = (target, key, propTargetKey) => {
|
|
17
|
+
const ownPropsMap = (0, exports.getOwnPropsMap)(target);
|
|
18
|
+
if (propTargetKey)
|
|
19
|
+
ownPropsMap.set(key, propTargetKey);
|
|
20
|
+
};
|
|
21
|
+
exports.defineProp = defineProp;
|
|
22
|
+
const PropsMapMetaKey = Symbol.for("PROPS_MAP");
|
|
23
|
+
const getPropsMap = (target) => {
|
|
24
|
+
if (!Reflect.hasOwnMetadata(PropsMapMetaKey, target)) {
|
|
25
|
+
const buildPropsMap = (target) => {
|
|
26
|
+
let _target = target;
|
|
27
|
+
const result = new PropsMap();
|
|
28
|
+
const ownPropsMapList = [];
|
|
29
|
+
do {
|
|
30
|
+
if (core_1.ModelBase.isModel(_target)) {
|
|
31
|
+
const ownPropsMap = (0, exports.getOwnPropsMap)(_target);
|
|
32
|
+
ownPropsMapList.unshift(ownPropsMap);
|
|
33
|
+
}
|
|
34
|
+
_target = Reflect.getPrototypeOf(_target);
|
|
35
|
+
} while (_target !== null);
|
|
36
|
+
ownPropsMapList.forEach((ownPropsMap) => {
|
|
37
|
+
ownPropsMap.forEach((targetPropKey, key) => result.set(key, targetPropKey));
|
|
38
|
+
});
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
Reflect.defineMetadata(PropsMapMetaKey, buildPropsMap(target), target);
|
|
42
|
+
}
|
|
43
|
+
return Reflect.getOwnMetadata(PropsMapMetaKey, target);
|
|
44
|
+
};
|
|
45
|
+
exports.getPropsMap = getPropsMap;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AnyModel, PropsOf } from "../../core";
|
|
2
|
+
export type PropsValidator<T extends AnyModel = AnyModel> = (props: PropsOf<T>) => void;
|
|
3
|
+
export declare const definePropsValidator: <T extends AnyModel>(target: object, validator: PropsValidator<T>) => void;
|
|
4
|
+
export declare const getOwnPropsValidator: <T extends AnyModel>(target: object) => PropsValidator<T> | undefined;
|
|
5
|
+
export declare const PropsValidatorsMetaKey: unique symbol;
|
|
6
|
+
export declare const getPropsValidators: (target: object) => PropsValidator[];
|
|
@@ -0,0 +1,33 @@
|
|
|
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.getPropsValidators = exports.PropsValidatorsMetaKey = exports.getOwnPropsValidator = exports.definePropsValidator = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const OwnPropsValidatorMetaKey = Symbol.for("OWN_PROPS_VALIDATOR");
|
|
9
|
+
const definePropsValidator = (target, validator) => {
|
|
10
|
+
Reflect.defineMetadata(OwnPropsValidatorMetaKey, validator, target);
|
|
11
|
+
};
|
|
12
|
+
exports.definePropsValidator = definePropsValidator;
|
|
13
|
+
const getOwnPropsValidator = (target) => {
|
|
14
|
+
return Reflect.getOwnMetadata(OwnPropsValidatorMetaKey, target);
|
|
15
|
+
};
|
|
16
|
+
exports.getOwnPropsValidator = getOwnPropsValidator;
|
|
17
|
+
exports.PropsValidatorsMetaKey = Symbol.for("PROPS_VALIDATORS");
|
|
18
|
+
const getPropsValidators = (target) => {
|
|
19
|
+
if (!Reflect.hasOwnMetadata(exports.PropsValidatorsMetaKey, target)) {
|
|
20
|
+
let result = [];
|
|
21
|
+
let _target = target;
|
|
22
|
+
do {
|
|
23
|
+
const ownValidator = (0, exports.getOwnPropsValidator)(_target);
|
|
24
|
+
if (ownValidator)
|
|
25
|
+
result.push(ownValidator);
|
|
26
|
+
_target = Reflect.getPrototypeOf(_target);
|
|
27
|
+
} while (_target !== null);
|
|
28
|
+
result = lodash_1.default.uniq(result);
|
|
29
|
+
Reflect.defineMetadata(exports.PropsValidatorsMetaKey, result, target);
|
|
30
|
+
}
|
|
31
|
+
return Reflect.getOwnMetadata(exports.PropsValidatorsMetaKey, target);
|
|
32
|
+
};
|
|
33
|
+
exports.getPropsValidators = getPropsValidators;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AnyModel, ModelClass } from "../../core";
|
|
2
|
+
export type StaticValueBuilder<T extends AnyModel = AnyModel> = () => T;
|
|
3
|
+
export declare class StaticValue<T extends AnyModel = AnyModel> {
|
|
4
|
+
private _value;
|
|
5
|
+
constructor(value: T | StaticValueBuilder<T>);
|
|
6
|
+
get value(): T;
|
|
7
|
+
}
|
|
8
|
+
export declare class StaticValuesMap<T extends AnyModel> extends Map<PropertyKey, StaticValue<T>> {
|
|
9
|
+
}
|
|
10
|
+
export declare const getOwnStaticValues: <T extends AnyModel>(target: object) => StaticValuesMap<T>;
|
|
11
|
+
export declare const setStaticValue: <T extends AnyModel>(target: object, key: PropertyKey, value: T | StaticValueBuilder<T>) => void;
|
|
12
|
+
export declare const getStaticValue: (target: object, key: PropertyKey) => AnyModel | undefined;
|
|
13
|
+
export declare const defineStaticValueProperty: (target: ModelClass, key: PropertyKey) => void;
|
|
@@ -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;
|
package/dist/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"ddd-node","version":"
|
|
1
|
+
{"name":"ddd-node","version":"18.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.15.0","uuid":"^9.0.1"}}
|
package/package.json
CHANGED
|
@@ -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;
|
|
@@ -1,10 +0,0 @@
|
|
|
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;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { AnyCommand, AnyEvent, CommandHandler, EventApplier } from "../core";
|
|
2
|
-
import "reflect-metadata";
|
|
3
|
-
export declare const EventApplierMapMetaKey: unique symbol;
|
|
4
|
-
export declare const getEventApplierMap: (target: object) => Map<string, EventApplier>;
|
|
5
|
-
export declare const defineEventApplier: <T extends AnyEvent>(target: object, eventType: string, applier: EventApplier<T>) => void;
|
|
6
|
-
export declare const CommandHandlerMapMetaKey: unique symbol;
|
|
7
|
-
export declare const getCommandHandlerMap: (target: object) => Map<string, CommandHandler>;
|
|
8
|
-
export declare const defineCommandHandler: <T extends AnyCommand>(target: object, commandType: string, handler: CommandHandler<T>) => void;
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.defineCommandHandler = exports.getCommandHandlerMap = exports.CommandHandlerMapMetaKey = exports.defineEventApplier = exports.getEventApplierMap = exports.EventApplierMapMetaKey = void 0;
|
|
4
|
-
require("reflect-metadata");
|
|
5
|
-
// Event applier map
|
|
6
|
-
exports.EventApplierMapMetaKey = Symbol.for("EVENT_APPLIER_MAP");
|
|
7
|
-
const getEventApplierMap = (target) => {
|
|
8
|
-
const eventApplierMap = () => Reflect.getMetadata(exports.EventApplierMapMetaKey, target);
|
|
9
|
-
if (eventApplierMap())
|
|
10
|
-
return eventApplierMap();
|
|
11
|
-
Reflect.defineMetadata(exports.EventApplierMapMetaKey, new Map(), target);
|
|
12
|
-
return eventApplierMap();
|
|
13
|
-
};
|
|
14
|
-
exports.getEventApplierMap = getEventApplierMap;
|
|
15
|
-
const defineEventApplier = (target, eventType, applier) => {
|
|
16
|
-
const eventAppliersMap = (0, exports.getEventApplierMap)(target);
|
|
17
|
-
eventAppliersMap.set(eventType, applier);
|
|
18
|
-
};
|
|
19
|
-
exports.defineEventApplier = defineEventApplier;
|
|
20
|
-
// Command handler map
|
|
21
|
-
exports.CommandHandlerMapMetaKey = Symbol.for("COMMAND_HANDLER_MAP");
|
|
22
|
-
const getCommandHandlerMap = (target) => {
|
|
23
|
-
const commandHandlerMap = () => Reflect.getMetadata(exports.CommandHandlerMapMetaKey, target);
|
|
24
|
-
if (commandHandlerMap())
|
|
25
|
-
return commandHandlerMap();
|
|
26
|
-
Reflect.defineMetadata(exports.CommandHandlerMapMetaKey, new Map(), target);
|
|
27
|
-
return commandHandlerMap();
|
|
28
|
-
};
|
|
29
|
-
exports.getCommandHandlerMap = getCommandHandlerMap;
|
|
30
|
-
const defineCommandHandler = (target, commandType, handler) => {
|
|
31
|
-
const commandHandlersMap = (0, exports.getCommandHandlerMap)(target);
|
|
32
|
-
commandHandlersMap.set(commandType, handler);
|
|
33
|
-
};
|
|
34
|
-
exports.defineCommandHandler = defineCommandHandler;
|