@semiont/event-sourcing 0.5.2 → 0.5.4

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.
package/dist/index.d.ts CHANGED
@@ -1,571 +1,25 @@
1
- import { ResourceId, ResourceDescriptor, ResourceAnnotations, Logger, EventInput, StoredEvent, EventQuery as EventQuery$1, PersistedEvent, EventBus } from '@semiont/core';
2
- import { SemiontProject } from '@semiont/core/node';
3
-
4
1
  /**
5
- * View Storage - Materialized Views
2
+ * @semiont/event-sourcing
6
3
  *
7
- * Stores materialized views of resource state and annotations
8
- * Built from event streams, can be rebuilt at any time
4
+ * Event sourcing infrastructure for Semiont
9
5
  *
10
- * Stores both ResourceDescriptor metadata and ResourceAnnotations, but keeps them logically separate
11
- */
12
-
13
- interface ResourceView {
14
- resource: ResourceDescriptor;
15
- annotations: ResourceAnnotations;
16
- }
17
- interface ViewStorage {
18
- save(resourceId: ResourceId, view: ResourceView): Promise<void>;
19
- get(resourceId: ResourceId): Promise<ResourceView | null>;
20
- delete(resourceId: ResourceId): Promise<void>;
21
- exists(resourceId: ResourceId): Promise<boolean>;
22
- getAll(): Promise<ResourceView[]>;
23
- }
24
- declare class FilesystemViewStorage implements ViewStorage {
25
- private basePath;
26
- private logger?;
27
- constructor(project: SemiontProject, logger?: Logger);
28
- private getProjectionPath;
29
- save(resourceId: ResourceId, projection: ResourceView): Promise<void>;
30
- get(resourceId: ResourceId): Promise<ResourceView | null>;
31
- delete(resourceId: ResourceId): Promise<void>;
32
- exists(resourceId: ResourceId): Promise<boolean>;
33
- getAll(): Promise<ResourceView[]>;
34
- }
35
-
36
- /**
37
- * Event Storage - Physical Storage Layer
38
- *
39
- * Handles file I/O operations for event storage:
40
- * - JSONL file writing/reading
41
- * - 4-hex sharding (65,536 shards)
42
- * - File rotation
43
- * - Event stream initialization
44
- *
45
- * @see docs/EVENT-STORE.md#eventstorage for architecture details
46
- */
47
-
48
- interface EventStorageConfig {
49
- maxEventsPerFile?: number;
50
- enableSharding?: boolean;
51
- numShards?: number;
52
- enableCompression?: boolean;
53
- }
54
- /**
55
- * EventStorage handles physical storage of events
56
- * Owns: file I/O, sharding, AND sequence/hash tracking
57
- */
58
- declare class EventStorage {
59
- private config;
60
- private project;
61
- private logger?;
62
- private resourceSequences;
63
- private currentFiles;
64
- constructor(project: SemiontProject, config?: EventStorageConfig, logger?: Logger);
65
- /**
66
- * Calculate shard path for a resource ID
67
- * Uses jump consistent hash for uniform distribution
68
- * Special case: __system__ events bypass sharding
69
- */
70
- getShardPath(resourceId: ResourceId): string;
71
- /**
72
- * Get full path to resource's event directory
73
- */
74
- getResourcePath(resourceId: ResourceId): string;
75
- /**
76
- * Initialize directory structure for a resource's event stream
77
- * Also loads sequence number and last hash if stream exists
78
- */
79
- initializeResourceStream(resourceId: ResourceId): Promise<void>;
80
- /**
81
- * Append an event - handles EVERYTHING for event creation
82
- * Creates ID, timestamp, metadata, sequence tracking, and writes to disk.
83
- *
84
- * Integrity is provided by git at the commit level (when gitSync is enabled),
85
- * not by per-event chaining metadata. Per-event signatures (the unused
86
- * `EventSignature` field on StoredEvent) are the planned mechanism for
87
- * cross-KB authorship binding when federation becomes a real requirement.
88
- *
89
- * @param options.correlationId - Optional id propagated from a command. Stored
90
- * on the event's metadata so subscribers (notably the events-stream → frontend
91
- * path) can match command-result events back to the POST that initiated them.
92
- */
93
- appendEvent(event: EventInput, resourceId: ResourceId, options?: {
94
- correlationId?: string;
95
- }): Promise<StoredEvent>;
96
- /**
97
- * Write an event to storage (append to JSONL)
98
- * Internal method - use appendEvent() instead
99
- *
100
- * Uses currentFiles cache to avoid fs.readdir() + countEventsInFile() on every append.
101
- * Cache is populated on first append (cold start) and updated on rotation.
102
- */
103
- private writeEvent;
104
- /**
105
- * Count events in a specific file
106
- */
107
- countEventsInFile(resourceId: ResourceId, filename: string): Promise<number>;
108
- /**
109
- * Read all events from a specific file
110
- */
111
- readEventsFromFile(resourceId: ResourceId, filename: string): Promise<StoredEvent[]>;
112
- /**
113
- * Get list of event files for a resource (sorted by sequence)
114
- */
115
- getEventFiles(resourceId: ResourceId): Promise<string[]>;
116
- /**
117
- * Create a new event file for rotation
118
- */
119
- createNewEventFile(resourceId: ResourceId): Promise<string>;
120
- /**
121
- * Get the last event from a specific file
122
- */
123
- getLastEvent(resourceId: ResourceId, filename: string): Promise<StoredEvent | null>;
124
- /**
125
- * Get all events for a resource across all files
126
- */
127
- getAllEvents(resourceId: ResourceId): Promise<StoredEvent[]>;
128
- /**
129
- * Get all resource IDs by scanning shard directories
130
- */
131
- getAllResourceIds(): Promise<ResourceId[]>;
132
- /**
133
- * Create filename for event file
134
- */
135
- private createEventFilename;
136
- /**
137
- * Get current sequence number for a resource
138
- */
139
- getSequenceNumber(resourceId: ResourceId): number;
140
- /**
141
- * Increment and return next sequence number for a resource
142
- */
143
- getNextSequenceNumber(resourceId: ResourceId): number;
144
- }
145
-
146
- /**
147
- * EventLog - Event Persistence Layer
148
- *
149
- * Single Responsibility: Event persistence only
150
- * - Appends events to storage (JSONL files)
151
- * - Retrieves events by resource
152
- * - Queries events with filters
153
- *
154
- * Does NOT handle:
155
- * - Pub/sub notifications (see EventBus)
156
- * - View updates (see ViewManager)
157
- */
158
-
159
- interface EventLogConfig {
160
- project: SemiontProject;
161
- enableSharding?: boolean;
162
- maxEventsPerFile?: number;
163
- }
164
- declare class EventLog {
165
- readonly storage: EventStorage;
166
- constructor(config: EventLogConfig, logger?: Logger);
167
- /**
168
- * Append event to log
169
- * @param event - Resource event (from @semiont/core)
170
- * @param resourceId - Branded ResourceId (from @semiont/core)
171
- * @param options.correlationId - Optional command correlation id (stored on metadata)
172
- * @returns Stored event with metadata (sequence number, timestamp, checksum)
173
- */
174
- append(event: EventInput, resourceId: ResourceId, options?: {
175
- correlationId?: string;
176
- }): Promise<StoredEvent>;
177
- /**
178
- * Get all events for a resource
179
- * @param resourceId - Branded ResourceId (from @semiont/core)
180
- */
181
- getEvents(resourceId: ResourceId): Promise<StoredEvent[]>;
182
- /**
183
- * Get all resource IDs
184
- * @returns Array of branded ResourceId types
185
- */
186
- getAllResourceIds(): Promise<ResourceId[]>;
187
- /**
188
- * Query events with filter
189
- * @param resourceId - Branded ResourceId (from @semiont/core)
190
- * @param filter - Optional event filter
191
- */
192
- queryEvents(resourceId: ResourceId, filter?: EventQuery$1): Promise<StoredEvent[]>;
193
- }
194
-
195
- /**
196
- * View Materializer - Materialized View Management
197
- *
198
- * Materializes resource views from events:
199
- * - Full view materialization from scratch
200
- * - Incremental view updates
201
- * - System-level views (entity types)
202
- *
203
- * @see docs/EVENT-STORE.md#viewmaterializer for architecture details
204
- */
205
-
206
- /**
207
- * Minimal structural type for the event log dependency of `rebuildAll`.
208
- * Avoids importing the concrete EventLog class from a sibling directory and
209
- * keeps the materializer independent of the event-log implementation.
210
- */
211
- interface RebuildEventSource {
212
- getEvents(resourceId: ResourceId): Promise<StoredEvent[]>;
213
- getAllResourceIds(): Promise<ResourceId[]>;
214
- }
215
- interface ViewMaterializerConfig {
216
- basePath: string;
217
- }
218
- /**
219
- * ViewMaterializer builds and maintains materialized views from events
220
- */
221
- declare class ViewMaterializer {
222
- private viewStorage;
223
- private config;
224
- private logger?;
225
- constructor(viewStorage: ViewStorage, config: ViewMaterializerConfig, logger?: Logger);
226
- /**
227
- * Materialize resource view from events
228
- * Loads existing view if cached, otherwise rebuilds from events
229
- */
230
- materialize(events: StoredEvent[], resourceId: ResourceId): Promise<ResourceView | null>;
231
- /**
232
- * Materialize view incrementally with a single event
233
- * Falls back to full rebuild if view doesn't exist
234
- */
235
- materializeIncremental(resourceId: ResourceId, event: PersistedEvent, getAllEvents: () => Promise<StoredEvent[]>): Promise<void>;
236
- /**
237
- * Update the storage-uri index in response to an event.
238
- *
239
- * Only yield:created (with storageUri), yield:moved, need index changes.
240
- * resource.archived / resource.unarchived do NOT modify the index.
241
- */
242
- private materializeStorageUriIndex;
243
- /**
244
- * Materialize view from event list (full rebuild)
245
- */
246
- private materializeFromEvents;
247
- /**
248
- * Apply an event to ResourceDescriptor state (metadata only)
249
- */
250
- private applyEventToResource;
251
- /**
252
- * Apply an event to ResourceAnnotations (annotation collections only)
253
- */
254
- private applyEventToAnnotations;
255
- /**
256
- * Walk every event stream in the event log and materialize the corresponding
257
- * view from scratch. Idempotent: existing view files are overwritten.
258
- *
259
- * Mirrors GraphDBConsumer.rebuildAll() and Smelter.rebuildAll() — this is the
260
- * recovery path that makes the ephemeral stateDir safe to wipe. The live
261
- * append path (EventStore.appendEvent → materializeIncremental /
262
- * materializeEntityTypes) is unchanged and runs in addition.
263
- */
264
- rebuildAll(eventLog: RebuildEventSource): Promise<void>;
265
- /**
266
- * Materialize entity types view - System-level view
267
- */
268
- materializeEntityTypes(entityType: string): Promise<void>;
269
- }
270
-
271
- /**
272
- * ViewManager - Materialized View Management Layer
273
- *
274
- * Single Responsibility: View updates only
275
- * - Updates resource views from events
276
- * - Updates system views (entity types)
277
- * - Rebuilds views when needed
278
- *
279
- * Does NOT handle:
280
- * - Event persistence (see EventLog)
281
- * - Pub/sub notifications (see EventBus)
282
- */
283
-
284
- interface ViewManagerConfig {
285
- basePath: string;
286
- }
287
- /**
288
- * ViewManager wraps ViewMaterializer with a clean API
289
- * Handles both resource and system-level views
290
- *
291
- * ## Per-resource serialization
292
- *
293
- * `materializeResource` runs read-modify-write cycles on the view file for
294
- * a given resource (load JSON → apply event → save JSON). When multiple
295
- * events arrive for the same resource in rapid succession — the canonical
296
- * example is the reference-detection worker emitting `mark:added` +
297
- * `job:progress` + `job:completed` within a few milliseconds — concurrent
298
- * RMW cycles will clobber each other, losing events and occasionally
299
- * corrupting the view file entirely.
300
- *
301
- * ViewManager serializes these via `serializePerKey` from `@semiont/core`:
302
- * each incoming `materializeResource` call chains onto the previous one
303
- * for the same `resourceId`, so the work runs strictly sequentially per
304
- * resource while still parallelizing across different resources. System
305
- * events go through their own shared chain (keyed by a sentinel).
306
- *
307
- * Why this shape and not RxJS `groupBy + concatMap`:
308
- * ViewManager is called **synchronously** by `EventStore.appendEvent` — it
309
- * must block the caller until the view is written, so SSE subscribers
310
- * that see the subsequently-published event get the up-to-date view (a
311
- * read-your-writes guarantee). The RxJS stream-consumer pattern used by
312
- * `Smelter`, `GraphDBConsumer`, and `Gatherer` can't provide that
313
- * guarantee because it's fire-and-forget from the publisher's perspective.
314
- * Both patterns solve "serialize work per resource" — see also
315
- * `packages/core/src/serialize-per-key.ts` for the shared primitive.
316
- */
317
- declare class ViewManager {
318
- readonly materializer: ViewMaterializer;
319
- private resourceChains;
320
- private systemChains;
321
- private static readonly SYSTEM_KEY;
322
- constructor(viewStorage: ViewStorage, config: ViewManagerConfig, logger?: Logger);
323
- /**
324
- * Update resource view with a new event.
325
- * Serialized per resource — see class doc.
326
- *
327
- * @param resourceId - Branded ResourceId (from @semiont/core)
328
- * @param event - Resource event (from @semiont/core)
329
- * @param getAllEvents - Function to retrieve all events for rebuild if needed
330
- */
331
- materializeResource(resourceId: ResourceId, event: PersistedEvent, getAllEvents: () => Promise<StoredEvent[]>): Promise<void>;
332
- /**
333
- * Update system-level view (currently only entity types).
334
- * Serialized through a shared chain — see class doc.
335
- */
336
- materializeSystem(eventType: string, payload: any): Promise<void>;
337
- /**
338
- * Rebuild all materialized views from the event log on startup.
339
- * Mirrors GraphDBConsumer.rebuildAll() — call this once during
340
- * createKnowledgeBase before the HTTP server begins accepting requests.
341
- * Idempotent: existing view files are overwritten.
342
- */
343
- rebuildAll(eventLog: RebuildEventSource): Promise<void>;
344
- /**
345
- * Get resource view (builds from events if needed)
346
- * @param resourceId - Branded ResourceId (from @semiont/core)
347
- * @param events - Stored events for the resource (from @semiont/core)
348
- * @returns Resource view or null if no events
349
- */
350
- getOrMaterialize(resourceId: ResourceId, events: StoredEvent[]): Promise<ResourceView | null>;
351
- }
352
-
353
- /**
354
- * EventStore - Orchestration Layer
355
- *
356
- * Coordinates event sourcing operations:
6
+ * Provides:
7
+ * - EventStore: Orchestration layer for event sourcing
357
8
  * - EventLog: Event persistence (append, retrieve, query)
358
9
  * - ViewManager: View materialization (resource and system)
359
- * - Core EventBus: Publishes StoredEvent to typed channels after persistence
360
- *
361
- * appendEvent() is the single write path:
362
- * 1. Persist to EventLog
363
- * 2. Materialize views
364
- * 3. Enrich (optional callback attach post-materialization data)
365
- * 4. Publish StoredEvent to global and resource-scoped typed channels
366
- */
367
-
368
- type EnrichEvent = (event: StoredEvent, resourceId: ResourceId) => Promise<StoredEvent>;
369
- declare class EventStore {
370
- readonly log: EventLog;
371
- readonly views: ViewManager;
372
- readonly viewStorage: ViewStorage;
373
- readonly coreEventBus: EventBus;
374
- private enrichEvent;
375
- constructor(project: SemiontProject, stateDir: string, viewStorage: ViewStorage, coreEventBus: EventBus, logger?: Logger);
376
- setEnrichEvent(fn: EnrichEvent): void;
377
- /**
378
- * Append an event to the store
379
- * Coordinates: persistence → view → enrich → notification
380
- *
381
- * @param options.correlationId - Optional id propagated from a command.
382
- */
383
- appendEvent(event: EventInput, options?: {
384
- correlationId?: string;
385
- }): Promise<StoredEvent>;
386
- }
387
-
388
- /**
389
- * Event Store Factory
390
- *
391
- * Factory function for creating EventStore instances with standard configuration.
392
- * This is the canonical way to instantiate an EventStore.
393
- */
394
-
395
- /**
396
- * Create and initialize an EventStore instance
397
- *
398
- * @param project - SemiontProject instance
399
- * @param eventBus - @semiont/core EventBus for publishing domain events
400
- * @param logger - Optional logger for structured logging
401
- * @returns Configured EventStore instance ready for use
402
- */
403
- declare function createEventStore(project: SemiontProject, eventBus: EventBus, logger?: Logger): EventStore;
404
-
405
- /**
406
- * Sharding Utilities
407
- *
408
- * Shared utilities for consistent sharding across all storage layers
409
- * Uses Google's Jump Consistent Hash algorithm for even distribution
410
- */
411
- /**
412
- * TEMPORARY: Simple modulo-based hash sharding
413
- *
414
- * ⚠️ TODO: Replace with proper Jump Consistent Hash implementation
415
- *
416
- * This is a TEMPORARY implementation using simple modulo. It works and provides
417
- * good distribution, but does NOT provide the minimal reshuffling property of
418
- * Jump Consistent Hash when changing bucket counts.
419
- *
420
- * The proper implementation should use Google's Jump Consistent Hash algorithm:
421
- * Reference: "A Fast, Minimal Memory, Consistent Hash Algorithm" by Lamping & Veach (2014)
422
- * https://arxiv.org/abs/1406.2294
423
- *
424
- * Working implementations exist in npm packages like:
425
- * - jumphash (https://www.npmjs.com/package/jumphash)
426
- * - jump-gouache (https://github.com/bhoudu/jump-gouache)
427
- *
428
- * The algorithm requires proper 64-bit integer handling with BigInt to avoid
429
- * precision loss in JavaScript. The previous attempt failed due to incorrect
430
- * BigInt arithmetic in the while loop condition.
431
- *
432
- * Until replaced, this modulo approach will cause ALL data to be reshuffled
433
- * if bucket count changes, rather than the optimal O(n/k) reshuffling that
434
- * Jump Consistent Hash provides.
435
- *
436
- * @param key - The key to hash (typically a resource ID)
437
- * @param numBuckets - Number of shards/buckets (default: 65536 for 4-hex sharding)
438
- * @returns Shard number (0 to numBuckets-1)
439
- */
440
- declare function jumpConsistentHash(key: string, numBuckets?: number): number;
441
- /**
442
- * Get 4-hex shard path for a key
443
- *
444
- * @param key - The key to hash (typically a resource ID)
445
- * @param numBuckets - Number of shards (default: 65536)
446
- * @returns Path segments like ['ab', 'cd']
447
- */
448
- declare function getShardPath(key: string, numBuckets?: number): [string, string];
449
- /**
450
- * Calculate SHA-256 hash of data
451
- */
452
- declare function sha256(data: string | object): string;
453
-
454
- /**
455
- * Storage URI Index
456
- *
457
- * Projection that maps file:// URIs → resourceIds.
458
- * Sharded at:
459
- * {projectionsDir}/storage-uri/{ab}/{cd}/{uri-hash}.json
460
- *
461
- * where {ab}/{cd} comes from jumpConsistentHash(uri) and
462
- * {uri-hash} is the SHA-256 of the URI string.
463
- *
464
- * Each file contains: { uri: string; resourceId: string }
465
- *
466
- * This index is maintained by ViewMaterializer (the single owner).
467
- * It is never modified by Stower or other actors.
468
- *
469
- * Archive/unarchive do NOT remove entries from this index.
470
- * Archived resources are marked in the ResourceView (archived: true)
471
- * but remain findable by URI.
472
- */
473
- interface StorageUriEntry {
474
- uri: string;
475
- resourceId: string;
476
- }
477
- /**
478
- * Thrown when a URI is not found in the storage-uri index.
479
- */
480
- declare class ResourceNotFoundError extends Error {
481
- readonly uri: string;
482
- constructor(uri: string);
483
- }
484
- /**
485
- * Resolve a file:// URI to a resourceId using the storage-uri index.
486
- *
487
- * @param projectionsDir - Path to the projections directory
488
- * @param uri - file:// URI (e.g. "file://docs/overview.md")
489
- * @returns resourceId
490
- * @throws ResourceNotFoundError if URI is not in the index
491
- */
492
- declare function resolveStorageUri(projectionsDir: string, uri: string): Promise<string>;
493
- /**
494
- * Write a URI → resourceId mapping to the index.
495
- *
496
- * Called by ViewMaterializer when handling resource.created, resource.moved.
497
- *
498
- * @param projectionsDir - Path to the projections directory
499
- * @param uri - file:// URI
500
- * @param resourceId - resourceId to map to
501
- */
502
- declare function writeStorageUriEntry(projectionsDir: string, uri: string, resourceId: string): Promise<void>;
503
- /**
504
- * Remove a URI entry from the index.
505
- *
506
- * Called by ViewMaterializer when handling resource.moved (old URI only).
507
- * NOT called on resource.archived — archived resources retain their index entry.
508
- *
509
- * @param projectionsDir - Path to the projections directory
510
- * @param uri - file:// URI to remove
511
- */
512
- declare function removeStorageUriEntry(projectionsDir: string, uri: string): Promise<void>;
513
-
514
- /**
515
- * Event Query - Read Operations
516
- *
517
- * Handles querying and reading events from storage:
518
- * - Query events with filters (type, user, timestamp, sequence)
519
- * - Get all events for a resource
520
- * - Get last event from a file
521
- * - Efficient streaming reads from JSONL files
522
- *
523
- * @see docs/EVENT-STORE.md#eventquery for architecture details
524
- */
525
-
526
- /**
527
- * EventQuery handles all read operations for events
528
- * Uses EventStorage for file access, adds query filtering
529
- */
530
- declare class EventQuery {
531
- private eventStorage;
532
- constructor(eventStorage: EventStorage);
533
- /**
534
- * Query events with filters
535
- * Supports filtering by: userId, eventTypes, timestamps, sequence number, limit
536
- */
537
- queryEvents(query: EventQuery$1): Promise<StoredEvent[]>;
538
- /**
539
- * Get all events for a specific resource (no filters)
540
- */
541
- getResourceEvents(resourceId: ResourceId): Promise<StoredEvent[]>;
542
- /**
543
- * Get the last event from a specific file
544
- * Useful for initializing sequence numbers and last hashes
545
- */
546
- getLastEvent(resourceId: ResourceId, filename: string): Promise<StoredEvent | null>;
547
- /**
548
- * Get the latest event for a resource across all files
549
- */
550
- getLatestEvent(resourceId: ResourceId): Promise<StoredEvent | null>;
551
- /**
552
- * Get event count for a resource
553
- */
554
- getEventCount(resourceId: ResourceId): Promise<number>;
555
- /**
556
- * Check if a resource has any events
557
- */
558
- hasEvents(resourceId: ResourceId): Promise<boolean>;
559
- }
560
-
561
- /**
562
- * Identifier utilities for event sourcing
563
- */
564
- /**
565
- * Generate a unique annotation ID (bare nanoid)
566
- *
567
- * @returns A bare annotation ID (e.g., "V1StGXR8_Z5jdHi6B-myT")
568
- */
569
- declare function generateAnnotationId(): string;
570
-
571
- export { type EnrichEvent, EventLog, type EventLogConfig, EventQuery, EventStorage, type EventStorageConfig, EventStore, FilesystemViewStorage, ResourceNotFoundError, type ResourceView, type StorageUriEntry, ViewManager, type ViewManagerConfig, ViewMaterializer, type ViewStorage, createEventStore, generateAnnotationId, getShardPath, jumpConsistentHash, removeStorageUriEntry, resolveStorageUri, sha256, writeStorageUriEntry };
10
+ * - ViewStorage: Interface and filesystem implementation for materialized views
11
+ */
12
+ export { EventStore, type EnrichEvent } from './event-store';
13
+ export { createEventStore } from './event-store-factory';
14
+ export { EventLog, type EventLogConfig } from './event-log';
15
+ export { ViewManager, type ViewManagerConfig } from './view-manager';
16
+ export { type EventStorageConfig } from './storage/event-storage';
17
+ export { EventStorage } from './storage/event-storage';
18
+ export { type ViewStorage, type ResourceView, FilesystemViewStorage, } from './storage/view-storage';
19
+ export { getShardPath, sha256, jumpConsistentHash } from './storage/shard-utils';
20
+ export { resolveStorageUri, writeStorageUriEntry, removeStorageUriEntry, ResourceNotFoundError, type StorageUriEntry, } from './storage/storage-uri-index';
21
+ export { EventQuery } from './query/event-query';
22
+ export { ViewMaterializer } from './views/view-materializer';
23
+ export { applyEntityTypeAdded, applyTagSchemaAdded, type ApplyTagSchemaAddedResult, } from './views/projection-reducers';
24
+ export { generateAnnotationId } from './identifier-utils';
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGrE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,eAAe,GACrB,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,yBAAyB,GAC/B,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}