@ddd-ts/event-sourcing-firestore 0.0.13 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/flat/firestore.es-aggregate-store.d.ts +12 -7
  2. package/dist/flat/firestore.es-aggregate-store.d.ts.map +1 -1
  3. package/dist/flat/firestore.es-aggregate-store.js +15 -3
  4. package/dist/flat/firestore.es-aggregate-store.js.map +1 -1
  5. package/dist/flat/firestore.event-store.d.ts +3 -2
  6. package/dist/flat/firestore.event-store.d.ts.map +1 -1
  7. package/dist/flat/firestore.event-store.js +8 -5
  8. package/dist/flat/firestore.event-store.js.map +1 -1
  9. package/dist/flat/firestore.snapshotter.d.ts +5 -4
  10. package/dist/flat/firestore.snapshotter.d.ts.map +1 -1
  11. package/dist/flat/firestore.snapshotter.js +9 -6
  12. package/dist/flat/firestore.snapshotter.js.map +1 -1
  13. package/dist/nested/bank.spec.js +1 -1
  14. package/dist/nested/bank.spec.js.map +1 -1
  15. package/dist/nested/firestore.es-aggregate-store.d.ts +10 -7
  16. package/dist/nested/firestore.es-aggregate-store.d.ts.map +1 -1
  17. package/dist/nested/firestore.es-aggregate-store.js +71 -31
  18. package/dist/nested/firestore.es-aggregate-store.js.map +1 -1
  19. package/dist/nested/firestore.event-store.d.ts +11 -2
  20. package/dist/nested/firestore.event-store.d.ts.map +1 -1
  21. package/dist/nested/firestore.event-store.js +34 -17
  22. package/dist/nested/firestore.event-store.js.map +1 -1
  23. package/dist/nested/firestore.event-store.spec.js +206 -1
  24. package/dist/nested/firestore.event-store.spec.js.map +1 -1
  25. package/dist/nested/firestore.snapshotter.d.ts +5 -8
  26. package/dist/nested/firestore.snapshotter.d.ts.map +1 -1
  27. package/dist/nested/firestore.snapshotter.js +22 -33
  28. package/dist/nested/firestore.snapshotter.js.map +1 -1
  29. package/package.json +8 -8
@@ -1,12 +1,11 @@
1
1
  import { HasTrait } from "@ddd-ts/traits";
2
- import { EventSourced, type AggregateStreamId, type Identifiable, type IEsAggregateStore, type IEventBus, type ISerializer } from "@ddd-ts/core";
3
- import { type FirestoreTransactionPerformer } from "@ddd-ts/store-firestore";
2
+ import { AggregateStreamId, EventSourced, type Identifiable, type IEsAggregateStore, type IEventBus, type ISerializer, type Transaction } from "@ddd-ts/core";
3
+ import { type FirestoreTransaction, type FirestoreTransactionPerformer } from "@ddd-ts/store-firestore";
4
4
  import type { FlatFirestoreSnapshotter } from "./firestore.snapshotter";
5
5
  import type { FlatFirestoreEventStore } from "./firestore.event-store";
