boundlessdb 0.1.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 (60) hide show
  1. package/CHANGELOG.md +89 -0
  2. package/LICENSE +21 -0
  3. package/README.md +545 -0
  4. package/dist/better-sqlite3-shim.d.ts +12 -0
  5. package/dist/better-sqlite3-shim.d.ts.map +1 -0
  6. package/dist/better-sqlite3-shim.js +18 -0
  7. package/dist/better-sqlite3-shim.js.map +1 -0
  8. package/dist/browser.d.ts +14 -0
  9. package/dist/browser.d.ts.map +1 -0
  10. package/dist/browser.js +14 -0
  11. package/dist/browser.js.map +1 -0
  12. package/dist/config/extractor.d.ts +22 -0
  13. package/dist/config/extractor.d.ts.map +1 -0
  14. package/dist/config/extractor.js +132 -0
  15. package/dist/config/extractor.js.map +1 -0
  16. package/dist/config/validator.d.ts +14 -0
  17. package/dist/config/validator.d.ts.map +1 -0
  18. package/dist/config/validator.js +94 -0
  19. package/dist/config/validator.js.map +1 -0
  20. package/dist/event-store.browser.d.ts +61 -0
  21. package/dist/event-store.browser.d.ts.map +1 -0
  22. package/dist/event-store.browser.js +323 -0
  23. package/dist/event-store.browser.js.map +1 -0
  24. package/dist/event-store.d.ts +101 -0
  25. package/dist/event-store.d.ts.map +1 -0
  26. package/dist/event-store.js +249 -0
  27. package/dist/event-store.js.map +1 -0
  28. package/dist/index.d.ts +15 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +16 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/query-builder.d.ts +72 -0
  33. package/dist/query-builder.d.ts.map +1 -0
  34. package/dist/query-builder.js +84 -0
  35. package/dist/query-builder.js.map +1 -0
  36. package/dist/storage/interface.d.ts +48 -0
  37. package/dist/storage/interface.d.ts.map +1 -0
  38. package/dist/storage/interface.js +5 -0
  39. package/dist/storage/interface.js.map +1 -0
  40. package/dist/storage/memory.d.ts +27 -0
  41. package/dist/storage/memory.d.ts.map +1 -0
  42. package/dist/storage/memory.js +94 -0
  43. package/dist/storage/memory.js.map +1 -0
  44. package/dist/storage/postgres.d.ts +76 -0
  45. package/dist/storage/postgres.d.ts.map +1 -0
  46. package/dist/storage/postgres.js +346 -0
  47. package/dist/storage/postgres.js.map +1 -0
  48. package/dist/storage/sqlite.d.ts +47 -0
  49. package/dist/storage/sqlite.d.ts.map +1 -0
  50. package/dist/storage/sqlite.js +249 -0
  51. package/dist/storage/sqlite.js.map +1 -0
  52. package/dist/storage/sqljs.d.ts +60 -0
  53. package/dist/storage/sqljs.d.ts.map +1 -0
  54. package/dist/storage/sqljs.js +354 -0
  55. package/dist/storage/sqljs.js.map +1 -0
  56. package/dist/types.d.ts +172 -0
  57. package/dist/types.d.ts.map +1 -0
  58. package/dist/types.js +52 -0
  59. package/dist/types.js.map +1 -0
  60. package/package.json +75 -0
