ddd-node 9.1.0 → 12.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/.vscode/launch.json +17 -0
- package/dist/core/aggregate.d.ts +14 -15
- package/dist/core/aggregate.js +18 -18
- package/dist/core/entity.d.ts +9 -11
- package/dist/core/entity.js +10 -12
- package/dist/core/error.js +1 -1
- package/dist/core/id/built/index.d.ts +2 -0
- package/dist/core/id/built/index.js +18 -0
- package/dist/core/id/built/snowflake.generator.d.ts +8 -0
- package/dist/core/id/built/snowflake.generator.js +16 -0
- package/dist/core/id/built/uuid4.generator.d.ts +5 -0
- package/dist/core/id/built/uuid4.generator.js +16 -0
- package/dist/core/id/id-generator.d.ts +8 -0
- package/dist/core/id/id-generator.js +17 -0
- package/dist/core/id/id.d.ts +6 -0
- package/dist/core/id/id.js +15 -0
- package/dist/core/id/index.d.ts +3 -0
- package/dist/core/id/index.js +19 -0
- package/dist/core/index.d.ts +0 -5
- package/dist/core/index.js +0 -5
- package/dist/core/{command.d.ts → message/command.d.ts} +8 -8
- package/dist/core/{command.js → message/command.js} +3 -3
- package/dist/core/{event.d.ts → message/event.d.ts} +12 -12
- package/dist/core/{event.js → message/event.js} +6 -3
- package/dist/core/message/index.d.ts +3 -0
- package/dist/core/message/index.js +19 -0
- package/dist/core/{message.d.ts → message/message.d.ts} +3 -5
- package/dist/core/{message.js → message/message.js} +6 -9
- package/dist/core/metadata/aggregate.metadata.d.ts +9 -0
- package/dist/core/metadata/aggregate.metadata.js +29 -0
- package/dist/core/metadata/id.metadata.d.ts +4 -0
- package/dist/core/metadata/id.metadata.js +12 -0
- package/dist/core/metadata/index.d.ts +3 -0
- package/dist/core/metadata/index.js +19 -0
- package/dist/core/metadata/model.metadata.d.ts +13 -0
- package/dist/core/metadata/model.metadata.js +55 -0
- package/dist/core/model/index.d.ts +2 -0
- package/dist/core/model/index.js +18 -0
- package/dist/core/model/model-with-id.d.ts +12 -0
- package/dist/core/model/model-with-id.js +29 -0
- package/dist/core/model/model.d.ts +25 -0
- package/dist/core/model/model.js +89 -0
- package/dist/core/value-object.d.ts +7 -6
- package/dist/core/value-object.js +5 -4
- package/dist/decorators/aggregate.d.ts +3 -6
- package/dist/decorators/aggregate.js +10 -17
- package/dist/decorators/id.d.ts +2 -2
- package/dist/decorators/id.js +5 -6
- package/dist/decorators/index.d.ts +0 -4
- package/dist/decorators/index.js +0 -4
- package/dist/decorators/model.d.ts +12 -3
- package/dist/decorators/model.js +38 -7
- package/dist/decorators/type.d.ts +2 -0
- package/dist/decorators/type.js +2 -0
- package/dist/types/class-static.d.ts +2 -2
- package/dist/types/class.d.ts +2 -4
- package/package.json +3 -1
- package/tsconfig.json +4 -4
- package/dist/core/id.d.ts +0 -17
- package/dist/core/id.js +0 -40
- package/dist/core/metadata.d.ts +0 -18
- package/dist/core/metadata.js +0 -53
- package/dist/core/model-type.d.ts +0 -86
- package/dist/core/model-type.js +0 -55
- package/dist/core/model-with-id.d.ts +0 -6
- package/dist/core/model-with-id.js +0 -16
- package/dist/core/model.d.ts +0 -15
- package/dist/core/model.js +0 -34
- package/dist/core/registry.d.ts +0 -12
- package/dist/core/registry.js +0 -28
- package/dist/decorators/command.d.ts +0 -2
- package/dist/decorators/command.js +0 -10
- package/dist/decorators/entity.d.ts +0 -2
- package/dist/decorators/entity.js +0 -10
- package/dist/decorators/event.d.ts +0 -2
- package/dist/decorators/event.js +0 -10
- package/dist/decorators/value-object.d.ts +0 -2
- package/dist/decorators/value-object.js +0 -10
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defineCommandHandler = exports.getCommandHandlersMap = exports.CommandHandlersMetaKey = exports.defineEventApplier = exports.getEventAppliersMap = exports.EventAppliersMetaKey = void 0;
|
|
4
|
+
require("reflect-metadata");
|
|
5
|
+
exports.EventAppliersMetaKey = Symbol.for("EVENT_APPLIERS");
|
|
6
|
+
const getEventAppliersMap = (target) => {
|
|
7
|
+
return (Reflect.getMetadata(exports.EventAppliersMetaKey, target) ||
|
|
8
|
+
new Map());
|
|
9
|
+
};
|
|
10
|
+
exports.getEventAppliersMap = getEventAppliersMap;
|
|
11
|
+
const defineEventApplier = (target, eventName, applier) => {
|
|
12
|
+
const eventAppliersMap = (0, exports.getEventAppliersMap)(target);
|
|
13
|
+
eventAppliersMap.set(eventName, applier);
|
|
14
|
+
Reflect.defineMetadata(exports.EventAppliersMetaKey, eventAppliersMap, target);
|
|
15
|
+
};
|
|
16
|
+
exports.defineEventApplier = defineEventApplier;
|
|
17
|
+
// Command handler map
|
|
18
|
+
exports.CommandHandlersMetaKey = Symbol.for("COMMAND_HANDLERS");
|
|
19
|
+
const getCommandHandlersMap = (target) => {
|
|
20
|
+
return (Reflect.getMetadata(exports.CommandHandlersMetaKey, target) ||
|
|
21
|
+
new Map());
|
|
22
|
+
};
|
|
23
|
+
exports.getCommandHandlersMap = getCommandHandlersMap;
|
|
24
|
+
const defineCommandHandler = (target, commandName, handler) => {
|
|
25
|
+
const commandHandlersMap = (0, exports.getCommandHandlersMap)(target);
|
|
26
|
+
commandHandlersMap.set(commandName, handler);
|
|
27
|
+
Reflect.defineMetadata(exports.CommandHandlersMetaKey, commandHandlersMap, target);
|
|
28
|
+
};
|
|
29
|
+
exports.defineCommandHandler = defineCommandHandler;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getIdGenerator = exports.defineIdGenerator = exports.IdGeneratorMetaKey = void 0;
|
|
4
|
+
exports.IdGeneratorMetaKey = Symbol.for("ID_GENERATOR");
|
|
5
|
+
const defineIdGenerator = (target, idGenerator) => {
|
|
6
|
+
Reflect.defineMetadata(exports.IdGeneratorMetaKey, idGenerator, target);
|
|
7
|
+
};
|
|
8
|
+
exports.defineIdGenerator = defineIdGenerator;
|
|
9
|
+
const getIdGenerator = (target) => {
|
|
10
|
+
return Reflect.getMetadata(exports.IdGeneratorMetaKey, target);
|
|
11
|
+
};
|
|
12
|
+
exports.getIdGenerator = getIdGenerator;
|
|
@@ -0,0 +1,19 @@
|
|
|
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("./aggregate.metadata"), exports);
|
|
18
|
+
__exportStar(require("./id.metadata"), exports);
|
|
19
|
+
__exportStar(require("./model.metadata"), exports);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AnyModel, PropsOf } from "../model";
|
|
2
|
+
export declare const getPropKeySet: (target: object | null) => Set<string | symbol>;
|
|
3
|
+
export declare const setPropKey: (target: object, propKey: string) => void;
|
|
4
|
+
export declare const setModelName: (target: object, name: string) => void;
|
|
5
|
+
export declare const getModelName: (target: object) => string;
|
|
6
|
+
export type PropsValidator<T extends AnyModel = AnyModel> = (props: PropsOf<T>) => void;
|
|
7
|
+
export declare const setValidateProps: <T extends AnyModel>(target: object, validator: PropsValidator<T>) => void;
|
|
8
|
+
export declare const getValidateProps: <T extends AnyModel>(target: object) => PropsValidator<T> | undefined;
|
|
9
|
+
export type ModelMetadata<T extends AnyModel = AnyModel> = {
|
|
10
|
+
name: string;
|
|
11
|
+
validator?: PropsValidator<T>;
|
|
12
|
+
};
|
|
13
|
+
export declare const getModelMetadata: <T extends AnyModel = AnyModel>(target: object) => ModelMetadata<T>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getModelMetadata = exports.getValidateProps = exports.setValidateProps = exports.getModelName = exports.setModelName = exports.setPropKey = exports.getPropKeySet = void 0;
|
|
4
|
+
const PropMetaKey = Symbol.for("PROP");
|
|
5
|
+
// export const getPropKeys = (
|
|
6
|
+
// target: object | null
|
|
7
|
+
// ): Map<string | symbol, boolean> => {
|
|
8
|
+
// if (!target) return new Map();
|
|
9
|
+
// return (
|
|
10
|
+
// Reflect.getMetadata(PropMetaKey, target) ||
|
|
11
|
+
// new Map<string | symbol, boolean>()
|
|
12
|
+
// );
|
|
13
|
+
// };
|
|
14
|
+
const getPropKeySet = (target) => {
|
|
15
|
+
var _a;
|
|
16
|
+
if (!target)
|
|
17
|
+
return new Set();
|
|
18
|
+
return (_a = Reflect.getMetadata(PropMetaKey, target)) !== null && _a !== void 0 ? _a : new Set();
|
|
19
|
+
};
|
|
20
|
+
exports.getPropKeySet = getPropKeySet;
|
|
21
|
+
const setPropKey = (target, propKey) => {
|
|
22
|
+
const propKeySet = (0, exports.getPropKeySet)(target);
|
|
23
|
+
propKeySet.add(propKey);
|
|
24
|
+
Reflect.defineMetadata(PropMetaKey, propKeySet, target);
|
|
25
|
+
};
|
|
26
|
+
exports.setPropKey = setPropKey;
|
|
27
|
+
//
|
|
28
|
+
const ModelNameMetaKey = Symbol.for("MODEL_NAME");
|
|
29
|
+
const setModelName = (target, name) => {
|
|
30
|
+
Reflect.defineMetadata(ModelNameMetaKey, name, target);
|
|
31
|
+
};
|
|
32
|
+
exports.setModelName = setModelName;
|
|
33
|
+
const getModelName = (target) => {
|
|
34
|
+
const modelName = Reflect.getMetadata(ModelNameMetaKey, target);
|
|
35
|
+
if (!modelName)
|
|
36
|
+
throw new Error();
|
|
37
|
+
return modelName;
|
|
38
|
+
};
|
|
39
|
+
exports.getModelName = getModelName;
|
|
40
|
+
const ValidatePropsMetaKey = Symbol.for("VALIDATE_PROPS");
|
|
41
|
+
const setValidateProps = (target, validator) => {
|
|
42
|
+
Reflect.defineMetadata(ValidatePropsMetaKey, validator, target);
|
|
43
|
+
};
|
|
44
|
+
exports.setValidateProps = setValidateProps;
|
|
45
|
+
const getValidateProps = (target) => {
|
|
46
|
+
return Reflect.getMetadata(ValidatePropsMetaKey, target);
|
|
47
|
+
};
|
|
48
|
+
exports.getValidateProps = getValidateProps;
|
|
49
|
+
const getModelMetadata = (target) => {
|
|
50
|
+
return {
|
|
51
|
+
name: (0, exports.getModelName)(target),
|
|
52
|
+
validator: (0, exports.getValidateProps)(target),
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
exports.getModelMetadata = getModelMetadata;
|
|
@@ -0,0 +1,18 @@
|
|
|
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"), exports);
|
|
18
|
+
__exportStar(require("./model-with-id"), exports);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Id, IdGeneratorBase } from "../id";
|
|
2
|
+
import { ModelBase } from "./model";
|
|
3
|
+
export declare abstract class ModelWithId<Props extends object> extends ModelBase<Props> {
|
|
4
|
+
protected readonly _id: Id;
|
|
5
|
+
constructor(id: Id);
|
|
6
|
+
static getIdGenerator(this: any): IdGeneratorBase;
|
|
7
|
+
static id(id?: Id): Id;
|
|
8
|
+
getId(): Id;
|
|
9
|
+
hasId(id: Id): boolean;
|
|
10
|
+
rawId(): string;
|
|
11
|
+
}
|
|
12
|
+
export type AnyModelWithId = ModelWithId<any>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModelWithId = void 0;
|
|
4
|
+
const id_1 = require("../id");
|
|
5
|
+
const id_metadata_1 = require("../metadata/id.metadata");
|
|
6
|
+
const model_1 = require("./model");
|
|
7
|
+
class ModelWithId extends model_1.ModelBase {
|
|
8
|
+
constructor(id) {
|
|
9
|
+
super();
|
|
10
|
+
this._id = id;
|
|
11
|
+
}
|
|
12
|
+
static getIdGenerator() {
|
|
13
|
+
return (0, id_metadata_1.getIdGenerator)(this) || new id_1.Uuid4Generator();
|
|
14
|
+
}
|
|
15
|
+
static id(id) {
|
|
16
|
+
const generator = this.getIdGenerator();
|
|
17
|
+
return id ? generator.fromId(id) : generator.newId();
|
|
18
|
+
}
|
|
19
|
+
getId() {
|
|
20
|
+
return this._id;
|
|
21
|
+
}
|
|
22
|
+
hasId(id) {
|
|
23
|
+
return this._id.equals(id);
|
|
24
|
+
}
|
|
25
|
+
rawId() {
|
|
26
|
+
return this._id.value;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.ModelWithId = ModelWithId;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ClassStatic } from "../../types/index";
|
|
2
|
+
import { Class } from "type-fest";
|
|
3
|
+
import { ModelMetadata } from "../metadata/model.metadata";
|
|
4
|
+
export declare class ModelBase<Props extends object> {
|
|
5
|
+
static readonly EMPTY_PROPS: {};
|
|
6
|
+
private _metadata;
|
|
7
|
+
private _propKeys;
|
|
8
|
+
protected _props: Props;
|
|
9
|
+
static isMutable(): boolean;
|
|
10
|
+
static isModel(model: any): model is AnyModel;
|
|
11
|
+
constructor();
|
|
12
|
+
private redefineModel;
|
|
13
|
+
isMutable(): boolean;
|
|
14
|
+
getPropKeys(): Set<string | symbol>;
|
|
15
|
+
validateProps(props: Props): void;
|
|
16
|
+
validate(): void;
|
|
17
|
+
getModelMetadata(): ModelMetadata<this>;
|
|
18
|
+
modelName(): string;
|
|
19
|
+
props(): any;
|
|
20
|
+
protected initializeProps(props: Props): void;
|
|
21
|
+
}
|
|
22
|
+
export type AnyModel = ModelBase<object>;
|
|
23
|
+
export type PropsOf<T extends AnyModel> = T extends ModelBase<infer P extends object> ? P : never;
|
|
24
|
+
export type ModelClass<T extends AnyModel = AnyModel> = Class<T> & ClassStatic<typeof ModelBase<PropsOf<T>>>;
|
|
25
|
+
export type EmptyProps = {};
|
|
@@ -0,0 +1,89 @@
|
|
|
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.ModelBase = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const model_metadata_1 = require("../metadata/model.metadata");
|
|
9
|
+
class ModelBase {
|
|
10
|
+
static isMutable() {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
static isModel(model) {
|
|
14
|
+
return model instanceof ModelBase;
|
|
15
|
+
}
|
|
16
|
+
constructor() {
|
|
17
|
+
this._props = ModelBase.EMPTY_PROPS;
|
|
18
|
+
this.redefineModel();
|
|
19
|
+
}
|
|
20
|
+
redefineModel() {
|
|
21
|
+
this.getPropKeys().forEach((propKey) => {
|
|
22
|
+
Object.defineProperty(this, propKey, {
|
|
23
|
+
configurable: true,
|
|
24
|
+
enumerable: true,
|
|
25
|
+
get() {
|
|
26
|
+
var _a;
|
|
27
|
+
return (_a = this._props) === null || _a === void 0 ? void 0 : _a[propKey];
|
|
28
|
+
},
|
|
29
|
+
set() {
|
|
30
|
+
throw new Error(`Prop "${propKey.toString()}" cannot be set directly`);
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
isMutable() {
|
|
36
|
+
return this.constructor.isMutable();
|
|
37
|
+
}
|
|
38
|
+
getPropKeys() {
|
|
39
|
+
if (!this._propKeys) {
|
|
40
|
+
this._propKeys = (0, model_metadata_1.getPropKeySet)(Reflect.getPrototypeOf(this));
|
|
41
|
+
}
|
|
42
|
+
return this._propKeys;
|
|
43
|
+
}
|
|
44
|
+
validateProps(props) {
|
|
45
|
+
const { validator } = this.getModelMetadata();
|
|
46
|
+
if (validator)
|
|
47
|
+
validator(props);
|
|
48
|
+
}
|
|
49
|
+
validate() {
|
|
50
|
+
this.validateProps(this._props);
|
|
51
|
+
}
|
|
52
|
+
getModelMetadata() {
|
|
53
|
+
if (!this._metadata) {
|
|
54
|
+
this._metadata = (0, model_metadata_1.getModelMetadata)(this.constructor);
|
|
55
|
+
}
|
|
56
|
+
return this._metadata;
|
|
57
|
+
}
|
|
58
|
+
modelName() {
|
|
59
|
+
return this.getModelMetadata().name;
|
|
60
|
+
}
|
|
61
|
+
props() {
|
|
62
|
+
return lodash_1.default.cloneDeepWith(this._props, (value) => {
|
|
63
|
+
if (ModelBase.isModel(value)) {
|
|
64
|
+
value.redefineModel();
|
|
65
|
+
return value;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
initializeProps(props) {
|
|
70
|
+
if (this._props !== ModelBase.EMPTY_PROPS)
|
|
71
|
+
throw new Error("Props is initialized");
|
|
72
|
+
if (!this.isMutable()) {
|
|
73
|
+
this._props = props;
|
|
74
|
+
Object.freeze(this._props);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
this._props = new Proxy(props, {
|
|
78
|
+
set: (target, propKey, value) => {
|
|
79
|
+
let result = Reflect.set(target, propKey, value);
|
|
80
|
+
this.validate();
|
|
81
|
+
return result;
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
this.validate();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.ModelBase = ModelBase;
|
|
89
|
+
ModelBase.EMPTY_PROPS = {};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { Class } from "
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { Class } from "type-fest";
|
|
2
|
+
import { ModelBase, PropsOf } from "./model";
|
|
3
|
+
import { ClassStatic } from "../types/index";
|
|
4
|
+
export declare abstract class ValueObjectBase<Props extends object> extends ModelBase<Props> {
|
|
4
5
|
constructor(props: Props);
|
|
5
6
|
equals<V extends AnyValueObject>(vo: V): boolean;
|
|
6
7
|
with(props: Partial<Props>): this;
|
|
7
8
|
}
|
|
8
|
-
export type AnyValueObject =
|
|
9
|
-
export type ValueObjectClass<T extends AnyValueObject = AnyValueObject> = Class<T
|
|
10
|
-
export type ValueObjectClassWithTypedConstructor<T extends AnyValueObject = AnyValueObject> = Class<T, ConstructorParameters<typeof
|
|
9
|
+
export type AnyValueObject = ValueObjectBase<any>;
|
|
10
|
+
export type ValueObjectClass<T extends AnyValueObject = AnyValueObject> = Class<T> & ClassStatic<typeof ValueObjectBase<PropsOf<T>>>;
|
|
11
|
+
export type ValueObjectClassWithTypedConstructor<T extends AnyValueObject = AnyValueObject> = Class<T, ConstructorParameters<typeof ValueObjectBase<PropsOf<T>>>>;
|
|
@@ -3,12 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.ValueObjectBase = void 0;
|
|
7
7
|
const lodash_1 = __importDefault(require("lodash"));
|
|
8
8
|
const model_1 = require("./model");
|
|
9
|
-
class
|
|
9
|
+
class ValueObjectBase extends model_1.ModelBase {
|
|
10
10
|
constructor(props) {
|
|
11
|
-
super(
|
|
11
|
+
super();
|
|
12
|
+
this.initializeProps(props);
|
|
12
13
|
}
|
|
13
14
|
equals(vo) {
|
|
14
15
|
const equalsType = vo instanceof this.constructor;
|
|
@@ -20,4 +21,4 @@ class ValueObject extends model_1.Model {
|
|
|
20
21
|
return new this.constructor(newProps);
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
|
-
exports.
|
|
24
|
+
exports.ValueObjectBase = ValueObjectBase;
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export declare const aggregate: (name?: string) => <T extends AggregateClass | AggregateESClass>(target: T) => void;
|
|
5
|
-
export declare const applyEvent: <T extends AnyEvent>(eventClass: EventClass<T>) => <U extends EventApplier<T>>(target: object, propertyKey: string, descriptor: TypedPropertyDescriptor<U>) => void;
|
|
6
|
-
export declare const handleCommand: <T extends AnyCommand>(commandClass: CommandClass<T>) => <U extends CommandHandler<T>>(target: object, propertyKey: string, descriptor: TypedPropertyDescriptor<U>) => void;
|
|
1
|
+
import { AnyCommand, AnyEvent, CommandClass, CommandHandler, EventApplier, EventClass } from "../core/index";
|
|
2
|
+
export declare const ApplyEvent: <T extends AnyEvent>(eventClass: EventClass<T>) => <U extends EventApplier<T>>(target: object, propertyKey: string, descriptor: TypedPropertyDescriptor<U>) => void;
|
|
3
|
+
export declare const HandleCommand: <T extends AnyCommand>(commandClass: CommandClass<T>) => <U extends CommandHandler<T>>(target: object, propertyKey: string, descriptor: TypedPropertyDescriptor<U>) => void;
|
|
@@ -1,29 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const model_1 = require("./model");
|
|
7
|
-
const aggregate = (name) => (target) => {
|
|
8
|
-
const aggregateType = new model_type_1.AggregateType(name !== null && name !== void 0 ? name : target.name);
|
|
9
|
-
(0, model_1.model)(aggregateType.value)(target);
|
|
10
|
-
};
|
|
11
|
-
exports.aggregate = aggregate;
|
|
12
|
-
const applyEvent = (eventClass) => {
|
|
3
|
+
exports.HandleCommand = exports.ApplyEvent = void 0;
|
|
4
|
+
const _core_1 = require("../core/index");
|
|
5
|
+
const ApplyEvent = (eventClass) => {
|
|
13
6
|
return (target, propertyKey, descriptor) => {
|
|
14
7
|
if (typeof descriptor.value === "function") {
|
|
15
|
-
const
|
|
16
|
-
(0,
|
|
8
|
+
const eventName = (0, _core_1.getModelName)(eventClass);
|
|
9
|
+
(0, _core_1.defineEventApplier)(target, eventName, descriptor.value);
|
|
17
10
|
}
|
|
18
11
|
};
|
|
19
12
|
};
|
|
20
|
-
exports.
|
|
21
|
-
const
|
|
13
|
+
exports.ApplyEvent = ApplyEvent;
|
|
14
|
+
const HandleCommand = (commandClass) => {
|
|
22
15
|
return (target, propertyKey, descriptor) => {
|
|
23
16
|
if (typeof descriptor.value === "function") {
|
|
24
|
-
const
|
|
25
|
-
(0,
|
|
17
|
+
const commandName = (0, _core_1.getModelName)(commandClass);
|
|
18
|
+
(0, _core_1.defineCommandHandler)(target, commandName, descriptor.value);
|
|
26
19
|
}
|
|
27
20
|
};
|
|
28
21
|
};
|
|
29
|
-
exports.
|
|
22
|
+
exports.HandleCommand = HandleCommand;
|
package/dist/decorators/id.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const
|
|
1
|
+
import { AnyModelWithId, IdGeneratorBase, ModelClass } from "../core/index";
|
|
2
|
+
export declare const UseId: (idGenerator: IdGeneratorBase) => <T extends AnyModelWithId>(target: ModelClass<T>) => void;
|
package/dist/decorators/id.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const
|
|
5
|
-
const
|
|
3
|
+
exports.UseId = void 0;
|
|
4
|
+
const _core_1 = require("../core/index");
|
|
5
|
+
const UseId = (idGenerator) => {
|
|
6
6
|
return (target) => {
|
|
7
|
-
|
|
8
|
-
(0, metadata_1.defineIdGenerator)(target, idGenerator);
|
|
7
|
+
(0, _core_1.defineIdGenerator)(target, idGenerator);
|
|
9
8
|
};
|
|
10
9
|
};
|
|
11
|
-
exports.
|
|
10
|
+
exports.UseId = UseId;
|
package/dist/decorators/index.js
CHANGED
|
@@ -15,9 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./aggregate"), exports);
|
|
18
|
-
__exportStar(require("./command"), exports);
|
|
19
|
-
__exportStar(require("./entity"), exports);
|
|
20
|
-
__exportStar(require("./event"), exports);
|
|
21
18
|
__exportStar(require("./id"), exports);
|
|
22
19
|
__exportStar(require("./model"), exports);
|
|
23
|
-
__exportStar(require("./value-object"), exports);
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
-
import { ModelClass } from "../core/
|
|
2
|
-
import {
|
|
3
|
-
export declare const
|
|
1
|
+
import { AnyModel, ModelClass, PropsValidator } from "../core/index";
|
|
2
|
+
import { TypedClassDecorator } from "./type";
|
|
3
|
+
export declare const Prop: (target: object, propKey: string) => void;
|
|
4
|
+
export declare const Name: (name?: string) => <T extends AnyModel>(target: ModelClass<T>) => void;
|
|
5
|
+
export declare const Validate: <T extends AnyModel>(validator?: PropsValidator<T> | undefined) => (target: ModelClass<T>) => void;
|
|
6
|
+
export type ModelOptions<T extends AnyModel> = {
|
|
7
|
+
name?: string;
|
|
8
|
+
validator?: PropsValidator<T>;
|
|
9
|
+
};
|
|
10
|
+
export declare function Model<T extends ModelClass, I extends InstanceType<T> = InstanceType<T>>(options?: ModelOptions<I>): TypedClassDecorator<T>;
|
|
11
|
+
export declare function Model<T extends ModelClass, I extends InstanceType<T> = InstanceType<T>>(name?: string, validator?: PropsValidator<I>): TypedClassDecorator<T>;
|
|
12
|
+
export declare function Model<T extends ModelClass, I extends InstanceType<T> = InstanceType<T>>(name?: string, options?: Omit<ModelOptions<I>, "name">): TypedClassDecorator<T>;
|
package/dist/decorators/model.js
CHANGED
|
@@ -1,12 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
|
|
3
|
+
exports.Model = exports.Validate = exports.Name = exports.Prop = void 0;
|
|
4
|
+
const _core_1 = require("../core/index");
|
|
5
|
+
const Prop = (target, propKey) => {
|
|
6
|
+
(0, _core_1.setPropKey)(target, propKey);
|
|
7
|
+
};
|
|
8
|
+
exports.Prop = Prop;
|
|
9
|
+
const Name = (name) => {
|
|
10
|
+
return (target) => {
|
|
11
|
+
(0, _core_1.setModelName)(target, name !== null && name !== void 0 ? name : target.name);
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
exports.Name = Name;
|
|
15
|
+
const Validate = (validator) => {
|
|
7
16
|
return (target) => {
|
|
8
|
-
|
|
9
|
-
|
|
17
|
+
if (validator)
|
|
18
|
+
(0, _core_1.setValidateProps)(target, validator);
|
|
10
19
|
};
|
|
11
20
|
};
|
|
12
|
-
exports.
|
|
21
|
+
exports.Validate = Validate;
|
|
22
|
+
function Model(p1, p2) {
|
|
23
|
+
return (target) => {
|
|
24
|
+
let options = {};
|
|
25
|
+
if (p1 && !p2) {
|
|
26
|
+
if (typeof p1 === "string")
|
|
27
|
+
options = { name: p1 };
|
|
28
|
+
else
|
|
29
|
+
options = p1;
|
|
30
|
+
}
|
|
31
|
+
else if (p1 && p2) {
|
|
32
|
+
p1 = p1;
|
|
33
|
+
if (typeof p2 === "function")
|
|
34
|
+
options = { name: p1, validator: p2 };
|
|
35
|
+
else
|
|
36
|
+
options = Object.assign({ name: p1 }, p2);
|
|
37
|
+
}
|
|
38
|
+
const { name, validator } = options;
|
|
39
|
+
(0, exports.Name)(name)(target);
|
|
40
|
+
(0, exports.Validate)(validator)(target);
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
exports.Model = Model;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export type ClassStatic<T extends
|
|
1
|
+
import { AnyClass } from "./class";
|
|
2
|
+
export type ClassStatic<T extends AnyClass<any>> = Omit<T, "constructor" | "prototype">;
|
package/dist/types/class.d.ts
CHANGED
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export type
|
|
3
|
-
prototype: T;
|
|
4
|
-
};
|
|
1
|
+
import { AbstractClass, Class } from "type-fest";
|
|
2
|
+
export type AnyClass<T = any> = Class<T> | AbstractClass<T>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ddd-node",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "12.1.0",
|
|
4
4
|
"description": "Domain Driven Design base for NodeJs",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -29,8 +29,10 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"lodash": "^4.17.21",
|
|
32
|
+
"nodejs-snowflake": "^2.0.1",
|
|
32
33
|
"reflect-metadata": "^0.1.13",
|
|
33
34
|
"tsc-alias": "^1.8.8",
|
|
35
|
+
"type-fest": "^4.15.0",
|
|
34
36
|
"uuid": "^9.0.1"
|
|
35
37
|
}
|
|
36
38
|
}
|
package/tsconfig.json
CHANGED
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
// "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
|
|
31
31
|
"baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */,
|
|
32
32
|
"paths": {
|
|
33
|
-
"#core
|
|
34
|
-
"#decorators
|
|
35
|
-
"#utils
|
|
36
|
-
"#types
|
|
33
|
+
"#core": ["src/core/index"],
|
|
34
|
+
"#decorators": ["src/decorators/index"],
|
|
35
|
+
"#utils": ["src/utils/index"],
|
|
36
|
+
"#types": ["src/types/index"]
|
|
37
37
|
} /* Specify a set of entries that re-map imports to additional lookup locations. */,
|
|
38
38
|
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
|
39
39
|
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
|
package/dist/core/id.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export declare class Id {
|
|
2
|
-
private _value;
|
|
3
|
-
constructor(value: string);
|
|
4
|
-
get value(): string;
|
|
5
|
-
equals(id: Id): boolean;
|
|
6
|
-
}
|
|
7
|
-
export declare abstract class IdGenerator {
|
|
8
|
-
abstract generateValue(): string;
|
|
9
|
-
abstract validateValue(value: string): void;
|
|
10
|
-
fromValue(value: string): Id;
|
|
11
|
-
fromId(id: Id): Id;
|
|
12
|
-
newId(): Id;
|
|
13
|
-
}
|
|
14
|
-
export declare class Uuid4Generator extends IdGenerator {
|
|
15
|
-
generateValue(): string;
|
|
16
|
-
validateValue(value: string): boolean;
|
|
17
|
-
}
|