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
|
@@ -18,13 +18,16 @@ export declare class EventSourcedAggregateBase<P extends Props> extends Aggregat
|
|
|
18
18
|
static newStream<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClassWithTypedConstructor<T>, id?: Id): T;
|
|
19
19
|
static fromStream<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClassWithTypedConstructor<T>, id: Id, pastEvents?: AnyEvent[]): T;
|
|
20
20
|
static fromSnapshot<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClassWithTypedConstructor<T>, snapshot: Snapshot<T>, pastEventsAfterSnapshot?: AnyEvent[]): T;
|
|
21
|
-
static
|
|
22
|
-
static
|
|
21
|
+
static ownEventApplierMap(): import("../../meta").EventApplierMap;
|
|
22
|
+
static eventApplierMap<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClass<T>): import("../../meta").EventApplierMap;
|
|
23
|
+
static ownCommandHandlerMap(): import("../../meta").CommandHandlerMap;
|
|
24
|
+
static commandHandlerMap<T extends AnyEventSourcedAggregate>(this: EventSourcedAggregateClass<T>): import("../../meta").CommandHandlerMap;
|
|
23
25
|
version(): number;
|
|
24
26
|
pastEvents(): AnyEvent[];
|
|
25
27
|
events(): AnyEvent[];
|
|
26
28
|
handledCommands(): AnyCommand[];
|
|
27
|
-
|
|
29
|
+
ownEventApplierMap(): import("../../meta").EventApplierMap;
|
|
30
|
+
eventApplierMap(): import("../../meta").EventApplierMap;
|
|
28
31
|
hasNewEvent(): boolean;
|
|
29
32
|
getApplierForEvent<E extends AnyEvent>(event: E): EventApplier<E>;
|
|
30
33
|
private validateEventBeforeApply;
|
|
@@ -34,7 +37,8 @@ export declare class EventSourcedAggregateBase<P extends Props> extends Aggregat
|
|
|
34
37
|
applyEvent<E extends AnyEvent>(event: E): void;
|
|
35
38
|
applyEvents(events: AnyEvent[]): void;
|
|
36
39
|
applyNewEvent<E extends AnyEvent>(eventClass: EventClassWithTypedConstructor<E>, props: PropsOf<E>): void;
|
|
37
|
-
|
|
40
|
+
ownCommandHandlerMap(): import("../../meta").CommandHandlerMap;
|
|
41
|
+
commandHandlerMap(): import("../../meta").CommandHandlerMap;
|
|
38
42
|
getHandlerForCommand<C extends AnyCommand>(command: C): CommandHandler<C, AnyEvent | AnyEvent[]>;
|
|
39
43
|
handleCommand<C extends AnyCommand>(command: C): AnyEvent[];
|
|
40
44
|
snapMetadata(): SnapshotMetadata;
|
|
@@ -28,9 +28,15 @@ class EventSourcedAggregateBase extends base_1.AggregateBase {
|
|
|
28
28
|
instance.applyPastEvents(pastEventsAfterSnapshot);
|
|
29
29
|
return instance;
|
|
30
30
|
}
|
|
31
|
+
static ownEventApplierMap() {
|
|
32
|
+
return (0, meta_1.getOwnEventApplierMap)(this.prototype);
|
|
33
|
+
}
|
|
31
34
|
static eventApplierMap() {
|
|
32
35
|
return (0, meta_1.getEventApplierMap)(this.prototype);
|
|
33
36
|
}
|
|
37
|
+
static ownCommandHandlerMap() {
|
|
38
|
+
return (0, meta_1.getOwnCommandHandlerMap)(this.prototype);
|
|
39
|
+
}
|
|
34
40
|
static commandHandlerMap() {
|
|
35
41
|
return (0, meta_1.getCommandHandlerMap)(this.prototype);
|
|
36
42
|
}
|
|
@@ -46,6 +52,9 @@ class EventSourcedAggregateBase extends base_1.AggregateBase {
|
|
|
46
52
|
handledCommands() {
|
|
47
53
|
return Array.from(this._handledCommands);
|
|
48
54
|
}
|
|
55
|
+
ownEventApplierMap() {
|
|
56
|
+
return this.constructor.ownEventApplierMap();
|
|
57
|
+
}
|
|
49
58
|
eventApplierMap() {
|
|
50
59
|
return this.constructor.eventApplierMap();
|
|
51
60
|
}
|
|
@@ -96,6 +105,9 @@ class EventSourcedAggregateBase extends base_1.AggregateBase {
|
|
|
96
105
|
applyNewEvent(eventClass, props) {
|
|
97
106
|
this.applyEvent(this.newEvent(eventClass, props));
|
|
98
107
|
}
|
|
108
|
+
ownCommandHandlerMap() {
|
|
109
|
+
return this.constructor.ownCommandHandlerMap();
|
|
110
|
+
}
|
|
99
111
|
commandHandlerMap() {
|
|
100
112
|
return this.constructor.commandHandlerMap();
|
|
101
113
|
}
|
package/dist/core/domain.d.ts
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
import {
|
|
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
|
-
}
|
|
1
|
+
import { ModelRegistry } from "./model-registry";
|
|
7
2
|
export type DomainName = string;
|
|
8
3
|
export declare class Domain {
|
|
9
4
|
readonly name: DomainName;
|
|
10
|
-
|
|
5
|
+
readonly modelRegistry: ModelRegistry;
|
|
11
6
|
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
7
|
}
|
|
8
|
+
export declare class DomainMap extends Map<DomainName, Domain> {
|
|
9
|
+
}
|
|
10
|
+
export declare class DomainManager {
|
|
11
|
+
static _instance: DomainManager;
|
|
12
|
+
static instance(): DomainManager;
|
|
13
|
+
private constructor();
|
|
14
|
+
private _domains;
|
|
15
|
+
hasDomain(domainName: DomainName): boolean;
|
|
16
|
+
getDomain(domainName: DomainName): Domain | undefined;
|
|
17
|
+
addDomain(domain: Domain): void;
|
|
18
|
+
deleteDomain(domainName: DomainName): void;
|
|
19
|
+
}
|
|
20
|
+
export declare const domainManager: DomainManager;
|
package/dist/core/domain.js
CHANGED
|
@@ -1,47 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
exports.ModelVersionRegistry = ModelVersionRegistry;
|
|
7
|
-
class ModelRegistry extends Map {
|
|
8
|
-
}
|
|
9
|
-
exports.ModelRegistry = ModelRegistry;
|
|
3
|
+
exports.domainManager = exports.DomainManager = exports.DomainMap = exports.Domain = void 0;
|
|
4
|
+
const model_registry_1 = require("./model-registry");
|
|
10
5
|
class Domain {
|
|
11
6
|
constructor(name) {
|
|
12
|
-
this.modelRegistry = new ModelRegistry();
|
|
13
7
|
this.name = name;
|
|
8
|
+
this.modelRegistry = new model_registry_1.ModelRegistry();
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.Domain = Domain;
|
|
12
|
+
class DomainMap extends Map {
|
|
13
|
+
}
|
|
14
|
+
exports.DomainMap = DomainMap;
|
|
15
|
+
class DomainManager {
|
|
16
|
+
static instance() {
|
|
17
|
+
if (!this._instance)
|
|
18
|
+
this._instance = new DomainManager();
|
|
19
|
+
return this._instance;
|
|
14
20
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
if (!modelVersionRegistry())
|
|
18
|
-
this.modelRegistry.set(modelName, new ModelVersionRegistry());
|
|
19
|
-
return modelVersionRegistry();
|
|
21
|
+
constructor() {
|
|
22
|
+
this._domains = new DomainMap();
|
|
20
23
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return modelVersionRegistry.get(modelVersion);
|
|
24
|
+
hasDomain(domainName) {
|
|
25
|
+
return this._domains.has(domainName);
|
|
24
26
|
}
|
|
25
|
-
|
|
26
|
-
|
|
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));
|
|
27
|
+
getDomain(domainName) {
|
|
28
|
+
return this._domains.get(domainName);
|
|
36
29
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return this;
|
|
30
|
+
addDomain(domain) {
|
|
31
|
+
if (this.hasDomain(domain.name))
|
|
32
|
+
throw new Error(`Domain ${domain.name} has already exist`);
|
|
33
|
+
this._domains.set(domain.name, domain);
|
|
34
|
+
}
|
|
35
|
+
deleteDomain(domainName) {
|
|
36
|
+
this._domains.delete(domainName);
|
|
45
37
|
}
|
|
46
38
|
}
|
|
47
|
-
exports.
|
|
39
|
+
exports.DomainManager = DomainManager;
|
|
40
|
+
exports.domainManager = DomainManager.instance();
|
package/dist/core/index.d.ts
CHANGED
package/dist/core/index.js
CHANGED
|
@@ -8,7 +8,7 @@ class CommandBase extends message_1.MessageBase {
|
|
|
8
8
|
super({ ...metadata, messageType: CommandBase.COMMAND_MESSAGE_TYPE }, props);
|
|
9
9
|
}
|
|
10
10
|
static commandType() {
|
|
11
|
-
return (0, meta_1.getCommandType)(this)
|
|
11
|
+
return (0, meta_1.getCommandType)(this);
|
|
12
12
|
}
|
|
13
13
|
static newCommand(props, context, timestamp) {
|
|
14
14
|
return new this({
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { ClassStatic } from "../../types";
|
|
2
1
|
import { Class } from "type-fest";
|
|
2
|
+
import { EventType } from "../../meta";
|
|
3
|
+
import { ClassStatic } from "../../types";
|
|
3
4
|
import { Id } from "../id";
|
|
4
5
|
import { Props, PropsOf } from "../model";
|
|
5
6
|
import { MessageBase, MessageContext, MessageMetadata } from "./message";
|
|
6
|
-
import { EventType } from "../../meta";
|
|
7
7
|
export type EventSource = Readonly<{
|
|
8
8
|
aggregateModel: string;
|
|
9
9
|
aggregateId: Id;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EventBase = void 0;
|
|
4
|
-
const message_1 = require("./message");
|
|
5
4
|
const meta_1 = require("../../meta");
|
|
5
|
+
const message_1 = require("./message");
|
|
6
6
|
class EventBase extends message_1.MessageBase {
|
|
7
7
|
constructor(metadata, props) {
|
|
8
8
|
super({ ...metadata, messageType: EventBase.EVENT_MESSAGE_TYPE }, props);
|
|
9
9
|
this._source = metadata.source;
|
|
10
10
|
}
|
|
11
11
|
static eventType() {
|
|
12
|
-
return (0, meta_1.getEventType)(this)
|
|
12
|
+
return (0, meta_1.getEventType)(this);
|
|
13
13
|
}
|
|
14
14
|
static newEvent(source, props, context, timestamp) {
|
|
15
15
|
return new this({
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { Class } from "type-fest";
|
|
2
|
-
import { ModelId } from "../../meta";
|
|
3
2
|
import { ClassStatic } from "../../types";
|
|
4
|
-
export type PropKey = string | symbol;
|
|
5
3
|
export interface Props {
|
|
6
|
-
[key:
|
|
4
|
+
[key: PropertyKey]: any;
|
|
7
5
|
}
|
|
8
6
|
export type EmptyProps = {
|
|
9
|
-
[key:
|
|
7
|
+
[key: PropertyKey]: never;
|
|
10
8
|
};
|
|
11
9
|
export declare class ModelBase<P extends Props> {
|
|
12
10
|
static readonly EMPTY_PROPS: EmptyProps;
|
|
@@ -15,11 +13,11 @@ export declare class ModelBase<P extends Props> {
|
|
|
15
13
|
static mutable(): boolean;
|
|
16
14
|
static modelName<T extends AnyModel>(this: ModelClass<T>): string;
|
|
17
15
|
static modelVersion<T extends AnyModel>(this: ModelClass<T>): number;
|
|
18
|
-
static modelId<T extends AnyModel>(this: ModelClass<T>):
|
|
19
|
-
static hasModelId<T extends AnyModel>(this: ModelClass<T>, modelId:
|
|
16
|
+
static modelId<T extends AnyModel>(this: ModelClass<T>): string;
|
|
17
|
+
static hasModelId<T extends AnyModel>(this: ModelClass<T>, modelId: string): boolean;
|
|
20
18
|
static ownPropsValidator<T extends AnyModel>(this: ModelClass<T>): import("../../meta").PropsValidator<T> | undefined;
|
|
21
19
|
static propsValidators<T extends AnyModel>(this: ModelClass<T>): import("../../meta").PropsValidator<AnyModel>[];
|
|
22
|
-
static ownStaticValues<T extends AnyModel>(this: ModelClass<T>):
|
|
20
|
+
static ownStaticValues<T extends AnyModel>(this: ModelClass<T>): import("../../meta").StaticValuesMap<T>;
|
|
23
21
|
static ownPropsMap(): import("../../meta").PropsMap<ModelBase<any>>;
|
|
24
22
|
static propsMap(): import("../../meta").PropsMap<ModelBase<any>>;
|
|
25
23
|
constructor();
|
|
@@ -29,8 +27,8 @@ export declare class ModelBase<P extends Props> {
|
|
|
29
27
|
isMutable(): boolean;
|
|
30
28
|
modelName(): string;
|
|
31
29
|
modelVersion(): number;
|
|
32
|
-
modelId():
|
|
33
|
-
hasModelId(modelId:
|
|
30
|
+
modelId(): string;
|
|
31
|
+
hasModelId(modelId: string): boolean;
|
|
34
32
|
ownPropsValidator(): import("../../meta").PropsValidator<this> | undefined;
|
|
35
33
|
propsValidators(): import("../../meta").PropsValidator<AnyModel>[];
|
|
36
34
|
ownPropsMap(): import("../../meta").PropsMap<ModelBase<any>>;
|
package/dist/core/model/model.js
CHANGED
|
@@ -24,7 +24,7 @@ class ModelBase {
|
|
|
24
24
|
return (0, meta_1.getModelId)(this);
|
|
25
25
|
}
|
|
26
26
|
static hasModelId(modelId) {
|
|
27
|
-
return this.modelId()
|
|
27
|
+
return this.modelId() === modelId;
|
|
28
28
|
}
|
|
29
29
|
static ownPropsValidator() {
|
|
30
30
|
return (0, meta_1.getOwnPropsValidator)(this);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ModelId, ModelName, ModelVersion } from "../meta";
|
|
2
|
+
import { AnyModel, ModelClass } from "./model";
|
|
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(modelName: ModelName): ModelVersionMap<AnyModel>;
|
|
12
|
+
getModel(modelName: ModelName, modelVersion?: ModelVersion): ModelClass<AnyModel> | undefined;
|
|
13
|
+
getModelByModelId(modelId: ModelId): ModelClass<AnyModel> | 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.modelName();
|
|
41
|
+
modelVersion = p1.modelVersion();
|
|
42
|
+
}
|
|
43
|
+
return Boolean(this.getModel(modelName, modelVersion));
|
|
44
|
+
}
|
|
45
|
+
registerModel(modelClass) {
|
|
46
|
+
const modelName = modelClass.modelName();
|
|
47
|
+
const modelVersion = modelClass.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;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Enum = void 0;
|
|
4
|
-
const static_1 = require("./static");
|
|
4
|
+
const static_1 = require("./model/static");
|
|
5
5
|
const Enum = (value) => {
|
|
6
6
|
return (target, key) => {
|
|
7
7
|
(0, static_1.Static)(() => new target(value))(target, key);
|
package/dist/decorators/index.js
CHANGED
|
@@ -4,7 +4,7 @@ exports.Command = void 0;
|
|
|
4
4
|
const meta_1 = require("../../meta");
|
|
5
5
|
const Command = (commandType) => {
|
|
6
6
|
return (target) => {
|
|
7
|
-
(0, meta_1.
|
|
7
|
+
(0, meta_1.defineCommandType)(target, commandType);
|
|
8
8
|
};
|
|
9
9
|
};
|
|
10
10
|
exports.Command = Command;
|
|
@@ -16,7 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./prop"), exports);
|
|
18
18
|
__exportStar(require("./model"), exports);
|
|
19
|
-
__exportStar(require("./version"), exports);
|
|
20
|
-
__exportStar(require("./validator"), exports);
|
|
21
19
|
__exportStar(require("./static"), exports);
|
|
22
|
-
__exportStar(require("
|
|
20
|
+
__exportStar(require("../enum"), exports);
|
|
@@ -1,2 +1,12 @@
|
|
|
1
|
-
import { ModelClass } from "../../core";
|
|
2
|
-
|
|
1
|
+
import { AnyModel, ModelClass } from "../../core";
|
|
2
|
+
import { PropsValidator } from "../../meta";
|
|
3
|
+
export type ModelOptions<T extends AnyModel = AnyModel> = {
|
|
4
|
+
name?: string;
|
|
5
|
+
version?: number;
|
|
6
|
+
domain?: string;
|
|
7
|
+
propsValidator?: PropsValidator<T>;
|
|
8
|
+
autoRegisterModel?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare function Model<T extends ModelClass, I extends InstanceType<T> = InstanceType<T>>(options?: ModelOptions<I>): any;
|
|
11
|
+
export declare function Model<T extends ModelClass, I extends InstanceType<T> = InstanceType<T>>(name: string, options?: ModelOptions<I>): any;
|
|
12
|
+
export declare function Model<T extends ModelClass, I extends InstanceType<T> = InstanceType<T>>(name: string, version: number, options?: ModelOptions<I>): any;
|
|
@@ -1,10 +1,54 @@
|
|
|
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
6
|
exports.Model = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const core_1 = require("../../core");
|
|
4
9
|
const meta_1 = require("../../meta");
|
|
5
|
-
|
|
10
|
+
function Model(p1, p2, p3) {
|
|
11
|
+
const defaultModelOptions = {
|
|
12
|
+
autoRegisterModel: true,
|
|
13
|
+
};
|
|
14
|
+
let modelOptions = {};
|
|
15
|
+
if (p1 && !p2 && !p3) {
|
|
16
|
+
if (typeof p1 === "string")
|
|
17
|
+
modelOptions = { name: p1 };
|
|
18
|
+
else
|
|
19
|
+
modelOptions = p1;
|
|
20
|
+
}
|
|
21
|
+
else if (p1 && p2 && !p3) {
|
|
22
|
+
if (typeof p2 === "number")
|
|
23
|
+
modelOptions = { name: p1, version: p2 };
|
|
24
|
+
else
|
|
25
|
+
modelOptions = { name: p1, ...p2 };
|
|
26
|
+
}
|
|
27
|
+
else if (p1 && p2 && p3) {
|
|
28
|
+
modelOptions = {
|
|
29
|
+
name: p1,
|
|
30
|
+
version: p2,
|
|
31
|
+
...p3,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
modelOptions = lodash_1.default.merge(defaultModelOptions, modelOptions);
|
|
6
35
|
return (target) => {
|
|
7
|
-
|
|
36
|
+
if (modelOptions?.name)
|
|
37
|
+
(0, meta_1.defineModelName)(target, modelOptions.name);
|
|
38
|
+
if (modelOptions?.version)
|
|
39
|
+
(0, meta_1.defineModelVersion)(target, modelOptions.version);
|
|
40
|
+
if (modelOptions?.domain)
|
|
41
|
+
(0, meta_1.defineModelDomain)(target, modelOptions.domain);
|
|
42
|
+
if (modelOptions?.autoRegisterModel) {
|
|
43
|
+
const domainName = (0, meta_1.getModelDomain)(target);
|
|
44
|
+
if (!core_1.domainManager.hasDomain(domainName)) {
|
|
45
|
+
core_1.domainManager.addDomain(new core_1.Domain(domainName));
|
|
46
|
+
}
|
|
47
|
+
const domain = core_1.domainManager.getDomain(domainName);
|
|
48
|
+
domain.modelRegistry.registerModel(target);
|
|
49
|
+
}
|
|
50
|
+
if (modelOptions?.propsValidator)
|
|
51
|
+
(0, meta_1.definePropsValidator)(target, modelOptions.propsValidator);
|
|
8
52
|
};
|
|
9
|
-
}
|
|
53
|
+
}
|
|
10
54
|
exports.Model = Model;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { AnyModel,
|
|
2
|
-
export declare const Prop: <T extends AnyModel>(propTargetKey?: keyof PropsOf<T> | undefined) => (target: T, key:
|
|
1
|
+
import { AnyModel, PropsOf } from "../../core";
|
|
2
|
+
export declare const Prop: <T extends AnyModel>(propTargetKey?: keyof PropsOf<T> | undefined) => (target: T, key: PropertyKey) => void;
|
|
@@ -4,7 +4,7 @@ exports.Prop = void 0;
|
|
|
4
4
|
const meta_1 = require("../../meta");
|
|
5
5
|
const Prop = (propTargetKey) => {
|
|
6
6
|
return (target, key) => {
|
|
7
|
-
(0, meta_1.
|
|
7
|
+
(0, meta_1.defineProp)(target, key, propTargetKey ?? key);
|
|
8
8
|
};
|
|
9
9
|
};
|
|
10
10
|
exports.Prop = Prop;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { ModelClass } from "../../core";
|
|
2
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:
|
|
3
|
+
export declare const Static: <T extends ModelClass<import("../../core").AnyModel>, I extends InstanceType<T> = InstanceType<T>>(builder: StaticValueBuilder<I>) => (target: T, key: PropertyKey) => void;
|
|
@@ -5,16 +5,7 @@ const meta_1 = require("../../meta");
|
|
|
5
5
|
const Static = (builder) => {
|
|
6
6
|
return (target, key) => {
|
|
7
7
|
(0, meta_1.setStaticValue)(target, key, builder);
|
|
8
|
-
|
|
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
|
-
});
|
|
8
|
+
(0, meta_1.defineStaticValueProperty)(target, key);
|
|
18
9
|
};
|
|
19
10
|
};
|
|
20
11
|
exports.Static = Static;
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AnyCommand, CommandHandler } from "../../core";
|
|
2
|
+
export declare class CommandHandlerMap extends Map<string, CommandHandler> {
|
|
3
|
+
}
|
|
4
|
+
export declare const OwnCommandHandlerMapMetaKey: unique symbol;
|
|
5
|
+
export declare const getOwnCommandHandlerMap: (target: object) => CommandHandlerMap;
|
|
6
|
+
export declare const defineCommandHandler: <T extends AnyCommand>(target: object, commandType: string, handler: CommandHandler<T>) => void;
|
|
7
|
+
export declare const CommandHandlerMapMetaKey: unique symbol;
|
|
8
|
+
export declare const getCommandHandlerMap: (target: object) => CommandHandlerMap;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCommandHandlerMap = exports.CommandHandlerMapMetaKey = exports.defineCommandHandler = exports.getOwnCommandHandlerMap = exports.OwnCommandHandlerMapMetaKey = exports.CommandHandlerMap = void 0;
|
|
4
|
+
class CommandHandlerMap extends Map {
|
|
5
|
+
}
|
|
6
|
+
exports.CommandHandlerMap = CommandHandlerMap;
|
|
7
|
+
exports.OwnCommandHandlerMapMetaKey = Symbol.for("OWN_COMMAND_HANDLER_MAP");
|
|
8
|
+
const getOwnCommandHandlerMap = (target) => {
|
|
9
|
+
const ownCommandHandlerMap = () => Reflect.getOwnMetadata(exports.OwnCommandHandlerMapMetaKey, target);
|
|
10
|
+
if (!ownCommandHandlerMap())
|
|
11
|
+
Reflect.defineMetadata(exports.OwnCommandHandlerMapMetaKey, new CommandHandlerMap(), target);
|
|
12
|
+
return ownCommandHandlerMap();
|
|
13
|
+
};
|
|
14
|
+
exports.getOwnCommandHandlerMap = getOwnCommandHandlerMap;
|
|
15
|
+
const defineCommandHandler = (target, commandType, handler) => {
|
|
16
|
+
const commandHandlersMap = (0, exports.getOwnCommandHandlerMap)(target);
|
|
17
|
+
commandHandlersMap.set(commandType, handler);
|
|
18
|
+
};
|
|
19
|
+
exports.defineCommandHandler = defineCommandHandler;
|
|
20
|
+
exports.CommandHandlerMapMetaKey = Symbol.for("COMMAND_HANDLER_MAP");
|
|
21
|
+
const getCommandHandlerMap = (target) => {
|
|
22
|
+
if (!Reflect.hasOwnMetadata(exports.CommandHandlerMapMetaKey, target)) {
|
|
23
|
+
const buildCommandHandlerMap = (target) => {
|
|
24
|
+
let _target = target;
|
|
25
|
+
const result = new CommandHandlerMap();
|
|
26
|
+
const ownCommandHandlerMaps = [];
|
|
27
|
+
do {
|
|
28
|
+
const ownCommandHandlerMap = (0, exports.getOwnCommandHandlerMap)(_target);
|
|
29
|
+
ownCommandHandlerMaps.unshift(ownCommandHandlerMap);
|
|
30
|
+
_target = Reflect.getPrototypeOf(_target);
|
|
31
|
+
} while (_target !== null);
|
|
32
|
+
ownCommandHandlerMaps.forEach((ownCommandHandlerMap) => {
|
|
33
|
+
ownCommandHandlerMap.forEach((commandHandler, methodName) => {
|
|
34
|
+
result.set(methodName, commandHandler);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
Reflect.defineMetadata(exports.CommandHandlerMapMetaKey, buildCommandHandlerMap(target), target);
|
|
40
|
+
}
|
|
41
|
+
return Reflect.getOwnMetadata(exports.CommandHandlerMapMetaKey, target);
|
|
42
|
+
};
|
|
43
|
+
exports.getCommandHandlerMap = getCommandHandlerMap;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { AnyEvent, EventApplier } from "../../core";
|
|
3
|
+
export declare class EventApplierMap extends Map<string, EventApplier> {
|
|
4
|
+
}
|
|
5
|
+
export declare const OwnEventApplierMapMetaKey: unique symbol;
|
|
6
|
+
export declare const getOwnEventApplierMap: (target: object) => EventApplierMap;
|
|
7
|
+
export declare const defineEventApplier: <T extends AnyEvent>(target: object, eventType: string, applier: EventApplier<T>) => void;
|
|
8
|
+
export declare const EventApplierMapMetaKey: unique symbol;
|
|
9
|
+
export declare const getEventApplierMap: (target: object) => EventApplierMap;
|