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

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 (85) 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/firestore.projector.d.ts +130 -0
  76. package/dist/projection/firestore.projector.d.ts.map +1 -0
  77. package/dist/projection/firestore.projector.js +484 -0
  78. package/dist/projection/firestore.projector.mjs +479 -0
  79. package/dist/projection/testkit/case-fixture.d.ts +610 -0
  80. package/dist/projection/testkit/case-fixture.d.ts.map +1 -0
  81. package/dist/projection/testkit.d.ts +44 -0
  82. package/dist/projection/testkit.d.ts.map +1 -0
  83. package/dist/projection/trace.decorator.d.ts +2 -0
  84. package/dist/projection/trace.decorator.d.ts.map +1 -0
  85. package/package.json +43 -41
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigshuffle.spec.d.ts","sourceRoot":"","sources":["../../../src/projection/cases/bigshuffle.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=burst.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"burst.spec.d.ts","sourceRoot":"","sources":["../../../src/projection/cases/burst.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=claimtimeout.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claimtimeout.spec.d.ts","sourceRoot":"","sources":["../../../src/projection/cases/claimtimeout.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=concurrency.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency.spec.d.ts","sourceRoot":"","sources":["../../../src/projection/cases/concurrency.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=deduplicate.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deduplicate.spec.d.ts","sourceRoot":"","sources":["../../../src/projection/cases/deduplicate.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=defer.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defer.spec.d.ts","sourceRoot":"","sources":["../../../src/projection/cases/defer.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lock.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.spec.d.ts","sourceRoot":"","sources":["../../../src/projection/cases/lock.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=skip.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skip.spec.d.ts","sourceRoot":"","sources":["../../../src/projection/cases/skip.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stress.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stress.spec.d.ts","sourceRoot":"","sources":["../../../src/projection/cases/stress.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,130 @@
1
+ import { Firestore, WriteBatch } from "firebase-admin/firestore";
2
+ import { type IEsEvent, type ISavedChange, EventId, ProjectedStreamReader, Cursor, CheckpointId, ESProjection, type IFact, type Serialized, Lock } from "@ddd-ts/core";
3
+ import { MicrosecondTimestamp } from "@ddd-ts/shape";
4
+ import { DefaultConverter, FirestoreTransaction } from "@ddd-ts/store-firestore";
5
+ export declare class FirestoreProjector {
6
+ readonly projection: ESProjection<IEsEvent>;
7
+ readonly reader: ProjectedStreamReader<IEsEvent>;
8
+ readonly queue: FirestoreQueueStore;
9
+ config: {
10
+ retry: {
11
+ attempts: number;
12
+ minDelay: number;
13
+ maxDelay: number;
14
+ backoff: number;
15
+ };
16
+ enqueue: {
17
+ batchSize: number;
18
+ };
19
+ onProcessError: (error: Error) => void;
20
+ onEnqueueError: (error: Error) => void;
21
+ };
22
+ _unclaim: boolean;
23
+ constructor(projection: ESProjection<IEsEvent>, reader: ProjectedStreamReader<IEsEvent>, queue: FirestoreQueueStore, config?: {
24
+ retry: {
25
+ attempts: number;
26
+ minDelay: number;
27
+ maxDelay: number;
28
+ backoff: number;
29
+ };
30
+ enqueue: {
31
+ batchSize: number;
32
+ };
33
+ onProcessError: (error: Error) => void;
34
+ onEnqueueError: (error: Error) => void;
35
+ });
36
+ breathe(): AsyncGenerator<readonly [number, () => void], void, unknown>;
37
+ handle(savedChange: ISavedChange<IEsEvent>): Promise<void>;
38
+ private getCursor;
39
+ private attempt;
40
+ private getQueueHead;
41
+ private readSourceStream;
42
+ private enqueue;
43
+ private enqueueOne;
44
+ private checkIsProcessed;
45
+ private getUnprocessed;
46
+ private claimTasks;
47
+ private processEvents;
48
+ }
49
+ export declare class AlreadyEnqueuedError extends Error {
50
+ constructor();
51
+ }
52
+ export declare class FirestoreQueueStore {
53
+ db: Firestore;
54
+ converter: DefaultConverter<FirebaseFirestore.DocumentData>;
55
+ collection: FirebaseFirestore.CollectionReference;
56
+ constructor(db: Firestore);
57
+ private timestampToMicroseconds;
58
+ private microsecondsToTimestamp;
59
+ enqueue(checkpointId: CheckpointId, tasks: Task<false>[]): Promise<readonly ["OK", "Tasks enqueued successfully"] | readonly ["DEFERRED", any]>;
60
+ claim(checkpointId: CheckpointId, claimer: ClaimerId, tasks: Task<true>[]): Promise<void>;
61
+ head(checkpointId: CheckpointId): Promise<Cursor | undefined>;
62
+ unprocessed(checkpointId: CheckpointId): Promise<Task<true>[]>;
63
+ claimed(checkpointId: CheckpointId, claimer: ClaimerId): Promise<Task<true>[]>;
64
+ unclaim(checkpointId: CheckpointId, tasks: Task<true>[]): Promise<void>;
65
+ /**
66
+ * If the task exists, then looks for a processed flag.
67
+ * If not found, check if the cursor is older than the retention time for processed event.
68
+ * If so, consider it processed.
69
+ * Otherwise, consider it missing.
70
+ */
71
+ isProcessed(checkpointId: CheckpointId, cursor: Cursor): Promise<"ENQUEUED" | "PROCESSED" | "MISSING">;
72
+ checkpoint(id: CheckpointId): FirebaseFirestore.CollectionReference<FirebaseFirestore.DocumentData, FirebaseFirestore.DocumentData>;
73
+ queue(id: CheckpointId): FirebaseFirestore.CollectionReference<FirebaseFirestore.DocumentData, FirebaseFirestore.DocumentData>;
74
+ queued(id: CheckpointId, eventId: EventId): FirebaseFirestore.DocumentReference<FirebaseFirestore.DocumentData, FirebaseFirestore.DocumentData>;
75
+ processed(id: CheckpointId, eventIds: EventId[], context?: {
76
+ transaction?: FirestoreTransaction;
77
+ batchWriter?: WriteBatch;
78
+ }): Promise<void>;
79
+ getTailCursor(id: CheckpointId): Promise<Cursor | undefined>;
80
+ cleanup(id: CheckpointId): Promise<void>;
81
+ flush(id: CheckpointId): Promise<void>;
82
+ /**
83
+ * This method adds a fake processed event to the queue.
84
+ * It is useful for initializing the tail cursor of a new projection, at the
85
+ * same time as the projection's initial state is created, reset, or updated.
86
+ * By default, it will use the current time as the occurredAt timestamp.
87
+ * You can override this by providing a specific timestamp.
88
+ *
89
+ * This ensures that the projection can start processing new events from the
90
+ * correct point in time, avoiding reprocessing of old events.
91
+ */
92
+ seed(checkpointId: CheckpointId): Promise<void>;
93
+ }
94
+ export declare class ClaimerId extends EventId {
95
+ }
96
+ declare const Task_base: import("@ddd-ts/shape").IDict<{
97
+ readonly id: typeof EventId;
98
+ readonly ref: StringConstructor;
99
+ readonly occurredAt: typeof MicrosecondTimestamp;
100
+ readonly revision: NumberConstructor;
101
+ readonly attempts: NumberConstructor;
102
+ readonly processed: BooleanConstructor;
103
+ readonly claimer: import("@ddd-ts/shape").IOptional<StringConstructor, typeof import("@ddd-ts/shape").Empty>;
104
+ readonly claimedAt: import("@ddd-ts/shape").IOptional<typeof MicrosecondTimestamp, typeof import("@ddd-ts/shape").Empty>;
105
+ readonly lock: typeof Lock;
106
+ readonly skipAfter: NumberConstructor;
107
+ readonly remaining: NumberConstructor;
108
+ readonly isolateAfter: NumberConstructor;
109
+ readonly claimTimeout: NumberConstructor;
110
+ readonly lastUpdateTime: import("@ddd-ts/shape").IOptional<typeof MicrosecondTimestamp, typeof import("@ddd-ts/shape").Empty>;
111
+ }, typeof import("@ddd-ts/shape").Empty>;
112
+ export declare class Task<Stored extends boolean> extends Task_base {
113
+ lastUpdateTime: Stored extends true ? MicrosecondTimestamp : undefined;
114
+ get cursor(): Cursor;
115
+ static new(fact: IFact, config: {
116
+ lock: Lock;
117
+ claimTimeout: number;
118
+ skipAfter: number;
119
+ isolateAfter: number;
120
+ }): Task<false>;
121
+ get isProcessing(): boolean;
122
+ get isProcessed(): boolean;
123
+ get shouldSkip(): boolean;
124
+ get shouldIsolate(): boolean;
125
+ checkTimeout(): void;
126
+ static deserializeWithLastUpdateTime(data: Omit<Serialized<Task<true>>, "lastUpdateTime">, timestamp?: MicrosecondTimestamp): Task<true>;
127
+ static batch(tasks: Task<true>[]): Task<true>[];
128
+ }
129
+ export {};
130
+ //# sourceMappingURL=firestore.projector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firestore.projector.d.ts","sourceRoot":"","sources":["../../src/projection/firestore.projector.ts"],"names":[],"mappings":"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"}