Socket.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. "use strict";
  2. let _Symbol$for, _Symbol$for2;
  3. function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
  4. var id = 0;
  5. function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
  6. const ee = require("namespace-emitter");
  7. var _queued = /*#__PURE__*/_classPrivateFieldLooseKey("queued");
  8. var _emitter = /*#__PURE__*/_classPrivateFieldLooseKey("emitter");
  9. var _isOpen = /*#__PURE__*/_classPrivateFieldLooseKey("isOpen");
  10. var _socket = /*#__PURE__*/_classPrivateFieldLooseKey("socket");
  11. var _handleMessage = /*#__PURE__*/_classPrivateFieldLooseKey("handleMessage");
  12. _Symbol$for = Symbol.for('uppy test: getSocket');
  13. _Symbol$for2 = Symbol.for('uppy test: getQueued');
  14. class UppySocket {
  15. constructor(opts) {
  16. Object.defineProperty(this, _queued, {
  17. writable: true,
  18. value: []
  19. });
  20. Object.defineProperty(this, _emitter, {
  21. writable: true,
  22. value: ee()
  23. });
  24. Object.defineProperty(this, _isOpen, {
  25. writable: true,
  26. value: false
  27. });
  28. Object.defineProperty(this, _socket, {
  29. writable: true,
  30. value: void 0
  31. });
  32. Object.defineProperty(this, _handleMessage, {
  33. writable: true,
  34. value: e => {
  35. try {
  36. const message = JSON.parse(e.data);
  37. this.emit(message.action, message.payload);
  38. } catch (err) {
  39. // TODO: use a more robust error handler.
  40. console.log(err); // eslint-disable-line no-console
  41. }
  42. }
  43. });
  44. this.opts = opts;
  45. if (!opts || opts.autoOpen !== false) {
  46. this.open();
  47. }
  48. }
  49. get isOpen() {
  50. return _classPrivateFieldLooseBase(this, _isOpen)[_isOpen];
  51. }
  52. [_Symbol$for]() {
  53. return _classPrivateFieldLooseBase(this, _socket)[_socket];
  54. }
  55. [_Symbol$for2]() {
  56. return _classPrivateFieldLooseBase(this, _queued)[_queued];
  57. }
  58. open() {
  59. _classPrivateFieldLooseBase(this, _socket)[_socket] = new WebSocket(this.opts.target);
  60. _classPrivateFieldLooseBase(this, _socket)[_socket].onopen = () => {
  61. _classPrivateFieldLooseBase(this, _isOpen)[_isOpen] = true;
  62. while (_classPrivateFieldLooseBase(this, _queued)[_queued].length > 0 && _classPrivateFieldLooseBase(this, _isOpen)[_isOpen]) {
  63. const first = _classPrivateFieldLooseBase(this, _queued)[_queued].shift();
  64. this.send(first.action, first.payload);
  65. }
  66. };
  67. _classPrivateFieldLooseBase(this, _socket)[_socket].onclose = () => {
  68. _classPrivateFieldLooseBase(this, _isOpen)[_isOpen] = false;
  69. };
  70. _classPrivateFieldLooseBase(this, _socket)[_socket].onmessage = _classPrivateFieldLooseBase(this, _handleMessage)[_handleMessage];
  71. }
  72. close() {
  73. var _classPrivateFieldLoo;
  74. (_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _socket)[_socket]) == null ? void 0 : _classPrivateFieldLoo.close();
  75. }
  76. send(action, payload) {
  77. // attach uuid
  78. if (!_classPrivateFieldLooseBase(this, _isOpen)[_isOpen]) {
  79. _classPrivateFieldLooseBase(this, _queued)[_queued].push({
  80. action,
  81. payload
  82. });
  83. return;
  84. }
  85. _classPrivateFieldLooseBase(this, _socket)[_socket].send(JSON.stringify({
  86. action,
  87. payload
  88. }));
  89. }
  90. on(action, handler) {
  91. _classPrivateFieldLooseBase(this, _emitter)[_emitter].on(action, handler);
  92. }
  93. emit(action, payload) {
  94. _classPrivateFieldLooseBase(this, _emitter)[_emitter].emit(action, payload);
  95. }
  96. once(action, handler) {
  97. _classPrivateFieldLooseBase(this, _emitter)[_emitter].once(action, handler);
  98. }
  99. }
  100. module.exports = UppySocket;