@@ -0,0 +1,323 @@
1
+ /**
2
+ * Browser-compatible EventStore
3
+ */
4
+ import { KeyExtractor } from './config/extractor.js';
5
+ import { validateConfig } from './config/validator.js';
6
+ import { SqlJsStorage } from './storage/sqljs.js';
7
+ import { QueryResult, isConstrainedCondition, } from './types.js';
8
+ /**
9
+ * Generate UUID with fallback for environments without crypto.randomUUID
10
+ */
11
+ function generateUUID() {
12
+ try {
13
+ if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
14
+ return crypto.randomUUID();
15
+ }
16
+ }
17
+ catch (e) {
18
+ // crypto.randomUUID might throw in insecure contexts
19
+ }
20
+ // Fallback using crypto.getRandomValues if available
21
+ if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
22
+ const arr = new Uint8Array(16);
23
+ crypto.getRandomValues(arr);
24
+ arr[6] = (arr[6] & 0x0f) | 0x40; // Version 4
25
+ arr[8] = (arr[8] & 0x3f) | 0x80; // Variant
26
+ const hex = Array.from(arr, b => b.toString(16).padStart(2, '0')).join('');
27
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
28
+ }
29
+ // Last resort fallback
30
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
31
+ const r = (Math.random() * 16) | 0;
32
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
33
+ return v.toString(16);
34
+ });
35
+ }
36
+ /**
37
+ * Recursively sort object keys for deterministic JSON
38
+ */
39
+ function sortObjectKeys(obj) {
40
+ if (obj === null || typeof obj !== 'object') {
41
+ return obj;
42
+ }
43
+ if (Array.isArray(obj)) {
44
+ return obj.map(sortObjectKeys);
45
+ }
46
+ const sorted = {};
47
+ for (const key of Object.keys(obj).sort()) {
48
+ sorted[key] = sortObjectKeys(obj[key]);
49
+ }
50
+ return sorted;
51
+ }
52
+ /**
53
+ * Compute SHA256 hash of ConsistencyConfig (async for browser)
54
+ */
55
+ async function hashConfig(config) {
56
+ const normalized = JSON.stringify(sortObjectKeys(config));
57
+ const encoder = new TextEncoder();
58
+ const data = encoder.encode(normalized);
59
+ const hashBuffer = await crypto.subtle.digest('SHA-256', data);
60
+ const hashArray = new Uint8Array(hashBuffer);
61
+ return Array.from(hashArray)
62
+ .map(b => b.toString(16).padStart(2, '0'))
63
+ .join('');
64
+ }
65
+ /**
66
+ * Browser-compatible DCB-native Event Store
67
+ */
68
+ export class EventStore {
69
+ storage;
70
+ keyExtractor;
71
+ config;
72
+ initPromise = null;
73
+ constructor(options) {
74
+ // Validate configuration
75
+ validateConfig(options.consistency);
76
+ this.storage = options.storage;
77
+ this.config = options.consistency;
78
+ this.keyExtractor = new KeyExtractor(this.config);
79
+ console.log('🚀 INIT: Creating EventStore...');
80
+ console.log('⚙️ CONFIG: Consistency configuration loaded');
81
+ const eventTypes = Object.keys(this.config.eventTypes);
82
+ console.log(` Event types: ${eventTypes.join(', ')}`);
83
+ eventTypes.forEach(type => {
84
+ const keys = this.config.eventTypes[type].keys;
85
+ console.log(` ${type}: ${keys.map(k => k.name + ' ← ' + k.path).join(', ')}`);
86
+ });
87
+ // Start async initialization
88
+ this.initPromise = this.checkAndReindexIfNeeded();
89
+ }
90
+ /**
91
+ * Ensure the store is initialized (for async operations)
92
+ */
93
+ async ensureInitialized() {
94
+ if (this.initPromise) {
95
+ await this.initPromise;
96
+ }
97
+ }
98
+ /**
99
+ * Check if config has changed since last run, reindex if needed
100
+ */
101
+ async checkAndReindexIfNeeded() {
102
+ // Only works with SqlJsStorage (has metadata methods)
103
+ if (!(this.storage instanceof SqlJsStorage)) {
104
+ return;
105
+ }
106
+ try {
107
+ // Ensure storage is fully initialized before accessing metadata
108
+ await this.storage.getAllEvents(); // This awaits the init promise
109
+ console.log('🔐 HASH: Computing config hash...');
110
+ const currentHash = await hashConfig(this.config);
111
+ if (!currentHash) {
112
+ console.warn('[EventStore] Failed to compute config hash');
113
+ return;
114
+ }
115
+ console.log(` Current config hash: ${currentHash.substring(0, 16)}...`);
116
+ const storedHash = await this.storage.getConfigHash();
117
+ console.log(` Stored config hash: ${storedHash ? storedHash.substring(0, 16) + '...' : '(none - first run)'}`);
118
+ if (storedHash === null) {
119
+ // First run — just store the hash
120
+ console.log('📝 HASH: First run, storing config hash in database');
121
+ await this.storage.setConfigHash(currentHash);
122
+ }
123
+ else if (storedHash !== currentHash) {
124
+ // Config changed — reindex!
125
+ console.log('⚠️ HASH MISMATCH: Config changed since last run!');
126
+ console.log('🔄 REINDEX: Rebuilding key index from all events...');
127
+ const startTime = Date.now();
128
+ let eventCount = 0;
129
+ let keyCount = 0;
130
+ await this.storage.reindex((event) => {
131
+ eventCount++;
132
+ // Convert StoredEvent to Event format for KeyExtractor
133
+ const keys = this.keyExtractor.extract({
134
+ type: event.type,
135
+ data: event.data,
136
+ metadata: event.metadata
137
+ });
138
+ keyCount += keys.length;
139
+ return keys;
140
+ });
141
+ // Update stored hash
142
+ await this.storage.setConfigHash(currentHash);
143
+ const duration = Date.now() - startTime;
144
+ console.log(`✅ REINDEX: Complete! ${eventCount} events, ${keyCount} keys extracted (${duration}ms)`);
145
+ }
146
+ else {
147
+ console.log('✅ HASH: Config unchanged, index is up to date');
148
+ }
149
+ console.log('🟢 READY: EventStore initialized');
150
+ }
151
+ catch (error) {
152
+ console.warn('⚠️ INIT: Config hash check failed (non-fatal):', error);
153
+ console.log('🟢 READY: EventStore initialized (without hash check)');
154
+ // Don't throw - config hash is nice-to-have, not required
155
+ }
156
+ }
157
+ /**
158
+ * Read events matching a query
159
+ *
160
+ * @typeParam E - Event union type for typed results
161
+ * @returns QueryResult with typed events and appendCondition
162
+ */
163
+ async read(query) {
164
+ await this.ensureInitialized();
165
+ console.log('📖 READ: Querying events...');
166
+ console.log(' Conditions:', query.conditions.map(c => isConstrainedCondition(c) ? `${c.type}[${c.key}=${c.value}]` : `${c.type}[*]`).join(', ') || '(none)');
167
+ const events = await this.storage.query(query.conditions, query.fromPosition, query.limit);
168
+ console.log(` Found: ${events.length} events`);
169
+ // Get the position for the append condition
170
+ const position = events.length > 0
171
+ ? events[events.length - 1].position
172
+ : await this.storage.getLatestPosition();
173
+ console.log(`📍 POSITION: #${position}`);
174
+ console.log(` Scope: ${query.conditions.length} condition(s)`);
175
+ return new QueryResult(events, position, query.conditions);
176
+ }
177
+ /**
178
+ * Append events with optional consistency check
179
+ *
180
+ * @typeParam E - Event type for type checking
181
+ * @param events Events to append
182
+ * @param condition Consistency check - can be:
183
+ * - null: Skip consistency check (optimistic first write)
184
+ * - AppendCondition: { position, conditions } from a previous read
185
+ * @returns AppendResult on success, ConflictResult on conflict
186
+ */
187
+ async append(events, condition) {
188
+ await this.ensureInitialized();
189
+ console.log(`✏️ APPEND: ${events.length} event(s)`);
190
+ events.forEach(e => console.log(` → ${e.type}: ${JSON.stringify(e.data).substring(0, 60)}...`));
191
+ console.log(` Condition: ${condition ? 'AppendCondition' : 'null (no conflict check)'}`);
192
+ if (events.length === 0) {
193
+ const position = await this.storage.getLatestPosition();
194
+ return {
195
+ conflict: false,
196
+ position,
197
+ appendCondition: { position, conditions: condition?.conditions ?? [] },
198
+ };
199
+ }
200
+ // Extract keys from all events
201
+ const keysPerEvent = events.map(event => this.keyExtractor.extract(event));
202
+ console.log(`🔑 KEYS: Extracted from payload via config`);
203
+ keysPerEvent.forEach((keys, i) => {
204
+ console.log(` Event ${i}: ${keys.map(k => `${k.name}="${k.value}"`).join(', ')}`);
205
+ });
206
+ // Check for conflicts if condition provided
207
+ if (condition !== null) {
208
+ const conditionsStr = condition.conditions.map(c => isConstrainedCondition(c) ? `${c.type}[${c.key}=${c.value}]` : `${c.type}[*]`).join(', ');
209
+ console.log(`🔍 CONFLICT CHECK: Looking for events since position #${condition.position}`);
210
+ console.log(` Checking conditions: ${conditionsStr || '(none)'}`);
211
+ const conflictingEvents = await this.storage.getEventsSince(condition.conditions, condition.position);
212
+ console.log(` Result: ${conflictingEvents.length} matching event(s) found since #${condition.position}`);
213
+ if (conflictingEvents.length > 0) {
214
+ // Conflict detected
215
+ console.log('');
216
+ console.log('❌ ═══════════════════════════════════════');
217
+ console.log(' CONFLICT DETECTED');
218
+ console.log('═══════════════════════════════════════════');
219
+ console.log('');
220
+ console.log('📍 Your position: #' + condition.position);
221
+ console.log('');
222
+ console.log('🔍 Query conditions you checked:');
223
+ condition.conditions.forEach(c => {
224
+ if (isConstrainedCondition(c)) {
225
+ console.log(` • ${c.type} where ${c.key}="${c.value}"`);
226
+ }
227
+ else {
228
+ console.log(` • ${c.type} (all)`);
229
+ }
230
+ });
231
+ console.log('');
232
+ console.log('⚡ Events written SINCE your read (that match your query):');
233
+ conflictingEvents.forEach(e => {
234
+ console.log(` • Event #${e.position}: ${e.type}`);
235
+ console.log(` Data: ${JSON.stringify(e.data)}`);
236
+ });
237
+ console.log('');
238
+ console.log('💡 Why conflict?');
239
+ console.log(' These events match your query conditions!');
240
+ console.log(' Your decision was based on stale data.');
241
+ console.log('');
242
+ console.log('🔄 Solution: Use result.appendCondition to retry.');
243
+ console.log('═══════════════════════════════════════════');
244
+ console.log('');
245
+ const latestPosition = conflictingEvents[conflictingEvents.length - 1].position;
246
+ return {
247
+ conflict: true,
248
+ conflictingEvents: conflictingEvents,
249
+ appendCondition: { position: latestPosition, conditions: condition.conditions },
250
+ };
251
+ }
252
+ }
253
+ // No conflict — prepare events for storage
254
+ const now = new Date();
255
+ const eventsToStore = events.map((event) => {
256
+ const id = generateUUID();
257
+ if (!id) {
258
+ throw new Error('Failed to generate event ID');
259
+ }
260
+ return {
261
+ id,
262
+ type: event.type,
263
+ data: event.data,
264
+ metadata: event.metadata,
265
+ timestamp: now,
266
+ };
267
+ });
268
+ // Append atomically
269
+ const position = await this.storage.append(eventsToStore, keysPerEvent);
270
+ console.log(`💾 STORED: Event(s) at position #${position}`);
271
+ // Build new appendCondition
272
+ const newConditions = this.buildConditionsFromEvents(events, condition);
273
+ console.log(`✅ SUCCESS: Append complete at position #${position}`);
274
+ return {
275
+ conflict: false,
276
+ position,
277
+ appendCondition: { position, conditions: newConditions },
278
+ };
279
+ }
280
+ /**
281
+ * Build conditions that cover the appended events
282
+ */
283
+ buildConditionsFromEvents(events, originalCondition) {
284
+ const conditions = new Map();
285
+ if (originalCondition !== null) {
286
+ for (const cond of originalCondition.conditions) {
287
+ if (isConstrainedCondition(cond)) {
288
+ const key = `${cond.type}:${cond.key}:${cond.value}`;
289
+ conditions.set(key, cond);
290
+ }
291
+ }
292
+ }
293
+ // Add conditions from the newly appended events
294
+ for (const event of events) {
295
+ const extractedKeys = this.keyExtractor.extract(event);
296
+ for (const extracted of extractedKeys) {
297
+ const cond = { type: event.type, key: extracted.name, value: extracted.value };
298
+ const key = `${cond.type}:${cond.key}:${cond.value}`;
299
+ conditions.set(key, cond);
300
+ }
301
+ }
302
+ return Array.from(conditions.values());
303
+ }
304
+ /**
305
+ * Get the underlying storage (for advanced use cases)
306
+ */
307
+ getStorage() {
308
+ return this.storage;
309
+ }
310
+ /**
311
+ * Close the event store
312
+ */
313
+ async close() {
314
+ await this.storage.close();
315
+ }
316
+ }
317
+ /**
318
+ * Factory function to create an event store
319
+ */
320
+ export function createEventStore(options) {
321
+ return new EventStore(options);
322
+ }
323
+ //# sourceMappingURL=event-store.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-store.browser.js","sourceRoot":"","sources":["../src/event-store.browser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,WAAW,EACX,sBAAsB,GAYvB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,SAAS,YAAY;IACnB,IAAI,CAAC;QACH,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YAC7E,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,qDAAqD;IACvD,CAAC;IACD,qDAAqD;IACrD,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,YAAY;QAC7C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU;QAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3E,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAC,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAC,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAC,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IACzG,CAAC;IACD,uBAAuB;IACvB,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;QACnE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAC1C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,GAAY;IAClC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAE,GAA+B,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU,CAAC,MAAyB;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACzC,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAMD;;GAEG;AACH,MAAM,OAAO,UAAU;IACJ,OAAO,CAAe;IACtB,YAAY,CAAe;IAC3B,MAAM,CAAoB;IACnC,WAAW,GAAyB,IAAI,CAAC;IAEjD,YAAY,OAAyB;QACnC,yBAAyB;QACzB,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAElD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxD,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;QAEH,6BAA6B;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACpD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB;QAC7B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,WAAW,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB;QACnC,sDAAsD;QACtD,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,YAAY,YAAY,CAAC,EAAE,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,gEAAgE;YAChE,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,+BAA+B;YAElE,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACjD,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;gBAC3D,OAAO;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,2BAA2B,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;YAE1E,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,0BAA0B,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC;YAEnH,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACxB,kCAAkC;gBAClC,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;gBACnE,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAChD,CAAC;iBAAM,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;gBACtC,4BAA4B;gBAC5B,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;gBAChE,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;gBACnE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAE7B,IAAI,UAAU,GAAG,CAAC,CAAC;gBACnB,IAAI,QAAQ,GAAG,CAAC,CAAC;gBAEjB,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBACnC,UAAU,EAAE,CAAC;oBACb,uDAAuD;oBACvD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;wBACrC,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;qBACzB,CAAC,CAAC;oBACH,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC;oBACxB,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;gBAEH,qBAAqB;gBACrB,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;gBAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,wBAAwB,UAAU,YAAY,QAAQ,oBAAoB,QAAQ,KAAK,CAAC,CAAC;YACvG,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC/D,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;YACrE,0DAA0D;QAC5D,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAA0B,KAAY;QAC9C,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACrD,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAC9E,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC;QAE1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CACrC,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,KAAK,CACZ,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;QAEjD,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;YAChC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ;YACpC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAE3C,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,UAAU,CAAC,MAAM,eAAe,CAAC,CAAC;QAEjE,OAAO,IAAI,WAAW,CACpB,MAA0B,EAC1B,QAAQ,EACR,KAAK,CAAC,UAAU,CACjB,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAM,CACV,MAA8B,EAC9B,SAAiC;QAEjC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,WAAW,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAClG,OAAO,CAAC,GAAG,CAAC,iBAAiB,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,0BAA0B,EAAE,CAAC,CAAC;QAE3F,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;YACxD,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,QAAQ;gBACR,eAAe,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,IAAI,EAAE,EAAE;aACvE,CAAC;QACJ,CAAC;QAED,+BAA+B;QAC/B,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,4CAA4C;QAC5C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACjD,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAC9E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,yDAAyD,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3F,OAAO,CAAC,GAAG,CAAC,2BAA2B,aAAa,IAAI,QAAQ,EAAE,CAAC,CAAC;YAEpE,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CACzD,SAAS,CAAC,UAAU,EACpB,SAAS,CAAC,QAAQ,CACnB,CAAC;YAEF,OAAO,CAAC,GAAG,CAAC,cAAc,iBAAiB,CAAC,MAAM,mCAAmC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE3G,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,oBAAoB;gBACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;gBAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;gBAChD,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBAC/B,IAAI,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC9B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;oBAC5D,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;oBACtC,CAAC;gBACH,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;gBACzE,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBACpD,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtD,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;gBACjE,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;gBAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAEhB,MAAM,cAAc,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAEhF,OAAO;oBACL,QAAQ,EAAE,IAAI;oBACd,iBAAiB,EAAE,iBAAqC;oBACxD,eAAe,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE;iBAChF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACzC,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;YAC1B,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACjD,CAAC;YACD,OAAO;gBACL,EAAE;gBACF,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,GAAG;aACf,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAExE,OAAO,CAAC,GAAG,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;QAE5D,4BAA4B;QAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAExE,OAAO,CAAC,GAAG,CAAC,2CAA2C,QAAQ,EAAE,CAAC,CAAC;QAEnE,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,QAAQ;YACR,eAAe,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE;SACzD,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,yBAAyB,CAC/B,MAA8B,EAC9B,iBAAyC;QAEzC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAgC,CAAC;QAE3D,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;YAC/B,KAAK,MAAM,IAAI,IAAI,iBAAiB,CAAC,UAAU,EAAE,CAAC;gBAChD,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACrD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACvD,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAyB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;gBACrG,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACrD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAyB;IACxD,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Main EventStore class
3
+ */
4
+ import type { EventStorage } from './storage/interface.js';
5
+ import { QueryResult, type AppendCondition, type AppendResult, type ConflictResult, type Event, type EventStoreOptions, type EventWithMetadata, type Query } from './types.js';
6
+ import { QueryBuilder } from './query-builder.js';
7
+ export interface EventStoreConfig extends EventStoreOptions {
8
+ storage: EventStorage;
9
+ }
10
+ /**
11
+ * DCB-native Event Store
12
+ *
13
+ * Implements Dynamic Consistency Boundaries for event sourcing.
14
+ * No cryptographic signing - tokens are Base64 encoded for convenience.
15
+ */
16
+ export declare class EventStore {
17
+ private readonly storage;
18
+ private readonly keyExtractor;
19
+ private readonly config;
20
+ constructor(options: EventStoreConfig);
21
+ /**
22
+ * Check if config has changed since last run, reindex if needed
23
+ */
24
+ private checkAndReindexIfNeeded;
25
+ /**
26
+ * Create a fluent query builder.
27
+ *
28
+ * @typeParam E - Event union type for typed results
29
+ * @returns QueryBuilder for chaining
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * const result = await store.query<CourseEvent>()
34
+ * .matchType('CourseCreated')
35
+ * .matchKey('StudentSubscribed', 'course', 'cs101')
36
+ * .fromPosition(100n)
37
+ * .limit(50)
38
+ * .read();
39
+ * ```
40
+ */
41
+ query<E extends Event = Event>(): QueryBuilder<E>;
42
+ /**
43
+ * Read events matching a query
44
+ *
45
+ * @typeParam E - Event union type for typed results
46
+ * @returns QueryResult with typed events and consistency token
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * // Typed read
51
+ * const result = await store.read<CartEvents>({
52
+ * conditions: [{ type: 'ProductItemAdded', key: 'cart', value: 'cart-123' }]
53
+ * });
54
+ *
55
+ * // Untyped read (all events of type)
56
+ * const result = await store.read({
57
+ * conditions: [{ type: 'ProductItemAdded' }]
58
+ * });
59
+ * ```
60
+ */
61
+ read<E extends Event = Event>(query: Query): Promise<QueryResult<E>>;
62
+ /**
63
+ * Append events with optional consistency check
64
+ *
65
+ * @typeParam E - Event type for type checking
66
+ * @param events Events to append
67
+ * @param condition Consistency check - can be:
68
+ * - null: Skip consistency check (optimistic first write)
69
+ * - AppendCondition: { position, conditions } from a previous read
70
+ * @returns AppendResult on success, ConflictResult on conflict
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * // With appendCondition from read
75
+ * const result = await store.read<CartEvents>({ conditions: [...] });
76
+ * await store.append<CartEvents>([newEvent], result.appendCondition);
77
+ *
78
+ * // Without consistency check (first write)
79
+ * await store.append<CartEvents>([newEvent], null);
80
+ * ```
81
+ */
82
+ append<E extends Event = Event>(events: EventWithMetadata<E>[], condition: AppendCondition | null): Promise<AppendResult | ConflictResult<E>>;
83
+ /**
84
+ * Build conditions that cover the appended events
85
+ * Used to create the appendCondition returned after append
86
+ */
87
+ private buildConditionsFromEvents;
88
+ /**
89
+ * Get the underlying storage (for advanced use cases)
90
+ */
91
+ getStorage(): EventStorage;
92
+ /**
93
+ * Close the event store
94
+ */
95
+ close(): Promise<void>;
96
+ }
97
+ /**
98
+ * Factory function to create an event store
99
+ */
100
+ export declare function createEventStore(options: EventStoreConfig): EventStore;
101
+ //# sourceMappingURL=event-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-store.d.ts","sourceRoot":"","sources":["../src/event-store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EACL,WAAW,EAEX,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EAGnB,KAAK,KAAK,EACV,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,KAAK,EAGX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAsB,MAAM,oBAAoB,CAAC;AA2BtE,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,OAAO,EAAE,YAAY,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;gBAE/B,OAAO,EAAE,gBAAgB;IAYrC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA2C/B;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC;IAIjD;;;;;;;;;;;;;;;;;;OAkBG;IACG,IAAI,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAqB1E;;;;;;;;;;;;;;;;;;;OAmBG;IACG,MAAM,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAClC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAC9B,SAAS,EAAE,eAAe,GAAG,IAAI,GAChC,OAAO,CAAC,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAwD5C;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IA6BjC;;OAEG;IACH,UAAU,IAAI,YAAY;IAI1B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,UAAU,CAEtE"}