const parseMessageFromString = (message) => { try { return JSON.parse(message); } catch { return {}; } } /** * @typedef {Object} MessageLike * @property {string} action - every string valid for JS function name. * @property {Object} data - The user's last name. */ /** * @param {string|MessageLike} data - Message itself of JSON representation of Message */ function Message(data = {}) { switch(Object.prototype.toString.call(data)) { case "[object String]": const parsedMessage = parseMessageFromString(data); this.action = parsedMessage?.action; this.data = parsedMessage?.data; break; case "[object Object]": this.action = data?.action; this.data = data?.data; break; } } Message.prototype.isValid = function() { return ( this?.action !== undefined ); } export { Message }