commit 3fcae4eba159b91c3fa7db4e5e83a7d657222a5c Author: Tobias Berger Date: Fri Jan 7 17:43:05 2022 +0100 Initial commit diff --git a/types/ServerMessage.ts b/types/ServerMessage.ts new file mode 100644 index 0000000..ab0cadd --- /dev/null +++ b/types/ServerMessage.ts @@ -0,0 +1,59 @@ +export enum MessageType { + ACK = "0", + TEXT = "1", +} + +export type ServerMessage = { + type: string; + date: number; +}; +export function isServerMessage(obj: unknown): obj is ServerMessage { + if (typeof obj !== "object") return false; + if (obj === null) return false; + if ( + !Object.hasOwnProperty.call(obj, "type") || + typeof (obj as { type: unknown }).type !== "string" + ) { + return false; + } + if ( + !Object.hasOwnProperty.call(obj, "date") || + typeof (obj as { date: unknown }).date !== "number" + ) { + return false; + } + + return true; +} + +export type TextMessage = ServerMessage & { + type: MessageType.TEXT; + author: string; + content: string; +}; +export function isTextMessage(obj: unknown): obj is TextMessage { + if (!isServerMessage(obj)) return false; + if (obj.type !== MessageType.TEXT) return false; + if ( + !Object.hasOwnProperty.call(obj, "author") || + typeof (obj as ServerMessage & { author: unknown }).author !== "string" + ) { + return false; + } + if ( + !Object.hasOwnProperty.call(obj, "author") || + typeof (obj as ServerMessage & { content: unknown }).content !== "string" + ) { + return false; + } + return true; +} + +export type AckMessage = ServerMessage & { + type: MessageType.ACK; +}; +export function isAckMessage(obj: unknown): obj is AckMessage { + if (!isServerMessage(obj)) return false; + if (obj.type !== MessageType.ACK) return false; + return true; +}