@pocket-architect/core 0.1.19 → 0.1.20
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/build/Entity.d.ts +2 -1
- package/build/Entity.js +5 -0
- package/build/Entity.js.map +1 -1
- package/build/Entity.spec.js +9 -2
- package/build/Entity.spec.js.map +1 -1
- package/build/eventBus/InMemoryEventBus.d.ts +5 -1
- package/build/eventBus/InMemoryEventBus.js +12 -8
- package/build/eventBus/InMemoryEventBus.js.map +1 -1
- package/build/helpers.d.ts +1 -0
- package/build/helpers.js +30 -0
- package/build/helpers.js.map +1 -0
- package/build/helpers.spec.d.ts +1 -0
- package/build/helpers.spec.js +70 -0
- package/build/helpers.spec.js.map +1 -0
- package/build/index.d.ts +4 -1
- package/build/index.js +3 -1
- package/build/index.js.map +1 -1
- package/package.json +1 -1
- package/src/Entity.spec.ts +7 -2
- package/src/Entity.ts +8 -2
- package/src/eventBus/InMemoryEventBus.ts +16 -3
- package/src/helpers.spec.ts +62 -0
- package/src/helpers.ts +25 -0
- package/src/index.ts +7 -1
package/build/Entity.d.ts
CHANGED
package/build/Entity.js
CHANGED
|
@@ -62,9 +62,14 @@ var Entity = /** @class */ (function () {
|
|
|
62
62
|
Entity.prototype.toPrimitive = function () {
|
|
63
63
|
return this.props;
|
|
64
64
|
};
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
65
66
|
Entity.prototype.toJSON = function () {
|
|
66
67
|
return this.toPrimitive();
|
|
67
68
|
};
|
|
69
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
70
|
+
Entity.prototype.toSnapshot = function () {
|
|
71
|
+
return this.toPrimitive();
|
|
72
|
+
};
|
|
68
73
|
return Entity;
|
|
69
74
|
}());
|
|
70
75
|
exports.Entity = Entity;
|
package/build/Entity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Entity.js","sourceRoot":"","sources":["../src/Entity.ts"],"names":[],"mappings":";;;AAAA,uCAAsC;AAEtC,IAAM,QAAQ,GAAG,UAA8B,CAAkB;IAC/D,OAAO,CAAC,YAAY,MAAM,CAAA;AAC5B,CAAC,CAAA;AAED;IAiCE,gBAAsB,KAAQ,EAAE,EAAQ;QACtC,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,CAAC,GAAG,GAAM,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,mBAAQ,CAAI,EAAE,CAAC,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,GAAM,CAAC,IAAI,mBAAQ,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAnCD,yBAAQ,GAAR;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAM,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6BAAY,GAAZ;QACE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,KAAK,IAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAClE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,CAAC;IAED,wBAAO,GAAP;QACE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IAWM,uBAAM,GAAb,UAAc,MAAwB;QACpC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAA;QACd,CAAC;QAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,sBAAI,sBAAE;aAAN;YACE,OAAO,IAAI,CAAC,GAAG,CAAA;QACjB,CAAC;;;OAAA;IAED,4BAAW,GAAX;QACE,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,uBAAM,GAAN;QACE,OAAO,IAAI,CAAC,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"Entity.js","sourceRoot":"","sources":["../src/Entity.ts"],"names":[],"mappings":"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"}
|
package/build/Entity.spec.js
CHANGED
|
@@ -18,12 +18,19 @@ var TestEntity = /** @class */ (function (_super) {
|
|
|
18
18
|
enumerable: false,
|
|
19
19
|
configurable: true
|
|
20
20
|
});
|
|
21
|
+
Object.defineProperty(TestEntity.prototype, "testId", {
|
|
22
|
+
set: function (val) {
|
|
23
|
+
this.props.testId = val;
|
|
24
|
+
},
|
|
25
|
+
enumerable: false,
|
|
26
|
+
configurable: true
|
|
27
|
+
});
|
|
21
28
|
return TestEntity;
|
|
22
29
|
}(Entity_1.Entity));
|
|
23
30
|
describe('Entity', function () {
|
|
24
31
|
var entity;
|
|
25
32
|
beforeAll(function () {
|
|
26
|
-
entity = TestEntity.create({ name: 'test' }, '1');
|
|
33
|
+
entity = TestEntity.create({ name: 'test', testId: new EntityId_1.EntityId('1') }, '1');
|
|
27
34
|
});
|
|
28
35
|
test('base', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
29
36
|
var entityNew, entity2, entity3;
|
|
@@ -48,7 +55,7 @@ describe('Entity', function () {
|
|
|
48
55
|
var snapshot;
|
|
49
56
|
return tslib_1.__generator(this, function (_a) {
|
|
50
57
|
snapshot = entity.snapshot();
|
|
51
|
-
expect(snapshot).toEqual({ name: 'test' });
|
|
58
|
+
expect(snapshot).toEqual({ name: 'test', testId: new EntityId_1.EntityId('1') });
|
|
52
59
|
expect(function () {
|
|
53
60
|
snapshot.name = 'changed';
|
|
54
61
|
}).toThrow();
|
package/build/Entity.spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Entity.spec.js","sourceRoot":"","sources":["../src/Entity.spec.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAClC,uCAAsC;
|
|
1
|
+
{"version":3,"file":"Entity.spec.js","sourceRoot":"","sources":["../src/Entity.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,14 @@ import { EventEmitter } from 'events';
|
|
|
3
3
|
import { AnyDomainEvent } from '../DomainEvent';
|
|
4
4
|
import { EventBus } from '../EventBus';
|
|
5
5
|
import { DomainEventSubscriber } from "../DomainEventSubscriber";
|
|
6
|
-
export declare class InMemoryEventBus
|
|
6
|
+
export declare class InMemoryEventBus implements EventBus {
|
|
7
7
|
protected _events: AnyDomainEvent[];
|
|
8
|
+
protected _emitter: EventEmitter;
|
|
9
|
+
constructor();
|
|
8
10
|
push(event: AnyDomainEvent): Promise<void>;
|
|
9
11
|
clear(): Promise<void>;
|
|
10
12
|
publish(events?: AnyDomainEvent[]): Promise<void>;
|
|
13
|
+
on(event: string, listener: (...args: never[]) => void): void;
|
|
14
|
+
listenerCount(event: string): number;
|
|
11
15
|
addSubscribers(subscribers: DomainEventSubscriber[]): void;
|
|
12
16
|
}
|
|
@@ -3,12 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.InMemoryEventBus = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var events_1 = require("events");
|
|
6
|
-
var InMemoryEventBus = /** @class */ (function (
|
|
7
|
-
tslib_1.__extends(InMemoryEventBus, _super);
|
|
6
|
+
var InMemoryEventBus = /** @class */ (function () {
|
|
8
7
|
function InMemoryEventBus() {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return _this;
|
|
8
|
+
this._events = [];
|
|
9
|
+
this._emitter = new events_1.EventEmitter();
|
|
12
10
|
}
|
|
13
11
|
InMemoryEventBus.prototype.push = function (event) {
|
|
14
12
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
@@ -36,7 +34,7 @@ var InMemoryEventBus = /** @class */ (function (_super) {
|
|
|
36
34
|
allEvents = (this._events || []).concat(events !== null && events !== void 0 ? events : []);
|
|
37
35
|
for (_i = 0, allEvents_1 = allEvents; _i < allEvents_1.length; _i++) {
|
|
38
36
|
event = allEvents_1[_i];
|
|
39
|
-
this.emit(event.eventName, event);
|
|
37
|
+
this._emitter.emit(event.eventName, event);
|
|
40
38
|
}
|
|
41
39
|
return [4 /*yield*/, this.clear()];
|
|
42
40
|
case 1:
|
|
@@ -46,6 +44,12 @@ var InMemoryEventBus = /** @class */ (function (_super) {
|
|
|
46
44
|
});
|
|
47
45
|
});
|
|
48
46
|
};
|
|
47
|
+
InMemoryEventBus.prototype.on = function (event, listener) {
|
|
48
|
+
this._emitter.on(event, listener);
|
|
49
|
+
};
|
|
50
|
+
InMemoryEventBus.prototype.listenerCount = function (event) {
|
|
51
|
+
return this._emitter.listenerCount(event);
|
|
52
|
+
};
|
|
49
53
|
InMemoryEventBus.prototype.addSubscribers = function (subscribers) {
|
|
50
54
|
var _a;
|
|
51
55
|
for (var _i = 0, subscribers_1 = subscribers; _i < subscribers_1.length; _i++) {
|
|
@@ -53,11 +57,11 @@ var InMemoryEventBus = /** @class */ (function (_super) {
|
|
|
53
57
|
var events = subscriber.subscribedTo();
|
|
54
58
|
for (var _b = 0, events_2 = events; _b < events_2.length; _b++) {
|
|
55
59
|
var event = events_2[_b];
|
|
56
|
-
this.on((_a = event.EVENT_NAME) !== null && _a !== void 0 ? _a : event.name, subscriber.on.bind(subscriber));
|
|
60
|
+
this._emitter.on((_a = event.EVENT_NAME) !== null && _a !== void 0 ? _a : event.name, subscriber.on.bind(subscriber));
|
|
57
61
|
}
|
|
58
62
|
}
|
|
59
63
|
};
|
|
60
64
|
return InMemoryEventBus;
|
|
61
|
-
}(
|
|
65
|
+
}());
|
|
62
66
|
exports.InMemoryEventBus = InMemoryEventBus;
|
|
63
67
|
//# sourceMappingURL=InMemoryEventBus.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InMemoryEventBus.js","sourceRoot":"","sources":["../../src/eventBus/InMemoryEventBus.ts"],"names":[],"mappings":";;;;AAAA,iCAAsC;AAKtC;
|
|
1
|
+
{"version":3,"file":"InMemoryEventBus.js","sourceRoot":"","sources":["../../src/eventBus/InMemoryEventBus.ts"],"names":[],"mappings":";;;;AAAA,iCAAsC;AAKtC;IAIE;QAHU,YAAO,GAAqB,EAAE,CAAC;QAIvC,IAAI,CAAC,QAAQ,GAAG,IAAI,qBAAY,EAAE,CAAC;IACrC,CAAC;IAEK,+BAAI,GAAV,UAAW,KAAqB;;;gBAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;;;KAC1B;IAEK,gCAAK,GAAX;;;gBACE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;;;;KACnB;IAEK,kCAAO,GAAb,UAAc,MAA6B;QAA7B,uBAAA,EAAA,WAA6B;;;;;;wBACnC,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC,CAAC;wBAC5D,WAA6B,EAAT,uBAAS,EAAT,uBAAS,EAAT,IAAS,EAAE,CAAC;4BAArB,KAAK;4BACd,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;wBAC7C,CAAC;wBACD,qBAAM,IAAI,CAAC,KAAK,EAAE,EAAA;;wBAAlB,SAAkB,CAAC;;;;;KACpB;IAED,6BAAE,GAAF,UAAG,KAAa,EAAE,QAAoC;QACpD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,wCAAa,GAAb,UAAc,KAAa;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,yCAAc,GAAd,UAAe,WAAoC;;QACjD,KAAyB,UAAW,EAAX,2BAAW,EAAX,yBAAW,EAAX,IAAW,EAAE,CAAC;YAAlC,IAAM,UAAU,oBAAA;YACnB,IAAM,MAAM,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;YACzC,KAAoB,UAAM,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,EAAE,CAAC;gBAAxB,IAAM,KAAK,eAAA;gBACd,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAA,KAAK,CAAC,UAAU,mCAAI,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;IACH,CAAC;IACH,uBAAC;AAAD,CAAC,AAxCD,IAwCC;AAxCY,4CAAgB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function createSnapshot<T>(obj: T): T;
|
package/build/helpers.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSnapshot = void 0;
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
5
|
+
function createSnapshot(obj) {
|
|
6
|
+
if (!obj) {
|
|
7
|
+
return obj;
|
|
8
|
+
}
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
10
|
+
// @ts-ignore
|
|
11
|
+
if (typeof obj.toSnapshot === 'function') {
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
return obj.toSnapshot();
|
|
15
|
+
}
|
|
16
|
+
var copy = {};
|
|
17
|
+
for (var key in obj) {
|
|
18
|
+
if (!Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (typeof obj[key] !== 'object') {
|
|
22
|
+
copy[key] = obj[key];
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
copy[key] = createSnapshot(obj[key]);
|
|
26
|
+
}
|
|
27
|
+
return copy;
|
|
28
|
+
}
|
|
29
|
+
exports.createSnapshot = createSnapshot;
|
|
30
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":";;;AAAA,8DAA8D;AAC9D,SAAgB,cAAc,CAAI,GAAM;IACtC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,GAAG,CAAC;IACb,CAAC;IACD,6DAA6D;IAC7D,aAAa;IACb,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACzC,6DAA6D;QAC7D,aAAa;QACb,OAAO,GAAG,CAAC,UAAU,EAAO,CAAC;IAC/B,CAAC;IACD,IAAM,IAAI,GAAK,EAAO,CAAC;IACvB,KAAK,IAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACpD,SAAS;QACX,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAvBD,wCAuBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var helpers_1 = require("./helpers");
|
|
5
|
+
var EntityId_1 = require("./EntityId");
|
|
6
|
+
var Entity_1 = require("./Entity");
|
|
7
|
+
var TestEntity = /** @class */ (function (_super) {
|
|
8
|
+
tslib_1.__extends(TestEntity, _super);
|
|
9
|
+
function TestEntity() {
|
|
10
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
11
|
+
}
|
|
12
|
+
TestEntity.create = function (props, id) {
|
|
13
|
+
return new TestEntity(props, id);
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(TestEntity.prototype, "name", {
|
|
16
|
+
set: function (name) {
|
|
17
|
+
this.props.name = name;
|
|
18
|
+
},
|
|
19
|
+
enumerable: false,
|
|
20
|
+
configurable: true
|
|
21
|
+
});
|
|
22
|
+
Object.defineProperty(TestEntity.prototype, "testId", {
|
|
23
|
+
set: function (val) {
|
|
24
|
+
this.props.testId = val;
|
|
25
|
+
},
|
|
26
|
+
enumerable: false,
|
|
27
|
+
configurable: true
|
|
28
|
+
});
|
|
29
|
+
TestEntity.prototype.toSnapshot = function () {
|
|
30
|
+
return tslib_1.__assign(tslib_1.__assign({}, this.props), { testId: undefined });
|
|
31
|
+
};
|
|
32
|
+
return TestEntity;
|
|
33
|
+
}(Entity_1.Entity));
|
|
34
|
+
describe('helpers', function () {
|
|
35
|
+
test('createSnapshot', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
36
|
+
var original, snapshot, item, itemSnapshot;
|
|
37
|
+
return tslib_1.__generator(this, function (_a) {
|
|
38
|
+
original = {
|
|
39
|
+
a: 1,
|
|
40
|
+
b: 'test',
|
|
41
|
+
c: {
|
|
42
|
+
d: 2,
|
|
43
|
+
e: 'nested',
|
|
44
|
+
f: {
|
|
45
|
+
g: 3
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
id: new EntityId_1.EntityId('1'),
|
|
49
|
+
};
|
|
50
|
+
snapshot = (0, helpers_1.createSnapshot)(original);
|
|
51
|
+
expect(snapshot).toEqual(original);
|
|
52
|
+
expect(snapshot).not.toBe(original);
|
|
53
|
+
expect(snapshot.c).not.toBe(original.c);
|
|
54
|
+
expect(snapshot.c.f).not.toBe(original.c.f);
|
|
55
|
+
expect(snapshot.id).not.toBe(original.id);
|
|
56
|
+
expect(snapshot.id).toEqual(new EntityId_1.EntityId('1'));
|
|
57
|
+
item = TestEntity.create({
|
|
58
|
+
name: 'test',
|
|
59
|
+
testId: new EntityId_1.EntityId('2')
|
|
60
|
+
}, '2');
|
|
61
|
+
itemSnapshot = (0, helpers_1.createSnapshot)(item);
|
|
62
|
+
expect(itemSnapshot).toEqual({
|
|
63
|
+
name: 'test',
|
|
64
|
+
testId: undefined
|
|
65
|
+
});
|
|
66
|
+
return [2 /*return*/];
|
|
67
|
+
});
|
|
68
|
+
}); });
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=helpers.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.spec.js","sourceRoot":"","sources":["../src/helpers.spec.ts"],"names":[],"mappings":";;;AAAA,qCAAyC;AACzC,uCAAoC;AACpC,mCAAgC;AAMhC;IAAyB,sCAA2C;IAApE;;IAmBA,CAAC;IAlBQ,iBAAM,GAAb,UAAc,KAAgB,EAAE,EAA2B;QACzD,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,sBAAI,4BAAI;aAAR,UAAS,IAAY;YACnB,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACzB,CAAC;;;OAAA;IAED,sBAAI,8BAAM;aAAV,UAAW,GAAqB;YAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QAC1B,CAAC;;;OAAA;IAED,+BAAU,GAAV;QACE,OAAO,sCACF,IAAI,CAAC,KAAK,KACb,MAAM,EAAE,SAAS,GACT,CAAC;IACb,CAAC;IACH,iBAAC;AAAD,CAAC,AAnBD,CAAyB,eAAM,GAmB9B;AAED,QAAQ,CAAC,SAAS,EAAE;IAClB,IAAI,CAAC,gBAAgB,EAAE;;;YACf,QAAQ,GAAG;gBACf,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,MAAM;gBACT,CAAC,EAAE;oBACD,CAAC,EAAE,CAAC;oBACJ,CAAC,EAAE,QAAQ;oBACX,CAAC,EAAE;wBACD,CAAC,EAAE,CAAC;qBACL;iBACF;gBACD,EAAE,EAAE,IAAI,mBAAQ,CAAS,GAAG,CAAC;aAC9B,CAAC;YACI,QAAQ,GAAG,IAAA,wBAAc,EAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,mBAAQ,CAAS,GAAG,CAAC,CAAC,CAAC;YAEjD,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;gBAC7B,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,IAAI,mBAAQ,CAAC,GAAG,CAAC;aAC1B,EAAE,GAAG,CAAC,CAAC;YACF,YAAY,GAAG,IAAA,wBAAc,EAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC;gBAC3B,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;;;SACJ,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/build/index.d.ts
CHANGED
|
@@ -3,4 +3,7 @@ import { EntityId } from './EntityId';
|
|
|
3
3
|
import { ValueObject } from './ValueObject';
|
|
4
4
|
import { AggregateRoot } from './AggregateRoot';
|
|
5
5
|
import { HashError } from './error/HashError';
|
|
6
|
-
|
|
6
|
+
import { DomainEvent } from './DomainEvent';
|
|
7
|
+
import { DomainEventSubscriber } from './DomainEventSubscriber';
|
|
8
|
+
import { EventBus } from './EventBus';
|
|
9
|
+
export { Entity, EntityId, ValueObject, AggregateRoot, HashError, DomainEvent, DomainEventSubscriber, EventBus };
|
package/build/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HashError = exports.AggregateRoot = exports.ValueObject = exports.EntityId = exports.Entity = void 0;
|
|
3
|
+
exports.DomainEvent = exports.HashError = exports.AggregateRoot = exports.ValueObject = exports.EntityId = exports.Entity = void 0;
|
|
4
4
|
var Entity_1 = require("./Entity");
|
|
5
5
|
Object.defineProperty(exports, "Entity", { enumerable: true, get: function () { return Entity_1.Entity; } });
|
|
6
6
|
var EntityId_1 = require("./EntityId");
|
|
@@ -11,4 +11,6 @@ var AggregateRoot_1 = require("./AggregateRoot");
|
|
|
11
11
|
Object.defineProperty(exports, "AggregateRoot", { enumerable: true, get: function () { return AggregateRoot_1.AggregateRoot; } });
|
|
12
12
|
var HashError_1 = require("./error/HashError");
|
|
13
13
|
Object.defineProperty(exports, "HashError", { enumerable: true, get: function () { return HashError_1.HashError; } });
|
|
14
|
+
var DomainEvent_1 = require("./DomainEvent");
|
|
15
|
+
Object.defineProperty(exports, "DomainEvent", { enumerable: true, get: function () { return DomainEvent_1.DomainEvent; } });
|
|
14
16
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAUhC,uFAVO,eAAM,OAUP;AATR,uCAAsC;AAUpC,yFAVO,mBAAQ,OAUP;AATV,6CAA4C;AAU1C,4FAVO,yBAAW,OAUP;AATb,iDAAgD;AAU9C,8FAVO,6BAAa,OAUP;AATf,+CAA8C;AAU5C,0FAVO,qBAAS,OAUP;AATX,6CAA4C;AAU1C,4FAVO,yBAAW,OAUP"}
|
package/package.json
CHANGED
package/src/Entity.spec.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { EntityId } from './EntityId';
|
|
|
3
3
|
|
|
4
4
|
interface TestProps {
|
|
5
5
|
name: string;
|
|
6
|
+
testId?: EntityId<string>;
|
|
6
7
|
}
|
|
7
8
|
class TestEntity extends Entity<TestProps, string, EntityId<string>> {
|
|
8
9
|
static create(props: TestProps, id?:EntityId<string>|string): TestEntity {
|
|
@@ -12,13 +13,17 @@ class TestEntity extends Entity<TestProps, string, EntityId<string>> {
|
|
|
12
13
|
set name(name: string) {
|
|
13
14
|
this.props.name = name;
|
|
14
15
|
}
|
|
16
|
+
|
|
17
|
+
set testId(val: EntityId<string>) {
|
|
18
|
+
this.props.testId = val;
|
|
19
|
+
}
|
|
15
20
|
}
|
|
16
21
|
|
|
17
22
|
describe('Entity', () => {
|
|
18
23
|
let entity: TestEntity;
|
|
19
24
|
|
|
20
25
|
beforeAll(() => {
|
|
21
|
-
entity = TestEntity.create({ name: 'test' }, '1');
|
|
26
|
+
entity = TestEntity.create({ name: 'test', testId: new EntityId('1') }, '1');
|
|
22
27
|
});
|
|
23
28
|
|
|
24
29
|
test('base', async () => {
|
|
@@ -41,7 +46,7 @@ describe('Entity', () => {
|
|
|
41
46
|
|
|
42
47
|
test('snapshot', async () => {
|
|
43
48
|
const snapshot = entity.snapshot();
|
|
44
|
-
expect(snapshot).toEqual({ name: 'test' });
|
|
49
|
+
expect(snapshot).toEqual({ name: 'test', testId: new EntityId('1') });
|
|
45
50
|
|
|
46
51
|
expect(() => {
|
|
47
52
|
snapshot.name = 'changed';
|
package/src/Entity.ts
CHANGED
|
@@ -70,7 +70,13 @@ export abstract class Entity<T, E, H extends EntityId<E>> {
|
|
|
70
70
|
return this.props
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
74
|
+
toJSON(): any {
|
|
75
|
+
return this.toPrimitive();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
79
|
+
toSnapshot(): any {
|
|
80
|
+
return this.toPrimitive();
|
|
75
81
|
}
|
|
76
82
|
}
|
|
@@ -3,8 +3,13 @@ import { AnyDomainEvent } from '../DomainEvent';
|
|
|
3
3
|
import { EventBus } from '../EventBus';
|
|
4
4
|
import {DomainEventSubscriber} from "../DomainEventSubscriber";
|
|
5
5
|
|
|
6
|
-
export class InMemoryEventBus
|
|
6
|
+
export class InMemoryEventBus implements EventBus {
|
|
7
7
|
protected _events: AnyDomainEvent[] = [];
|
|
8
|
+
protected _emitter: EventEmitter;
|
|
9
|
+
|
|
10
|
+
constructor() {
|
|
11
|
+
this._emitter = new EventEmitter();
|
|
12
|
+
}
|
|
8
13
|
|
|
9
14
|
async push(event: AnyDomainEvent): Promise<void> {
|
|
10
15
|
this._events.push(event);
|
|
@@ -17,16 +22,24 @@ export class InMemoryEventBus extends EventEmitter implements EventBus {
|
|
|
17
22
|
async publish(events: AnyDomainEvent[] = []): Promise<void> {
|
|
18
23
|
const allEvents = (this._events || []).concat(events ?? []);
|
|
19
24
|
for (const event of allEvents) {
|
|
20
|
-
this.emit(event.eventName, event);
|
|
25
|
+
this._emitter.emit(event.eventName, event);
|
|
21
26
|
}
|
|
22
27
|
await this.clear();
|
|
23
28
|
}
|
|
24
29
|
|
|
30
|
+
on(event: string, listener: (...args: never[]) => void): void {
|
|
31
|
+
this._emitter.on(event, listener);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
listenerCount(event: string): number {
|
|
35
|
+
return this._emitter.listenerCount(event);
|
|
36
|
+
}
|
|
37
|
+
|
|
25
38
|
addSubscribers(subscribers: DomainEventSubscriber[]): void {
|
|
26
39
|
for (const subscriber of subscribers) {
|
|
27
40
|
const events = subscriber.subscribedTo();
|
|
28
41
|
for (const event of events) {
|
|
29
|
-
this.on(event.EVENT_NAME ?? event.name, subscriber.on.bind(subscriber));
|
|
42
|
+
this._emitter.on(event.EVENT_NAME ?? event.name, subscriber.on.bind(subscriber));
|
|
30
43
|
}
|
|
31
44
|
}
|
|
32
45
|
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import {createSnapshot} from "./helpers";
|
|
2
|
+
import {EntityId} from "./EntityId";
|
|
3
|
+
import {Entity} from "./Entity";
|
|
4
|
+
|
|
5
|
+
interface TestProps {
|
|
6
|
+
name: string;
|
|
7
|
+
testId?: EntityId<string>;
|
|
8
|
+
}
|
|
9
|
+
class TestEntity extends Entity<TestProps, string, EntityId<string>> {
|
|
10
|
+
static create(props: TestProps, id?:EntityId<string>|string): TestEntity {
|
|
11
|
+
return new TestEntity(props, id);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
set name(name: string) {
|
|
15
|
+
this.props.name = name;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
set testId(val: EntityId<string>) {
|
|
19
|
+
this.props.testId = val;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
toSnapshot():never {
|
|
23
|
+
return {
|
|
24
|
+
...this.props,
|
|
25
|
+
testId: undefined
|
|
26
|
+
} as never;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
describe('helpers', () => {
|
|
31
|
+
test('createSnapshot', async () => {
|
|
32
|
+
const original = {
|
|
33
|
+
a: 1,
|
|
34
|
+
b: 'test',
|
|
35
|
+
c: {
|
|
36
|
+
d: 2,
|
|
37
|
+
e: 'nested',
|
|
38
|
+
f: {
|
|
39
|
+
g: 3
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
id: new EntityId<string>('1'),
|
|
43
|
+
};
|
|
44
|
+
const snapshot = createSnapshot(original);
|
|
45
|
+
expect(snapshot).toEqual(original);
|
|
46
|
+
expect(snapshot).not.toBe(original);
|
|
47
|
+
expect(snapshot.c).not.toBe(original.c);
|
|
48
|
+
expect(snapshot.c.f).not.toBe(original.c.f);
|
|
49
|
+
expect(snapshot.id).not.toBe(original.id);
|
|
50
|
+
expect(snapshot.id).toEqual(new EntityId<string>('1'));
|
|
51
|
+
|
|
52
|
+
const item = TestEntity.create({
|
|
53
|
+
name: 'test',
|
|
54
|
+
testId: new EntityId('2')
|
|
55
|
+
}, '2');
|
|
56
|
+
const itemSnapshot = createSnapshot(item);
|
|
57
|
+
expect(itemSnapshot).toEqual({
|
|
58
|
+
name: 'test',
|
|
59
|
+
testId: undefined
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
});
|
package/src/helpers.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2
|
+
export function createSnapshot<T>(obj: T): T {
|
|
3
|
+
if (!obj) {
|
|
4
|
+
return obj;
|
|
5
|
+
}
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
7
|
+
// @ts-ignore
|
|
8
|
+
if (typeof obj.toSnapshot === 'function') {
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
10
|
+
// @ts-ignore
|
|
11
|
+
return obj.toSnapshot() as T;
|
|
12
|
+
}
|
|
13
|
+
const copy:T = {} as T;
|
|
14
|
+
for (const key in obj) {
|
|
15
|
+
if (!Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
if (typeof obj[key] !== 'object') {
|
|
19
|
+
copy[key] = obj[key];
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
copy[key] = createSnapshot(obj[key]);
|
|
23
|
+
}
|
|
24
|
+
return copy;
|
|
25
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -3,11 +3,17 @@ import { EntityId } from './EntityId';
|
|
|
3
3
|
import { ValueObject } from './ValueObject';
|
|
4
4
|
import { AggregateRoot } from './AggregateRoot';
|
|
5
5
|
import { HashError } from './error/HashError';
|
|
6
|
+
import { DomainEvent } from './DomainEvent';
|
|
7
|
+
import { DomainEventSubscriber } from './DomainEventSubscriber';
|
|
8
|
+
import { EventBus } from './EventBus';
|
|
6
9
|
|
|
7
10
|
export {
|
|
8
11
|
Entity,
|
|
9
12
|
EntityId,
|
|
10
13
|
ValueObject,
|
|
11
14
|
AggregateRoot,
|
|
12
|
-
HashError
|
|
15
|
+
HashError,
|
|
16
|
+
DomainEvent,
|
|
17
|
+
DomainEventSubscriber,
|
|
18
|
+
EventBus
|
|
13
19
|
}
|