Changeset View
Changeset View
Standalone View
Standalone View
lib/types/message-types.js
// @flow | // @flow | ||||
import invariant from 'invariant'; | import invariant from 'invariant'; | ||||
import t, { type TUnion, type TInterface } from 'tcomb'; | |||||
import { type ClientDBMediaInfo } from './media-types.js'; | import { type ClientDBMediaInfo } from './media-types.js'; | ||||
import { messageTypes, type MessageType } from './message-types-enum.js'; | import { messageTypes, type MessageType } from './message-types-enum.js'; | ||||
import type { | import { | ||||
AddMembersMessageData, | type AddMembersMessageData, | ||||
AddMembersMessageInfo, | type AddMembersMessageInfo, | ||||
RawAddMembersMessageInfo, | type RawAddMembersMessageInfo, | ||||
rawAddMembersMessageInfoValidator, | |||||
} from './messages/add-members.js'; | } from './messages/add-members.js'; | ||||
import type { | import { | ||||
ChangeRoleMessageData, | type ChangeRoleMessageData, | ||||
ChangeRoleMessageInfo, | type ChangeRoleMessageInfo, | ||||
RawChangeRoleMessageInfo, | type RawChangeRoleMessageInfo, | ||||
rawChangeRoleMessageInfoValidator, | |||||
} from './messages/change-role.js'; | } from './messages/change-role.js'; | ||||
import type { | import { | ||||
ChangeSettingsMessageData, | type ChangeSettingsMessageData, | ||||
ChangeSettingsMessageInfo, | type ChangeSettingsMessageInfo, | ||||
RawChangeSettingsMessageInfo, | type RawChangeSettingsMessageInfo, | ||||
rawChangeSettingsMessageInfoValidator, | |||||
} from './messages/change-settings.js'; | } from './messages/change-settings.js'; | ||||
import type { | import { | ||||
CreateEntryMessageData, | type CreateEntryMessageData, | ||||
CreateEntryMessageInfo, | type CreateEntryMessageInfo, | ||||
RawCreateEntryMessageInfo, | type RawCreateEntryMessageInfo, | ||||
rawCreateEntryMessageInfoValidator, | |||||
} from './messages/create-entry.js'; | } from './messages/create-entry.js'; | ||||
import type { | import { | ||||
CreateSidebarMessageData, | type CreateSidebarMessageData, | ||||
CreateSidebarMessageInfo, | type CreateSidebarMessageInfo, | ||||
RawCreateSidebarMessageInfo, | type RawCreateSidebarMessageInfo, | ||||
rawCreateSidebarMessageInfoValidator, | |||||
} from './messages/create-sidebar.js'; | } from './messages/create-sidebar.js'; | ||||
import type { | import { | ||||
CreateSubthreadMessageData, | type CreateSubthreadMessageData, | ||||
CreateSubthreadMessageInfo, | type CreateSubthreadMessageInfo, | ||||
RawCreateSubthreadMessageInfo, | type RawCreateSubthreadMessageInfo, | ||||
rawCreateSubthreadMessageInfoValidator, | |||||
} from './messages/create-subthread.js'; | } from './messages/create-subthread.js'; | ||||
import type { | import { | ||||
CreateThreadMessageData, | type CreateThreadMessageData, | ||||
CreateThreadMessageInfo, | type CreateThreadMessageInfo, | ||||
RawCreateThreadMessageInfo, | type RawCreateThreadMessageInfo, | ||||
rawCreateThreadMessageInfoValidator, | |||||
} from './messages/create-thread.js'; | } from './messages/create-thread.js'; | ||||
import type { | import { | ||||
DeleteEntryMessageData, | type DeleteEntryMessageData, | ||||
DeleteEntryMessageInfo, | type DeleteEntryMessageInfo, | ||||
RawDeleteEntryMessageInfo, | type RawDeleteEntryMessageInfo, | ||||
rawDeleteEntryMessageInfoValidator, | |||||
} from './messages/delete-entry.js'; | } from './messages/delete-entry.js'; | ||||
import type { | import { | ||||
EditEntryMessageData, | type EditEntryMessageData, | ||||
EditEntryMessageInfo, | type EditEntryMessageInfo, | ||||
RawEditEntryMessageInfo, | type RawEditEntryMessageInfo, | ||||
rawEditEntryMessageInfoValidator, | |||||
} from './messages/edit-entry.js'; | } from './messages/edit-entry.js'; | ||||
import type { | import { | ||||
RawEditMessageInfo, | type RawEditMessageInfo, | ||||
EditMessageData, | rawEditMessageInfoValidator, | ||||
EditMessageInfo, | type EditMessageData, | ||||
type EditMessageInfo, | |||||
} from './messages/edit.js'; | } from './messages/edit.js'; | ||||
import type { | import { | ||||
ImagesMessageData, | type ImagesMessageData, | ||||
ImagesMessageInfo, | type ImagesMessageInfo, | ||||
RawImagesMessageInfo, | type RawImagesMessageInfo, | ||||
rawImagesMessageInfoValidator, | |||||
} from './messages/images.js'; | } from './messages/images.js'; | ||||
import type { | import { | ||||
JoinThreadMessageData, | type JoinThreadMessageData, | ||||
JoinThreadMessageInfo, | type JoinThreadMessageInfo, | ||||
RawJoinThreadMessageInfo, | type RawJoinThreadMessageInfo, | ||||
rawJoinThreadMessageInfoValidator, | |||||
} from './messages/join-thread.js'; | } from './messages/join-thread.js'; | ||||
import type { | import { | ||||
LeaveThreadMessageData, | type LeaveThreadMessageData, | ||||
LeaveThreadMessageInfo, | type LeaveThreadMessageInfo, | ||||
RawLeaveThreadMessageInfo, | type RawLeaveThreadMessageInfo, | ||||
rawLeaveThreadMessageInfoValidator, | |||||
} from './messages/leave-thread.js'; | } from './messages/leave-thread.js'; | ||||
import type { | import { | ||||
MediaMessageData, | type MediaMessageData, | ||||
MediaMessageInfo, | type MediaMessageInfo, | ||||
MediaMessageServerDBContent, | type MediaMessageServerDBContent, | ||||
RawMediaMessageInfo, | type RawMediaMessageInfo, | ||||
rawMediaMessageInfoValidator, | |||||
} from './messages/media.js'; | } from './messages/media.js'; | ||||
import type { | import { | ||||
ReactionMessageData, | type ReactionMessageData, | ||||
RawReactionMessageInfo, | type RawReactionMessageInfo, | ||||
ReactionMessageInfo, | rawReactionMessageInfoValidator, | ||||
type ReactionMessageInfo, | |||||
} from './messages/reaction.js'; | } from './messages/reaction.js'; | ||||
import type { | import { | ||||
RawRemoveMembersMessageInfo, | type RawRemoveMembersMessageInfo, | ||||
RemoveMembersMessageData, | rawRemoveMembersMessageInfoValidator, | ||||
RemoveMembersMessageInfo, | type RemoveMembersMessageData, | ||||
type RemoveMembersMessageInfo, | |||||
} from './messages/remove-members.js'; | } from './messages/remove-members.js'; | ||||
import type { | import { | ||||
RawRestoreEntryMessageInfo, | type RawRestoreEntryMessageInfo, | ||||
RestoreEntryMessageData, | rawRestoreEntryMessageInfoValidator, | ||||
RestoreEntryMessageInfo, | type RestoreEntryMessageData, | ||||
type RestoreEntryMessageInfo, | |||||
} from './messages/restore-entry.js'; | } from './messages/restore-entry.js'; | ||||
import type { | import { | ||||
RawTextMessageInfo, | type RawTextMessageInfo, | ||||
TextMessageData, | rawTextMessageInfoValidator, | ||||
TextMessageInfo, | type TextMessageData, | ||||
type TextMessageInfo, | |||||
} from './messages/text.js'; | } from './messages/text.js'; | ||||
import type { | import { | ||||
TogglePinMessageData, | type TogglePinMessageData, | ||||
TogglePinMessageInfo, | type TogglePinMessageInfo, | ||||
RawTogglePinMessageInfo, | type RawTogglePinMessageInfo, | ||||
rawTogglePinMessageInfoValidator, | |||||
} from './messages/toggle-pin.js'; | } from './messages/toggle-pin.js'; | ||||
import type { | import { | ||||
RawUnsupportedMessageInfo, | type RawUnsupportedMessageInfo, | ||||
UnsupportedMessageInfo, | rawUnsupportedMessageInfoValidator, | ||||
type UnsupportedMessageInfo, | |||||
} from './messages/unsupported.js'; | } from './messages/unsupported.js'; | ||||
import type { | import { | ||||
RawUpdateRelationshipMessageInfo, | type RawUpdateRelationshipMessageInfo, | ||||
UpdateRelationshipMessageData, | rawUpdateRelationshipMessageInfoValidator, | ||||
UpdateRelationshipMessageInfo, | type UpdateRelationshipMessageData, | ||||
type UpdateRelationshipMessageInfo, | |||||
} from './messages/update-relationship.js'; | } from './messages/update-relationship.js'; | ||||
import { type RelativeUserInfo, type UserInfos } from './user-types.js'; | import { type RelativeUserInfo, type UserInfos } from './user-types.js'; | ||||
import type { CallServerEndpointResultInfoInterface } from '../utils/call-server-endpoint.js'; | import type { CallServerEndpointResultInfoInterface } from '../utils/call-server-endpoint.js'; | ||||
import { tNumber, tShape, tID } from '../utils/validation-utils.js'; | |||||
const composableMessageTypes = new Set([ | const composableMessageTypes = new Set([ | ||||
messageTypes.TEXT, | messageTypes.TEXT, | ||||
messageTypes.IMAGES, | messageTypes.IMAGES, | ||||
messageTypes.MULTIMEDIA, | messageTypes.MULTIMEDIA, | ||||
]); | ]); | ||||
export function isComposableMessageType(ourMessageType: MessageType): boolean { | export function isComposableMessageType(ourMessageType: MessageType): boolean { | ||||
return composableMessageTypes.has(ourMessageType); | return composableMessageTypes.has(ourMessageType); | ||||
▲ Show 20 Lines • Show All 89 Lines • ▼ Show 20 Lines | export type MessageData = | ||||
| EditMessageData | | EditMessageData | ||||
| TogglePinMessageData; | | TogglePinMessageData; | ||||
export type MultimediaMessageData = ImagesMessageData | MediaMessageData; | export type MultimediaMessageData = ImagesMessageData | MediaMessageData; | ||||
export type RawMultimediaMessageInfo = | export type RawMultimediaMessageInfo = | ||||
| RawImagesMessageInfo | | RawImagesMessageInfo | ||||
| RawMediaMessageInfo; | | RawMediaMessageInfo; | ||||
const rawMultimediaMessageInfoValidator = t.union([ | |||||
rawImagesMessageInfoValidator, | |||||
rawMediaMessageInfoValidator, | |||||
]); | |||||
export type RawComposableMessageInfo = | export type RawComposableMessageInfo = | ||||
| RawTextMessageInfo | | RawTextMessageInfo | ||||
| RawMultimediaMessageInfo; | | RawMultimediaMessageInfo; | ||||
const rawComposableMessageInfoValidator = t.union([ | |||||
rawTextMessageInfoValidator, | |||||
rawMultimediaMessageInfoValidator, | |||||
]); | |||||
export type RawRobotextMessageInfo = | export type RawRobotextMessageInfo = | ||||
| RawCreateThreadMessageInfo | | RawCreateThreadMessageInfo | ||||
| RawAddMembersMessageInfo | | RawAddMembersMessageInfo | ||||
| RawCreateSubthreadMessageInfo | | RawCreateSubthreadMessageInfo | ||||
| RawChangeSettingsMessageInfo | | RawChangeSettingsMessageInfo | ||||
| RawRemoveMembersMessageInfo | | RawRemoveMembersMessageInfo | ||||
| RawChangeRoleMessageInfo | | RawChangeRoleMessageInfo | ||||
| RawLeaveThreadMessageInfo | | RawLeaveThreadMessageInfo | ||||
| RawJoinThreadMessageInfo | | RawJoinThreadMessageInfo | ||||
| RawCreateEntryMessageInfo | | RawCreateEntryMessageInfo | ||||
| RawEditEntryMessageInfo | | RawEditEntryMessageInfo | ||||
| RawDeleteEntryMessageInfo | | RawDeleteEntryMessageInfo | ||||
| RawRestoreEntryMessageInfo | | RawRestoreEntryMessageInfo | ||||
| RawUpdateRelationshipMessageInfo | | RawUpdateRelationshipMessageInfo | ||||
| RawCreateSidebarMessageInfo | | RawCreateSidebarMessageInfo | ||||
| RawUnsupportedMessageInfo | | RawUnsupportedMessageInfo | ||||
| RawTogglePinMessageInfo; | | RawTogglePinMessageInfo; | ||||
const rawRobotextMessageInfoValidator = t.union([ | |||||
rawCreateThreadMessageInfoValidator, | |||||
rawAddMembersMessageInfoValidator, | |||||
rawCreateSubthreadMessageInfoValidator, | |||||
rawChangeSettingsMessageInfoValidator, | |||||
rawRemoveMembersMessageInfoValidator, | |||||
rawChangeRoleMessageInfoValidator, | |||||
rawLeaveThreadMessageInfoValidator, | |||||
rawJoinThreadMessageInfoValidator, | |||||
rawCreateEntryMessageInfoValidator, | |||||
rawEditEntryMessageInfoValidator, | |||||
rawDeleteEntryMessageInfoValidator, | |||||
rawRestoreEntryMessageInfoValidator, | |||||
rawUpdateRelationshipMessageInfoValidator, | |||||
rawCreateSidebarMessageInfoValidator, | |||||
rawUnsupportedMessageInfoValidator, | |||||
rawTogglePinMessageInfoValidator, | |||||
]); | |||||
export type RawSidebarSourceMessageInfo = { | export type RawSidebarSourceMessageInfo = { | ||||
...SidebarSourceMessageData, | ...SidebarSourceMessageData, | ||||
id: string, | id: string, | ||||
}; | }; | ||||
export const rawSidebarSourceMessageInfoValidator: TInterface<RawSidebarSourceMessageInfo> = | |||||
tShape<RawSidebarSourceMessageInfo>({ | |||||
type: tNumber(messageTypes.SIDEBAR_SOURCE), | |||||
threadID: tID, | |||||
creatorID: t.String, | |||||
time: t.Number, | |||||
sourceMessage: t.maybe( | |||||
t.union([ | |||||
rawComposableMessageInfoValidator, | |||||
rawRobotextMessageInfoValidator, | |||||
]), | |||||
), | |||||
id: tID, | |||||
}); | |||||
export type RawMessageInfo = | export type RawMessageInfo = | ||||
| RawComposableMessageInfo | | RawComposableMessageInfo | ||||
| RawRobotextMessageInfo | | RawRobotextMessageInfo | ||||
| RawSidebarSourceMessageInfo | | RawSidebarSourceMessageInfo | ||||
| RawReactionMessageInfo | | RawReactionMessageInfo | ||||
| RawEditMessageInfo; | | RawEditMessageInfo; | ||||
export const rawMessageInfoValidator: TUnion<RawMessageInfo> = t.union([ | |||||
rawComposableMessageInfoValidator, | |||||
rawRobotextMessageInfoValidator, | |||||
rawSidebarSourceMessageInfoValidator, | |||||
rawReactionMessageInfoValidator, | |||||
rawEditMessageInfoValidator, | |||||
]); | |||||
export type LocallyComposedMessageInfo = | export type LocallyComposedMessageInfo = | ||||
| ({ | | ({ | ||||
...RawImagesMessageInfo, | ...RawImagesMessageInfo, | ||||
+localID: string, | +localID: string, | ||||
} & RawImagesMessageInfo) | } & RawImagesMessageInfo) | ||||
| ({ | | ({ | ||||
...RawMediaMessageInfo, | ...RawMediaMessageInfo, | ||||
▲ Show 20 Lines • Show All 348 Lines • Show Last 20 Lines |