6
6
  export declare const MakeFlatFirestoreEsAggregateStore: <A extends Omit<(abstract new (props: {}) => {
7
7
  acknowledgedRevision: number;
8
8
  changes: import("@ddd-ts/core").IEsEvent<string, any>[];
9
- getAggregateStreamId(this: any): any;
10
9
  load(fact: import("@ddd-ts/core").IEsEvent<string, any>): void;
11
10
  apply(change: import("@ddd-ts/core").IEsEvent<string, any>): void;
12
11
  play(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
@@ -14,14 +13,12 @@ export declare const MakeFlatFirestoreEsAggregateStore: <A extends Omit<(abstrac
14
13
  acknowledgeChanges(): void;
15
14
  }) & {
16
15
  events: import("@ddd-ts/types").Constructor<import("@ddd-ts/core").IEsEvent<string, any>>[];
17
- getAggregateStreamId(id: import("@ddd-ts/core").Identifier): AggregateStreamId;
18
16
  instanciate<TH extends import("@ddd-ts/types").Constructor>(this: TH, event: import("@ddd-ts/core").IEsEvent<string, any>): InstanceType<TH>;
19
17
  loadFirst<TH_1 extends import("@ddd-ts/types").Constructor>(this: TH_1, event: import("@ddd-ts/core").IEsEvent<string, any>): InstanceType<TH_1>;
20
18
  "new"<TH_2 extends import("@ddd-ts/types").Constructor>(this: TH_2, event: import("@ddd-ts/core").IEsEvent<string, any>): InstanceType<TH_2>;
21
19
  }, ""> & (new (...args: any[]) => {
22
20
  acknowledgedRevision: number;
23
21
  changes: import("@ddd-ts/core").IEsEvent<string, any>[];
24
- getAggregateStreamId(this: any): any;
25
22
  load(fact: import("@ddd-ts/core").IEsEvent<string, any>): void;
26
23
  apply(change: import("@ddd-ts/core").IEsEvent<string, any>): void;
27
24
  play(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
@@ -42,7 +39,11 @@ export declare const MakeFlatFirestoreEsAggregateStore: <A extends Omit<(abstrac
42
39
  _publishEventsTo?: IEventBus;
43
40
  publishEventsTo(eventBus: IEventBus): void;
44
41
  load(id: InstanceType<A>["id"]): Promise<InstanceType<A> | undefined>;
45
- save(aggregate: InstanceType<A>, attempts?: number): Promise<void>;
42
+ /**
43
+ * @deprecated
44
+ */
45
+ saveAll(aggregates: InstanceType<A>[], trx?: Transaction | undefined): Promise<void>;
46
+ save(aggregate: InstanceType<A>, trx?: FirestoreTransaction, attempts?: number): Promise<void>;
46
47
  };
47
48
  };
48
49
  export declare abstract class FlatFirestoreEsAggregateStore<A extends HasTrait<typeof EventSourced> & HasTrait<typeof Identifiable>> implements IEsAggregateStore<InstanceType<A>> {
@@ -56,6 +57,10 @@ export declare abstract class FlatFirestoreEsAggregateStore<A extends HasTrait<t
56
57
  _publishEventsTo?: IEventBus;
57
58
  publishEventsTo(eventBus: IEventBus): void;
58
59
  load(id: InstanceType<A>["id"]): Promise<InstanceType<A> | undefined>;
59
- save(aggregate: InstanceType<A>, attempts?: number): Promise<void>;
60
+ /**
61
+ * @deprecated
62
+ */
63
+ saveAll(aggregates: InstanceType<A>[], trx?: Transaction | undefined): Promise<void>;
64
+ save(aggregate: InstanceType<A>, trx?: FirestoreTransaction, attempts?: number): Promise<void>;
60
65
  }
61
66
  //# sourceMappingURL=firestore.es-aggregate-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.es-aggregate-store.d.ts","sourceRoot":"","sources":["../../src/flat/firestore.es-aggregate-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAEL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAE7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,eAAO,MAAM,iCAAiC,GAUJ,CAAC;;;;;;;;;;;;;;;wBAwGjC,KAAM;;;;;;;;;;;wBAAN,KAAM;;eAxG0B,CAAC,AAP7B;qBAkBkB,uBAAuB,eACtB,6BAA6B;yBAhBzC,YAAY,CAIS,CAAC,AAJR,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,CAI5B,CAAC,AAJ6B,CAAC;iCAI5C,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,iBAAiB;6BAWtC,uBAAuB;8BACtB,6BAA6B;;;2BAUzC,SAAS;kCACF,SAAS;;6DAkCmB,OAAO,CAAC,IAAI,CAAC;;CArDpE,CAAC;AAEF,8BAAsB,6BAA6B,CACjD,CAAC,SAAS,QAAQ,CAAC,OAAO,YAAY,CAAC,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,CACvE,YAAW,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;aAG3B,UAAU,EAAE,uBAAuB;aACnC,WAAW,EAAE,6BAA6B;aAC1C,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;aAC3D,WAAW,CAAC,EAAE,wBAAwB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAHvD,UAAU,EAAE,uBAAuB,EACnC,WAAW,EAAE,6BAA6B,EAC1C,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,EAC3D,WAAW,CAAC,EAAE,wBAAwB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAA;IAGzE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,iBAAiB;IAC3E,QAAQ,CAAC,SAAS,CAChB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GACxC,YAAY,CAAC,CAAC,CAAC;IAElB,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,eAAe,CAAC,QAAQ,EAAE,SAAS;IAI7B,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IA8B9B,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CA8CpE"}
1
+ {"version":3,"file":"firestore.es-aggregate-store.d.ts","sourceRoot":"","sources":["../../src/flat/firestore.es-aggregate-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,iBAAiB,EAEjB,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,6BAA6B,EACnC,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,eAAO,MAAM,iCAAiC,GAUJ,CAAC;;;;;;;;;;;;;wBA0GjC,KAAM;;;;;;;;;;wBAAN,KAAM;;eA1G0B,CAAC,AAP7B;qBAqBkB,uBAAuB,eACtB,6BAA6B;yBAnBzC,YAAY,CAIS,CAAC,AAJR,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,CAI5B,CAAC,AAJ6B,CAAC;iCAI5C,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,iBAAiB;6BActC,uBAAuB;8BACtB,6BAA6B;;;2BAUzC,SAAS;kCACF,SAAS;;QAkCnC;;WAEG;qDAGK,WAAW,GAAG,SAAS,GAC5B,OAAO,CAAC,IAAI,CAAC;+CAMR,oBAAoB,sBAEzB,OAAO,CAAC,IAAI,CAAC;;CAnEjB,CAAC;AAEF,8BAAsB,6BAA6B,CACjD,CAAC,SAAS,QAAQ,CAAC,OAAO,YAAY,CAAC,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,CACvE,YAAW,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;aAG3B,UAAU,EAAE,uBAAuB;aACnC,WAAW,EAAE,6BAA6B;aAC1C,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;aAC3D,WAAW,CAAC,EAAE,wBAAwB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAHvD,UAAU,EAAE,uBAAuB,EACnC,WAAW,EAAE,6BAA6B,EAC1C,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,EAC3D,WAAW,CAAC,EAAE,wBAAwB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAA;IAGzE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,iBAAiB;IAC3E,QAAQ,CAAC,SAAS,CAChB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GACxC,YAAY,CAAC,CAAC,CAAC;IAElB,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,eAAe,CAAC,QAAQ,EAAE,SAAS;IAI7B,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IA8BpC;;OAEG;IACG,OAAO,CACX,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAC7B,GAAG,CAAC,EAAE,WAAW,GAAG,SAAS,GAC5B,OAAO,CAAC,IAAI,CAAC;IAIV,IAAI,CACR,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,EAC1B,GAAG,CAAC,EAAE,oBAAoB,EAC1B,QAAQ,SAAI,GACX,OAAO,CAAC,IAAI,CAAC;CAkDjB"}
@@ -8,7 +8,10 @@ const MakeFlatFirestoreEsAggregateStore = (AGGREGATE) => {
8
8
  return AGGREGATE.loadFirst(event);
9
9
  }
10
10
  getAggregateStreamId(id) {
11
- return AGGREGATE.getAggregateStreamId(id);
11
+ return new core_1.AggregateStreamId({
12
+ aggregate: AGGREGATE.name,
13
+ id: id.toString(),
14
+ });
12
15
  }
13
16
  };
14
17
  };
@@ -52,7 +55,16 @@ class FlatFirestoreEsAggregateStore {
52
55
  }
53
56
  return instance;
54
57
  }
55
- async save(aggregate, attempts = 5) {
58
+ /**
59
+ * @deprecated
60
+ */
61
+ async saveAll(aggregates, trx) {
62
+ throw new Error("SaveAll not supported");
63
+ }
64
+ async save(aggregate, trx, attempts = 5) {
65
+ if (trx) {
66
+ throw new Error("Transactions are not supported in FlatFirestore");
67
+ }
56
68
  const streamId = this.getAggregateStreamId(aggregate.id);
57
69
  const changes = [...aggregate.changes];
58
70
  const serialized = await Promise.all(changes.map((event) => this.serializer.serialize(event)));
@@ -78,7 +90,7 @@ class FlatFirestoreEsAggregateStore {
78
90
  for (const change of changes) {
79
91
  pristine.apply(change);
80
92
  }
81
- return await this.save(pristine, attempts - 1);
93
+ return await this.save(pristine, trx, attempts - 1);
82
94
  }
83
95
  throw error;
84
96
  }
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.es-aggregate-store.js","sourceRoot":"","sources":["../../src/flat/firestore.es-aggregate-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"firestore.es-aggregate-store.js","sourceRoot":"","sources":["../../src/flat/firestore.es-aggregate-store.ts"],"names":[],"mappings":";;;AACA,uCASsB;AASf,MAAM,iCAAiC,GAAG,CAG/C,SAAY,EACZ,EAAE;IACF,OAAO,MAAM,8BAA+B,SAAQ,6BAAgC;QAClF,SAAS,CAAC,KAAyC;YACjD,OAAO,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QAED,oBAAoB,CAAC,EAAyB;YAC5C,OAAO,IAAI,wBAAiB,CAAC;gBAC3B,SAAS,EAAE,SAAS,CAAC,IAAI;gBACzB,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE;aAClB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,iCAAiC,qCAiB5C;AAEF,MAAsB,6BAA6B;IAK/B;IACA;IACA;IACA;IAJlB,YACkB,UAAmC,EACnC,WAA0C,EAC1C,UAA2D,EAC3D,WAAuD;QAHvD,eAAU,GAAV,UAAU,CAAyB;QACnC,gBAAW,GAAX,WAAW,CAA+B;QAC1C,eAAU,GAAV,UAAU,CAAiD;QAC3D,gBAAW,GAAX,WAAW,CAA4C;IACtE,CAAC;IAOJ,gBAAgB,CAAa;IAC7B,eAAe,CAAC,QAAmB;QACjC,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAyB;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAE/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAExD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,oBAAoB,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;YAE5D,IAAI,KAAK,EAAE,MAAM,UAAU,IAAI,MAAM,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,UAAiB,CAAC,CAAC;gBACnE,QAAQ,CAAC,IAAI,CAAC,KAAY,CAAC,CAAC;YAC9B,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,QAAQ,GAAgC,SAAS,CAAC;QACtD,IAAI,KAAK,EAAE,MAAM,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,UAAiB,CAAC,CAAC;YACnE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAY,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,KAAY,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,UAA6B,EAC7B,GAA6B;QAE7B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,IAAI,CACR,SAA0B,EAC1B,GAA0B,EAC1B,QAAQ,GAAG,CAAC;QAEZ,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAEvC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CACzD,CAAC;QAEF,MAAM,QAAQ,GAAG,SAAS,CAAC,oBAAoB,CAAC;QAEhD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBAC3C,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAC1B,QAAQ,EACR,UAAiB,EACjB,QAAQ,EACR,GAAG,CACJ,CAAC;gBAEF,SAAS,CAAC,kBAAkB,EAAE,CAAC;gBAC/B,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAE7C,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;oBACtB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;wBAC5B,MAAM,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC9C,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,uBAAgB,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACtD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAE/C,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBACpE,CAAC;gBAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACzB,CAAC;gBAED,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAnHD,sEAmHC"}
@@ -1,9 +1,10 @@
1
1
  import { type AggregateStreamId, type IChange, type IFact } from "@ddd-ts/core";
2
- import type { FirestoreTransaction } from "@ddd-ts/store-firestore";
2
+ import { type FirestoreTransaction } from "@ddd-ts/store-firestore";
3
3
  import * as fb from "firebase-admin";
4
4
  export declare class FlatFirestoreEventStore {
5
5
  readonly firestore: fb.firestore.Firestore;
6
- constructor(firestore: fb.firestore.Firestore);
6
+ readonly converter: fb.firestore.FirestoreDataConverter<fb.firestore.DocumentData>;
7
+ constructor(firestore: fb.firestore.Firestore, converter?: fb.firestore.FirestoreDataConverter<fb.firestore.DocumentData>);
7
8
  get aggregateCollection(): fb.firestore.CollectionReference<fb.firestore.DocumentData>;
8
9
  close(): Promise<void>;
9
10
  append(streamId: AggregateStreamId, changes: IChange[], expectedRevision: number, trx: FirestoreTransaction): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.event-store.d.ts","sourceRoot":"","sources":["../../src/flat/firestore.event-store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,OAAO,EACZ,KAAK,KAAK,EACX,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,qBAAa,uBAAuB;aACN,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS;gBAAjC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS;IAE7D,IAAI,mBAAmB,gEAEtB;IAEK,KAAK;IAEL,MAAM,CACV,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,OAAO,EAAE,EAClB,gBAAgB,EAAE,MAAM,EACxB,GAAG,EAAE,oBAAoB,GACxB,OAAO,CAAC,IAAI,CAAC;IAmCT,IAAI,CACT,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,CAAC,EAAE,MAAM,GACZ,aAAa,CAAC,KAAK,CAAC;CAsBxB"}
1
+ {"version":3,"file":"firestore.event-store.d.ts","sourceRoot":"","sources":["../../src/flat/firestore.event-store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,OAAO,EACZ,KAAK,KAAK,EACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,qBAAa,uBAAuB;aAEhB,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS;aACjC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC;gBADzE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,EACjC,SAAS,GAAE,EAAE,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,CAAC,SAAS,CAAC,YAAY,CAA0B;IAGpH,IAAI,mBAAmB,gEAEtB;IAEK,KAAK;IAEL,MAAM,CACV,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,OAAO,EAAE,EAClB,gBAAgB,EAAE,MAAM,EACxB,GAAG,EAAE,oBAAoB,GACxB,OAAO,CAAC,IAAI,CAAC;IAmCT,IAAI,CACT,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,CAAC,EAAE,MAAM,GACZ,aAAa,CAAC,KAAK,CAAC;CAsBxB"}
@@ -25,11 +25,14 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.FlatFirestoreEventStore = void 0;
27
27
  const core_1 = require("@ddd-ts/core");
28
+ const store_firestore_1 = require("@ddd-ts/store-firestore");
28
29
  const fb = __importStar(require("firebase-admin"));
29
30
  class FlatFirestoreEventStore {
30
31
  firestore;
31
- constructor(firestore) {
32
+ converter;
33
+ constructor(firestore, converter = new store_firestore_1.DefaultConverter()) {
32
34
  this.firestore = firestore;
35
+ this.converter = converter;
33
36
  }
34
37
  get aggregateCollection() {
35
38
  return this.firestore.collection("events");
@@ -46,7 +49,7 @@ class FlatFirestoreEventStore {
46
49
  }
47
50
  let revision = expectedRevision + 1;
48
51
  for (const change of changes) {
49
- trx.transaction.create(this.aggregateCollection.doc(change.id.toString()), {
52
+ trx.transaction.create(this.aggregateCollection.doc(change.id.toString()), this.converter.toFirestore({
50
53
  aggregateType: streamId.aggregate,
51
54
  id: change.id.toString(),
52
55
  aggregateId: streamId.id.toString(),
@@ -54,7 +57,7 @@ class FlatFirestoreEventStore {
54
57
  type: change.name,
55
58
  payload: change.payload,
56
59
  occurredAt: fb.firestore.FieldValue.serverTimestamp(),
57
- });
60
+ }));
58
61
  await new Promise((r) => setTimeout(r, 1)); // ensure occurredAt is unique
59
62
  revision++;
60
63
  }
@@ -69,13 +72,13 @@ class FlatFirestoreEventStore {
69
72
  }
70
73
  for await (const event of query.stream()) {
71
74
  const e = event;
72
- const data = e.data();
75
+ const data = this.converter.fromFirestore(e);
73
76
  yield {
74
77
  id: e.id,
75
78
  revision: data.revision,
76
79
  name: data.type,
77
80
  payload: data.payload,
78
- occurredAt: data.occurredAt.toDate(),
81
+ occurredAt: data.occurredAt,
79
82
  };
80
83
  }
81
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.event-store.js","sourceRoot":"","sources":["../../src/flat/firestore.event-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"firestore.event-store.js","sourceRoot":"","sources":["../../src/flat/firestore.event-store.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
- import { type AggregateStreamId, type IEventSourced, type ISerializer, type IIdentifiable } from "@ddd-ts/core";
2
- import type { FirestoreTransaction } from "@ddd-ts/store-firestore";
1
+ import { type IEventSourced, type ISerializer, type IIdentifiable } from "@ddd-ts/core";
2
+ import { type FirestoreTransaction } from "@ddd-ts/store-firestore";
3
3
  export declare class FlatFirestoreSnapshotter<A extends IEventSourced & IIdentifiable> {
4
4
  private readonly db;
5
5
  readonly serializer: ISerializer<A>;
6
- constructor(db: FirebaseFirestore.Firestore, serializer: ISerializer<A>);
7
- load(streamId: AggregateStreamId): Promise<A | undefined>;
6
+ readonly converter: FirebaseFirestore.FirestoreDataConverter<FirebaseFirestore.DocumentData>;
7
+ constructor(db: FirebaseFirestore.Firestore, serializer: ISerializer<A>, converter?: FirebaseFirestore.FirestoreDataConverter<FirebaseFirestore.DocumentData>);
8
+ load(id: A["id"]): Promise<A | undefined>;
8
9
  save(aggregate: A, trx: FirestoreTransaction): Promise<void>;
9
10
  }
10
11
  //# sourceMappingURL=firestore.snapshotter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.snapshotter.d.ts","sourceRoot":"","sources":["../../src/flat/firestore.snapshotter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,qBAAa,wBAAwB,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa;IAEzE,OAAO,CAAC,QAAQ,CAAC,EAAE;aACH,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;gBADzB,EAAE,EAAE,iBAAiB,CAAC,SAAS,EAChC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAGtC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAyBzD,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;CAanE"}
1
+ {"version":3,"file":"firestore.snapshotter.d.ts","sourceRoot":"","sources":["../../src/flat/firestore.snapshotter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,wBAAwB,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa;IAEzE,OAAO,CAAC,QAAQ,CAAC,EAAE;aACH,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;aAC1B,SAAS,EAAE,iBAAiB,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,YAAY,CAAC;gBAFlF,EAAE,EAAE,iBAAiB,CAAC,SAAS,EAChC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAC1B,SAAS,GAAE,iBAAiB,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,YAAY,CAA0B;IAGxH,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAyBzC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;CAanE"}
@@ -1,17 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FlatFirestoreSnapshotter = void 0;
4
+ const store_firestore_1 = require("@ddd-ts/store-firestore");
4
5
  class FlatFirestoreSnapshotter {
5
6
  db;
6
7
  serializer;
7
- constructor(db, serializer) {
8
+ converter;
9
+ constructor(db, serializer, converter = new store_firestore_1.DefaultConverter()) {
8
10
  this.db = db;
9
11
  this.serializer = serializer;
12
+ this.converter = converter;
10
13
  }
11
- async load(streamId) {
14
+ async load(id) {
12
15
  const query = await this.db
13
16
  .collection("snapshots")
14
- .where("id", "==", streamId.id.toString())
17
+ .where("id", "==", id.toString())
15
18
  .orderBy("revision", "desc")
16
19
  .limit(1)
17
20
  .get();
@@ -19,7 +22,7 @@ class FlatFirestoreSnapshotter {
19
22
  if (!document || !document.exists) {
20
23
  return undefined;
21
24
  }
22
- const snapshot = document.data();
25
+ const snapshot = this.converter.fromFirestore(document);
23
26
  if (!snapshot) {
24
27
  return undefined;
25
28
  }
@@ -31,11 +34,11 @@ class FlatFirestoreSnapshotter {
31
34
  const id = aggregate.id.toString();
32
35
  await trx.transaction.set(this.db
33
36
  .collection("snapshots")
34
- .doc(`${id.toString()}.${aggregate.acknowledgedRevision.toString()}`), {
37
+ .doc(`${id.toString()}.${aggregate.acknowledgedRevision.toString()}`), this.converter.toFirestore({
35
38
  id: id.toString(),
36
39
  revision: Number(aggregate.acknowledgedRevision),
37
40
  serialized: await this.serializer.serialize(aggregate),
38
- });
41
+ }));
39
42
  }
40
43
  }
41
44
  exports.FlatFirestoreSnapshotter = FlatFirestoreSnapshotter;
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.snapshotter.js","sourceRoot":"","sources":["../../src/flat/firestore.snapshotter.ts"],"names":[],"mappings":";;;AAQA,MAAa,wBAAwB;IAEhB;IACD;IAFlB,YACmB,EAA+B,EAChC,UAA0B;QADzB,OAAE,GAAF,EAAE,CAA6B;QAChC,eAAU,GAAV,UAAU,CAAgB;IACzC,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,QAA2B;QACpC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE;aACxB,UAAU,CAAC,WAAW,CAAC;aACvB,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;aACzC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;aAC3B,KAAK,CAAC,CAAC,CAAC;aACR,GAAG,EAAE,CAAC;QAET,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE/B,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEjC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACxE,QAAQ,CAAC,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAY,EAAE,GAAyB;QAChD,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,GAAG,CAAC,WAAW,CAAC,GAAG,CACvB,IAAI,CAAC,EAAE;aACJ,UAAU,CAAC,WAAW,CAAC;aACvB,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,SAAS,CAAC,oBAAoB,CAAC,QAAQ,EAAE,EAAE,CAAC,EACvE;YACE,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE;YACjB,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC;YAChD,UAAU,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC;SACvD,CACF,CAAC;IACJ,CAAC;CACF;AA5CD,4DA4CC"}
1
+ {"version":3,"file":"firestore.snapshotter.js","sourceRoot":"","sources":["../../src/flat/firestore.snapshotter.ts"],"names":[],"mappings":";;;AAKA,6DAGiC;AAEjC,MAAa,wBAAwB;IAEhB;IACD;IACA;IAHlB,YACmB,EAA+B,EAChC,UAA0B,EAC1B,YAAsF,IAAI,kCAAgB,EAAE;QAF3G,OAAE,GAAF,EAAE,CAA6B;QAChC,eAAU,GAAV,UAAU,CAAgB;QAC1B,cAAS,GAAT,SAAS,CAAmG;IAC3H,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,EAAW;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE;aACxB,UAAU,CAAC,WAAW,CAAC;aACvB,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC;aAChC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;aAC3B,KAAK,CAAC,CAAC,CAAC;aACR,GAAG,EAAE,CAAC;QAET,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE/B,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAExD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACxE,QAAQ,CAAC,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAY,EAAE,GAAyB;QAChD,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,GAAG,CAAC,WAAW,CAAC,GAAG,CACvB,IAAI,CAAC,EAAE;aACJ,UAAU,CAAC,WAAW,CAAC;aACvB,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,SAAS,CAAC,oBAAoB,CAAC,QAAQ,EAAE,EAAE,CAAC,EACvE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;YACzB,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE;YACjB,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC;YAChD,UAAU,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC;SACvD,CAAC,CACH,CAAC;IACJ,CAAC;CACF;AA7CD,4DA6CC"}
@@ -42,7 +42,7 @@ describe("NestedFirestore Bank Test", () => {
42
42
  const store = new store_firestore_1.FirestoreStore(name, firestore, serializer);
43
43
  return store;
44
44
  }, (AGGREGATE, serializer, eventsSerializers) => {
45
- const snapshotter = new firestore_snapshotter_1.NestedFirestoreSnapshotter(firestore, serializer);
45
+ const snapshotter = new firestore_snapshotter_1.NestedFirestoreSnapshotter(AGGREGATE.name, firestore, serializer);
46
46
  const Store = (0, firestore_es_aggregate_store_1.MakeNestedFirestoreEsAggregateStore)(AGGREGATE);
47
47
  const store = new Store(es, transaction, eventsSerializers, snapshotter);
48
48
  store.publishEventsTo(eventBus);
@@ -1 +1 @@
1
- {"version":3,"file":"bank.spec.js","sourceRoot":"","sources":["../../src/nested/bank.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,gBAAgB,CAAC;AAEvD,mDAAqC;AAErC,yCAA0C;AAC1C,uCAAgD;AAChD,6DAGiC;AAEjC,mEAAoE;AACpE,mEAAqE;AACrE,iFAAqF;AAErF,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAExB,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,MAAM,WAAW,GAAG,IAAI,+CAA6B,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,EAAE,GAAG,IAAI,iDAAyB,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,uBAAgB,EAAE,CAAC;IAExC,IAAA,iBAAS,EACP,QAAQ,EACR,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,IAAI,gCAAc,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAQ,CAAC;QACrE,OAAO,KAAK,CAAC;IACf,CAAC,EACD,CAAC,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE;QAC3C,MAAM,WAAW,GAAG,IAAI,kDAA0B,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,IAAA,kEAAmC,EAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;QACzE,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"bank.spec.js","sourceRoot":"","sources":["../../src/nested/bank.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,gBAAgB,CAAC;AAEvD,mDAAqC;AAErC,yCAA0C;AAC1C,uCAAgD;AAChD,6DAGiC;AAEjC,mEAAoE;AACpE,mEAAqE;AACrE,iFAAqF;AAErF,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAExB,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,MAAM,WAAW,GAAG,IAAI,+CAA6B,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,EAAE,GAAG,IAAI,iDAAyB,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,uBAAgB,EAAE,CAAC;IAExC,IAAA,iBAAS,EACP,QAAQ,EACR,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,IAAI,gCAAc,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAQ,CAAC;QACrE,OAAO,KAAK,CAAC;IACf,CAAC,EACD,CAAC,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE;QAC3C,MAAM,WAAW,GAAG,IAAI,kDAA0B,CAChD,SAAS,CAAC,IAAI,EACd,SAAS,EACT,UAAU,CACX,CAAC;QAEF,MAAM,KAAK,GAAG,IAAA,kEAAmC,EAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;QACzE,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -1,12 +1,11 @@
1
1
  import { HasTrait } from "@ddd-ts/traits";
2
- import { EventSourced, type AggregateStreamId, type Identifiable, type IEsAggregateStore, type IEventBus, type ISerializer } from "@ddd-ts/core";
3
- import type { FirestoreTransactionPerformer } from "@ddd-ts/store-firestore";
2
+ import { AggregateStreamId, EventSourced, type Identifiable, type IEsAggregateStore, type IEventBus, type ISerializer } from "@ddd-ts/core";
3
+ import type { FirestoreTransaction, FirestoreTransactionPerformer } from "@ddd-ts/store-firestore";
4
4
  import type { NestedFirestoreSnapshotter } from "./firestore.snapshotter";
5
5
  import type { NestedFirestoreEventStore } from "./firestore.event-store";
6
6
  export declare const MakeNestedFirestoreEsAggregateStore: <A extends Omit<(abstract new (props: {}) => {
7
7
  acknowledgedRevision: number;
8
8
  changes: import("@ddd-ts/core").IEsEvent<string, any>[];
9
- getAggregateStreamId(this: any): any;
10
9
  load(fact: import("@ddd-ts/core").IEsEvent<string, any>): void;
11
10
  apply(change: import("@ddd-ts/core").IEsEvent<string, any>): void;
12
11
  play(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
@@ -14,14 +13,12 @@ export declare const MakeNestedFirestoreEsAggregateStore: <A extends Omit<(abstr
14
13
  acknowledgeChanges(): void;
15
14
  }) & {
16
15
  events: import("@ddd-ts/types").Constructor<import("@ddd-ts/core").IEsEvent<string, any>>[];
17
- getAggregateStreamId(id: import("@ddd-ts/core").Identifier): AggregateStreamId;
18
16
  instanciate<TH extends import("@ddd-ts/types").Constructor>(this: TH, event: import("@ddd-ts/core").IEsEvent<string, any>): InstanceType<TH>;
19
17
  loadFirst<TH_1 extends import("@ddd-ts/types").Constructor>(this: TH_1, event: import("@ddd-ts/core").IEsEvent<string, any>): InstanceType<TH_1>;
20
18
  "new"<TH_2 extends import("@ddd-ts/types").Constructor>(this: TH_2, event: import("@ddd-ts/core").IEsEvent<string, any>): InstanceType<TH_2>;
21
19
  }, ""> & (new (...args: any[]) => {
22
20
  acknowledgedRevision: number;
23
21
  changes: import("@ddd-ts/core").IEsEvent<string, any>[];
24
- getAggregateStreamId(this: any): any;
25
22
  load(fact: import("@ddd-ts/core").IEsEvent<string, any>): void;
26
23
  apply(change: import("@ddd-ts/core").IEsEvent<string, any>): void;
27
24
  play(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
@@ -41,8 +38,11 @@ export declare const MakeNestedFirestoreEsAggregateStore: <A extends Omit<(abstr
41
38
  readonly snapshotter?: NestedFirestoreSnapshotter<InstanceType<A>> | undefined;
42
39
  _publishEventsTo?: IEventBus;
43
40
  publishEventsTo(eventBus: IEventBus): void;
41
+ loadFromSnapshot(snapshot: InstanceType<A>): Promise<InstanceType<A>>;
44
42
  load(id: InstanceType<A>["id"]): Promise<InstanceType<A> | undefined>;
45
- save(aggregate: InstanceType<A>, attempts?: number): Promise<void>;
43
+ performTransaction(trx: FirestoreTransaction | undefined, callback: (trx: FirestoreTransaction) => Promise<void>): Promise<void>;
44
+ saveAll(aggregates: InstanceType<A>[], parentTrx?: FirestoreTransaction, attempts?: number): Promise<void>;
45
+ save(aggregate: InstanceType<A>, trx?: FirestoreTransaction, attempts?: number): Promise<void>;
46
46
  };
47
47
  };
48
48
  export declare abstract class NestedFirestoreEsAggregateStore<A extends HasTrait<typeof EventSourced> & HasTrait<typeof Identifiable>> implements IEsAggregateStore<InstanceType<A>> {
@@ -55,7 +55,10 @@ export declare abstract class NestedFirestoreEsAggregateStore<A extends HasTrait
55
55
  abstract loadFirst(event: InstanceType<A>["changes"][number]): InstanceType<A>;
56
56
  _publishEventsTo?: IEventBus;
57
57
  publishEventsTo(eventBus: IEventBus): void;
58
+ loadFromSnapshot(snapshot: InstanceType<A>): Promise<InstanceType<A>>;
58
59
  load(id: InstanceType<A>["id"]): Promise<InstanceType<A> | undefined>;
59
- save(aggregate: InstanceType<A>, attempts?: number): Promise<void>;
60
+ performTransaction(trx: FirestoreTransaction | undefined, callback: (trx: FirestoreTransaction) => Promise<void>): Promise<void>;
61
+ saveAll(aggregates: InstanceType<A>[], parentTrx?: FirestoreTransaction, attempts?: number): Promise<void>;
62
+ save(aggregate: InstanceType<A>, trx?: FirestoreTransaction, attempts?: number): Promise<void>;
60
63
  }
61
64
  //# sourceMappingURL=firestore.es-aggregate-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.es-aggregate-store.d.ts","sourceRoot":"","sources":["../../src/nested/firestore.es-aggregate-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAEL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAE7E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEzE,eAAO,MAAM,mCAAmC,GAUN,CAAC;;;;;;;;;;;;;;;wBAqG1B,KAAM;;;;;;;;;;;wBAAN,KAAM;;eArGmB,CAAC,AAP7B;qBAkBkB,yBAAyB,eACxB,6BAA6B;yBAhBzC,YAAY,CAIS,CAAC,AAJR,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,CAI5B,CAAC,AAJ6B,CAAC;iCAI5C,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,iBAAiB;6BAWtC,yBAAyB;8BACxB,6BAA6B;;;2BAUzC,SAAS;kCACF,SAAS;;6DAoCoB,OAAO,CAAC,IAAI,CAAC;;CAvDrE,CAAC;AAEF,8BAAsB,+BAA+B,CACnD,CAAC,SAAS,QAAQ,CAAC,OAAO,YAAY,CAAC,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,CACvE,YAAW,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;aAG3B,UAAU,EAAE,yBAAyB;aACrC,WAAW,EAAE,6BAA6B;aAC1C,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;aAC3D,WAAW,CAAC,EAAE,0BAA0B,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAHzD,UAAU,EAAE,yBAAyB,EACrC,WAAW,EAAE,6BAA6B,EAC1C,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,EAC3D,WAAW,CAAC,EAAE,0BAA0B,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAA;IAG3E,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,iBAAiB;IAC3E,QAAQ,CAAC,SAAS,CAChB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GACxC,YAAY,CAAC,CAAC,CAAC;IAElB,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,eAAe,CAAC,QAAQ,EAAE,SAAS;IAI7B,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAgC9B,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,SAAK,GAAG,OAAO,CAAC,IAAI,CAAC;CAgDrE"}
1
+ {"version":3,"file":"firestore.es-aggregate-store.d.ts","sourceRoot":"","sources":["../../src/nested/firestore.es-aggregate-store.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,10 @@ const MakeNestedFirestoreEsAggregateStore = (AGGREGATE) => {
8
8
  return AGGREGATE.loadFirst(event);
9
9
  }
10
10
  getAggregateStreamId(id) {
11
- return AGGREGATE.getAggregateStreamId(id);
11
+ return new core_1.AggregateStreamId({
12
+ aggregate: AGGREGATE.name,
13
+ id: id.toString(),
14
+ });
12
15
  }
13
16
  };
14
17
  };
@@ -28,16 +31,20 @@ class NestedFirestoreEsAggregateStore {
28
31
  publishEventsTo(eventBus) {
29
32
  this._publishEventsTo = eventBus;
30
33
  }
34
+ async loadFromSnapshot(snapshot) {
35
+ const streamId = this.getAggregateStreamId(snapshot.id);
36
+ const stream = this.eventStore.read(streamId, snapshot.acknowledgedRevision + 1);
37
+ for await (const serialized of stream) {
38
+ const event = await this.serializer.deserialize(serialized);
39
+ snapshot.load(event);
40
+ }
41
+ return snapshot;
42
+ }
31
43
  async load(id) {
32
44
  const streamId = this.getAggregateStreamId(id);
33
- const snapshot = await this.snapshotter?.load(streamId);
45
+ const snapshot = await this.snapshotter?.load(id);
34
46
  if (snapshot) {
35
- const stream = this.eventStore.read(streamId, snapshot.acknowledgedRevision + 1);
36
- for await (const serialized of stream) {
37
- const event = await this.serializer.deserialize(serialized);
38
- snapshot.load(event);
39
- }
40
- return snapshot;
47
+ return this.loadFromSnapshot(snapshot);
41
48
  }
42
49
  let instance = undefined;
43
50
  for await (const serialized of this.eventStore.read(streamId)) {
@@ -51,38 +58,71 @@ class NestedFirestoreEsAggregateStore {
51
58
  }
52
59
  return instance;
53
60
  }
54
- async save(aggregate, attempts = 10) {
55
- const streamId = this.getAggregateStreamId(aggregate.id);
56
- const changes = [...aggregate.changes];
57
- const serialized = await Promise.all(changes.map((event) => this.serializer.serialize(event)));
58
- const acknowledgedRevision = aggregate.acknowledgedRevision;
61
+ performTransaction(trx, callback) {
62
+ return trx ? callback(trx) : this.transaction.perform(callback);
63
+ }
64
+ async saveAll(aggregates, parentTrx, attempts = 10) {
65
+ const toSave = await Promise.all(aggregates.map(async (aggregate) => ({
66
+ aggregate: aggregate,
67
+ streamId: this.getAggregateStreamId(aggregate.id),
68
+ changes: [...aggregate.changes],
69
+ serialized: await Promise.all(aggregate.changes.map((event) => this.serializer.serialize(event))),
70
+ acknowledgedRevision: aggregate.acknowledgedRevision,
71
+ })));
59
72
  try {
60
- await this.transaction.perform(async (trx) => {
61
- await this.eventStore.append(streamId, serialized, acknowledgedRevision, trx);
62
- aggregate.acknowledgeChanges();
63
- trx.onCommit(async () => {
64
- if (this._publishEventsTo) {
65
- for (const event of changes) {
66
- await this._publishEventsTo.publish(event);
73
+ await this.performTransaction(parentTrx, async (trx) => {
74
+ await this.eventStore.bulkAppend(toSave.map((save) => ({
75
+ streamId: save.streamId,
76
+ changes: save.serialized,
77
+ expectedRevision: save.acknowledgedRevision,
78
+ })), trx);
79
+ for (const save of toSave) {
80
+ save.aggregate.acknowledgeChanges();
81
+ }
82
+ if (!parentTrx) {
83
+ trx.onCommit(async () => {
84
+ if (this._publishEventsTo) {
85
+ for (const { changes } of toSave) {
86
+ for (const event of changes) {
87
+ await this._publishEventsTo.publish(event);
88
+ }
89
+ }
67
90
  }
68
- }
69
- });
70
- await this.snapshotter?.save(aggregate, trx);
91
+ });
92
+ }
93
+ await Promise.all(toSave.map((save) => this.snapshotter?.save(save.aggregate, trx)));
71
94
  });
72
95
  }
73
96
  catch (error) {
74
97
  if (error instanceof core_1.ConcurrencyError && attempts > 0) {
75
- const pristine = await this.load(aggregate.id);
76
- if (!pristine) {
77
- throw new Error("Invalid concurrency error, aggregate not found");
78
- }
79
- for (const change of changes) {
80
- pristine.apply(change);
81
- }
82
- return await this.save(pristine, attempts - 1);
98
+ const pristines = await Promise.all(toSave.map(async ({ aggregate, changes }) => {
99
+ const pristine = await this.load(aggregate.id);
100
+ if (!pristine) {
101
+ throw new Error("Invalid concurrency error, aggregate not found");
102
+ }
103
+ for (const change of changes) {
104
+ pristine.apply(change);
105
+ }
106
+ return pristine;
107
+ }));
108
+ return await this.saveAll(pristines, parentTrx, attempts - 1);
83
109
  }
84
110
  throw error;
85
111
  }
112
+ if (parentTrx) {
113
+ parentTrx.onCommit(async () => {
114
+ if (this._publishEventsTo) {
115
+ for (const { changes } of toSave) {
116
+ for (const event of changes) {
117
+ await this._publishEventsTo.publish(event);
118
+ }
119
+ }
120
+ }
121
+ });
122
+ }
123
+ }
124
+ async save(aggregate, trx, attempts = 10) {
125
+ return this.saveAll([aggregate], trx, attempts);
86
126
  }
87
127
  }
88
128
  exports.NestedFirestoreEsAggregateStore = NestedFirestoreEsAggregateStore;
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.es-aggregate-store.js","sourceRoot":"","sources":["../../src/nested/firestore.es-aggregate-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"firestore.es-aggregate-store.js","sourceRoot":"","sources":["../../src/nested/firestore.es-aggregate-store.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,20 @@
1
1
  import { AggregateStreamId, IChange, IFact } from "@ddd-ts/core";
2
- import type { FirestoreTransaction } from "@ddd-ts/store-firestore";
2
+ import { FirestoreTransaction } from "@ddd-ts/store-firestore";
3
3
  import * as fb from "firebase-admin";
4
4
  export declare class NestedFirestoreEventStore {
5
5
  readonly firestore: fb.firestore.Firestore;
6
- constructor(firestore: fb.firestore.Firestore);
6
+ readonly converter: fb.firestore.FirestoreDataConverter<fb.firestore.DocumentData>;
7
+ constructor(firestore: fb.firestore.Firestore, converter?: fb.firestore.FirestoreDataConverter<fb.firestore.DocumentData>);
7
8
  get collection(): fb.firestore.CollectionReference<fb.firestore.DocumentData>;
9
+ getStream(streamId: AggregateStreamId): fb.firestore.CollectionReference<fb.firestore.DocumentData>;
8
10
  close(): Promise<void>;
11
+ bulkAppend(toAppend: {
12
+ streamId: AggregateStreamId;
13
+ changes: IChange[];
14
+ expectedRevision: number;
15
+ }[], trx: FirestoreTransaction): Promise<void>;
16
+ private lockDocument;
17
+ private commitChanges;
9
18
  append(streamId: AggregateStreamId, changes: IChange[], expectedRevision: number, trx: FirestoreTransaction): Promise<void>;
10
19
  read(streamId: AggregateStreamId, from?: number): AsyncIterable<IFact>;
11
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.event-store.d.ts","sourceRoot":"","sources":["../../src/nested/firestore.event-store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAEjB,OAAO,EACP,KAAK,EACN,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,qBAAa,yBAAyB;aACR,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS;gBAAjC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS;IAE7D,IAAI,UAAU,gEAEb;IAEK,KAAK;IAEL,MAAM,CACV,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,OAAO,EAAE,EAClB,gBAAgB,EAAE,MAAM,EACxB,GAAG,EAAE,oBAAoB,GACxB,OAAO,CAAC,IAAI,CAAC;IA2CT,IAAI,CACT,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,CAAC,EAAE,MAAM,GACZ,aAAa,CAAC,KAAK,CAAC;CAuBxB"}
1
+ {"version":3,"file":"firestore.event-store.d.ts","sourceRoot":"","sources":["../../src/nested/firestore.event-store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAEjB,OAAO,EACP,KAAK,EACN,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,qBAAa,yBAAyB;aAElB,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS;aACjC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC;gBADzE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,EACjC,SAAS,GAAE,EAAE,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,CAAC,SAAS,CAAC,YAAY,CAA0B;IAGpH,IAAI,UAAU,gEAEb;IAED,SAAS,CAAC,QAAQ,EAAE,iBAAiB;IAQ/B,KAAK;IAEL,UAAU,CACd,QAAQ,EAAE;QACR,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,EAAE,EACH,GAAG,EAAE,oBAAoB;YAgBb,YAAY;YA2BZ,aAAa;IA0BrB,MAAM,CACV,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,OAAO,EAAE,EAClB,gBAAgB,EAAE,MAAM,EACxB,GAAG,EAAE,oBAAoB,GACxB,OAAO,CAAC,IAAI,CAAC;IAKT,IAAI,CACT,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,CAAC,EAAE,MAAM,GACZ,aAAa,CAAC,KAAK,CAAC;CAmBxB"}
@@ -25,35 +25,52 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.NestedFirestoreEventStore = void 0;
27
27
  const core_1 = require("@ddd-ts/core");
28
+ const store_firestore_1 = require("@ddd-ts/store-firestore");
28
29
  const fb = __importStar(require("firebase-admin"));
29
30
  class NestedFirestoreEventStore {
30
31
  firestore;
31
- constructor(firestore) {
32
+ converter;
33
+ constructor(firestore, converter = new store_firestore_1.DefaultConverter()) {
32
34
  this.firestore = firestore;
35
+ this.converter = converter;
33
36
  }
34
37
  get collection() {
35
38
  return this.firestore.collection("event-store");
36
39
  }
37
- async close() { }
38
- async append(streamId, changes, expectedRevision, trx) {
39
- const collection = this.collection
40
+ getStream(streamId) {
41
+ return this.collection
40
42
  .doc(streamId.aggregate)
41
43
  .collection("streams")
42
44
  .doc(streamId.id)
43
45
  .collection("events");
44
- const next = await trx.transaction.get(collection.doc(`${expectedRevision + 1}`));
45
- if (next.exists) {
46
+ }
47
+ async close() { }
48
+ async bulkAppend(toAppend, trx) {
49
+ await Promise.all(toAppend.map(async ({ streamId, expectedRevision }) => await this.lockDocument(streamId, expectedRevision, trx)));
50
+ await Promise.all(toAppend.map(async ({ streamId, changes, expectedRevision }) => {
51
+ await this.commitChanges(streamId, changes, expectedRevision, trx);
52
+ }));
53
+ }
54
+ async lockDocument(streamId, expectedRevision, trx) {
55
+ const collection = this.getStream(streamId);
56
+ const prevDocument = collection.doc(`${expectedRevision}`);
57
+ const targetDocument = collection.doc(`${expectedRevision + 1}`);
58
+ const target = await trx.transaction.get(targetDocument);
59
+ if (target.exists) {
46
60
  throw new core_1.ConcurrencyError(`Concurrency error on ${streamId.aggregate} ${streamId.id}`);
47
61
  }
48
62
  if (expectedRevision > -1) {
49
- const lastEvent = await trx.transaction.get(collection.doc(`${expectedRevision}`));
50
- if (!lastEvent.exists) {
63
+ const previous = await trx.transaction.get(prevDocument);
64
+ if (!previous.exists) {
51
65
  throw new Error(`Expected revision ${expectedRevision} not found for ${streamId.aggregate} ${streamId.id}`);
52
66
  }
53
67
  }
68
+ }
69
+ async commitChanges(streamId, changes, expectedRevision, trx) {
70
+ const collection = this.getStream(streamId);
54
71
  let revision = expectedRevision + 1;
55
72
  for (const change of changes) {
56
- trx.transaction.create(collection.doc(`${revision}`), {
73
+ trx.transaction.create(collection.doc(`${revision}`), this.converter.toFirestore({
57
74
  aggregateType: streamId.aggregate,
58
75
  eventId: change.id.toString(),
59
76
  aggregateId: streamId.id.toString(),
@@ -61,28 +78,28 @@ class NestedFirestoreEventStore {
61
78
  name: change.name,
62
79
  payload: change.payload,
63
80
  occurredAt: fb.firestore.FieldValue.serverTimestamp(),
64
- });
81
+ }));
65
82
  revision++;
66
83
  }
67
84
  }
85
+ async append(streamId, changes, expectedRevision, trx) {
86
+ await this.lockDocument(streamId, expectedRevision, trx);
87
+ await this.commitChanges(streamId, changes, expectedRevision, trx);
88
+ }
68
89
  async *read(streamId, from) {
69
- const collection = this.collection
70
- .doc(streamId.aggregate)
71
- .collection("streams")
72
- .doc(streamId.id)
73
- .collection("events");
90
+ const collection = this.getStream(streamId);
74
91
  const query = collection
75
92
  .where("revision", ">=", from || 0)
76
93
  .orderBy("revision", "asc");
77
94
  for await (const event of query.stream()) {
78
95
  const e = event;
79
- const data = e.data();
96
+ const data = this.converter.fromFirestore(e);
80
97
  yield {
81
98
  id: data.eventId,
82
99
  revision: data.revision,
83
100
  name: data.name,
84
101
  payload: data.payload,
85
- occurredAt: data.occurredAt.toDate(),
102
+ occurredAt: data.occurredAt,
86
103
  };
87
104
  }
88
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.event-store.js","sourceRoot":"","sources":["../../src/nested/firestore.event-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"firestore.event-store.js","sourceRoot":"","sources":["../../src/nested/firestore.event-store.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,12 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ 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;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
18
24
  var __importStar = (this && this.__importStar) || function (mod) {
19
25
  if (mod && mod.__esModule) return mod;
20
26
  var result = {};
@@ -25,11 +31,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
31
  Object.defineProperty(exports, "__esModule", { value: true });
26
32
  process.env.FIRESTORE_EMULATOR_HOST = "localhost:8080";
27
33
  const fb = __importStar(require("firebase-admin"));
34
+ const core_1 = require("@ddd-ts/core");
28
35
  const store_firestore_1 = require("@ddd-ts/store-firestore");
29
36
  const tests_1 = require("@ddd-ts/tests");
30
37
  const firestore_event_store_1 = require("./firestore.event-store");
31
38
  const firestore_es_aggregate_store_1 = require("./firestore.es-aggregate-store");
32
39
  const firestore_snapshotter_1 = require("./firestore.snapshotter");
40
+ const dist_1 = require("../../../shape/dist");
33
41
  jest.setTimeout(10000);
34
42
  describe("NestedFirestoreEventStore", () => {
35
43
  const app = fb.initializeApp({
@@ -39,10 +47,207 @@ describe("NestedFirestoreEventStore", () => {
39
47
  const transaction = new store_firestore_1.FirestoreTransactionPerformer(firestore);
40
48
  const eventStore = new firestore_event_store_1.NestedFirestoreEventStore(firestore);
41
49
  function makeAggregateStore(AGGREGATE, eventSerializer, serializer) {
42
- const snapshotter = new firestore_snapshotter_1.NestedFirestoreSnapshotter(firestore, serializer);
50
+ const snapshotter = new firestore_snapshotter_1.NestedFirestoreSnapshotter(AGGREGATE.name, firestore, serializer);
43
51
  const Store = (0, firestore_es_aggregate_store_1.MakeNestedFirestoreEsAggregateStore)(AGGREGATE);
44
52
  return new Store(eventStore, transaction, eventSerializer, snapshotter);
45
53
  }
46
54
  (0, tests_1.EsAggregateStoreSuite)(makeAggregateStore);
55
+ it("should support saveAll with transactions", async () => {
56
+ class MockEventBus {
57
+ off() {
58
+ throw new Error("Method not implemented.");
59
+ }
60
+ on() {
61
+ throw new Error("Method not implemented.");
62
+ }
63
+ events = [];
64
+ publish(event) {
65
+ this.events.push(event);
66
+ return Promise.resolve();
67
+ }
68
+ }
69
+ class AccountOpened extends (0, core_1.EsEvent)("AccountOpened", {
70
+ id: String,
71
+ index: Number,
72
+ registryId: String,
73
+ }) {
74
+ }
75
+ class Account extends (0, core_1.EsAggregate)("Account", {
76
+ events: [AccountOpened],
77
+ state: {
78
+ id: String,
79
+ index: Number,
80
+ balance: Number,
81
+ registryId: String,
82
+ },
83
+ }) {
84
+ static onAccountOpened(event) {
85
+ return new Account({
86
+ id: event.payload.id,
87
+ index: event.payload.index,
88
+ balance: 0,
89
+ registryId: event.payload.registryId,
90
+ });
91
+ }
92
+ static open(registryId, index) {
93
+ return this.new(AccountOpened.new({
94
+ id: Math.random().toString(36).slice(2),
95
+ index,
96
+ registryId,
97
+ }));
98
+ }
99
+ }
100
+ __decorate([
101
+ (0, core_1.On)(AccountOpened)
102
+ ], Account, "onAccountOpened", null);
103
+ class AccountRegistry extends (0, dist_1.Shape)({
104
+ id: String,
105
+ index: Number,
106
+ }) {
107
+ increment(shouldFailInMiddle = false) {
108
+ this.index++;
109
+ if (this.index > 10 && shouldFailInMiddle) {
110
+ throw new Error("Too many accounts");
111
+ }
112
+ return this.index;
113
+ }
114
+ static new() {
115
+ return new AccountRegistry({
116
+ id: Math.random().toString().slice(2),
117
+ index: 0,
118
+ });
119
+ }
120
+ }
121
+ const registryStore = new store_firestore_1.FirestoreStore("account-registry", firestore, new ((0, core_1.AutoSerializer)(AccountRegistry, 1))());
122
+ const accountStore = new ((0, firestore_es_aggregate_store_1.MakeNestedFirestoreEsAggregateStore)(Account))(eventStore, transaction, new core_1.SerializerRegistry().add(AccountOpened, new ((0, core_1.AutoSerializer)(AccountOpened, 1))()), new firestore_snapshotter_1.NestedFirestoreSnapshotter(Account.name, firestore, new ((0, core_1.AutoSerializer)(Account, 1))()));
123
+ const eventBus = new MockEventBus();
124
+ accountStore.publishEventsTo(eventBus);
125
+ const registry = AccountRegistry.new();
126
+ await registryStore.save(registry);
127
+ let willFailForAttempt = 3;
128
+ await transaction.perform(async (trx) => {
129
+ willFailForAttempt--;
130
+ const reg = await registryStore.load(registry.id, trx);
131
+ const accounts = [...Array(30).keys()].map((i) => Account.open(registry.id, reg.increment(willFailForAttempt === 0)));
132
+ await accountStore.saveAll(accounts, trx);
133
+ await registryStore.save(reg, trx);
134
+ });
135
+ const freshRegistry = await registryStore.load(registry.id);
136
+ expect(freshRegistry.index).toBe(30);
137
+ const result = await accountStore.snapshotter?.collection
138
+ .where("registryId", "==", registry.id)
139
+ .get();
140
+ const documents = result?.docs.map((doc) => doc.data());
141
+ expect(documents?.length).toBe(30);
142
+ const indices = documents
143
+ ?.map((doc) => Number(doc.index))
144
+ .sort((a, b) => a - b);
145
+ expect(indices).toEqual([
146
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
147
+ 22, 23, 24, 25, 26, 27, 28, 29, 30,
148
+ ]);
149
+ expect(eventBus.events.length).toBe(30);
150
+ });
151
+ it("should support saveAll with transactions", async () => {
152
+ class MockEventBus {
153
+ off() {
154
+ throw new Error("Method not implemented.");
155
+ }
156
+ on() {
157
+ throw new Error("Method not implemented.");
158
+ }
159
+ events = [];
160
+ publish(event) {
161
+ this.events.push(event);
162
+ return Promise.resolve();
163
+ }
164
+ }
165
+ class AccountOpened extends (0, core_1.EsEvent)("AccountOpened", {
166
+ id: String,
167
+ index: Number,
168
+ registryId: String,
169
+ }) {
170
+ }
171
+ class Account extends (0, core_1.EsAggregate)("Account", {
172
+ events: [AccountOpened],
173
+ state: {
174
+ id: String,
175
+ index: Number,
176
+ balance: Number,
177
+ registryId: String,
178
+ },
179
+ }) {
180
+ static onAccountOpened(event) {
181
+ return new Account({
182
+ id: event.payload.id,
183
+ index: event.payload.index,
184
+ balance: 0,
185
+ registryId: event.payload.registryId,
186
+ });
187
+ }
188
+ static open(registryId, index) {
189
+ return this.new(AccountOpened.new({
190
+ id: Math.random().toString(36).slice(2),
191
+ index,
192
+ registryId,
193
+ }));
194
+ }
195
+ }
196
+ __decorate([
197
+ (0, core_1.On)(AccountOpened)
198
+ ], Account, "onAccountOpened", null);
199
+ class AccountRegistry extends (0, dist_1.Shape)({
200
+ id: String,
201
+ index: Number,
202
+ }) {
203
+ increment(shouldFailInMiddle = false) {
204
+ this.index++;
205
+ if (this.index > 10 && shouldFailInMiddle) {
206
+ throw new Error("Too many accounts");
207
+ }
208
+ return this.index;
209
+ }
210
+ static new() {
211
+ return new AccountRegistry({
212
+ id: Math.random().toString().slice(2),
213
+ index: 0,
214
+ });
215
+ }
216
+ }
217
+ const registryStore = new store_firestore_1.FirestoreStore("account-registry", firestore, new ((0, core_1.AutoSerializer)(AccountRegistry, 1))());
218
+ const accountStore = new ((0, firestore_es_aggregate_store_1.MakeNestedFirestoreEsAggregateStore)(Account))(eventStore, transaction, new core_1.SerializerRegistry().add(AccountOpened, new ((0, core_1.AutoSerializer)(AccountOpened, 1))()), new firestore_snapshotter_1.NestedFirestoreSnapshotter(Account.name, firestore, new ((0, core_1.AutoSerializer)(Account, 1))()));
219
+ const eventBus = new MockEventBus();
220
+ accountStore.publishEventsTo(eventBus);
221
+ const registry = AccountRegistry.new();
222
+ await registryStore.save(registry);
223
+ await Promise.all([
224
+ transaction.perform(async (trx) => {
225
+ const reg = await registryStore.load(registry.id, trx);
226
+ await new Promise((resolve) => setTimeout(resolve, 100));
227
+ const account = Account.open(registry.id, reg.increment());
228
+ await accountStore.save(account, trx);
229
+ await registryStore.save(reg, trx);
230
+ }),
231
+ transaction.perform(async (trx) => {
232
+ await new Promise((resolve) => setTimeout(resolve, 40));
233
+ const reg = await registryStore.load(registry.id, trx);
234
+ const account = Account.open(registry.id, reg.increment());
235
+ await accountStore.save(account, trx);
236
+ await registryStore.save(reg, trx);
237
+ }),
238
+ ]);
239
+ const freshRegistry = await registryStore.load(registry.id);
240
+ expect(freshRegistry.index).toBe(2);
241
+ const result = await accountStore.snapshotter?.collection
242
+ .where("registryId", "==", registry.id)
243
+ .get();
244
+ const documents = result?.docs.map((doc) => doc.data());
245
+ expect(documents?.length).toBe(2);
246
+ const indices = documents
247
+ ?.map((doc) => Number(doc.index))
248
+ .sort((a, b) => a - b);
249
+ expect(indices).toEqual([1, 2]);
250
+ expect(eventBus.events.length).toBe(2);
251
+ });
47
252
  });
48
253
  //# sourceMappingURL=firestore.event-store.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.event-store.spec.js","sourceRoot":"","sources":["../../src/nested/firestore.event-store.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,gBAAgB,CAAC;AAEvD,mDAAqC;AAIrC,6DAAwE;AACxE,yCAAsD;AAEtD,mEAAoE;AACpE,iFAAqF;AACrF,mEAAqE;AAErE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAEvB,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,MAAM,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC;QAC3B,SAAS,EAAE,SAAS;KACrB,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;IAElC,MAAM,WAAW,GAAG,IAAI,+CAA6B,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,IAAI,iDAAyB,CAAC,SAAS,CAAC,CAAC;IAE5D,SAAS,kBAAkB,CAGzB,SAAY,EACZ,eAAgE,EAChE,UAAwC;QAExC,MAAM,WAAW,GAAG,IAAI,kDAA0B,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,IAAA,kEAAmC,EAAC,SAAS,CAAC,CAAC;QAC7D,OAAO,IAAI,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;IAC1E,CAAC;IAED,IAAA,6BAAqB,EAAC,kBAAkB,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"firestore.event-store.spec.js","sourceRoot":"","sources":["../../src/nested/firestore.event-store.spec.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,7 @@
1
- import { type AggregateStreamId, type IEventSourced, type IIdentifiable, type ISerializer } from "@ddd-ts/core";
2
- import type { FirestoreTransaction } from "@ddd-ts/store-firestore";
3
- export declare class NestedFirestoreSnapshotter<A extends IEventSourced & IIdentifiable> {
4
- private readonly db;
5
- readonly serializer: ISerializer<A>;
6
- constructor(db: FirebaseFirestore.Firestore, serializer: ISerializer<A>);
7
- load(streamId: AggregateStreamId): Promise<A | undefined>;
8
- save(aggregate: A, trx: FirestoreTransaction): Promise<void>;
1
+ import { type IEventSourced, type IIdentifiable, type ISerializer } from "@ddd-ts/core";
2
+ import { FirestoreStore } from "@ddd-ts/store-firestore";
3
+ export declare class NestedFirestoreSnapshotter<A extends IEventSourced & IIdentifiable> extends FirestoreStore<A> {
4
+ private readonly aggregate;
5
+ constructor(aggregate: string, db: FirebaseFirestore.Firestore, serializer: ISerializer<A>, converter?: FirebaseFirestore.FirestoreDataConverter<FirebaseFirestore.DocumentData>);
9
6
  }
10
7
  //# sourceMappingURL=firestore.snapshotter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.snapshotter.d.ts","sourceRoot":"","sources":["../../src/nested/firestore.snapshotter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,qBAAa,0BAA0B,CACrC,CAAC,SAAS,aAAa,GAAG,aAAa;IAGrC,OAAO,CAAC,QAAQ,CAAC,EAAE;aACH,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;gBADzB,EAAE,EAAE,iBAAiB,CAAC,SAAS,EAChC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAGtC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAuBzD,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;CAenE"}
1
+ {"version":3,"file":"firestore.snapshotter.d.ts","sourceRoot":"","sources":["../../src/nested/firestore.snapshotter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,qBAAa,0BAA0B,CACrC,CAAC,SAAS,aAAa,GAAG,aAAa,CACvC,SAAQ,cAAc,CAAC,CAAC,CAAC;IAEvB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,MAAM,EAClC,EAAE,EAAE,iBAAiB,CAAC,SAAS,EAC/B,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAC1B,SAAS,CAAC,EAAE,iBAAiB,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,YAAY,CAAC;CA2BvF"}
@@ -1,41 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NestedFirestoreSnapshotter = void 0;
4
- class NestedFirestoreSnapshotter {
5
- db;
6
- serializer;
7
- constructor(db, serializer) {
8
- this.db = db;
9
- this.serializer = serializer;
10
- }
11
- async load(streamId) {
12
- const document = await this.db
13
- .collection("event-store")
14
- .doc(streamId.aggregate)
15
- .collection("streams")
16
- .doc(streamId.id)
17
- .get();
18
- if (!document || !document.exists) {
19
- return undefined;
20
- }
21
- const snapshot = document.data();
22
- if (!snapshot) {
23
- return undefined;
24
- }
25
- const instance = await this.serializer.deserialize(snapshot.content);
26
- instance.acknowledgedRevision = Number(snapshot.revision);
27
- return instance;
28
- }
29
- async save(aggregate, trx) {
30
- const streamId = aggregate.getAggregateStreamId();
31
- trx.transaction.set(this.db
4
+ const store_firestore_1 = require("@ddd-ts/store-firestore");
5
+ class NestedFirestoreSnapshotter extends store_firestore_1.FirestoreStore {
6
+ aggregate;
7
+ constructor(aggregate, db, serializer, converter) {
8
+ super("irrelevant", 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
+ }, converter);
22
+ this.aggregate = aggregate;
23
+ this.collection = db
32
24
  .collection("event-store")
33
- .doc(streamId.aggregate)
25
+ .doc(this.aggregate)
34
26
  .collection("streams")
35
- .doc(streamId.id), {
36
- revision: aggregate.acknowledgedRevision,
37
- content: await this.serializer.serialize(aggregate),
38
- });
27
+ .withConverter(this.converter);
39
28
  }
40
29
  }
41
30
  exports.NestedFirestoreSnapshotter = NestedFirestoreSnapshotter;
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.snapshotter.js","sourceRoot":"","sources":["../../src/nested/firestore.snapshotter.ts"],"names":[],"mappings":";;;AAQA,MAAa,0BAA0B;IAIlB;IACD;IAFlB,YACmB,EAA+B,EAChC,UAA0B;QADzB,OAAE,GAAF,EAAE,CAA6B;QAChC,eAAU,GAAV,UAAU,CAAgB;IACzC,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,QAA2B;QACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,EAAE;aAC3B,UAAU,CAAC,aAAa,CAAC;aACzB,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;aACvB,UAAU,CAAC,SAAS,CAAC;aACrB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;aAChB,GAAG,EAAE,CAAC;QAET,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEjC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAc,CAAC,CAAC;QAC5E,QAAQ,CAAC,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAY,EAAE,GAAyB;QAChD,MAAM,QAAQ,GAAG,SAAS,CAAC,oBAAoB,EAAE,CAAC;QAElD,GAAG,CAAC,WAAW,CAAC,GAAG,CACjB,IAAI,CAAC,EAAE;aACJ,UAAU,CAAC,aAAa,CAAC;aACzB,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;aACvB,UAAU,CAAC,SAAS,CAAC;aACrB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EACnB;YACE,QAAQ,EAAE,SAAS,CAAC,oBAAoB;YACxC,OAAO,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC;SACpD,CACF,CAAC;IACJ,CAAC;CACF;AA9CD,gEA8CC"}
1
+ {"version":3,"file":"firestore.snapshotter.js","sourceRoot":"","sources":["../../src/nested/firestore.snapshotter.ts"],"names":[],"mappings":";;;AAKA,6DAAyD;AAEzD,MAAa,0BAEX,SAAQ,gCAAiB;IAEN;IADnB,YACmB,SAAiB,EAClC,EAA+B,EAC/B,UAA0B,EAC1B,SAAoF;QAEpF,KAAK,CACH,YAAY,EACZ,EAAE,EACF;YACE,WAAW,EAAE,KAAK,EAAE,UAAe,EAAE,EAAE;gBACrC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,GAAG,UAAU,CAAC;gBAC5C,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACvD,QAAQ,CAAC,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACjD,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,SAAS,EAAE,KAAK,EAAE,QAAW,EAAE,EAAE;gBAC/B,OAAO;oBACL,QAAQ,EAAE,QAAQ,CAAC,oBAAoB;oBACvC,GAAG,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;iBAC1C,CAAC;YACJ,CAAC;SACF,EACD,SAAS,CACV,CAAC;QAvBe,cAAS,GAAT,SAAS,CAAQ;QAwBlC,IAAI,CAAC,UAAU,GAAG,EAAE;aACjB,UAAU,CAAC,aAAa,CAAC;aACzB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;aACnB,UAAU,CAAC,SAAS,CAAC;aACrB,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;CACF;AAlCD,gEAkCC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ddd-ts/event-sourcing-firestore",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "MIT",
@@ -12,16 +12,16 @@
12
12
  "build": "tsc"
13
13
  },
14
14
  "dependencies": {
15
- "@ddd-ts/core": "0.0.13",
16
- "@ddd-ts/traits": "0.0.13",
17
- "@ddd-ts/types": "0.0.13",
15
+ "@ddd-ts/core": "0.0.14",
16
+ "@ddd-ts/traits": "0.0.14",
17
+ "@ddd-ts/types": "0.0.14",
18
18
  "firebase-admin": "^11.5.0"
19
19
  },
20
20
  "devDependencies": {
21
- "@ddd-ts/store-firestore": "0.0.13",
22
- "@ddd-ts/tests": "0.0.13",
23
- "@ddd-ts/tools": "0.0.13",
24
- "@ddd-ts/types": "0.0.13",
21
+ "@ddd-ts/store-firestore": "0.0.14",
22
+ "@ddd-ts/tests": "0.0.14",
23
+ "@ddd-ts/tools": "0.0.14",
24
+ "@ddd-ts/types": "0.0.14",
25
25
  "@types/jest": "^29.5.1"
26
26
  }
27
27
  }