@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,35 @@
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
+ /**
12
+ * Destroy the database environment (drop tables, schema, etc.)
13
+ */
14
+ destroyEnvironmentAsync(): Promise<void>;
15
+
16
+ /**
17
+ * Clear environment data (delete from tables, etc.)
18
+ */
19
+ clearEnvironmentAsync(): Promise<void>;
20
+
21
+ /**
22
+ * Dispose of resources synchronously (if applicable)
23
+ */
24
+ dispose?(): void;
25
+
26
+ /**
27
+ * Dispose of resources asynchronously
28
+ */
29
+ disposeAsync(): Promise<void>;
30
+
31
+ /**
32
+ * Close the connection to the store
33
+ */
34
+ close(): Promise<void>;
35
+ }
@@ -0,0 +1,29 @@
1
+ import { EvDbStoredSnapshotResultRaw } from "./EvDbStoredSnapshotResult.js";
2
+ import { EvDbStoredSnapshotData } from "./EvDbStoredSnapshotData.js";
3
+ import EvDbViewAddress from "./EvDbViewAddress.js";
4
+
5
+ /**
6
+ * Adapter for storing and retrieving view snapshots
7
+ */
8
+ export default interface IEvDbStorageSnapshotAdapter {
9
+ /**
10
+ * Gets the latest stored view snapshot or an empty snapshot if none exists.
11
+ * @param viewAddress The view address
12
+ * @param signal Optional AbortSignal for cancellation
13
+ * @returns The stored snapshot result
14
+ */
15
+ getSnapshotAsync(viewAddress: EvDbViewAddress): Promise<EvDbStoredSnapshotResultRaw>;
16
+
17
+ /**
18
+ * Stores the view's state as a snapshot.
19
+ * @param snapshotData Snapshot data and metadata
20
+ * @param signal Optional AbortSignal for cancellation
21
+ */
22
+ storeSnapshotAsync(snapshotData: EvDbStoredSnapshotData): Promise<void>;
23
+
24
+ /**
25
+ * Close the storage adapter connection
26
+ * @returns Promise of void
27
+ */
28
+ close(): Promise<void>
29
+ }
@@ -0,0 +1,43 @@
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
+
8
+ export default interface IEvDbStorageStreamAdapter extends IEvDbChangeStream {
9
+ /**
10
+ * Gets stored events.
11
+ * @param streamCursor - The streamCursor.
12
+ * @returns Async iterable of EvDbEvent
13
+ */
14
+ getEventsAsync(streamCursor: EvDbStreamCursor): AsyncGenerator<EvDbEvent, void, undefined>;
15
+
16
+ /**
17
+ * Gets last stored event's offset.
18
+ * Used when getting a stream that has no views.
19
+ * In this case the last offset fetched from the events rather than views.
20
+ * @param address - The stream address
21
+ * @returns Promise resolving to the last offset
22
+ */
23
+ getLastOffsetAsync(
24
+ address: EvDbStreamAddress,
25
+ ): Promise<number>;
26
+
27
+ /**
28
+ * Saves the pending events to the stream
29
+ * @param events - The events to save
30
+ * @param messages - The messages to save.
31
+ * @returns Promise resolving to count of added events
32
+ */
33
+ storeStreamAsync(
34
+ events: ReadonlyArray<EvDbEvent>,
35
+ messages: ReadonlyArray<EvDbMessage>,
36
+ ): Promise<StreamStoreAffected>;
37
+
38
+ /**
39
+ * Close the storage adapter connection
40
+ * @returns Promise of void
41
+ */
42
+ close(): Promise<void>
43
+ }
@@ -0,0 +1,22 @@
1
+ import EvDbStreamAddress from "./EvDbStreamAddress.js";
2
+ import StreamStoreAffected from "./StreamStoreAffected.js";
3
+
4
+
5
+
6
+ export default interface IEvDbStreamStore {
7
+ /** The offset of the last event that was stored */
8
+ readonly storedOffset: number;
9
+
10
+ /** The stream's address */
11
+ readonly streamAddress: EvDbStreamAddress;
12
+
13
+ /** Number of events that were not stored yet */
14
+ readonly countOfPendingEvents: number;
15
+
16
+ /**
17
+ * Saves pending events into the injected storage.
18
+ * @param signal Optional AbortSignal to cancel the operation
19
+ * @returns Count of added events
20
+ */
21
+ store(signal?: AbortSignal): Promise<StreamStoreAffected>;
22
+ }
@@ -0,0 +1,27 @@
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
+
6
+ type ImmutableIEvDbView = Readonly<IEvDbView>;
7
+ export type ImmutableIEvDbViewMap = Readonly<Record<string, ImmutableIEvDbView>>;
8
+
9
+
10
+ export default interface IEvDbStreamStoreData {
11
+ /** Serialization options (optional) */
12
+ options?: Record<string, any>; // JsonSerializerOptions equivalent in TS
13
+
14
+ /** Views (unspecialized) */
15
+ getViews: () => ImmutableIEvDbViewMap;
16
+
17
+ getView(viewName: string): ImmutableIEvDbView | undefined;
18
+
19
+ /** Unspecialized events */
20
+ getEvents: () => ReadonlyArray<EvDbEvent>;
21
+
22
+ /** Unspecialized notifications */
23
+ getMessages: () => ReadonlyArray<EvDbMessage>;
24
+
25
+ /** Stream address (uniqueness) */
26
+ streamAddress: EvDbStreamAddress;
27
+ }
@@ -0,0 +1,18 @@
1
+ import EvDbViewAddress from "./EvDbViewAddress.js";
2
+
3
+ export default interface IEvDbView {
4
+ /**
5
+ * Gets the offset of the last folded event (in-memory).
6
+ */
7
+ readonly memoryOffset: number;
8
+
9
+ /**
10
+ * Gets the name of the view.
11
+ */
12
+ readonly address: EvDbViewAddress;
13
+
14
+ /**
15
+ * The offset of the last snapshot that was stored.
16
+ */
17
+ readonly storeOffset: number;
18
+ }
@@ -0,0 +1,8 @@
1
+ import IEvDbEventPayload from "./IEvDbEventPayload.js";
2
+ import IEvDbEventMetadata from "./IEvDbEventMetadata.js";
3
+
4
+ type IEvDbViewAppliesSet<Tstate, TEvents extends IEvDbEventPayload> = {
5
+ [E in TEvents as `apply${E['payloadType']}`]: (oldState: Tstate, newEvent: E, eventMetadata: IEvDbEventMetadata) => Tstate;
6
+ };
7
+
8
+ export default IEvDbViewAppliesSet;
@@ -0,0 +1,38 @@
1
+ import IEvDbView from "./IEvDbView.js";
2
+ import EvDbEvent from "./EvDbEvent.js";
3
+ import { EvDbStoredSnapshotData } from "./EvDbStoredSnapshotData.js";
4
+
5
+
6
+ /// View store contract.
7
+ export default interface IEvDbViewStore extends IEvDbView {
8
+ /**
9
+ * Indication whether the snapshot should be saved.
10
+ * Useful for offset gaps, time since last save, or reacting to specific events.
11
+ */
12
+ shouldStoreSnapshot(
13
+ offsetGapFromLastSave: number,
14
+ durationSinceLastSaveMs: number // TimeSpan → milliseconds
15
+ ): boolean;
16
+
17
+ /**
18
+ * Apply event to the aggregate/view.
19
+ */
20
+ applyEvent(e: EvDbEvent): void;
21
+
22
+ /**
23
+ * Get the snapshot data.
24
+ */
25
+ getSnapshotData(): EvDbStoredSnapshotData;
26
+
27
+ /**
28
+ * Save snapshot data.
29
+ */
30
+ store(): Promise<void>;
31
+ }
32
+
33
+ export interface IEvDbViewStoreGeneric<TState> extends IEvDbViewStore {
34
+ /**
35
+ * Get the current state of the view.
36
+ */
37
+ state: TState;
38
+ }
@@ -0,0 +1,34 @@
1
+ import EvDbSnapshotCursor from "@eventualize/types/EvDbSnapshotCursor";
2
+
3
+ /**
4
+ * Optimistic Concurrency Collisions Exception
5
+ */
6
+ export default class OCCException extends Error {
7
+ constructor();
8
+ /** @deprecated Shouldn't be used directly; used by the serialization */
9
+ constructor(message: string);
10
+ constructor(cursor: EvDbSnapshotCursor);
11
+ constructor(cursor: EvDbSnapshotCursor, innerException: Error);
12
+ constructor(arg1?: string | EvDbSnapshotCursor, arg2?: Error) {
13
+ if (typeof arg1 === "string") {
14
+ // Obsolete constructor
15
+ super(arg1);
16
+ } else if (arg1 instanceof EvDbSnapshotCursor) {
17
+ super(arg1.toString());
18
+ if (arg2) {
19
+ // Attach inner exception as a property (TypeScript does not have built-in inner exceptions)
20
+ (this as any).innerException = arg2;
21
+ }
22
+ } else {
23
+ super(); // parameterless constructor
24
+ }
25
+
26
+ // Set the prototype explicitly (needed for extending built-in Error in TypeScript)
27
+ Object.setPrototypeOf(this, OCCException.prototype);
28
+
29
+ this.name = "OCCException";
30
+ }
31
+
32
+ /** Optional inner exception for chaining */
33
+ public innerException?: Error;
34
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Indicate how many events and messages were affected.
3
+ */
4
+
5
+ type EvDbOutboxShardName = string;
6
+
7
+ export default class StreamStoreAffected {
8
+ public readonly numEvents: number;
9
+ public readonly numMessages: ReadonlyMap<EvDbOutboxShardName, number> | undefined;
10
+
11
+ public static readonly Empty = new StreamStoreAffected(0, new Map());
12
+
13
+ constructor(
14
+ numEvents: number,
15
+ numMessages: ReadonlyMap<EvDbOutboxShardName, number> | undefined
16
+ ) {
17
+ this.numEvents = numEvents;
18
+ this.numMessages = numMessages;
19
+ }
20
+ }
@@ -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;
package/tsconfig.json ADDED
@@ -0,0 +1,15 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "./dist",
5
+ "rootDir": "./src",
6
+ "moduleResolution": "node",
7
+ "module": "es2020",
8
+ "target": "es2020",
9
+ "strict": true,
10
+ "esModuleInterop": true,
11
+ },
12
+ "include": [
13
+ "src/**/*.ts"
14
+ ]
15
+ }