@eventualize/core 1.0.0 → 2.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 (65) hide show
  1. package/dist/EvDbStream.test.d.ts +1 -0
  2. package/dist/EvDbStream.test.js +21 -0
  3. package/dist/EvDbStream.test.js.map +1 -0
  4. package/dist/adapters/IEvDbStorageAdapter.d.ts +7 -0
  5. package/dist/adapters/IEvDbStorageAdapter.js +2 -0
  6. package/dist/adapters/IEvDbStorageAdapter.js.map +1 -0
  7. package/dist/codegen/generateStreamFactory.d.ts +18 -0
  8. package/dist/codegen/generateStreamFactory.js +97 -0
  9. package/dist/codegen/generateStreamFactory.js.map +1 -0
  10. package/dist/factories/EvDbStreamFactory.d.ts +50 -0
  11. package/dist/factories/EvDbStreamFactory.js +103 -0
  12. package/dist/factories/EvDbStreamFactory.js.map +1 -0
  13. package/dist/factories/EvDbStreamFactoryTypes.d.ts +20 -0
  14. package/dist/factories/EvDbStreamFactoryTypes.js +2 -0
  15. package/dist/factories/EvDbStreamFactoryTypes.js.map +1 -0
  16. package/dist/factories/EvDbViewFactory.d.ts +24 -0
  17. package/dist/{EvDbViewFactory.js → factories/EvDbViewFactory.js} +4 -4
  18. package/dist/factories/EvDbViewFactory.js.map +1 -0
  19. package/dist/factories/EvDbViewFactoryTypes.d.ts +24 -0
  20. package/dist/factories/EvDbViewFactoryTypes.js +2 -0
  21. package/dist/factories/EvDbViewFactoryTypes.js.map +1 -0
  22. package/dist/factories/StreamFactoryBuilder.d.ts +35 -0
  23. package/dist/factories/StreamFactoryBuilder.js +67 -0
  24. package/dist/factories/StreamFactoryBuilder.js.map +1 -0
  25. package/dist/store/EvDbEventStore.d.ts +68 -0
  26. package/dist/{EvDbEventStore.js → store/EvDbEventStore.js} +3 -94
  27. package/dist/store/EvDbEventStore.js.map +1 -0
  28. package/dist/store/EvDbEventStoreBuilder.d.ts +18 -0
  29. package/dist/store/EvDbEventStoreBuilder.js +44 -0
  30. package/dist/store/EvDbEventStoreBuilder.js.map +1 -0
  31. package/dist/store/EvDbEventStoreTypes.d.ts +11 -0
  32. package/dist/store/EvDbEventStoreTypes.js +2 -0
  33. package/dist/store/EvDbEventStoreTypes.js.map +1 -0
  34. package/dist/store/EvDbStream.d.ts +150 -0
  35. package/dist/store/EvDbStream.js +192 -0
  36. package/dist/store/EvDbStream.js.map +1 -0
  37. package/dist/stream/IEvDbStream.d.ts +0 -0
  38. package/dist/stream/IEvDbStream.js +2 -0
  39. package/dist/stream/IEvDbStream.js.map +1 -0
  40. package/dist/view/EvDbView.d.ts +19 -0
  41. package/dist/view/EvDbView.js +26 -0
  42. package/dist/view/EvDbView.js.map +1 -0
  43. package/dist/view/EvDbViewRaw.d.ts +22 -0
  44. package/dist/view/EvDbViewRaw.js +41 -0
  45. package/dist/view/EvDbViewRaw.js.map +1 -0
  46. package/package.json +18 -4
  47. package/dist/EvDbEventStore.d.ts +0 -123
  48. package/dist/EvDbEventStore.js.map +0 -1
  49. package/dist/EvDbStream.d.ts +0 -49
  50. package/dist/EvDbStream.js +0 -115
  51. package/dist/EvDbStream.js.map +0 -1
  52. package/dist/EvDbStreamFactory.d.ts +0 -97
  53. package/dist/EvDbStreamFactory.js +0 -155
  54. package/dist/EvDbStreamFactory.js.map +0 -1
  55. package/dist/EvDbView.d.ts +0 -34
  56. package/dist/EvDbView.js +0 -64
  57. package/dist/EvDbView.js.map +0 -1
  58. package/dist/EvDbViewFactory.d.ts +0 -45
  59. package/dist/EvDbViewFactory.js.map +0 -1
  60. package/src/EvDbEventStore.ts +0 -302
  61. package/src/EvDbStream.ts +0 -184
  62. package/src/EvDbStreamFactory.ts +0 -290
  63. package/src/EvDbView.ts +0 -100
  64. package/src/EvDbViewFactory.ts +0 -123
  65. package/tsconfig.json +0 -18
