@ddd-ts/event-sourcing-firestore 0.0.37 → 0.0.39

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 (93) hide show
  1. package/LICENSE +21 -0
  2. package/dist/_virtual/_rolldown/runtime.js +29 -0
  3. package/dist/firestore.event-lake.aggregate-store.d.ts +35 -0
  4. package/dist/firestore.event-lake.aggregate-store.d.ts.map +1 -0
  5. package/dist/firestore.event-lake.aggregate-store.js +38 -0
  6. package/dist/firestore.event-lake.aggregate-store.mjs +36 -0
  7. package/dist/firestore.event-lake.aggregate-store.spec.d.ts +2 -0
  8. package/dist/firestore.event-lake.aggregate-store.spec.d.ts.map +1 -0
  9. package/dist/firestore.event-lake.storage-layer.d.ts +14 -0
  10. package/dist/firestore.event-lake.storage-layer.d.ts.map +1 -0
  11. package/dist/firestore.event-lake.storage-layer.js +67 -0
  12. package/dist/firestore.event-lake.storage-layer.mjs +65 -0
  13. package/dist/firestore.event-lake.store.d.ts +6 -0
  14. package/dist/firestore.event-lake.store.d.ts.map +1 -0
  15. package/dist/firestore.event-lake.store.js +14 -0
  16. package/dist/firestore.event-lake.store.mjs +13 -0
  17. package/dist/firestore.event-lake.store.spec.d.ts +2 -0
  18. package/dist/firestore.event-lake.store.spec.d.ts.map +1 -0
  19. package/dist/firestore.event-stream-store.spec.d.ts +2 -0
  20. package/dist/firestore.event-stream-store.spec.d.ts.map +1 -0
  21. package/dist/firestore.event-stream.aggregate-store.d.ts +30 -0
  22. package/dist/firestore.event-stream.aggregate-store.d.ts.map +1 -0
  23. package/dist/firestore.event-stream.aggregate-store.js +38 -0
  24. package/dist/firestore.event-stream.aggregate-store.mjs +36 -0
  25. package/dist/firestore.event-stream.aggregate-store.spec.d.ts +2 -0
  26. package/dist/firestore.event-stream.aggregate-store.spec.d.ts.map +1 -0
  27. package/dist/firestore.event-stream.storage-layer.d.ts +15 -0
  28. package/dist/firestore.event-stream.storage-layer.d.ts.map +1 -0
  29. package/dist/firestore.event-stream.storage-layer.js +67 -0
  30. package/dist/firestore.event-stream.storage-layer.mjs +65 -0
  31. package/dist/firestore.event-stream.store.d.ts +6 -0
  32. package/dist/firestore.event-stream.store.d.ts.map +1 -0
  33. package/dist/firestore.event-stream.store.js +14 -0
  34. package/dist/firestore.event-stream.store.mjs +13 -0
  35. package/dist/firestore.projected-stream.reader.d.ts +13 -0
  36. package/dist/firestore.projected-stream.reader.d.ts.map +1 -0
  37. package/dist/firestore.projected-stream.reader.js +35 -0
  38. package/dist/firestore.projected-stream.reader.mjs +34 -0
  39. package/dist/firestore.projected-stream.reader.spec.d.ts +2 -0
  40. package/dist/firestore.projected-stream.reader.spec.d.ts.map +1 -0
  41. package/dist/firestore.projected-stream.storage-layer.d.ts +31 -0
  42. package/dist/firestore.projected-stream.storage-layer.d.ts.map +1 -0
  43. package/dist/firestore.projected-stream.storage-layer.js +121 -0
  44. package/dist/firestore.projected-stream.storage-layer.mjs +118 -0
  45. package/dist/firestore.snapshotter.d.ts +6 -0
  46. package/dist/firestore.snapshotter.d.ts.map +1 -0
  47. package/dist/firestore.snapshotter.js +36 -0
  48. package/dist/firestore.snapshotter.mjs +35 -0
  49. package/dist/index.d.ts +11 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +30 -0
  52. package/dist/index.mjs +12 -0
  53. package/dist/projection/cases/attempts.spec.d.ts +2 -0
  54. package/dist/projection/cases/attempts.spec.d.ts.map +1 -0
  55. package/dist/projection/cases/batchlast.spec.d.ts +2 -0
  56. package/dist/projection/cases/batchlast.spec.d.ts.map +1 -0
  57. package/dist/projection/cases/bigshuffle.spec.d.ts +2 -0
  58. package/dist/projection/cases/bigshuffle.spec.d.ts.map +1 -0
  59. package/dist/projection/cases/burst.spec.d.ts +2 -0
  60. package/dist/projection/cases/burst.spec.d.ts.map +1 -0
  61. package/dist/projection/cases/claimtimeout.spec.d.ts +2 -0
  62. package/dist/projection/cases/claimtimeout.spec.d.ts.map +1 -0
  63. package/dist/projection/cases/concurrency.spec.d.ts +2 -0
  64. package/dist/projection/cases/concurrency.spec.d.ts.map +1 -0
  65. package/dist/projection/cases/deduplicate.spec.d.ts +2 -0
  66. package/dist/projection/cases/deduplicate.spec.d.ts.map +1 -0
  67. package/dist/projection/cases/defer.spec.d.ts +2 -0
  68. package/dist/projection/cases/defer.spec.d.ts.map +1 -0
  69. package/dist/projection/cases/lock.spec.d.ts +2 -0
  70. package/dist/projection/cases/lock.spec.d.ts.map +1 -0
  71. package/dist/projection/cases/skip.spec.d.ts +2 -0
  72. package/dist/projection/cases/skip.spec.d.ts.map +1 -0
  73. package/dist/projection/cases/stress.spec.d.ts +2 -0
  74. package/dist/projection/cases/stress.spec.d.ts.map +1 -0
  75. package/dist/projection/event-coordinator.d.ts +16 -0
  76. package/dist/projection/event-coordinator.d.ts.map +1 -0
  77. package/dist/projection/event-coordinator.js +47 -0
  78. package/dist/projection/event-coordinator.mjs +47 -0
  79. package/dist/projection/firestore.projector.d.ts +128 -0
  80. package/dist/projection/firestore.projector.d.ts.map +1 -0
  81. package/dist/projection/firestore.projector.js +538 -0
  82. package/dist/projection/firestore.projector.mjs +533 -0
  83. package/dist/projection/testkit/case-fixture.d.ts +610 -0
  84. package/dist/projection/testkit/case-fixture.d.ts.map +1 -0
  85. package/dist/projection/testkit.d.ts +44 -0
  86. package/dist/projection/testkit.d.ts.map +1 -0
  87. package/dist/projection/trace.decorator.d.ts +2 -0
  88. package/dist/projection/trace.decorator.d.ts.map +1 -0
  89. package/dist/utils/promise-with-resolvers.d.ts +7 -0
  90. package/dist/utils/promise-with-resolvers.d.ts.map +1 -0
  91. package/dist/utils/promise-with-resolvers.js +17 -0
  92. package/dist/utils/promise-with-resolvers.mjs +16 -0
  93. package/package.json +43 -41
