@ddd-ts/event-sourcing-firestore 0.0.35 → 0.0.37
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/package.json +21 -12
- package/dist/firestore.event-lake.aggregate-store.d.ts +0 -39
- package/dist/firestore.event-lake.aggregate-store.d.ts.map +0 -1
- package/dist/firestore.event-lake.aggregate-store.js +0 -36
- package/dist/firestore.event-lake.aggregate-store.js.map +0 -1
- package/dist/firestore.event-lake.aggregate-store.spec.d.ts +0 -2
- package/dist/firestore.event-lake.aggregate-store.spec.d.ts.map +0 -1
- package/dist/firestore.event-lake.aggregate-store.spec.js +0 -58
- package/dist/firestore.event-lake.aggregate-store.spec.js.map +0 -1
- package/dist/firestore.event-lake.storage-layer.d.ts +0 -14
- package/dist/firestore.event-lake.storage-layer.d.ts.map +0 -1
- package/dist/firestore.event-lake.storage-layer.js +0 -117
- package/dist/firestore.event-lake.storage-layer.js.map +0 -1
- package/dist/firestore.event-lake.store.d.ts +0 -6
- package/dist/firestore.event-lake.store.d.ts.map +0 -1
- package/dist/firestore.event-lake.store.js +0 -12
- package/dist/firestore.event-lake.store.js.map +0 -1
- package/dist/firestore.event-lake.store.spec.d.ts +0 -2
- package/dist/firestore.event-lake.store.spec.d.ts.map +0 -1
- package/dist/firestore.event-lake.store.spec.js +0 -50
- package/dist/firestore.event-lake.store.spec.js.map +0 -1
- package/dist/firestore.event-stream-store.spec.d.ts +0 -2
- package/dist/firestore.event-stream-store.spec.d.ts.map +0 -1
- package/dist/firestore.event-stream-store.spec.js +0 -50
- package/dist/firestore.event-stream-store.spec.js.map +0 -1
- package/dist/firestore.event-stream.aggregate-store.d.ts +0 -30
- package/dist/firestore.event-stream.aggregate-store.d.ts.map +0 -1
- package/dist/firestore.event-stream.aggregate-store.js +0 -40
- package/dist/firestore.event-stream.aggregate-store.js.map +0 -1
- package/dist/firestore.event-stream.aggregate-store.spec.d.ts +0 -2
- package/dist/firestore.event-stream.aggregate-store.spec.d.ts.map +0 -1
- package/dist/firestore.event-stream.aggregate-store.spec.js +0 -54
- package/dist/firestore.event-stream.aggregate-store.spec.js.map +0 -1
- package/dist/firestore.event-stream.storage-layer.d.ts +0 -15
- package/dist/firestore.event-stream.storage-layer.d.ts.map +0 -1
- package/dist/firestore.event-stream.storage-layer.js +0 -110
- package/dist/firestore.event-stream.storage-layer.js.map +0 -1
- package/dist/firestore.event-stream.store.d.ts +0 -6
- package/dist/firestore.event-stream.store.d.ts.map +0 -1
- package/dist/firestore.event-stream.store.js +0 -12
- package/dist/firestore.event-stream.store.js.map +0 -1
- package/dist/firestore.projected-stream.reader.d.ts +0 -13
- package/dist/firestore.projected-stream.reader.d.ts.map +0 -1
- package/dist/firestore.projected-stream.reader.js +0 -37
- package/dist/firestore.projected-stream.reader.js.map +0 -1
- package/dist/firestore.projected-stream.reader.spec.d.ts +0 -2
- package/dist/firestore.projected-stream.reader.spec.d.ts.map +0 -1
- package/dist/firestore.projected-stream.reader.spec.js +0 -54
- package/dist/firestore.projected-stream.reader.spec.js.map +0 -1
- package/dist/firestore.projected-stream.storage-layer.d.ts +0 -31
- package/dist/firestore.projected-stream.storage-layer.d.ts.map +0 -1
- package/dist/firestore.projected-stream.storage-layer.js +0 -142
- package/dist/firestore.projected-stream.storage-layer.js.map +0 -1
- package/dist/firestore.snapshotter.d.ts +0 -6
- package/dist/firestore.snapshotter.d.ts.map +0 -1
- package/dist/firestore.snapshotter.js +0 -40
- package/dist/firestore.snapshotter.js.map +0 -1
- package/dist/index.d.ts +0 -11
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -32
- package/dist/index.js.map +0 -1
- package/dist/projection/cases/attempts.spec.d.ts +0 -2
- package/dist/projection/cases/attempts.spec.d.ts.map +0 -1
- package/dist/projection/cases/attempts.spec.js +0 -42
- package/dist/projection/cases/attempts.spec.js.map +0 -1
- package/dist/projection/cases/batchlast.spec.d.ts +0 -2
- package/dist/projection/cases/batchlast.spec.d.ts.map +0 -1
- package/dist/projection/cases/batchlast.spec.js +0 -51
- package/dist/projection/cases/batchlast.spec.js.map +0 -1
- package/dist/projection/cases/bigshuffle.spec.d.ts +0 -2
- package/dist/projection/cases/bigshuffle.spec.d.ts.map +0 -1
- package/dist/projection/cases/bigshuffle.spec.js +0 -59
- package/dist/projection/cases/bigshuffle.spec.js.map +0 -1
- package/dist/projection/cases/burst.spec.d.ts +0 -2
- package/dist/projection/cases/burst.spec.d.ts.map +0 -1
- package/dist/projection/cases/burst.spec.js +0 -38
- package/dist/projection/cases/burst.spec.js.map +0 -1
- package/dist/projection/cases/claimtimeout.spec.d.ts +0 -2
- package/dist/projection/cases/claimtimeout.spec.d.ts.map +0 -1
- package/dist/projection/cases/claimtimeout.spec.js +0 -40
- package/dist/projection/cases/claimtimeout.spec.js.map +0 -1
- package/dist/projection/cases/concurrency.spec.d.ts +0 -2
- package/dist/projection/cases/concurrency.spec.d.ts.map +0 -1
- package/dist/projection/cases/concurrency.spec.js +0 -49
- package/dist/projection/cases/concurrency.spec.js.map +0 -1
- package/dist/projection/cases/deduplicate.spec.d.ts +0 -2
- package/dist/projection/cases/deduplicate.spec.d.ts.map +0 -1
- package/dist/projection/cases/deduplicate.spec.js +0 -22
- package/dist/projection/cases/deduplicate.spec.js.map +0 -1
- package/dist/projection/cases/defer.spec.d.ts +0 -2
- package/dist/projection/cases/defer.spec.d.ts.map +0 -1
- package/dist/projection/cases/defer.spec.js +0 -44
- package/dist/projection/cases/defer.spec.js.map +0 -1
- package/dist/projection/cases/lock.spec.d.ts +0 -2
- package/dist/projection/cases/lock.spec.d.ts.map +0 -1
- package/dist/projection/cases/lock.spec.js +0 -91
- package/dist/projection/cases/lock.spec.js.map +0 -1
- package/dist/projection/cases/skip.spec.d.ts +0 -2
- package/dist/projection/cases/skip.spec.d.ts.map +0 -1
- package/dist/projection/cases/skip.spec.js +0 -86
- package/dist/projection/cases/skip.spec.js.map +0 -1
- package/dist/projection/cases/stress.spec.d.ts +0 -2
- package/dist/projection/cases/stress.spec.d.ts.map +0 -1
- package/dist/projection/cases/stress.spec.js +0 -73
- package/dist/projection/cases/stress.spec.js.map +0 -1
- package/dist/projection/firestore.projector.d.ts +0 -123
- package/dist/projection/firestore.projector.d.ts.map +0 -1
- package/dist/projection/firestore.projector.js +0 -605
- package/dist/projection/firestore.projector.js.map +0 -1
- package/dist/projection/testkit/case-fixture.d.ts +0 -610
- package/dist/projection/testkit/case-fixture.d.ts.map +0 -1
- package/dist/projection/testkit/case-fixture.js +0 -341
- package/dist/projection/testkit/case-fixture.js.map +0 -1
- package/dist/projection/testkit.d.ts +0 -44
- package/dist/projection/testkit.d.ts.map +0 -1
- package/dist/projection/testkit.js +0 -77
- package/dist/projection/testkit.js.map +0 -1
- package/dist/projection/trace.decorator.d.ts +0 -2
- package/dist/projection/trace.decorator.d.ts.map +0 -1
- package/dist/projection/trace.decorator.js +0 -35
- package/dist/projection/trace.decorator.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ddd-ts/event-sourcing-firestore",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"main": "dist/index.js",
|
|
3
|
+
"version": "0.0.37",
|
|
5
4
|
"types": "dist/index.d.ts",
|
|
6
5
|
"license": "MIT",
|
|
7
6
|
"repository": {
|
|
@@ -12,22 +11,32 @@
|
|
|
12
11
|
"wait": "sh -c 'until curl --silent localhost:8080; do sleep 1; done;'",
|
|
13
12
|
"test": "jest --config node_modules/@ddd-ts/tools/jest.config.js --runInBand",
|
|
14
13
|
"posttest": "docker compose -f docker/docker-compose.yml down",
|
|
15
|
-
"build": "
|
|
14
|
+
"build": "tsdown --config node_modules/@ddd-ts/tools/tsdown.config.js"
|
|
16
15
|
},
|
|
17
16
|
"dependencies": {
|
|
18
|
-
"@ddd-ts/core": "0.0.
|
|
19
|
-
"@ddd-ts/shape": "0.0.
|
|
20
|
-
"@ddd-ts/store-firestore": "0.0.
|
|
21
|
-
"@ddd-ts/traits": "0.0.
|
|
22
|
-
"@ddd-ts/types": "0.0.
|
|
17
|
+
"@ddd-ts/core": "0.0.37",
|
|
18
|
+
"@ddd-ts/shape": "0.0.37",
|
|
19
|
+
"@ddd-ts/store-firestore": "0.0.37",
|
|
20
|
+
"@ddd-ts/traits": "0.0.37",
|
|
21
|
+
"@ddd-ts/types": "0.0.37",
|
|
23
22
|
"@opentelemetry/api": "1.6.0",
|
|
24
23
|
"firebase-admin": "^13.2.0"
|
|
25
24
|
},
|
|
26
25
|
"devDependencies": {
|
|
27
|
-
"@ddd-ts/shape": "0.0.
|
|
28
|
-
"@ddd-ts/tests": "0.0.
|
|
29
|
-
"@ddd-ts/tools": "0.0.
|
|
30
|
-
"@ddd-ts/types": "0.0.
|
|
26
|
+
"@ddd-ts/shape": "0.0.37",
|
|
27
|
+
"@ddd-ts/tests": "0.0.37",
|
|
28
|
+
"@ddd-ts/tools": "0.0.37",
|
|
29
|
+
"@ddd-ts/types": "0.0.37",
|
|
31
30
|
"@types/jest": "^29.5.1"
|
|
31
|
+
},
|
|
32
|
+
"exports": {
|
|
33
|
+
".": "./src/index.ts",
|
|
34
|
+
"./package.json": "./package.json"
|
|
35
|
+
},
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"exports": {
|
|
38
|
+
".": "./dist/index.js",
|
|
39
|
+
"./package.json": "./package.json"
|
|
40
|
+
}
|
|
32
41
|
}
|
|
33
42
|
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { ISerializer, IEventSourced, IIdentifiable, EventOf, EventLakeStore, LakeId, IEventBus, EventSourced, Identifiable } from "@ddd-ts/core";
|
|
2
|
-
import { FirestoreStore, FirestoreTransaction, FirestoreTransactionPerformer } from "@ddd-ts/store-firestore";
|
|
3
|
-
import { CollectionReference } from "firebase-admin/firestore";
|
|
4
|
-
import { HasTrait } from "@ddd-ts/traits";
|
|
5
|
-
export declare const MakeFirestoreEventLakeAggregateStore: <A extends HasTrait<typeof EventSourced> & HasTrait<typeof Identifiable>>(AGGREGATE: A) => abstract new (collection: CollectionReference, serializer: ISerializer<InstanceType<A>> & ISerializer<EventOf<InstanceType<A>>>, eventBus?: IEventBus) => {
|
|
6
|
-
getLakeId(instance: InstanceType<A>): LakeId;
|
|
7
|
-
transaction: FirestoreTransactionPerformer;
|
|
8
|
-
lakeStore: EventLakeStore<EventOf<InstanceType<A>>>;
|
|
9
|
-
save(aggregate: InstanceType<A>, trx?: FirestoreTransaction): Promise<void>;
|
|
10
|
-
readonly _collection: CollectionReference;
|
|
11
|
-
readonly serializer: ISerializer<InstanceType<A>, {}>;
|
|
12
|
-
readonly $name?: string | undefined;
|
|
13
|
-
defaultConverter: import("@ddd-ts/store-firestore").DefaultConverter<FirebaseFirestore.DocumentData>;
|
|
14
|
-
readonly firestore: FirebaseFirestore.Firestore;
|
|
15
|
-
readonly collection: CollectionReference<{
|
|
16
|
-
version: number;
|
|
17
|
-
}, {
|
|
18
|
-
version: number;
|
|
19
|
-
}>;
|
|
20
|
-
executeQuery(query: FirebaseFirestore.Query<any>, trx?: FirestoreTransaction): Promise<InstanceType<A>[]>;
|
|
21
|
-
streamPages(query: FirebaseFirestore.Query<any>, pageSize: number): AsyncGenerator<FirebaseFirestore.QueryDocumentSnapshot<any, FirebaseFirestore.DocumentData>, void, unknown>;
|
|
22
|
-
streamQuery(query: FirebaseFirestore.Query<any>, pageSize?: number): AsyncIterable<InstanceType<A>>;
|
|
23
|
-
saveAll(models: InstanceType<A>[], trx?: FirestoreTransaction): Promise<void>;
|
|
24
|
-
load(id: InstanceType<A>["id"], trx?: FirestoreTransaction): Promise<InstanceType<A> | undefined>;
|
|
25
|
-
loadAll(transaction?: FirestoreTransaction): Promise<InstanceType<A>[]>;
|
|
26
|
-
delete(id: InstanceType<A>["id"], trx?: FirestoreTransaction): Promise<void>;
|
|
27
|
-
loadMany(ids: InstanceType<A>["id"][], trx?: FirestoreTransaction): Promise<InstanceType<A>[]>;
|
|
28
|
-
streamAll(pageSize?: number): AsyncIterable<InstanceType<A>>;
|
|
29
|
-
countAll(): Promise<number>;
|
|
30
|
-
count(query: FirebaseFirestore.Query<FirebaseFirestore.DocumentData>): Promise<number>;
|
|
31
|
-
};
|
|
32
|
-
export declare abstract class FirestoreEventLakeAggregateStore<A extends IEventSourced & IIdentifiable> extends FirestoreStore<A> {
|
|
33
|
-
transaction: FirestoreTransactionPerformer;
|
|
34
|
-
lakeStore: EventLakeStore<EventOf<A>>;
|
|
35
|
-
constructor(collection: CollectionReference, serializer: ISerializer<EventOf<A>> & ISerializer<A>, eventBus?: IEventBus, $name?: string);
|
|
36
|
-
abstract getLakeId(instance: A): LakeId;
|
|
37
|
-
save(aggregate: A, trx?: FirestoreTransaction): Promise<void>;
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=firestore.event-lake.aggregate-store.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.event-lake.aggregate-store.d.ts","sourceRoot":"","sources":["../src/firestore.event-lake.aggregate-store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,aAAa,EACb,OAAO,EACP,cAAc,EACd,MAAM,EAEN,SAAS,EACT,YAAY,EACZ,YAAY,EACb,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,6BAA6B,EAC9B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,eAAO,MAAM,oCAAoC,GAC/C,CAAC,SAAS,QAAQ,CAAC,OAAO,YAAY,CAAC,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,aAE5D,CAAC,+BAMI,mBAAmB,cACnB,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GACtC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,aAC5B,SAAS;wBAKO,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM;iBAS1C,6BAA6B;;2CAsBF,oBAAoB;;;;;wBA3CD,kBAAmB,SAAS;;;;;;wBAK7E,kBAAmB,KAAK;uBAExB,kBACR,KACJ;uBAGmD,kBAG7C,KAAK;;;;;;;;iBAkBP,kBAAmB,KAAI;CAjB1B,CAAC;AAEF,8BAAsB,gCAAgC,CACpD,CAAC,SAAS,aAAa,GAAG,aAAa,CACvC,SAAQ,cAAc,CAAC,CAAC,CAAC;IACzB,WAAW,EAAE,6BAA6B,CAAC;IAC3C,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEpC,UAAU,EAAE,mBAAmB,EAC/B,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EACpD,QAAQ,CAAC,EAAE,SAAS,EACpB,KAAK,CAAC,EAAE,MAAM;IAchB,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,MAAM;IAExB,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,oBAAoB;CAW7D"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FirestoreEventLakeAggregateStore = exports.MakeFirestoreEventLakeAggregateStore = void 0;
|
|
4
|
-
const core_1 = require("@ddd-ts/core");
|
|
5
|
-
const store_firestore_1 = require("@ddd-ts/store-firestore");
|
|
6
|
-
const firestore_event_lake_storage_layer_1 = require("./firestore.event-lake.storage-layer");
|
|
7
|
-
const MakeFirestoreEventLakeAggregateStore = (AGGREGATE) => {
|
|
8
|
-
class $FirestoreEventLakeAggregateStore extends FirestoreEventLakeAggregateStore {
|
|
9
|
-
constructor(collection, serializer, eventBus) {
|
|
10
|
-
super(collection, serializer, eventBus, AGGREGATE.name);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
return $FirestoreEventLakeAggregateStore;
|
|
14
|
-
};
|
|
15
|
-
exports.MakeFirestoreEventLakeAggregateStore = MakeFirestoreEventLakeAggregateStore;
|
|
16
|
-
class FirestoreEventLakeAggregateStore extends store_firestore_1.FirestoreStore {
|
|
17
|
-
transaction;
|
|
18
|
-
lakeStore;
|
|
19
|
-
constructor(collection, serializer, eventBus, $name) {
|
|
20
|
-
super(collection, serializer, $name);
|
|
21
|
-
const storageLayer = new firestore_event_lake_storage_layer_1.FirestoreEventLakeStorageLayer(collection.firestore);
|
|
22
|
-
this.transaction = new store_firestore_1.FirestoreTransactionPerformer(collection.firestore);
|
|
23
|
-
this.lakeStore = new core_1.EventLakeStore(storageLayer, serializer, eventBus);
|
|
24
|
-
}
|
|
25
|
-
async save(aggregate, trx) {
|
|
26
|
-
const changes = [...aggregate.changes];
|
|
27
|
-
await this.transaction.performWith(trx, async (trx) => {
|
|
28
|
-
const lakeId = this.getLakeId(aggregate);
|
|
29
|
-
await super.save(aggregate, trx);
|
|
30
|
-
await this.lakeStore.append(lakeId, changes, trx);
|
|
31
|
-
aggregate.clearChanges();
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
exports.FirestoreEventLakeAggregateStore = FirestoreEventLakeAggregateStore;
|
|
36
|
-
//# sourceMappingURL=firestore.event-lake.aggregate-store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.event-lake.aggregate-store.js","sourceRoot":"","sources":["../src/firestore.event-lake.aggregate-store.ts"],"names":[],"mappings":";;;AAAA,uCAWsB;AACtB,6DAIiC;AAGjC,6FAAsF;AAG/E,MAAM,oCAAoC,GAAG,CAGlD,SAAY,EACZ,EAAE;IACF,MAAe,iCAAkC,SAAQ,gCAExD;QACC,YACE,UAA+B,EAC/B,UACuC,EACvC,QAAoB;YAEpB,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1D,CAAC;KAGF;IAED,OAAO,iCAAiC,CAAC;AAC3C,CAAC,CAAC;AArBW,QAAA,oCAAoC,wCAqB/C;AAEF,MAAsB,gCAEpB,SAAQ,gCAAiB;IACzB,WAAW,CAAgC;IAC3C,SAAS,CAA6B;IACtC,YACE,UAA+B,EAC/B,UAAoD,EACpD,QAAoB,EACpB,KAAc;QAEd,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,YAAY,GAAG,IAAI,mEAA8B,CACrD,UAAU,CAAC,SAAS,CACrB,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,IAAI,+CAA6B,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAc,CACjC,YAAY,EACZ,UAAU,EACV,QAAQ,CACT,CAAC;IACJ,CAAC;IAIQ,KAAK,CAAC,IAAI,CAAC,SAAY,EAAE,GAA0B;QAC1D,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC,OAAO,CAA0B,CAAC;QAEhE,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAEzC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;YAClD,SAAS,CAAC,YAAY,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AApCD,4EAoCC","sourcesContent":["import {\n ISerializer,\n IEventSourced,\n IIdentifiable,\n EventOf,\n EventLakeStore,\n LakeId,\n IChange,\n IEventBus,\n EventSourced,\n Identifiable,\n} from \"@ddd-ts/core\";\nimport {\n FirestoreStore,\n FirestoreTransaction,\n FirestoreTransactionPerformer,\n} from \"@ddd-ts/store-firestore\";\n\nimport { CollectionReference } from \"firebase-admin/firestore\";\nimport { FirestoreEventLakeStorageLayer } from \"./firestore.event-lake.storage-layer\";\nimport { HasTrait } from \"@ddd-ts/traits\";\n\nexport const MakeFirestoreEventLakeAggregateStore = <\n A extends HasTrait<typeof EventSourced> & HasTrait<typeof Identifiable>,\n>(\n AGGREGATE: A,\n) => {\n abstract class $FirestoreEventLakeAggregateStore extends FirestoreEventLakeAggregateStore<\n InstanceType<A>\n > {\n constructor(\n collection: CollectionReference,\n serializer: ISerializer<InstanceType<A>> &\n ISerializer<EventOf<InstanceType<A>>>,\n eventBus?: IEventBus,\n ) {\n super(collection, serializer, eventBus, AGGREGATE.name);\n }\n\n abstract getLakeId(instance: InstanceType<A>): LakeId;\n }\n\n return $FirestoreEventLakeAggregateStore;\n};\n\nexport abstract class FirestoreEventLakeAggregateStore<\n A extends IEventSourced & IIdentifiable,\n> extends FirestoreStore<A> {\n transaction: FirestoreTransactionPerformer;\n lakeStore: EventLakeStore<EventOf<A>>;\n constructor(\n collection: CollectionReference,\n serializer: ISerializer<EventOf<A>> & ISerializer<A>,\n eventBus?: IEventBus,\n $name?: string,\n ) {\n super(collection, serializer, $name);\n const storageLayer = new FirestoreEventLakeStorageLayer(\n collection.firestore,\n );\n this.transaction = new FirestoreTransactionPerformer(collection.firestore);\n this.lakeStore = new EventLakeStore<EventOf<A>>(\n storageLayer,\n serializer,\n eventBus,\n );\n }\n\n abstract getLakeId(instance: A): LakeId;\n\n override async save(aggregate: A, trx?: FirestoreTransaction) {\n const changes = [...aggregate.changes] as IChange<EventOf<A>>[];\n\n await this.transaction.performWith(trx, async (trx) => {\n const lakeId = this.getLakeId(aggregate);\n\n await super.save(aggregate, trx);\n await this.lakeStore.append(lakeId, changes, trx);\n aggregate.clearChanges();\n });\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.event-lake.aggregate-store.spec.d.ts","sourceRoot":"","sources":["../src/firestore.event-lake.aggregate-store.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
process.env.FIRESTORE_EMULATOR_HOST = "localhost:8080";
|
|
37
|
-
const fb = __importStar(require("firebase-admin"));
|
|
38
|
-
const core_1 = require("@ddd-ts/core");
|
|
39
|
-
const store_firestore_1 = require("@ddd-ts/store-firestore");
|
|
40
|
-
const firestore_event_lake_aggregate_store_1 = require("./firestore.event-lake.aggregate-store");
|
|
41
|
-
jest.setTimeout(10000);
|
|
42
|
-
describe("FirestoreEventLakeAggregateStore", () => {
|
|
43
|
-
const app = fb.initializeApp({ projectId: "demo-es" });
|
|
44
|
-
const database = app.firestore();
|
|
45
|
-
class AggregateStore extends firestore_event_lake_aggregate_store_1.FirestoreEventLakeAggregateStore {
|
|
46
|
-
getLakeId(instance) {
|
|
47
|
-
return core_1.LakeId.from(instance.constructor.name, instance.id.serialize());
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
(0, core_1.EventLakeAggregateStoreSuite)({
|
|
51
|
-
transaction: new store_firestore_1.FirestoreTransactionPerformer(database),
|
|
52
|
-
getAggregateStore: (AGGREGATE, serializer, eventBus) => {
|
|
53
|
-
return new AggregateStore(database.collection(AGGREGATE.name), serializer, eventBus);
|
|
54
|
-
},
|
|
55
|
-
getStore: (name, serializer) => new store_firestore_1.FirestoreStore(database.collection(name), serializer),
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
//# sourceMappingURL=firestore.event-lake.aggregate-store.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.event-lake.aggregate-store.spec.js","sourceRoot":"","sources":["../src/firestore.event-lake.aggregate-store.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,gBAAgB,CAAC;AACvD,mDAAqC;AAErC,uCAMsB;AACtB,6DAGiC;AACjC,iGAA0F;AAE1F,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAEvB,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,MAAM,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;IAEjC,MAAM,cAEJ,SAAQ,uEAAmC;QAC3C,SAAS,CAAC,QAAW;YACnB,OAAO,aAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;QACzE,CAAC;KACF;IAED,IAAA,mCAA4B,EAAC;QAC3B,WAAW,EAAE,IAAI,+CAA6B,CAAC,QAAQ,CAAC;QACxD,iBAAiB,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE;YACrD,OAAO,IAAI,cAAc,CACvB,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EACnC,UAAU,EACV,QAAQ,CACT,CAAC;QACJ,CAAC;QACD,QAAQ,EAAE,CACR,IAAY,EACZ,UAA0B,EAC1B,EAAE,CAAC,IAAI,gCAAc,CAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;KAClE,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["process.env.FIRESTORE_EMULATOR_HOST = \"localhost:8080\";\nimport * as fb from \"firebase-admin\";\n\nimport {\n EventLakeAggregateStoreSuite,\n IEventSourced,\n IIdentifiable,\n LakeId,\n type ISerializer,\n} from \"@ddd-ts/core\";\nimport {\n FirestoreStore,\n FirestoreTransactionPerformer,\n} from \"@ddd-ts/store-firestore\";\nimport { FirestoreEventLakeAggregateStore } from \"./firestore.event-lake.aggregate-store\";\n\njest.setTimeout(10000);\n\ndescribe(\"FirestoreEventLakeAggregateStore\", () => {\n const app = fb.initializeApp({ projectId: \"demo-es\" });\n const database = app.firestore();\n\n class AggregateStore<\n T extends IEventSourced & IIdentifiable,\n > extends FirestoreEventLakeAggregateStore<T> {\n getLakeId(instance: T): LakeId {\n return LakeId.from(instance.constructor.name, instance.id.serialize());\n }\n }\n\n EventLakeAggregateStoreSuite({\n transaction: new FirestoreTransactionPerformer(database),\n getAggregateStore: (AGGREGATE, serializer, eventBus) => {\n return new AggregateStore(\n database.collection(AGGREGATE.name),\n serializer,\n eventBus,\n );\n },\n getStore: <T extends IIdentifiable>(\n name: string,\n serializer: ISerializer<T>,\n ) => new FirestoreStore<T>(database.collection(name), serializer),\n });\n});\n"]}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { LakeId, EventId, type ISerializedChange, type ISerializedFact, EventLakeStorageLayer } from "@ddd-ts/core";
|
|
2
|
-
import { ISerializedSavedChange } from "@ddd-ts/core/dist/interfaces/es-event";
|
|
3
|
-
import { DefaultConverter, FirestoreTransaction } from "@ddd-ts/store-firestore";
|
|
4
|
-
import * as fb from "firebase-admin";
|
|
5
|
-
export declare const serverTimestamp: typeof fb.firestore.FieldValue.serverTimestamp;
|
|
6
|
-
export declare class FirestoreEventLakeStorageLayer implements EventLakeStorageLayer {
|
|
7
|
-
readonly firestore: fb.firestore.Firestore;
|
|
8
|
-
readonly converter: DefaultConverter<fb.firestore.DocumentData>;
|
|
9
|
-
constructor(firestore: fb.firestore.Firestore, converter?: DefaultConverter<fb.firestore.DocumentData>);
|
|
10
|
-
getCollection(lakeId: LakeId): fb.firestore.CollectionReference<fb.firestore.DocumentData, fb.firestore.DocumentData>;
|
|
11
|
-
append(lakeId: LakeId, changes: ISerializedChange[], trx: FirestoreTransaction): Promise<ISerializedSavedChange[]>;
|
|
12
|
-
read(lakeId: LakeId, startAfter?: EventId, endAt?: EventId): AsyncIterable<ISerializedFact>;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=firestore.event-lake.storage-layer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.event-lake.storage-layer.d.ts","sourceRoot":"","sources":["../src/firestore.event-lake.storage-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,OAAO,EACP,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,qBAAqB,EACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,eAAO,MAAM,eAAe,gDAA0C,CAAC;AAEvE,qBAAa,8BAA+B,YAAW,qBAAqB;aAExD,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS;aACjC,SAAS;gBADT,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,EACjC,SAAS,8CAAyB;IAGpD,aAAa,CAAC,MAAM,EAAE,MAAM;IAStB,MAAM,CACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iBAAiB,EAAE,EAC5B,GAAG,EAAE,oBAAoB;IA+BpB,IAAI,CACT,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,OAAO,EACpB,KAAK,CAAC,EAAE,OAAO,GACd,aAAa,CAAC,eAAe,CAAC;CA2ClC"}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.FirestoreEventLakeStorageLayer = exports.serverTimestamp = void 0;
|
|
37
|
-
const store_firestore_1 = require("@ddd-ts/store-firestore");
|
|
38
|
-
const fb = __importStar(require("firebase-admin"));
|
|
39
|
-
exports.serverTimestamp = fb.firestore.FieldValue.serverTimestamp;
|
|
40
|
-
class FirestoreEventLakeStorageLayer {
|
|
41
|
-
firestore;
|
|
42
|
-
converter;
|
|
43
|
-
constructor(firestore, converter = new store_firestore_1.DefaultConverter()) {
|
|
44
|
-
this.firestore = firestore;
|
|
45
|
-
this.converter = converter;
|
|
46
|
-
}
|
|
47
|
-
getCollection(lakeId) {
|
|
48
|
-
return this.firestore
|
|
49
|
-
.collection("event-store")
|
|
50
|
-
.doc("Lakes")
|
|
51
|
-
.collection(lakeId.shardType)
|
|
52
|
-
.doc(lakeId.shardId)
|
|
53
|
-
.collection("events");
|
|
54
|
-
}
|
|
55
|
-
async append(lakeId, changes, trx) {
|
|
56
|
-
const collection = this.getCollection(lakeId);
|
|
57
|
-
const result = [];
|
|
58
|
-
for (const change of changes) {
|
|
59
|
-
const revision = trx.increment();
|
|
60
|
-
const storageChange = {
|
|
61
|
-
eventId: change.id,
|
|
62
|
-
name: change.name,
|
|
63
|
-
payload: change.payload,
|
|
64
|
-
occurredAt: (0, exports.serverTimestamp)(),
|
|
65
|
-
version: change.version,
|
|
66
|
-
revision,
|
|
67
|
-
};
|
|
68
|
-
const ref = collection.doc(change.id);
|
|
69
|
-
trx.transaction.create(ref, this.converter.toFirestore(storageChange));
|
|
70
|
-
result.push({
|
|
71
|
-
...change,
|
|
72
|
-
ref: ref.path,
|
|
73
|
-
revision,
|
|
74
|
-
occurredAt: undefined,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
return result;
|
|
78
|
-
}
|
|
79
|
-
async *read(lakeId, startAfter, endAt) {
|
|
80
|
-
const collection = this.getCollection(lakeId);
|
|
81
|
-
const [start, end] = await Promise.all([
|
|
82
|
-
startAfter ? collection.doc(startAfter.serialize()).get() : null,
|
|
83
|
-
endAt ? collection.doc(endAt.serialize()).get() : null,
|
|
84
|
-
]);
|
|
85
|
-
if (startAfter && !start?.exists) {
|
|
86
|
-
throw new Error(`StartAfter event not found: ${startAfter}`);
|
|
87
|
-
}
|
|
88
|
-
if (endAt && !end?.exists) {
|
|
89
|
-
throw new Error(`EndAt event not found: ${endAt}`);
|
|
90
|
-
}
|
|
91
|
-
let query = collection
|
|
92
|
-
.orderBy("occurredAt", "asc")
|
|
93
|
-
.orderBy("revision", "asc");
|
|
94
|
-
if (start) {
|
|
95
|
-
query = query.startAfter(start);
|
|
96
|
-
}
|
|
97
|
-
if (endAt) {
|
|
98
|
-
query = query.endAt(end);
|
|
99
|
-
}
|
|
100
|
-
for await (const event of query.stream()) {
|
|
101
|
-
const e = event;
|
|
102
|
-
const data = this.converter.fromFirestore(e);
|
|
103
|
-
yield {
|
|
104
|
-
id: data.eventId,
|
|
105
|
-
ref: e.ref.path,
|
|
106
|
-
revision: data.revision,
|
|
107
|
-
name: data.name,
|
|
108
|
-
$name: data.name,
|
|
109
|
-
payload: data.payload,
|
|
110
|
-
occurredAt: data.occurredAt,
|
|
111
|
-
version: data.version ?? 1,
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
exports.FirestoreEventLakeStorageLayer = FirestoreEventLakeStorageLayer;
|
|
117
|
-
//# sourceMappingURL=firestore.event-lake.storage-layer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.event-lake.storage-layer.js","sourceRoot":"","sources":["../src/firestore.event-lake.storage-layer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n LakeId,\n EventId,\n type ISerializedChange,\n type ISerializedFact,\n EventLakeStorageLayer,\n} from \"@ddd-ts/core\";\nimport { ISerializedSavedChange } from \"@ddd-ts/core/dist/interfaces/es-event\";\n\nimport {\n DefaultConverter,\n FirestoreTransaction,\n} from \"@ddd-ts/store-firestore\";\nimport * as fb from \"firebase-admin\";\n\nexport const serverTimestamp = fb.firestore.FieldValue.serverTimestamp;\n\nexport class FirestoreEventLakeStorageLayer implements EventLakeStorageLayer {\n constructor(\n public readonly firestore: fb.firestore.Firestore,\n public readonly converter = new DefaultConverter(),\n ) {}\n\n getCollection(lakeId: LakeId) {\n return this.firestore\n .collection(\"event-store\")\n .doc(\"Lakes\")\n .collection(lakeId.shardType)\n .doc(lakeId.shardId)\n .collection(\"events\");\n }\n\n async append(\n lakeId: LakeId,\n changes: ISerializedChange[],\n trx: FirestoreTransaction,\n ) {\n const collection = this.getCollection(lakeId);\n\n const result: ISerializedSavedChange[] = [];\n\n for (const change of changes) {\n const revision = trx.increment();\n const storageChange = {\n eventId: change.id,\n name: change.name,\n payload: change.payload,\n occurredAt: serverTimestamp(),\n version: change.version,\n revision,\n };\n\n const ref = collection.doc(change.id);\n trx.transaction.create(ref, this.converter.toFirestore(storageChange));\n\n result.push({\n ...change,\n ref: ref.path,\n revision,\n occurredAt: undefined,\n });\n }\n\n return result;\n }\n\n async *read(\n lakeId: LakeId,\n startAfter?: EventId,\n endAt?: EventId,\n ): AsyncIterable<ISerializedFact> {\n const collection = this.getCollection(lakeId);\n\n const [start, end] = await Promise.all([\n startAfter ? collection.doc(startAfter.serialize()).get() : null,\n endAt ? collection.doc(endAt.serialize()).get() : null,\n ]);\n\n if (startAfter && !start?.exists) {\n throw new Error(`StartAfter event not found: ${startAfter}`);\n }\n\n if (endAt && !end?.exists) {\n throw new Error(`EndAt event not found: ${endAt}`);\n }\n\n let query = collection\n .orderBy(\"occurredAt\", \"asc\")\n .orderBy(\"revision\", \"asc\");\n\n if (start) {\n query = query.startAfter(start);\n }\n\n if (endAt) {\n query = query.endAt(end);\n }\n\n for await (const event of query.stream()) {\n const e = event as any as fb.firestore.QueryDocumentSnapshot<any>;\n const data = this.converter.fromFirestore(e);\n yield {\n id: data.eventId,\n ref: e.ref.path,\n revision: data.revision,\n name: data.name,\n $name: data.name,\n payload: data.payload,\n occurredAt: data.occurredAt,\n version: data.version ?? 1,\n } as ISerializedFact;\n }\n }\n}\n"]}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { EventLakeStore, IEsEvent, IEventBus, ISerializer } from "@ddd-ts/core";
|
|
2
|
-
import { Firestore } from "firebase-admin/firestore";
|
|
3
|
-
export declare class FirestoreEventLakeStore<Event extends IEsEvent> extends EventLakeStore<Event> {
|
|
4
|
-
constructor(firestore: Firestore, serializer: ISerializer<Event>, eventBus?: IEventBus);
|
|
5
|
-
}
|
|
6
|
-
//# sourceMappingURL=firestore.event-lake.store.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.event-lake.store.d.ts","sourceRoot":"","sources":["../src/firestore.event-lake.store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,qBAAa,uBAAuB,CAClC,KAAK,SAAS,QAAQ,CACtB,SAAQ,cAAc,CAAC,KAAK,CAAC;gBAE3B,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,WAAW,CAAC,KAAK,CAAC,EAC9B,QAAQ,CAAC,EAAE,SAAS;CAIvB"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FirestoreEventLakeStore = void 0;
|
|
4
|
-
const core_1 = require("@ddd-ts/core");
|
|
5
|
-
const firestore_event_lake_storage_layer_1 = require("./firestore.event-lake.storage-layer");
|
|
6
|
-
class FirestoreEventLakeStore extends core_1.EventLakeStore {
|
|
7
|
-
constructor(firestore, serializer, eventBus) {
|
|
8
|
-
super(new firestore_event_lake_storage_layer_1.FirestoreEventLakeStorageLayer(firestore), serializer, eventBus);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
exports.FirestoreEventLakeStore = FirestoreEventLakeStore;
|
|
12
|
-
//# sourceMappingURL=firestore.event-lake.store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.event-lake.store.js","sourceRoot":"","sources":["../src/firestore.event-lake.store.ts"],"names":[],"mappings":";;;AAAA,uCAAgF;AAChF,6FAAsF;AAGtF,MAAa,uBAEX,SAAQ,qBAAqB;IAC7B,YACE,SAAoB,EACpB,UAA8B,EAC9B,QAAoB;QAEpB,KAAK,CAAC,IAAI,mEAA8B,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7E,CAAC;CACF;AAVD,0DAUC","sourcesContent":["import { EventLakeStore, IEsEvent, IEventBus, ISerializer } from \"@ddd-ts/core\";\nimport { FirestoreEventLakeStorageLayer } from \"./firestore.event-lake.storage-layer\";\nimport { Firestore } from \"firebase-admin/firestore\";\n\nexport class FirestoreEventLakeStore<\n Event extends IEsEvent,\n> extends EventLakeStore<Event> {\n constructor(\n firestore: Firestore,\n serializer: ISerializer<Event>,\n eventBus?: IEventBus,\n ) {\n super(new FirestoreEventLakeStorageLayer(firestore), serializer, eventBus);\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.event-lake.store.spec.d.ts","sourceRoot":"","sources":["../src/firestore.event-lake.store.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
process.env.FIRESTORE_EMULATOR_HOST = "localhost:8080";
|
|
37
|
-
const fb = __importStar(require("firebase-admin"));
|
|
38
|
-
const store_firestore_1 = require("@ddd-ts/store-firestore");
|
|
39
|
-
const core_1 = require("@ddd-ts/core");
|
|
40
|
-
const firestore_event_lake_storage_layer_1 = require("./firestore.event-lake.storage-layer");
|
|
41
|
-
jest.setTimeout(10000);
|
|
42
|
-
describe("FirestoreEventLakeStore", () => {
|
|
43
|
-
const app = fb.initializeApp({ projectId: "demo-es" });
|
|
44
|
-
const firestore = app.firestore();
|
|
45
|
-
(0, core_1.EventLakeStoreSuite)({
|
|
46
|
-
transaction: new store_firestore_1.FirestoreTransactionPerformer(firestore),
|
|
47
|
-
lakeStorageLayer: new firestore_event_lake_storage_layer_1.FirestoreEventLakeStorageLayer(firestore),
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
//# sourceMappingURL=firestore.event-lake.store.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.event-lake.store.spec.js","sourceRoot":"","sources":["../src/firestore.event-lake.store.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,gBAAgB,CAAC;AACvD,mDAAqC;AAErC,6DAAwE;AACxE,uCAAmD;AACnD,6FAAsF;AAEtF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAEvB,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,MAAM,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;IAElC,IAAA,0BAAmB,EAAC;QAClB,WAAW,EAAE,IAAI,+CAA6B,CAAC,SAAS,CAAC;QACzD,gBAAgB,EAAE,IAAI,mEAA8B,CAAC,SAAS,CAAC;KAChE,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["process.env.FIRESTORE_EMULATOR_HOST = \"localhost:8080\";\nimport * as fb from \"firebase-admin\";\n\nimport { FirestoreTransactionPerformer } from \"@ddd-ts/store-firestore\";\nimport { EventLakeStoreSuite } from \"@ddd-ts/core\";\nimport { FirestoreEventLakeStorageLayer } from \"./firestore.event-lake.storage-layer\";\n\njest.setTimeout(10000);\n\ndescribe(\"FirestoreEventLakeStore\", () => {\n const app = fb.initializeApp({ projectId: \"demo-es\" });\n const firestore = app.firestore();\n\n EventLakeStoreSuite({\n transaction: new FirestoreTransactionPerformer(firestore),\n lakeStorageLayer: new FirestoreEventLakeStorageLayer(firestore),\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.event-stream-store.spec.d.ts","sourceRoot":"","sources":["../src/firestore.event-stream-store.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
process.env.FIRESTORE_EMULATOR_HOST = "localhost:8080";
|
|
37
|
-
const fb = __importStar(require("firebase-admin"));
|
|
38
|
-
const store_firestore_1 = require("@ddd-ts/store-firestore");
|
|
39
|
-
const core_1 = require("@ddd-ts/core");
|
|
40
|
-
const firestore_event_stream_storage_layer_1 = require("./firestore.event-stream.storage-layer");
|
|
41
|
-
jest.setTimeout(10000);
|
|
42
|
-
describe("FirestoreEventStreamStore", () => {
|
|
43
|
-
const app = fb.initializeApp({ projectId: "demo-es" });
|
|
44
|
-
const firestore = app.firestore();
|
|
45
|
-
(0, core_1.EventStreamStoreSuite)({
|
|
46
|
-
transaction: new store_firestore_1.FirestoreTransactionPerformer(firestore),
|
|
47
|
-
streamStorageLayer: new firestore_event_stream_storage_layer_1.FirestoreEventStreamStorageLayer(firestore),
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
//# sourceMappingURL=firestore.event-stream-store.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.event-stream-store.spec.js","sourceRoot":"","sources":["../src/firestore.event-stream-store.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,gBAAgB,CAAC;AACvD,mDAAqC;AAErC,6DAAwE;AACxE,uCAAqD;AACrD,iGAA0F;AAE1F,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAEvB,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,MAAM,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;IAElC,IAAA,4BAAqB,EAAC;QACpB,WAAW,EAAE,IAAI,+CAA6B,CAAC,SAAS,CAAC;QACzD,kBAAkB,EAAE,IAAI,uEAAgC,CAAC,SAAS,CAAC;KACpE,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["process.env.FIRESTORE_EMULATOR_HOST = \"localhost:8080\";\nimport * as fb from \"firebase-admin\";\n\nimport { FirestoreTransactionPerformer } from \"@ddd-ts/store-firestore\";\nimport { EventStreamStoreSuite } from \"@ddd-ts/core\";\nimport { FirestoreEventStreamStorageLayer } from \"./firestore.event-stream.storage-layer\";\n\njest.setTimeout(10000);\n\ndescribe(\"FirestoreEventStreamStore\", () => {\n const app = fb.initializeApp({ projectId: \"demo-es\" });\n const firestore = app.firestore();\n\n EventStreamStoreSuite({\n transaction: new FirestoreTransactionPerformer(firestore),\n streamStorageLayer: new FirestoreEventStreamStorageLayer(firestore),\n });\n});\n"]}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { HasTrait } from "@ddd-ts/traits";
|
|
2
|
-
import { StreamId, EventsOf, EventSourced, type Identifiable, type IEventBus, EventStreamStore, EventStreamAggregateStore, ISerializer, IEventSourced, IIdentifiable, EventOf } from "@ddd-ts/core";
|
|
3
|
-
import { FirestoreSnapshotter } from "./firestore.snapshotter";
|
|
4
|
-
import { Firestore } from "firebase-admin/firestore";
|
|
5
|
-
export declare const MakeFirestoreEventStreamAggregateStore: <A extends HasTrait<typeof EventSourced> & HasTrait<typeof Identifiable>>(AGGREGATE: A) => {
|
|
6
|
-
new (firestore: Firestore, serializer: ISerializer<InstanceType<A>> & ISerializer<EventOf<InstanceType<A>>>, eventBus?: IEventBus): {
|
|
7
|
-
loadFirst(event: EventsOf<A>[number]): InstanceType<A>;
|
|
8
|
-
getStreamId(id: InstanceType<A>["id"]): StreamId;
|
|
9
|
-
readonly firestore: Firestore;
|
|
10
|
-
readonly serializer: ISerializer<EventOf<InstanceType<A>>, {}>;
|
|
11
|
-
readonly snapshotter: FirestoreSnapshotter<InstanceType<A>>;
|
|
12
|
-
readonly eventBus?: IEventBus | undefined;
|
|
13
|
-
readonly streamStore: EventStreamStore<EventOf<InstanceType<A>>>;
|
|
14
|
-
readonly transaction: import("@ddd-ts/core").TransactionPerformer;
|
|
15
|
-
loadFromSnapshot(snapshot: InstanceType<A>): Promise<InstanceType<A>>;
|
|
16
|
-
loadFromScratch(id: InstanceType<A>["id"]): Promise<InstanceType<A> | undefined>;
|
|
17
|
-
loadForce(id: InstanceType<A>["id"]): Promise<InstanceType<A> | undefined>;
|
|
18
|
-
load(id: InstanceType<A>["id"]): Promise<InstanceType<A> | undefined>;
|
|
19
|
-
saveAll(aggregates: InstanceType<A>[], parentTrx?: import("@ddd-ts/core").Transaction, attempts?: number): Promise<void>;
|
|
20
|
-
save(aggregate: InstanceType<A>, trx?: import("@ddd-ts/core").Transaction, attempts?: number): Promise<void>;
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
export declare abstract class FirestoreEventStreamAggregateStore<A extends IEventSourced & IIdentifiable> extends EventStreamAggregateStore<A> {
|
|
24
|
-
readonly firestore: Firestore;
|
|
25
|
-
readonly serializer: ISerializer<EventOf<A>>;
|
|
26
|
-
readonly snapshotter: FirestoreSnapshotter<A>;
|
|
27
|
-
readonly eventBus?: IEventBus | undefined;
|
|
28
|
-
constructor(firestore: Firestore, serializer: ISerializer<EventOf<A>>, snapshotter: FirestoreSnapshotter<A>, eventBus?: IEventBus | undefined);
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=firestore.event-stream.aggregate-store.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.event-stream.aggregate-store.d.ts","sourceRoot":"","sources":["../src/firestore.event-stream.aggregate-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,gBAAgB,EAChB,yBAAyB,EACzB,WAAW,EACX,aAAa,EACb,aAAa,EACb,OAAO,EACR,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,eAAO,MAAM,sCAAsC,GACjD,CAAC,SAAS,QAAQ,CAAC,OAAO,YAAY,CAAC,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,aAE5D,CAAC;oBAMG,SAAS,cACR,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GACtC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,aAC5B,SAAS;yBAUL,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;wBAItC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ;4BAUrB,SAAS;;;4BAGT,SAAS;;;;;;;;;;CATvC,CAAC;AAEF,8BAAsB,kCAAkC,CACtD,CAAC,SAAS,aAAa,GAAG,aAAa,CACvC,SAAQ,yBAAyB,CAAC,CAAC,CAAC;aAElB,SAAS,EAAE,SAAS;aACpB,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACnC,WAAW,EAAE,oBAAoB,CAAC,CAAC,CAAC;aACpC,QAAQ,CAAC,EAAE,SAAS;gBAHpB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EACnC,WAAW,EAAE,oBAAoB,CAAC,CAAC,CAAC,EACpC,QAAQ,CAAC,EAAE,SAAS,YAAA;CAWvC"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FirestoreEventStreamAggregateStore = exports.MakeFirestoreEventStreamAggregateStore = void 0;
|
|
4
|
-
const core_1 = require("@ddd-ts/core");
|
|
5
|
-
const store_firestore_1 = require("@ddd-ts/store-firestore");
|
|
6
|
-
const firestore_snapshotter_1 = require("./firestore.snapshotter");
|
|
7
|
-
const firestore_event_stream_storage_layer_1 = require("./firestore.event-stream.storage-layer");
|
|
8
|
-
const MakeFirestoreEventStreamAggregateStore = (AGGREGATE) => {
|
|
9
|
-
return class $FirestoreEventStreamAggregateStore extends FirestoreEventStreamAggregateStore {
|
|
10
|
-
constructor(firestore, serializer, eventBus) {
|
|
11
|
-
const snapshotter = new firestore_snapshotter_1.FirestoreSnapshotter(AGGREGATE.name, firestore, serializer);
|
|
12
|
-
super(firestore, serializer, snapshotter, eventBus);
|
|
13
|
-
}
|
|
14
|
-
loadFirst(event) {
|
|
15
|
-
return AGGREGATE.loadFirst(event);
|
|
16
|
-
}
|
|
17
|
-
getStreamId(id) {
|
|
18
|
-
return core_1.StreamId.from(AGGREGATE.name, id.serialize());
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
exports.MakeFirestoreEventStreamAggregateStore = MakeFirestoreEventStreamAggregateStore;
|
|
23
|
-
class FirestoreEventStreamAggregateStore extends core_1.EventStreamAggregateStore {
|
|
24
|
-
firestore;
|
|
25
|
-
serializer;
|
|
26
|
-
snapshotter;
|
|
27
|
-
eventBus;
|
|
28
|
-
constructor(firestore, serializer, snapshotter, eventBus) {
|
|
29
|
-
const storageLayer = new firestore_event_stream_storage_layer_1.FirestoreEventStreamStorageLayer(firestore);
|
|
30
|
-
const transaction = new store_firestore_1.FirestoreTransactionPerformer(firestore);
|
|
31
|
-
const streamStore = new core_1.EventStreamStore(storageLayer, serializer, eventBus);
|
|
32
|
-
super(streamStore, transaction, snapshotter);
|
|
33
|
-
this.firestore = firestore;
|
|
34
|
-
this.serializer = serializer;
|
|
35
|
-
this.snapshotter = snapshotter;
|
|
36
|
-
this.eventBus = eventBus;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
exports.FirestoreEventStreamAggregateStore = FirestoreEventStreamAggregateStore;
|
|
40
|
-
//# sourceMappingURL=firestore.event-stream.aggregate-store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.event-stream.aggregate-store.js","sourceRoot":"","sources":["../src/firestore.event-stream.aggregate-store.ts"],"names":[],"mappings":";;;AACA,uCAYsB;AACtB,6DAAwE;AAExE,mEAA+D;AAC/D,iGAA0F;AAGnF,MAAM,sCAAsC,GAAG,CAGpD,SAAY,EACZ,EAAE;IACF,OAAO,MAAM,mCAAoC,SAAQ,kCAExD;QACC,YACE,SAAoB,EACpB,UACuC,EACvC,QAAoB;YAEpB,MAAM,WAAW,GAAG,IAAI,4CAAoB,CAC1C,SAAS,CAAC,IAAI,EACd,SAAS,EACT,UAAU,CACX,CAAC;YACF,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC;QAED,SAAS,CAAC,KAA0B;YAClC,OAAO,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QAED,WAAW,CAAC,EAAyB;YACnC,OAAO,eAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;QACvD,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AA9BW,QAAA,sCAAsC,0CA8BjD;AAEF,MAAsB,kCAEpB,SAAQ,gCAA4B;IAElB;IACA;IACA;IACA;IAJlB,YACkB,SAAoB,EACpB,UAAmC,EACnC,WAAoC,EACpC,QAAoB;QAEpC,MAAM,YAAY,GAAG,IAAI,uEAAgC,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,IAAI,+CAA6B,CAAC,SAAS,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,IAAI,uBAAgB,CACtC,YAAY,EACZ,UAAU,EACV,QAAQ,CACT,CAAC;QACF,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAZ7B,cAAS,GAAT,SAAS,CAAW;QACpB,eAAU,GAAV,UAAU,CAAyB;QACnC,gBAAW,GAAX,WAAW,CAAyB;QACpC,aAAQ,GAAR,QAAQ,CAAY;IAUtC,CAAC;CACF;AAlBD,gFAkBC","sourcesContent":["import { HasTrait } from \"@ddd-ts/traits\";\nimport {\n StreamId,\n EventsOf,\n EventSourced,\n type Identifiable,\n type IEventBus,\n EventStreamStore,\n EventStreamAggregateStore,\n ISerializer,\n IEventSourced,\n IIdentifiable,\n EventOf,\n} from \"@ddd-ts/core\";\nimport { FirestoreTransactionPerformer } from \"@ddd-ts/store-firestore\";\n\nimport { FirestoreSnapshotter } from \"./firestore.snapshotter\";\nimport { FirestoreEventStreamStorageLayer } from \"./firestore.event-stream.storage-layer\";\nimport { Firestore } from \"firebase-admin/firestore\";\n\nexport const MakeFirestoreEventStreamAggregateStore = <\n A extends HasTrait<typeof EventSourced> & HasTrait<typeof Identifiable>,\n>(\n AGGREGATE: A,\n) => {\n return class $FirestoreEventStreamAggregateStore extends FirestoreEventStreamAggregateStore<\n InstanceType<A>\n > {\n constructor(\n firestore: Firestore,\n serializer: ISerializer<InstanceType<A>> &\n ISerializer<EventOf<InstanceType<A>>>,\n eventBus?: IEventBus,\n ) {\n const snapshotter = new FirestoreSnapshotter<InstanceType<A>>(\n AGGREGATE.name,\n firestore,\n serializer,\n );\n super(firestore, serializer, snapshotter, eventBus);\n }\n\n loadFirst(event: EventsOf<A>[number]): InstanceType<A> {\n return AGGREGATE.loadFirst(event);\n }\n\n getStreamId(id: InstanceType<A>[\"id\"]): StreamId {\n return StreamId.from(AGGREGATE.name, id.serialize());\n }\n };\n};\n\nexport abstract class FirestoreEventStreamAggregateStore<\n A extends IEventSourced & IIdentifiable,\n> extends EventStreamAggregateStore<A> {\n constructor(\n public readonly firestore: Firestore,\n public readonly serializer: ISerializer<EventOf<A>>,\n public readonly snapshotter: FirestoreSnapshotter<A>,\n public readonly eventBus?: IEventBus,\n ) {\n const storageLayer = new FirestoreEventStreamStorageLayer(firestore);\n const transaction = new FirestoreTransactionPerformer(firestore);\n const streamStore = new EventStreamStore<EventOf<A>>(\n storageLayer,\n serializer,\n eventBus,\n );\n super(streamStore, transaction, snapshotter);\n }\n}\n"]}
|