@cubejs-client/ws-transport 0.30.60 → 0.30.64
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/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [0.30.64](https://github.com/cube-js/cube.js/compare/v0.30.63...v0.30.64) (2022-09-07)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @cubejs-client/ws-transport
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
6
14
|
## [0.30.60](https://github.com/cube-js/cube.js/compare/v0.30.59...v0.30.60) (2022-08-28)
|
|
7
15
|
|
|
8
16
|
**Note:** Version bump only for package @cubejs-client/ws-transport
|
|
@@ -1,22 +1,5 @@
|
|
|
1
|
-
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
2
|
-
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
3
|
-
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
4
|
-
import _createClass from '@babel/runtime/helpers/createClass';
|
|
5
|
-
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
6
|
-
import 'core-js/modules/es.array.for-each.js';
|
|
7
|
-
import 'core-js/modules/es.object.to-string.js';
|
|
8
|
-
import 'core-js/modules/web.dom-collections.for-each.js';
|
|
9
|
-
import 'core-js/modules/es.date.to-string.js';
|
|
10
|
-
import 'core-js/modules/es.object.keys.js';
|
|
11
|
-
import 'core-js/modules/es.promise.js';
|
|
12
|
-
import 'core-js/modules/web.timers.js';
|
|
13
|
-
import 'core-js/modules/es.array.find.js';
|
|
14
|
-
import 'core-js/modules/es.array.filter.js';
|
|
15
|
-
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
16
1
|
import WebSocket from 'isomorphic-ws';
|
|
17
2
|
|
|
18
|
-
var _excluded = ["baseRequestId"];
|
|
19
|
-
|
|
20
3
|
/**
|
|
21
4
|
* @title @cubejs-client/ws-transport
|
|
22
5
|
* @permalink /@cubejs-client-ws-transport
|
|
@@ -25,103 +8,43 @@ var _excluded = ["baseRequestId"];
|
|
|
25
8
|
* @menuOrder 4
|
|
26
9
|
* @description WebSocket transport for Cube.js client
|
|
27
10
|
*/
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
_classCallCheck(this, WebSocketTransportResult);
|
|
34
|
-
|
|
35
|
-
_defineProperty(this, "status", void 0);
|
|
36
|
-
|
|
37
|
-
_defineProperty(this, "result", void 0);
|
|
38
|
-
|
|
11
|
+
class WebSocketTransportResult {
|
|
12
|
+
constructor({
|
|
13
|
+
status,
|
|
14
|
+
message
|
|
15
|
+
}) {
|
|
39
16
|
this.status = status;
|
|
40
17
|
this.result = message;
|
|
41
18
|
}
|
|
42
19
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
var _json = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
47
|
-
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
48
|
-
while (1) {
|
|
49
|
-
switch (_context.prev = _context.next) {
|
|
50
|
-
case 0:
|
|
51
|
-
return _context.abrupt("return", this.result);
|
|
52
|
-
|
|
53
|
-
case 1:
|
|
54
|
-
case "end":
|
|
55
|
-
return _context.stop();
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}, _callee, this);
|
|
59
|
-
}));
|
|
60
|
-
|
|
61
|
-
function json() {
|
|
62
|
-
return _json.apply(this, arguments);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return json;
|
|
66
|
-
}()
|
|
67
|
-
}, {
|
|
68
|
-
key: "clone",
|
|
69
|
-
value: function clone() {
|
|
70
|
-
// no need to actually clone it
|
|
71
|
-
return this;
|
|
72
|
-
}
|
|
73
|
-
}, {
|
|
74
|
-
key: "text",
|
|
75
|
-
value: function () {
|
|
76
|
-
var _text = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
77
|
-
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
78
|
-
while (1) {
|
|
79
|
-
switch (_context2.prev = _context2.next) {
|
|
80
|
-
case 0:
|
|
81
|
-
return _context2.abrupt("return", typeof this.result === 'string' ? this.result : JSON.stringify(this.result));
|
|
82
|
-
|
|
83
|
-
case 1:
|
|
84
|
-
case "end":
|
|
85
|
-
return _context2.stop();
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}, _callee2, this);
|
|
89
|
-
}));
|
|
90
|
-
|
|
91
|
-
function text() {
|
|
92
|
-
return _text.apply(this, arguments);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return text;
|
|
96
|
-
}()
|
|
97
|
-
}]);
|
|
98
|
-
|
|
99
|
-
return WebSocketTransportResult;
|
|
100
|
-
}();
|
|
101
|
-
|
|
102
|
-
var WebSocketTransport = /*#__PURE__*/function () {
|
|
103
|
-
function WebSocketTransport(_ref2) {
|
|
104
|
-
var authorization = _ref2.authorization,
|
|
105
|
-
apiUrl = _ref2.apiUrl,
|
|
106
|
-
heartBeatInterval = _ref2.heartBeatInterval,
|
|
107
|
-
hearBeatInterval = _ref2.hearBeatInterval;
|
|
108
|
-
|
|
109
|
-
_classCallCheck(this, WebSocketTransport);
|
|
110
|
-
|
|
111
|
-
_defineProperty(this, "apiUrl", void 0);
|
|
112
|
-
|
|
113
|
-
_defineProperty(this, "heartBeatInterval", 60);
|
|
114
|
-
|
|
115
|
-
_defineProperty(this, "token", void 0);
|
|
116
|
-
|
|
117
|
-
_defineProperty(this, "ws", null);
|
|
118
|
-
|
|
119
|
-
_defineProperty(this, "messageCounter", 1);
|
|
20
|
+
async json() {
|
|
21
|
+
return this.result;
|
|
22
|
+
}
|
|
120
23
|
|
|
121
|
-
|
|
24
|
+
clone() {
|
|
25
|
+
// no need to actually clone it
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
122
28
|
|
|
123
|
-
|
|
29
|
+
async text() {
|
|
30
|
+
return typeof this.result === 'string' ? this.result : JSON.stringify(this.result);
|
|
31
|
+
}
|
|
124
32
|
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
class WebSocketTransport {
|
|
36
|
+
heartBeatInterval = 60;
|
|
37
|
+
ws = null;
|
|
38
|
+
messageCounter = 1;
|
|
39
|
+
messageIdToSubscription = {};
|
|
40
|
+
messageQueue = [];
|
|
41
|
+
|
|
42
|
+
constructor({
|
|
43
|
+
authorization,
|
|
44
|
+
apiUrl,
|
|
45
|
+
heartBeatInterval,
|
|
46
|
+
hearBeatInterval
|
|
47
|
+
}) {
|
|
125
48
|
this.token = authorization;
|
|
126
49
|
this.apiUrl = apiUrl;
|
|
127
50
|
|
|
@@ -133,257 +56,173 @@ var WebSocketTransport = /*#__PURE__*/function () {
|
|
|
133
56
|
}
|
|
134
57
|
}
|
|
135
58
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
get: function get() {
|
|
139
|
-
return this.token;
|
|
140
|
-
},
|
|
141
|
-
set: function set(token) {
|
|
142
|
-
this.token = token;
|
|
59
|
+
set authorization(token) {
|
|
60
|
+
this.token = token;
|
|
143
61
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
}
|
|
62
|
+
if (this.ws) {
|
|
63
|
+
this.ws.close();
|
|
147
64
|
}
|
|
148
|
-
}
|
|
149
|
-
key: "close",
|
|
150
|
-
value: function () {
|
|
151
|
-
var _close = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
152
|
-
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
153
|
-
while (1) {
|
|
154
|
-
switch (_context3.prev = _context3.next) {
|
|
155
|
-
case 0:
|
|
156
|
-
if (this.ws) {
|
|
157
|
-
this.ws.close();
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
case 1:
|
|
161
|
-
case "end":
|
|
162
|
-
return _context3.stop();
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}, _callee3, this);
|
|
166
|
-
}));
|
|
65
|
+
}
|
|
167
66
|
|
|
168
|
-
|
|
169
|
-
|
|
67
|
+
async close() {
|
|
68
|
+
if (this.ws) {
|
|
69
|
+
this.ws.close();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
get authorization() {
|
|
74
|
+
return this.token;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
initSocket() {
|
|
78
|
+
if (this.ws) {
|
|
79
|
+
return this.ws.initPromise;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const ws = new WebSocket(this.apiUrl);
|
|
83
|
+
ws.messageIdSent = {};
|
|
84
|
+
|
|
85
|
+
ws.sendMessage = message => {
|
|
86
|
+
if (!message.messageId || message.messageId && !ws.messageIdSent[message.messageId]) {
|
|
87
|
+
ws.send(JSON.stringify(message));
|
|
88
|
+
ws.messageIdSent[message.messageId] = true;
|
|
170
89
|
}
|
|
90
|
+
};
|
|
171
91
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
value: function initSocket() {
|
|
177
|
-
var _this = this;
|
|
92
|
+
ws.sendQueue = () => {
|
|
93
|
+
this.messageQueue.forEach(message => ws.sendMessage(message));
|
|
94
|
+
this.messageQueue = [];
|
|
95
|
+
};
|
|
178
96
|
|
|
179
|
-
|
|
180
|
-
|
|
97
|
+
ws.reconcile = () => {
|
|
98
|
+
if (new Date().getTime() - ws.lastMessageTimestamp.getTime() > 4 * this.heartBeatInterval * 1000) {
|
|
99
|
+
ws.close();
|
|
100
|
+
} else {
|
|
101
|
+
Object.keys(this.messageIdToSubscription).forEach(messageId => {
|
|
102
|
+
// @ts-ignore
|
|
103
|
+
ws.sendMessage(this.messageIdToSubscription[messageId].message);
|
|
104
|
+
});
|
|
181
105
|
}
|
|
106
|
+
};
|
|
182
107
|
|
|
183
|
-
|
|
184
|
-
|
|
108
|
+
ws.lastMessageTimestamp = new Date();
|
|
109
|
+
ws.initPromise = new Promise(resolve => {
|
|
110
|
+
ws.onopen = () => {
|
|
111
|
+
ws.sendMessage({
|
|
112
|
+
authorization: this.authorization
|
|
113
|
+
});
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
ws.onmessage = event => {
|
|
117
|
+
ws.lastMessageTimestamp = new Date();
|
|
118
|
+
const message = JSON.parse(event.data);
|
|
185
119
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
ws.
|
|
189
|
-
|
|
120
|
+
if (message.handshake) {
|
|
121
|
+
ws.reconcile();
|
|
122
|
+
ws.reconcileTimer = setInterval(() => {
|
|
123
|
+
ws.messageIdSent = {};
|
|
124
|
+
ws.reconcile();
|
|
125
|
+
}, this.heartBeatInterval * 1000);
|
|
126
|
+
resolve();
|
|
190
127
|
}
|
|
191
|
-
};
|
|
192
128
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
});
|
|
129
|
+
if (this.messageIdToSubscription[message.messageId]) {
|
|
130
|
+
this.messageIdToSubscription[message.messageId].callback(new WebSocketTransportResult(message));
|
|
131
|
+
}
|
|
197
132
|
|
|
198
|
-
|
|
133
|
+
ws.sendQueue();
|
|
199
134
|
};
|
|
200
135
|
|
|
201
|
-
ws.
|
|
202
|
-
if (
|
|
136
|
+
ws.onclose = () => {
|
|
137
|
+
if (ws && ws.readyState !== WebSocket.CLOSED && ws.readyState !== WebSocket.CLOSING) {
|
|
203
138
|
ws.close();
|
|
204
|
-
} else {
|
|
205
|
-
Object.keys(_this.messageIdToSubscription).forEach(function (messageId) {
|
|
206
|
-
// @ts-ignore
|
|
207
|
-
ws.sendMessage(_this.messageIdToSubscription[messageId].message);
|
|
208
|
-
});
|
|
209
139
|
}
|
|
210
|
-
};
|
|
211
140
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
authorization: _this.authorization
|
|
217
|
-
});
|
|
218
|
-
};
|
|
141
|
+
if (ws.reconcileTimer) {
|
|
142
|
+
clearInterval(ws.reconcileTimer);
|
|
143
|
+
ws.reconcileTimer = null;
|
|
144
|
+
}
|
|
219
145
|
|
|
220
|
-
ws
|
|
221
|
-
ws
|
|
222
|
-
var message = JSON.parse(event.data);
|
|
146
|
+
if (this.ws === ws) {
|
|
147
|
+
this.ws = null;
|
|
223
148
|
|
|
224
|
-
if (
|
|
225
|
-
|
|
226
|
-
ws.reconcileTimer = setInterval(function () {
|
|
227
|
-
ws.messageIdSent = {};
|
|
228
|
-
ws.reconcile();
|
|
229
|
-
}, _this.heartBeatInterval * 1000);
|
|
230
|
-
resolve();
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
if (_this.messageIdToSubscription[message.messageId]) {
|
|
234
|
-
_this.messageIdToSubscription[message.messageId].callback(new WebSocketTransportResult(message));
|
|
149
|
+
if (Object.keys(this.messageIdToSubscription).length) {
|
|
150
|
+
this.initSocket();
|
|
235
151
|
}
|
|
152
|
+
}
|
|
153
|
+
};
|
|
236
154
|
|
|
237
|
-
|
|
238
|
-
|
|
155
|
+
ws.onerror = ws.onclose;
|
|
156
|
+
});
|
|
157
|
+
this.ws = ws;
|
|
158
|
+
return this.ws.initPromise;
|
|
159
|
+
}
|
|
239
160
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
161
|
+
sendMessage(message) {
|
|
162
|
+
if (message.unsubscribe && this.messageQueue.find(m => m.messageId === message.unsubscribe)) {
|
|
163
|
+
this.messageQueue = this.messageQueue.filter(m => m.messageId !== message.unsubscribe);
|
|
164
|
+
} else {
|
|
165
|
+
this.messageQueue.push(message);
|
|
166
|
+
}
|
|
244
167
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
168
|
+
setTimeout(async () => {
|
|
169
|
+
await this.initSocket();
|
|
170
|
+
this.ws.sendQueue();
|
|
171
|
+
}, 100);
|
|
172
|
+
}
|
|
249
173
|
|
|
250
|
-
|
|
251
|
-
|
|
174
|
+
request(method, {
|
|
175
|
+
baseRequestId,
|
|
176
|
+
...params
|
|
177
|
+
}) {
|
|
178
|
+
const message = {
|
|
179
|
+
messageId: this.messageCounter++,
|
|
180
|
+
requestId: baseRequestId,
|
|
181
|
+
method,
|
|
182
|
+
params
|
|
183
|
+
};
|
|
184
|
+
const pendingResults = [];
|
|
185
|
+
let nextMessage = null;
|
|
186
|
+
|
|
187
|
+
const runNextMessage = () => {
|
|
188
|
+
if (nextMessage) {
|
|
189
|
+
nextMessage(pendingResults.pop());
|
|
190
|
+
nextMessage = null;
|
|
191
|
+
}
|
|
192
|
+
};
|
|
252
193
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
194
|
+
this.messageIdToSubscription[message.messageId] = {
|
|
195
|
+
message,
|
|
196
|
+
callback: result => {
|
|
197
|
+
pendingResults.push(result);
|
|
198
|
+
runNextMessage();
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
const transport = this;
|
|
202
|
+
return {
|
|
203
|
+
async subscribe(callback) {
|
|
204
|
+
transport.sendMessage(message);
|
|
205
|
+
const result = await new Promise(resolve => {
|
|
206
|
+
nextMessage = resolve;
|
|
207
|
+
|
|
208
|
+
if (pendingResults.length) {
|
|
209
|
+
runNextMessage();
|
|
256
210
|
}
|
|
257
|
-
};
|
|
211
|
+
});
|
|
212
|
+
return callback(result, () => this.subscribe(callback));
|
|
213
|
+
},
|
|
258
214
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
return this.ws.initPromise;
|
|
263
|
-
}
|
|
264
|
-
}, {
|
|
265
|
-
key: "sendMessage",
|
|
266
|
-
value: function sendMessage(message) {
|
|
267
|
-
var _this2 = this;
|
|
268
|
-
|
|
269
|
-
if (message.unsubscribe && this.messageQueue.find(function (m) {
|
|
270
|
-
return m.messageId === message.unsubscribe;
|
|
271
|
-
})) {
|
|
272
|
-
this.messageQueue = this.messageQueue.filter(function (m) {
|
|
273
|
-
return m.messageId !== message.unsubscribe;
|
|
215
|
+
async unsubscribe() {
|
|
216
|
+
transport.sendMessage({
|
|
217
|
+
unsubscribe: message.messageId
|
|
274
218
|
});
|
|
275
|
-
|
|
276
|
-
this.messageQueue.push(message);
|
|
219
|
+
delete transport.messageIdToSubscription[message.messageId];
|
|
277
220
|
}
|
|
278
221
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
while (1) {
|
|
282
|
-
switch (_context4.prev = _context4.next) {
|
|
283
|
-
case 0:
|
|
284
|
-
_context4.next = 2;
|
|
285
|
-
return _this2.initSocket();
|
|
286
|
-
|
|
287
|
-
case 2:
|
|
288
|
-
_this2.ws.sendQueue();
|
|
289
|
-
|
|
290
|
-
case 3:
|
|
291
|
-
case "end":
|
|
292
|
-
return _context4.stop();
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
}, _callee4);
|
|
296
|
-
})), 100);
|
|
297
|
-
}
|
|
298
|
-
}, {
|
|
299
|
-
key: "request",
|
|
300
|
-
value: function request(method, _ref4) {
|
|
301
|
-
var baseRequestId = _ref4.baseRequestId,
|
|
302
|
-
params = _objectWithoutProperties(_ref4, _excluded);
|
|
303
|
-
|
|
304
|
-
var message = {
|
|
305
|
-
messageId: this.messageCounter++,
|
|
306
|
-
requestId: baseRequestId,
|
|
307
|
-
method: method,
|
|
308
|
-
params: params
|
|
309
|
-
};
|
|
310
|
-
var pendingResults = [];
|
|
311
|
-
var nextMessage = null;
|
|
312
|
-
|
|
313
|
-
var runNextMessage = function runNextMessage() {
|
|
314
|
-
if (nextMessage) {
|
|
315
|
-
nextMessage(pendingResults.pop());
|
|
316
|
-
nextMessage = null;
|
|
317
|
-
}
|
|
318
|
-
};
|
|
319
|
-
|
|
320
|
-
this.messageIdToSubscription[message.messageId] = {
|
|
321
|
-
message: message,
|
|
322
|
-
callback: function callback(result) {
|
|
323
|
-
pendingResults.push(result);
|
|
324
|
-
runNextMessage();
|
|
325
|
-
}
|
|
326
|
-
};
|
|
327
|
-
var transport = this;
|
|
328
|
-
return {
|
|
329
|
-
subscribe: function subscribe(callback) {
|
|
330
|
-
var _this3 = this;
|
|
331
|
-
|
|
332
|
-
return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
|
|
333
|
-
var result;
|
|
334
|
-
return _regeneratorRuntime.wrap(function _callee5$(_context5) {
|
|
335
|
-
while (1) {
|
|
336
|
-
switch (_context5.prev = _context5.next) {
|
|
337
|
-
case 0:
|
|
338
|
-
transport.sendMessage(message);
|
|
339
|
-
_context5.next = 3;
|
|
340
|
-
return new Promise(function (resolve) {
|
|
341
|
-
nextMessage = resolve;
|
|
342
|
-
|
|
343
|
-
if (pendingResults.length) {
|
|
344
|
-
runNextMessage();
|
|
345
|
-
}
|
|
346
|
-
});
|
|
347
|
-
|
|
348
|
-
case 3:
|
|
349
|
-
result = _context5.sent;
|
|
350
|
-
return _context5.abrupt("return", callback(result, function () {
|
|
351
|
-
return _this3.subscribe(callback);
|
|
352
|
-
}));
|
|
353
|
-
|
|
354
|
-
case 5:
|
|
355
|
-
case "end":
|
|
356
|
-
return _context5.stop();
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
}, _callee5);
|
|
360
|
-
}))();
|
|
361
|
-
},
|
|
362
|
-
unsubscribe: function unsubscribe() {
|
|
363
|
-
return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
|
|
364
|
-
return _regeneratorRuntime.wrap(function _callee6$(_context6) {
|
|
365
|
-
while (1) {
|
|
366
|
-
switch (_context6.prev = _context6.next) {
|
|
367
|
-
case 0:
|
|
368
|
-
transport.sendMessage({
|
|
369
|
-
unsubscribe: message.messageId
|
|
370
|
-
});
|
|
371
|
-
delete transport.messageIdToSubscription[message.messageId];
|
|
372
|
-
|
|
373
|
-
case 2:
|
|
374
|
-
case "end":
|
|
375
|
-
return _context6.stop();
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
}, _callee6);
|
|
379
|
-
}))();
|
|
380
|
-
}
|
|
381
|
-
};
|
|
382
|
-
}
|
|
383
|
-
}]);
|
|
222
|
+
};
|
|
223
|
+
}
|
|
384
224
|
|
|
385
|
-
|
|
386
|
-
}();
|
|
225
|
+
}
|
|
387
226
|
|
|
388
227
|
export default WebSocketTransport;
|
|
389
228
|
//# sourceMappingURL=cubejs-client-ws-transport.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cubejs-client-ws-transport.esm.js","sources":["../src/index.ts"],"sourcesContent":["import WebSocket from 'isomorphic-ws';\nimport type { ITransport, ITransportResponse } from '@cubejs-client/core';\n\n/**\n * @title @cubejs-client/ws-transport\n * @permalink /@cubejs-client-ws-transport\n * @menuCategory Cube.js Frontend\n * @subcategory Reference\n * @menuOrder 4\n * @description WebSocket transport for Cube.js client\n */\n\nclass WebSocketTransportResult {\n protected readonly status: unknown;\n\n protected readonly result: unknown;\n\n public constructor({ status, message }: { status: unknown, message: unknown }) {\n this.status = status;\n this.result = message;\n }\n\n public async json() {\n return this.result;\n }\n\n public clone() {\n // no need to actually clone it\n return this;\n }\n\n public async text() {\n return typeof this.result === 'string' ? this.result : JSON.stringify(this.result);\n }\n}\n\ntype WebSocketTransportOptions = {\n authorization?: string,\n apiUrl: string,\n // @deprecated\n hearBeatInterval?: number,\n heartBeatInterval?: number,\n};\n\ntype Message = {\n messageId: number,\n requestId: any,\n method: string,\n params: Record<string, unknown>,\n};\n\ntype Subscription = {\n message: Message,\n callback: (result: WebSocketTransportResult) => void,\n};\n\nclass WebSocketTransport implements ITransport<WebSocketTransportResult> {\n protected readonly apiUrl: string;\n\n protected readonly heartBeatInterval: number = 60;\n\n protected token: string | undefined;\n\n protected ws: any = null;\n\n protected messageCounter: number = 1;\n\n protected messageIdToSubscription: Record<number, Subscription> = {};\n\n protected messageQueue: Message[] = [];\n\n public constructor({ authorization, apiUrl, heartBeatInterval, hearBeatInterval }: WebSocketTransportOptions) {\n this.token = authorization;\n this.apiUrl = apiUrl;\n\n if (heartBeatInterval) {\n this.heartBeatInterval = heartBeatInterval;\n } else if (hearBeatInterval) {\n console.warn('Option hearBeatInterval is deprecated. It was replaced by heartBeatInterval.');\n this.heartBeatInterval = hearBeatInterval;\n }\n }\n\n public set authorization(token) {\n this.token = token;\n\n if (this.ws) {\n this.ws.close();\n }\n }\n\n public async close(): Promise<void> {\n if (this.ws) {\n this.ws.close();\n }\n }\n\n public get authorization() {\n return this.token;\n }\n\n protected initSocket() {\n if (this.ws) {\n return this.ws.initPromise;\n }\n\n const ws: any = new WebSocket(this.apiUrl);\n\n ws.messageIdSent = {};\n\n ws.sendMessage = (message: any) => {\n if (!message.messageId || message.messageId && !ws.messageIdSent[message.messageId]) {\n ws.send(JSON.stringify(message));\n ws.messageIdSent[message.messageId] = true;\n }\n };\n\n ws.sendQueue = () => {\n this.messageQueue.forEach(message => ws.sendMessage(message));\n this.messageQueue = [];\n };\n\n ws.reconcile = () => {\n if (new Date().getTime() - ws.lastMessageTimestamp.getTime() > 4 * this.heartBeatInterval * 1000) {\n ws.close();\n } else {\n Object.keys(this.messageIdToSubscription).forEach(messageId => {\n // @ts-ignore\n ws.sendMessage(this.messageIdToSubscription[messageId].message);\n });\n }\n };\n\n ws.lastMessageTimestamp = new Date();\n\n ws.initPromise = new Promise<void>(resolve => {\n ws.onopen = () => {\n ws.sendMessage({ authorization: this.authorization });\n };\n\n ws.onmessage = (event: any) => {\n ws.lastMessageTimestamp = new Date();\n\n const message: any = JSON.parse(event.data);\n if (message.handshake) {\n ws.reconcile();\n ws.reconcileTimer = setInterval(() => {\n ws.messageIdSent = {};\n ws.reconcile();\n }, this.heartBeatInterval * 1000);\n resolve();\n }\n\n if (this.messageIdToSubscription[message.messageId]) {\n this.messageIdToSubscription[message.messageId].callback(\n new WebSocketTransportResult(message)\n );\n }\n\n ws.sendQueue();\n };\n\n ws.onclose = () => {\n if (ws && ws.readyState !== WebSocket.CLOSED && ws.readyState !== WebSocket.CLOSING) {\n ws.close();\n }\n if (ws.reconcileTimer) {\n clearInterval(ws.reconcileTimer);\n ws.reconcileTimer = null;\n }\n if (this.ws === ws) {\n this.ws = null;\n if (Object.keys(this.messageIdToSubscription).length) {\n this.initSocket();\n }\n }\n };\n\n ws.onerror = ws.onclose;\n });\n\n this.ws = ws;\n\n return this.ws.initPromise;\n }\n\n protected sendMessage(message: any) {\n if (message.unsubscribe && this.messageQueue.find(m => m.messageId === message.unsubscribe)) {\n this.messageQueue = this.messageQueue.filter(m => m.messageId !== message.unsubscribe);\n } else {\n this.messageQueue.push(message);\n }\n\n setTimeout(async () => {\n await this.initSocket();\n this.ws.sendQueue();\n }, 100);\n }\n\n public request(\n method: string,\n { baseRequestId, ...params }: Record<string, unknown>\n ): ITransportResponse<WebSocketTransportResult> {\n const message: Message = {\n messageId: this.messageCounter++,\n requestId: baseRequestId,\n method,\n params\n };\n\n const pendingResults: WebSocketTransportResult[] = [];\n let nextMessage: ((value: any) => void) | null = null;\n\n const runNextMessage = () => {\n if (nextMessage) {\n nextMessage(pendingResults.pop());\n nextMessage = null;\n }\n };\n\n this.messageIdToSubscription[message.messageId] = {\n message,\n callback: (result) => {\n pendingResults.push(result);\n runNextMessage();\n }\n };\n\n const transport = this;\n\n return {\n async subscribe(callback) {\n transport.sendMessage(message);\n\n const result = await new Promise<WebSocketTransportResult>((resolve) => {\n nextMessage = resolve;\n if (pendingResults.length) {\n runNextMessage();\n }\n });\n\n return callback(result, () => this.subscribe(callback));\n },\n async unsubscribe() {\n transport.sendMessage({ unsubscribe: message.messageId });\n delete transport.messageIdToSubscription[message.messageId];\n }\n };\n }\n}\n\nexport default WebSocketTransport;\n"],"names":["WebSocketTransportResult","status","message","result","JSON","stringify","WebSocketTransport","authorization","apiUrl","heartBeatInterval","hearBeatInterval","token","console","warn","ws","close","initPromise","WebSocket","messageIdSent","sendMessage","messageId","send","sendQueue","messageQueue","forEach","reconcile","Date","getTime","lastMessageTimestamp","Object","keys","messageIdToSubscription","Promise","resolve","onopen","onmessage","event","parse","data","handshake","reconcileTimer","setInterval","callback","onclose","readyState","CLOSED","CLOSING","clearInterval","length","initSocket","onerror","unsubscribe","find","m","filter","push","setTimeout","method","baseRequestId","params","messageCounter","requestId","pendingResults","nextMessage","runNextMessage","pop","transport","subscribe"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cubejs-client-ws-transport.esm.js","sources":["../src/index.ts"],"sourcesContent":["import WebSocket from 'isomorphic-ws';\nimport type { ITransport, ITransportResponse } from '@cubejs-client/core';\n\n/**\n * @title @cubejs-client/ws-transport\n * @permalink /@cubejs-client-ws-transport\n * @menuCategory Cube.js Frontend\n * @subcategory Reference\n * @menuOrder 4\n * @description WebSocket transport for Cube.js client\n */\n\nclass WebSocketTransportResult {\n protected readonly status: unknown;\n\n protected readonly result: unknown;\n\n public constructor({ status, message }: { status: unknown, message: unknown }) {\n this.status = status;\n this.result = message;\n }\n\n public async json() {\n return this.result;\n }\n\n public clone() {\n // no need to actually clone it\n return this;\n }\n\n public async text() {\n return typeof this.result === 'string' ? this.result : JSON.stringify(this.result);\n }\n}\n\ntype WebSocketTransportOptions = {\n authorization?: string,\n apiUrl: string,\n // @deprecated\n hearBeatInterval?: number,\n heartBeatInterval?: number,\n};\n\ntype Message = {\n messageId: number,\n requestId: any,\n method: string,\n params: Record<string, unknown>,\n};\n\ntype Subscription = {\n message: Message,\n callback: (result: WebSocketTransportResult) => void,\n};\n\nclass WebSocketTransport implements ITransport<WebSocketTransportResult> {\n protected readonly apiUrl: string;\n\n protected readonly heartBeatInterval: number = 60;\n\n protected token: string | undefined;\n\n protected ws: any = null;\n\n protected messageCounter: number = 1;\n\n protected messageIdToSubscription: Record<number, Subscription> = {};\n\n protected messageQueue: Message[] = [];\n\n public constructor({ authorization, apiUrl, heartBeatInterval, hearBeatInterval }: WebSocketTransportOptions) {\n this.token = authorization;\n this.apiUrl = apiUrl;\n\n if (heartBeatInterval) {\n this.heartBeatInterval = heartBeatInterval;\n } else if (hearBeatInterval) {\n console.warn('Option hearBeatInterval is deprecated. It was replaced by heartBeatInterval.');\n this.heartBeatInterval = hearBeatInterval;\n }\n }\n\n public set authorization(token) {\n this.token = token;\n\n if (this.ws) {\n this.ws.close();\n }\n }\n\n public async close(): Promise<void> {\n if (this.ws) {\n this.ws.close();\n }\n }\n\n public get authorization() {\n return this.token;\n }\n\n protected initSocket() {\n if (this.ws) {\n return this.ws.initPromise;\n }\n\n const ws: any = new WebSocket(this.apiUrl);\n\n ws.messageIdSent = {};\n\n ws.sendMessage = (message: any) => {\n if (!message.messageId || message.messageId && !ws.messageIdSent[message.messageId]) {\n ws.send(JSON.stringify(message));\n ws.messageIdSent[message.messageId] = true;\n }\n };\n\n ws.sendQueue = () => {\n this.messageQueue.forEach(message => ws.sendMessage(message));\n this.messageQueue = [];\n };\n\n ws.reconcile = () => {\n if (new Date().getTime() - ws.lastMessageTimestamp.getTime() > 4 * this.heartBeatInterval * 1000) {\n ws.close();\n } else {\n Object.keys(this.messageIdToSubscription).forEach(messageId => {\n // @ts-ignore\n ws.sendMessage(this.messageIdToSubscription[messageId].message);\n });\n }\n };\n\n ws.lastMessageTimestamp = new Date();\n\n ws.initPromise = new Promise<void>(resolve => {\n ws.onopen = () => {\n ws.sendMessage({ authorization: this.authorization });\n };\n\n ws.onmessage = (event: any) => {\n ws.lastMessageTimestamp = new Date();\n\n const message: any = JSON.parse(event.data);\n if (message.handshake) {\n ws.reconcile();\n ws.reconcileTimer = setInterval(() => {\n ws.messageIdSent = {};\n ws.reconcile();\n }, this.heartBeatInterval * 1000);\n resolve();\n }\n\n if (this.messageIdToSubscription[message.messageId]) {\n this.messageIdToSubscription[message.messageId].callback(\n new WebSocketTransportResult(message)\n );\n }\n\n ws.sendQueue();\n };\n\n ws.onclose = () => {\n if (ws && ws.readyState !== WebSocket.CLOSED && ws.readyState !== WebSocket.CLOSING) {\n ws.close();\n }\n if (ws.reconcileTimer) {\n clearInterval(ws.reconcileTimer);\n ws.reconcileTimer = null;\n }\n if (this.ws === ws) {\n this.ws = null;\n if (Object.keys(this.messageIdToSubscription).length) {\n this.initSocket();\n }\n }\n };\n\n ws.onerror = ws.onclose;\n });\n\n this.ws = ws;\n\n return this.ws.initPromise;\n }\n\n protected sendMessage(message: any) {\n if (message.unsubscribe && this.messageQueue.find(m => m.messageId === message.unsubscribe)) {\n this.messageQueue = this.messageQueue.filter(m => m.messageId !== message.unsubscribe);\n } else {\n this.messageQueue.push(message);\n }\n\n setTimeout(async () => {\n await this.initSocket();\n this.ws.sendQueue();\n }, 100);\n }\n\n public request(\n method: string,\n { baseRequestId, ...params }: Record<string, unknown>\n ): ITransportResponse<WebSocketTransportResult> {\n const message: Message = {\n messageId: this.messageCounter++,\n requestId: baseRequestId,\n method,\n params\n };\n\n const pendingResults: WebSocketTransportResult[] = [];\n let nextMessage: ((value: any) => void) | null = null;\n\n const runNextMessage = () => {\n if (nextMessage) {\n nextMessage(pendingResults.pop());\n nextMessage = null;\n }\n };\n\n this.messageIdToSubscription[message.messageId] = {\n message,\n callback: (result) => {\n pendingResults.push(result);\n runNextMessage();\n }\n };\n\n const transport = this;\n\n return {\n async subscribe(callback) {\n transport.sendMessage(message);\n\n const result = await new Promise<WebSocketTransportResult>((resolve) => {\n nextMessage = resolve;\n if (pendingResults.length) {\n runNextMessage();\n }\n });\n\n return callback(result, () => this.subscribe(callback));\n },\n async unsubscribe() {\n transport.sendMessage({ unsubscribe: message.messageId });\n delete transport.messageIdToSubscription[message.messageId];\n }\n };\n }\n}\n\nexport default WebSocketTransport;\n"],"names":["WebSocketTransportResult","constructor","status","message","result","json","clone","text","JSON","stringify","WebSocketTransport","heartBeatInterval","ws","messageCounter","messageIdToSubscription","messageQueue","authorization","apiUrl","hearBeatInterval","token","console","warn","close","initSocket","initPromise","WebSocket","messageIdSent","sendMessage","messageId","send","sendQueue","forEach","reconcile","Date","getTime","lastMessageTimestamp","Object","keys","Promise","resolve","onopen","onmessage","event","parse","data","handshake","reconcileTimer","setInterval","callback","onclose","readyState","CLOSED","CLOSING","clearInterval","length","onerror","unsubscribe","find","m","filter","push","setTimeout","request","method","baseRequestId","params","requestId","pendingResults","nextMessage","runNextMessage","pop","transport","subscribe"],"mappings":";;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAMA,wBAAN,CAA+B;AAKtBC,EAAAA,WAAW,CAAC;AAAEC,IAAAA,MAAF;AAAUC,IAAAA;AAAV,GAAD,EAA6D;AAC7E,SAAKD,MAAL,GAAcA,MAAd;AACA,SAAKE,MAAL,GAAcD,OAAd;AACD;;AAEgB,QAAJE,IAAI,GAAG;AAClB,WAAO,KAAKD,MAAZ;AACD;;AAEME,EAAAA,KAAK,GAAG;AACb;AACA,WAAO,IAAP;AACD;;AAEgB,QAAJC,IAAI,GAAG;AAClB,WAAO,OAAO,KAAKH,MAAZ,KAAuB,QAAvB,GAAkC,KAAKA,MAAvC,GAAgDI,IAAI,CAACC,SAAL,CAAe,KAAKL,MAApB,CAAvD;AACD;;AArB4B;;AA4C/B,MAAMM,kBAAN,CAAyE;AAGpDC,EAAAA,iBAAiB,GAAW,EAAX;AAI1BC,EAAAA,EAAE,GAAQ,IAAR;AAEFC,EAAAA,cAAc,GAAW,CAAX;AAEdC,EAAAA,uBAAuB,GAAiC,EAAjC;AAEvBC,EAAAA,YAAY,GAAc,EAAd;;AAEfd,EAAAA,WAAW,CAAC;AAAEe,IAAAA,aAAF;AAAiBC,IAAAA,MAAjB;AAAyBN,IAAAA,iBAAzB;AAA4CO,IAAAA;AAA5C,GAAD,EAA4F;AAC5G,SAAKC,KAAL,GAAaH,aAAb;AACA,SAAKC,MAAL,GAAcA,MAAd;;AAEA,QAAIN,iBAAJ,EAAuB;AACrB,WAAKA,iBAAL,GAAyBA,iBAAzB;AACD,KAFD,MAEO,IAAIO,gBAAJ,EAAsB;AAC3BE,MAAAA,OAAO,CAACC,IAAR,CAAa,8EAAb;AACA,WAAKV,iBAAL,GAAyBO,gBAAzB;AACD;AACF;;AAEuB,MAAbF,aAAa,CAACG,KAAD,EAAQ;AAC9B,SAAKA,KAAL,GAAaA,KAAb;;AAEA,QAAI,KAAKP,EAAT,EAAa;AACX,WAAKA,EAAL,CAAQU,KAAR;AACD;AACF;;AAEiB,QAALA,KAAK,GAAkB;AAClC,QAAI,KAAKV,EAAT,EAAa;AACX,WAAKA,EAAL,CAAQU,KAAR;AACD;AACF;;AAEuB,MAAbN,aAAa,GAAG;AACzB,WAAO,KAAKG,KAAZ;AACD;;AAESI,EAAAA,UAAU,GAAG;AACrB,QAAI,KAAKX,EAAT,EAAa;AACX,aAAO,KAAKA,EAAL,CAAQY,WAAf;AACD;;AAED,UAAMZ,EAAO,GAAG,IAAIa,SAAJ,CAAc,KAAKR,MAAnB,CAAhB;AAEAL,IAAAA,EAAE,CAACc,aAAH,GAAmB,EAAnB;;AAEAd,IAAAA,EAAE,CAACe,WAAH,GAAkBxB,OAAD,IAAkB;AACjC,UAAI,CAACA,OAAO,CAACyB,SAAT,IAAsBzB,OAAO,CAACyB,SAAR,IAAqB,CAAChB,EAAE,CAACc,aAAH,CAAiBvB,OAAO,CAACyB,SAAzB,CAAhD,EAAqF;AACnFhB,QAAAA,EAAE,CAACiB,IAAH,CAAQrB,IAAI,CAACC,SAAL,CAAeN,OAAf,CAAR;AACAS,QAAAA,EAAE,CAACc,aAAH,CAAiBvB,OAAO,CAACyB,SAAzB,IAAsC,IAAtC;AACD;AACF,KALD;;AAOAhB,IAAAA,EAAE,CAACkB,SAAH,GAAe,MAAM;AACnB,WAAKf,YAAL,CAAkBgB,OAAlB,CAA0B5B,OAAO,IAAIS,EAAE,CAACe,WAAH,CAAexB,OAAf,CAArC;AACA,WAAKY,YAAL,GAAoB,EAApB;AACD,KAHD;;AAKAH,IAAAA,EAAE,CAACoB,SAAH,GAAe,MAAM;AACnB,UAAI,IAAIC,IAAJ,GAAWC,OAAX,KAAuBtB,EAAE,CAACuB,oBAAH,CAAwBD,OAAxB,EAAvB,GAA2D,IAAI,KAAKvB,iBAAT,GAA6B,IAA5F,EAAkG;AAChGC,QAAAA,EAAE,CAACU,KAAH;AACD,OAFD,MAEO;AACLc,QAAAA,MAAM,CAACC,IAAP,CAAY,KAAKvB,uBAAjB,EAA0CiB,OAA1C,CAAkDH,SAAS,IAAI;AAC7D;AACAhB,UAAAA,EAAE,CAACe,WAAH,CAAe,KAAKb,uBAAL,CAA6Bc,SAA7B,EAAwCzB,OAAvD;AACD,SAHD;AAID;AACF,KATD;;AAWAS,IAAAA,EAAE,CAACuB,oBAAH,GAA0B,IAAIF,IAAJ,EAA1B;AAEArB,IAAAA,EAAE,CAACY,WAAH,GAAiB,IAAIc,OAAJ,CAAkBC,OAAO,IAAI;AAC5C3B,MAAAA,EAAE,CAAC4B,MAAH,GAAY,MAAM;AAChB5B,QAAAA,EAAE,CAACe,WAAH,CAAe;AAAEX,UAAAA,aAAa,EAAE,KAAKA;AAAtB,SAAf;AACD,OAFD;;AAIAJ,MAAAA,EAAE,CAAC6B,SAAH,GAAgBC,KAAD,IAAgB;AAC7B9B,QAAAA,EAAE,CAACuB,oBAAH,GAA0B,IAAIF,IAAJ,EAA1B;AAEA,cAAM9B,OAAY,GAAGK,IAAI,CAACmC,KAAL,CAAWD,KAAK,CAACE,IAAjB,CAArB;;AACA,YAAIzC,OAAO,CAAC0C,SAAZ,EAAuB;AACrBjC,UAAAA,EAAE,CAACoB,SAAH;AACApB,UAAAA,EAAE,CAACkC,cAAH,GAAoBC,WAAW,CAAC,MAAM;AACpCnC,YAAAA,EAAE,CAACc,aAAH,GAAmB,EAAnB;AACAd,YAAAA,EAAE,CAACoB,SAAH;AACD,WAH8B,EAG5B,KAAKrB,iBAAL,GAAyB,IAHG,CAA/B;AAIA4B,UAAAA,OAAO;AACR;;AAED,YAAI,KAAKzB,uBAAL,CAA6BX,OAAO,CAACyB,SAArC,CAAJ,EAAqD;AACnD,eAAKd,uBAAL,CAA6BX,OAAO,CAACyB,SAArC,EAAgDoB,QAAhD,CACE,IAAIhD,wBAAJ,CAA6BG,OAA7B,CADF;AAGD;;AAEDS,QAAAA,EAAE,CAACkB,SAAH;AACD,OApBD;;AAsBAlB,MAAAA,EAAE,CAACqC,OAAH,GAAa,MAAM;AACjB,YAAIrC,EAAE,IAAIA,EAAE,CAACsC,UAAH,KAAkBzB,SAAS,CAAC0B,MAAlC,IAA4CvC,EAAE,CAACsC,UAAH,KAAkBzB,SAAS,CAAC2B,OAA5E,EAAqF;AACnFxC,UAAAA,EAAE,CAACU,KAAH;AACD;;AACD,YAAIV,EAAE,CAACkC,cAAP,EAAuB;AACrBO,UAAAA,aAAa,CAACzC,EAAE,CAACkC,cAAJ,CAAb;AACAlC,UAAAA,EAAE,CAACkC,cAAH,GAAoB,IAApB;AACD;;AACD,YAAI,KAAKlC,EAAL,KAAYA,EAAhB,EAAoB;AAClB,eAAKA,EAAL,GAAU,IAAV;;AACA,cAAIwB,MAAM,CAACC,IAAP,CAAY,KAAKvB,uBAAjB,EAA0CwC,MAA9C,EAAsD;AACpD,iBAAK/B,UAAL;AACD;AACF;AACF,OAdD;;AAgBAX,MAAAA,EAAE,CAAC2C,OAAH,GAAa3C,EAAE,CAACqC,OAAhB;AACD,KA5CgB,CAAjB;AA8CA,SAAKrC,EAAL,GAAUA,EAAV;AAEA,WAAO,KAAKA,EAAL,CAAQY,WAAf;AACD;;AAESG,EAAAA,WAAW,CAACxB,OAAD,EAAe;AAClC,QAAIA,OAAO,CAACqD,WAAR,IAAuB,KAAKzC,YAAL,CAAkB0C,IAAlB,CAAuBC,CAAC,IAAIA,CAAC,CAAC9B,SAAF,KAAgBzB,OAAO,CAACqD,WAApD,CAA3B,EAA6F;AAC3F,WAAKzC,YAAL,GAAoB,KAAKA,YAAL,CAAkB4C,MAAlB,CAAyBD,CAAC,IAAIA,CAAC,CAAC9B,SAAF,KAAgBzB,OAAO,CAACqD,WAAtD,CAApB;AACD,KAFD,MAEO;AACL,WAAKzC,YAAL,CAAkB6C,IAAlB,CAAuBzD,OAAvB;AACD;;AAED0D,IAAAA,UAAU,CAAC,YAAY;AACrB,YAAM,KAAKtC,UAAL,EAAN;AACA,WAAKX,EAAL,CAAQkB,SAAR;AACD,KAHS,EAGP,GAHO,CAAV;AAID;;AAEMgC,EAAAA,OAAO,CACZC,MADY,EAEZ;AAAEC,IAAAA,aAAF;AAAiB,OAAGC;AAApB,GAFY,EAGkC;AAC9C,UAAM9D,OAAgB,GAAG;AACvByB,MAAAA,SAAS,EAAE,KAAKf,cAAL,EADY;AAEvBqD,MAAAA,SAAS,EAAEF,aAFY;AAGvBD,MAAAA,MAHuB;AAIvBE,MAAAA;AAJuB,KAAzB;AAOA,UAAME,cAA0C,GAAG,EAAnD;AACA,QAAIC,WAA0C,GAAG,IAAjD;;AAEA,UAAMC,cAAc,GAAG,MAAM;AAC3B,UAAID,WAAJ,EAAiB;AACfA,QAAAA,WAAW,CAACD,cAAc,CAACG,GAAf,EAAD,CAAX;AACAF,QAAAA,WAAW,GAAG,IAAd;AACD;AACF,KALD;;AAOA,SAAKtD,uBAAL,CAA6BX,OAAO,CAACyB,SAArC,IAAkD;AAChDzB,MAAAA,OADgD;AAEhD6C,MAAAA,QAAQ,EAAG5C,MAAD,IAAY;AACpB+D,QAAAA,cAAc,CAACP,IAAf,CAAoBxD,MAApB;AACAiE,QAAAA,cAAc;AACf;AAL+C,KAAlD;AAQA,UAAME,SAAS,GAAG,IAAlB;AAEA,WAAO;AACL,YAAMC,SAAN,CAAgBxB,QAAhB,EAA0B;AACxBuB,QAAAA,SAAS,CAAC5C,WAAV,CAAsBxB,OAAtB;AAEA,cAAMC,MAAM,GAAG,MAAM,IAAIkC,OAAJ,CAAuCC,OAAD,IAAa;AACtE6B,UAAAA,WAAW,GAAG7B,OAAd;;AACA,cAAI4B,cAAc,CAACb,MAAnB,EAA2B;AACzBe,YAAAA,cAAc;AACf;AACF,SALoB,CAArB;AAOA,eAAOrB,QAAQ,CAAC5C,MAAD,EAAS,MAAM,KAAKoE,SAAL,CAAexB,QAAf,CAAf,CAAf;AACD,OAZI;;AAaL,YAAMQ,WAAN,GAAoB;AAClBe,QAAAA,SAAS,CAAC5C,WAAV,CAAsB;AAAE6B,UAAAA,WAAW,EAAErD,OAAO,CAACyB;AAAvB,SAAtB;AACA,eAAO2C,SAAS,CAACzD,uBAAV,CAAkCX,OAAO,CAACyB,SAA1C,CAAP;AACD;;AAhBI,KAAP;AAkBD;;AAhMsE;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cubejs-client/ws-transport",
|
|
3
|
-
"version": "0.30.
|
|
3
|
+
"version": "0.30.64",
|
|
4
4
|
"engines": {},
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@babel/runtime": "^7.1.2",
|
|
23
|
-
"@cubejs-client/core": "^0.30.
|
|
23
|
+
"@cubejs-client/core": "^0.30.64",
|
|
24
24
|
"core-js": "^3.6.5",
|
|
25
25
|
"isomorphic-ws": "^4.0.1",
|
|
26
26
|
"ws": "^7.3.1"
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"eslintConfig": {
|
|
47
47
|
"extends": "../cubejs-linter"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "f5123837220235430a0eabf921e2c9cd4f513261"
|
|
50
50
|
}
|