ddd-node 16.1.0 → 16.2.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/abstraction/event-publisher.d.ts +5 -0
- package/dist/core/abstraction/index.d.ts +2 -0
- package/dist/core/abstraction/index.js +18 -0
- package/dist/core/{repository.d.ts → abstraction/repository.d.ts} +2 -2
- package/dist/core/abstraction/repository.js +2 -0
- package/dist/core/aggregate/event-sourced-aggregate.d.ts +1 -0
- package/dist/core/aggregate/event-sourced-aggregate.js +9 -6
- package/dist/core/aggregate/state-aggregate.d.ts +2 -0
- package/dist/core/aggregate/state-aggregate.js +5 -1
- package/dist/core/domain.d.ts +5 -3
- package/dist/core/domain.js +6 -8
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js +1 -1
- package/dist/package.json +1 -1
- package/package.json +1 -1
- /package/dist/core/{repository.js → abstraction/event-publisher.js} +0 -0
|
@@ -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("./event-publisher"), exports);
|
|
18
|
+
__exportStar(require("./repository"), exports);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AnyAggregate } from "
|
|
2
|
-
import { Id } from "
|
|
1
|
+
import { AnyAggregate } from "../aggregate";
|
|
2
|
+
import { Id } from "../id";
|
|
3
3
|
export interface IRepository<T extends AnyAggregate> {
|
|
4
4
|
findById(id: Id): Promise<T | null>;
|
|
5
5
|
save(instance: T): Promise<any>;
|
|
@@ -37,6 +37,7 @@ export declare class EventSourcedAggregateBase<P extends Props> extends Aggregat
|
|
|
37
37
|
commandHandlerMap(): Map<string, CommandHandler>;
|
|
38
38
|
getHandlerForCommand<C extends AnyCommand>(command: C): CommandHandler<C, AnyEvent | AnyEvent[]>;
|
|
39
39
|
handleCommand<C extends AnyCommand>(command: C): AnyEvent[];
|
|
40
|
+
snapMetadata(): SnapshotMetadata;
|
|
40
41
|
snap(): Snapshot<this>;
|
|
41
42
|
}
|
|
42
43
|
export type AnyEventSourcedAggregate = EventSourcedAggregateBase<Props>;
|
|
@@ -119,14 +119,17 @@ class EventSourcedAggregateBase extends base_1.AggregateBase {
|
|
|
119
119
|
this._handledCommands.push(command);
|
|
120
120
|
return events;
|
|
121
121
|
}
|
|
122
|
+
snapMetadata() {
|
|
123
|
+
return {
|
|
124
|
+
id: this.id(),
|
|
125
|
+
version: this.version(),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
122
128
|
snap() {
|
|
123
|
-
if (
|
|
124
|
-
throw new Error();
|
|
129
|
+
if (this.propsIsEmpty())
|
|
130
|
+
throw new Error("Cannot create snapshot when the props is not initialized");
|
|
125
131
|
return {
|
|
126
|
-
metadata:
|
|
127
|
-
id: this.id(),
|
|
128
|
-
version: this.version(),
|
|
129
|
-
},
|
|
132
|
+
metadata: this.snapMetadata(),
|
|
130
133
|
props: this.props(),
|
|
131
134
|
};
|
|
132
135
|
}
|
|
@@ -4,6 +4,7 @@ import { Id } from "../id";
|
|
|
4
4
|
import { AnyEvent, EventClass } from "../message";
|
|
5
5
|
import { Props, PropsOf } from "../model";
|
|
6
6
|
import { AggregateBase, AggregateMetadata } from "./base";
|
|
7
|
+
import { IEventPublisher } from "../abstraction/event-publisher";
|
|
7
8
|
export declare class StateAggregateBase<P extends Props> extends AggregateBase<P> {
|
|
8
9
|
private _events;
|
|
9
10
|
constructor(metadata: AggregateMetadata, props: P);
|
|
@@ -13,6 +14,7 @@ export declare class StateAggregateBase<P extends Props> extends AggregateBase<P
|
|
|
13
14
|
events(): AnyEvent[];
|
|
14
15
|
protected recordEvent<E extends AnyEvent>(event: E): void;
|
|
15
16
|
protected recordEvent<E extends AnyEvent>(eventClass: EventClass<E>, props: PropsOf<E>): void;
|
|
17
|
+
publishEvents(eventPublisher: IEventPublisher): void;
|
|
16
18
|
clearEvents(): void;
|
|
17
19
|
}
|
|
18
20
|
export type AnyStateAggregate = StateAggregateBase<Props>;
|
|
@@ -20,7 +20,7 @@ class StateAggregateBase extends base_1.AggregateBase {
|
|
|
20
20
|
return this._version;
|
|
21
21
|
}
|
|
22
22
|
events() {
|
|
23
|
-
return this._events;
|
|
23
|
+
return [...this._events];
|
|
24
24
|
}
|
|
25
25
|
recordEvent(param1, param2) {
|
|
26
26
|
let event;
|
|
@@ -32,6 +32,10 @@ class StateAggregateBase extends base_1.AggregateBase {
|
|
|
32
32
|
}
|
|
33
33
|
this._events.push(event);
|
|
34
34
|
}
|
|
35
|
+
publishEvents(eventPublisher) {
|
|
36
|
+
eventPublisher.publishAll(this.events());
|
|
37
|
+
this.clearEvents();
|
|
38
|
+
}
|
|
35
39
|
clearEvents() {
|
|
36
40
|
this._events = [];
|
|
37
41
|
}
|
package/dist/core/domain.d.ts
CHANGED
|
@@ -5,11 +5,13 @@ export declare class ModelVersionRegistry<T extends AnyModel = AnyModel> extends
|
|
|
5
5
|
}
|
|
6
6
|
export declare class ModelRegistry<T extends AnyModel = AnyModel> extends Map<ModelName, ModelVersionRegistry<T>> {
|
|
7
7
|
}
|
|
8
|
+
export type DomainName = string;
|
|
8
9
|
export declare class Domain {
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
readonly name?: DomainName;
|
|
11
|
+
private readonly modelRegistry;
|
|
12
|
+
constructor(name?: DomainName);
|
|
11
13
|
getModelVersionRegistry(modelName: ModelName): ModelVersionRegistry<AnyModel>;
|
|
12
|
-
|
|
14
|
+
getModel(modelName: ModelName, modelVersion?: ModelVersion): ModelClass<AnyModel> | undefined;
|
|
13
15
|
hasRegisteredModel(modelName: ModelName, modelVersion: ModelVersion): boolean;
|
|
14
16
|
hasRegisteredModel(model: ModelClass): boolean;
|
|
15
17
|
registerModel(modelClass: ModelClass): this;
|
package/dist/core/domain.js
CHANGED
|
@@ -8,11 +8,9 @@ class ModelRegistry extends Map {
|
|
|
8
8
|
}
|
|
9
9
|
exports.ModelRegistry = ModelRegistry;
|
|
10
10
|
class Domain {
|
|
11
|
-
constructor(
|
|
11
|
+
constructor(name) {
|
|
12
12
|
this.modelRegistry = new ModelRegistry();
|
|
13
|
-
|
|
14
|
-
models.forEach((model) => this.registerModel(model));
|
|
15
|
-
}
|
|
13
|
+
this.name = name;
|
|
16
14
|
}
|
|
17
15
|
getModelVersionRegistry(modelName) {
|
|
18
16
|
const modelVersionRegistry = () => this.modelRegistry.get(modelName);
|
|
@@ -20,7 +18,7 @@ class Domain {
|
|
|
20
18
|
this.modelRegistry.set(modelName, new ModelVersionRegistry());
|
|
21
19
|
return modelVersionRegistry();
|
|
22
20
|
}
|
|
23
|
-
|
|
21
|
+
getModel(modelName, modelVersion = 0) {
|
|
24
22
|
const modelVersionRegistry = this.getModelVersionRegistry(modelName);
|
|
25
23
|
return modelVersionRegistry.get(modelVersion);
|
|
26
24
|
}
|
|
@@ -34,15 +32,15 @@ class Domain {
|
|
|
34
32
|
modelName = p1.modelName();
|
|
35
33
|
modelVersion = p1.modelVersion();
|
|
36
34
|
}
|
|
37
|
-
return Boolean(this.
|
|
35
|
+
return Boolean(this.getModel(modelName, modelVersion));
|
|
38
36
|
}
|
|
39
37
|
registerModel(modelClass) {
|
|
40
38
|
const modelName = modelClass.modelName();
|
|
41
39
|
const modelVersion = modelClass.modelVersion();
|
|
42
40
|
if (this.hasRegisteredModel(modelName, modelVersion))
|
|
43
41
|
throw new Error(`Model ${modelName} with version ${modelVersion} has been registered`);
|
|
44
|
-
const
|
|
45
|
-
|
|
42
|
+
const modelVersionRegistry = this.getModelVersionRegistry(modelName);
|
|
43
|
+
modelVersionRegistry.set(modelVersion, modelClass);
|
|
46
44
|
return this;
|
|
47
45
|
}
|
|
48
46
|
}
|
package/dist/core/index.d.ts
CHANGED
package/dist/core/index.js
CHANGED
|
@@ -21,5 +21,5 @@ __exportStar(require("./entity"), exports);
|
|
|
21
21
|
__exportStar(require("./enum"), exports);
|
|
22
22
|
__exportStar(require("./message"), exports);
|
|
23
23
|
__exportStar(require("./value-object"), exports);
|
|
24
|
-
__exportStar(require("./
|
|
24
|
+
__exportStar(require("./abstraction"), exports);
|
|
25
25
|
__exportStar(require("./domain"), exports);
|
package/dist/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"ddd-node","version":"16.
|
|
1
|
+
{"name":"ddd-node","version":"16.2.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
|
File without changes
|