| 7 | * @param raw_data Raw JSON data to parse. |
| 8 | */ |
| 9 | export function parse_message_data(raw_data: any): [unknown | undefined, Error | undefined] { |
| 10 | // @TODO Look up what types "data" can be of |
| 11 | // Parse message data to string |
| 12 | let data_string: string | undefined; |
| 13 | let data_string_error: any | undefined; |
| 14 | try { |
| 15 | if (typeof raw_data === 'string') { |
| 16 | data_string = raw_data; |
| 17 | } else if (Buffer.isBuffer(raw_data)) { |
| 18 | data_string = raw_data.toString(); |
| 19 | } else if (Array.isArray(raw_data)) { |
| 20 | data_string = raw_data.reduce((acc, buffer) => acc + buffer.toString(), ''); |
| 21 | } else { |
| 22 | data_string = Buffer.from(raw_data as any).toString(); |
| 23 | } |
| 24 | } catch (e) { |
| 25 | data_string_error = e; |
| 26 | } |
| 27 | |
| 28 | if (data_string_error) { return [undefined, data_string_error]; } |
| 29 | if (data_string === undefined) { return [undefined, new Error('Failed to parse message data into string.')]; } |
| 30 | |
| 31 | // Parse data string to object |
| 32 | let data_object: any | undefined; |
| 33 | let data_object_error: any | undefined; |
| 34 | try { |
| 35 | data_object = JSON.parse(data_string); |
| 36 | } catch (e) { |
| 37 | data_object_error = e; |
| 38 | } |
| 39 | |
| 40 | if (data_object_error) { return [undefined, data_object_error]; } |
| 41 | |
| 42 | return [data_object, undefined]; |
| 43 | } |
| 44 | |
| 45 | /** |
| 46 | * Validate that an object is a valid socket request/response. |