{"mappings":"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","names":["Emitter","withNativeArrayBuffer","isView","obj","toString","withNativeBlob","withNativeFile","isBinary","hasBinary","toJSON","i","l","key","deconstructPacket","packet","buffers","packetData","pack","_deconstructPacket","data","isBinary","placeholder","newData","i","key","reconstructPacket","_reconstructPacket","RESERVED_EVENTS","protocol","PacketType","Encoder","replacer","obj","hasBinary","str","deconstruction","deconstructPacket","pack","buffers","Decoder","_Decoder","Emitter","opts","packet","isBinaryEvent","BinaryReconstructor","isBinary","i","p","start","buf","n","isInteger","next","payload","type","isObject","binData","reconstructPacket","isNamespaceValid","nsp","value","isAckIdValid","id","isDataValid","isPacketValid"],"sources":["../esm/npm/socket.io-parser@4.2.6/node_modules/socket.io-parser/build/esm/index.js","../esm/npm/socket.io-parser@4.2.6/node_modules/socket.io-parser/build/esm/is-binary.js","../esm/npm/socket.io-parser@4.2.6/node_modules/socket.io-parser/build/esm/binary.js"],"sourcesContent":["import { Emitter } from \"@socket.io/component-emitter\";\nimport { deconstructPacket, reconstructPacket } from \"./binary.js\";\nimport { isBinary, hasBinary } from \"./is-binary.js\";\n/**\n * These strings must not be used as event names, as they have a special meaning.\n */\nconst RESERVED_EVENTS = [\n    \"connect\", // used on the client side\n    \"connect_error\", // used on the client side\n    \"disconnect\", // used on both sides\n    \"disconnecting\", // used on the server side\n    \"newListener\", // used by the Node.js EventEmitter\n    \"removeListener\", // used by the Node.js EventEmitter\n];\n/**\n * Protocol version.\n *\n * @public\n */\nexport const protocol = 5;\nexport var 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 || (PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nexport class Encoder {\n    /**\n     * Encoder constructor\n     *\n     * @param {function} replacer - custom replacer to pass down to JSON.parse\n     */\n    constructor(replacer) {\n        this.replacer = replacer;\n    }\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        if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n            if (hasBinary(obj)) {\n                return this.encodeAsBinary({\n                    type: obj.type === PacketType.EVENT\n                        ? PacketType.BINARY_EVENT\n                        : PacketType.BINARY_ACK,\n                    nsp: obj.nsp,\n                    data: obj.data,\n                    id: obj.id,\n                });\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 \u0026\u0026 \"/\" !== 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, this.replacer);\n        }\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 = 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}\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nexport class Decoder extends Emitter {\n    /**\n     * Decoder constructor\n     */\n    constructor(opts) {\n        super();\n        this.opts = Object.assign({\n            reviver: undefined,\n            maxAttachments: 10,\n        }, typeof opts === \"function\" ? { reviver: opts } : opts);\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            if (this.reconstructor) {\n                throw new Error(\"got plaintext data when reconstructing a packet\");\n            }\n            packet = this.decodeString(obj);\n            const isBinaryEvent = packet.type === PacketType.BINARY_EVENT;\n            if (isBinaryEvent || packet.type === PacketType.BINARY_ACK) {\n                packet.type = isBinaryEvent ? PacketType.EVENT : PacketType.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.emitReserved(\"decoded\", packet);\n                }\n            }\n            else {\n                // non-binary full packet\n                super.emitReserved(\"decoded\", packet);\n            }\n        }\n        else if (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.emitReserved(\"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) !== \"-\" \u0026\u0026 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            const n = Number(buf);\n            if (!isInteger(n) || n \u003c 0) {\n                throw new Error(\"Illegal attachments\");\n            }\n            else if (n \u003e this.opts.maxAttachments) {\n                throw new Error(\"too many attachments\");\n            }\n            p.attachments = n;\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 \u0026\u0026 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 = this.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        return p;\n    }\n    tryParse(str) {\n        try {\n            return JSON.parse(str, this.opts.reviver);\n        }\n        catch (e) {\n            return false;\n        }\n    }\n    static isPayloadValid(type, payload) {\n        switch (type) {\n            case PacketType.CONNECT:\n                return isObject(payload);\n            case PacketType.DISCONNECT:\n                return payload === undefined;\n            case PacketType.CONNECT_ERROR:\n                return typeof payload === \"string\" || isObject(payload);\n            case PacketType.EVENT:\n            case PacketType.BINARY_EVENT:\n                return (Array.isArray(payload) \u0026\u0026\n                    (typeof payload[0] === \"number\" ||\n                        (typeof payload[0] === \"string\" \u0026\u0026\n                            RESERVED_EVENTS.indexOf(payload[0]) === -1)));\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            this.reconstructor = null;\n        }\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 = 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}\nfunction isNamespaceValid(nsp) {\n    return typeof nsp === \"string\";\n}\n// see https://caniuse.com/mdn-javascript_builtins_number_isinteger\nconst isInteger = Number.isInteger ||\n    function (value) {\n        return (typeof value === \"number\" \u0026\u0026\n            isFinite(value) \u0026\u0026\n            Math.floor(value) === value);\n    };\nfunction isAckIdValid(id) {\n    return id === undefined || isInteger(id);\n}\n// see https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript\nfunction isObject(value) {\n    return Object.prototype.toString.call(value) === \"[object Object]\";\n}\nfunction isDataValid(type, payload) {\n    switch (type) {\n        case PacketType.CONNECT:\n            return payload === undefined || isObject(payload);\n        case PacketType.DISCONNECT:\n            return payload === undefined;\n        case PacketType.EVENT:\n            return (Array.isArray(payload) \u0026\u0026\n                (typeof payload[0] === \"number\" ||\n                    (typeof payload[0] === \"string\" \u0026\u0026\n                        RESERVED_EVENTS.indexOf(payload[0]) === -1)));\n        case PacketType.ACK:\n            return Array.isArray(payload);\n        case PacketType.CONNECT_ERROR:\n            return typeof payload === \"string\" || isObject(payload);\n        default:\n            return false;\n    }\n}\nexport function isPacketValid(packet) {\n    return (isNamespaceValid(packet.nsp) \u0026\u0026\n        isAckIdValid(packet.id) \u0026\u0026\n        isDataValid(packet.type, packet.data));\n}\n","const withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) =\u003e {\n    return typeof ArrayBuffer.isView === \"function\"\n        ? ArrayBuffer.isView(obj)\n        : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n    (typeof Blob !== \"undefined\" \u0026\u0026\n        toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n    (typeof File !== \"undefined\" \u0026\u0026\n        toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nexport function isBinary(obj) {\n    return ((withNativeArrayBuffer \u0026\u0026 (obj instanceof ArrayBuffer || isView(obj))) ||\n        (withNativeBlob \u0026\u0026 obj instanceof Blob) ||\n        (withNativeFile \u0026\u0026 obj instanceof File));\n}\nexport function hasBinary(obj, toJSON) {\n    if (!obj || typeof obj !== \"object\") {\n        return false;\n    }\n    if (Array.isArray(obj)) {\n        for (let i = 0, l = obj.length; i \u003c l; i++) {\n            if (hasBinary(obj[i])) {\n                return true;\n            }\n        }\n        return false;\n    }\n    if (isBinary(obj)) {\n        return true;\n    }\n    if (obj.toJSON \u0026\u0026\n        typeof obj.toJSON === \"function\" \u0026\u0026\n        arguments.length === 1) {\n        return hasBinary(obj.toJSON(), true);\n    }\n    for (const key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key) \u0026\u0026 hasBinary(obj[key])) {\n            return true;\n        }\n    }\n    return false;\n}\n","import { isBinary } from \"./is-binary.js\";\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nexport function deconstructPacket(packet) {\n    const buffers = [];\n    const packetData = packet.data;\n    const pack = packet;\n    pack.data = _deconstructPacket(packetData, buffers);\n    pack.attachments = buffers.length; // number of binary 'attachments'\n    return { packet: pack, buffers: buffers };\n}\nfunction _deconstructPacket(data, buffers) {\n    if (!data)\n        return data;\n    if (isBinary(data)) {\n        const placeholder = { _placeholder: true, num: buffers.length };\n        buffers.push(data);\n        return placeholder;\n    }\n    else if (Array.isArray(data)) {\n        const newData = new Array(data.length);\n        for (let i = 0; i \u003c data.length; i++) {\n            newData[i] = _deconstructPacket(data[i], buffers);\n        }\n        return newData;\n    }\n    else if (typeof data === \"object\" \u0026\u0026 !(data instanceof Date)) {\n        const newData = {};\n        for (const key in data) {\n            if (Object.prototype.hasOwnProperty.call(data, key)) {\n                newData[key] = _deconstructPacket(data[key], buffers);\n            }\n        }\n        return newData;\n    }\n    return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nexport function reconstructPacket(packet, buffers) {\n    packet.data = _reconstructPacket(packet.data, buffers);\n    delete packet.attachments; // no longer useful\n    return packet;\n}\nfunction _reconstructPacket(data, buffers) {\n    if (!data)\n        return data;\n    if (data \u0026\u0026 data._placeholder === true) {\n        const isIndexValid = typeof data.num === \"number\" \u0026\u0026\n            data.num \u003e= 0 \u0026\u0026\n            data.num \u003c buffers.length;\n        if (isIndexValid) {\n            return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n        }\n        else {\n            throw new Error(\"illegal attachments\");\n        }\n    }\n    else if (Array.isArray(data)) {\n        for (let i = 0; i \u003c data.length; i++) {\n            data[i] = _reconstructPacket(data[i], buffers);\n        }\n    }\n    else if (typeof data === \"object\") {\n        for (const key in data) {\n            if (Object.prototype.hasOwnProperty.call(data, key)) {\n                data[key] = _reconstructPacket(data[key], buffers);\n            }\n        }\n    }\n    return data;\n}\n"],"version":3}