@@ -0,0 +1,610 @@
1
+ import * as fb from "firebase-admin";
2
+ import { Firestore } from "firebase-admin/firestore";
3
+ import { ESProjection, ProjectedStream, CheckpointId, Lock } from "@ddd-ts/core";
4
+ import { FirestoreTransactionPerformer, FirestoreTransaction, FirestoreStore } from "@ddd-ts/store-firestore";
5
+ import { FirestoreProjectedStreamReader } from "../../firestore.projected-stream.reader";
6
+ import { FirestoreProjector, FirestoreQueueStore } from "../firestore.projector";
7
+ import { Cashflow } from "@ddd-ts/core/dist/projections/spec/cashflow/cashflow";
8
+ export declare const locks: {
9
+ wholeAccount: (e: any) => Lock;
10
+ accountAndEventId: (e: any) => Lock;
11
+ rename: (e: any) => Lock;
12
+ };
13
+ export declare const traits: {
14
+ Transaction: () => {
15
+ factory: (base: import("@ddd-ts/traits").ApplyTraits<readonly [{
16
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
17
+ description: {};
18
+ context: {};
19
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
20
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
21
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
22
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
23
+ };
24
+ superTraits: import("@ddd-ts/traits").Trait[];
25
+ symbol: symbol;
26
+ }]>, Props: {}) => abstract new (props: {
27
+ transaction: import("@ddd-ts/core").TransactionPerformer<any>;
28
+ }) => {
29
+ description: import("@ddd-ts/core/dist/projections/handlers/description").Description<{
30
+ name: "withTransaction";
31
+ process: "transactionally";
32
+ }>;
33
+ props: {
34
+ transaction: import("@ddd-ts/core").TransactionPerformer<any>;
35
+ };
36
+ context: {
37
+ trx: any;
38
+ };
39
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
40
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
41
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {
42
+ trx: any;
43
+ }): Promise<void>;
44
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
45
+ };
46
+ superTraits: readonly [{
47
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
48
+ description: {};
49
+ context: {};
50
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
51
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
52
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
53
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
54
+ };
55
+ superTraits: import("@ddd-ts/traits").Trait[];
56
+ symbol: symbol;
57
+ }];
58
+ symbol: symbol;
59
+ };
60
+ Context: () => {
61
+ factory: (base: import("@ddd-ts/traits").ApplyTraits<readonly [{
62
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
63
+ description: {};
64
+ context: {};
65
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
66
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
67
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
68
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
69
+ };
70
+ superTraits: import("@ddd-ts/traits").Trait[];
71
+ symbol: symbol;
72
+ }]>) => abstract new (param: {}) => {
73
+ description: import("@ddd-ts/core/dist/projections/handlers/description").Description<{
74
+ name: "WithContext";
75
+ process: "with async context";
76
+ }>;
77
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
78
+ context: {};
79
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
80
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
81
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
82
+ };
83
+ superTraits: readonly [{
84
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
85
+ description: {};
86
+ context: {};
87
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
88
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
89
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
90
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
91
+ };
92
+ superTraits: import("@ddd-ts/traits").Trait[];
93
+ symbol: symbol;
94
+ }];
95
+ symbol: symbol;
96
+ };
97
+ Suspense: () => {
98
+ factory: (base: import("@ddd-ts/traits").ApplyTraits<readonly [{
99
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
100
+ description: {};
101
+ context: {};
102
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
103
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
104
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
105
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
106
+ };
107
+ superTraits: import("@ddd-ts/traits").Trait[];
108
+ symbol: symbol;
109
+ }]>) => abstract new (props: {
110
+ transaction: import("@ddd-ts/core").TransactionPerformer;
111
+ }) => {
112
+ description: import("@ddd-ts/core/dist/projections/handlers/description").Description<{
113
+ name: "withSuspense";
114
+ before_process: "block if an event is suspended";
115
+ }>;
116
+ transaction: import("@ddd-ts/core").TransactionPerformer;
117
+ context: {
118
+ transaction: import("@ddd-ts/core").Transaction;
119
+ };
120
+ suspended: Map<string, (suspension: {
121
+ resume: () => void;
122
+ fail: (err?: any) => void;
123
+ }) => void>;
124
+ suspend(event: import("@ddd-ts/core").IEsEvent | import("@ddd-ts/core").EventId): Promise<{
125
+ resume: () => void;
126
+ fail: (err?: any) => void;
127
+ }>;
128
+ releases: Map<string, {
129
+ resolve: () => void;
130
+ reject: (err: any) => void;
131
+ }>;
132
+ resume(event: import("@ddd-ts/core").IEsEvent | import("@ddd-ts/core").EventId): void;
133
+ fail(event: import("@ddd-ts/core").IEsEvent | import("@ddd-ts/core").EventId, error?: any): void;
134
+ shouldFail: Set<string>;
135
+ markFailing(event: import("@ddd-ts/core").IEsEvent | import("@ddd-ts/core").EventId): () => void;
136
+ _intercept(event: import("@ddd-ts/core").IEsEvent): Promise<void>;
137
+ _memory: [import("@ddd-ts/core").IEsEvent, "before" | "after"][];
138
+ _remember_before(events: import("@ddd-ts/core").IEsEvent[]): void;
139
+ _remember_after(events: import("@ddd-ts/core").IEsEvent[]): void;
140
+ prettyMemory(): string[];
141
+ process(events: import("@ddd-ts/core").IEsEvent[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
142
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
143
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {
144
+ transaction: import("@ddd-ts/core").Transaction;
145
+ }): Promise<void>;
146
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
147
+ };
148
+ superTraits: readonly [{
149
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
150
+ description: {};
151
+ context: {};
152
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
153
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
154
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
155
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
156
+ };
157
+ superTraits: import("@ddd-ts/traits").Trait[];
158
+ symbol: symbol;
159
+ }];
160
+ symbol: symbol;
161
+ };
162
+ Parallel: () => {
163
+ factory: (base: import("@ddd-ts/traits").ApplyTraits<readonly [{
164
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
165
+ description: {};
166
+ context: {};
167
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
168
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
169
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
170
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
171
+ };
172
+ superTraits: import("@ddd-ts/traits").Trait[];
173
+ symbol: symbol;
174
+ }]>) => abstract new (param: {}) => {
175
+ description: import("@ddd-ts/core/dist/projections/handlers/description").Description<{
176
+ name: "WithParallel";
177
+ process: "await parallel for (const event of events)";
178
+ handle: "call handleOne for the event";
179
+ }>;
180
+ handleOne(event: import("@ddd-ts/core").IEsEvent<string, any>, context: {}): Promise<void>;
181
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
182
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: any): Promise<import("@ddd-ts/core").EventId[]>;
183
+ context: {};
184
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
185
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
186
+ };
187
+ superTraits: readonly [{
188
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
189
+ description: {};
190
+ context: {};
191
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
192
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
193
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
194
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
195
+ };
196
+ superTraits: import("@ddd-ts/traits").Trait[];
197
+ symbol: symbol;
198
+ }];
199
+ symbol: symbol;
200
+ };
201
+ Sequential: () => {
202
+ factory: (base: import("@ddd-ts/traits").ApplyTraits<readonly [{
203
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
204
+ description: {};
205
+ context: {};
206
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
207
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
208
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
209
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
210
+ };
211
+ superTraits: import("@ddd-ts/traits").Trait[];
212
+ symbol: symbol;
213
+ }]>) => abstract new (param: {}) => {
214
+ description: import("@ddd-ts/core/dist/projections/handlers/description").Description<{
215
+ name: "WithSequential";
216
+ process: "for await (const event of events)";
217
+ handle: "call handleOne for the event";
218
+ }>;
219
+ handleOne(event: import("@ddd-ts/core").IEsEvent<string, any>, context: {}): Promise<void>;
220
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
221
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: any): Promise<import("@ddd-ts/core").EventId[]>;
222
+ context: {};
223
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
224
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
225
+ };
226
+ superTraits: readonly [{
227
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
228
+ description: {};
229
+ context: {};
230
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
231
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
232
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
233
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
234
+ };
235
+ superTraits: import("@ddd-ts/traits").Trait[];
236
+ symbol: symbol;
237
+ }];
238
+ symbol: symbol;
239
+ };
240
+ LocalRetry: (attempts: number, delay: number) => {
241
+ factory: (base: import("@ddd-ts/traits").ApplyTraits<readonly [{
242
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
243
+ description: {};
244
+ context: {};
245
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
246
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
247
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
248
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
249
+ };
250
+ superTraits: import("@ddd-ts/traits").Trait[];
251
+ symbol: symbol;
252
+ }]>) => abstract new (param: {}) => {
253
+ description: import("@ddd-ts/core/dist/projections/handlers/description").Description<{
254
+ name: "WithLocalRetry";
255
+ process: `try ${number} times with ${number}ms delay`;
256
+ }>;
257
+ context: {
258
+ retryCount: number;
259
+ };
260
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
261
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
262
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {
263
+ retryCount: number;
264
+ }): Promise<void>;
265
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
266
+ };
267
+ superTraits: readonly [{
268
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
269
+ description: {};
270
+ context: {};
271
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
272
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
273
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
274
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
275
+ };
276
+ superTraits: import("@ddd-ts/traits").Trait[];
277
+ symbol: symbol;
278
+ }];
279
+ symbol: symbol;
280
+ };
281
+ LocalTimeout: (ms: number) => {
282
+ factory: (base: import("@ddd-ts/traits").ApplyTraits<readonly [{
283
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
284
+ description: {};
285
+ context: {};
286
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
287
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
288
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
289
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
290
+ };
291
+ superTraits: import("@ddd-ts/traits").Trait[];
292
+ symbol: symbol;
293
+ }]>) => abstract new (param: {}) => {
294
+ description: import("@ddd-ts/core/dist/projections/handlers/description").Description<{
295
+ name: "WithLocalTimeout";
296
+ process: `timeout after ${number}ms of processing`;
297
+ }>;
298
+ timeout: number;
299
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
300
+ context: {};
301
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
302
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
303
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
304
+ };
305
+ superTraits: readonly [{
306
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
307
+ description: {};
308
+ context: {};
309
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
310
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
311
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
312
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
313
+ };
314
+ superTraits: import("@ddd-ts/traits").Trait[];
315
+ symbol: symbol;
316
+ }];
317
+ symbol: symbol;
318
+ };
319
+ ClaimTimeout: (ms: number) => {
320
+ factory: (base: import("@ddd-ts/traits").ApplyTraits<readonly [{
321
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
322
+ description: {};
323
+ context: {};
324
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
325
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
326
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
327
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
328
+ };
329
+ superTraits: import("@ddd-ts/traits").Trait[];
330
+ symbol: symbol;
331
+ }]>) => abstract new (param: {}) => {
332
+ description: import("@ddd-ts/core/dist/projections/handlers/description").Description<{
333
+ name: "WithClaimTimeout";
334
+ after_process: `queue: unclaims after ${number}ms of claiming`;
335
+ }>;
336
+ getClaimTimeout(event: import("@ddd-ts/core").IEsEvent<string, any>): number;
337
+ context: {};
338
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
339
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
340
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
341
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
342
+ };
343
+ superTraits: readonly [{
344
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
345
+ description: {};
346
+ context: {};
347
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
348
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
349
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
350
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
351
+ };
352
+ superTraits: import("@ddd-ts/traits").Trait[];
353
+ symbol: symbol;
354
+ }];
355
+ symbol: symbol;
356
+ };
357
+ Delay: (ms: number) => {
358
+ factory: (base: import("@ddd-ts/traits").ApplyTraits<readonly [{
359
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
360
+ description: {};
361
+ context: {};
362
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
363
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
364
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
365
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
366
+ };
367
+ superTraits: import("@ddd-ts/traits").Trait[];
368
+ symbol: symbol;
369
+ }]>) => abstract new (param: {}) => {
370
+ description: import("@ddd-ts/core/dist/projections/handlers/description").Description<{
371
+ name: "WithDelay";
372
+ process: `sleep ${number}ms before handling`;
373
+ }>;
374
+ delayMs: number;
375
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
376
+ context: {};
377
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
378
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
379
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
380
+ };
381
+ superTraits: readonly [{
382
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
383
+ description: {};
384
+ context: {};
385
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
386
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
387
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
388
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
389
+ };
390
+ superTraits: import("@ddd-ts/traits").Trait[];
391
+ symbol: symbol;
392
+ }];
393
+ symbol: symbol;
394
+ };
395
+ SkipAfter: (ms: number) => {
396
+ factory: (base: import("@ddd-ts/traits").ApplyTraits<readonly [{
397
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
398
+ description: {};
399
+ context: {};
400
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
401
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
402
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
403
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
404
+ };
405
+ superTraits: import("@ddd-ts/traits").Trait[];
406
+ symbol: symbol;
407
+ }]>) => abstract new (param: {}) => {
408
+ description: import("@ddd-ts/core/dist/projections/handlers/description").Description<{
409
+ name: "WithSkipAfter";
410
+ before_process: `queue: skipped if ${number} failed attempts`;
411
+ }>;
412
+ getSkipAfter(event: import("@ddd-ts/core").IEsEvent<string, any>): number;
413
+ context: {};
414
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
415
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
416
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
417
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
418
+ };
419
+ superTraits: readonly [{
420
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
421
+ description: {};
422
+ context: {};
423
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
424
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
425
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
426
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
427
+ };
428
+ superTraits: import("@ddd-ts/traits").Trait[];
429
+ symbol: symbol;
430
+ }];
431
+ symbol: symbol;
432
+ };
433
+ IsolateAfter: (ms: number) => {
434
+ factory: (base: import("@ddd-ts/traits").ApplyTraits<readonly [{
435
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
436
+ description: {};
437
+ context: {};
438
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
439
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
440
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
441
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
442
+ };
443
+ superTraits: import("@ddd-ts/traits").Trait[];
444
+ symbol: symbol;
445
+ }]>) => abstract new (param: {}) => {
446
+ description: import("@ddd-ts/core/dist/projections/handlers/description").Description<{
447
+ name: "WithIsolateAfter";
448
+ before_process: `queue: isolates after ${number} failed attempts`;
449
+ }>;
450
+ getIsolateAfter(event: import("@ddd-ts/core").IEsEvent<string, any>): number;
451
+ context: {};
452
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
453
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
454
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
455
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
456
+ };
457
+ superTraits: readonly [{
458
+ factory: (base: import("@ddd-ts/traits").AbstractConstructor<{}, {}>) => abstract new (props: {}) => {
459
+ description: {};
460
+ context: {};
461
+ event: import("@ddd-ts/core").IEsEvent<string, any>;
462
+ handle(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<void>;
463
+ locks(event: import("@ddd-ts/core").IEsEvent<string, any>): any;
464
+ process(events: import("@ddd-ts/core").IEsEvent<string, any>[], context: {}): Promise<import("@ddd-ts/core").EventId[]>;
465
+ };
466
+ superTraits: import("@ddd-ts/traits").Trait[];
467
+ symbol: symbol;
468
+ }];
469
+ symbol: symbol;
470
+ };
471
+ };
472
+ export declare const runtimeTrace: {
473
+ entries: Array<{
474
+ id: string;
475
+ phase: "start" | "finish";
476
+ t: number;
477
+ }>;
478
+ reset(): void;
479
+ };
480
+ type TraitCtor = any;
481
+ type HandlerRecipe = {
482
+ chain: TraitCtor[];
483
+ lock: (e: any) => Lock;
484
+ };
485
+ export declare function cashflowDefaults(): {
486
+ override(overrides: Partial<Record<string, HandlerRecipe>>): {
487
+ overrides: Partial<Record<string, HandlerRecipe>>;
488
+ };
489
+ toHandlers(): any;
490
+ };
491
+ declare class CashflowDocStore extends FirestoreStore<Cashflow> {
492
+ constructor(db: Firestore, collName: string);
493
+ init(accountId: any, event?: {
494
+ id: {
495
+ serialize(): string;
496
+ };
497
+ }, context?: Partial<{
498
+ trx: FirestoreTransaction;
499
+ }>): Promise<void>;
500
+ increment(accountId: any, amount: number, event?: {
501
+ id: {
502
+ serialize(): string;
503
+ };
504
+ }, context?: Partial<{
505
+ trx: FirestoreTransaction;
506
+ }>): Promise<void>;
507
+ rename(accountId: any, newName: string, event?: {
508
+ id: {
509
+ serialize(): string;
510
+ };
511
+ }, context?: Partial<{
512
+ trx: FirestoreTransaction;
513
+ }>): Promise<void>;
514
+ }
515
+ declare const AccountStore_base: {
516
+ new (firestore: Firestore, serializer: import("@ddd-ts/core").ISerializer<any, {}> & import("@ddd-ts/core").ISerializer<import("@ddd-ts/core").IEsEvent<string, any>, {}>, eventBus?: import("@ddd-ts/core").IEventBus): {
517
+ loadFirst(event: import("@ddd-ts/core").IEsEvent<string, any> & import("@ddd-ts/core").INamed<string>): any;
518
+ getStreamId(id: any): import("@ddd-ts/core").StreamId;
519
+ readonly firestore: Firestore;
520
+ readonly serializer: import("@ddd-ts/core").ISerializer<import("@ddd-ts/core").IEsEvent<string, any>, {}>;
521
+ readonly snapshotter: import("../..").FirestoreSnapshotter<any>;
522
+ readonly eventBus?: import("@ddd-ts/core").IEventBus | undefined;
523
+ readonly streamStore: import("@ddd-ts/core").EventStreamStore<import("@ddd-ts/core").IEsEvent<string, any>>;
524
+ readonly transaction: import("@ddd-ts/core").TransactionPerformer;
525
+ loadFromSnapshot(snapshot: any): Promise<any>;
526
+ loadFromScratch(id: any): Promise<any>;
527
+ loadForce(id: any): Promise<any>;
528
+ load(id: any): Promise<any>;
529
+ saveAll(aggregates: any[], parentTrx?: import("@ddd-ts/core").Transaction, attempts?: number): Promise<void>;
530
+ save(aggregate: any, trx?: import("@ddd-ts/core").Transaction, attempts?: number): Promise<void>;
531
+ };
532
+ };
533
+ declare class AccountStore extends AccountStore_base {
534
+ constructor(firestore: Firestore);
535
+ }
536
+ declare class CashflowCaseProjection extends ESProjection<any, any> {
537
+ readonly trx: FirestoreTransactionPerformer;
538
+ readonly store: CashflowDocStore;
539
+ source: ProjectedStream;
540
+ constructor(trx: FirestoreTransactionPerformer, store: CashflowDocStore, recipes: {
541
+ Deposited: HandlerRecipe;
542
+ Withdrawn: HandlerRecipe;
543
+ AccountRenamed: HandlerRecipe;
544
+ AccountOpened: HandlerRecipe;
545
+ });
546
+ getSource(): ProjectedStream;
547
+ getCheckpointId(e: any): CheckpointId;
548
+ get testhandlers(): any;
549
+ }
550
+ export declare function caseFixture(caseName: string, opts?: {
551
+ handlers?: {
552
+ Deposited?: HandlerRecipe;
553
+ Withdrawn?: HandlerRecipe;
554
+ AccountRenamed?: HandlerRecipe;
555
+ AccountOpened?: HandlerRecipe;
556
+ };
557
+ projector?: {
558
+ unclaimOnFailure?: boolean;
559
+ retry?: {
560
+ attempts: number;
561
+ minDelay: number;
562
+ maxDelay: number;
563
+ backoff?: number;
564
+ };
565
+ enqueue?: {
566
+ batchSize: number;
567
+ };
568
+ };
569
+ }): {
570
+ name: string;
571
+ describe: (fn: () => any) => void;
572
+ setup(): Promise<{
573
+ readonly db: fb.firestore.Firestore;
574
+ readonly accountStore: AccountStore;
575
+ readonly cashflowStore: CashflowDocStore;
576
+ readonly projection: CashflowCaseProjection;
577
+ readonly reader: FirestoreProjectedStreamReader<any>;
578
+ readonly queueStore: FirestoreQueueStore;
579
+ readonly projector: FirestoreProjector;
580
+ readonly trace: {
581
+ entries: Array<{
582
+ id: string;
583
+ phase: "start" | "finish";
584
+ t: number;
585
+ }>;
586
+ reset(): void;
587
+ };
588
+ readonly events: {
589
+ open: (name: string) => any;
590
+ };
591
+ readonly act: {
592
+ save: (account: any) => Promise<void>;
593
+ handle: (event: any) => Promise<void>;
594
+ };
595
+ readonly control: {
596
+ markFailing: (event: any) => any;
597
+ suspend: (event: any) => any;
598
+ wait: (ms: number) => Promise<unknown>;
599
+ };
600
+ readonly assert: {
601
+ cashflow: (id: any) => {
602
+ toHave(partial: any): Promise<void>;
603
+ toNotExist(): Promise<void>;
604
+ };
605
+ fetch(id: any): Promise<Cashflow | undefined>;
606
+ };
607
+ }>;
608
+ };
609
+ export {};
610
+ //# sourceMappingURL=case-fixture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"case-fixture.d.ts","sourceRoot":"","sources":["../../../src/projection/testkit/case-fixture.ts"],"names":[],"mappings":"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"}