diff options
Diffstat (limited to 'packages/backend/src/core/GlobalEventService.ts')
| -rw-r--r-- | packages/backend/src/core/GlobalEventService.ts | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/packages/backend/src/core/GlobalEventService.ts b/packages/backend/src/core/GlobalEventService.ts index 2a7d8d4bbe..312bcfb3b5 100644 --- a/packages/backend/src/core/GlobalEventService.ts +++ b/packages/backend/src/core/GlobalEventService.ts @@ -209,6 +209,10 @@ type SerializedAll<T> = { [K in keyof T]: Serialized<T[K]>; }; +type UndefinedAsNullAll<T> = { + [K in keyof T]: T[K] extends undefined ? null : T[K]; +} + export interface InternalEventTypes { userChangeSuspendedState: { id: MiUser['id']; isSuspended: MiUser['isSuspended']; }; userChangeDeletedState: { id: MiUser['id']; isDeleted: MiUser['isDeleted']; }; @@ -248,43 +252,45 @@ export interface InternalEventTypes { userKeypairUpdated: { userId: MiUser['id']; }; } +type EventTypesToEventPayload<T> = EventUnionFromDictionary<UndefinedAsNullAll<SerializedAll<T>>>; + // name/messages(spec) pairs dictionary export type GlobalEvents = { internal: { name: 'internal'; - payload: EventUnionFromDictionary<SerializedAll<InternalEventTypes>>; + payload: EventTypesToEventPayload<InternalEventTypes>; }; broadcast: { name: 'broadcast'; - payload: EventUnionFromDictionary<SerializedAll<BroadcastTypes>>; + payload: EventTypesToEventPayload<BroadcastTypes>; }; main: { name: `mainStream:${MiUser['id']}`; - payload: EventUnionFromDictionary<SerializedAll<MainEventTypes>>; + payload: EventTypesToEventPayload<MainEventTypes>; }; drive: { name: `driveStream:${MiUser['id']}`; - payload: EventUnionFromDictionary<SerializedAll<DriveEventTypes>>; + payload: EventTypesToEventPayload<DriveEventTypes>; }; note: { name: `noteStream:${MiNote['id']}`; - payload: EventUnionFromDictionary<SerializedAll<NoteStreamEventTypes>>; + payload: EventTypesToEventPayload<NoteStreamEventTypes>; }; userList: { name: `userListStream:${MiUserList['id']}`; - payload: EventUnionFromDictionary<SerializedAll<UserListEventTypes>>; + payload: EventTypesToEventPayload<UserListEventTypes>; }; roleTimeline: { name: `roleTimelineStream:${MiRole['id']}`; - payload: EventUnionFromDictionary<SerializedAll<RoleTimelineEventTypes>>; + payload: EventTypesToEventPayload<RoleTimelineEventTypes>; }; antenna: { name: `antennaStream:${MiAntenna['id']}`; - payload: EventUnionFromDictionary<SerializedAll<AntennaEventTypes>>; + payload: EventTypesToEventPayload<AntennaEventTypes>; }; admin: { name: `adminStream:${MiUser['id']}`; - payload: EventUnionFromDictionary<SerializedAll<AdminEventTypes>>; + payload: EventTypesToEventPayload<AdminEventTypes>; }; notes: { name: 'notesStream'; @@ -292,11 +298,11 @@ export type GlobalEvents = { }; reversi: { name: `reversiStream:${MiUser['id']}`; - payload: EventUnionFromDictionary<SerializedAll<ReversiEventTypes>>; + payload: EventTypesToEventPayload<ReversiEventTypes>; }; reversiGame: { name: `reversiGameStream:${MiReversiGame['id']}`; - payload: EventUnionFromDictionary<SerializedAll<ReversiGameEventTypes>>; + payload: EventTypesToEventPayload<ReversiGameEventTypes>; }; }; |