@requence/event-sourcing 0.0.1 → 1.0.0

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 (154) hide show
  1. package/LICENSE +21 -0
  2. package/dist/chunk-24xjphpk.js +51 -0
  3. package/dist/chunk-24xjphpk.js.map +10 -0
  4. package/dist/chunk-3t1vzbab.js +88 -0
  5. package/dist/chunk-3t1vzbab.js.map +10 -0
  6. package/dist/chunk-6q8mr1sg.js +13 -0
  7. package/dist/chunk-6q8mr1sg.js.map +10 -0
  8. package/dist/chunk-9psg50cb.js +22 -0
  9. package/dist/chunk-9psg50cb.js.map +10 -0
  10. package/dist/chunk-dgzw1nj9.js +50 -0
  11. package/dist/chunk-dgzw1nj9.js.map +10 -0
  12. package/dist/chunk-gq80tgvf.js +70 -0
  13. package/dist/chunk-gq80tgvf.js.map +10 -0
  14. package/dist/chunk-jd4q8fcf.js +11 -0
  15. package/dist/chunk-jd4q8fcf.js.map +10 -0
  16. package/dist/chunk-m07vf8q9.js +210 -0
  17. package/dist/chunk-m07vf8q9.js.map +10 -0
  18. package/dist/chunk-ncpk70p4.js +313 -0
  19. package/dist/chunk-ncpk70p4.js.map +10 -0
  20. package/dist/chunk-pmfzjavb.js +49 -0
  21. package/dist/chunk-pmfzjavb.js.map +10 -0
  22. package/dist/chunk-qdczt68t.js +84 -0
  23. package/dist/chunk-qdczt68t.js.map +10 -0
  24. package/dist/chunk-tfy01fah.js +34 -0
  25. package/dist/chunk-tfy01fah.js.map +10 -0
  26. package/dist/chunk-tkvj6x8k.js +389 -0
  27. package/dist/chunk-tkvj6x8k.js.map +10 -0
  28. package/dist/chunk-ty9bhdvx.js +53 -0
  29. package/dist/chunk-ty9bhdvx.js.map +10 -0
  30. package/dist/chunk-wmz6a1jk.js +233 -0
  31. package/dist/chunk-wmz6a1jk.js.map +10 -0
  32. package/dist/chunk-x90g388y.js +22 -0
  33. package/dist/chunk-x90g388y.js.map +10 -0
  34. package/dist/chunk-z388cd25.js +91 -0
  35. package/dist/chunk-z388cd25.js.map +10 -0
  36. package/dist/chunk-zf3x573k.js +65 -0
  37. package/dist/chunk-zf3x573k.js.map +10 -0
  38. package/dist/createAggregateRoot.d.ts +191 -0
  39. package/dist/createAggregateRoot.d.ts.map +1 -0
  40. package/dist/createAggregateRoot.js +18 -0
  41. package/dist/createAggregateRoot.js.map +9 -0
  42. package/dist/createCheckpointApi.d.ts +38 -0
  43. package/dist/createCheckpointApi.d.ts.map +1 -0
  44. package/dist/createCheckpointApi.js +9 -0
  45. package/dist/createCheckpointApi.js.map +9 -0
  46. package/dist/createEventListener.d.ts +46 -0
  47. package/dist/createEventListener.d.ts.map +1 -0
  48. package/dist/createEventListener.js +12 -0
  49. package/dist/createEventListener.js.map +9 -0
  50. package/dist/createEventStore.d.ts +57 -0
  51. package/dist/createEventStore.d.ts.map +1 -0
  52. package/dist/createEventStore.js +20 -0
  53. package/dist/createEventStore.js.map +9 -0
  54. package/dist/createProcessManager.d.ts +70 -0
  55. package/dist/createProcessManager.d.ts.map +1 -0
  56. package/dist/createProcessManager.js +16 -0
  57. package/dist/createProcessManager.js.map +9 -0
  58. package/dist/createProjection.d.ts +120 -0
  59. package/dist/createProjection.d.ts.map +1 -0
  60. package/dist/createProjection.js +16 -0
  61. package/dist/createProjection.js.map +9 -0
  62. package/dist/drizzle/index.d.ts +449 -0
  63. package/dist/drizzle/index.d.ts.map +1 -0
  64. package/dist/drizzle/index.js +325 -0
  65. package/dist/drizzle/index.js.map +10 -0
  66. package/dist/drizzle/postgres.d.ts +686 -0
  67. package/dist/drizzle/postgres.d.ts.map +1 -0
  68. package/dist/drizzle/postgres.js +18 -0
  69. package/dist/drizzle/postgres.js.map +9 -0
  70. package/dist/errors.d.ts +53 -0
  71. package/dist/errors.d.ts.map +1 -0
  72. package/dist/errors.js +26 -0
  73. package/dist/errors.js.map +9 -0
  74. package/dist/index.d.ts +15 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +73 -0
  77. package/dist/index.js.map +9 -0
  78. package/dist/lock.d.ts +6 -0
  79. package/dist/lock.d.ts.map +1 -0
  80. package/dist/lock.js +8 -0
  81. package/dist/lock.js.map +9 -0
  82. package/dist/memory/index.d.ts +15 -0
  83. package/dist/memory/index.d.ts.map +1 -0
  84. package/dist/memory/index.js +178 -0
  85. package/dist/memory/index.js.map +10 -0
  86. package/dist/redis/index.d.ts +2 -0
  87. package/dist/redis/index.d.ts.map +1 -0
  88. package/dist/redis/index.js +8 -0
  89. package/dist/redis/index.js.map +9 -0
  90. package/dist/redis/redisLock.d.ts +4 -0
  91. package/dist/redis/redisLock.d.ts.map +1 -0
  92. package/dist/redis/redisLock.js +8 -0
  93. package/dist/redis/redisLock.js.map +9 -0
  94. package/dist/refresh.d.ts +4 -0
  95. package/dist/refresh.d.ts.map +1 -0
  96. package/dist/refresh.js +13 -0
  97. package/dist/refresh.js.map +9 -0
  98. package/dist/replay.d.ts +4 -0
  99. package/dist/replay.d.ts.map +1 -0
  100. package/dist/replay.js +13 -0
  101. package/dist/replay.js.map +9 -0
  102. package/dist/snapshotGenerator.d.ts +79 -0
  103. package/dist/snapshotGenerator.d.ts.map +1 -0
  104. package/dist/snapshotGenerator.js +9 -0
  105. package/dist/snapshotGenerator.js.map +9 -0
  106. package/dist/superjson.d.ts +5 -0
  107. package/dist/superjson.d.ts.map +1 -0
  108. package/dist/superjson.js +12 -0
  109. package/dist/superjson.js.map +9 -0
  110. package/dist/transaction.d.ts +13 -0
  111. package/dist/transaction.d.ts.map +1 -0
  112. package/dist/transaction.js +8 -0
  113. package/dist/transaction.js.map +9 -0
  114. package/dist/utilityTypes.d.js +2 -0
  115. package/dist/utilityTypes.d.js.map +9 -0
  116. package/dist/utils.d.ts +4 -0
  117. package/dist/utils.d.ts.map +1 -0
  118. package/dist/utils.js +10 -0
  119. package/dist/utils.js.map +9 -0
  120. package/dist/wrappedEventBuilder.d.ts +37 -0
  121. package/dist/wrappedEventBuilder.d.ts.map +1 -0
  122. package/dist/wrappedEventBuilder.js +12 -0
  123. package/dist/wrappedEventBuilder.js.map +9 -0
  124. package/package.json +85 -1
  125. package/src/createAggregateRoot.ts +902 -0
  126. package/src/createCheckpointApi.ts +106 -0
  127. package/src/createEventListener.ts +118 -0
  128. package/src/createEventStore.ts +446 -0
  129. package/src/createProcessManager.ts +363 -0
  130. package/src/createProjection.ts +577 -0
  131. package/src/drizzle/index.ts +449 -0
  132. package/src/drizzle/postgres.ts +120 -0
  133. package/src/errors.ts +85 -0
  134. package/src/index.ts +45 -0
  135. package/src/lock.ts +58 -0
  136. package/src/memory/index.ts +224 -0
  137. package/src/redis/index.ts +1 -0
  138. package/src/redis/redisLock.ts +61 -0
  139. package/src/refresh.ts +19 -0
  140. package/src/replay.ts +19 -0
  141. package/src/snapshotGenerator.ts +190 -0
  142. package/src/superjson.ts +11 -0
  143. package/src/tests/aggregateRoot.spec.ts +532 -0
  144. package/src/tests/eventListener.spec.ts +57 -0
  145. package/src/tests/eventStore.spec.ts +86 -0
  146. package/src/tests/processManager.spec.ts +185 -0
  147. package/src/tests/projection.spec.ts +511 -0
  148. package/src/tests/projectionProcessManager.spec.ts +203 -0
  149. package/src/tests/setup.ts +230 -0
  150. package/src/tests/transaction.spec.ts +185 -0
  151. package/src/transaction.ts +93 -0
  152. package/src/utilityTypes.d.ts +110 -0
  153. package/src/utils.ts +43 -0
  154. package/src/wrappedEventBuilder.ts +181 -0
