Skip to content

Commit 1dae4a8

Browse files
committed
Fixed the event store read event metadata inference
Now, it'll be possible to use tryPublishMessagesAfterCommit method without type errors
1 parent 52a3ba7 commit 1dae4a8

File tree

4 files changed

+27
-15
lines changed

4 files changed

+27
-15
lines changed

src/packages/emmett-mongodb/src/eventStore/mongoDBEventStore.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
import {
2-
ExpectedVersionConflictError,
32
assertExpectedVersionMatchesCurrent,
3+
ExpectedVersionConflictError,
44
filterProjections,
55
tryPublishMessagesAfterCommit,
66
type AggregateStreamOptions,
77
type AggregateStreamResult,
88
type AppendToStreamOptions,
99
type AppendToStreamResult,
1010
type Closeable,
11+
type DefaultEventStoreOptions,
1112
type Event,
1213
type EventStore,
1314
type ProjectionRegistration,
1415
type ReadEvent,
1516
type ReadEventMetadataWithoutGlobalPosition,
1617
type ReadStreamOptions,
1718
type ReadStreamResult,
18-
type DefaultEventStoreOptions,
1919
} from '@event-driven-io/emmett';
2020
import {
2121
MongoClient,
@@ -394,7 +394,6 @@ class MongoDBEventStoreImplementation implements MongoDBEventStore, Closeable {
394394
}
395395

396396
await tryPublishMessagesAfterCommit<MongoDBEventStore>(
397-
// @ts-expect-error Issues with `globalPosition` not being present causing the type for metadata to expect `never`
398397
eventsToAppend,
399398
this.options.hooks,
400399
// {

src/packages/emmett/src/eventStore/eventStore.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ import type {
33
AnyReadEventMetadata,
44
BigIntGlobalPosition,
55
BigIntStreamPosition,
6+
CommonReadEventMetadata,
67
Event,
78
GlobalPositionTypeOfReadEventMetadata,
89
ReadEvent,
910
ReadEventMetadata,
1011
StreamPositionTypeOfReadEventMetadata,
12+
WithGlobalPosition,
1113
} from '../typing';
1214
import type { AfterEventStoreCommitHandler } from './afterCommit';
1315
//import type { GlobalSubscriptionEvent } from './events';
@@ -52,9 +54,11 @@ export interface EventStore<
5254
}
5355

5456
export type EventStoreReadEventMetadata<Store extends EventStore> =
55-
Store extends EventStore<infer ReadEventMetadataType>
56-
? ReadEventMetadataType extends ReadEventMetadata<infer GV, infer SV>
57-
? ReadEventMetadata<GV, SV> & ReadEventMetadataType
57+
Store extends EventStore<infer T>
58+
? T extends CommonReadEventMetadata<infer SP>
59+
? T extends WithGlobalPosition<infer GP>
60+
? ReadEventMetadata<GP, SP> & T
61+
: ReadEventMetadata<undefined, SP> & T
5862
: never
5963
: never;
6064

src/packages/emmett/src/eventStore/inMemoryEventStore.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,10 @@ export const getInMemoryEventStore = (
173173
currentStreamVersion === InMemoryEventStoreDefaultStreamVersion,
174174
};
175175

176-
await tryPublishMessagesAfterCommit(newEvents, eventStoreOptions?.hooks);
176+
await tryPublishMessagesAfterCommit<InMemoryEventStore>(
177+
newEvents,
178+
eventStoreOptions?.hooks,
179+
);
177180

178181
return result;
179182
},

src/packages/emmett/src/typing/event.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,17 +80,23 @@ export type ReadEvent<
8080
metadata: CombinedReadEventMetadata<EventType, EventMetaDataType>;
8181
};
8282

83+
export type CommonReadEventMetadata<StreamPosition = BigIntStreamPosition> =
84+
Readonly<{
85+
eventId: string;
86+
streamPosition: StreamPosition;
87+
streamName: string;
88+
}>;
89+
90+
export type WithGlobalPosition<GlobalPosition> = Readonly<{
91+
globalPosition: GlobalPosition;
92+
}>;
93+
8394
export type ReadEventMetadata<
8495
GlobalPosition = undefined,
8596
StreamPosition = BigIntStreamPosition,
86-
> = Readonly<{
87-
eventId: string;
88-
streamPosition: StreamPosition;
89-
streamName: string;
90-
}> &
91-
(GlobalPosition extends undefined
92-
? object
93-
: { globalPosition: GlobalPosition });
97+
> = CommonReadEventMetadata<StreamPosition> &
98+
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
99+
(GlobalPosition extends undefined ? {} : WithGlobalPosition<GlobalPosition>);
94100

95101
// eslint-disable-next-line @typescript-eslint/no-explicit-any
96102
export type AnyReadEventMetadata = ReadEventMetadata<any, any>;

0 commit comments

Comments
 (0)