@@ -1 +0,0 @@
1
- {"version":3,"file":"EvDbStreamFactory.js","sourceRoot":"","sources":["../src/EvDbStreamFactory.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- import IEvDbViewStore, { IEvDbViewStoreGeneric } from "@eventualize/types/IEvDbViewStore";
2
- import EvDbViewAddress from "@eventualize/types/EvDbViewAddress";
3
- import IEvDbStorageSnapshotAdapter from "@eventualize/types/IEvDbStorageSnapshotAdapter";
4
- import EvDbEvent from "@eventualize/types/src/EvDbEvent";
5
- import { EvDbStoredSnapshotData } from "@eventualize/types/EvDbStoredSnapshotData";
6
- import { EvDbStoredSnapshotResult } from "@eventualize/types/EvDbStoredSnapshotResult";
7
- import IEvDbEventMetadata from "@eventualize/types/IEvDbEventMetadata";
8
- import IEvDbEventPayload from "@eventualize/types/IEvDbEventPayload";
9
- export declare abstract class EvDbViewRaw implements IEvDbViewStore {
10
- private readonly _storageAdapter;
11
- readonly address: EvDbViewAddress;
12
- private _memoryOffset;
13
- private _storeOffset;
14
- private _storedAt;
15
- protected constructor(_storageAdapter: IEvDbStorageSnapshotAdapter, address: EvDbViewAddress, snapshot: EvDbStoredSnapshotResult<any>);
16
- abstract getSnapshotData(): EvDbStoredSnapshotData;
17
- get storedAt(): Date;
18
- get storeOffset(): number;
19
- get memoryOffset(): number;
20
- shouldStoreSnapshot(offsetGapFromLastSave: number, durationSinceLastSaveMs: number): boolean;
21
- applyEvent(e: EvDbEvent): void;
22
- store(): Promise<void>;
23
- protected abstract onApplyEvent(e: EvDbEvent): void;
24
- }
25
- export declare abstract class EvDbView<TState> extends EvDbViewRaw implements IEvDbViewStoreGeneric<TState> {
26
- readonly defaultState: TState;
27
- protected getDefaultState(): TState;
28
- protected _state: TState;
29
- get state(): TState;
30
- constructor(address: EvDbViewAddress, storageAdapter: IEvDbStorageSnapshotAdapter, snapshot: EvDbStoredSnapshotResult<TState>, defaultState: TState);
31
- getSnapshotData(): EvDbStoredSnapshotData;
32
- abstract handleOnApply(oldState: TState, event: IEvDbEventPayload, metadata: IEvDbEventMetadata): TState;
33
- protected onApplyEvent(e: EvDbEvent): void;
34
- }
package/dist/EvDbView.js DELETED
@@ -1,64 +0,0 @@
1
- import { EvDbStoredSnapshotData } from "@eventualize/types/EvDbStoredSnapshotData";
2
- export class EvDbViewRaw {
3
- constructor(_storageAdapter, address, snapshot) {
4
- this._storageAdapter = _storageAdapter;
5
- this.address = address;
6
- const storeOffset = snapshot.offset ?? 0;
7
- this._memoryOffset = storeOffset;
8
- this._storeOffset = storeOffset;
9
- this._storedAt = snapshot.storedAt ?? new Date();
10
- }
11
- get storedAt() { return this._storedAt; }
12
- ;
13
- get storeOffset() { return this._storeOffset; }
14
- ;
15
- get memoryOffset() { return this._memoryOffset; }
16
- ;
17
- shouldStoreSnapshot(offsetGapFromLastSave, durationSinceLastSaveMs) {
18
- return true;
19
- }
20
- applyEvent(e) {
21
- const offset = e.streamCursor.offset;
22
- if (this.memoryOffset >= offset) {
23
- return;
24
- }
25
- this.onApplyEvent(e);
26
- this._memoryOffset = offset;
27
- }
28
- async store() {
29
- const eventsSinceLatestSnapshot = this.memoryOffset - this.storeOffset;
30
- const secondsSinceLatestSnapshot = new Date().getTime() - this.storedAt.getTime();
31
- if (!this.shouldStoreSnapshot(eventsSinceLatestSnapshot, secondsSinceLatestSnapshot)) {
32
- return;
33
- }
34
- const snapshotData = this.getSnapshotData();
35
- await this._storageAdapter.storeSnapshotAsync(snapshotData);
36
- this._storeOffset = this._memoryOffset;
37
- }
38
- }
39
- export class EvDbView extends EvDbViewRaw {
40
- getDefaultState() {
41
- return this.defaultState;
42
- }
43
- ;
44
- get state() { return this._state; }
45
- // public getState(): TState {
46
- // return this._state;
47
- // }
48
- constructor(address, storageAdapter, snapshot, defaultState) {
49
- super(storageAdapter, address, snapshot);
50
- this.defaultState = defaultState;
51
- this._state = this.getDefaultState();
52
- if (snapshot.offset === 0)
53
- this._state = this.getDefaultState();
54
- else
55
- this._state = snapshot.state;
56
- }
57
- getSnapshotData() {
58
- return EvDbStoredSnapshotData.fromAddress(this.address, this.memoryOffset, this.storeOffset, this._state);
59
- }
60
- onApplyEvent(e) {
61
- this._state = this.handleOnApply(this._state, e.payload, e);
62
- }
63
- }
64
- //# sourceMappingURL=EvDbView.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EvDbView.js","sourceRoot":"","sources":["../src/EvDbView.ts"],"names":[],"mappings":"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"}
@@ -1,45 +0,0 @@
1
- import { EvDbView } from './EvDbView.js';
2
- import IEvDbEventPayload from "@eventualize/types/IEvDbEventPayload";
3
- import IEvDbEventMetadata from '@eventualize/types/IEvDbEventMetadata';
4
- import IEvDbStorageSnapshotAdapter from '@eventualize/types/IEvDbStorageSnapshotAdapter';
5
- /**
6
- * Handler function type for applying an event to state
7
- */
8
- export type EvDbViewEventHandler<TState, TEvent extends IEvDbEventPayload> = (oldState: TState, event: TEvent, metadata: IEvDbEventMetadata) => TState;
9
- /**
10
- * Map of event handlers - one handler per event type in the union
11
- * Key is the payloadType string, value is the handler function
12
- */
13
- export type EvDbStreamEventHandlersMap<TState, TEvents extends IEvDbEventPayload> = {
14
- [K in TEvents['payloadType']]: EvDbViewEventHandler<TState, Extract<TEvents, {
15
- payloadType: K;
16
- }>>;
17
- };
18
- /**
19
- * Configuration for creating a view
20
- */
21
- export interface ViewConfig<TState, TEvents extends IEvDbEventPayload> {
22
- viewName: string;
23
- streamType: string;
24
- defaultState: TState;
25
- handlers: Partial<EvDbStreamEventHandlersMap<TState, TEvents>>;
26
- }
27
- /**
28
- * View Factory - creates view instances with the handlers map
29
- */
30
- export declare class ViewFactory<TState, TEvents extends IEvDbEventPayload> {
31
- private readonly config;
32
- constructor(config: ViewConfig<TState, TEvents>);
33
- /**
34
- * Creates a view instance
35
- */
36
- create(streamId: string, storageAdapter: IEvDbStorageSnapshotAdapter): EvDbView<TState>;
37
- /**
38
- * Get a view instance from event store
39
- */
40
- get(streamId: string, storageAdapter: IEvDbStorageSnapshotAdapter): Promise<EvDbView<TState>>;
41
- }
42
- /**
43
- * Factory function to create a ViewFactory
44
- */
45
- export declare function createViewFactory<TState, TEvents extends IEvDbEventPayload>(config: ViewConfig<TState, TEvents>): ViewFactory<TState, TEvents>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"EvDbViewFactory.js","sourceRoot":"","sources":["../src/EvDbViewFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC,OAAO,eAAe,MAAM,oCAAoC,CAAC;AACjE,OAAO,iBAAiB,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AA+BvF;;GAEG;AACH,MAAM,WAAuD,SAAQ,QAAgB;IAEjF,YACI,WAA4B,EAC5B,cAA2C,EAC3C,QAA0C,EAC1B,MAAmC;QAEnD,KAAK,CAAC,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAFlD,WAAM,GAAN,MAAM,CAA6B;QAGnD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAGD;;OAEG;IACI,aAAa,CAAC,QAAgB,EAAE,KAAc,EAAE,QAA4B;QAC/E,MAAM,WAAW,GAAG,KAAK,CAAC,WAAgD,CAAC;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAElD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,yEAAyE;YACzE,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,OAAO,OAAO,CAAC,QAAQ,EAAE,KAAY,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,OAAO,WAAW;IACpB,YAA6B,MAAmC;QAAnC,WAAM,GAAN,MAAM,CAA6B;IAAI,CAAC;IAErE;;OAEG;IACI,MAAM,CACT,QAAgB,EAChB,cAA2C;QAE3C,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC9E,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE7E,OAAO,IAAI,WAAW,CAClB,WAAW,EACX,cAAc,EACd,wBAAwB,CAAC,aAAa,EAAU,EAChD,IAAI,CAAC,MAAM,CACd,CAAC;IACN,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,GAAG,CACZ,QAAgB,EAChB,cAA2C;QAE3C,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC9E,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE7E,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAA;QAEnE,OAAO,IAAI,WAAW,CAClB,WAAW,EACX,cAAc,EACd,QAAQ,EACR,IAAI,CAAC,MAAM,CACd,CAAC;IACN,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC7B,MAAmC;IAEnC,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
@@ -1,302 +0,0 @@
1
- import EvDbStream from './EvDbStream.js';
2
- import IEvDbStorageSnapshotAdapter from '@eventualize/types/IEvDbStorageSnapshotAdapter';
3
- import IEvDbStorageStreamAdapter from '@eventualize/types/IEvDbStorageStreamAdapter';
4
- import IEvDbEventPayload from "@eventualize/types/IEvDbEventPayload";
5
- import { EvDbStreamFactory } from './EvDbStreamFactory.js';
6
-
7
- /**
8
- * Combined storage adapter interface
9
- */
10
- export interface IEvDbStorageAdapter extends IEvDbStorageStreamAdapter, IEvDbStorageSnapshotAdapter { }
11
-
12
- /**
13
- * Storage configuration - either separate adapters or combined
14
- */
15
- interface StorageConfig {
16
- streamAdapter: IEvDbStorageStreamAdapter;
17
- snapshotAdapter: IEvDbStorageSnapshotAdapter;
18
- }
19
-
20
- /**
21
- * Registry of stream factories by stream type
22
- */
23
- interface StreamFactoryRegistry {
24
- [streamType: string]: EvDbStreamFactory<any, any>;
25
- }
26
-
27
- /**
28
- * Store class - manages stream creation with configured adapters and factories
29
- */
30
- class BaseStore {
31
- private readonly storage: StorageConfig;
32
- private readonly streamFactories: StreamFactoryRegistry = {};
33
-
34
- public constructor(storage: StorageConfig, streamFactories: StreamFactoryRegistry) {
35
- this.storage = storage;
36
- this.streamFactories = streamFactories;
37
- }
38
-
39
- /**
40
- * Create a stream instance by stream type and ID
41
- */
42
- public createStream(streamType: string, streamId: string): EvDbStream {
43
- const factory = this.streamFactories[streamType];
44
-
45
- if (!factory) {
46
- throw new Error(
47
- `No stream factory registered for stream type: ${streamType}. ` +
48
- `Available types: ${Object.keys(this.streamFactories).join(', ')}`
49
- );
50
- }
51
-
52
- const stream = factory.create(
53
- streamId,
54
- this.storage.streamAdapter,
55
- this.storage.snapshotAdapter
56
- );
57
-
58
- return stream;
59
- }
60
-
61
- /**
62
- * Get a stream instance from the event store by stream type and ID
63
- */
64
- public async getStream(streamType: string, streamId: string): Promise<EvDbStream> {
65
- const factory = this.streamFactories[streamType];
66
-
67
- if (!factory) {
68
- throw new Error(
69
- `No stream factory registered for stream type: ${streamType}. ` +
70
- `Available types: ${Object.keys(this.streamFactories).join(', ')}`
71
- );
72
- }
73
-
74
- return factory.get(
75
- streamId,
76
- this.storage.streamAdapter,
77
- this.storage.snapshotAdapter
78
- );
79
- }
80
-
81
- /**
82
- * Check if a stream type is registered
83
- */
84
- public hasStreamType(streamType: string): boolean {
85
- return streamType in this.streamFactories;
86
- }
87
-
88
- /**
89
- * Get all registered stream types
90
- */
91
- public getStreamTypes(): string[] {
92
- return Object.keys(this.streamFactories);
93
- }
94
-
95
- /**
96
- * Create a builder for configuring the store
97
- */
98
- public static builder(): BaseStoreBuilder {
99
- return new BaseStoreBuilder();
100
- }
101
-
102
- public async close(): Promise<void> {
103
- await Promise.all([this.storage.snapshotAdapter.close(), this.storage.streamAdapter.close()]);
104
- return;
105
- }
106
- }
107
-
108
- /**
109
- * Builder for creating Store instances
110
- */
111
- class BaseStoreBuilder {
112
- private streamAdapter?: IEvDbStorageStreamAdapter;
113
- private snapshotAdapter?: IEvDbStorageSnapshotAdapter;
114
- private streamFactories: StreamFactoryRegistry = {};
115
-
116
- /**
117
- * Configure with separate stream and snapshot adapters
118
- */
119
- public withAdapters(
120
- streamAdapter: IEvDbStorageStreamAdapter,
121
- snapshotAdapter: IEvDbStorageSnapshotAdapter
122
- ): this {
123
- this.streamAdapter = streamAdapter;
124
- this.snapshotAdapter = snapshotAdapter;
125
- return this;
126
- }
127
-
128
- /**
129
- * Configure with a combined adapter that implements both interfaces
130
- */
131
- public withAdapter(adapter: IEvDbStorageAdapter): this {
132
- this.streamAdapter = adapter;
133
- this.snapshotAdapter = adapter;
134
- return this;
135
- }
136
-
137
- /**
138
- * Register a stream factory
139
- */
140
- public withStreamFactory<TEvents extends IEvDbEventPayload, TStreamType extends string>(
141
- factory: EvDbStreamFactory<TEvents, TStreamType>
142
- ): this {
143
- const streamType = factory.getStreamType();
144
- if (this.streamFactories[streamType]) {
145
- throw new Error(`Stream factory for type '${streamType}' is already registered`);
146
- }
147
- this.streamFactories[streamType] = factory;
148
- return this;
149
- }
150
-
151
- /**
152
- * Register multiple stream factories at once
153
- */
154
- public withStreamFactories(
155
- factories: ReadonlyArray<EvDbStreamFactory<any, string>>
156
- ): this {
157
- factories.forEach(factory => {
158
- this.withStreamFactory(factory);
159
- });
160
- return this;
161
- }
162
-
163
- /**
164
- * Build the store instance
165
- */
166
- public build(): BaseStore {
167
- if (!this.streamAdapter || !this.snapshotAdapter) {
168
- throw new Error(
169
- 'Storage adapters must be configured. Use withAdapter() or withAdapters()'
170
- );
171
- }
172
-
173
- if (Object.keys(this.streamFactories).length === 0) {
174
- console.warn('Store created with no stream factories registered');
175
- }
176
-
177
- return new BaseStore(
178
- {
179
- streamAdapter: this.streamAdapter,
180
- snapshotAdapter: this.snapshotAdapter
181
- },
182
- this.streamFactories
183
- );
184
- }
185
- }
186
-
187
- // ============================================================================
188
- // TYPED STORE - Type-safe stream creation
189
- // ============================================================================
190
-
191
- /**
192
- * Helper type to create method signatures for each stream factory
193
- */
194
- export type StreamCreatorMethods<TStreamTypes extends Record<string, EvDbStreamFactory<any, any>>> = {
195
- [K in keyof TStreamTypes as `create${K & string}`]: (streamId: string) => EvDbStream;
196
- };
197
-
198
- export type StreamMap = Record<string, any>;
199
-
200
- /**
201
- * Type-safe store that knows about specific stream types
202
- */
203
- export class EvDbEventStore<TStreamTypes extends Record<string, EvDbStreamFactory<any, any>>> {
204
- constructor(private readonly store: BaseStore) {
205
- // Create dynamic methods for each stream type
206
- this.createDynamicMethods();
207
- }
208
-
209
- /**
210
- * Create a stream with type-safe stream type parameter (fallback method)
211
- */
212
- public createStream<K extends keyof TStreamTypes & string>(
213
- streamType: K,
214
- streamId: string,
215
- ): EvDbStream {
216
- return this.store.createStream(streamType, streamId);
217
- }
218
-
219
- /**
220
- * Fetch a stream from the event store with type-safe stream type parameter (fallback method)
221
- */
222
- public getStream<K extends keyof TStreamTypes & string>(
223
- streamType: K,
224
- streamId: string
225
- ): Promise<EvDbStream> {
226
-
227
- return this.store.getStream(streamType, streamId);
228
- }
229
-
230
- /**
231
- * Create dynamic methods for each registered stream factory
232
- */
233
- private createDynamicMethods(): void {
234
- const streamTypes = this.store.getStreamTypes();
235
-
236
- for (const streamType of streamTypes) {
237
- const methodName = `create${streamType}` as keyof this;
238
-
239
- // Create the dynamic method
240
- (this as any)[methodName] = (streamId: string) => {
241
- return this.store.createStream(streamType, streamId);
242
- };
243
- }
244
- }
245
-
246
- /**
247
- * Get the underlying store
248
- */
249
- public getStore(): BaseStore {
250
- return this.store;
251
- }
252
- }
253
-
254
- // Make TypedStore callable with dynamic methods
255
- // export interface TypedStore<TStreamTypes extends Record<string, StreamFactory<any>>>
256
- // extends StreamCreatorMethods<TStreamTypes> { }
257
-
258
- export type TypedStoreType<
259
- TStreamTypes extends Record<string, EvDbStreamFactory<any, any>>
260
- > = StreamCreatorMethods<TStreamTypes>;
261
-
262
- /**
263
- * Type-safe store builder
264
- */
265
- export class EvDbEventStoreBuilder<
266
- TStreamTypes extends Record<string, EvDbStreamFactory<any, string>> = {}
267
- > {
268
- private builder = BaseStore.builder();
269
-
270
- public withAdapters(
271
- streamAdapter: IEvDbStorageStreamAdapter,
272
- snapshotAdapter: IEvDbStorageSnapshotAdapter
273
- ): this {
274
- this.builder.withAdapters(streamAdapter, snapshotAdapter);
275
- return this;
276
- }
277
-
278
- public withAdapter(adapter: IEvDbStorageAdapter): this {
279
- this.builder.withAdapter(adapter);
280
- return this;
281
- }
282
-
283
- // Track stream type in generics
284
- public withStreamFactory<
285
- F extends EvDbStreamFactory<any, string>,
286
- K extends F extends EvDbStreamFactory<any, infer ST> ? ST : never
287
- >(
288
- factory: F
289
- ): EvDbEventStoreBuilder<TStreamTypes & Record<K, F>> {
290
- this.builder.withStreamFactory(factory);
291
- // return as the new type that tracks K
292
- return this as unknown as EvDbEventStoreBuilder<TStreamTypes & Record<K, F>>;
293
- }
294
-
295
- public build(): EvDbEventStore<TStreamTypes> & StreamCreatorMethods<TStreamTypes> {
296
- const store = new EvDbEventStore(this.builder.build());
297
- return store as EvDbEventStore<TStreamTypes> & StreamCreatorMethods<TStreamTypes>;
298
- }
299
- }
300
-
301
- export type EvDbEventStoreType<TStreams extends StreamMap = StreamMap> =
302
- EvDbEventStore<TStreams> & StreamCreatorMethods<TStreams>;
package/src/EvDbStream.ts DELETED
@@ -1,184 +0,0 @@
1
- import EvDbEvent from "@eventualize/types/EvDbEvent";
2
- import EvDbMessage from "@eventualize/types/EvDbMessage";
3
- import IEvDbStorageStreamAdapter from "@eventualize/types/IEvDbStorageStreamAdapter";
4
- import IEvDbView from "@eventualize/types/IEvDbView";
5
- import EvDbStreamAddress from "@eventualize/types/EvDbStreamAddress";
6
- import IEvDbViewStore from "@eventualize/types/IEvDbViewStore";
7
- import IEvDbStreamStore from "@eventualize/types/IEvDbStreamStore";
8
- import IEvDbStreamStoreData from "@eventualize/types/IEvDbStreamStoreData";
9
- import IEvDbEventPayload from "@eventualize/types/IEvDbEventPayload";
10
- import StreamStoreAffected from "@eventualize/types/StreamStoreAffected";
11
- import IEvDbEventMetadata from "@eventualize/types/IEvDbEventMetadata";
12
- import EvDbStreamCursor from "@eventualize/types/EvDbStreamCursor";
13
- import OCCException from "@eventualize/types/OCCException";
14
- import { EvDbStreamType } from "@eventualize/types/primitiveTypes";
15
- import EVDbMessagesProducer from "@eventualize/types/EvDbMessagesProducer";
16
- import { EvDbView } from "./EvDbView.js"
17
-
18
-
19
- type ImmutableIEvDbView = Readonly<EvDbView<unknown>>;
20
- export type ImmutableIEvDbViewMap = Readonly<Record<string, ImmutableIEvDbView>>;
21
-
22
-
23
-
24
- export default class EvDbStream implements IEvDbStreamStore, IEvDbStreamStoreData {
25
-
26
- protected _pendingEvents: ReadonlyArray<EvDbEvent> = [];
27
- protected _pendingMessages: ReadonlyArray<EvDbMessage> = [];
28
-
29
- private static readonly ASSEMBLY_NAME = {
30
- name: 'evdb-core',
31
- version: '1.0.0'
32
- };
33
-
34
- private static readonly DEFAULT_CAPTURE_BY =
35
- `${EvDbStream.ASSEMBLY_NAME.name}-${EvDbStream.ASSEMBLY_NAME.version}`;
36
-
37
- private readonly _storageAdapter: IEvDbStorageStreamAdapter;
38
-
39
- // Views
40
- protected readonly _views: ImmutableIEvDbViewMap;
41
-
42
- getViews(): ImmutableIEvDbViewMap {
43
- return this._views;
44
- }
45
-
46
- getView(viewName: string): Readonly<IEvDbView> | undefined {
47
- return this._views[viewName];
48
- }
49
-
50
- // Events
51
- /**
52
- * Unspecialized events
53
- */
54
- getEvents(): ReadonlyArray<EvDbEvent> {
55
- return this._pendingEvents;
56
- }
57
-
58
- // StreamAddress
59
- public streamAddress: EvDbStreamAddress;
60
-
61
- // StoredOffset
62
- public storedOffset: number;
63
-
64
- // Constructor
65
- public constructor(
66
- streamType: EvDbStreamType,
67
- views: ImmutableIEvDbView[],
68
- storageAdapter: IEvDbStorageStreamAdapter,
69
- streamId: string,
70
- lastStoredOffset: number,
71
- protected messagesProducer: EVDbMessagesProducer
72
- ) {
73
- this._views = views.reduce((acc, view) => {
74
- const viewName = view.address.viewName;
75
- acc[viewName] = view;
76
- return acc;
77
- }, {} as Record<string, IEvDbViewStore>) as ImmutableIEvDbViewMap;
78
- this._storageAdapter = storageAdapter;
79
- this.streamAddress = new EvDbStreamAddress(streamType, streamId);
80
- this.storedOffset = lastStoredOffset;
81
- }
82
-
83
- protected appendEvent(
84
- payload: IEvDbEventPayload,
85
- capturedBy?: string | null
86
- ): IEvDbEventMetadata {
87
- capturedBy = capturedBy ?? EvDbStream.DEFAULT_CAPTURE_BY;
88
- // const json = JSON.stringify(payload); // Or use custom serializer
89
-
90
- const cursor = this.getNextCursor(this._pendingEvents);
91
- const e = new EvDbEvent(
92
- payload.payloadType,
93
- cursor,
94
- payload,
95
- new Date(),
96
- capturedBy,
97
- );
98
- this._pendingEvents = [...this._pendingEvents, e];
99
-
100
- // Apply to views
101
- for (const view of Object.values(this._views)) {
102
- view.applyEvent(e);
103
- }
104
-
105
- // Outbox producer
106
- const viewsStates = Object.fromEntries(Object.entries(this._views)
107
- .map(([k, v]) => {
108
- return [k, (v as EvDbView<unknown>).state]
109
- }));
110
- const producedMessages = this.messagesProducer(e, viewsStates);
111
- this._pendingMessages = [...this._pendingMessages, ...producedMessages]
112
-
113
- return e;
114
- }
115
-
116
- private getNextCursor(events: ReadonlyArray<EvDbEvent>): EvDbStreamCursor {
117
- if (events.length === 0) {
118
- return new EvDbStreamCursor(this.streamAddress, this.storedOffset + 1);
119
- }
120
-
121
- const lastEvent = events[events.length - 1];
122
- const offset = lastEvent.streamCursor.offset;
123
- return new EvDbStreamCursor(this.streamAddress, offset + 1);
124
- }
125
-
126
- // AppendToOutbox
127
- /**
128
- * Put a row into the publication (out-box pattern).
129
- */
130
- public appendToOutbox(e: EvDbMessage): void {
131
- this._pendingMessages = [...this._pendingMessages, e];
132
- }
133
-
134
- // StoreAsync
135
- public async store(): Promise<StreamStoreAffected> {
136
- // Telemetry
137
- // const tags = this.streamAddress.toOtelTags();
138
- // const duration = EvDbStream._sysMeters.measureStoreEventsDuration(tags);
139
- // const activity = EvDbStream._trace.startActivity(tags, 'EvDb.Store');
140
-
141
- try {
142
- if (this._pendingEvents.length === 0) {
143
- return StreamStoreAffected.Empty;
144
- }
145
-
146
- const affected = await this._storageAdapter.storeStreamAsync(
147
- this._pendingEvents,
148
- this._pendingMessages,
149
- );
150
-
151
- const lastEvent = this._pendingEvents[this._pendingEvents.length - 1];
152
- this.storedOffset = lastEvent.streamCursor.offset;
153
- this._pendingEvents = [];
154
- this._pendingMessages = [];
155
-
156
- const viewSaveTasks = Object.values(this._views).map(v => v.store());
157
- await Promise.all(viewSaveTasks);
158
-
159
- return affected;
160
- } catch (error) {
161
- if (error instanceof OCCException) {
162
- throw error;
163
- }
164
- throw error;
165
- }
166
-
167
- }
168
-
169
- // CountOfPendingEvents
170
- /**
171
- * number of events that were not stored yet.
172
- */
173
- public get countOfPendingEvents(): number {
174
- return this._pendingEvents.length;
175
- }
176
-
177
- // Notifications
178
- /**
179
- * Unspecialized messages
180
- */
181
- public getMessages(): ReadonlyArray<EvDbMessage> {
182
- return this._pendingMessages;
183
- }
184
- }