{"ast":null,"code":"var _classCallCheck = require(\"C:/laragon/www/iot.mksolusi/DriverOPCDA/frontend/node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/classCallCheck\");\n\nvar _createClass = require(\"C:/laragon/www/iot.mksolusi/DriverOPCDA/frontend/node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/createClass\");\n\nvar _inherits = require(\"C:/laragon/www/iot.mksolusi/DriverOPCDA/frontend/node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/inherits\");\n\nvar _createSuper = require(\"C:/laragon/www/iot.mksolusi/DriverOPCDA/frontend/node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/createSuper\");\n\nvar Transport = require(\"../transport\");\n\nvar parser = require(\"engine.io-parser\");\n\nvar parseqs = require(\"parseqs\");\n\nvar yeast = require(\"yeast\");\n\nvar _require = require(\"../util\"),\n    pick = _require.pick;\n\nvar _require2 = require(\"./websocket-constructor\"),\n    WebSocket = _require2.WebSocket,\n    usingBrowserWebSocket = _require2.usingBrowserWebSocket,\n    defaultBinaryType = _require2.defaultBinaryType;\n\nvar debug = require(\"debug\")(\"engine.io-client:websocket\"); // detect ReactNative environment\n\n\nvar isReactNative = typeof navigator !== \"undefined\" && typeof navigator.product === \"string\" && navigator.product.toLowerCase() === \"reactnative\";\n\nvar WS = /*#__PURE__*/function (_Transport) {\n  \"use strict\";\n\n  _inherits(WS, _Transport);\n\n  var _super = _createSuper(WS);\n\n  /**\n   * WebSocket transport constructor.\n   *\n   * @api {Object} connection options\n   * @api public\n   */\n  function WS(opts) {\n    var _this;\n\n    _classCallCheck(this, WS);\n\n    _this = _super.call(this, opts);\n    _this.supportsBinary = !opts.forceBase64;\n    return _this;\n  }\n  /**\n   * Transport name.\n   *\n   * @api public\n   */\n\n\n  _createClass(WS, [{\n    key: \"name\",\n    get: function get() {\n      return \"websocket\";\n    }\n    /**\n     * Opens socket.\n     *\n     * @api private\n     */\n\n  }, {\n    key: \"doOpen\",\n    value: function doOpen() {\n      if (!this.check()) {\n        // let probe timeout\n        return;\n      }\n\n      var uri = this.uri();\n      var protocols = this.opts.protocols; // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n\n      var opts = isReactNative ? {} : pick(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n\n      if (this.opts.extraHeaders) {\n        opts.headers = this.opts.extraHeaders;\n      }\n\n      try {\n        this.ws = usingBrowserWebSocket && !isReactNative ? protocols ? new WebSocket(uri, protocols) : new WebSocket(uri) : new WebSocket(uri, protocols, opts);\n      } catch (err) {\n        return this.emit(\"error\", err);\n      }\n\n      this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\n      this.addEventListeners();\n    }\n    /**\n     * Adds event listeners to the socket\n     *\n     * @api private\n     */\n\n  }, {\n    key: \"addEventListeners\",\n    value: function addEventListeners() {\n      var _this2 = this;\n\n      this.ws.onopen = function () {\n        if (_this2.opts.autoUnref) {\n          _this2.ws._socket.unref();\n        }\n\n        _this2.onOpen();\n      };\n\n      this.ws.onclose = this.onClose.bind(this);\n\n      this.ws.onmessage = function (ev) {\n        return _this2.onData(ev.data);\n      };\n\n      this.ws.onerror = function (e) {\n        return _this2.onError(\"websocket error\", e);\n      };\n    }\n    /**\n     * Writes data to socket.\n     *\n     * @param {Array} array of packets.\n     * @api private\n     */\n\n  }, {\n    key: \"write\",\n    value: function write(packets) {\n      var self = this;\n      this.writable = false; // encodePacket efficient as it uses WS framing\n      // no need for encodePayload\n\n      var total = packets.length;\n      var i = 0;\n      var l = total;\n\n      for (; i < l; i++) {\n        (function (packet) {\n          parser.encodePacket(packet, self.supportsBinary, function (data) {\n            // always create a new object (GH-437)\n            var opts = {};\n\n            if (!usingBrowserWebSocket) {\n              if (packet.options) {\n                opts.compress = packet.options.compress;\n              }\n\n              if (self.opts.perMessageDeflate) {\n                var len = \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n\n                if (len < self.opts.perMessageDeflate.threshold) {\n                  opts.compress = false;\n                }\n              }\n            } // Sometimes the websocket has already been closed but the browser didn't\n            // have a chance of informing us about it yet, in that case send will\n            // throw an error\n\n\n            try {\n              if (usingBrowserWebSocket) {\n                // TypeError is thrown when passing the second argument on Safari\n                self.ws.send(data);\n              } else {\n                self.ws.send(data, opts);\n              }\n            } catch (e) {\n              debug(\"websocket closed before onclose event\");\n            }\n\n            --total || done();\n          });\n        })(packets[i]);\n      }\n\n      function done() {\n        self.emit(\"flush\"); // fake drain\n        // defer to next tick to allow Socket to clear writeBuffer\n\n        setTimeout(function () {\n          self.writable = true;\n          self.emit(\"drain\");\n        }, 0);\n      }\n    }\n    /**\n     * Called upon close\n     *\n     * @api private\n     */\n\n  }, {\n    key: \"onClose\",\n    value: function onClose() {\n      Transport.prototype.onClose.call(this);\n    }\n    /**\n     * Closes socket.\n     *\n     * @api private\n     */\n\n  }, {\n    key: \"doClose\",\n    value: function doClose() {\n      if (typeof this.ws !== \"undefined\") {\n        this.ws.close();\n        this.ws = null;\n      }\n    }\n    /**\n     * Generates uri for connection.\n     *\n     * @api private\n     */\n\n  }, {\n    key: \"uri\",\n    value: function uri() {\n      var query = this.query || {};\n      var schema = this.opts.secure ? \"wss\" : \"ws\";\n      var port = \"\"; // avoid port if default for schema\n\n      if (this.opts.port && (\"wss\" === schema && Number(this.opts.port) !== 443 || \"ws\" === schema && Number(this.opts.port) !== 80)) {\n        port = \":\" + this.opts.port;\n      } // append timestamp to URI\n\n\n      if (this.opts.timestampRequests) {\n        query[this.opts.timestampParam] = yeast();\n      } // communicate binary support capabilities\n\n\n      if (!this.supportsBinary) {\n        query.b64 = 1;\n      }\n\n      query = parseqs.encode(query); // prepend ? to query\n\n      if (query.length) {\n        query = \"?\" + query;\n      }\n\n      var ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n      return schema + \"://\" + (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) + port + this.opts.path + query;\n    }\n    /**\n     * Feature detection for WebSocket.\n     *\n     * @return {Boolean} whether this transport is available.\n     * @api public\n     */\n\n  }, {\n    key: \"check\",\n    value: function check() {\n      return !!WebSocket && !(\"__initialize\" in WebSocket && this.name === WS.prototype.name);\n    }\n  }]);\n\n  return WS;\n}(Transport);\n\nmodule.exports = WS;","map":{"version":3,"sources":["C:/laragon/www/iot.mksolusi/DriverOPCDA/frontend/node_modules/engine.io-client/lib/transports/websocket.js"],"names":["Transport","require","parser","parseqs","yeast","pick","WebSocket","usingBrowserWebSocket","defaultBinaryType","debug","isReactNative","navigator","product","toLowerCase","WS","opts","supportsBinary","forceBase64","check","uri","protocols","extraHeaders","headers","ws","err","emit","binaryType","socket","addEventListeners","onopen","autoUnref","_socket","unref","onOpen","onclose","onClose","bind","onmessage","ev","onData","data","onerror","e","onError","packets","self","writable","total","length","i","l","packet","encodePacket","options","compress","perMessageDeflate","len","Buffer","byteLength","threshold","send","done","setTimeout","prototype","call","close","query","schema","secure","port","Number","timestampRequests","timestampParam","b64","encode","ipv6","hostname","indexOf","path","name","module","exports"],"mappings":"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","sourcesContent":["const Transport = require(\"../transport\");\nconst parser = require(\"engine.io-parser\");\nconst parseqs = require(\"parseqs\");\nconst yeast = require(\"yeast\");\nconst { pick } = require(\"../util\");\nconst {\n  WebSocket,\n  usingBrowserWebSocket,\n  defaultBinaryType\n} = require(\"./websocket-constructor\");\n\nconst debug = require(\"debug\")(\"engine.io-client:websocket\");\n\n// detect ReactNative environment\nconst isReactNative =\n  typeof navigator !== \"undefined\" &&\n  typeof navigator.product === \"string\" &&\n  navigator.product.toLowerCase() === \"reactnative\";\n\nclass WS extends Transport {\n  /**\n   * WebSocket transport constructor.\n   *\n   * @api {Object} connection options\n   * @api public\n   */\n  constructor(opts) {\n    super(opts);\n\n    this.supportsBinary = !opts.forceBase64;\n  }\n\n  /**\n   * Transport name.\n   *\n   * @api public\n   */\n  get name() {\n    return \"websocket\";\n  }\n\n  /**\n   * Opens socket.\n   *\n   * @api private\n   */\n  doOpen() {\n    if (!this.check()) {\n      // let probe timeout\n      return;\n    }\n\n    const uri = this.uri();\n    const protocols = this.opts.protocols;\n\n    // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n    const opts = isReactNative\n      ? {}\n      : pick(\n          this.opts,\n          \"agent\",\n          \"perMessageDeflate\",\n          \"pfx\",\n          \"key\",\n          \"passphrase\",\n          \"cert\",\n          \"ca\",\n          \"ciphers\",\n          \"rejectUnauthorized\",\n          \"localAddress\",\n          \"protocolVersion\",\n          \"origin\",\n          \"maxPayload\",\n          \"family\",\n          \"checkServerIdentity\"\n        );\n\n    if (this.opts.extraHeaders) {\n      opts.headers = this.opts.extraHeaders;\n    }\n\n    try {\n      this.ws =\n        usingBrowserWebSocket && !isReactNative\n          ? protocols\n            ? new WebSocket(uri, protocols)\n            : new WebSocket(uri)\n          : new WebSocket(uri, protocols, opts);\n    } catch (err) {\n      return this.emit(\"error\", err);\n    }\n\n    this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\n\n    this.addEventListeners();\n  }\n\n  /**\n   * Adds event listeners to the socket\n   *\n   * @api private\n   */\n  addEventListeners() {\n    this.ws.onopen = () => {\n      if (this.opts.autoUnref) {\n        this.ws._socket.unref();\n      }\n      this.onOpen();\n    };\n    this.ws.onclose = this.onClose.bind(this);\n    this.ws.onmessage = ev => this.onData(ev.data);\n    this.ws.onerror = e => this.onError(\"websocket error\", e);\n  }\n\n  /**\n   * Writes data to socket.\n   *\n   * @param {Array} array of packets.\n   * @api private\n   */\n  write(packets) {\n    const self = this;\n    this.writable = false;\n\n    // encodePacket efficient as it uses WS framing\n    // no need for encodePayload\n    let total = packets.length;\n    let i = 0;\n    const l = total;\n    for (; i < l; i++) {\n      (function(packet) {\n        parser.encodePacket(packet, self.supportsBinary, function(data) {\n          // always create a new object (GH-437)\n          const opts = {};\n          if (!usingBrowserWebSocket) {\n            if (packet.options) {\n              opts.compress = packet.options.compress;\n            }\n\n            if (self.opts.perMessageDeflate) {\n              const len =\n                \"string\" === typeof data\n                  ? Buffer.byteLength(data)\n                  : data.length;\n              if (len < self.opts.perMessageDeflate.threshold) {\n                opts.compress = false;\n              }\n            }\n          }\n\n          // Sometimes the websocket has already been closed but the browser didn't\n          // have a chance of informing us about it yet, in that case send will\n          // throw an error\n          try {\n            if (usingBrowserWebSocket) {\n              // TypeError is thrown when passing the second argument on Safari\n              self.ws.send(data);\n            } else {\n              self.ws.send(data, opts);\n            }\n          } catch (e) {\n            debug(\"websocket closed before onclose event\");\n          }\n\n          --total || done();\n        });\n      })(packets[i]);\n    }\n\n    function done() {\n      self.emit(\"flush\");\n\n      // fake drain\n      // defer to next tick to allow Socket to clear writeBuffer\n      setTimeout(function() {\n        self.writable = true;\n        self.emit(\"drain\");\n      }, 0);\n    }\n  }\n\n  /**\n   * Called upon close\n   *\n   * @api private\n   */\n  onClose() {\n    Transport.prototype.onClose.call(this);\n  }\n\n  /**\n   * Closes socket.\n   *\n   * @api private\n   */\n  doClose() {\n    if (typeof this.ws !== \"undefined\") {\n      this.ws.close();\n      this.ws = null;\n    }\n  }\n\n  /**\n   * Generates uri for connection.\n   *\n   * @api private\n   */\n  uri() {\n    let query = this.query || {};\n    const schema = this.opts.secure ? \"wss\" : \"ws\";\n    let port = \"\";\n\n    // avoid port if default for schema\n    if (\n      this.opts.port &&\n      ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n        (\"ws\" === schema && Number(this.opts.port) !== 80))\n    ) {\n      port = \":\" + this.opts.port;\n    }\n\n    // append timestamp to URI\n    if (this.opts.timestampRequests) {\n      query[this.opts.timestampParam] = yeast();\n    }\n\n    // communicate binary support capabilities\n    if (!this.supportsBinary) {\n      query.b64 = 1;\n    }\n\n    query = parseqs.encode(query);\n\n    // prepend ? to query\n    if (query.length) {\n      query = \"?\" + query;\n    }\n\n    const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n    return (\n      schema +\n      \"://\" +\n      (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n      port +\n      this.opts.path +\n      query\n    );\n  }\n\n  /**\n   * Feature detection for WebSocket.\n   *\n   * @return {Boolean} whether this transport is available.\n   * @api public\n   */\n  check() {\n    return (\n      !!WebSocket &&\n      !(\"__initialize\" in WebSocket && this.name === WS.prototype.name)\n    );\n  }\n}\n\nmodule.exports = WS;\n"]},"metadata":{},"sourceType":"script"}