@ddd-ts/event-sourcing-inmemory 0.0.13 → 0.0.14
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/event-store/in-memory.event-store.d.ts +7 -1
- package/dist/event-store/in-memory.event-store.d.ts.map +1 -1
- package/dist/event-store/in-memory.event-store.js +6 -1
- package/dist/event-store/in-memory.event-store.js.map +1 -1
- package/dist/event-store/in-memory.event-store.spec.js +104 -2
- package/dist/event-store/in-memory.event-store.spec.js.map +1 -1
- package/dist/in-memory.es-aggregate-store.d.ts +12 -10
- package/dist/in-memory.es-aggregate-store.d.ts.map +1 -1
- package/dist/in-memory.es-aggregate-store.js +18 -8
- package/dist/in-memory.es-aggregate-store.js.map +1 -1
- package/dist/in-memory.snapshotter.d.ts +3 -7
- package/dist/in-memory.snapshotter.d.ts.map +1 -1
- package/dist/in-memory.snapshotter.js +17 -21
- package/dist/in-memory.snapshotter.js.map +1 -1
- package/dist/test/bank.spec.js +3 -2
- package/dist/test/bank.spec.js.map +1 -1
- package/package.json +7 -7
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { type AggregateStreamId, type IChange } from "@ddd-ts/core";
|
|
2
|
+
import type { InMemoryTransaction } from "@ddd-ts/store-inmemory";
|
|
2
3
|
export declare class InMemoryEventStore {
|
|
3
4
|
private streams;
|
|
4
5
|
close(): Promise<void>;
|
|
5
6
|
clear(): Promise<void>;
|
|
6
|
-
|
|
7
|
+
bulkAppend(toAppend: {
|
|
8
|
+
streamId: AggregateStreamId;
|
|
9
|
+
changes: IChange[];
|
|
10
|
+
expectedRevision: number;
|
|
11
|
+
}[], trx?: InMemoryTransaction): Promise<void>;
|
|
12
|
+
append(streamId: AggregateStreamId, changes: IChange[], expectedRevision: number, trx?: InMemoryTransaction): Promise<void>;
|
|
7
13
|
read(streamId: AggregateStreamId, from?: number): AsyncGenerator<import("@ddd-ts/core").IFact, void, unknown>;
|
|
8
14
|
}
|
|
9
15
|
//# sourceMappingURL=in-memory.event-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.event-store.d.ts","sourceRoot":"","sources":["../../src/event-store/in-memory.event-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACb,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"in-memory.event-store.d.ts","sourceRoot":"","sources":["../../src/event-store/in-memory.event-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACb,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAA6B;IAEtC,KAAK;IAIL,KAAK;IAIL,UAAU,CACd,QAAQ,EAAE;QACR,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,EAAE,EACH,GAAG,CAAC,EAAE,mBAAmB;IAOrB,MAAM,CACV,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,OAAO,EAAE,EAClB,gBAAgB,EAAE,MAAM,EACxB,GAAG,CAAC,EAAE,mBAAmB;IAuBpB,IAAI,CAAC,QAAQ,EAAE,iBAAiB,EAAE,IAAI,SAAI;CAUlD"}
|
|
@@ -11,7 +11,12 @@ class InMemoryEventStore {
|
|
|
11
11
|
async clear() {
|
|
12
12
|
this.streams.clear();
|
|
13
13
|
}
|
|
14
|
-
async
|
|
14
|
+
async bulkAppend(toAppend, trx) {
|
|
15
|
+
for (const { streamId, changes, expectedRevision } of toAppend) {
|
|
16
|
+
await this.append(streamId, changes, expectedRevision);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async append(streamId, changes, expectedRevision, trx) {
|
|
15
20
|
const streamName = `${streamId.aggregate}-${streamId.id}`;
|
|
16
21
|
if (!this.streams.has(streamName)) {
|
|
17
22
|
const stream = new stream_1.Stream();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.event-store.js","sourceRoot":"","sources":["../../src/event-store/in-memory.event-store.ts"],"names":[],"mappings":";;;AAAA,uCAIsB;AACtB,qCAAkC;
|
|
1
|
+
{"version":3,"file":"in-memory.event-store.js","sourceRoot":"","sources":["../../src/event-store/in-memory.event-store.ts"],"names":[],"mappings":";;;AAAA,uCAIsB;AACtB,qCAAkC;AAGlC,MAAa,kBAAkB;IACrB,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,UAAU,CACd,QAIG,EACH,GAAyB;QAEzB,KAAK,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC/D,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CACV,QAA2B,EAC3B,OAAkB,EAClB,gBAAwB,EACxB,GAAyB;QAEzB,MAAM,UAAU,GAAG,GAAG,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QAE1D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;QAE7C,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAChD,IAAI,eAAe,KAAK,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,uBAAgB,CACxB,qBAAqB,gBAAgB,aAAa,eAAe,EAAE,CACpE,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAC,IAAI,CAAC,QAA2B,EAAE,IAAI,GAAG,CAAC;QAC/C,MAAM,UAAU,GAAG,GAAG,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QAE1D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;CACF;AA7DD,gDA6DC"}
|
|
@@ -1,18 +1,120 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
2
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
9
|
const tests_1 = require("@ddd-ts/tests");
|
|
4
10
|
const in_memory_event_store_1 = require("./in-memory.event-store");
|
|
11
|
+
const core_1 = require("@ddd-ts/core");
|
|
5
12
|
const in_memory_snapshotter_1 = require("../in-memory.snapshotter");
|
|
6
13
|
const store_inmemory_1 = require("@ddd-ts/store-inmemory");
|
|
7
14
|
const in_memory_es_aggregate_store_1 = require("../in-memory.es-aggregate-store");
|
|
15
|
+
const dist_1 = require("../../../shape/dist");
|
|
8
16
|
describe("InMemoryEventStore", () => {
|
|
9
17
|
const database = new store_inmemory_1.InMemoryDatabase();
|
|
18
|
+
const transaction = new store_inmemory_1.InMemoryTransactionPerformer(database);
|
|
10
19
|
const eventStore = new in_memory_event_store_1.InMemoryEventStore();
|
|
11
20
|
function makeAggregateStore(AGGREGATE, eventSerializer, serializer) {
|
|
12
|
-
const snapshotter = new in_memory_snapshotter_1.InMemorySnapshotter(database, serializer);
|
|
21
|
+
const snapshotter = new in_memory_snapshotter_1.InMemorySnapshotter(AGGREGATE.name, database, serializer);
|
|
13
22
|
const Store = (0, in_memory_es_aggregate_store_1.MakeInMemoryEsAggregateStore)(AGGREGATE);
|
|
14
|
-
return new Store(eventStore, eventSerializer, snapshotter);
|
|
23
|
+
return new Store(eventStore, transaction, eventSerializer, snapshotter);
|
|
15
24
|
}
|
|
16
25
|
(0, tests_1.EsAggregateStoreSuite)(makeAggregateStore);
|
|
26
|
+
it("should support saveAll with transactions", async () => {
|
|
27
|
+
class MockEventBus {
|
|
28
|
+
off() {
|
|
29
|
+
throw new Error("Method not implemented.");
|
|
30
|
+
}
|
|
31
|
+
on() {
|
|
32
|
+
throw new Error("Method not implemented.");
|
|
33
|
+
}
|
|
34
|
+
events = [];
|
|
35
|
+
publish(event) {
|
|
36
|
+
this.events.push(event);
|
|
37
|
+
return Promise.resolve();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
class AccountOpened extends (0, core_1.EsEvent)("AccountOpened", {
|
|
41
|
+
id: String,
|
|
42
|
+
index: Number,
|
|
43
|
+
registryId: String,
|
|
44
|
+
}) {
|
|
45
|
+
}
|
|
46
|
+
class Account extends (0, core_1.EsAggregate)("Account", {
|
|
47
|
+
events: [AccountOpened],
|
|
48
|
+
state: {
|
|
49
|
+
id: String,
|
|
50
|
+
index: Number,
|
|
51
|
+
balance: Number,
|
|
52
|
+
registryId: String,
|
|
53
|
+
},
|
|
54
|
+
}) {
|
|
55
|
+
static onAccountOpened(event) {
|
|
56
|
+
return new Account({
|
|
57
|
+
id: event.payload.id,
|
|
58
|
+
index: event.payload.index,
|
|
59
|
+
balance: 0,
|
|
60
|
+
registryId: event.payload.registryId,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
static open(registryId, index) {
|
|
64
|
+
return this.new(AccountOpened.new({
|
|
65
|
+
id: Math.random().toString(36).slice(2),
|
|
66
|
+
index,
|
|
67
|
+
registryId,
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
__decorate([
|
|
72
|
+
(0, core_1.On)(AccountOpened)
|
|
73
|
+
], Account, "onAccountOpened", null);
|
|
74
|
+
class AccountRegistry extends (0, dist_1.Shape)({
|
|
75
|
+
id: String,
|
|
76
|
+
index: Number,
|
|
77
|
+
}) {
|
|
78
|
+
increment(shouldFailInMiddle = false) {
|
|
79
|
+
this.index++;
|
|
80
|
+
if (this.index > 10 && shouldFailInMiddle) {
|
|
81
|
+
throw new Error("Too many accounts");
|
|
82
|
+
}
|
|
83
|
+
return this.index;
|
|
84
|
+
}
|
|
85
|
+
static new() {
|
|
86
|
+
return new AccountRegistry({
|
|
87
|
+
id: Math.random().toString().slice(2),
|
|
88
|
+
index: 0,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const registryStore = new store_inmemory_1.InMemoryStore("account-registry", database, new ((0, core_1.AutoSerializer)(AccountRegistry, 1))());
|
|
93
|
+
const accountStore = new ((0, in_memory_es_aggregate_store_1.MakeInMemoryEsAggregateStore)(Account))(eventStore, transaction, new core_1.SerializerRegistry().add(AccountOpened, new ((0, core_1.AutoSerializer)(AccountOpened, 1))()), new in_memory_snapshotter_1.InMemorySnapshotter(Account.name, database, new ((0, core_1.AutoSerializer)(Account, 1))()));
|
|
94
|
+
const eventBus = new MockEventBus();
|
|
95
|
+
accountStore.publishEventsTo(eventBus);
|
|
96
|
+
const registry = AccountRegistry.new();
|
|
97
|
+
await registryStore.save(registry);
|
|
98
|
+
let willFailForAttempt = 3;
|
|
99
|
+
await transaction.perform(async (trx) => {
|
|
100
|
+
willFailForAttempt--;
|
|
101
|
+
const reg = await registryStore.load(registry.id, trx);
|
|
102
|
+
const accounts = [...Array(30).keys()].map((i) => Account.open(registry.id, reg.increment(willFailForAttempt === 0)));
|
|
103
|
+
await accountStore.saveAll(accounts, trx);
|
|
104
|
+
await registryStore.save(reg, trx);
|
|
105
|
+
});
|
|
106
|
+
const freshRegistry = await registryStore.load(registry.id);
|
|
107
|
+
expect(freshRegistry.index).toBe(30);
|
|
108
|
+
const result = await accountStore.snapshotter?.filter((a) => a.registryId === registry.id);
|
|
109
|
+
const documents = result;
|
|
110
|
+
expect(documents?.length).toBe(30);
|
|
111
|
+
const indices = documents
|
|
112
|
+
?.map((doc) => Number(doc.index))
|
|
113
|
+
.sort((a, b) => a - b);
|
|
114
|
+
expect(indices).toEqual([
|
|
115
|
+
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
|
|
116
|
+
22, 23, 24, 25, 26, 27, 28, 29, 30,
|
|
117
|
+
]);
|
|
118
|
+
});
|
|
17
119
|
});
|
|
18
120
|
//# sourceMappingURL=in-memory.event-store.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.event-store.spec.js","sourceRoot":"","sources":["../../src/event-store/in-memory.event-store.spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"in-memory.event-store.spec.js","sourceRoot":"","sources":["../../src/event-store/in-memory.event-store.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { HasTrait } from "@ddd-ts/traits";
|
|
2
|
-
import {
|
|
2
|
+
import { AggregateStreamId, EventSourced, type IEsAggregateStore, type IEventBus, type Identifiable, type ISerializer } from "@ddd-ts/core";
|
|
3
3
|
import type { InMemoryEventStore } from "./event-store/in-memory.event-store";
|
|
4
4
|
import type { InMemorySnapshotter } from "./in-memory.snapshotter";
|
|
5
|
+
import type { InMemoryTransaction, InMemoryTransactionPerformer } from "@ddd-ts/store-inmemory";
|
|
5
6
|
export declare const MakeInMemoryEsAggregateStore: <A extends Omit<(abstract new (props: {}) => {
|
|
6
7
|
acknowledgedRevision: number;
|
|
7
8
|
changes: import("@ddd-ts/core").IEsEvent<string, any>[];
|
|
8
|
-
getAggregateStreamId(this: any): any;
|
|
9
9
|
load(fact: import("@ddd-ts/core").IEsEvent<string, any>): void;
|
|
10
10
|
apply(change: import("@ddd-ts/core").IEsEvent<string, any>): void;
|
|
11
11
|
play(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
|
|
@@ -13,14 +13,12 @@ export declare const MakeInMemoryEsAggregateStore: <A extends Omit<(abstract new
|
|
|
13
13
|
acknowledgeChanges(): void;
|
|
14
14
|
}) & {
|
|
15
15
|
events: import("@ddd-ts/types").Constructor<import("@ddd-ts/core").IEsEvent<string, any>>[];
|
|
16
|
-
getAggregateStreamId(id: import("@ddd-ts/core").Identifier): AggregateStreamId;
|
|
17
16
|
instanciate<TH extends import("@ddd-ts/types").Constructor>(this: TH, event: import("@ddd-ts/core").IEsEvent<string, any>): InstanceType<TH>;
|
|
18
17
|
loadFirst<TH_1 extends import("@ddd-ts/types").Constructor>(this: TH_1, event: import("@ddd-ts/core").IEsEvent<string, any>): InstanceType<TH_1>;
|
|
19
18
|
"new"<TH_2 extends import("@ddd-ts/types").Constructor>(this: TH_2, event: import("@ddd-ts/core").IEsEvent<string, any>): InstanceType<TH_2>;
|
|
20
19
|
}, ""> & (new (...args: any[]) => {
|
|
21
20
|
acknowledgedRevision: number;
|
|
22
21
|
changes: import("@ddd-ts/core").IEsEvent<string, any>[];
|
|
23
|
-
getAggregateStreamId(this: any): any;
|
|
24
22
|
load(fact: import("@ddd-ts/core").IEsEvent<string, any>): void;
|
|
25
23
|
apply(change: import("@ddd-ts/core").IEsEvent<string, any>): void;
|
|
26
24
|
play(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
|
|
@@ -31,28 +29,32 @@ export declare const MakeInMemoryEsAggregateStore: <A extends Omit<(abstract new
|
|
|
31
29
|
}, ""> & (new (...args: any[]) => {
|
|
32
30
|
id: import("@ddd-ts/core").Identifier;
|
|
33
31
|
})>(AGGREGATE: A) => {
|
|
34
|
-
new (eventStore: InMemoryEventStore, serializer: ISerializer<InstanceType<A>["changes"][number]>, snapshotter?: InMemorySnapshotter<InstanceType<A>> | undefined): {
|
|
32
|
+
new (eventStore: InMemoryEventStore, transaction: InMemoryTransactionPerformer, serializer: ISerializer<InstanceType<A>["changes"][number]>, snapshotter?: InMemorySnapshotter<InstanceType<A>> | undefined): {
|
|
35
33
|
loadFirst(event: InstanceType<A>["changes"][number]): InstanceType<A>;
|
|
36
34
|
getAggregateStreamId(id: InstanceType<A>["id"]): AggregateStreamId;
|
|
37
35
|
readonly eventStore: InMemoryEventStore;
|
|
36
|
+
readonly transaction: InMemoryTransactionPerformer;
|
|
38
37
|
readonly serializer: ISerializer<InstanceType<A>["changes"][number]>;
|
|
39
38
|
readonly snapshotter?: InMemorySnapshotter<InstanceType<A>> | undefined;
|
|
40
39
|
_publishEventsTo?: IEventBus;
|
|
41
40
|
publishEventsTo(eventBus: IEventBus): void;
|
|
42
|
-
load(id: InstanceType<A>["id"]): Promise<
|
|
43
|
-
|
|
41
|
+
load(id: InstanceType<A>["id"]): Promise<InstanceType<A> | undefined>;
|
|
42
|
+
saveAll(aggregates: InstanceType<A>[], trx?: InMemoryTransaction, attempts?: number): Promise<void>;
|
|
43
|
+
save(aggregate: InstanceType<A>, trx?: InMemoryTransaction, attempts?: number): Promise<void>;
|
|
44
44
|
};
|
|
45
45
|
};
|
|
46
46
|
export declare abstract class InMemoryEsAggregateStore<A extends HasTrait<typeof EventSourced> & HasTrait<typeof Identifiable>> implements IEsAggregateStore<InstanceType<A>> {
|
|
47
47
|
readonly eventStore: InMemoryEventStore;
|
|
48
|
+
readonly transaction: InMemoryTransactionPerformer;
|
|
48
49
|
readonly serializer: ISerializer<InstanceType<A>["changes"][number]>;
|
|
49
50
|
readonly snapshotter?: InMemorySnapshotter<InstanceType<A>> | undefined;
|
|
50
|
-
constructor(eventStore: InMemoryEventStore, serializer: ISerializer<InstanceType<A>["changes"][number]>, snapshotter?: InMemorySnapshotter<InstanceType<A>> | undefined);
|
|
51
|
+
constructor(eventStore: InMemoryEventStore, transaction: InMemoryTransactionPerformer, serializer: ISerializer<InstanceType<A>["changes"][number]>, snapshotter?: InMemorySnapshotter<InstanceType<A>> | undefined);
|
|
51
52
|
abstract getAggregateStreamId(id: InstanceType<A>["id"]): AggregateStreamId;
|
|
52
53
|
abstract loadFirst(event: InstanceType<A>["changes"][number]): InstanceType<A>;
|
|
53
54
|
_publishEventsTo?: IEventBus;
|
|
54
55
|
publishEventsTo(eventBus: IEventBus): void;
|
|
55
|
-
load(id: InstanceType<A>["id"]): Promise<
|
|
56
|
-
|
|
56
|
+
load(id: InstanceType<A>["id"]): Promise<InstanceType<A> | undefined>;
|
|
57
|
+
saveAll(aggregates: InstanceType<A>[], trx?: InMemoryTransaction, attempts?: number): Promise<void>;
|
|
58
|
+
save(aggregate: InstanceType<A>, trx?: InMemoryTransaction, attempts?: number): Promise<void>;
|
|
57
59
|
}
|
|
58
60
|
//# sourceMappingURL=in-memory.es-aggregate-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.es-aggregate-store.d.ts","sourceRoot":"","sources":["../src/in-memory.es-aggregate-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"in-memory.es-aggregate-store.d.ts","sourceRoot":"","sources":["../src/in-memory.es-aggregate-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,iBAAiB,EAEjB,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EACV,mBAAmB,EACnB,4BAA4B,EAC7B,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,4BAA4B,GAUC,CAAC;;;;;;;;;;;;;wBA6GrC,KAAF;;;;;;;;;;wBAAE,KAAF;;eA7GsC,CAAC,AAP7B;qBAqBkB,kBAAkB,eACjB,4BAA4B;yBAnBxC,YAAY,CAIS,CAAC,AAJR,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,CAI5B,CAAC,AAJ6B,CAAC;iCAI5C,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,iBAAiB;6BActC,kBAAkB;8BACjB,4BAA4B;;;2BAUxC,SAAS;kCACF,SAAS;;qDAsC3B,mBAAmB,sBAExB,OAAO,CAAC,IAAI,CAAC;+CAQR,mBAAmB,sBAExB,OAAO,CAAC,IAAI,CAAC;;CArEjB,CAAC;AAEF,8BAAsB,wBAAwB,CAC5C,CAAC,SAAS,QAAQ,CAAC,OAAO,YAAY,CAAC,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,CACvE,YAAW,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;aAG3B,UAAU,EAAE,kBAAkB;aAC9B,WAAW,EAAE,4BAA4B;aACzC,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;aAC3D,WAAW,CAAC,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAHlD,UAAU,EAAE,kBAAkB,EAC9B,WAAW,EAAE,4BAA4B,EACzC,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,EAC3D,WAAW,CAAC,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAA;IAGpE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,iBAAiB;IAC3E,QAAQ,CAAC,SAAS,CAChB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GACxC,YAAY,CAAC,CAAC,CAAC;IAElB,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,eAAe,CAAC,QAAQ,EAAE,SAAS;IAI7B,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAgC9B,OAAO,CACX,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAC7B,GAAG,CAAC,EAAE,mBAAmB,EACzB,QAAQ,SAAK,GACZ,OAAO,CAAC,IAAI,CAAC;IAMV,IAAI,CACR,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,EAC1B,GAAG,CAAC,EAAE,mBAAmB,EACzB,QAAQ,SAAK,GACZ,OAAO,CAAC,IAAI,CAAC;CAuCjB"}
|
|
@@ -8,17 +8,22 @@ const MakeInMemoryEsAggregateStore = (AGGREGATE) => {
|
|
|
8
8
|
return AGGREGATE.loadFirst(event);
|
|
9
9
|
}
|
|
10
10
|
getAggregateStreamId(id) {
|
|
11
|
-
return
|
|
11
|
+
return new core_1.AggregateStreamId({
|
|
12
|
+
aggregate: AGGREGATE.name,
|
|
13
|
+
id: id.toString(),
|
|
14
|
+
});
|
|
12
15
|
}
|
|
13
16
|
};
|
|
14
17
|
};
|
|
15
18
|
exports.MakeInMemoryEsAggregateStore = MakeInMemoryEsAggregateStore;
|
|
16
19
|
class InMemoryEsAggregateStore {
|
|
17
20
|
eventStore;
|
|
21
|
+
transaction;
|
|
18
22
|
serializer;
|
|
19
23
|
snapshotter;
|
|
20
|
-
constructor(eventStore, serializer, snapshotter) {
|
|
24
|
+
constructor(eventStore, transaction, serializer, snapshotter) {
|
|
21
25
|
this.eventStore = eventStore;
|
|
26
|
+
this.transaction = transaction;
|
|
22
27
|
this.serializer = serializer;
|
|
23
28
|
this.snapshotter = snapshotter;
|
|
24
29
|
}
|
|
@@ -49,17 +54,19 @@ class InMemoryEsAggregateStore {
|
|
|
49
54
|
}
|
|
50
55
|
return instance;
|
|
51
56
|
}
|
|
52
|
-
async
|
|
57
|
+
async saveAll(aggregates, trx, attempts = 10) {
|
|
58
|
+
for (const aggregate of aggregates) {
|
|
59
|
+
await this.save(aggregate, trx, attempts);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async save(aggregate, trx, attempts = 10) {
|
|
53
63
|
const streamId = this.getAggregateStreamId(aggregate.id);
|
|
54
64
|
const changes = [...aggregate.changes];
|
|
55
65
|
const serialized = await Promise.all(changes.map((event) => this.serializer.serialize(event)));
|
|
56
66
|
try {
|
|
57
|
-
await this.eventStore.append(streamId, serialized, aggregate.acknowledgedRevision);
|
|
67
|
+
await this.eventStore.append(streamId, serialized, aggregate.acknowledgedRevision, trx);
|
|
58
68
|
aggregate.acknowledgeChanges();
|
|
59
69
|
await this.snapshotter?.save(aggregate);
|
|
60
|
-
for (const event of changes) {
|
|
61
|
-
await this._publishEventsTo?.publish(event);
|
|
62
|
-
}
|
|
63
70
|
}
|
|
64
71
|
catch (error) {
|
|
65
72
|
if (error instanceof core_1.ConcurrencyError && attempts > 0) {
|
|
@@ -70,10 +77,13 @@ class InMemoryEsAggregateStore {
|
|
|
70
77
|
for (const change of changes) {
|
|
71
78
|
pristine.apply(change);
|
|
72
79
|
}
|
|
73
|
-
return await this.save(pristine, attempts - 1);
|
|
80
|
+
return await this.save(pristine, trx, attempts - 1);
|
|
74
81
|
}
|
|
75
82
|
throw error;
|
|
76
83
|
}
|
|
84
|
+
for (const event of changes) {
|
|
85
|
+
await this._publishEventsTo?.publish(event);
|
|
86
|
+
}
|
|
77
87
|
}
|
|
78
88
|
}
|
|
79
89
|
exports.InMemoryEsAggregateStore = InMemoryEsAggregateStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.es-aggregate-store.js","sourceRoot":"","sources":["../src/in-memory.es-aggregate-store.ts"],"names":[],"mappings":";;;AACA,uCAQsB;
|
|
1
|
+
{"version":3,"file":"in-memory.es-aggregate-store.js","sourceRoot":"","sources":["../src/in-memory.es-aggregate-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import { type IEsAggregateStore, type IEventSourced, type IIdentifiable, type ISerializer } from "@ddd-ts/core";
|
|
2
|
-
import { InMemoryDatabase } from "@ddd-ts/store-inmemory";
|
|
3
|
-
export declare class InMemorySnapshotter<A extends IEventSourced & IIdentifiable> implements IEsAggregateStore<A> {
|
|
4
|
-
|
|
5
|
-
readonly serializer: ISerializer<A>;
|
|
6
|
-
constructor(db: InMemoryDatabase, serializer: ISerializer<A>);
|
|
7
|
-
load(id: A["id"]): Promise<any>;
|
|
8
|
-
save(aggregate: A): Promise<void>;
|
|
2
|
+
import { InMemoryDatabase, InMemoryStore } from "@ddd-ts/store-inmemory";
|
|
3
|
+
export declare class InMemorySnapshotter<A extends IEventSourced & IIdentifiable> extends InMemoryStore<A> implements IEsAggregateStore<A> {
|
|
4
|
+
constructor(aggregate: string, db: InMemoryDatabase, serializer: ISerializer<A>);
|
|
9
5
|
}
|
|
10
6
|
//# sourceMappingURL=in-memory.snapshotter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.snapshotter.d.ts","sourceRoot":"","sources":["../src/in-memory.snapshotter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"in-memory.snapshotter.d.ts","sourceRoot":"","sources":["../src/in-memory.snapshotter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEzE,qBAAa,mBAAmB,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,CACtE,SAAQ,aAAa,CAAC,CAAC,CACvB,YAAW,iBAAiB,CAAC,CAAC,CAAC;gBAG7B,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,gBAAgB,EACpB,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;CAkB7B"}
|
|
@@ -1,27 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.InMemorySnapshotter = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
serializer
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
this.db.save("snapshots", aggregate.id.toString(), {
|
|
22
|
-
id: aggregate.id.toString(),
|
|
23
|
-
revision: Number(aggregate.acknowledgedRevision),
|
|
24
|
-
serialized: await this.serializer.serialize(aggregate),
|
|
4
|
+
const store_inmemory_1 = require("@ddd-ts/store-inmemory");
|
|
5
|
+
class InMemorySnapshotter extends store_inmemory_1.InMemoryStore {
|
|
6
|
+
constructor(aggregate, db, serializer) {
|
|
7
|
+
// super(db, 'snapshots')
|
|
8
|
+
super(`snapshots-${aggregate}`, db, {
|
|
9
|
+
deserialize: async (serialized) => {
|
|
10
|
+
const { revision, ...content } = serialized;
|
|
11
|
+
const instance = await serializer.deserialize(content);
|
|
12
|
+
instance.acknowledgedRevision = Number(revision);
|
|
13
|
+
return instance;
|
|
14
|
+
},
|
|
15
|
+
serialize: async (instance) => {
|
|
16
|
+
return {
|
|
17
|
+
revision: instance.acknowledgedRevision,
|
|
18
|
+
...(await serializer.serialize(instance)),
|
|
19
|
+
};
|
|
20
|
+
},
|
|
25
21
|
});
|
|
26
22
|
}
|
|
27
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.snapshotter.js","sourceRoot":"","sources":["../src/in-memory.snapshotter.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"in-memory.snapshotter.js","sourceRoot":"","sources":["../src/in-memory.snapshotter.ts"],"names":[],"mappings":";;;AAOA,2DAAyE;AAEzE,MAAa,mBACX,SAAQ,8BAAgB;IAGxB,YACE,SAAiB,EACjB,EAAoB,EACpB,UAA0B;QAE1B,yBAAyB;QACzB,KAAK,CAAC,aAAa,SAAS,EAAE,EAAE,EAAE,EAAE;YAClC,WAAW,EAAE,KAAK,EAAE,UAAe,EAAE,EAAE;gBACrC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,GAAG,UAAU,CAAC;gBAC5C,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACvD,QAAQ,CAAC,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACjD,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,SAAS,EAAE,KAAK,EAAE,QAAW,EAAE,EAAE;gBAC/B,OAAO;oBACL,QAAQ,EAAE,QAAQ,CAAC,oBAAoB;oBACvC,GAAG,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;iBAC1C,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAzBD,kDAyBC"}
|
package/dist/test/bank.spec.js
CHANGED
|
@@ -9,14 +9,15 @@ const in_memory_es_aggregate_store_1 = require("../in-memory.es-aggregate-store"
|
|
|
9
9
|
describe("EventSourcingInMemory", () => {
|
|
10
10
|
const es = new __1.InMemoryEventStore();
|
|
11
11
|
const database = new store_inmemory_1.InMemoryDatabase();
|
|
12
|
+
const transaction = new store_inmemory_1.InMemoryTransactionPerformer(database);
|
|
12
13
|
const eventBus = new core_1.DetachedEventBus();
|
|
13
14
|
(0, tests_1.BankSuite)(eventBus, (serializer, name) => {
|
|
14
15
|
const store = new store_inmemory_1.InMemoryStore(name, database, serializer);
|
|
15
16
|
return store;
|
|
16
17
|
}, (AGGREGATE, serializer, eventSerializer) => {
|
|
17
|
-
const snapshotter = new in_memory_snapshotter_1.InMemorySnapshotter(database, serializer);
|
|
18
|
+
const snapshotter = new in_memory_snapshotter_1.InMemorySnapshotter(AGGREGATE.name, database, serializer);
|
|
18
19
|
const Store = (0, in_memory_es_aggregate_store_1.MakeInMemoryEsAggregateStore)(AGGREGATE);
|
|
19
|
-
const store = new Store(es, eventSerializer, snapshotter);
|
|
20
|
+
const store = new Store(es, transaction, eventSerializer, snapshotter);
|
|
20
21
|
store.publishEventsTo(eventBus);
|
|
21
22
|
return store;
|
|
22
23
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bank.spec.js","sourceRoot":"","sources":["../../src/test/bank.spec.ts"],"names":[],"mappings":";;AAAA,uCAAgD;AAChD,
|
|
1
|
+
{"version":3,"file":"bank.spec.js","sourceRoot":"","sources":["../../src/test/bank.spec.ts"],"names":[],"mappings":";;AAAA,uCAAgD;AAChD,2DAIgC;AAChC,yCAA0C;AAC1C,0BAAwC;AACxC,oEAA+D;AAC/D,kFAA+E;AAE/E,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,MAAM,EAAE,GAAG,IAAI,sBAAkB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,iCAAgB,EAAE,CAAC;IACxC,MAAM,WAAW,GAAG,IAAI,6CAA4B,CAAC,QAAQ,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,IAAI,uBAAgB,EAAE,CAAC;IAExC,IAAA,iBAAS,EACP,QAAQ,EACR,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,IAAI,8BAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAQ,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC,EACD,CAAC,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE;QACzC,MAAM,WAAW,GAAG,IAAI,2CAAmB,CACzC,SAAS,CAAC,IAAI,EACd,QAAQ,EACR,UAAU,CACX,CAAC;QACF,MAAM,KAAK,GAAG,IAAA,2DAA4B,EAAC,SAAS,CAAC,CAAC;QAEtD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;QACvE,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ddd-ts/event-sourcing-inmemory",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.14",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"license": "MIT",
|
|
@@ -9,14 +9,14 @@
|
|
|
9
9
|
"build": "tsc"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@ddd-ts/core": "0.0.
|
|
13
|
-
"@ddd-ts/store-inmemory": "0.0.
|
|
14
|
-
"@ddd-ts/types": "0.0.
|
|
12
|
+
"@ddd-ts/core": "0.0.14",
|
|
13
|
+
"@ddd-ts/store-inmemory": "0.0.14",
|
|
14
|
+
"@ddd-ts/types": "0.0.14"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
|
-
"@ddd-ts/tests": "0.0.
|
|
18
|
-
"@ddd-ts/tools": "0.0.
|
|
19
|
-
"@ddd-ts/traits": "0.0.
|
|
17
|
+
"@ddd-ts/tests": "0.0.14",
|
|
18
|
+
"@ddd-ts/tools": "0.0.14",
|
|
19
|
+
"@ddd-ts/traits": "0.0.14",
|
|
20
20
|
"@types/jest": "^29.5.1",
|
|
21
21
|
"@types/node": "^20.12.4"
|
|
22
22
|
}
|