@eventualize/types 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 (114) hide show
  1. package/dist/DelayStrategy.d.ts +6 -0
  2. package/dist/DelayStrategy.js +18 -0
  3. package/dist/DelayStrategy.js.map +1 -0
  4. package/dist/EvDbContinuousFetchOptions.d.ts +10 -0
  5. package/dist/EvDbContinuousFetchOptions.js +16 -0
  6. package/dist/EvDbContinuousFetchOptions.js.map +1 -0
  7. package/dist/EvDbEvent.d.ts +12 -0
  8. package/dist/EvDbEvent.js +11 -0
  9. package/dist/EvDbEvent.js.map +1 -0
  10. package/dist/EvDbMessage.d.ts +21 -0
  11. package/dist/EvDbMessage.js +27 -0
  12. package/dist/EvDbMessage.js.map +1 -0
  13. package/dist/EvDbMessageFilter.d.ts +43 -0
  14. package/dist/EvDbMessageFilter.js +54 -0
  15. package/dist/EvDbMessageFilter.js.map +1 -0
  16. package/dist/EvDbMessagesProducer.d.ts +4 -0
  17. package/dist/EvDbMessagesProducer.js +2 -0
  18. package/dist/EvDbMessagesProducer.js.map +1 -0
  19. package/dist/EvDbSnapshotCursor.d.ts +24 -0
  20. package/dist/EvDbSnapshotCursor.js +58 -0
  21. package/dist/EvDbSnapshotCursor.js.map +1 -0
  22. package/dist/EvDbStoredSnapshotData.d.ts +24 -0
  23. package/dist/EvDbStoredSnapshotData.js +65 -0
  24. package/dist/EvDbStoredSnapshotData.js.map +1 -0
  25. package/dist/EvDbStoredSnapshotResult.d.ts +11 -0
  26. package/dist/EvDbStoredSnapshotResult.js +18 -0
  27. package/dist/EvDbStoredSnapshotResult.js.map +1 -0
  28. package/dist/EvDbStoredSnapshotResultBase.d.ts +6 -0
  29. package/dist/EvDbStoredSnapshotResultBase.js +9 -0
  30. package/dist/EvDbStoredSnapshotResultBase.js.map +1 -0
  31. package/dist/EvDbStreamAddress.d.ts +7 -0
  32. package/dist/EvDbStreamAddress.js +11 -0
  33. package/dist/EvDbStreamAddress.js.map +1 -0
  34. package/dist/EvDbStreamCursor.d.ts +19 -0
  35. package/dist/EvDbStreamCursor.js +45 -0
  36. package/dist/EvDbStreamCursor.js.map +1 -0
  37. package/dist/EvDbViewAddress.d.ts +5 -0
  38. package/dist/EvDbViewAddress.js +22 -0
  39. package/dist/EvDbViewAddress.js.map +1 -0
  40. package/dist/IEvDbChangeStream.d.ts +58 -0
  41. package/dist/IEvDbChangeStream.js +2 -0
  42. package/dist/IEvDbChangeStream.js.map +1 -0
  43. package/dist/IEvDbEventMetadata.d.ts +20 -0
  44. package/dist/IEvDbEventMetadata.js +2 -0
  45. package/dist/IEvDbEventMetadata.js.map +1 -0
  46. package/dist/IEvDbEventPayload.d.ts +6 -0
  47. package/dist/IEvDbEventPayload.js +2 -0
  48. package/dist/IEvDbEventPayload.js.map +1 -0
  49. package/dist/IEvDbEventsSet.d.ts +7 -0
  50. package/dist/IEvDbEventsSet.js +2 -0
  51. package/dist/IEvDbEventsSet.js.map +1 -0
  52. package/dist/IEvDbStorageAdmin.d.ts +30 -0
  53. package/dist/IEvDbStorageAdmin.js +2 -0
  54. package/dist/IEvDbStorageAdmin.js.map +1 -0
  55. package/dist/IEvDbStorageSnapshotAdapter.d.ts +26 -0
  56. package/dist/IEvDbStorageSnapshotAdapter.js +2 -0
  57. package/dist/IEvDbStorageSnapshotAdapter.js.map +1 -0
  58. package/dist/IEvDbStorageStreamAdapter.d.ts +34 -0
  59. package/dist/IEvDbStorageStreamAdapter.js +2 -0
  60. package/dist/IEvDbStorageStreamAdapter.js.map +1 -0
  61. package/dist/IEvDbStreamStore.d.ts +16 -0
  62. package/dist/IEvDbStreamStore.js +2 -0
  63. package/dist/IEvDbStreamStore.js.map +1 -0
  64. package/dist/IEvDbStreamStoreData.d.ts +20 -0
  65. package/dist/IEvDbStreamStoreData.js +2 -0
  66. package/dist/IEvDbStreamStoreData.js.map +1 -0
  67. package/dist/IEvDbView.d.ts +15 -0
  68. package/dist/IEvDbView.js +2 -0
  69. package/dist/IEvDbView.js.map +1 -0
  70. package/dist/IEvDbViewAppliesSet.d.ts +6 -0
  71. package/dist/IEvDbViewAppliesSet.js +2 -0
  72. package/dist/IEvDbViewAppliesSet.js.map +1 -0
  73. package/dist/IEvDbViewStore.d.ts +28 -0
  74. package/dist/IEvDbViewStore.js +2 -0
  75. package/dist/IEvDbViewStore.js.map +1 -0
  76. package/dist/OCCException.d.ts +13 -0
  77. package/dist/OCCException.js +26 -0
  78. package/dist/OCCException.js.map +1 -0
  79. package/dist/StreamStoreAffected.d.ts +11 -0
  80. package/dist/StreamStoreAffected.js +12 -0
  81. package/dist/StreamStoreAffected.js.map +1 -0
  82. package/dist/primitiveTypes.d.ts +7 -0
  83. package/dist/primitiveTypes.js +2 -0
  84. package/dist/primitiveTypes.js.map +1 -0
  85. package/package.json +27 -0
  86. package/src/DelayStrategy.ts +23 -0
  87. package/src/EvDbContinuousFetchOptions.ts +22 -0
  88. package/src/EvDbEvent.ts +15 -0
  89. package/src/EvDbMessage.ts +105 -0
  90. package/src/EvDbMessageFilter.ts +86 -0
  91. package/src/EvDbMessagesProducer.ts +5 -0
  92. package/src/EvDbSnapshotCursor.ts +91 -0
  93. package/src/EvDbStoredSnapshotData.ts +106 -0
  94. package/src/EvDbStoredSnapshotResult.ts +44 -0
  95. package/src/EvDbStoredSnapshotResultBase.ts +11 -0
  96. package/src/EvDbStreamAddress.ts +10 -0
  97. package/src/EvDbStreamCursor.ts +52 -0
  98. package/src/EvDbViewAddress.ts +26 -0
  99. package/src/IEvDbChangeStream.ts +92 -0
  100. package/src/IEvDbEventMetadata.ts +32 -0
  101. package/src/IEvDbEventPayload.ts +8 -0
  102. package/src/IEvDbEventsSet.ts +10 -0
  103. package/src/IEvDbStorageAdmin.ts +35 -0
  104. package/src/IEvDbStorageSnapshotAdapter.ts +29 -0
  105. package/src/IEvDbStorageStreamAdapter.ts +43 -0
  106. package/src/IEvDbStreamStore.ts +22 -0
  107. package/src/IEvDbStreamStoreData.ts +27 -0
  108. package/src/IEvDbView.ts +18 -0
  109. package/src/IEvDbViewAppliesSet.ts +8 -0
  110. package/src/IEvDbViewStore.ts +38 -0
  111. package/src/OCCException.ts +34 -0
  112. package/src/StreamStoreAffected.ts +20 -0
  113. package/src/primitiveTypes.ts +7 -0
  114. package/tsconfig.json +15 -0
