UNPKG

@schukai/monster

Version:

Monster is a simple library for creating fast, robust and lightweight websites.

72 lines (64 loc) 2.18 kB
/** * Copyright © Volker Schukai and all contributing authors, {{copyRightYear}}. All rights reserved. * Node module: @schukai/monster * * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3). * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html * * For those who do not wish to adhere to the AGPLv3, a commercial license is available. * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms. * For more information about purchasing a commercial license, please contact Volker Schukai. * * SPDX-License-Identifier: AGPL-3.0 */ import { Base } from "../../types/base.mjs"; import { validateObject, validateString } from "../../types/validate.mjs"; export { Message }; const dataSymbol = Symbol("@@data"); /** * This class represents a WebSocket message. * * @fragments /fragments/libraries/net/webconnect/message/ * * @example /examples/libraries/net/webconnect/message/simple/ Serialize and restore a structured message * @example /examples/libraries/net/webconnect/message/nested-payload/ Keep nested payload data intact through serialization * @example /examples/libraries/net/webconnect/message/queue-ready-shape/ Use a message shape that is ready for queue inspection and logging * @example /examples/libraries/net/webconnect/message/object-access/ Access raw message data through getData and toJSON * @license AGPLv3 * @since 3.4.0 * @copyright Volker Schukai * @summary A structured WebSocket message object for typed payload exchange over WebConnect. */ class Message extends Base { /** * @param {Object} data * @throws {TypeError} value is not a object */ constructor(data) { super(); this[dataSymbol] = validateObject(data); } /** * Returns the raw message. * * @return {object} */ getData() { return this[dataSymbol]; } /** * @return {*} */ toJSON() { return this[dataSymbol]; } /** * @param {string} json * @return {Message} * @throws {TypeError} value is not a string */ static fromJSON(json) { validateString(json); return new Message(JSON.parse(json)); } }