@ddd-ts/event-sourcing-inmemory 0.0.26 → 0.0.28
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/in-memory.event-lake.aggregate-store.d.ts +14 -0
- package/dist/in-memory.event-lake.aggregate-store.d.ts.map +1 -0
- package/dist/in-memory.event-lake.aggregate-store.js +35 -0
- package/dist/in-memory.event-lake.aggregate-store.js.map +1 -0
- package/dist/in-memory.event-lake.aggregate-store.spec.d.ts +2 -0
- package/dist/in-memory.event-lake.aggregate-store.spec.d.ts.map +1 -0
- package/dist/in-memory.event-lake.aggregate-store.spec.js +21 -0
- package/dist/in-memory.event-lake.aggregate-store.spec.js.map +1 -0
- package/dist/in-memory.event-lake.storage-layer.d.ts +9 -0
- package/dist/in-memory.event-lake.storage-layer.d.ts.map +1 -0
- package/dist/in-memory.event-lake.storage-layer.js +51 -0
- package/dist/in-memory.event-lake.storage-layer.js.map +1 -0
- package/dist/in-memory.event-lake.store.d.ts +6 -0
- package/dist/in-memory.event-lake.store.d.ts.map +1 -0
- package/dist/in-memory.event-lake.store.js +12 -0
- package/dist/in-memory.event-lake.store.js.map +1 -0
- package/dist/in-memory.event-lake.store.spec.d.ts +2 -0
- package/dist/in-memory.event-lake.store.spec.d.ts.map +1 -0
- package/dist/in-memory.event-lake.store.spec.js +14 -0
- package/dist/in-memory.event-lake.store.spec.js.map +1 -0
- package/dist/in-memory.event-stream.aggregate-store.d.ts +30 -0
- package/dist/in-memory.event-stream.aggregate-store.d.ts.map +1 -0
- package/dist/in-memory.event-stream.aggregate-store.js +40 -0
- package/dist/in-memory.event-stream.aggregate-store.js.map +1 -0
- package/dist/in-memory.event-stream.aggregate-store.spec.d.ts +2 -0
- package/dist/in-memory.event-stream.aggregate-store.spec.d.ts.map +1 -0
- package/dist/in-memory.event-stream.aggregate-store.spec.js +17 -0
- package/dist/in-memory.event-stream.aggregate-store.spec.js.map +1 -0
- package/dist/in-memory.event-stream.storage-layer.d.ts +10 -0
- package/dist/in-memory.event-stream.storage-layer.d.ts.map +1 -0
- package/dist/in-memory.event-stream.storage-layer.js +37 -0
- package/dist/in-memory.event-stream.storage-layer.js.map +1 -0
- package/dist/in-memory.event-stream.store.d.ts +6 -0
- package/dist/in-memory.event-stream.store.d.ts.map +1 -0
- package/dist/in-memory.event-stream.store.js +12 -0
- package/dist/in-memory.event-stream.store.js.map +1 -0
- package/dist/in-memory.event-stream.store.spec.d.ts +2 -0
- package/dist/in-memory.event-stream.store.spec.d.ts.map +1 -0
- package/dist/in-memory.event-stream.store.spec.js +14 -0
- package/dist/in-memory.event-stream.store.spec.js.map +1 -0
- package/dist/in-memory.projected-stream.reader.d.ts +6 -0
- package/dist/in-memory.projected-stream.reader.d.ts.map +1 -0
- package/dist/in-memory.projected-stream.reader.js +12 -0
- package/dist/in-memory.projected-stream.reader.js.map +1 -0
- package/dist/in-memory.projected-stream.reader.spec.d.ts +2 -0
- package/dist/in-memory.projected-stream.reader.spec.d.ts.map +1 -0
- package/dist/in-memory.projected-stream.reader.spec.js +17 -0
- package/dist/in-memory.projected-stream.reader.spec.js.map +1 -0
- package/dist/in-memory.projected-stream.storage-layer.d.ts +24 -0
- package/dist/in-memory.projected-stream.storage-layer.d.ts.map +1 -0
- package/dist/in-memory.projected-stream.storage-layer.js +87 -0
- package/dist/in-memory.projected-stream.storage-layer.js.map +1 -0
- package/dist/in-memory.snapshotter.d.ts.map +1 -1
- package/dist/in-memory.snapshotter.js +20 -15
- package/dist/in-memory.snapshotter.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -7
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
- package/dist/event-store/in-memory.event-store.d.ts +0 -15
- package/dist/event-store/in-memory.event-store.d.ts.map +0 -1
- package/dist/event-store/in-memory.event-store.js +0 -44
- package/dist/event-store/in-memory.event-store.js.map +0 -1
- package/dist/event-store/in-memory.event-store.spec.d.ts +0 -2
- package/dist/event-store/in-memory.event-store.spec.d.ts.map +0 -1
- package/dist/event-store/in-memory.event-store.spec.js +0 -127
- package/dist/event-store/in-memory.event-store.spec.js.map +0 -1
- package/dist/event-store/projected-stream.d.ts +0 -19
- package/dist/event-store/projected-stream.d.ts.map +0 -1
- package/dist/event-store/projected-stream.js +0 -53
- package/dist/event-store/projected-stream.js.map +0 -1
- package/dist/event-store/stream.d.ts +0 -9
- package/dist/event-store/stream.d.ts.map +0 -1
- package/dist/event-store/stream.js +0 -33
- package/dist/event-store/stream.js.map +0 -1
- package/dist/in-memory.checkpoint.d.ts +0 -2
- package/dist/in-memory.checkpoint.d.ts.map +0 -1
- package/dist/in-memory.checkpoint.js +0 -28
- package/dist/in-memory.checkpoint.js.map +0 -1
- package/dist/in-memory.es-aggregate-store.d.ts +0 -35
- package/dist/in-memory.es-aggregate-store.d.ts.map +0 -1
- package/dist/in-memory.es-aggregate-store.js +0 -90
- package/dist/in-memory.es-aggregate-store.js.map +0 -1
- package/dist/test/bank.spec.d.ts +0 -2
- package/dist/test/bank.spec.d.ts.map +0 -1
- package/dist/test/bank.spec.js +0 -25
- package/dist/test/bank.spec.js.map +0 -1
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InMemoryProjectedStreamStorageLayer = exports.InMemoryLakeSourceFilter = exports.InMemoryStreamSourceFilter = void 0;
|
|
4
|
+
const core_1 = require("@ddd-ts/core");
|
|
5
|
+
class InMemoryStreamSourceFilter {
|
|
6
|
+
database;
|
|
7
|
+
constructor(database) {
|
|
8
|
+
this.database = database;
|
|
9
|
+
}
|
|
10
|
+
*all(source, shard) {
|
|
11
|
+
const cols = [...this.database.storage.collections.keys()];
|
|
12
|
+
const streams = cols.filter((it) => it.startsWith(source.aggregateType));
|
|
13
|
+
for (const stream of streams) {
|
|
14
|
+
yield* this.database
|
|
15
|
+
.loadAll(stream)
|
|
16
|
+
.filter((event) => {
|
|
17
|
+
if (!source.events.includes(event.data.data.name))
|
|
18
|
+
return false;
|
|
19
|
+
const payload = event.data.data.payload;
|
|
20
|
+
if (!payload)
|
|
21
|
+
return false;
|
|
22
|
+
return payload[source.shardKey] === shard;
|
|
23
|
+
})
|
|
24
|
+
.map((event) => event.data);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.InMemoryStreamSourceFilter = InMemoryStreamSourceFilter;
|
|
29
|
+
class InMemoryLakeSourceFilter {
|
|
30
|
+
database;
|
|
31
|
+
constructor(database) {
|
|
32
|
+
this.database = database;
|
|
33
|
+
}
|
|
34
|
+
*all(source, shard) {
|
|
35
|
+
const lakeId = core_1.LakeId.from(source.shardType, shard);
|
|
36
|
+
yield* this.database
|
|
37
|
+
.loadAll(lakeId.serialize())
|
|
38
|
+
.filter((event) => {
|
|
39
|
+
if (!source.events.includes(event.data.data.name))
|
|
40
|
+
return false;
|
|
41
|
+
const payload = event.data.data.payload;
|
|
42
|
+
if (!payload)
|
|
43
|
+
return false;
|
|
44
|
+
return payload[source.shardKey] === shard;
|
|
45
|
+
})
|
|
46
|
+
.map((event) => event.data);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.InMemoryLakeSourceFilter = InMemoryLakeSourceFilter;
|
|
50
|
+
class InMemoryProjectedStreamStorageLayer {
|
|
51
|
+
database;
|
|
52
|
+
constructor(database) {
|
|
53
|
+
this.database = database;
|
|
54
|
+
}
|
|
55
|
+
async *read(projectedStream, shard, startAfter, endAt) {
|
|
56
|
+
const sources = projectedStream.sources.map((source) => {
|
|
57
|
+
if (source instanceof core_1.StreamSource) {
|
|
58
|
+
return new InMemoryStreamSourceFilter(this.database).all(source, shard);
|
|
59
|
+
}
|
|
60
|
+
return new InMemoryLakeSourceFilter(this.database).all(source, shard);
|
|
61
|
+
});
|
|
62
|
+
const all = sources
|
|
63
|
+
.flatMap((source) => [...source])
|
|
64
|
+
.sort((a, b) => a.savedAt === b.savedAt
|
|
65
|
+
? a.data.revision - b.data.revision
|
|
66
|
+
: a.savedAt > b.savedAt
|
|
67
|
+
? 1
|
|
68
|
+
: -1)
|
|
69
|
+
.map((event) => event.data);
|
|
70
|
+
let started = !startAfter;
|
|
71
|
+
for (const event of all) {
|
|
72
|
+
if (startAfter && event.ref === startAfter.serialize()) {
|
|
73
|
+
started = true;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (endAt && event.ref === endAt.serialize()) {
|
|
77
|
+
yield event;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
if (started) {
|
|
81
|
+
yield event;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.InMemoryProjectedStreamStorageLayer = InMemoryProjectedStreamStorageLayer;
|
|
87
|
+
//# sourceMappingURL=in-memory.projected-stream.storage-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory.projected-stream.storage-layer.js","sourceRoot":"","sources":["../src/in-memory.projected-stream.storage-layer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n EventReference,\n LakeId,\n LakeSource,\n ProjectedStream,\n ProjectedStreamStorageLayer,\n StreamSource,\n} from \"@ddd-ts/core\";\nimport { InMemoryDatabase } from \"@ddd-ts/store-inmemory\";\n\nexport class InMemoryStreamSourceFilter {\n constructor(private readonly database: InMemoryDatabase) {}\n\n *all(source: StreamSource, shard: string) {\n const cols = [...this.database.storage.collections.keys()];\n const streams = cols.filter((it) => it.startsWith(source.aggregateType));\n for (const stream of streams) {\n yield* this.database\n .loadAll(stream)\n .filter((event) => {\n if (!source.events.includes(event.data.data.name)) return false;\n const payload = event.data.data.payload;\n if (!payload) return false;\n return payload[source.shardKey] === shard;\n })\n .map((event) => event.data);\n }\n }\n}\n\nexport class InMemoryLakeSourceFilter {\n constructor(private readonly database: InMemoryDatabase) {}\n\n *all(source: LakeSource, shard: string) {\n const lakeId = LakeId.from(source.shardType, shard);\n yield* this.database\n .loadAll(lakeId.serialize())\n .filter((event) => {\n if (!source.events.includes(event.data.data.name)) return false;\n const payload = event.data.data.payload;\n if (!payload) return false;\n return payload[source.shardKey] === shard;\n })\n .map((event) => event.data);\n }\n}\n\nexport class InMemoryProjectedStreamStorageLayer\n implements ProjectedStreamStorageLayer\n{\n constructor(private readonly database: InMemoryDatabase) {}\n\n async *read(\n projectedStream: ProjectedStream,\n shard: string,\n startAfter?: EventReference,\n endAt?: EventReference,\n ) {\n const sources = projectedStream.sources.map((source) => {\n if (source instanceof StreamSource) {\n return new InMemoryStreamSourceFilter(this.database).all(source, shard);\n }\n return new InMemoryLakeSourceFilter(this.database).all(source, shard);\n });\n\n const all = sources\n .flatMap((source) => [...source])\n .sort((a, b) =>\n a.savedAt === b.savedAt\n ? a.data.revision - b.data.revision\n : a.savedAt > b.savedAt\n ? 1\n : -1,\n )\n .map((event) => event.data);\n\n let started = !startAfter;\n for (const event of all) {\n if (startAfter && event.ref === startAfter.serialize()) {\n started = true;\n continue;\n }\n if (endAt && event.ref === endAt.serialize()) {\n yield event;\n break;\n }\n if (started) {\n yield event;\n }\n }\n }\n}\n"]}
|
|
@@ -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,aAAa,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;AAqBzE,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;CAI7B"}
|
|
@@ -2,23 +2,28 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.InMemorySnapshotter = void 0;
|
|
4
4
|
const store_inmemory_1 = require("@ddd-ts/store-inmemory");
|
|
5
|
+
class SnapshotSerializer {
|
|
6
|
+
serializer;
|
|
7
|
+
constructor(serializer) {
|
|
8
|
+
this.serializer = serializer;
|
|
9
|
+
}
|
|
10
|
+
async serialize(instance) {
|
|
11
|
+
const serialized = await this.serializer.serialize(instance);
|
|
12
|
+
return {
|
|
13
|
+
...serialized,
|
|
14
|
+
revision: instance.acknowledgedRevision,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
async deserialize(serialized) {
|
|
18
|
+
const { revision, ...content } = serialized;
|
|
19
|
+
const instance = await this.serializer.deserialize(content);
|
|
20
|
+
instance.acknowledgedRevision = Number(revision);
|
|
21
|
+
return instance;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
5
24
|
class InMemorySnapshotter extends store_inmemory_1.InMemoryStore {
|
|
6
25
|
constructor(aggregate, db, serializer) {
|
|
7
|
-
|
|
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
|
-
},
|
|
21
|
-
});
|
|
26
|
+
super(`snapshots-${aggregate}`, db, new SnapshotSerializer(serializer));
|
|
22
27
|
}
|
|
23
28
|
}
|
|
24
29
|
exports.InMemorySnapshotter = InMemorySnapshotter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.snapshotter.js","sourceRoot":"","sources":["../src/in-memory.snapshotter.ts"],"names":[],"mappings":";;;AAOA,2DAAyE;AAEzE,
|
|
1
|
+
{"version":3,"file":"in-memory.snapshotter.js","sourceRoot":"","sources":["../src/in-memory.snapshotter.ts"],"names":[],"mappings":";;;AAOA,2DAAyE;AAEzE,MAAM,kBAAkB;IACO;IAA7B,YAA6B,UAA0B;QAA1B,eAAU,GAAV,UAAU,CAAgB;IAAG,CAAC;IAE3D,KAAK,CAAC,SAAS,CAAC,QAAW;QACzB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC7D,OAAO;YACL,GAAG,UAAU;YACb,QAAQ,EAAE,QAAQ,CAAC,oBAAoB;SACxC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAAe;QAC/B,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,GAAG,UAAU,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5D,QAAQ,CAAC,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,MAAa,mBACX,SAAQ,8BAAgB;IAGxB,YACE,SAAiB,EACjB,EAAoB,EACpB,UAA0B;QAE1B,KAAK,CAAC,aAAa,SAAS,EAAE,EAAE,EAAE,EAAE,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1E,CAAC;CACF;AAXD,kDAWC","sourcesContent":["import {\n type IEsAggregateStore,\n type IEventSourced,\n type IIdentifiable,\n type ISerializer,\n} from \"@ddd-ts/core\";\n\nimport { InMemoryDatabase, InMemoryStore } from \"@ddd-ts/store-inmemory\";\n\nclass SnapshotSerializer<A extends IEventSourced & IIdentifiable> {\n constructor(private readonly serializer: ISerializer<A>) {}\n\n async serialize(instance: A) {\n const serialized = await this.serializer.serialize(instance);\n return {\n ...serialized,\n revision: instance.acknowledgedRevision,\n };\n }\n\n async deserialize(serialized: any) {\n const { revision, ...content } = serialized;\n const instance = await this.serializer.deserialize(content);\n instance.acknowledgedRevision = Number(revision);\n return instance;\n }\n}\n\nexport class InMemorySnapshotter<A extends IEventSourced & IIdentifiable>\n extends InMemoryStore<A>\n implements IEsAggregateStore<A>\n{\n constructor(\n aggregate: string,\n db: InMemoryDatabase,\n serializer: ISerializer<A>,\n ) {\n super(`snapshots-${aggregate}`, db, new SnapshotSerializer(serializer));\n }\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
+
export { InMemoryEventLakeStorageLayer } from "./in-memory.event-lake.storage-layer";
|
|
2
|
+
export { InMemoryEventLakeStore } from "./in-memory.event-lake.store";
|
|
3
|
+
export { InMemoryEventStreamStorageLayer } from "./in-memory.event-stream.storage-layer";
|
|
4
|
+
export { InMemoryEventStreamStore } from "./in-memory.event-stream.store";
|
|
5
|
+
export { InMemoryEventStreamAggregateStore, MakeInMemoryEventStreamAggregateStore, } from "./in-memory.event-stream.aggregate-store";
|
|
6
|
+
export { InMemoryProjectedStreamStorageLayer, InMemoryLakeSourceFilter, InMemoryStreamSourceFilter, } from "./in-memory.projected-stream.storage-layer";
|
|
7
|
+
export { InMemoryProjectedStreamReader } from "./in-memory.projected-stream.reader";
|
|
1
8
|
export { InMemorySnapshotter } from "./in-memory.snapshotter";
|
|
2
|
-
export { InMemoryEsAggregateStore, MakeInMemoryEsAggregateStore, } from "./in-memory.es-aggregate-store";
|
|
3
|
-
export { InMemoryEventStore } from "./event-store/in-memory.event-store";
|
|
4
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,+BAA+B,EAAE,MAAM,wCAAwC,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,EACL,iCAAiC,EACjC,qCAAqC,GACtC,MAAM,0CAA0C,CAAC;AAElD,OAAO,EACL,mCAAmC,EACnC,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AAEpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.InMemorySnapshotter = exports.InMemoryProjectedStreamReader = exports.InMemoryStreamSourceFilter = exports.InMemoryLakeSourceFilter = exports.InMemoryProjectedStreamStorageLayer = exports.MakeInMemoryEventStreamAggregateStore = exports.InMemoryEventStreamAggregateStore = exports.InMemoryEventStreamStore = exports.InMemoryEventStreamStorageLayer = exports.InMemoryEventLakeStore = exports.InMemoryEventLakeStorageLayer = void 0;
|
|
4
|
+
var in_memory_event_lake_storage_layer_1 = require("./in-memory.event-lake.storage-layer");
|
|
5
|
+
Object.defineProperty(exports, "InMemoryEventLakeStorageLayer", { enumerable: true, get: function () { return in_memory_event_lake_storage_layer_1.InMemoryEventLakeStorageLayer; } });
|
|
6
|
+
var in_memory_event_lake_store_1 = require("./in-memory.event-lake.store");
|
|
7
|
+
Object.defineProperty(exports, "InMemoryEventLakeStore", { enumerable: true, get: function () { return in_memory_event_lake_store_1.InMemoryEventLakeStore; } });
|
|
8
|
+
var in_memory_event_stream_storage_layer_1 = require("./in-memory.event-stream.storage-layer");
|
|
9
|
+
Object.defineProperty(exports, "InMemoryEventStreamStorageLayer", { enumerable: true, get: function () { return in_memory_event_stream_storage_layer_1.InMemoryEventStreamStorageLayer; } });
|
|
10
|
+
var in_memory_event_stream_store_1 = require("./in-memory.event-stream.store");
|
|
11
|
+
Object.defineProperty(exports, "InMemoryEventStreamStore", { enumerable: true, get: function () { return in_memory_event_stream_store_1.InMemoryEventStreamStore; } });
|
|
12
|
+
var in_memory_event_stream_aggregate_store_1 = require("./in-memory.event-stream.aggregate-store");
|
|
13
|
+
Object.defineProperty(exports, "InMemoryEventStreamAggregateStore", { enumerable: true, get: function () { return in_memory_event_stream_aggregate_store_1.InMemoryEventStreamAggregateStore; } });
|
|
14
|
+
Object.defineProperty(exports, "MakeInMemoryEventStreamAggregateStore", { enumerable: true, get: function () { return in_memory_event_stream_aggregate_store_1.MakeInMemoryEventStreamAggregateStore; } });
|
|
15
|
+
var in_memory_projected_stream_storage_layer_1 = require("./in-memory.projected-stream.storage-layer");
|
|
16
|
+
Object.defineProperty(exports, "InMemoryProjectedStreamStorageLayer", { enumerable: true, get: function () { return in_memory_projected_stream_storage_layer_1.InMemoryProjectedStreamStorageLayer; } });
|
|
17
|
+
Object.defineProperty(exports, "InMemoryLakeSourceFilter", { enumerable: true, get: function () { return in_memory_projected_stream_storage_layer_1.InMemoryLakeSourceFilter; } });
|
|
18
|
+
Object.defineProperty(exports, "InMemoryStreamSourceFilter", { enumerable: true, get: function () { return in_memory_projected_stream_storage_layer_1.InMemoryStreamSourceFilter; } });
|
|
19
|
+
var in_memory_projected_stream_reader_1 = require("./in-memory.projected-stream.reader");
|
|
20
|
+
Object.defineProperty(exports, "InMemoryProjectedStreamReader", { enumerable: true, get: function () { return in_memory_projected_stream_reader_1.InMemoryProjectedStreamReader; } });
|
|
4
21
|
var in_memory_snapshotter_1 = require("./in-memory.snapshotter");
|
|
5
22
|
Object.defineProperty(exports, "InMemorySnapshotter", { enumerable: true, get: function () { return in_memory_snapshotter_1.InMemorySnapshotter; } });
|
|
6
|
-
var in_memory_es_aggregate_store_1 = require("./in-memory.es-aggregate-store");
|
|
7
|
-
Object.defineProperty(exports, "InMemoryEsAggregateStore", { enumerable: true, get: function () { return in_memory_es_aggregate_store_1.InMemoryEsAggregateStore; } });
|
|
8
|
-
Object.defineProperty(exports, "MakeInMemoryEsAggregateStore", { enumerable: true, get: function () { return in_memory_es_aggregate_store_1.MakeInMemoryEsAggregateStore; } });
|
|
9
|
-
var in_memory_event_store_1 = require("./event-store/in-memory.event-store");
|
|
10
|
-
Object.defineProperty(exports, "InMemoryEventStore", { enumerable: true, get: function () { return in_memory_event_store_1.InMemoryEventStore; } });
|
|
11
|
-
// export { InMemoryCheckpoint } from "./in-memory.checkpoint";
|
|
12
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2FAAqF;AAA5E,mJAAA,6BAA6B,OAAA;AACtC,2EAAsE;AAA7D,oIAAA,sBAAsB,OAAA;AAC/B,+FAAyF;AAAhF,uJAAA,+BAA+B,OAAA;AACxC,+EAA0E;AAAjE,wIAAA,wBAAwB,OAAA;AAEjC,mGAGkD;AAFhD,2JAAA,iCAAiC,OAAA;AACjC,+JAAA,qCAAqC,OAAA;AAGvC,uGAIoD;AAHlD,+JAAA,mCAAmC,OAAA;AACnC,oJAAA,wBAAwB,OAAA;AACxB,sJAAA,0BAA0B,OAAA;AAG5B,yFAAoF;AAA3E,kJAAA,6BAA6B,OAAA;AAEtC,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA","sourcesContent":["export { InMemoryEventLakeStorageLayer } from \"./in-memory.event-lake.storage-layer\";\nexport { InMemoryEventLakeStore } from \"./in-memory.event-lake.store\";\nexport { InMemoryEventStreamStorageLayer } from \"./in-memory.event-stream.storage-layer\";\nexport { InMemoryEventStreamStore } from \"./in-memory.event-stream.store\";\n\nexport {\n InMemoryEventStreamAggregateStore,\n MakeInMemoryEventStreamAggregateStore,\n} from \"./in-memory.event-stream.aggregate-store\";\n\nexport {\n InMemoryProjectedStreamStorageLayer,\n InMemoryLakeSourceFilter,\n InMemoryStreamSourceFilter,\n} from \"./in-memory.projected-stream.storage-layer\";\n\nexport { InMemoryProjectedStreamReader } from \"./in-memory.projected-stream.reader\";\n\nexport { InMemorySnapshotter } from \"./in-memory.snapshotter\";\n"]}
|
package/package.json
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ddd-ts/event-sourcing-inmemory",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.28",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"test": "jest --config node_modules/@ddd-ts/tools/jest.config.
|
|
8
|
+
"test": "jest --config node_modules/@ddd-ts/tools/jest.config.js",
|
|
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.28",
|
|
13
|
+
"@ddd-ts/store-inmemory": "0.0.28",
|
|
14
|
+
"@ddd-ts/types": "0.0.28"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
|
-
"@ddd-ts/shape": "0.0.
|
|
18
|
-
"@ddd-ts/tests": "0.0.
|
|
19
|
-
"@ddd-ts/tools": "0.0.
|
|
20
|
-
"@ddd-ts/traits": "0.0.
|
|
17
|
+
"@ddd-ts/shape": "0.0.28",
|
|
18
|
+
"@ddd-ts/tests": "0.0.28",
|
|
19
|
+
"@ddd-ts/tools": "0.0.28",
|
|
20
|
+
"@ddd-ts/traits": "0.0.28",
|
|
21
21
|
"@types/jest": "^29.5.1",
|
|
22
22
|
"@types/node": "^20.12.4"
|
|
23
23
|
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { type AggregateStreamId, type IChange } from "@ddd-ts/core";
|
|
2
|
-
import type { InMemoryTransaction } from "@ddd-ts/store-inmemory";
|
|
3
|
-
export declare class InMemoryEventStore {
|
|
4
|
-
private streams;
|
|
5
|
-
close(): Promise<void>;
|
|
6
|
-
clear(): Promise<void>;
|
|
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>;
|
|
13
|
-
read(streamId: AggregateStreamId, from?: number): AsyncGenerator<import("@ddd-ts/core").IFact, void, unknown>;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=in-memory.event-store.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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;AACtB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAGlE,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"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.InMemoryEventStore = void 0;
|
|
4
|
-
const core_1 = require("@ddd-ts/core");
|
|
5
|
-
const stream_1 = require("./stream");
|
|
6
|
-
class InMemoryEventStore {
|
|
7
|
-
streams = new Map();
|
|
8
|
-
async close() {
|
|
9
|
-
this.clear();
|
|
10
|
-
}
|
|
11
|
-
async clear() {
|
|
12
|
-
this.streams.clear();
|
|
13
|
-
}
|
|
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) {
|
|
20
|
-
const streamName = `${streamId.aggregate}-${streamId.id}`;
|
|
21
|
-
if (!this.streams.has(streamName)) {
|
|
22
|
-
const stream = new stream_1.Stream();
|
|
23
|
-
this.streams.set(streamName, stream);
|
|
24
|
-
}
|
|
25
|
-
const stream = this.streams.get(streamName);
|
|
26
|
-
const currentRevision = stream.facts.length - 1;
|
|
27
|
-
if (currentRevision !== Number(expectedRevision)) {
|
|
28
|
-
throw new core_1.ConcurrencyError(`Expected revision ${expectedRevision}, but got ${currentRevision}`);
|
|
29
|
-
}
|
|
30
|
-
for (const change of changes) {
|
|
31
|
-
stream.append(change);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
async *read(streamId, from = 0) {
|
|
35
|
-
const streamName = `${streamId.aggregate}-${streamId.id}`;
|
|
36
|
-
const stream = this.streams.get(streamName);
|
|
37
|
-
if (!stream) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
yield* stream.read(from);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
exports.InMemoryEventStore = InMemoryEventStore;
|
|
44
|
-
//# sourceMappingURL=in-memory.event-store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.event-store.js","sourceRoot":"","sources":["../../src/event-store/in-memory.event-store.ts"],"names":[],"mappings":";;;AAAA,uCAIsB;AAEtB,qCAAkC;AAElC,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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.event-store.spec.d.ts","sourceRoot":"","sources":["../../src/event-store/in-memory.event-store.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,127 +0,0 @@
|
|
|
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
|
-
};
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
const tests_1 = require("@ddd-ts/tests");
|
|
10
|
-
const shape_1 = require("@ddd-ts/shape");
|
|
11
|
-
const core_1 = require("@ddd-ts/core");
|
|
12
|
-
const store_inmemory_1 = require("@ddd-ts/store-inmemory");
|
|
13
|
-
const in_memory_snapshotter_1 = require("../in-memory.snapshotter");
|
|
14
|
-
const in_memory_es_aggregate_store_1 = require("../in-memory.es-aggregate-store");
|
|
15
|
-
const in_memory_event_store_1 = require("./in-memory.event-store");
|
|
16
|
-
describe("InMemoryEventStore", () => {
|
|
17
|
-
const database = new store_inmemory_1.InMemoryDatabase();
|
|
18
|
-
const transaction = new store_inmemory_1.InMemoryTransactionPerformer(database);
|
|
19
|
-
const eventStore = new in_memory_event_store_1.InMemoryEventStore();
|
|
20
|
-
function makeAggregateStore(AGGREGATE, eventSerializer, serializer) {
|
|
21
|
-
const snapshotter = new in_memory_snapshotter_1.InMemorySnapshotter(AGGREGATE.name, database, serializer);
|
|
22
|
-
const Store = (0, in_memory_es_aggregate_store_1.MakeInMemoryEsAggregateStore)(AGGREGATE);
|
|
23
|
-
return new Store(eventStore, transaction, eventSerializer, snapshotter);
|
|
24
|
-
}
|
|
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 AccountId extends (0, shape_1.Primitive)(String) {
|
|
41
|
-
}
|
|
42
|
-
class AccountRegistryId extends (0, shape_1.Primitive)(String) {
|
|
43
|
-
}
|
|
44
|
-
class AccountOpened extends (0, core_1.EsEvent)("AccountOpened", {
|
|
45
|
-
id: AccountId,
|
|
46
|
-
index: Number,
|
|
47
|
-
registryId: AccountRegistryId,
|
|
48
|
-
}) {
|
|
49
|
-
}
|
|
50
|
-
class Account extends (0, core_1.EsAggregate)("Account", {
|
|
51
|
-
events: [AccountOpened],
|
|
52
|
-
state: {
|
|
53
|
-
id: AccountId,
|
|
54
|
-
index: Number,
|
|
55
|
-
balance: Number,
|
|
56
|
-
registryId: AccountRegistryId,
|
|
57
|
-
},
|
|
58
|
-
}) {
|
|
59
|
-
static onAccountOpened(event) {
|
|
60
|
-
return new Account({
|
|
61
|
-
id: event.payload.id,
|
|
62
|
-
index: event.payload.index,
|
|
63
|
-
balance: 0,
|
|
64
|
-
registryId: event.payload.registryId,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
static open(registryId, index) {
|
|
68
|
-
return this.new(AccountOpened.new({
|
|
69
|
-
id: AccountId.deserialize(Math.random().toString(36).slice(2)),
|
|
70
|
-
index,
|
|
71
|
-
registryId,
|
|
72
|
-
}));
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
__decorate([
|
|
76
|
-
(0, core_1.On)(AccountOpened)
|
|
77
|
-
], Account, "onAccountOpened", null);
|
|
78
|
-
class AccountRegistry extends (0, shape_1.Shape)({
|
|
79
|
-
id: AccountRegistryId,
|
|
80
|
-
index: Number,
|
|
81
|
-
}) {
|
|
82
|
-
increment(shouldFailInMiddle = false) {
|
|
83
|
-
this.index++;
|
|
84
|
-
if (this.index > 10 && shouldFailInMiddle) {
|
|
85
|
-
throw new Error("Too many accounts");
|
|
86
|
-
}
|
|
87
|
-
return this.index;
|
|
88
|
-
}
|
|
89
|
-
static new() {
|
|
90
|
-
return new AccountRegistry({
|
|
91
|
-
id: AccountId.deserialize(Math.random().toString().slice(2)),
|
|
92
|
-
index: 0,
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
const registryStore = new store_inmemory_1.InMemoryStore("account-registry", database, new ((0, core_1.AutoSerializer)(AccountRegistry, 1))());
|
|
97
|
-
const serializerRegistry = new core_1.SerializerRegistry()
|
|
98
|
-
.add(AccountOpened, new ((0, core_1.AutoSerializer)(AccountOpened, 1))())
|
|
99
|
-
.add(Account, new ((0, core_1.AutoSerializer)(Account, 1))());
|
|
100
|
-
const accountStore = new ((0, in_memory_es_aggregate_store_1.MakeInMemoryEsAggregateStore)(Account))(eventStore, transaction, serializerRegistry, new in_memory_snapshotter_1.InMemorySnapshotter(Account.name, database, serializerRegistry.get(Account)));
|
|
101
|
-
const eventBus = new MockEventBus();
|
|
102
|
-
accountStore.publishEventsTo(eventBus);
|
|
103
|
-
const registry = AccountRegistry.new();
|
|
104
|
-
await registryStore.save(registry);
|
|
105
|
-
let willFailForAttempt = 3;
|
|
106
|
-
await transaction.perform(async (trx) => {
|
|
107
|
-
willFailForAttempt--;
|
|
108
|
-
const reg = await registryStore.load(registry.id, trx);
|
|
109
|
-
const accounts = [...Array(30).keys()].map((i) => Account.open(registry.id, reg.increment(willFailForAttempt === 0)));
|
|
110
|
-
await accountStore.saveAll(accounts, trx);
|
|
111
|
-
await registryStore.save(reg, trx);
|
|
112
|
-
});
|
|
113
|
-
const freshRegistry = await registryStore.load(registry.id);
|
|
114
|
-
expect(freshRegistry.index).toBe(30);
|
|
115
|
-
const result = await accountStore.snapshotter?.filter((a) => a.registryId.serialize() === registry.id.serialize());
|
|
116
|
-
const documents = result;
|
|
117
|
-
expect(documents?.length).toBe(30);
|
|
118
|
-
const indices = documents
|
|
119
|
-
?.map((doc) => Number(doc.index))
|
|
120
|
-
.sort((a, b) => a - b);
|
|
121
|
-
expect(indices).toEqual([
|
|
122
|
-
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
|
|
123
|
-
22, 23, 24, 25, 26, 27, 28, 29, 30,
|
|
124
|
-
]);
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
//# sourceMappingURL=in-memory.event-store.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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,19 +0,0 @@
|
|
|
1
|
-
import { type IFact, Queue } from "@ddd-ts/core";
|
|
2
|
-
import { Stream } from "./stream";
|
|
3
|
-
export declare class ProjectedStream extends Stream {
|
|
4
|
-
followers: Set<Queue<IFact>>;
|
|
5
|
-
competitions: Map<string, Queue<IFact>>;
|
|
6
|
-
onCloseCallbacks: any[];
|
|
7
|
-
onClose(callback: any): void;
|
|
8
|
-
follow(from?: number): Promise<Queue<IFact>>;
|
|
9
|
-
private getCompetition;
|
|
10
|
-
compete(competitionName: string): Promise<AsyncIterableIterator<{
|
|
11
|
-
fact: IFact;
|
|
12
|
-
retry: () => NodeJS.Immediate;
|
|
13
|
-
succeed: () => void;
|
|
14
|
-
skip: () => void;
|
|
15
|
-
}> & {
|
|
16
|
-
close: () => Promise<void>;
|
|
17
|
-
}>;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=projected-stream.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"projected-stream.d.ts","sourceRoot":"","sources":["../../src/event-store/projected-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,KAAK,EAAO,KAAK,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,qBAAa,eAAgB,SAAQ,MAAM;IACzC,SAAS,oBAA2B;IACpC,YAAY,4BAAmC;IAE/C,gBAAgB,EAAE,GAAG,EAAE,CAAM;IAE7B,OAAO,CAAC,QAAQ,EAAE,GAAG;IAIf,MAAM,CAAC,IAAI,SAAI;IAkBrB,OAAO,CAAC,cAAc;IAYhB,OAAO,CAAC,eAAe,EAAE,MAAM;;;;;;;;CAiBtC"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ProjectedStream = void 0;
|
|
4
|
-
const core_1 = require("@ddd-ts/core");
|
|
5
|
-
const stream_1 = require("./stream");
|
|
6
|
-
class ProjectedStream extends stream_1.Stream {
|
|
7
|
-
followers = new Set();
|
|
8
|
-
competitions = new Map();
|
|
9
|
-
onCloseCallbacks = [];
|
|
10
|
-
onClose(callback) {
|
|
11
|
-
this.onCloseCallbacks.push(callback);
|
|
12
|
-
}
|
|
13
|
-
async follow(from = 0) {
|
|
14
|
-
const follower = new core_1.Queue();
|
|
15
|
-
this.followers.add(follower);
|
|
16
|
-
for await (const fact of this.read(from)) {
|
|
17
|
-
follower.push(fact);
|
|
18
|
-
}
|
|
19
|
-
const unsubscribe = this.subscribe((fact) => {
|
|
20
|
-
if (fact.revision >= from) {
|
|
21
|
-
follower.push(fact);
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
follower.onClose(unsubscribe);
|
|
25
|
-
return follower;
|
|
26
|
-
}
|
|
27
|
-
getCompetition(competitionName) {
|
|
28
|
-
if (!this.competitions.has(competitionName)) {
|
|
29
|
-
const competition = new core_1.Queue();
|
|
30
|
-
const unsubscribe = this.subscribe((fact) => {
|
|
31
|
-
competition.push(fact);
|
|
32
|
-
});
|
|
33
|
-
competition.onClose(unsubscribe);
|
|
34
|
-
this.competitions.set(competitionName, competition);
|
|
35
|
-
}
|
|
36
|
-
return this.competitions.get(competitionName);
|
|
37
|
-
}
|
|
38
|
-
async compete(competitionName) {
|
|
39
|
-
const competition = this.getCompetition(competitionName);
|
|
40
|
-
return (0, core_1.closeable)((0, core_1.map)(competition[Symbol.asyncIterator](), (fact) => ({
|
|
41
|
-
fact,
|
|
42
|
-
retry: () => setImmediate(() => competition.push(fact)),
|
|
43
|
-
succeed: () => { },
|
|
44
|
-
skip: () => { },
|
|
45
|
-
})), async () => {
|
|
46
|
-
// competition.close();
|
|
47
|
-
// this.competitions.delete(competitionName);
|
|
48
|
-
// console.log("closing competitor");
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
exports.ProjectedStream = ProjectedStream;
|
|
53
|
-
//# sourceMappingURL=projected-stream.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"projected-stream.js","sourceRoot":"","sources":["../../src/event-store/projected-stream.ts"],"names":[],"mappings":";;;AAAA,uCAAiE;AACjE,qCAAkC;AAElC,MAAa,eAAgB,SAAQ,eAAM;IACzC,SAAS,GAAG,IAAI,GAAG,EAAgB,CAAC;IACpC,YAAY,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE/C,gBAAgB,GAAU,EAAE,CAAC;IAE7B,OAAO,CAAC,QAAa;QACnB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;QACnB,MAAM,QAAQ,GAAG,IAAI,YAAK,EAAS,CAAC;QACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE7B,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1C,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;gBAC1B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE9B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,cAAc,CAAC,eAAuB;QAC5C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,MAAM,WAAW,GAAG,IAAI,YAAK,EAAS,CAAC;YACvC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC1C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YACH,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAE,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,eAAuB;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QAEzD,OAAO,IAAA,gBAAS,EACd,IAAA,UAAG,EAAC,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClD,IAAI;YACJ,KAAK,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvD,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;YACjB,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;SACf,CAAC,CAAC,EACH,KAAK,IAAI,EAAE;YACT,uBAAuB;YACvB,6CAA6C;YAC7C,qCAAqC;QACvC,CAAC,CACF,CAAC;IACJ,CAAC;CACF;AAzDD,0CAyDC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { type IFact, type IEsEvent } from "@ddd-ts/core";
|
|
2
|
-
export declare class Stream {
|
|
3
|
-
facts: IFact[];
|
|
4
|
-
subscribers: Set<(fact: IFact) => void>;
|
|
5
|
-
append(change: IEsEvent): void;
|
|
6
|
-
subscribe(subscriber: (fact: IFact) => void): () => void;
|
|
7
|
-
read(from?: number): Generator<IFact, void, unknown>;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/event-store/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEzD,qBAAa,MAAM;IACjB,KAAK,EAAE,KAAK,EAAE,CAAM;IAEpB,WAAW,aAAkB,KAAK,KAAK,IAAI,EAAI;IAE/C,MAAM,CAAC,MAAM,EAAE,QAAQ;IAevB,SAAS,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI;IAO1C,IAAI,CAAC,IAAI,SAAI;CAKf"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Stream = void 0;
|
|
4
|
-
class Stream {
|
|
5
|
-
facts = [];
|
|
6
|
-
subscribers = new Set();
|
|
7
|
-
append(change) {
|
|
8
|
-
const revision = this.facts.length;
|
|
9
|
-
const occurredAt = new Date();
|
|
10
|
-
const fact = {
|
|
11
|
-
...change,
|
|
12
|
-
revision,
|
|
13
|
-
occurredAt,
|
|
14
|
-
};
|
|
15
|
-
this.facts.push(fact);
|
|
16
|
-
for (const subscriber of this.subscribers) {
|
|
17
|
-
subscriber(fact);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
subscribe(subscriber) {
|
|
21
|
-
this.subscribers.add(subscriber);
|
|
22
|
-
return () => {
|
|
23
|
-
this.subscribers.delete(subscriber);
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
*read(from = 0) {
|
|
27
|
-
for (let i = from; i < this.facts.length; i++) {
|
|
28
|
-
yield this.facts[i];
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
exports.Stream = Stream;
|
|
33
|
-
//# sourceMappingURL=stream.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/event-store/stream.ts"],"names":[],"mappings":";;;AAEA,MAAa,MAAM;IACjB,KAAK,GAAY,EAAE,CAAC;IAEpB,WAAW,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE/C,MAAM,CAAC,MAAgB;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG;YACX,GAAG,MAAM;YACT,QAAQ;YACR,UAAU;SACX,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1C,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,SAAS,CAAC,UAAiC;QACzC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACjC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC,CAAC;IACJ,CAAC;IAED,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;CACF;AAhCD,wBAgCC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.checkpoint.d.ts","sourceRoot":"","sources":["../src/in-memory.checkpoint.ts"],"names":[],"mappings":""}
|