@folklore/socket 0.4.2 → 0.4.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs.js +1100 -0
- package/dist/es.js +1052 -0
- package/package.json +7 -16
- package/dist/1.chunk.js +0 -1
- package/dist/2.chunk.js +0 -1
- package/dist/socket.js +0 -1
- package/es/Socket.js +0 -372
- package/es/SocketContainer.js +0 -122
- package/es/SocketContext.js +0 -7
- package/es/adapters/PubNub.js +0 -213
- package/es/adapters/SocketIO.js +0 -226
- package/es/adapters/index.js +0 -6
- package/es/index.js +0 -5
- package/es/useSocket.js +0 -96
- package/es/withSocket.js +0 -27
- package/lib/Socket.js +0 -390
- package/lib/SocketContainer.js +0 -139
- package/lib/SocketContext.js +0 -19
- package/lib/adapters/PubNub.js +0 -233
- package/lib/adapters/SocketIO.js +0 -246
- package/lib/adapters/index.js +0 -18
- package/lib/index.js +0 -53
- package/lib/useSocket.js +0 -109
- package/lib/withSocket.js +0 -39
package/dist/cjs.js
ADDED
|
@@ -0,0 +1,1100 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
6
|
+
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
|
|
7
|
+
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
8
|
+
var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
|
|
9
|
+
var _createClass = require('@babel/runtime/helpers/createClass');
|
|
10
|
+
var _assertThisInitialized = require('@babel/runtime/helpers/assertThisInitialized');
|
|
11
|
+
var _inherits = require('@babel/runtime/helpers/inherits');
|
|
12
|
+
var _possibleConstructorReturn = require('@babel/runtime/helpers/possibleConstructorReturn');
|
|
13
|
+
var _getPrototypeOf = require('@babel/runtime/helpers/getPrototypeOf');
|
|
14
|
+
var createDebug = require('debug');
|
|
15
|
+
var EventEmitter = require('wolfy87-eventemitter');
|
|
16
|
+
var invariant = require('invariant');
|
|
17
|
+
var isFunction = require('lodash/isFunction');
|
|
18
|
+
var isArray = require('lodash/isArray');
|
|
19
|
+
var React = require('react');
|
|
20
|
+
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
21
|
+
var PropTypes = require('prop-types');
|
|
22
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
23
|
+
var isString = require('lodash/isString');
|
|
24
|
+
|
|
25
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
26
|
+
|
|
27
|
+
function _interopNamespace(e) {
|
|
28
|
+
if (e && e.__esModule) return e;
|
|
29
|
+
var n = Object.create(null);
|
|
30
|
+
if (e) {
|
|
31
|
+
Object.keys(e).forEach(function (k) {
|
|
32
|
+
if (k !== 'default') {
|
|
33
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
34
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
get: function () { return e[k]; }
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
n["default"] = e;
|
|
42
|
+
return Object.freeze(n);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
|
|
46
|
+
var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
|
|
47
|
+
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
|
|
48
|
+
var _classCallCheck__default = /*#__PURE__*/_interopDefaultLegacy(_classCallCheck);
|
|
49
|
+
var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);
|
|
50
|
+
var _assertThisInitialized__default = /*#__PURE__*/_interopDefaultLegacy(_assertThisInitialized);
|
|
51
|
+
var _inherits__default = /*#__PURE__*/_interopDefaultLegacy(_inherits);
|
|
52
|
+
var _possibleConstructorReturn__default = /*#__PURE__*/_interopDefaultLegacy(_possibleConstructorReturn);
|
|
53
|
+
var _getPrototypeOf__default = /*#__PURE__*/_interopDefaultLegacy(_getPrototypeOf);
|
|
54
|
+
var createDebug__default = /*#__PURE__*/_interopDefaultLegacy(createDebug);
|
|
55
|
+
var EventEmitter__default = /*#__PURE__*/_interopDefaultLegacy(EventEmitter);
|
|
56
|
+
var invariant__default = /*#__PURE__*/_interopDefaultLegacy(invariant);
|
|
57
|
+
var isFunction__default = /*#__PURE__*/_interopDefaultLegacy(isFunction);
|
|
58
|
+
var isArray__default = /*#__PURE__*/_interopDefaultLegacy(isArray);
|
|
59
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
60
|
+
var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
|
|
61
|
+
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
62
|
+
var isString__default = /*#__PURE__*/_interopDefaultLegacy(isString);
|
|
63
|
+
|
|
64
|
+
function ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
65
|
+
|
|
66
|
+
function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
67
|
+
|
|
68
|
+
function _createSuper$2(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$2(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
|
|
69
|
+
|
|
70
|
+
function _isNativeReflectConstruct$2() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
71
|
+
var debug$2 = createDebug__default["default"]('folklore:socket:pubnub');
|
|
72
|
+
|
|
73
|
+
var PubNubSocket = /*#__PURE__*/function (_EventEmitter) {
|
|
74
|
+
_inherits__default["default"](PubNubSocket, _EventEmitter);
|
|
75
|
+
|
|
76
|
+
var _super = _createSuper$2(PubNubSocket);
|
|
77
|
+
|
|
78
|
+
function PubNubSocket(opts) {
|
|
79
|
+
var _this;
|
|
80
|
+
|
|
81
|
+
_classCallCheck__default["default"](this, PubNubSocket);
|
|
82
|
+
|
|
83
|
+
_this = _super.call(this);
|
|
84
|
+
_this.options = _objectSpread$4({
|
|
85
|
+
uuid: null,
|
|
86
|
+
publishKey: null,
|
|
87
|
+
subscribeKey: null,
|
|
88
|
+
secretKey: null
|
|
89
|
+
}, opts);
|
|
90
|
+
_this.onReady = _this.onReady.bind(_assertThisInitialized__default["default"](_this));
|
|
91
|
+
_this.onStatus = _this.onStatus.bind(_assertThisInitialized__default["default"](_this));
|
|
92
|
+
_this.onMessage = _this.onMessage.bind(_assertThisInitialized__default["default"](_this));
|
|
93
|
+
_this.ready = false;
|
|
94
|
+
_this.shouldStart = false;
|
|
95
|
+
_this.started = false;
|
|
96
|
+
_this.starting = false;
|
|
97
|
+
_this.PubNub = null;
|
|
98
|
+
_this.pubnub = null;
|
|
99
|
+
_this.pubnubListener = null;
|
|
100
|
+
_this.channels = [];
|
|
101
|
+
|
|
102
|
+
_this.init();
|
|
103
|
+
|
|
104
|
+
return _this;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
_createClass__default["default"](PubNubSocket, [{
|
|
108
|
+
key: "onReady",
|
|
109
|
+
value: function onReady() {
|
|
110
|
+
this.ready = true;
|
|
111
|
+
this.emit('ready');
|
|
112
|
+
}
|
|
113
|
+
}, {
|
|
114
|
+
key: "onStatus",
|
|
115
|
+
value: function onStatus(statusEvent) {
|
|
116
|
+
if (statusEvent.category === 'PNConnectedCategory' && !this.started) {
|
|
117
|
+
this.started = true;
|
|
118
|
+
this.starting = false;
|
|
119
|
+
this.emit('started');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}, {
|
|
123
|
+
key: "onMessage",
|
|
124
|
+
value: function onMessage(_ref) {
|
|
125
|
+
var message = _ref.message;
|
|
126
|
+
this.emit('message', message);
|
|
127
|
+
|
|
128
|
+
if (typeof message.event !== 'undefined') {
|
|
129
|
+
this.emit(message.event, message.data || message);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}, {
|
|
133
|
+
key: "updateChannels",
|
|
134
|
+
value: function updateChannels(channels) {
|
|
135
|
+
debug$2("Updating channels: ".concat(channels.join(', ')));
|
|
136
|
+
var shouldStart = this.shouldStart,
|
|
137
|
+
started = this.started,
|
|
138
|
+
starting = this.starting;
|
|
139
|
+
|
|
140
|
+
if (started || starting) {
|
|
141
|
+
this.stop();
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
this.channels = channels;
|
|
145
|
+
|
|
146
|
+
if (started || starting || shouldStart) {
|
|
147
|
+
this.shouldStart = false;
|
|
148
|
+
this.start();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}, {
|
|
152
|
+
key: "init",
|
|
153
|
+
value: function init() {
|
|
154
|
+
var _this2 = this;
|
|
155
|
+
|
|
156
|
+
Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('pubnub')); }).then(function (_ref2) {
|
|
157
|
+
var PubNub = _ref2.default;
|
|
158
|
+
_this2.PubNub = PubNub;
|
|
159
|
+
}).then(function () {
|
|
160
|
+
return _this2.createPubNub();
|
|
161
|
+
}).then(function () {
|
|
162
|
+
return _this2.onReady();
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}, {
|
|
166
|
+
key: "createPubNub",
|
|
167
|
+
value: function createPubNub() {
|
|
168
|
+
var PubNub = this.PubNub;
|
|
169
|
+
var pubnubOptions = {
|
|
170
|
+
publishKey: this.options.publishKey,
|
|
171
|
+
subscribeKey: this.options.subscribeKey
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
if (this.options.uuid !== null) {
|
|
175
|
+
pubnubOptions.uuid = this.options.uuid;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (this.options.secretKey !== null) {
|
|
179
|
+
pubnubOptions.secretKey = this.options.secretKey;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
this.pubnub = new PubNub(pubnubOptions);
|
|
183
|
+
this.pubnubListener = {
|
|
184
|
+
status: this.onStatus,
|
|
185
|
+
message: this.onMessage
|
|
186
|
+
};
|
|
187
|
+
this.pubnub.addListener(this.pubnubListener);
|
|
188
|
+
}
|
|
189
|
+
}, {
|
|
190
|
+
key: "destroy",
|
|
191
|
+
value: function destroy() {
|
|
192
|
+
this.stop();
|
|
193
|
+
|
|
194
|
+
if (this.pubnubListener) {
|
|
195
|
+
this.pubnub.removeListener(this.pubnubListener);
|
|
196
|
+
this.pubnubListener = null;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
this.ready = false;
|
|
200
|
+
debug$2('Destroyed.');
|
|
201
|
+
}
|
|
202
|
+
}, {
|
|
203
|
+
key: "start",
|
|
204
|
+
value: function start() {
|
|
205
|
+
if (this.started) {
|
|
206
|
+
debug$2('Skipping start: Already started.');
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
if (this.starting) {
|
|
211
|
+
debug$2('Skipping start: Already starting.');
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (this.channels.length === 0) {
|
|
216
|
+
debug$2('Skipping start: No channels.');
|
|
217
|
+
this.shouldStart = true;
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
this.shouldStart = false;
|
|
222
|
+
this.starting = true;
|
|
223
|
+
this.pubnub.subscribe({
|
|
224
|
+
channels: this.channels
|
|
225
|
+
});
|
|
226
|
+
this.emit('start');
|
|
227
|
+
}
|
|
228
|
+
}, {
|
|
229
|
+
key: "stop",
|
|
230
|
+
value: function stop() {
|
|
231
|
+
if (!this.started && !this.starting) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
debug$2('Stopping...');
|
|
236
|
+
this.shouldStart = false;
|
|
237
|
+
this.started = false;
|
|
238
|
+
this.starting = false;
|
|
239
|
+
this.pubnub.unsubscribe({
|
|
240
|
+
channels: this.channels
|
|
241
|
+
});
|
|
242
|
+
this.emit('stop');
|
|
243
|
+
}
|
|
244
|
+
}, {
|
|
245
|
+
key: "send",
|
|
246
|
+
value: function send(data) {
|
|
247
|
+
var _this3 = this;
|
|
248
|
+
|
|
249
|
+
debug$2('Sending', data);
|
|
250
|
+
return new Promise(function (resolve, reject) {
|
|
251
|
+
_this3.pubnub.publish(data, function (status, response) {
|
|
252
|
+
if (status.error) {
|
|
253
|
+
reject(new Error("Error operation:".concat(status.operation, " status:").concat(status.statusCode)));
|
|
254
|
+
} else {
|
|
255
|
+
resolve({
|
|
256
|
+
status: status,
|
|
257
|
+
response: response,
|
|
258
|
+
data: data
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}]);
|
|
265
|
+
|
|
266
|
+
return PubNubSocket;
|
|
267
|
+
}(EventEmitter__default["default"]);
|
|
268
|
+
|
|
269
|
+
var _excluded$1 = ["host"];
|
|
270
|
+
|
|
271
|
+
function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
272
|
+
|
|
273
|
+
function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
274
|
+
|
|
275
|
+
function _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
|
|
276
|
+
|
|
277
|
+
function _isNativeReflectConstruct$1() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
278
|
+
var debug$1 = createDebug__default["default"]('folklore:socket:socketio');
|
|
279
|
+
|
|
280
|
+
var SocketIOSocket = /*#__PURE__*/function (_EventEmitter) {
|
|
281
|
+
_inherits__default["default"](SocketIOSocket, _EventEmitter);
|
|
282
|
+
|
|
283
|
+
var _super = _createSuper$1(SocketIOSocket);
|
|
284
|
+
|
|
285
|
+
function SocketIOSocket(opts) {
|
|
286
|
+
var _this;
|
|
287
|
+
|
|
288
|
+
_classCallCheck__default["default"](this, SocketIOSocket);
|
|
289
|
+
|
|
290
|
+
_this = _super.call(this);
|
|
291
|
+
_this.options = _objectSpread$3({
|
|
292
|
+
uuid: null,
|
|
293
|
+
host: 'http://127.0.0.1',
|
|
294
|
+
path: null,
|
|
295
|
+
query: null
|
|
296
|
+
}, opts);
|
|
297
|
+
_this.onReady = _this.onReady.bind(_assertThisInitialized__default["default"](_this));
|
|
298
|
+
_this.onConnect = _this.onConnect.bind(_assertThisInitialized__default["default"](_this));
|
|
299
|
+
_this.onMessage = _this.onMessage.bind(_assertThisInitialized__default["default"](_this));
|
|
300
|
+
_this.ready = false;
|
|
301
|
+
_this.shouldStart = false;
|
|
302
|
+
_this.started = false;
|
|
303
|
+
_this.starting = false;
|
|
304
|
+
_this.Manager = null;
|
|
305
|
+
_this.io = null;
|
|
306
|
+
_this.sockets = {};
|
|
307
|
+
_this.channels = [];
|
|
308
|
+
|
|
309
|
+
_this.init();
|
|
310
|
+
|
|
311
|
+
return _this;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
_createClass__default["default"](SocketIOSocket, [{
|
|
315
|
+
key: "onReady",
|
|
316
|
+
value: function onReady() {
|
|
317
|
+
this.ready = true;
|
|
318
|
+
this.emit('ready');
|
|
319
|
+
}
|
|
320
|
+
}, {
|
|
321
|
+
key: "onConnect",
|
|
322
|
+
value: function onConnect(channel) {
|
|
323
|
+
debug$1('Socket connected on %s', channel);
|
|
324
|
+
|
|
325
|
+
if (!this.started) {
|
|
326
|
+
this.started = true;
|
|
327
|
+
this.starting = false;
|
|
328
|
+
this.emit('started');
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}, {
|
|
332
|
+
key: "onMessage",
|
|
333
|
+
value: function onMessage(message, channel) {
|
|
334
|
+
debug$1('Message received on %s %o', channel, message);
|
|
335
|
+
this.emit('message', message, channel);
|
|
336
|
+
}
|
|
337
|
+
}, {
|
|
338
|
+
key: "init",
|
|
339
|
+
value: function init() {
|
|
340
|
+
var _this2 = this;
|
|
341
|
+
|
|
342
|
+
Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('socket.io-client')); }).then(function (_ref) {
|
|
343
|
+
var IO = _ref.default;
|
|
344
|
+
_this2.Manager = IO.Manager;
|
|
345
|
+
}).then(function () {
|
|
346
|
+
return _this2.createManager();
|
|
347
|
+
}).then(function () {
|
|
348
|
+
return _this2.onReady();
|
|
349
|
+
}).then(function () {
|
|
350
|
+
if (_this2.shouldStart) {
|
|
351
|
+
_this2.start();
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
}, {
|
|
356
|
+
key: "createManager",
|
|
357
|
+
value: function createManager() {
|
|
358
|
+
var Manager = this.Manager;
|
|
359
|
+
|
|
360
|
+
var _this$options = this.options,
|
|
361
|
+
host = _this$options.host,
|
|
362
|
+
opts = _objectWithoutProperties__default["default"](_this$options, _excluded$1);
|
|
363
|
+
|
|
364
|
+
this.io = new Manager(host, _objectSpread$3({
|
|
365
|
+
autoConnect: false
|
|
366
|
+
}, opts));
|
|
367
|
+
}
|
|
368
|
+
}, {
|
|
369
|
+
key: "updateChannels",
|
|
370
|
+
value: function updateChannels(channels) {
|
|
371
|
+
debug$1("Updating channels: ".concat(channels.join(', ')));
|
|
372
|
+
var shouldStart = this.shouldStart,
|
|
373
|
+
started = this.started,
|
|
374
|
+
starting = this.starting;
|
|
375
|
+
|
|
376
|
+
if (started || starting) {
|
|
377
|
+
this.stop();
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
this.channels = channels;
|
|
381
|
+
|
|
382
|
+
if (started || starting || shouldStart) {
|
|
383
|
+
this.start();
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}, {
|
|
387
|
+
key: "start",
|
|
388
|
+
value: function start() {
|
|
389
|
+
var _this3 = this;
|
|
390
|
+
|
|
391
|
+
if (this.started) {
|
|
392
|
+
debug$1('Skipping start: Already started.');
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
if (this.starting) {
|
|
397
|
+
debug$1('Skipping start: Already starting.');
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
if (this.io === null) {
|
|
402
|
+
debug$1('Socket.io not ready.');
|
|
403
|
+
this.shouldStart = true;
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
if (this.channels.length === 0) {
|
|
408
|
+
debug$1('Skipping start: No channels.');
|
|
409
|
+
this.shouldStart = true;
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
this.shouldStart = false;
|
|
414
|
+
this.starting = true;
|
|
415
|
+
this.sockets = this.channels.reduce(function (map, channel) {
|
|
416
|
+
return _objectSpread$3(_objectSpread$3({}, map), {}, _defineProperty__default["default"]({}, channel, _this3.createSocket(channel)));
|
|
417
|
+
}, {});
|
|
418
|
+
this.emit('start');
|
|
419
|
+
}
|
|
420
|
+
}, {
|
|
421
|
+
key: "stop",
|
|
422
|
+
value: function stop() {
|
|
423
|
+
var _this4 = this;
|
|
424
|
+
|
|
425
|
+
if (!this.started && !this.starting) {
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
debug$1('Stopping...');
|
|
430
|
+
this.shouldStart = false;
|
|
431
|
+
this.started = false;
|
|
432
|
+
this.starting = false;
|
|
433
|
+
Object.values(this.sockets).forEach(function (socket) {
|
|
434
|
+
return _this4.stopSocket(socket);
|
|
435
|
+
});
|
|
436
|
+
this.emit('stop');
|
|
437
|
+
}
|
|
438
|
+
}, {
|
|
439
|
+
key: "createSocket",
|
|
440
|
+
value: function createSocket(channel) {
|
|
441
|
+
var _this5 = this;
|
|
442
|
+
|
|
443
|
+
var socket = this.io.socket("/".concat(channel.replace(/^\//, '')));
|
|
444
|
+
socket.on('message', function (message) {
|
|
445
|
+
return _this5.onMessage(message, channel);
|
|
446
|
+
});
|
|
447
|
+
socket.on('connect', function () {
|
|
448
|
+
return _this5.onConnect(channel);
|
|
449
|
+
});
|
|
450
|
+
socket.open();
|
|
451
|
+
return socket;
|
|
452
|
+
} // eslint-disable-next-line class-methods-use-this
|
|
453
|
+
|
|
454
|
+
}, {
|
|
455
|
+
key: "stopSocket",
|
|
456
|
+
value: function stopSocket(socket) {
|
|
457
|
+
socket.off('connect');
|
|
458
|
+
socket.off('message');
|
|
459
|
+
socket.close();
|
|
460
|
+
return socket;
|
|
461
|
+
}
|
|
462
|
+
}, {
|
|
463
|
+
key: "destroy",
|
|
464
|
+
value: function destroy() {
|
|
465
|
+
this.stop();
|
|
466
|
+
this.sockets = {};
|
|
467
|
+
|
|
468
|
+
if (this.io !== null) {
|
|
469
|
+
this.io.close();
|
|
470
|
+
this.io = null;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
}, {
|
|
474
|
+
key: "send",
|
|
475
|
+
value: function send(data) {
|
|
476
|
+
var _this6 = this;
|
|
477
|
+
|
|
478
|
+
var channel = data.channel,
|
|
479
|
+
message = data.message;
|
|
480
|
+
var channels = !isArray__default["default"](channel) ? [channel] : channel;
|
|
481
|
+
channels.forEach(function (ch) {
|
|
482
|
+
_this6.sockets[ch].send(message);
|
|
483
|
+
});
|
|
484
|
+
return Promise.resolve();
|
|
485
|
+
}
|
|
486
|
+
}]);
|
|
487
|
+
|
|
488
|
+
return SocketIOSocket;
|
|
489
|
+
}(EventEmitter__default["default"]);
|
|
490
|
+
|
|
491
|
+
var SocketAdapters = {
|
|
492
|
+
PubNub: PubNubSocket,
|
|
493
|
+
SocketIO: SocketIOSocket
|
|
494
|
+
};
|
|
495
|
+
|
|
496
|
+
var _excluded = ["adapter", "channels"];
|
|
497
|
+
|
|
498
|
+
function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
499
|
+
|
|
500
|
+
function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
501
|
+
|
|
502
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
|
|
503
|
+
|
|
504
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
505
|
+
|
|
506
|
+
var normalize = function normalize(str) {
|
|
507
|
+
return str.replace(/[^a-z0-9]+/gi, '').toLowerCase();
|
|
508
|
+
};
|
|
509
|
+
|
|
510
|
+
var debug = createDebug__default["default"]('folklore:socket');
|
|
511
|
+
|
|
512
|
+
var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
513
|
+
_inherits__default["default"](Socket, _EventEmitter);
|
|
514
|
+
|
|
515
|
+
var _super = _createSuper(Socket);
|
|
516
|
+
|
|
517
|
+
function Socket(opts) {
|
|
518
|
+
var _this;
|
|
519
|
+
|
|
520
|
+
_classCallCheck__default["default"](this, Socket);
|
|
521
|
+
|
|
522
|
+
_this = _super.call(this);
|
|
523
|
+
_this.options = _objectSpread$2({
|
|
524
|
+
adapter: 'pubnub',
|
|
525
|
+
namespace: null,
|
|
526
|
+
uuid: null,
|
|
527
|
+
publishKey: null,
|
|
528
|
+
subscribeKey: null,
|
|
529
|
+
secretKey: null,
|
|
530
|
+
channels: []
|
|
531
|
+
}, opts);
|
|
532
|
+
_this.onAdapterReady = _this.onAdapterReady.bind(_assertThisInitialized__default["default"](_this));
|
|
533
|
+
_this.onAdapterStart = _this.onAdapterStart.bind(_assertThisInitialized__default["default"](_this));
|
|
534
|
+
_this.onAdapterStarted = _this.onAdapterStarted.bind(_assertThisInitialized__default["default"](_this));
|
|
535
|
+
_this.onAdapterMessage = _this.onAdapterMessage.bind(_assertThisInitialized__default["default"](_this));
|
|
536
|
+
_this.onAdapterStop = _this.onAdapterStop.bind(_assertThisInitialized__default["default"](_this));
|
|
537
|
+
_this.shouldStart = false;
|
|
538
|
+
_this.started = false;
|
|
539
|
+
_this.starting = false;
|
|
540
|
+
_this.ready = false;
|
|
541
|
+
_this.adapter = null;
|
|
542
|
+
_this.channels = [];
|
|
543
|
+
|
|
544
|
+
_this.init();
|
|
545
|
+
|
|
546
|
+
if (_this.options.channels.length) {
|
|
547
|
+
_this.setChannels(_this.options.channels);
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
return _this;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
_createClass__default["default"](Socket, [{
|
|
554
|
+
key: "onAdapterReady",
|
|
555
|
+
value: function onAdapterReady() {
|
|
556
|
+
debug('Adapter ready');
|
|
557
|
+
this.ready = true;
|
|
558
|
+
this.emit('ready');
|
|
559
|
+
|
|
560
|
+
if (this.shouldStart) {
|
|
561
|
+
this.shouldStart = false;
|
|
562
|
+
this.start();
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
}, {
|
|
566
|
+
key: "onAdapterStart",
|
|
567
|
+
value: function onAdapterStart() {
|
|
568
|
+
debug('Adapter starting...');
|
|
569
|
+
this.starting = true;
|
|
570
|
+
this.started = false;
|
|
571
|
+
this.emit('start');
|
|
572
|
+
}
|
|
573
|
+
}, {
|
|
574
|
+
key: "onAdapterStarted",
|
|
575
|
+
value: function onAdapterStarted() {
|
|
576
|
+
debug('Adapter started');
|
|
577
|
+
this.starting = false;
|
|
578
|
+
this.started = true;
|
|
579
|
+
this.emit('started');
|
|
580
|
+
}
|
|
581
|
+
}, {
|
|
582
|
+
key: "onAdapterStop",
|
|
583
|
+
value: function onAdapterStop() {
|
|
584
|
+
debug('Adapter stopped');
|
|
585
|
+
this.starting = false;
|
|
586
|
+
this.started = false;
|
|
587
|
+
this.emit('stop');
|
|
588
|
+
}
|
|
589
|
+
}, {
|
|
590
|
+
key: "onAdapterMessage",
|
|
591
|
+
value: function onAdapterMessage(message) {
|
|
592
|
+
debug('Adapter message', message);
|
|
593
|
+
this.emit('message', message);
|
|
594
|
+
}
|
|
595
|
+
}, {
|
|
596
|
+
key: "getChannelWithoutNamespace",
|
|
597
|
+
value: function getChannelWithoutNamespace(name) {
|
|
598
|
+
if (this.options.namespace === null) {
|
|
599
|
+
return name;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
var regExp = new RegExp("^".concat(this.options.namespace, ":"));
|
|
603
|
+
return name.replace(regExp, '');
|
|
604
|
+
}
|
|
605
|
+
}, {
|
|
606
|
+
key: "getChannelWithNamespace",
|
|
607
|
+
value: function getChannelWithNamespace(name) {
|
|
608
|
+
var parts = [];
|
|
609
|
+
|
|
610
|
+
if (this.options.namespace !== null) {
|
|
611
|
+
parts.push(this.options.namespace);
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
parts.push(name);
|
|
615
|
+
return parts.join(':');
|
|
616
|
+
}
|
|
617
|
+
}, {
|
|
618
|
+
key: "setChannels",
|
|
619
|
+
value: function setChannels(channels) {
|
|
620
|
+
var _this2 = this;
|
|
621
|
+
|
|
622
|
+
var namespacedChannels = channels.map(function (channel) {
|
|
623
|
+
return _this2.getChannelWithNamespace(channel);
|
|
624
|
+
}).sort();
|
|
625
|
+
|
|
626
|
+
if (this.channels.join(',') === namespacedChannels.join(',')) {
|
|
627
|
+
return;
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
debug("Set channels: ".concat(namespacedChannels.join(', ')));
|
|
631
|
+
this.updateChannels(namespacedChannels);
|
|
632
|
+
}
|
|
633
|
+
}, {
|
|
634
|
+
key: "addChannel",
|
|
635
|
+
value: function addChannel(channel) {
|
|
636
|
+
var namespacedChannel = this.getChannelWithNamespace(channel);
|
|
637
|
+
|
|
638
|
+
if (this.channels.indexOf(namespacedChannel) !== -1) {
|
|
639
|
+
return;
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
debug("Adding channel: ".concat(channel));
|
|
643
|
+
this.updateChannels([].concat(_toConsumableArray__default["default"](this.channels), [namespacedChannel]));
|
|
644
|
+
}
|
|
645
|
+
}, {
|
|
646
|
+
key: "addChannels",
|
|
647
|
+
value: function addChannels(channels) {
|
|
648
|
+
var _this3 = this;
|
|
649
|
+
|
|
650
|
+
var namespacedChannels = channels.map(function (channel) {
|
|
651
|
+
return _this3.getChannelWithNamespace(channel);
|
|
652
|
+
}).sort();
|
|
653
|
+
debug("Adding channels: ".concat(channels.join(',')));
|
|
654
|
+
this.updateChannels([].concat(_toConsumableArray__default["default"](this.channels), _toConsumableArray__default["default"](namespacedChannels.filter(function (it) {
|
|
655
|
+
return _this3.channels.indexOf(it) === -1;
|
|
656
|
+
}))));
|
|
657
|
+
}
|
|
658
|
+
}, {
|
|
659
|
+
key: "removeChannel",
|
|
660
|
+
value: function removeChannel(channel) {
|
|
661
|
+
var namespacedChannel = this.getChannelWithNamespace(channel);
|
|
662
|
+
|
|
663
|
+
if (this.channels.indexOf(namespacedChannel) === -1) {
|
|
664
|
+
return;
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
debug("Removing channel: ".concat(channel));
|
|
668
|
+
this.updateChannels(this.channels.filter(function (ch) {
|
|
669
|
+
return ch !== namespacedChannel;
|
|
670
|
+
}));
|
|
671
|
+
}
|
|
672
|
+
}, {
|
|
673
|
+
key: "removeChannels",
|
|
674
|
+
value: function removeChannels(channels) {
|
|
675
|
+
var _this4 = this;
|
|
676
|
+
|
|
677
|
+
var namespacedChannels = channels.map(function (channel) {
|
|
678
|
+
return _this4.getChannelWithNamespace(channel);
|
|
679
|
+
}).sort();
|
|
680
|
+
debug("Removing channels: ".concat(channels.join(',')));
|
|
681
|
+
this.updateChannels(this.channels.filter(function (it) {
|
|
682
|
+
return namespacedChannels.indexOf(it) === -1;
|
|
683
|
+
}));
|
|
684
|
+
}
|
|
685
|
+
}, {
|
|
686
|
+
key: "updateChannels",
|
|
687
|
+
value: function updateChannels(channels) {
|
|
688
|
+
var sortedChannels = channels.sort();
|
|
689
|
+
debug("Updating channels: ".concat(sortedChannels.join(', ')));
|
|
690
|
+
this.channels = _toConsumableArray__default["default"](sortedChannels);
|
|
691
|
+
|
|
692
|
+
if (this.adapter !== null) {
|
|
693
|
+
this.adapter.updateChannels(sortedChannels);
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
}, {
|
|
697
|
+
key: "hasChannel",
|
|
698
|
+
value: function hasChannel(channel) {
|
|
699
|
+
var namespacedChannel = this.getChannelWithNamespace(channel);
|
|
700
|
+
return this.channels.reduce(function (found, it) {
|
|
701
|
+
return found || it === namespacedChannel;
|
|
702
|
+
}, false);
|
|
703
|
+
}
|
|
704
|
+
}, {
|
|
705
|
+
key: "getChannels",
|
|
706
|
+
value: function getChannels() {
|
|
707
|
+
var _this5 = this;
|
|
708
|
+
|
|
709
|
+
return this.channels.map(function (channel) {
|
|
710
|
+
return _this5.getChannelWithoutNamespace(channel);
|
|
711
|
+
});
|
|
712
|
+
}
|
|
713
|
+
}, {
|
|
714
|
+
key: "init",
|
|
715
|
+
value: function init() {
|
|
716
|
+
var _this6 = this;
|
|
717
|
+
|
|
718
|
+
var _this$options = this.options,
|
|
719
|
+
adapterKey = _this$options.adapter;
|
|
720
|
+
_this$options.channels;
|
|
721
|
+
var adapterOptions = _objectWithoutProperties__default["default"](_this$options, _excluded);
|
|
722
|
+
|
|
723
|
+
var SocketAdapter = Socket.getAdapter(adapterKey);
|
|
724
|
+
this.adapter = new SocketAdapter(adapterOptions);
|
|
725
|
+
var methods = ['start', 'stop', 'destroy', 'updateChannels', 'send'];
|
|
726
|
+
methods.forEach(function (method) {
|
|
727
|
+
invariant__default["default"](isFunction__default["default"](_this6.adapter[method] || null), "Socket adapter should implement method ".concat(method));
|
|
728
|
+
});
|
|
729
|
+
this.adapter.on('ready', this.onAdapterReady);
|
|
730
|
+
this.adapter.on('start', this.onAdapterStart);
|
|
731
|
+
this.adapter.on('started', this.onAdapterStarted);
|
|
732
|
+
this.adapter.on('message', this.onAdapterMessage);
|
|
733
|
+
this.adapter.on('stop', this.onAdapterStop);
|
|
734
|
+
}
|
|
735
|
+
}, {
|
|
736
|
+
key: "destroy",
|
|
737
|
+
value: function destroy() {
|
|
738
|
+
if (this.adapter !== null) {
|
|
739
|
+
this.adapter.removeAllListeners();
|
|
740
|
+
this.adapter.destroy();
|
|
741
|
+
this.adapter = null;
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
this.started = false;
|
|
745
|
+
this.starting = false;
|
|
746
|
+
this.ready = false;
|
|
747
|
+
debug('Destroyed.');
|
|
748
|
+
}
|
|
749
|
+
}, {
|
|
750
|
+
key: "restart",
|
|
751
|
+
value: function restart() {
|
|
752
|
+
this.stop();
|
|
753
|
+
this.start();
|
|
754
|
+
}
|
|
755
|
+
}, {
|
|
756
|
+
key: "start",
|
|
757
|
+
value: function start() {
|
|
758
|
+
var _this7 = this;
|
|
759
|
+
|
|
760
|
+
if (this.started) {
|
|
761
|
+
debug('Skipping start: Already started.');
|
|
762
|
+
return;
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
if (this.starting) {
|
|
766
|
+
debug('Skipping start: Already starting.');
|
|
767
|
+
return;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
if (!this.ready) {
|
|
771
|
+
debug('Skipping start: No ready.');
|
|
772
|
+
this.shouldStart = true;
|
|
773
|
+
return;
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
this.shouldStart = false;
|
|
777
|
+
debug('Starting on channels:');
|
|
778
|
+
this.channels.forEach(function (channel) {
|
|
779
|
+
debug("- ".concat(_this7.getChannelWithoutNamespace(channel)));
|
|
780
|
+
});
|
|
781
|
+
this.adapter.start();
|
|
782
|
+
}
|
|
783
|
+
}, {
|
|
784
|
+
key: "stop",
|
|
785
|
+
value: function stop() {
|
|
786
|
+
this.shouldStart = false;
|
|
787
|
+
|
|
788
|
+
if (!this.started && !this.starting) {
|
|
789
|
+
return;
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
debug('Stopping...');
|
|
793
|
+
|
|
794
|
+
if (this.adapter !== null) {
|
|
795
|
+
this.adapter.stop();
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
}, {
|
|
799
|
+
key: "send",
|
|
800
|
+
value: function send(data, channel) {
|
|
801
|
+
if (!this.started) {
|
|
802
|
+
debug('Abort sending data: Not started');
|
|
803
|
+
return Promise.reject();
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
var publishData = typeof data.channel !== 'undefined' && typeof data.message !== 'undefined' ? data : {
|
|
807
|
+
channel: typeof channel !== 'undefined' ? this.getChannelWithNamespace(channel) : this.channels,
|
|
808
|
+
message: data
|
|
809
|
+
};
|
|
810
|
+
debug('Sending', publishData);
|
|
811
|
+
return this.adapter.send(publishData);
|
|
812
|
+
}
|
|
813
|
+
}, {
|
|
814
|
+
key: "isStarted",
|
|
815
|
+
value: function isStarted() {
|
|
816
|
+
return this.started;
|
|
817
|
+
}
|
|
818
|
+
}], [{
|
|
819
|
+
key: "getAdapters",
|
|
820
|
+
value: function getAdapters() {
|
|
821
|
+
return Socket.adapters;
|
|
822
|
+
}
|
|
823
|
+
}, {
|
|
824
|
+
key: "getAdapter",
|
|
825
|
+
value: function getAdapter(adapter) {
|
|
826
|
+
// prettier-ignore
|
|
827
|
+
var adapterKey = Object.keys(Socket.adapters).find(function (key) {
|
|
828
|
+
return normalize(key) === normalize(adapter);
|
|
829
|
+
}) || null;
|
|
830
|
+
|
|
831
|
+
if (adapterKey === null) {
|
|
832
|
+
throw new Error("Adapter ".concat(adapter, " not found"));
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
return Socket.adapters[adapterKey];
|
|
836
|
+
}
|
|
837
|
+
}, {
|
|
838
|
+
key: "addAdapter",
|
|
839
|
+
value: function addAdapter(name, adapter) {
|
|
840
|
+
Socket.adapters = _objectSpread$2(_objectSpread$2({}, Socket.adapters), {}, _defineProperty__default["default"]({}, name, adapter));
|
|
841
|
+
return Socket;
|
|
842
|
+
}
|
|
843
|
+
}, {
|
|
844
|
+
key: "setAdapters",
|
|
845
|
+
value: function setAdapters(adapters) {
|
|
846
|
+
Socket.adapters = adapters;
|
|
847
|
+
return Socket;
|
|
848
|
+
}
|
|
849
|
+
}]);
|
|
850
|
+
|
|
851
|
+
return Socket;
|
|
852
|
+
}(EventEmitter__default["default"]);
|
|
853
|
+
|
|
854
|
+
Socket.adapters = _objectSpread$2({}, SocketAdapters);
|
|
855
|
+
|
|
856
|
+
var SocketContext = /*#__PURE__*/React__default["default"].createContext({
|
|
857
|
+
socket: null,
|
|
858
|
+
subscribe: function subscribe() {},
|
|
859
|
+
unsubscribe: function unsubscribe() {}
|
|
860
|
+
});
|
|
861
|
+
|
|
862
|
+
function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
863
|
+
|
|
864
|
+
function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
865
|
+
var propTypes = {
|
|
866
|
+
socket: PropTypes__default["default"].instanceOf(Socket),
|
|
867
|
+
adapter: PropTypes__default["default"].string,
|
|
868
|
+
host: PropTypes__default["default"].string,
|
|
869
|
+
namespace: PropTypes__default["default"].string,
|
|
870
|
+
uuid: PropTypes__default["default"].string,
|
|
871
|
+
publishKey: PropTypes__default["default"].string,
|
|
872
|
+
subscribeKey: PropTypes__default["default"].string,
|
|
873
|
+
secretKey: PropTypes__default["default"].string,
|
|
874
|
+
channels: PropTypes__default["default"].arrayOf(PropTypes__default["default"].string),
|
|
875
|
+
autoStart: PropTypes__default["default"].bool,
|
|
876
|
+
children: PropTypes__default["default"].node
|
|
877
|
+
};
|
|
878
|
+
var defaultProps = {
|
|
879
|
+
socket: null,
|
|
880
|
+
adapter: 'pubnub',
|
|
881
|
+
host: null,
|
|
882
|
+
namespace: null,
|
|
883
|
+
uuid: null,
|
|
884
|
+
publishKey: null,
|
|
885
|
+
subscribeKey: null,
|
|
886
|
+
secretKey: null,
|
|
887
|
+
channels: [],
|
|
888
|
+
autoStart: false,
|
|
889
|
+
children: null
|
|
890
|
+
};
|
|
891
|
+
|
|
892
|
+
var SocketContainer = function SocketContainer(_ref) {
|
|
893
|
+
var children = _ref.children,
|
|
894
|
+
socket = _ref.socket,
|
|
895
|
+
autoStart = _ref.autoStart,
|
|
896
|
+
adapter = _ref.adapter,
|
|
897
|
+
host = _ref.host,
|
|
898
|
+
namespace = _ref.namespace,
|
|
899
|
+
uuid = _ref.uuid,
|
|
900
|
+
publishKey = _ref.publishKey,
|
|
901
|
+
subscribeKey = _ref.subscribeKey,
|
|
902
|
+
secretKey = _ref.secretKey,
|
|
903
|
+
initialChannels = _ref.channels;
|
|
904
|
+
var finalSocket = React.useMemo(function () {
|
|
905
|
+
return socket || new Socket({
|
|
906
|
+
adapter: adapter,
|
|
907
|
+
host: host,
|
|
908
|
+
namespace: namespace,
|
|
909
|
+
uuid: uuid,
|
|
910
|
+
publishKey: publishKey,
|
|
911
|
+
subscribeKey: subscribeKey,
|
|
912
|
+
secretKey: secretKey
|
|
913
|
+
});
|
|
914
|
+
}, [socket, host, adapter, namespace, uuid, publishKey, subscribeKey, secretKey]);
|
|
915
|
+
|
|
916
|
+
var _useState = React.useState([]),
|
|
917
|
+
_useState2 = _slicedToArray__default["default"](_useState, 2),
|
|
918
|
+
channels = _useState2[0],
|
|
919
|
+
setChannels = _useState2[1];
|
|
920
|
+
|
|
921
|
+
var channelsCountRef = React.useRef({});
|
|
922
|
+
var updateChannels = React.useCallback(function (newChannels) {
|
|
923
|
+
finalSocket.setChannels(newChannels);
|
|
924
|
+
setChannels(newChannels);
|
|
925
|
+
}, [finalSocket, setChannels]);
|
|
926
|
+
var addToChannelsCount = React.useCallback(function (newChannels) {
|
|
927
|
+
channelsCountRef.current = newChannels.reduce(function (map, channel) {
|
|
928
|
+
return _objectSpread$1(_objectSpread$1({}, map), {}, _defineProperty__default["default"]({}, channel, (map[channel] || 0) + 1));
|
|
929
|
+
}, channelsCountRef.current);
|
|
930
|
+
updateChannels(Object.keys(channelsCountRef.current));
|
|
931
|
+
}, [updateChannels]);
|
|
932
|
+
var removeToChannelsCount = React.useCallback(function (newChannels) {
|
|
933
|
+
channelsCountRef.current = newChannels.reduce(function (map, channel) {
|
|
934
|
+
var newCount = (map[channel] || 0) - 1;
|
|
935
|
+
return newCount > 0 ? _objectSpread$1(_objectSpread$1({}, map), {}, _defineProperty__default["default"]({}, channel, newCount)) : map;
|
|
936
|
+
}, channelsCountRef.current);
|
|
937
|
+
updateChannels(Object.keys(channelsCountRef.current));
|
|
938
|
+
}, [updateChannels]);
|
|
939
|
+
var subscribe = React.useCallback(function (channelsToAdd) {
|
|
940
|
+
return addToChannelsCount(channelsToAdd);
|
|
941
|
+
}, [addToChannelsCount]);
|
|
942
|
+
var unsubscribe = React.useCallback(function (channelsToRemove) {
|
|
943
|
+
return removeToChannelsCount(channelsToRemove);
|
|
944
|
+
}, [removeToChannelsCount]);
|
|
945
|
+
React.useEffect(function () {
|
|
946
|
+
subscribe(initialChannels);
|
|
947
|
+
return function () {
|
|
948
|
+
unsubscribe(initialChannels);
|
|
949
|
+
};
|
|
950
|
+
}, [initialChannels, subscribe, unsubscribe]);
|
|
951
|
+
React.useEffect(function () {
|
|
952
|
+
if (autoStart) {
|
|
953
|
+
finalSocket.start();
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
return function () {
|
|
957
|
+
finalSocket.destroy();
|
|
958
|
+
};
|
|
959
|
+
}, [autoStart, finalSocket]);
|
|
960
|
+
var value = React.useMemo(function () {
|
|
961
|
+
return {
|
|
962
|
+
socket: finalSocket,
|
|
963
|
+
subscribe: subscribe,
|
|
964
|
+
unsubscribe: unsubscribe,
|
|
965
|
+
channels: channels
|
|
966
|
+
};
|
|
967
|
+
}, [finalSocket, subscribe]);
|
|
968
|
+
return /*#__PURE__*/jsxRuntime.jsx(SocketContext.Provider, {
|
|
969
|
+
value: value,
|
|
970
|
+
children: children
|
|
971
|
+
});
|
|
972
|
+
};
|
|
973
|
+
|
|
974
|
+
SocketContainer.propTypes = propTypes;
|
|
975
|
+
SocketContainer.defaultProps = defaultProps;
|
|
976
|
+
|
|
977
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
978
|
+
|
|
979
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
980
|
+
|
|
981
|
+
var getDisplayName = function getDisplayName(WrappedComponent) {
|
|
982
|
+
return WrappedComponent.displayName || WrappedComponent.name || 'Component';
|
|
983
|
+
};
|
|
984
|
+
|
|
985
|
+
var withSocket = function withSocket(WrappedComponent) {
|
|
986
|
+
var WithSocketComponent = function WithSocketComponent(props) {
|
|
987
|
+
return /*#__PURE__*/jsxRuntime.jsx(SocketContext.Consumer, {
|
|
988
|
+
children: function children(_ref) {
|
|
989
|
+
var socket = _ref.socket,
|
|
990
|
+
subscribe = _ref.subscribe,
|
|
991
|
+
unsubscribe = _ref.unsubscribe;
|
|
992
|
+
return /*#__PURE__*/jsxRuntime.jsx(WrappedComponent, _objectSpread({
|
|
993
|
+
socket: socket,
|
|
994
|
+
socketSubscribe: subscribe,
|
|
995
|
+
socketUnsubscribe: unsubscribe
|
|
996
|
+
}, props));
|
|
997
|
+
}
|
|
998
|
+
});
|
|
999
|
+
};
|
|
1000
|
+
|
|
1001
|
+
WithSocketComponent.displayName = "WithSocket(".concat(getDisplayName(WrappedComponent), ")");
|
|
1002
|
+
return WithSocketComponent;
|
|
1003
|
+
};
|
|
1004
|
+
|
|
1005
|
+
var useSocket = function useSocket() {
|
|
1006
|
+
var channelNames = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
1007
|
+
|
|
1008
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
1009
|
+
_ref$socket = _ref.socket,
|
|
1010
|
+
customSocket = _ref$socket === void 0 ? null : _ref$socket,
|
|
1011
|
+
_ref$onMessage = _ref.onMessage,
|
|
1012
|
+
customOnMessage = _ref$onMessage === void 0 ? null : _ref$onMessage;
|
|
1013
|
+
|
|
1014
|
+
var _useContext = React.useContext(SocketContext),
|
|
1015
|
+
contextSocket = _useContext.socket,
|
|
1016
|
+
subscribe = _useContext.subscribe,
|
|
1017
|
+
unsubscribe = _useContext.unsubscribe;
|
|
1018
|
+
|
|
1019
|
+
var socket = customSocket || contextSocket || null;
|
|
1020
|
+
|
|
1021
|
+
var _useState = React.useState(socket !== null ? socket.isStarted() : false),
|
|
1022
|
+
_useState2 = _slicedToArray__default["default"](_useState, 2),
|
|
1023
|
+
started = _useState2[0],
|
|
1024
|
+
setStarted = _useState2[1];
|
|
1025
|
+
|
|
1026
|
+
var channels = isString__default["default"](channelNames) ? [channelNames] : channelNames;
|
|
1027
|
+
var channelsKey = (channels || []).sort().join(',');
|
|
1028
|
+
React.useEffect(function () {
|
|
1029
|
+
if (socket === null) {
|
|
1030
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
1031
|
+
console.warn('Socket context is empty.');
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1034
|
+
return function () {};
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
var wasStarted = socket.isStarted();
|
|
1038
|
+
|
|
1039
|
+
var onStarted = function onStarted() {
|
|
1040
|
+
return setStarted(true);
|
|
1041
|
+
};
|
|
1042
|
+
|
|
1043
|
+
var onStop = function onStop() {
|
|
1044
|
+
return setStarted(false);
|
|
1045
|
+
};
|
|
1046
|
+
|
|
1047
|
+
socket.on('stop', onStop);
|
|
1048
|
+
socket.on('started', onStarted);
|
|
1049
|
+
|
|
1050
|
+
if (channels !== null) {
|
|
1051
|
+
subscribe(channels);
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
if (!wasStarted) {
|
|
1055
|
+
socket.start();
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
return function () {
|
|
1059
|
+
socket.off('stop', onStop);
|
|
1060
|
+
socket.off('started', onStarted);
|
|
1061
|
+
|
|
1062
|
+
if (channels !== null) {
|
|
1063
|
+
unsubscribe(channels);
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
if (!wasStarted) {
|
|
1067
|
+
socket.stop();
|
|
1068
|
+
}
|
|
1069
|
+
};
|
|
1070
|
+
}, [channelsKey, customSocket]);
|
|
1071
|
+
React.useEffect(function () {
|
|
1072
|
+
if (socket === null) {
|
|
1073
|
+
return function () {};
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1076
|
+
var onMessage = function onMessage() {
|
|
1077
|
+
if (customOnMessage !== null) {
|
|
1078
|
+
customOnMessage.apply(void 0, arguments);
|
|
1079
|
+
}
|
|
1080
|
+
};
|
|
1081
|
+
|
|
1082
|
+
socket.on('message', onMessage);
|
|
1083
|
+
return function () {
|
|
1084
|
+
socket.off('message', onMessage);
|
|
1085
|
+
};
|
|
1086
|
+
}, [customOnMessage]);
|
|
1087
|
+
return {
|
|
1088
|
+
socket: socket,
|
|
1089
|
+
started: started,
|
|
1090
|
+
subscribe: subscribe,
|
|
1091
|
+
unsubscribe: unsubscribe
|
|
1092
|
+
};
|
|
1093
|
+
};
|
|
1094
|
+
|
|
1095
|
+
exports.Socket = Socket;
|
|
1096
|
+
exports.SocketContainer = SocketContainer;
|
|
1097
|
+
exports.SocketContext = SocketContext;
|
|
1098
|
+
exports["default"] = Socket;
|
|
1099
|
+
exports.useSocket = useSocket;
|
|
1100
|
+
exports.withSocket = withSocket;
|