{"ast":null,"code":"\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Socket = void 0;\n\nconst socket_io_parser_1 = require(\"socket.io-parser\");\n\nconst on_1 = require(\"./on\");\n\nconst typed_events_1 = require(\"./typed-events\");\n\nconst debug = require(\"debug\")(\"socket.io-client:socket\");\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\n\n\nconst RESERVED_EVENTS = Object.freeze({\n  connect: 1,\n  connect_error: 1,\n  disconnect: 1,\n  disconnecting: 1,\n  // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n  newListener: 1,\n  removeListener: 1\n});\n\nclass Socket extends typed_events_1.StrictEventEmitter {\n  /**\n   * `Socket` constructor.\n   *\n   * @public\n   */\n  constructor(io, nsp, opts) {\n    super();\n    this.receiveBuffer = [];\n    this.sendBuffer = [];\n    this.ids = 0;\n    this.acks = {};\n    this.flags = {};\n    this.io = io;\n    this.nsp = nsp;\n    this.ids = 0;\n    this.acks = {};\n    this.receiveBuffer = [];\n    this.sendBuffer = [];\n    this.connected = false;\n    this.disconnected = true;\n    this.flags = {};\n\n    if (opts && opts.auth) {\n      this.auth = opts.auth;\n    }\n\n    if (this.io._autoConnect) this.open();\n  }\n  /**\n   * Subscribe to open, close and packet events\n   *\n   * @private\n   */\n\n\n  subEvents() {\n    if (this.subs) return;\n    const io = this.io;\n    this.subs = [on_1.on(io, \"open\", this.onopen.bind(this)), on_1.on(io, \"packet\", this.onpacket.bind(this)), on_1.on(io, \"error\", this.onerror.bind(this)), on_1.on(io, \"close\", this.onclose.bind(this))];\n  }\n  /**\n   * Whether the Socket will try to reconnect when its Manager connects or reconnects\n   */\n\n\n  get active() {\n    return !!this.subs;\n  }\n  /**\n   * \"Opens\" the socket.\n   *\n   * @public\n   */\n\n\n  connect() {\n    if (this.connected) return this;\n    this.subEvents();\n    if (!this.io[\"_reconnecting\"]) this.io.open(); // ensure open\n\n    if (\"open\" === this.io._readyState) this.onopen();\n    return this;\n  }\n  /**\n   * Alias for connect()\n   */\n\n\n  open() {\n    return this.connect();\n  }\n  /**\n   * Sends a `message` event.\n   *\n   * @return self\n   * @public\n   */\n\n\n  send(...args) {\n    args.unshift(\"message\");\n    this.emit.apply(this, args);\n    return this;\n  }\n  /**\n   * Override `emit`.\n   * If the event is in `events`, it's emitted normally.\n   *\n   * @return self\n   * @public\n   */\n\n\n  emit(ev, ...args) {\n    if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n      throw new Error('\"' + ev + '\" is a reserved event name');\n    }\n\n    args.unshift(ev);\n    const packet = {\n      type: socket_io_parser_1.PacketType.EVENT,\n      data: args\n    };\n    packet.options = {};\n    packet.options.compress = this.flags.compress !== false; // event ack callback\n\n    if (\"function\" === typeof args[args.length - 1]) {\n      debug(\"emitting packet with ack id %d\", this.ids);\n      this.acks[this.ids] = args.pop();\n      packet.id = this.ids++;\n    }\n\n    const isTransportWritable = this.io.engine && this.io.engine.transport && this.io.engine.transport.writable;\n    const discardPacket = this.flags.volatile && (!isTransportWritable || !this.connected);\n\n    if (discardPacket) {\n      debug(\"discard packet as the transport is not currently writable\");\n    } else if (this.connected) {\n      this.packet(packet);\n    } else {\n      this.sendBuffer.push(packet);\n    }\n\n    this.flags = {};\n    return this;\n  }\n  /**\n   * Sends a packet.\n   *\n   * @param packet\n   * @private\n   */\n\n\n  packet(packet) {\n    packet.nsp = this.nsp;\n\n    this.io._packet(packet);\n  }\n  /**\n   * Called upon engine `open`.\n   *\n   * @private\n   */\n\n\n  onopen() {\n    debug(\"transport is open - connecting\");\n\n    if (typeof this.auth == \"function\") {\n      this.auth(data => {\n        this.packet({\n          type: socket_io_parser_1.PacketType.CONNECT,\n          data\n        });\n      });\n    } else {\n      this.packet({\n        type: socket_io_parser_1.PacketType.CONNECT,\n        data: this.auth\n      });\n    }\n  }\n  /**\n   * Called upon engine or manager `error`.\n   *\n   * @param err\n   * @private\n   */\n\n\n  onerror(err) {\n    if (!this.connected) {\n      this.emitReserved(\"connect_error\", err);\n    }\n  }\n  /**\n   * Called upon engine `close`.\n   *\n   * @param reason\n   * @private\n   */\n\n\n  onclose(reason) {\n    debug(\"close (%s)\", reason);\n    this.connected = false;\n    this.disconnected = true;\n    delete this.id;\n    this.emitReserved(\"disconnect\", reason);\n  }\n  /**\n   * Called with socket packet.\n   *\n   * @param packet\n   * @private\n   */\n\n\n  onpacket(packet) {\n    const sameNamespace = packet.nsp === this.nsp;\n    if (!sameNamespace) return;\n\n    switch (packet.type) {\n      case socket_io_parser_1.PacketType.CONNECT:\n        if (packet.data && packet.data.sid) {\n          const id = packet.data.sid;\n          this.onconnect(id);\n        } else {\n          this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n        }\n\n        break;\n\n      case socket_io_parser_1.PacketType.EVENT:\n        this.onevent(packet);\n        break;\n\n      case socket_io_parser_1.PacketType.BINARY_EVENT:\n        this.onevent(packet);\n        break;\n\n      case socket_io_parser_1.PacketType.ACK:\n        this.onack(packet);\n        break;\n\n      case socket_io_parser_1.PacketType.BINARY_ACK:\n        this.onack(packet);\n        break;\n\n      case socket_io_parser_1.PacketType.DISCONNECT:\n        this.ondisconnect();\n        break;\n\n      case socket_io_parser_1.PacketType.CONNECT_ERROR:\n        const err = new Error(packet.data.message); // @ts-ignore\n\n        err.data = packet.data.data;\n        this.emitReserved(\"connect_error\", err);\n        break;\n    }\n  }\n  /**\n   * Called upon a server event.\n   *\n   * @param packet\n   * @private\n   */\n\n\n  onevent(packet) {\n    const args = packet.data || [];\n    debug(\"emitting event %j\", args);\n\n    if (null != packet.id) {\n      debug(\"attaching ack callback to event\");\n      args.push(this.ack(packet.id));\n    }\n\n    if (this.connected) {\n      this.emitEvent(args);\n    } else {\n      this.receiveBuffer.push(Object.freeze(args));\n    }\n  }\n\n  emitEvent(args) {\n    if (this._anyListeners && this._anyListeners.length) {\n      const listeners = this._anyListeners.slice();\n\n      for (const listener of listeners) {\n        listener.apply(this, args);\n      }\n    }\n\n    super.emit.apply(this, args);\n  }\n  /**\n   * Produces an ack callback to emit with an event.\n   *\n   * @private\n   */\n\n\n  ack(id) {\n    const self = this;\n    let sent = false;\n    return function (...args) {\n      // prevent double callbacks\n      if (sent) return;\n      sent = true;\n      debug(\"sending ack %j\", args);\n      self.packet({\n        type: socket_io_parser_1.PacketType.ACK,\n        id: id,\n        data: args\n      });\n    };\n  }\n  /**\n   * Called upon a server acknowlegement.\n   *\n   * @param packet\n   * @private\n   */\n\n\n  onack(packet) {\n    const ack = this.acks[packet.id];\n\n    if (\"function\" === typeof ack) {\n      debug(\"calling ack %s with %j\", packet.id, packet.data);\n      ack.apply(this, packet.data);\n      delete this.acks[packet.id];\n    } else {\n      debug(\"bad ack %s\", packet.id);\n    }\n  }\n  /**\n   * Called upon server connect.\n   *\n   * @private\n   */\n\n\n  onconnect(id) {\n    debug(\"socket connected with id %s\", id);\n    this.id = id;\n    this.connected = true;\n    this.disconnected = false;\n    this.emitReserved(\"connect\");\n    this.emitBuffered();\n  }\n  /**\n   * Emit buffered events (received and emitted).\n   *\n   * @private\n   */\n\n\n  emitBuffered() {\n    this.receiveBuffer.forEach(args => this.emitEvent(args));\n    this.receiveBuffer = [];\n    this.sendBuffer.forEach(packet => this.packet(packet));\n    this.sendBuffer = [];\n  }\n  /**\n   * Called upon server disconnect.\n   *\n   * @private\n   */\n\n\n  ondisconnect() {\n    debug(\"server disconnect (%s)\", this.nsp);\n    this.destroy();\n    this.onclose(\"io server disconnect\");\n  }\n  /**\n   * Called upon forced client/server side disconnections,\n   * this method ensures the manager stops tracking us and\n   * that reconnections don't get triggered for this.\n   *\n   * @private\n   */\n\n\n  destroy() {\n    if (this.subs) {\n      // clean subscriptions to avoid reconnections\n      this.subs.forEach(subDestroy => subDestroy());\n      this.subs = undefined;\n    }\n\n    this.io[\"_destroy\"](this);\n  }\n  /**\n   * Disconnects the socket manually.\n   *\n   * @return self\n   * @public\n   */\n\n\n  disconnect() {\n    if (this.connected) {\n      debug(\"performing disconnect (%s)\", this.nsp);\n      this.packet({\n        type: socket_io_parser_1.PacketType.DISCONNECT\n      });\n    } // remove socket from pool\n\n\n    this.destroy();\n\n    if (this.connected) {\n      // fire events\n      this.onclose(\"io client disconnect\");\n    }\n\n    return this;\n  }\n  /**\n   * Alias for disconnect()\n   *\n   * @return self\n   * @public\n   */\n\n\n  close() {\n    return this.disconnect();\n  }\n  /**\n   * Sets the compress flag.\n   *\n   * @param compress - if `true`, compresses the sending data\n   * @return self\n   * @public\n   */\n\n\n  compress(compress) {\n    this.flags.compress = compress;\n    return this;\n  }\n  /**\n   * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n   * ready to send messages.\n   *\n   * @returns self\n   * @public\n   */\n\n\n  get volatile() {\n    this.flags.volatile = true;\n    return this;\n  }\n  /**\n   * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n   * callback.\n   *\n   * @param listener\n   * @public\n   */\n\n\n  onAny(listener) {\n    this._anyListeners = this._anyListeners || [];\n\n    this._anyListeners.push(listener);\n\n    return this;\n  }\n  /**\n   * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n   * callback. The listener is added to the beginning of the listeners array.\n   *\n   * @param listener\n   * @public\n   */\n\n\n  prependAny(listener) {\n    this._anyListeners = this._anyListeners || [];\n\n    this._anyListeners.unshift(listener);\n\n    return this;\n  }\n  /**\n   * Removes the listener that will be fired when any event is emitted.\n   *\n   * @param listener\n   * @public\n   */\n\n\n  offAny(listener) {\n    if (!this._anyListeners) {\n      return this;\n    }\n\n    if (listener) {\n      const listeners = this._anyListeners;\n\n      for (let i = 0; i < listeners.length; i++) {\n        if (listener === listeners[i]) {\n          listeners.splice(i, 1);\n          return this;\n        }\n      }\n    } else {\n      this._anyListeners = [];\n    }\n\n    return this;\n  }\n  /**\n   * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n   * e.g. to remove listeners.\n   *\n   * @public\n   */\n\n\n  listenersAny() {\n    return this._anyListeners || [];\n  }\n\n}\n\nexports.Socket = Socket;","map":{"version":3,"sources":["C:/laragon/www/itokin/DriverOPCDA/frontend/node_modules/socket.io-client/build/socket.js"],"names":["Object","defineProperty","exports","value","Socket","socket_io_parser_1","require","on_1","typed_events_1","debug","RESERVED_EVENTS","freeze","connect","connect_error","disconnect","disconnecting","newListener","removeListener","StrictEventEmitter","constructor","io","nsp","opts","receiveBuffer","sendBuffer","ids","acks","flags","connected","disconnected","auth","_autoConnect","open","subEvents","subs","on","onopen","bind","onpacket","onerror","onclose","active","_readyState","send","args","unshift","emit","apply","ev","hasOwnProperty","Error","packet","type","PacketType","EVENT","data","options","compress","length","pop","id","isTransportWritable","engine","transport","writable","discardPacket","volatile","push","_packet","CONNECT","err","emitReserved","reason","sameNamespace","sid","onconnect","onevent","BINARY_EVENT","ACK","onack","BINARY_ACK","DISCONNECT","ondisconnect","CONNECT_ERROR","message","ack","emitEvent","_anyListeners","listeners","slice","listener","self","sent","emitBuffered","forEach","destroy","subDestroy","undefined","close","onAny","prependAny","offAny","i","splice","listenersAny"],"mappings":"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","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Socket = void 0;\nconst socket_io_parser_1 = require(\"socket.io-parser\");\nconst on_1 = require(\"./on\");\nconst typed_events_1 = require(\"./typed-events\");\nconst debug = require(\"debug\")(\"socket.io-client:socket\");\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n    connect: 1,\n    connect_error: 1,\n    disconnect: 1,\n    disconnecting: 1,\n    // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n    newListener: 1,\n    removeListener: 1,\n});\nclass Socket extends typed_events_1.StrictEventEmitter {\n    /**\n     * `Socket` constructor.\n     *\n     * @public\n     */\n    constructor(io, nsp, opts) {\n        super();\n        this.receiveBuffer = [];\n        this.sendBuffer = [];\n        this.ids = 0;\n        this.acks = {};\n        this.flags = {};\n        this.io = io;\n        this.nsp = nsp;\n        this.ids = 0;\n        this.acks = {};\n        this.receiveBuffer = [];\n        this.sendBuffer = [];\n        this.connected = false;\n        this.disconnected = true;\n        this.flags = {};\n        if (opts && opts.auth) {\n            this.auth = opts.auth;\n        }\n        if (this.io._autoConnect)\n            this.open();\n    }\n    /**\n     * Subscribe to open, close and packet events\n     *\n     * @private\n     */\n    subEvents() {\n        if (this.subs)\n            return;\n        const io = this.io;\n        this.subs = [\n            on_1.on(io, \"open\", this.onopen.bind(this)),\n            on_1.on(io, \"packet\", this.onpacket.bind(this)),\n            on_1.on(io, \"error\", this.onerror.bind(this)),\n            on_1.on(io, \"close\", this.onclose.bind(this)),\n        ];\n    }\n    /**\n     * Whether the Socket will try to reconnect when its Manager connects or reconnects\n     */\n    get active() {\n        return !!this.subs;\n    }\n    /**\n     * \"Opens\" the socket.\n     *\n     * @public\n     */\n    connect() {\n        if (this.connected)\n            return this;\n        this.subEvents();\n        if (!this.io[\"_reconnecting\"])\n            this.io.open(); // ensure open\n        if (\"open\" === this.io._readyState)\n            this.onopen();\n        return this;\n    }\n    /**\n     * Alias for connect()\n     */\n    open() {\n        return this.connect();\n    }\n    /**\n     * Sends a `message` event.\n     *\n     * @return self\n     * @public\n     */\n    send(...args) {\n        args.unshift(\"message\");\n        this.emit.apply(this, args);\n        return this;\n    }\n    /**\n     * Override `emit`.\n     * If the event is in `events`, it's emitted normally.\n     *\n     * @return self\n     * @public\n     */\n    emit(ev, ...args) {\n        if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n            throw new Error('\"' + ev + '\" is a reserved event name');\n        }\n        args.unshift(ev);\n        const packet = {\n            type: socket_io_parser_1.PacketType.EVENT,\n            data: args,\n        };\n        packet.options = {};\n        packet.options.compress = this.flags.compress !== false;\n        // event ack callback\n        if (\"function\" === typeof args[args.length - 1]) {\n            debug(\"emitting packet with ack id %d\", this.ids);\n            this.acks[this.ids] = args.pop();\n            packet.id = this.ids++;\n        }\n        const isTransportWritable = this.io.engine &&\n            this.io.engine.transport &&\n            this.io.engine.transport.writable;\n        const discardPacket = this.flags.volatile && (!isTransportWritable || !this.connected);\n        if (discardPacket) {\n            debug(\"discard packet as the transport is not currently writable\");\n        }\n        else if (this.connected) {\n            this.packet(packet);\n        }\n        else {\n            this.sendBuffer.push(packet);\n        }\n        this.flags = {};\n        return this;\n    }\n    /**\n     * Sends a packet.\n     *\n     * @param packet\n     * @private\n     */\n    packet(packet) {\n        packet.nsp = this.nsp;\n        this.io._packet(packet);\n    }\n    /**\n     * Called upon engine `open`.\n     *\n     * @private\n     */\n    onopen() {\n        debug(\"transport is open - connecting\");\n        if (typeof this.auth == \"function\") {\n            this.auth((data) => {\n                this.packet({ type: socket_io_parser_1.PacketType.CONNECT, data });\n            });\n        }\n        else {\n            this.packet({ type: socket_io_parser_1.PacketType.CONNECT, data: this.auth });\n        }\n    }\n    /**\n     * Called upon engine or manager `error`.\n     *\n     * @param err\n     * @private\n     */\n    onerror(err) {\n        if (!this.connected) {\n            this.emitReserved(\"connect_error\", err);\n        }\n    }\n    /**\n     * Called upon engine `close`.\n     *\n     * @param reason\n     * @private\n     */\n    onclose(reason) {\n        debug(\"close (%s)\", reason);\n        this.connected = false;\n        this.disconnected = true;\n        delete this.id;\n        this.emitReserved(\"disconnect\", reason);\n    }\n    /**\n     * Called with socket packet.\n     *\n     * @param packet\n     * @private\n     */\n    onpacket(packet) {\n        const sameNamespace = packet.nsp === this.nsp;\n        if (!sameNamespace)\n            return;\n        switch (packet.type) {\n            case socket_io_parser_1.PacketType.CONNECT:\n                if (packet.data && packet.data.sid) {\n                    const id = packet.data.sid;\n                    this.onconnect(id);\n                }\n                else {\n                    this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n                }\n                break;\n            case socket_io_parser_1.PacketType.EVENT:\n                this.onevent(packet);\n                break;\n            case socket_io_parser_1.PacketType.BINARY_EVENT:\n                this.onevent(packet);\n                break;\n            case socket_io_parser_1.PacketType.ACK:\n                this.onack(packet);\n                break;\n            case socket_io_parser_1.PacketType.BINARY_ACK:\n                this.onack(packet);\n                break;\n            case socket_io_parser_1.PacketType.DISCONNECT:\n                this.ondisconnect();\n                break;\n            case socket_io_parser_1.PacketType.CONNECT_ERROR:\n                const err = new Error(packet.data.message);\n                // @ts-ignore\n                err.data = packet.data.data;\n                this.emitReserved(\"connect_error\", err);\n                break;\n        }\n    }\n    /**\n     * Called upon a server event.\n     *\n     * @param packet\n     * @private\n     */\n    onevent(packet) {\n        const args = packet.data || [];\n        debug(\"emitting event %j\", args);\n        if (null != packet.id) {\n            debug(\"attaching ack callback to event\");\n            args.push(this.ack(packet.id));\n        }\n        if (this.connected) {\n            this.emitEvent(args);\n        }\n        else {\n            this.receiveBuffer.push(Object.freeze(args));\n        }\n    }\n    emitEvent(args) {\n        if (this._anyListeners && this._anyListeners.length) {\n            const listeners = this._anyListeners.slice();\n            for (const listener of listeners) {\n                listener.apply(this, args);\n            }\n        }\n        super.emit.apply(this, args);\n    }\n    /**\n     * Produces an ack callback to emit with an event.\n     *\n     * @private\n     */\n    ack(id) {\n        const self = this;\n        let sent = false;\n        return function (...args) {\n            // prevent double callbacks\n            if (sent)\n                return;\n            sent = true;\n            debug(\"sending ack %j\", args);\n            self.packet({\n                type: socket_io_parser_1.PacketType.ACK,\n                id: id,\n                data: args,\n            });\n        };\n    }\n    /**\n     * Called upon a server acknowlegement.\n     *\n     * @param packet\n     * @private\n     */\n    onack(packet) {\n        const ack = this.acks[packet.id];\n        if (\"function\" === typeof ack) {\n            debug(\"calling ack %s with %j\", packet.id, packet.data);\n            ack.apply(this, packet.data);\n            delete this.acks[packet.id];\n        }\n        else {\n            debug(\"bad ack %s\", packet.id);\n        }\n    }\n    /**\n     * Called upon server connect.\n     *\n     * @private\n     */\n    onconnect(id) {\n        debug(\"socket connected with id %s\", id);\n        this.id = id;\n        this.connected = true;\n        this.disconnected = false;\n        this.emitReserved(\"connect\");\n        this.emitBuffered();\n    }\n    /**\n     * Emit buffered events (received and emitted).\n     *\n     * @private\n     */\n    emitBuffered() {\n        this.receiveBuffer.forEach((args) => this.emitEvent(args));\n        this.receiveBuffer = [];\n        this.sendBuffer.forEach((packet) => this.packet(packet));\n        this.sendBuffer = [];\n    }\n    /**\n     * Called upon server disconnect.\n     *\n     * @private\n     */\n    ondisconnect() {\n        debug(\"server disconnect (%s)\", this.nsp);\n        this.destroy();\n        this.onclose(\"io server disconnect\");\n    }\n    /**\n     * Called upon forced client/server side disconnections,\n     * this method ensures the manager stops tracking us and\n     * that reconnections don't get triggered for this.\n     *\n     * @private\n     */\n    destroy() {\n        if (this.subs) {\n            // clean subscriptions to avoid reconnections\n            this.subs.forEach((subDestroy) => subDestroy());\n            this.subs = undefined;\n        }\n        this.io[\"_destroy\"](this);\n    }\n    /**\n     * Disconnects the socket manually.\n     *\n     * @return self\n     * @public\n     */\n    disconnect() {\n        if (this.connected) {\n            debug(\"performing disconnect (%s)\", this.nsp);\n            this.packet({ type: socket_io_parser_1.PacketType.DISCONNECT });\n        }\n        // remove socket from pool\n        this.destroy();\n        if (this.connected) {\n            // fire events\n            this.onclose(\"io client disconnect\");\n        }\n        return this;\n    }\n    /**\n     * Alias for disconnect()\n     *\n     * @return self\n     * @public\n     */\n    close() {\n        return this.disconnect();\n    }\n    /**\n     * Sets the compress flag.\n     *\n     * @param compress - if `true`, compresses the sending data\n     * @return self\n     * @public\n     */\n    compress(compress) {\n        this.flags.compress = compress;\n        return this;\n    }\n    /**\n     * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n     * ready to send messages.\n     *\n     * @returns self\n     * @public\n     */\n    get volatile() {\n        this.flags.volatile = true;\n        return this;\n    }\n    /**\n     * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n     * callback.\n     *\n     * @param listener\n     * @public\n     */\n    onAny(listener) {\n        this._anyListeners = this._anyListeners || [];\n        this._anyListeners.push(listener);\n        return this;\n    }\n    /**\n     * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n     * callback. The listener is added to the beginning of the listeners array.\n     *\n     * @param listener\n     * @public\n     */\n    prependAny(listener) {\n        this._anyListeners = this._anyListeners || [];\n        this._anyListeners.unshift(listener);\n        return this;\n    }\n    /**\n     * Removes the listener that will be fired when any event is emitted.\n     *\n     * @param listener\n     * @public\n     */\n    offAny(listener) {\n        if (!this._anyListeners) {\n            return this;\n        }\n        if (listener) {\n            const listeners = this._anyListeners;\n            for (let i = 0; i < listeners.length; i++) {\n                if (listener === listeners[i]) {\n                    listeners.splice(i, 1);\n                    return this;\n                }\n            }\n        }\n        else {\n            this._anyListeners = [];\n        }\n        return this;\n    }\n    /**\n     * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n     * e.g. to remove listeners.\n     *\n     * @public\n     */\n    listenersAny() {\n        return this._anyListeners || [];\n    }\n}\nexports.Socket = Socket;\n"]},"metadata":{},"sourceType":"script"}