{"version":3,"file":"messages.cjs","names":[],"sources":["../../src/channel/messages.ts"],"sourcesContent":["import type {\n\tErrorResponseMessage,\n\tRequestMessage,\n\tSuccessResponseMessage,\n\tUnknownErrorResponseMessage,\n\tUnknownMessage,\n\tUnknownRequestMessage,\n\tUnknownResponseMessage,\n\tUnknownSuccessResponseMessage,\n} from \"./types\"\n\n// Adapted from https://github.com/jshttp/statuses/blob/770a97d931c1bb40ebbfefdbb77f0419601890b5/codes.json\nconst statuses = {\n\t200: \"ok\",\n\t201: \"created\",\n\n\t400: \"bad request\",\n\t500: \"internal server error\",\n\t501: \"not implemented\",\n}\n\nlet requestID = 0\n\nexport const createRequestMessage = <TType extends string = string, TData = undefined>(\n\ttype: TType,\n\tdata: TData,\n\tprefix = \"\",\n): RequestMessage<TType, TData> => {\n\treturn {\n\t\trequestID: `${prefix}${requestID++}`,\n\t\ttype,\n\t\tdata,\n\t}\n}\n\nexport const createSuccessResponseMessage = <TData = undefined>(\n\trequestID: string,\n\tdata: TData,\n\tstatus: keyof typeof statuses = 200,\n): SuccessResponseMessage<TData> => {\n\tif (status >= 400) {\n\t\tthrow new TypeError(\n\t\t\t`Invalid success status code, expected status to be within \\`[100;400[\\`, got \\`${status}\\``,\n\t\t)\n\t}\n\n\treturn {\n\t\trequestID,\n\t\tstatus,\n\t\tmsg: statuses[status] ?? \"\",\n\t\tdata,\n\t}\n}\n\nexport const createErrorResponseMessage = <TError = undefined>(\n\trequestID: string,\n\terror: TError,\n\tstatus: keyof typeof statuses = 400,\n): ErrorResponseMessage<TError> => {\n\tif (status < 400) {\n\t\tthrow new TypeError(\n\t\t\t`Invalid error status code, expected status to be within \\`[400;600[\\`, got \\`${status}\\``,\n\t\t)\n\t}\n\n\treturn {\n\t\trequestID,\n\t\tstatus,\n\t\tmsg: statuses[status] ?? \"\",\n\t\terror,\n\t}\n}\n\nexport const validateMessage = (message: unknown): UnknownMessage => {\n\tif (typeof message !== \"object\" || message === null) {\n\t\tthrow new TypeError(\n\t\t\t`Invalid message received, expected message to be of type \\`object\\`, got \\`${typeof message}\\``,\n\t\t)\n\t} else if (\n\t\t!Object.keys(message).every((key) =>\n\t\t\t[\"requestID\", \"type\", \"data\", \"status\", \"msg\", \"error\"].includes(key),\n\t\t)\n\t) {\n\t\tthrow new TypeError(`Invalid message received: ${JSON.stringify(message)}`)\n\t} else if (typeof (message as Record<string, unknown>).requestID !== \"string\") {\n\t\tthrow new TypeError(\n\t\t\t`Invalid message received, expected \\`message.requestID\\` to be of type \\`string\\`, got \\`${typeof (\n\t\t\t\tmessage as Record<string, unknown>\n\t\t\t).id}\\``,\n\t\t)\n\t}\n\n\treturn message as UnknownMessage\n}\n\nexport const isRequestMessage = (message: UnknownMessage): message is UnknownRequestMessage => {\n\treturn \"type\" in message\n}\n\nexport const isResponseMessage = (message: UnknownMessage): message is UnknownResponseMessage => {\n\treturn !(\"type\" in message)\n}\n\nexport const isSuccessResponseMessage = (\n\tmessage: UnknownMessage,\n): message is UnknownSuccessResponseMessage => {\n\treturn isResponseMessage(message) && !(\"error\" in message)\n}\n\nexport const isErrorResponseMessage = (\n\tmessage: UnknownMessage,\n): message is UnknownErrorResponseMessage => {\n\treturn isResponseMessage(message) && !(\"data\" in message)\n}\n"],"mappings":";AAYA,MAAM,WAAW;CAChB,KAAK;CACL,KAAK;CAEL,KAAK;CACL,KAAK;CACL,KAAK;CACL;AAED,IAAI,YAAY;AAEhB,MAAa,wBACZ,MACA,MACA,SAAS,OACyB;AAClC,QAAO;EACN,WAAW,GAAG,SAAS;EACvB;EACA;EACA;;AAGF,MAAa,gCACZ,WACA,MACA,SAAgC,QACG;AACnC,KAAI,UAAU,IACb,OAAM,IAAI,UACT,kFAAkF,OAAO,IACzF;AAGF,QAAO;EACN;EACA;EACA,KAAK,SAAS,WAAW;EACzB;EACA;;AAGF,MAAa,8BACZ,WACA,OACA,SAAgC,QACE;AAClC,KAAI,SAAS,IACZ,OAAM,IAAI,UACT,gFAAgF,OAAO,IACvF;AAGF,QAAO;EACN;EACA;EACA,KAAK,SAAS,WAAW;EACzB;EACA;;AAGF,MAAa,mBAAmB,YAAqC;AACpE,KAAI,OAAO,YAAY,YAAY,YAAY,KAC9C,OAAM,IAAI,UACT,8EAA8E,OAAO,QAAQ,IAC7F;UAED,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,QAC5B;EAAC;EAAa;EAAQ;EAAQ;EAAU;EAAO;EAAQ,CAAC,SAAS,IAAI,CACrE,CAED,OAAM,IAAI,UAAU,6BAA6B,KAAK,UAAU,QAAQ,GAAG;UACjE,OAAQ,QAAoC,cAAc,SACpE,OAAM,IAAI,UACT,4FAA4F,OAC3F,QACC,GAAG,IACL;AAGF,QAAO;;AAGR,MAAa,oBAAoB,YAA8D;AAC9F,QAAO,UAAU;;AAGlB,MAAa,qBAAqB,YAA+D;AAChG,QAAO,EAAE,UAAU;;AAGpB,MAAa,4BACZ,YAC8C;AAC9C,QAAO,kBAAkB,QAAQ,IAAI,EAAE,WAAW;;AAGnD,MAAa,0BACZ,YAC4C;AAC5C,QAAO,kBAAkB,QAAQ,IAAI,EAAE,UAAU"}