@@ -0,0 +1,325 @@
1
+ import {
2
+ isStreamEvents,
3
+ isStreamId
4
+ } from "../chunk-jd4q8fcf.js";
5
+ import {
6
+ createEventStore
7
+ } from "../chunk-wmz6a1jk.js";
8
+ import"../chunk-24xjphpk.js";
9
+ import"../chunk-ty9bhdvx.js";
10
+ import {
11
+ aggregateRootSnapshots,
12
+ checkpoints,
13
+ events,
14
+ projectionAppliedEvents,
15
+ projectionSnapshots
16
+ } from "../chunk-3t1vzbab.js";
17
+ import"../chunk-gq80tgvf.js";
18
+ import {
19
+ createAggregateRoot
20
+ } from "../chunk-tkvj6x8k.js";
21
+ import"../chunk-z388cd25.js";
22
+ import"../chunk-ncpk70p4.js";
23
+ import"../chunk-m07vf8q9.js";
24
+ import {
25
+ extendTypes,
26
+ superjson
27
+ } from "../chunk-6q8mr1sg.js";
28
+ import"../chunk-x90g388y.js";
29
+ import"../chunk-zf3x573k.js";
30
+ import"../chunk-9psg50cb.js";
31
+ import"../chunk-tfy01fah.js";
32
+ import"../chunk-pmfzjavb.js";
33
+ import {
34
+ ConcurrencyError
35
+ } from "../chunk-qdczt68t.js";
36
+
37
+ // src/drizzle/index.ts
38
+ import {
39
+ and,
40
+ asc,
41
+ desc,
42
+ eq,
43
+ gt,
44
+ inArray,
45
+ lte,
46
+ sql
47
+ } from "drizzle-orm";
48
+ function isPgUniqueViolation(err) {
49
+ if (typeof err !== "object" || err === null) {
50
+ return false;
51
+ }
52
+ const cause = err.cause;
53
+ if (typeof cause !== "object" || cause === null) {
54
+ return false;
55
+ }
56
+ if (cause.code !== "23505") {
57
+ return false;
58
+ }
59
+ return true;
60
+ }
61
+ function createEventsQuery(database) {
62
+ return database.select({
63
+ position: events.position,
64
+ type: events.type,
65
+ schemaVersion: events.schemaVersion,
66
+ payload: events.payload,
67
+ streamId: events.streamId,
68
+ streamType: events.streamType,
69
+ streamVersion: events.streamVersion,
70
+ createdAt: events.createdAt,
71
+ actorId: events.actorId,
72
+ correlationId: events.correlationId,
73
+ causationId: events.causationId,
74
+ metadata: events.metadata
75
+ }).from(events).orderBy(asc(events.position)).$dynamic();
76
+ }
77
+ async function fetchEvents(database, modifyQuery = (q) => q) {
78
+ const resolvedEvents = await modifyQuery(createEventsQuery(database), events);
79
+ return resolvedEvents.map((resolvedEvent) => ({
80
+ ...resolvedEvent,
81
+ payload: superjson.parse(resolvedEvent.payload),
82
+ metadata: superjson.deserialize(resolvedEvent.metadata)
83
+ }));
84
+ }
85
+ function createEventStore2({
86
+ database,
87
+ aggregateRoots,
88
+ postProcessEvent,
89
+ onProjectionReplay,
90
+ onProcessManagerRefresh,
91
+ onEventsAppended,
92
+ autoInit
93
+ }) {
94
+ const db = () => typeof database === "function" ? database() : database;
95
+ return createEventStore({
96
+ aggregateRoots,
97
+ postProcessEvent,
98
+ onProjectionReplay,
99
+ onProcessManagerRefresh,
100
+ autoInit,
101
+ async* loadEvents(select, range) {
102
+ const conditions = [];
103
+ if (select) {
104
+ const selects = Array.isArray(select) ? select : [select];
105
+ const streamTypes = selects.map((select2) => select2.stream);
106
+ const streamIds = selects.map((select2) => isStreamId(select2) ? select2.id : null).filter(Boolean);
107
+ const eventTypes = selects.flatMap((select2) => isStreamEvents(select2) ? select2.events : []);
108
+ conditions.push(inArray(events.streamType, streamTypes));
109
+ if (streamIds.length > 0) {
110
+ conditions.push(inArray(events.streamId, streamIds));
111
+ }
112
+ if (eventTypes.length > 0) {
113
+ conditions.push(inArray(events.type, eventTypes));
114
+ }
115
+ }
116
+ let lastPosition = 0;
117
+ if (range?.from) {
118
+ lastPosition = range.from - 1;
119
+ }
120
+ if (range?.to) {
121
+ conditions.push(lte(events.position, range.to));
122
+ }
123
+ const chunkSize = 50;
124
+ while (true) {
125
+ const resolvedEvents = await db().select({
126
+ position: events.position,
127
+ type: events.type,
128
+ schemaVersion: events.schemaVersion,
129
+ payload: events.payload,
130
+ streamId: events.streamId,
131
+ streamType: events.streamType,
132
+ streamVersion: events.streamVersion,
133
+ createdAt: events.createdAt,
134
+ actorId: events.actorId,
135
+ correlationId: events.correlationId,
136
+ causationId: events.causationId,
137
+ metadata: events.metadata
138
+ }).from(events).where(and(...conditions, gt(events.position, lastPosition))).limit(chunkSize).orderBy(asc(events.position));
139
+ if (resolvedEvents.length === 0) {
140
+ break;
141
+ }
142
+ for (const resolvedEvent of resolvedEvents) {
143
+ yield {
144
+ ...resolvedEvent,
145
+ payload: superjson.parse(resolvedEvent.payload),
146
+ metadata: superjson.deserialize(resolvedEvent.metadata)
147
+ };
148
+ lastPosition = resolvedEvent.position;
149
+ }
150
+ }
151
+ },
152
+ async appendEvents(streamId, newEvents, expectedVersion) {
153
+ const mappedEvents = newEvents.map((event, index) => ({
154
+ streamId: streamId.id,
155
+ streamType: streamId.stream,
156
+ streamVersion: expectedVersion + 1 + index,
157
+ type: event.type,
158
+ payload: superjson.stringify(event.payload),
159
+ metadata: superjson.serialize(event.metadata),
160
+ causationId: event.causationId,
161
+ actorId: event.actorId,
162
+ correlationId: event.correlationId,
163
+ schemaVersion: event.schemaVersion
164
+ }));
165
+ try {
166
+ const persistedEvents = await db().insert(events).values(mappedEvents).returning();
167
+ const resolvedEvents = persistedEvents.map((persistendEvent) => ({
168
+ ...persistendEvent,
169
+ payload: superjson.parse(persistendEvent.payload),
170
+ metadata: superjson.deserialize(persistendEvent.metadata)
171
+ })).toSorted((eventA, eventB) => eventA.position - eventB.position);
172
+ onEventsAppended?.(resolvedEvents);
173
+ return resolvedEvents;
174
+ } catch (error) {
175
+ if (isPgUniqueViolation(error)) {
176
+ const [lastStreamEvent] = await db().select({
177
+ streamVersion: events.streamVersion
178
+ }).from(events).where(and(eq(events.streamId, streamId.id), eq(events.streamType, streamId.stream))).orderBy(desc(events.position)).limit(1);
179
+ const currentVersion = lastStreamEvent?.streamVersion ?? 0;
180
+ throw new ConcurrencyError(streamId, expectedVersion, currentVersion);
181
+ }
182
+ throw error;
183
+ }
184
+ },
185
+ checkpoint: {
186
+ async upsert(checkpoint) {
187
+ await db().insert(checkpoints).values({
188
+ lastEventPosition: checkpoint.lastEventPosition,
189
+ name: checkpoint.name,
190
+ type: checkpoint.type,
191
+ metadata: superjson.stringify(checkpoint.metadata)
192
+ }).onConflictDoUpdate({
193
+ target: [checkpoints.type, checkpoints.name],
194
+ set: {
195
+ lastEventPosition: checkpoint.lastEventPosition,
196
+ metadata: superjson.stringify(checkpoint.metadata)
197
+ }
198
+ });
199
+ },
200
+ async get(type, name) {
201
+ const [checkpoint] = await db().select({
202
+ type: checkpoints.type,
203
+ name: checkpoints.name,
204
+ lastEventPosition: checkpoints.lastEventPosition,
205
+ metadata: checkpoints.metadata
206
+ }).from(checkpoints).where(and(eq(checkpoints.type, type), eq(checkpoints.name, name)));
207
+ if (!checkpoint) {
208
+ return null;
209
+ }
210
+ return {
211
+ ...checkpoint,
212
+ metadata: superjson.parse(checkpoint.metadata)
213
+ };
214
+ },
215
+ async delete(type, name) {
216
+ await db().delete(checkpoints).where(and(eq(checkpoints.type, type), eq(checkpoints.name, name)));
217
+ }
218
+ },
219
+ projectionSnapshot: {
220
+ async put(snapshot) {
221
+ await db().insert(projectionSnapshots).values({
222
+ lastEventPosition: snapshot.lastEventPosition,
223
+ projectionId: snapshot.projectionId,
224
+ projectionType: snapshot.projectionType,
225
+ schemaVersion: snapshot.schemaVersion,
226
+ state: superjson.stringify(snapshot.state),
227
+ metadata: superjson.stringify(snapshot.metadata)
228
+ });
229
+ },
230
+ async get(select) {
231
+ const [snapshot] = await db().select({
232
+ projectionId: projectionSnapshots.projectionId,
233
+ projectionType: projectionSnapshots.projectionType,
234
+ state: projectionSnapshots.state,
235
+ lastEventPosition: projectionSnapshots.lastEventPosition,
236
+ schemaVersion: projectionSnapshots.schemaVersion,
237
+ createdAt: projectionSnapshots.createdAt,
238
+ metadata: projectionSnapshots.metadata
239
+ }).from(projectionSnapshots).where(and(eq(projectionSnapshots.projectionId, select.id), eq(projectionSnapshots.projectionType, select.projection))).orderBy(desc(projectionSnapshots.lastEventPosition));
240
+ if (!snapshot) {
241
+ return null;
242
+ }
243
+ return {
244
+ ...snapshot,
245
+ state: superjson.parse(snapshot.state),
246
+ metadata: super.parse(snapshot.metadata)
247
+ };
248
+ },
249
+ async delete(target, fromPosition) {
250
+ const conditions = [
251
+ eq(projectionSnapshots.projectionType, target.projection)
252
+ ];
253
+ if (target.id) {
254
+ conditions.push(eq(projectionSnapshots.projectionId, target.id));
255
+ }
256
+ if (fromPosition) {
257
+ conditions.push(gt(projectionSnapshots.lastEventPosition, fromPosition));
258
+ }
259
+ await db().delete(projectionSnapshots).where(and(...conditions));
260
+ },
261
+ async incrementAppliedCount(select) {
262
+ const [applied] = await db().insert(projectionAppliedEvents).values({
263
+ projectionId: select.id,
264
+ projectionType: select.projection,
265
+ appliedEvents: 1
266
+ }).onConflictDoUpdate({
267
+ target: [
268
+ projectionAppliedEvents.projectionId,
269
+ projectionAppliedEvents.projectionType
270
+ ],
271
+ set: {
272
+ appliedEvents: sql`${projectionAppliedEvents.appliedEvents} + 1`
273
+ }
274
+ }).returning({
275
+ appliedEvents: projectionAppliedEvents.appliedEvents
276
+ });
277
+ return applied.appliedEvents;
278
+ }
279
+ },
280
+ aggregateRootSnapshot: {
281
+ async put(snapshot) {
282
+ await db().insert(aggregateRootSnapshots).values({
283
+ lastEventPosition: snapshot.lastEventPosition,
284
+ schemaVersion: snapshot.schemaVersion,
285
+ state: superjson.stringify(snapshot.state),
286
+ streamId: snapshot.streamId,
287
+ streamType: snapshot.streamType,
288
+ streamVersion: snapshot.streamVersion,
289
+ metadata: superjson.stringify(snapshot.metadata)
290
+ });
291
+ },
292
+ async get(select) {
293
+ const [snapshot] = await db().select({
294
+ streamId: aggregateRootSnapshots.streamId,
295
+ streamType: aggregateRootSnapshots.streamType,
296
+ streamVersion: aggregateRootSnapshots.streamVersion,
297
+ schemaVersion: aggregateRootSnapshots.schemaVersion,
298
+ state: aggregateRootSnapshots.state,
299
+ createdAt: aggregateRootSnapshots.createdAt,
300
+ lastEventPosition: aggregateRootSnapshots.lastEventPosition,
301
+ metadata: aggregateRootSnapshots.metadata
302
+ }).from(aggregateRootSnapshots).where(and(eq(aggregateRootSnapshots.streamId, select.id), eq(aggregateRootSnapshots.streamType, select.stream))).orderBy(desc(aggregateRootSnapshots.streamVersion));
303
+ if (!snapshot) {
304
+ return null;
305
+ }
306
+ return {
307
+ ...snapshot,
308
+ state: superjson.parse(snapshot.state),
309
+ metadata: superjson.parse(snapshot.metadata)
310
+ };
311
+ },
312
+ async delete(target, fromStreamVersion) {
313
+ await db().delete(aggregateRootSnapshots).where(and(eq(aggregateRootSnapshots.streamId, target.id), eq(aggregateRootSnapshots.streamType, target.stream), gt(aggregateRootSnapshots.streamVersion, fromStreamVersion)));
314
+ }
315
+ }
316
+ });
317
+ }
318
+ export {
319
+ fetchEvents,
320
+ extendTypes,
321
+ createEventStore2 as createEventStore,
322
+ createAggregateRoot
323
+ };
324
+
325
+ //# debugId=4B3612C3F058432C64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/drizzle/index.ts"],
4
+ "sourcesContent": [
5
+ "import {\n type SQL,\n and,\n asc,\n desc,\n eq,\n gt,\n inArray,\n lte,\n sql,\n} from 'drizzle-orm'\nimport type { NodePgDatabase } from 'drizzle-orm/node-postgres'\n\nimport type { AnyAggregateRoot } from '../createAggregateRoot.ts'\nimport {\n ConcurrencyError,\n createEventStore as createBaseEventStore,\n isStreamEvents,\n isStreamId,\n} from '../index.ts'\nimport {\n aggregateRootSnapshots,\n checkpoints,\n events,\n projectionAppliedEvents,\n projectionSnapshots,\n} from './postgres.ts'\nimport type {\n EventStore,\n EventStoreParamsWithAggregateRootSnapshots,\n EventsFromRoot,\n OnProgress,\n} from '../createEventStore.ts'\nimport { superjson } from '../superjson.ts'\nimport type {\n BaseOutputEvent,\n MaybePromise,\n OutputEvent,\n} from '../utilityTypes.js'\n\nexport { createAggregateRoot } from '../index.ts'\nexport { extendTypes } from '../superjson.ts'\n\nexport type OnEventsAppendend = (\n events: BaseOutputEvent[],\n) => MaybePromise<void>\n\ninterface DrizzleEventStoreParams<Root extends AnyAggregateRoot> {\n database: NodePgDatabase<any> | (() => NodePgDatabase<any>)\n aggregateRoots: Root[]\n autoInit?: boolean\n postProcessEvent?: EventStoreParamsWithAggregateRootSnapshots<Root>['postProcessEvent']\n onProjectionReplay?: OnProgress\n onProcessManagerRefresh?: OnProgress\n onEventsAppended?: OnEventsAppendend\n}\n\nfunction isPgUniqueViolation(\n err: unknown,\n): err is { cause: { code: string; constraint?: string } } {\n if (typeof err !== 'object' || err === null) {\n return false\n }\n\n const cause = (err as any).cause\n if (typeof cause !== 'object' || cause === null) {\n return false\n }\n\n if (cause.code !== '23505') {\n return false\n }\n\n return true\n}\n\nfunction createEventsQuery(database: NodePgDatabase<any>) {\n return database\n .select({\n position: events.position,\n type: events.type,\n schemaVersion: events.schemaVersion,\n payload: events.payload,\n streamId: events.streamId,\n streamType: events.streamType,\n streamVersion: events.streamVersion,\n createdAt: events.createdAt,\n actorId: events.actorId,\n correlationId: events.correlationId,\n causationId: events.causationId,\n metadata: events.metadata,\n })\n .from(events)\n .orderBy(asc(events.position))\n .$dynamic()\n}\n\ntype EventsQuery = ReturnType<typeof createEventsQuery>\n\nexport async function fetchEvents<E extends OutputEvent<any> = BaseOutputEvent>(\n database: NodePgDatabase<any>,\n modifyQuery: (query: EventsQuery, table: typeof events) => EventsQuery = (\n q,\n ) => q,\n) {\n const resolvedEvents = await modifyQuery(createEventsQuery(database), events)\n\n return resolvedEvents.map((resolvedEvent) => ({\n ...resolvedEvent,\n payload: superjson.parse(resolvedEvent.payload),\n metadata: superjson.deserialize(resolvedEvent.metadata),\n })) as E[]\n}\n\nexport function createEventStore<const Root extends AnyAggregateRoot>({\n database,\n aggregateRoots,\n postProcessEvent,\n onProjectionReplay,\n onProcessManagerRefresh,\n onEventsAppended,\n autoInit,\n}: DrizzleEventStoreParams<Root>): EventStore<\n EventsFromRoot<Root>,\n Root,\n true\n> {\n const db = () => (typeof database === 'function' ? database() : database)\n\n return createBaseEventStore({\n aggregateRoots,\n postProcessEvent,\n onProjectionReplay,\n onProcessManagerRefresh,\n autoInit,\n async *loadEvents(select, range) {\n const conditions = [] as SQL[]\n\n if (select) {\n const selects = Array.isArray(select) ? select : [select]\n const streamTypes = selects.map((select) => select.stream)\n const streamIds = selects\n .map((select) => (isStreamId(select) ? select.id : null))\n .filter(Boolean) as string[]\n const eventTypes = selects.flatMap((select) =>\n isStreamEvents(select) ? select.events : [],\n )\n conditions.push(inArray(events.streamType, streamTypes))\n\n if (streamIds.length > 0) {\n conditions.push(inArray(events.streamId, streamIds))\n }\n\n if (eventTypes.length > 0) {\n conditions.push(inArray(events.type, eventTypes))\n }\n }\n let lastPosition = 0\n\n if (range?.from) {\n lastPosition = range.from - 1\n }\n\n if (range?.to) {\n conditions.push(lte(events.position, range.to))\n }\n\n const chunkSize = 50\n\n while (true) {\n const resolvedEvents = await db()\n .select({\n position: events.position,\n type: events.type,\n schemaVersion: events.schemaVersion,\n payload: events.payload,\n streamId: events.streamId,\n streamType: events.streamType,\n streamVersion: events.streamVersion,\n createdAt: events.createdAt,\n actorId: events.actorId,\n correlationId: events.correlationId,\n causationId: events.causationId,\n metadata: events.metadata,\n })\n .from(events)\n .where(and(...conditions, gt(events.position, lastPosition)))\n .limit(chunkSize)\n .orderBy(asc(events.position))\n\n if (resolvedEvents.length === 0) {\n break\n }\n\n for (const resolvedEvent of resolvedEvents) {\n yield {\n ...resolvedEvent,\n payload: superjson.parse(resolvedEvent.payload),\n metadata: superjson.deserialize(resolvedEvent.metadata),\n }\n lastPosition = resolvedEvent.position\n }\n }\n },\n async appendEvents(streamId, newEvents, expectedVersion) {\n const mappedEvents = newEvents.map((event, index) => ({\n streamId: streamId.id,\n streamType: streamId.stream,\n streamVersion: expectedVersion + 1 + index,\n type: event.type,\n payload: superjson.stringify(event.payload),\n metadata: superjson.serialize(event.metadata),\n causationId: event.causationId,\n actorId: event.actorId,\n correlationId: event.correlationId,\n schemaVersion: event.schemaVersion,\n }))\n\n try {\n const persistedEvents = await db()\n .insert(events)\n .values(mappedEvents)\n .returning()\n\n const resolvedEvents = persistedEvents\n .map((persistendEvent) => ({\n ...persistendEvent,\n payload: superjson.parse(persistendEvent.payload),\n metadata: superjson.deserialize<\n Record<string, unknown> | undefined\n >(persistendEvent.metadata),\n }))\n .toSorted((eventA, eventB) => eventA.position - eventB.position)\n\n onEventsAppended?.(resolvedEvents)\n\n return resolvedEvents\n } catch (error) {\n if (isPgUniqueViolation(error)) {\n const [lastStreamEvent] = await db()\n .select({\n streamVersion: events.streamVersion,\n })\n .from(events)\n .where(\n and(\n eq(events.streamId, streamId.id),\n eq(events.streamType, streamId.stream),\n ),\n )\n .orderBy(desc(events.position))\n .limit(1)\n\n const currentVersion = lastStreamEvent?.streamVersion ?? 0\n throw new ConcurrencyError(streamId, expectedVersion, currentVersion)\n }\n throw error\n }\n },\n checkpoint: {\n async upsert(checkpoint) {\n await db()\n .insert(checkpoints)\n .values({\n lastEventPosition: checkpoint.lastEventPosition,\n name: checkpoint.name,\n type: checkpoint.type,\n metadata: superjson.stringify(checkpoint.metadata),\n })\n .onConflictDoUpdate({\n target: [checkpoints.type, checkpoints.name],\n set: {\n lastEventPosition: checkpoint.lastEventPosition,\n metadata: superjson.stringify(checkpoint.metadata),\n },\n })\n },\n async get(type, name) {\n const [checkpoint] = await db()\n .select({\n type: checkpoints.type,\n name: checkpoints.name,\n lastEventPosition: checkpoints.lastEventPosition,\n metadata: checkpoints.metadata,\n })\n .from(checkpoints)\n .where(and(eq(checkpoints.type, type), eq(checkpoints.name, name)))\n\n if (!checkpoint) {\n return null\n }\n\n return {\n ...checkpoint,\n metadata: superjson.parse(checkpoint.metadata),\n }\n },\n async delete(type, name) {\n await db()\n .delete(checkpoints)\n .where(and(eq(checkpoints.type, type), eq(checkpoints.name, name)))\n },\n },\n\n projectionSnapshot: {\n async put(snapshot) {\n await db()\n .insert(projectionSnapshots)\n .values({\n lastEventPosition: snapshot.lastEventPosition,\n projectionId: snapshot.projectionId,\n projectionType: snapshot.projectionType,\n schemaVersion: snapshot.schemaVersion,\n state: superjson.stringify(snapshot.state),\n metadata: superjson.stringify(snapshot.metadata),\n })\n },\n async get(select) {\n const [snapshot] = await db()\n .select({\n projectionId: projectionSnapshots.projectionId,\n projectionType: projectionSnapshots.projectionType,\n state: projectionSnapshots.state,\n lastEventPosition: projectionSnapshots.lastEventPosition,\n schemaVersion: projectionSnapshots.schemaVersion,\n createdAt: projectionSnapshots.createdAt,\n metadata: projectionSnapshots.metadata,\n })\n .from(projectionSnapshots)\n .where(\n and(\n eq(projectionSnapshots.projectionId, select.id),\n eq(projectionSnapshots.projectionType, select.projection),\n ),\n )\n .orderBy(desc(projectionSnapshots.lastEventPosition))\n\n if (!snapshot) {\n return null\n }\n\n return {\n ...snapshot,\n state: superjson.parse(snapshot.state),\n metadata: super.parse(snapshot.metadata),\n }\n },\n async delete(target, fromPosition) {\n const conditions = [\n eq(projectionSnapshots.projectionType, target.projection),\n ]\n\n if (target.id) {\n conditions.push(eq(projectionSnapshots.projectionId, target.id))\n }\n\n if (fromPosition) {\n conditions.push(\n gt(projectionSnapshots.lastEventPosition, fromPosition),\n )\n }\n\n await db()\n .delete(projectionSnapshots)\n .where(and(...conditions))\n },\n async incrementAppliedCount(select) {\n const [applied] = await db()\n .insert(projectionAppliedEvents)\n .values({\n projectionId: select.id,\n projectionType: select.projection,\n appliedEvents: 1,\n })\n .onConflictDoUpdate({\n target: [\n projectionAppliedEvents.projectionId,\n projectionAppliedEvents.projectionType,\n ],\n set: {\n appliedEvents: sql`${projectionAppliedEvents.appliedEvents} + 1`,\n },\n })\n .returning({\n appliedEvents: projectionAppliedEvents.appliedEvents,\n })\n\n return applied.appliedEvents\n },\n },\n aggregateRootSnapshot: {\n async put(snapshot) {\n await db()\n .insert(aggregateRootSnapshots)\n .values({\n lastEventPosition: snapshot.lastEventPosition,\n schemaVersion: snapshot.schemaVersion,\n state: superjson.stringify(snapshot.state),\n streamId: snapshot.streamId,\n streamType: snapshot.streamType,\n streamVersion: snapshot.streamVersion,\n metadata: superjson.stringify(snapshot.metadata),\n })\n },\n async get(select) {\n const [snapshot] = await db()\n .select({\n streamId: aggregateRootSnapshots.streamId,\n streamType: aggregateRootSnapshots.streamType,\n streamVersion: aggregateRootSnapshots.streamVersion,\n schemaVersion: aggregateRootSnapshots.schemaVersion,\n state: aggregateRootSnapshots.state,\n createdAt: aggregateRootSnapshots.createdAt,\n lastEventPosition: aggregateRootSnapshots.lastEventPosition,\n metadata: aggregateRootSnapshots.metadata,\n })\n .from(aggregateRootSnapshots)\n .where(\n and(\n eq(aggregateRootSnapshots.streamId, select.id),\n eq(aggregateRootSnapshots.streamType, select.stream),\n ),\n )\n .orderBy(desc(aggregateRootSnapshots.streamVersion))\n\n if (!snapshot) {\n return null\n }\n\n return {\n ...snapshot,\n state: superjson.parse(snapshot.state),\n metadata: superjson.parse(snapshot.metadata),\n }\n },\n async delete(target, fromStreamVersion) {\n await db()\n .delete(aggregateRootSnapshots)\n .where(\n and(\n eq(aggregateRootSnapshots.streamId, target.id),\n eq(aggregateRootSnapshots.streamType, target.stream),\n gt(aggregateRootSnapshots.streamVersion, fromStreamVersion),\n ),\n )\n },\n },\n }) as any\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "4B3612C3F058432C64756E2164756E21",
9
+ "names": []
10
+ }