@@ -0,0 +1,22 @@
1
+ import EvDbStreamAddress from "@eventualize/types/EvDbStreamAddress";
2
+ export default class EvDbViewAddress extends EvDbStreamAddress {
3
+ constructor(streamAddressOrType, viewNameOrStreamId, viewName) {
4
+ if (streamAddressOrType instanceof EvDbStreamAddress &&
5
+ typeof viewNameOrStreamId === "string" &&
6
+ !viewName) {
7
+ const streamAddress = streamAddressOrType;
8
+ super(streamAddress.streamType, streamAddress.streamId);
9
+ this.viewName = viewNameOrStreamId;
10
+ return;
11
+ }
12
+ if (typeof streamAddressOrType === 'string' &&
13
+ typeof viewNameOrStreamId === 'string' &&
14
+ typeof viewName === 'string') {
15
+ super(streamAddressOrType, viewNameOrStreamId);
16
+ this.viewName = viewName;
17
+ return;
18
+ }
19
+ throw new Error('Unsupported set or arguments');
20
+ }
21
+ }
22
+ //# sourceMappingURL=EvDbViewAddress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvDbViewAddress.js","sourceRoot":"","sources":["../src/EvDbViewAddress.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,sCAAsC,CAAC;AAErE,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,iBAAiB;IAE1D,YAAY,mBAA+C,EAAE,kBAA0B,EAAE,QAAiB;QACtG,IAAI,mBAAmB,YAAY,iBAAiB;YAChD,OAAO,kBAAkB,KAAK,QAAQ;YACtC,CAAC,QAAQ,EACX,CAAC;YACC,MAAM,aAAa,GAAG,mBAAwC,CAAC;YAC/D,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxD,IAAI,CAAC,QAAQ,GAAG,kBAAkB,CAAC;YACnC,OAAO;QACX,CAAC;QACD,IAAI,OAAO,mBAAmB,KAAK,QAAQ;YACvC,OAAO,kBAAkB,KAAK,QAAQ;YACtC,OAAO,QAAQ,KAAK,QAAQ,EAC9B,CAAC;YACC,KAAK,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,OAAO;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IAEnD,CAAC;CACJ"}
@@ -0,0 +1,58 @@
1
+ import { EvDbShardName } from "./primitiveTypes.js";
2
+ import EvDbMessageFilter from "./EvDbMessageFilter.js";
3
+ import EvDbContinuousFetchOptions from "./EvDbContinuousFetchOptions.js";
4
+ import EvDbMessage from "./EvDbMessage.js";
5
+ export default interface IEvDbChangeStream {
6
+ /**
7
+ * Gets stream of stored messages.
8
+ * @param filter - filtering options use `EvDbMessageFilter.Builder` for the filter creation.
9
+ * @param options - Options for the continuous fetch.
10
+ * @returns Stream of messages
11
+ */
12
+ getFromOutbox(filter: EvDbMessageFilter, options?: EvDbContinuousFetchOptions | null): Promise<AsyncIterable<EvDbMessage>>;
13
+ /**
14
+ * Gets stream of stored messages.
15
+ * @param shard - The shard (table/collection) of the messages
16
+ * @param filter - filtering options use `EvDbMessageFilter.Builder` for the filter creation.
17
+ * @param options - Options for the continuous fetch.
18
+ * @param cancellation - The cancellation.
19
+ * @returns Stream of messages
20
+ */
21
+ getFromOutboxAsync(shard: EvDbShardName, filter: EvDbMessageFilter, options?: EvDbContinuousFetchOptions | null, cancellation?: AbortSignal): AsyncIterable<EvDbMessage>;
22
+ /**
23
+ * Gets stored messages.
24
+ * @param filter - filtering options use `EvDbMessageFilter.Builder` for the filter creation.
25
+ * @param options - Options for the continuous fetch.
26
+ * @param cancellation - The cancellation.
27
+ * @returns Stream of messages
28
+ */
29
+ getRecordsFromOutboxAsync(filter: EvDbMessageFilter, options?: EvDbContinuousFetchOptions | null, cancellation?: AbortSignal): AsyncIterable<EvDbMessage>;
30
+ /**
31
+ * Gets stream of stored messages.
32
+ * @param shard - The shard (table/collection) of the messages
33
+ * @param filter - filtering options use `EvDbMessageFilter.Builder` for the filter creation.
34
+ * @param options - Options for the continuous fetch.
35
+ * @param cancellation - The cancellation.
36
+ * @returns Stream of messages
37
+ */
38
+ getRecordsFromOutboxAsync(shard: EvDbShardName, filter: EvDbMessageFilter, options?: EvDbContinuousFetchOptions | null, cancellation?: AbortSignal): AsyncIterable<EvDbMessage>;
39
+ /**
40
+ * Subscribe to a stream of stored messages into via Dataflow Block.
41
+ * You can control the concurrency and back pressure of the Dataflow Block to control how many messages will be processed in parallel and BoundedCapacity.
42
+ * Complete the Dataflow Block when the stream is completed or cancelled.
43
+ * @param handler - The subscription handler
44
+ * @param filter - filtering options use `EvDbMessageFilter.Builder` for the filter creation.
45
+ * @param options - Options for the continuous fetch.
46
+ */
47
+ subscribeToMessageAsync(handler: (message: EvDbMessage) => Promise<void>, filter: EvDbMessageFilter, options?: EvDbContinuousFetchOptions | null): Promise<void>;
48
+ /**
49
+ * Subscribe to a stream of stored messages into via Dataflow Block.
50
+ * You can control the concurrency and back pressure of the Dataflow Block to control how many messages will be processed in parallel and BoundedCapacity.
51
+ * Complete the Dataflow Block when the stream is completed or cancelled.
52
+ * @param handler - The subscription handler
53
+ * @param shard - The shard (table/collection) of the messages
54
+ * @param filter - filtering options use `EvDbMessageFilter.Builder` for the filter creation.
55
+ * @param options - Options for the continuous fetch.
56
+ */
57
+ subscribeToMessageAsync(handler: (message: EvDbMessage) => Promise<void>, shard: EvDbShardName, filter: EvDbMessageFilter, options?: EvDbContinuousFetchOptions | null): Promise<void>;
58
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IEvDbChangeStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IEvDbChangeStream.js","sourceRoot":"","sources":["../src/IEvDbChangeStream.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import EvDbStreamCursor from "./EvDbStreamCursor.js";
2
+ export default interface IEvDbEventMetadata {
3
+ /**
4
+ * The full address of the stream including the offset
5
+ */
6
+ readonly streamCursor: EvDbStreamCursor;
7
+ /**
8
+ * The type of the event
9
+ */
10
+ readonly eventType: string;
11
+ /**
12
+ * The time of capturing the event (client side time)
13
+ */
14
+ readonly capturedAt: Date;
15
+ readonly storedAt?: Date | null;
16
+ /**
17
+ * The user that captured the event
18
+ */
19
+ readonly capturedBy: string;
20
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IEvDbEventMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IEvDbEventMetadata.js","sourceRoot":"","sources":["../src/IEvDbEventMetadata.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export interface IEvDbPayloadData {
2
+ [key: string]: any;
3
+ }
4
+ export default interface IEvDbEventPayload extends IEvDbPayloadData {
5
+ readonly payloadType: string;
6
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IEvDbEventPayload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IEvDbEventPayload.js","sourceRoot":"","sources":["../src/IEvDbEventPayload.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import IEvDbEventPayload from "./IEvDbEventPayload.js";
2
+ import IEvDbEventMetadata from "./IEvDbEventMetadata.js";
3
+ type EvDbStreamEventHandler = (event: IEvDbEventPayload, capturedBy?: string) => Promise<IEvDbEventMetadata>;
4
+ type EvDbStreamEventHandlersMap<TEvents extends IEvDbEventPayload> = Partial<{
5
+ [E in TEvents as `apply${E['payloadType']}`]: EvDbStreamEventHandler;
6
+ }>;
7
+ export default EvDbStreamEventHandlersMap;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IEvDbEventsSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IEvDbEventsSet.js","sourceRoot":"","sources":["../src/IEvDbEventsSet.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Interface for EvDb storage administration
3
+ * Handles environment setup and teardown operations
4
+ */
5
+ export default interface IEvDbStorageAdmin {
6
+ /**
7
+ * Create the database environment (tables, indexes, etc.)
8
+ */
9
+ createEnvironmentAsync(): Promise<void>;
10
+ /**
11
+ * Destroy the database environment (drop tables, schema, etc.)
12
+ */
13
+ destroyEnvironmentAsync(): Promise<void>;
14
+ /**
15
+ * Clear environment data (delete from tables, etc.)
16
+ */
17
+ clearEnvironmentAsync(): Promise<void>;
18
+ /**
19
+ * Dispose of resources synchronously (if applicable)
20
+ */
21
+ dispose?(): void;
22
+ /**
23
+ * Dispose of resources asynchronously
24
+ */
25
+ disposeAsync(): Promise<void>;
26
+ /**
27
+ * Close the connection to the store
28
+ */
29
+ close(): Promise<void>;
30
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IEvDbStorageAdmin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IEvDbStorageAdmin.js","sourceRoot":"","sources":["../src/IEvDbStorageAdmin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import { EvDbStoredSnapshotResultRaw } from "./EvDbStoredSnapshotResult.js";
2
+ import { EvDbStoredSnapshotData } from "./EvDbStoredSnapshotData.js";
3
+ import EvDbViewAddress from "./EvDbViewAddress.js";
4
+ /**
5
+ * Adapter for storing and retrieving view snapshots
6
+ */
7
+ export default interface IEvDbStorageSnapshotAdapter {
8
+ /**
9
+ * Gets the latest stored view snapshot or an empty snapshot if none exists.
10
+ * @param viewAddress The view address
11
+ * @param signal Optional AbortSignal for cancellation
12
+ * @returns The stored snapshot result
13
+ */
14
+ getSnapshotAsync(viewAddress: EvDbViewAddress): Promise<EvDbStoredSnapshotResultRaw>;
15
+ /**
16
+ * Stores the view's state as a snapshot.
17
+ * @param snapshotData Snapshot data and metadata
18
+ * @param signal Optional AbortSignal for cancellation
19
+ */
20
+ storeSnapshotAsync(snapshotData: EvDbStoredSnapshotData): Promise<void>;
21
+ /**
22
+ * Close the storage adapter connection
23
+ * @returns Promise of void
24
+ */
25
+ close(): Promise<void>;
26
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IEvDbStorageSnapshotAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IEvDbStorageSnapshotAdapter.js","sourceRoot":"","sources":["../src/IEvDbStorageSnapshotAdapter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import EvDbStreamCursor from "./EvDbStreamCursor.js";
2
+ import EvDbEvent from "./EvDbEvent.js";
3
+ import EvDbMessage from "./EvDbMessage.js";
4
+ import EvDbStreamAddress from "./EvDbStreamAddress";
5
+ import StreamStoreAffected from "./StreamStoreAffected.js";
6
+ import IEvDbChangeStream from "./IEvDbChangeStream.js";
7
+ export default interface IEvDbStorageStreamAdapter extends IEvDbChangeStream {
8
+ /**
9
+ * Gets stored events.
10
+ * @param streamCursor - The streamCursor.
11
+ * @returns Async iterable of EvDbEvent
12
+ */
13
+ getEventsAsync(streamCursor: EvDbStreamCursor): AsyncGenerator<EvDbEvent, void, undefined>;
14
+ /**
15
+ * Gets last stored event's offset.
16
+ * Used when getting a stream that has no views.
17
+ * In this case the last offset fetched from the events rather than views.
18
+ * @param address - The stream address
19
+ * @returns Promise resolving to the last offset
20
+ */
21
+ getLastOffsetAsync(address: EvDbStreamAddress): Promise<number>;
22
+ /**
23
+ * Saves the pending events to the stream
24
+ * @param events - The events to save
25
+ * @param messages - The messages to save.
26
+ * @returns Promise resolving to count of added events
27
+ */
28
+ storeStreamAsync(events: ReadonlyArray<EvDbEvent>, messages: ReadonlyArray<EvDbMessage>): Promise<StreamStoreAffected>;
29
+ /**
30
+ * Close the storage adapter connection
31
+ * @returns Promise of void
32
+ */
33
+ close(): Promise<void>;
34
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IEvDbStorageStreamAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IEvDbStorageStreamAdapter.js","sourceRoot":"","sources":["../src/IEvDbStorageStreamAdapter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import EvDbStreamAddress from "./EvDbStreamAddress.js";
2
+ import StreamStoreAffected from "./StreamStoreAffected.js";
3
+ export default interface IEvDbStreamStore {
4
+ /** The offset of the last event that was stored */
5
+ readonly storedOffset: number;
6
+ /** The stream's address */
7
+ readonly streamAddress: EvDbStreamAddress;
8
+ /** Number of events that were not stored yet */
9
+ readonly countOfPendingEvents: number;
10
+ /**
11
+ * Saves pending events into the injected storage.
12
+ * @param signal Optional AbortSignal to cancel the operation
13
+ * @returns Count of added events
14
+ */
15
+ store(signal?: AbortSignal): Promise<StreamStoreAffected>;
16
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IEvDbStreamStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IEvDbStreamStore.js","sourceRoot":"","sources":["../src/IEvDbStreamStore.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import EvDbStreamAddress from "./EvDbStreamAddress.js";
2
+ import IEvDbView from "./IEvDbView.js";
3
+ import EvDbEvent from "./EvDbEvent.js";
4
+ import EvDbMessage from "./EvDbMessage.js";
5
+ type ImmutableIEvDbView = Readonly<IEvDbView>;
6
+ export type ImmutableIEvDbViewMap = Readonly<Record<string, ImmutableIEvDbView>>;
7
+ export default interface IEvDbStreamStoreData {
8
+ /** Serialization options (optional) */
9
+ options?: Record<string, any>;
10
+ /** Views (unspecialized) */
11
+ getViews: () => ImmutableIEvDbViewMap;
12
+ getView(viewName: string): ImmutableIEvDbView | undefined;
13
+ /** Unspecialized events */
14
+ getEvents: () => ReadonlyArray<EvDbEvent>;
15
+ /** Unspecialized notifications */
16
+ getMessages: () => ReadonlyArray<EvDbMessage>;
17
+ /** Stream address (uniqueness) */
18
+ streamAddress: EvDbStreamAddress;
19
+ }
20
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IEvDbStreamStoreData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IEvDbStreamStoreData.js","sourceRoot":"","sources":["../src/IEvDbStreamStoreData.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import EvDbViewAddress from "./EvDbViewAddress.js";
2
+ export default interface IEvDbView {
3
+ /**
4
+ * Gets the offset of the last folded event (in-memory).
5
+ */
6
+ readonly memoryOffset: number;
7
+ /**
8
+ * Gets the name of the view.
9
+ */
10
+ readonly address: EvDbViewAddress;
11
+ /**
12
+ * The offset of the last snapshot that was stored.
13
+ */
14
+ readonly storeOffset: number;
15
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IEvDbView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IEvDbView.js","sourceRoot":"","sources":["../src/IEvDbView.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import IEvDbEventPayload from "./IEvDbEventPayload.js";
2
+ import IEvDbEventMetadata from "./IEvDbEventMetadata.js";
3
+ type IEvDbViewAppliesSet<Tstate, TEvents extends IEvDbEventPayload> = {
4
+ [E in TEvents as `apply${E['payloadType']}`]: (oldState: Tstate, newEvent: E, eventMetadata: IEvDbEventMetadata) => Tstate;
5
+ };
6
+ export default IEvDbViewAppliesSet;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IEvDbViewAppliesSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IEvDbViewAppliesSet.js","sourceRoot":"","sources":["../src/IEvDbViewAppliesSet.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import IEvDbView from "./IEvDbView.js";
2
+ import EvDbEvent from "./EvDbEvent.js";
3
+ import { EvDbStoredSnapshotData } from "./EvDbStoredSnapshotData.js";
4
+ export default interface IEvDbViewStore extends IEvDbView {
5
+ /**
6
+ * Indication whether the snapshot should be saved.
7
+ * Useful for offset gaps, time since last save, or reacting to specific events.
8
+ */
9
+ shouldStoreSnapshot(offsetGapFromLastSave: number, durationSinceLastSaveMs: number): boolean;
10
+ /**
11
+ * Apply event to the aggregate/view.
12
+ */
13
+ applyEvent(e: EvDbEvent): void;
14
+ /**
15
+ * Get the snapshot data.
16
+ */
17
+ getSnapshotData(): EvDbStoredSnapshotData;
18
+ /**
19
+ * Save snapshot data.
20
+ */
21
+ store(): Promise<void>;
22
+ }
23
+ export interface IEvDbViewStoreGeneric<TState> extends IEvDbViewStore {
24
+ /**
25
+ * Get the current state of the view.
26
+ */
27
+ state: TState;
28
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IEvDbViewStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IEvDbViewStore.js","sourceRoot":"","sources":["../src/IEvDbViewStore.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import EvDbSnapshotCursor from "@eventualize/types/EvDbSnapshotCursor";
2
+ /**
3
+ * Optimistic Concurrency Collisions Exception
4
+ */
5
+ export default class OCCException extends Error {
6
+ constructor();
7
+ /** @deprecated Shouldn't be used directly; used by the serialization */
8
+ constructor(message: string);
9
+ constructor(cursor: EvDbSnapshotCursor);
10
+ constructor(cursor: EvDbSnapshotCursor, innerException: Error);
11
+ /** Optional inner exception for chaining */
12
+ innerException?: Error;
13
+ }
@@ -0,0 +1,26 @@
1
+ import EvDbSnapshotCursor from "@eventualize/types/EvDbSnapshotCursor";
2
+ /**
3
+ * Optimistic Concurrency Collisions Exception
4
+ */
5
+ export default class OCCException extends Error {
6
+ constructor(arg1, arg2) {
7
+ if (typeof arg1 === "string") {
8
+ // Obsolete constructor
9
+ super(arg1);
10
+ }
11
+ else if (arg1 instanceof EvDbSnapshotCursor) {
12
+ super(arg1.toString());
13
+ if (arg2) {
14
+ // Attach inner exception as a property (TypeScript does not have built-in inner exceptions)
15
+ this.innerException = arg2;
16
+ }
17
+ }
18
+ else {
19
+ super(); // parameterless constructor
20
+ }
21
+ // Set the prototype explicitly (needed for extending built-in Error in TypeScript)
22
+ Object.setPrototypeOf(this, OCCException.prototype);
23
+ this.name = "OCCException";
24
+ }
25
+ }
26
+ //# sourceMappingURL=OCCException.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OCCException.js","sourceRoot":"","sources":["../src/OCCException.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,uCAAuC,CAAC;AAEvE;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,KAAK;IAM3C,YAAY,IAAkC,EAAE,IAAY;QACxD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,uBAAuB;YACvB,KAAK,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,YAAY,kBAAkB,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvB,IAAI,IAAI,EAAE,CAAC;gBACP,4FAA4F;gBAC3F,IAAY,CAAC,cAAc,GAAG,IAAI,CAAC;YACxC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,KAAK,EAAE,CAAC,CAAC,4BAA4B;QACzC,CAAC;QAED,mFAAmF;QACnF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QAEpD,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC/B,CAAC;CAIJ"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Indicate how many events and messages were affected.
3
+ */
4
+ type EvDbOutboxShardName = string;
5
+ export default class StreamStoreAffected {
6
+ readonly numEvents: number;
7
+ readonly numMessages: ReadonlyMap<EvDbOutboxShardName, number> | undefined;
8
+ static readonly Empty: StreamStoreAffected;
9
+ constructor(numEvents: number, numMessages: ReadonlyMap<EvDbOutboxShardName, number> | undefined);
10
+ }
11
+ export {};
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Indicate how many events and messages were affected.
3
+ */
4
+ class StreamStoreAffected {
5
+ constructor(numEvents, numMessages) {
6
+ this.numEvents = numEvents;
7
+ this.numMessages = numMessages;
8
+ }
9
+ }
10
+ StreamStoreAffected.Empty = new StreamStoreAffected(0, new Map());
11
+ export default StreamStoreAffected;
12
+ //# sourceMappingURL=StreamStoreAffected.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamStoreAffected.js","sourceRoot":"","sources":["../src/StreamStoreAffected.ts"],"names":[],"mappings":"AAAA;;EAEE;AAIF,MAAqB,mBAAmB;IAMtC,YACE,SAAiB,EACjB,WAAiE;QAEjE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;;AARsB,yBAAK,GAAG,IAAI,mBAAmB,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;eAJlD,mBAAmB"}
@@ -0,0 +1,7 @@
1
+ export type EvDbShardName = string;
2
+ export type EvDbChannelName = string;
3
+ export type EvDbMessageTypeName = string;
4
+ export type EvDbEventTypeName = string;
5
+ export type EvDbStreamTypeName = string;
6
+ export type EvDbStreamId = string;
7
+ export type EvDbStreamType = string;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=primitiveTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitiveTypes.js","sourceRoot":"","sources":["../src/primitiveTypes.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@eventualize/types",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "types": "./dist/index.d.ts"
11
+ },
12
+ "./*": "./dist/*.js"
13
+ },
14
+ "scripts": {
15
+ "build": "tsc --build",
16
+ "clean": "rimraf dist",
17
+ "rebuild": "npm run clean && npm run build",
18
+ "test": "echo not tests implemented yet."
19
+ },
20
+ "license": "ISC",
21
+ "type": "module",
22
+ "devDependencies": {
23
+ "@prisma/client": "^7.1.0",
24
+ "dotenv": "^17.2.3",
25
+ "prisma": "^7.1.0"
26
+ }
27
+ }
@@ -0,0 +1,23 @@
1
+ export default class DelayStrategy {
2
+ startDuration: number; // milliseconds
3
+ incrementalLogic: (lastDelay: number, attempt: number) => number;
4
+
5
+ constructor(init?: Partial<DelayStrategy>) {
6
+ this.startDuration = init?.startDuration ?? 200; // 200 ms default
7
+ this.incrementalLogic = init?.incrementalLogic ?? this.defaultNextDelay.bind(this);
8
+ }
9
+
10
+ private defaultNextDelay(lastDelay: number, attempt: number): number {
11
+ if (attempt <= 5) {
12
+ return this.startDuration;
13
+ }
14
+
15
+ // When lastDelay == 0 → return 50ms
16
+ if (lastDelay === 0) {
17
+ return 50;
18
+ }
19
+
20
+ // Exponential growth: double the last delay
21
+ return lastDelay * 2;
22
+ }
23
+ }
@@ -0,0 +1,22 @@
1
+ import DelayStrategy from "./DelayStrategy.js";
2
+
3
+ export default class EvDbContinuousFetchOptions {
4
+ private static readonly MAX_DELAY_SEC = 3;
5
+
6
+ static readonly CompleteIfEmpty = new EvDbContinuousFetchOptions({
7
+ completeWhenEmpty: true
8
+ });
9
+
10
+ static readonly ContinueWhenEmpty = new EvDbContinuousFetchOptions();
11
+
12
+ completeWhenEmpty: boolean;
13
+ delayWhenEmpty: DelayStrategy;
14
+ maxDelayWhenEmpty: number; // milliseconds
15
+
16
+ constructor(init?: Partial<EvDbContinuousFetchOptions>) {
17
+ this.completeWhenEmpty = init?.completeWhenEmpty ?? false;
18
+ this.delayWhenEmpty = init?.delayWhenEmpty ?? new DelayStrategy();
19
+ this.maxDelayWhenEmpty = init?.maxDelayWhenEmpty
20
+ ?? EvDbContinuousFetchOptions.MAX_DELAY_SEC * 1000;
21
+ }
22
+ }
@@ -0,0 +1,15 @@
1
+ import EvDbStreamCursor from "./EvDbStreamCursor.js";
2
+ import IEvDbEventMetadata from "./IEvDbEventMetadata.js";
3
+ import IEvDbEventPayload from "./IEvDbEventPayload.js";
4
+
5
+ export default class EvDbEvent implements IEvDbEventMetadata {
6
+
7
+ constructor(
8
+ public readonly eventType: string,
9
+ public readonly streamCursor: EvDbStreamCursor,
10
+ public readonly payload: IEvDbEventPayload,
11
+ public readonly capturedAt: Date = new Date(Date.now()),
12
+ public readonly capturedBy: string = 'N/A',
13
+ public readonly storedAt?: Date,
14
+ ) { }
15
+ }