You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.6 KiB
132 lines
3.6 KiB
"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;
|