"use strict"; let _Symbol$for, _Symbol$for2; function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; } var id = 0; function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; } const ee = require("namespace-emitter"); var _queued = /*#__PURE__*/_classPrivateFieldLooseKey("queued"); var _emitter = /*#__PURE__*/_classPrivateFieldLooseKey("emitter"); var _isOpen = /*#__PURE__*/_classPrivateFieldLooseKey("isOpen"); var _socket = /*#__PURE__*/_classPrivateFieldLooseKey("socket"); var _handleMessage = /*#__PURE__*/_classPrivateFieldLooseKey("handleMessage"); _Symbol$for = Symbol.for('uppy test: getSocket'); _Symbol$for2 = Symbol.for('uppy test: getQueued'); class UppySocket { constructor(opts) { Object.defineProperty(this, _queued, { writable: true, value: [] }); Object.defineProperty(this, _emitter, { writable: true, value: ee() }); Object.defineProperty(this, _isOpen, { writable: true, value: false }); Object.defineProperty(this, _socket, { writable: true, value: void 0 }); Object.defineProperty(this, _handleMessage, { writable: true, value: e => { try { const message = JSON.parse(e.data); this.emit(message.action, message.payload); } catch (err) { // TODO: use a more robust error handler. console.log(err); // eslint-disable-line no-console } } }); this.opts = opts; if (!opts || opts.autoOpen !== false) { this.open(); } } get isOpen() { return _classPrivateFieldLooseBase(this, _isOpen)[_isOpen]; } [_Symbol$for]() { return _classPrivateFieldLooseBase(this, _socket)[_socket]; } [_Symbol$for2]() { return _classPrivateFieldLooseBase(this, _queued)[_queued]; } open() { _classPrivateFieldLooseBase(this, _socket)[_socket] = new WebSocket(this.opts.target); _classPrivateFieldLooseBase(this, _socket)[_socket].onopen = () => { _classPrivateFieldLooseBase(this, _isOpen)[_isOpen] = true; while (_classPrivateFieldLooseBase(this, _queued)[_queued].length > 0 && _classPrivateFieldLooseBase(this, _isOpen)[_isOpen]) { const first = _classPrivateFieldLooseBase(this, _queued)[_queued].shift(); this.send(first.action, first.payload); } }; _classPrivateFieldLooseBase(this, _socket)[_socket].onclose = () => { _classPrivateFieldLooseBase(this, _isOpen)[_isOpen] = false; }; _classPrivateFieldLooseBase(this, _socket)[_socket].onmessage = _classPrivateFieldLooseBase(this, _handleMessage)[_handleMessage]; } close() { var _classPrivateFieldLoo; (_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _socket)[_socket]) == null ? void 0 : _classPrivateFieldLoo.close(); } send(action, payload) { // attach uuid if (!_classPrivateFieldLooseBase(this, _isOpen)[_isOpen]) { _classPrivateFieldLooseBase(this, _queued)[_queued].push({ action, payload }); return; } _classPrivateFieldLooseBase(this, _socket)[_socket].send(JSON.stringify({ action, payload })); } on(action, handler) { _classPrivateFieldLooseBase(this, _emitter)[_emitter].on(action, handler); } emit(action, payload) { _classPrivateFieldLooseBase(this, _emitter)[_emitter].emit(action, payload); } once(action, handler) { _classPrivateFieldLooseBase(this, _emitter)[_emitter].once(action, handler); } } module.exports = UppySocket;