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.
@@ -0,0 +1,5 @@
1
+ import { AnyEvent } from "../message";
2
+ export interface IEventPublisher {
3
+ publish(event: AnyEvent): void;
4
+ publishAll(events: AnyEvent[]): void;
5
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./event-publisher";
2
+ export * from "./repository";
@@ -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 "./aggregate";
2
- import { Id } from "./id";
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>;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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 (!this._props)
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
  }
@@ -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
- private modelRegistry;
10
- constructor(models?: ModelClass[]);
10
+ readonly name?: DomainName;
11
+ private readonly modelRegistry;
12
+ constructor(name?: DomainName);
11
13
  getModelVersionRegistry(modelName: ModelName): ModelVersionRegistry<AnyModel>;
12
- getRegisteredModel(modelName: ModelName, modelVersion?: ModelVersion): ModelClass<AnyModel> | undefined;
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;
@@ -8,11 +8,9 @@ class ModelRegistry extends Map {
8
8
  }
9
9
  exports.ModelRegistry = ModelRegistry;
10
10
  class Domain {
11
- constructor(models) {
11
+ constructor(name) {
12
12
  this.modelRegistry = new ModelRegistry();
13
- if (models) {
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
- getRegisteredModel(modelName, modelVersion = 0) {
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.getRegisteredModel(modelName, modelVersion));
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 versionRegistry = this.getModelVersionRegistry(modelName);
45
- versionRegistry.set(modelVersion, modelClass);
42
+ const modelVersionRegistry = this.getModelVersionRegistry(modelName);
43
+ modelVersionRegistry.set(modelVersion, modelClass);
46
44
  return this;
47
45
  }
48
46
  }
@@ -5,5 +5,5 @@ export * from "./entity";
5
5
  export * from "./enum";
6
6
  export * from "./message";
7
7
  export * from "./value-object";
8
- export * from "./repository";
8
+ export * from "./abstraction";
9
9
  export * from "./domain";
@@ -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("./repository"), exports);
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.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"}}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ddd-node",
3
- "version": "16.1.0",
3
+ "version": "16.2.0",
4
4
  "description": "Domain Driven Design base for NodeJs",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",