{"ast":null,"code":"\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Decoder = exports.Encoder = exports.PacketType = exports.protocol = void 0;\n\nconst Emitter = require(\"component-emitter\");\n\nconst binary_1 = require(\"./binary\");\n\nconst is_binary_1 = require(\"./is-binary\");\n\nconst debug = require(\"debug\")(\"socket.io-parser\");\n/**\n * Protocol version.\n *\n * @public\n */\n\n\nexports.protocol = 5;\nvar PacketType;\n\n(function (PacketType) {\n  PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n  PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n  PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n  PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n  PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n  PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n  PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType = exports.PacketType || (exports.PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\n\n\nclass Encoder {\n  /**\n   * Encode a packet as a single string if non-binary, or as a\n   * buffer sequence, depending on packet type.\n   *\n   * @param {Object} obj - packet object\n   */\n  encode(obj) {\n    debug(\"encoding packet %j\", obj);\n\n    if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n      if (is_binary_1.hasBinary(obj)) {\n        obj.type = obj.type === PacketType.EVENT ? PacketType.BINARY_EVENT : PacketType.BINARY_ACK;\n        return this.encodeAsBinary(obj);\n      }\n    }\n\n    return [this.encodeAsString(obj)];\n  }\n  /**\n   * Encode packet as string.\n   */\n\n\n  encodeAsString(obj) {\n    // first is type\n    let str = \"\" + obj.type; // attachments if we have them\n\n    if (obj.type === PacketType.BINARY_EVENT || obj.type === PacketType.BINARY_ACK) {\n      str += obj.attachments + \"-\";\n    } // if we have a namespace other than `/`\n    // we append it followed by a comma `,`\n\n\n    if (obj.nsp && \"/\" !== obj.nsp) {\n      str += obj.nsp + \",\";\n    } // immediately followed by the id\n\n\n    if (null != obj.id) {\n      str += obj.id;\n    } // json data\n\n\n    if (null != obj.data) {\n      str += JSON.stringify(obj.data);\n    }\n\n    debug(\"encoded %j as %s\", obj, str);\n    return str;\n  }\n  /**\n   * Encode packet as 'buffer sequence' by removing blobs, and\n   * deconstructing packet into object with placeholders and\n   * a list of buffers.\n   */\n\n\n  encodeAsBinary(obj) {\n    const deconstruction = binary_1.deconstructPacket(obj);\n    const pack = this.encodeAsString(deconstruction.packet);\n    const buffers = deconstruction.buffers;\n    buffers.unshift(pack); // add packet info to beginning of data list\n\n    return buffers; // write all the buffers\n  }\n\n}\n\nexports.Encoder = Encoder;\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\n\nclass Decoder extends Emitter {\n  constructor() {\n    super();\n  }\n  /**\n   * Decodes an encoded packet string into packet JSON.\n   *\n   * @param {String} obj - encoded packet\n   */\n\n\n  add(obj) {\n    let packet;\n\n    if (typeof obj === \"string\") {\n      packet = this.decodeString(obj);\n\n      if (packet.type === PacketType.BINARY_EVENT || packet.type === PacketType.BINARY_ACK) {\n        // binary packet's json\n        this.reconstructor = new BinaryReconstructor(packet); // no attachments, labeled binary but no binary data to follow\n\n        if (packet.attachments === 0) {\n          super.emit(\"decoded\", packet);\n        }\n      } else {\n        // non-binary full packet\n        super.emit(\"decoded\", packet);\n      }\n    } else if (is_binary_1.isBinary(obj) || obj.base64) {\n      // raw binary data\n      if (!this.reconstructor) {\n        throw new Error(\"got binary data when not reconstructing a packet\");\n      } else {\n        packet = this.reconstructor.takeBinaryData(obj);\n\n        if (packet) {\n          // received final buffer\n          this.reconstructor = null;\n          super.emit(\"decoded\", packet);\n        }\n      }\n    } else {\n      throw new Error(\"Unknown type: \" + obj);\n    }\n  }\n  /**\n   * Decode a packet String (JSON data)\n   *\n   * @param {String} str\n   * @return {Object} packet\n   */\n\n\n  decodeString(str) {\n    let i = 0; // look up type\n\n    const p = {\n      type: Number(str.charAt(0))\n    };\n\n    if (PacketType[p.type] === undefined) {\n      throw new Error(\"unknown packet type \" + p.type);\n    } // look up attachments if type binary\n\n\n    if (p.type === PacketType.BINARY_EVENT || p.type === PacketType.BINARY_ACK) {\n      const start = i + 1;\n\n      while (str.charAt(++i) !== \"-\" && i != str.length) {}\n\n      const buf = str.substring(start, i);\n\n      if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n        throw new Error(\"Illegal attachments\");\n      }\n\n      p.attachments = Number(buf);\n    } // look up namespace (if any)\n\n\n    if (\"/\" === str.charAt(i + 1)) {\n      const start = i + 1;\n\n      while (++i) {\n        const c = str.charAt(i);\n        if (\",\" === c) break;\n        if (i === str.length) break;\n      }\n\n      p.nsp = str.substring(start, i);\n    } else {\n      p.nsp = \"/\";\n    } // look up id\n\n\n    const next = str.charAt(i + 1);\n\n    if (\"\" !== next && Number(next) == next) {\n      const start = i + 1;\n\n      while (++i) {\n        const c = str.charAt(i);\n\n        if (null == c || Number(c) != c) {\n          --i;\n          break;\n        }\n\n        if (i === str.length) break;\n      }\n\n      p.id = Number(str.substring(start, i + 1));\n    } // look up json data\n\n\n    if (str.charAt(++i)) {\n      const payload = tryParse(str.substr(i));\n\n      if (Decoder.isPayloadValid(p.type, payload)) {\n        p.data = payload;\n      } else {\n        throw new Error(\"invalid payload\");\n      }\n    }\n\n    debug(\"decoded %s as %j\", str, p);\n    return p;\n  }\n\n  static isPayloadValid(type, payload) {\n    switch (type) {\n      case PacketType.CONNECT:\n        return typeof payload === \"object\";\n\n      case PacketType.DISCONNECT:\n        return payload === undefined;\n\n      case PacketType.CONNECT_ERROR:\n        return typeof payload === \"string\" || typeof payload === \"object\";\n\n      case PacketType.EVENT:\n      case PacketType.BINARY_EVENT:\n        return Array.isArray(payload) && payload.length > 0;\n\n      case PacketType.ACK:\n      case PacketType.BINARY_ACK:\n        return Array.isArray(payload);\n    }\n  }\n  /**\n   * Deallocates a parser's resources\n   */\n\n\n  destroy() {\n    if (this.reconstructor) {\n      this.reconstructor.finishedReconstruction();\n    }\n  }\n\n}\n\nexports.Decoder = Decoder;\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch (e) {\n    return false;\n  }\n}\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\n\n\nclass BinaryReconstructor {\n  constructor(packet) {\n    this.packet = packet;\n    this.buffers = [];\n    this.reconPack = packet;\n  }\n  /**\n   * Method to be called when binary data received from connection\n   * after a BINARY_EVENT packet.\n   *\n   * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n   * @return {null | Object} returns null if more binary data is expected or\n   *   a reconstructed packet object if all buffers have been received.\n   */\n\n\n  takeBinaryData(binData) {\n    this.buffers.push(binData);\n\n    if (this.buffers.length === this.reconPack.attachments) {\n      // done with buffer list\n      const packet = binary_1.reconstructPacket(this.reconPack, this.buffers);\n      this.finishedReconstruction();\n      return packet;\n    }\n\n    return null;\n  }\n  /**\n   * Cleans up binary packet reconstruction variables.\n   */\n\n\n  finishedReconstruction() {\n    this.reconPack = null;\n    this.buffers = [];\n  }\n\n}","map":{"version":3,"sources":["C:/laragon/www/itokin/DriverOPCDA/frontend/node_modules/socket.io-parser/dist/index.js"],"names":["Object","defineProperty","exports","value","Decoder","Encoder","PacketType","protocol","Emitter","require","binary_1","is_binary_1","debug","encode","obj","type","EVENT","ACK","hasBinary","BINARY_EVENT","BINARY_ACK","encodeAsBinary","encodeAsString","str","attachments","nsp","id","data","JSON","stringify","deconstruction","deconstructPacket","pack","packet","buffers","unshift","constructor","add","decodeString","reconstructor","BinaryReconstructor","emit","isBinary","base64","Error","takeBinaryData","i","p","Number","charAt","undefined","start","length","buf","substring","c","next","payload","tryParse","substr","isPayloadValid","CONNECT","DISCONNECT","CONNECT_ERROR","Array","isArray","destroy","finishedReconstruction","parse","e","reconPack","binData","push","reconstructPacket"],"mappings":"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","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Decoder = exports.Encoder = exports.PacketType = exports.protocol = void 0;\nconst Emitter = require(\"component-emitter\");\nconst binary_1 = require(\"./binary\");\nconst is_binary_1 = require(\"./is-binary\");\nconst debug = require(\"debug\")(\"socket.io-parser\");\n/**\n * Protocol version.\n *\n * @public\n */\nexports.protocol = 5;\nvar PacketType;\n(function (PacketType) {\n    PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n    PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n    PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n    PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n    PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n    PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n    PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType = exports.PacketType || (exports.PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nclass Encoder {\n    /**\n     * Encode a packet as a single string if non-binary, or as a\n     * buffer sequence, depending on packet type.\n     *\n     * @param {Object} obj - packet object\n     */\n    encode(obj) {\n        debug(\"encoding packet %j\", obj);\n        if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n            if (is_binary_1.hasBinary(obj)) {\n                obj.type =\n                    obj.type === PacketType.EVENT\n                        ? PacketType.BINARY_EVENT\n                        : PacketType.BINARY_ACK;\n                return this.encodeAsBinary(obj);\n            }\n        }\n        return [this.encodeAsString(obj)];\n    }\n    /**\n     * Encode packet as string.\n     */\n    encodeAsString(obj) {\n        // first is type\n        let str = \"\" + obj.type;\n        // attachments if we have them\n        if (obj.type === PacketType.BINARY_EVENT ||\n            obj.type === PacketType.BINARY_ACK) {\n            str += obj.attachments + \"-\";\n        }\n        // if we have a namespace other than `/`\n        // we append it followed by a comma `,`\n        if (obj.nsp && \"/\" !== obj.nsp) {\n            str += obj.nsp + \",\";\n        }\n        // immediately followed by the id\n        if (null != obj.id) {\n            str += obj.id;\n        }\n        // json data\n        if (null != obj.data) {\n            str += JSON.stringify(obj.data);\n        }\n        debug(\"encoded %j as %s\", obj, str);\n        return str;\n    }\n    /**\n     * Encode packet as 'buffer sequence' by removing blobs, and\n     * deconstructing packet into object with placeholders and\n     * a list of buffers.\n     */\n    encodeAsBinary(obj) {\n        const deconstruction = binary_1.deconstructPacket(obj);\n        const pack = this.encodeAsString(deconstruction.packet);\n        const buffers = deconstruction.buffers;\n        buffers.unshift(pack); // add packet info to beginning of data list\n        return buffers; // write all the buffers\n    }\n}\nexports.Encoder = Encoder;\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nclass Decoder extends Emitter {\n    constructor() {\n        super();\n    }\n    /**\n     * Decodes an encoded packet string into packet JSON.\n     *\n     * @param {String} obj - encoded packet\n     */\n    add(obj) {\n        let packet;\n        if (typeof obj === \"string\") {\n            packet = this.decodeString(obj);\n            if (packet.type === PacketType.BINARY_EVENT ||\n                packet.type === PacketType.BINARY_ACK) {\n                // binary packet's json\n                this.reconstructor = new BinaryReconstructor(packet);\n                // no attachments, labeled binary but no binary data to follow\n                if (packet.attachments === 0) {\n                    super.emit(\"decoded\", packet);\n                }\n            }\n            else {\n                // non-binary full packet\n                super.emit(\"decoded\", packet);\n            }\n        }\n        else if (is_binary_1.isBinary(obj) || obj.base64) {\n            // raw binary data\n            if (!this.reconstructor) {\n                throw new Error(\"got binary data when not reconstructing a packet\");\n            }\n            else {\n                packet = this.reconstructor.takeBinaryData(obj);\n                if (packet) {\n                    // received final buffer\n                    this.reconstructor = null;\n                    super.emit(\"decoded\", packet);\n                }\n            }\n        }\n        else {\n            throw new Error(\"Unknown type: \" + obj);\n        }\n    }\n    /**\n     * Decode a packet String (JSON data)\n     *\n     * @param {String} str\n     * @return {Object} packet\n     */\n    decodeString(str) {\n        let i = 0;\n        // look up type\n        const p = {\n            type: Number(str.charAt(0)),\n        };\n        if (PacketType[p.type] === undefined) {\n            throw new Error(\"unknown packet type \" + p.type);\n        }\n        // look up attachments if type binary\n        if (p.type === PacketType.BINARY_EVENT ||\n            p.type === PacketType.BINARY_ACK) {\n            const start = i + 1;\n            while (str.charAt(++i) !== \"-\" && i != str.length) { }\n            const buf = str.substring(start, i);\n            if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n                throw new Error(\"Illegal attachments\");\n            }\n            p.attachments = Number(buf);\n        }\n        // look up namespace (if any)\n        if (\"/\" === str.charAt(i + 1)) {\n            const start = i + 1;\n            while (++i) {\n                const c = str.charAt(i);\n                if (\",\" === c)\n                    break;\n                if (i === str.length)\n                    break;\n            }\n            p.nsp = str.substring(start, i);\n        }\n        else {\n            p.nsp = \"/\";\n        }\n        // look up id\n        const next = str.charAt(i + 1);\n        if (\"\" !== next && Number(next) == next) {\n            const start = i + 1;\n            while (++i) {\n                const c = str.charAt(i);\n                if (null == c || Number(c) != c) {\n                    --i;\n                    break;\n                }\n                if (i === str.length)\n                    break;\n            }\n            p.id = Number(str.substring(start, i + 1));\n        }\n        // look up json data\n        if (str.charAt(++i)) {\n            const payload = tryParse(str.substr(i));\n            if (Decoder.isPayloadValid(p.type, payload)) {\n                p.data = payload;\n            }\n            else {\n                throw new Error(\"invalid payload\");\n            }\n        }\n        debug(\"decoded %s as %j\", str, p);\n        return p;\n    }\n    static isPayloadValid(type, payload) {\n        switch (type) {\n            case PacketType.CONNECT:\n                return typeof payload === \"object\";\n            case PacketType.DISCONNECT:\n                return payload === undefined;\n            case PacketType.CONNECT_ERROR:\n                return typeof payload === \"string\" || typeof payload === \"object\";\n            case PacketType.EVENT:\n            case PacketType.BINARY_EVENT:\n                return Array.isArray(payload) && payload.length > 0;\n            case PacketType.ACK:\n            case PacketType.BINARY_ACK:\n                return Array.isArray(payload);\n        }\n    }\n    /**\n     * Deallocates a parser's resources\n     */\n    destroy() {\n        if (this.reconstructor) {\n            this.reconstructor.finishedReconstruction();\n        }\n    }\n}\nexports.Decoder = Decoder;\nfunction tryParse(str) {\n    try {\n        return JSON.parse(str);\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n    constructor(packet) {\n        this.packet = packet;\n        this.buffers = [];\n        this.reconPack = packet;\n    }\n    /**\n     * Method to be called when binary data received from connection\n     * after a BINARY_EVENT packet.\n     *\n     * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n     * @return {null | Object} returns null if more binary data is expected or\n     *   a reconstructed packet object if all buffers have been received.\n     */\n    takeBinaryData(binData) {\n        this.buffers.push(binData);\n        if (this.buffers.length === this.reconPack.attachments) {\n            // done with buffer list\n            const packet = binary_1.reconstructPacket(this.reconPack, this.buffers);\n            this.finishedReconstruction();\n            return packet;\n        }\n        return null;\n    }\n    /**\n     * Cleans up binary packet reconstruction variables.\n     */\n    finishedReconstruction() {\n        this.reconPack = null;\n        this.buffers = [];\n    }\n}\n"]},"metadata":{},"sourceType":"script"}