@cubejs-client/ws-transport 1.3.4 → 1.3.6
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.
|
@@ -5,15 +5,16 @@ var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
|
|
|
5
5
|
var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
|
|
6
6
|
var _createClass = require('@babel/runtime/helpers/createClass');
|
|
7
7
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
8
|
+
require('core-js/modules/es.array.filter.js');
|
|
9
|
+
require('core-js/modules/es.array.find.js');
|
|
8
10
|
require('core-js/modules/es.array.for-each.js');
|
|
9
|
-
require('core-js/modules/es.
|
|
10
|
-
require('core-js/modules/web.dom-collections.for-each.js');
|
|
11
|
+
require('core-js/modules/es.date.to-json.js');
|
|
11
12
|
require('core-js/modules/es.date.to-string.js');
|
|
12
13
|
require('core-js/modules/es.object.keys.js');
|
|
14
|
+
require('core-js/modules/es.object.to-string.js');
|
|
13
15
|
require('core-js/modules/es.promise.js');
|
|
16
|
+
require('core-js/modules/web.dom-collections.for-each.js');
|
|
14
17
|
require('core-js/modules/web.timers.js');
|
|
15
|
-
require('core-js/modules/es.array.find.js');
|
|
16
|
-
require('core-js/modules/es.array.filter.js');
|
|
17
18
|
var _regeneratorRuntime = require('@babel/runtime/regenerator');
|
|
18
19
|
var WebSocket = require('isomorphic-ws');
|
|
19
20
|
|
|
@@ -46,19 +47,17 @@ var WebSocketTransportResult = /*#__PURE__*/function () {
|
|
|
46
47
|
this.status = status;
|
|
47
48
|
this.result = message;
|
|
48
49
|
}
|
|
49
|
-
_createClass__default['default'](WebSocketTransportResult, [{
|
|
50
|
+
return _createClass__default['default'](WebSocketTransportResult, [{
|
|
50
51
|
key: "json",
|
|
51
52
|
value: function () {
|
|
52
|
-
var _json = _asyncToGenerator__default['default'](
|
|
53
|
+
var _json = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee() {
|
|
53
54
|
return _regeneratorRuntime__default['default'].wrap(function _callee$(_context) {
|
|
54
|
-
while (1) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return _context.stop();
|
|
61
|
-
}
|
|
55
|
+
while (1) switch (_context.prev = _context.next) {
|
|
56
|
+
case 0:
|
|
57
|
+
return _context.abrupt("return", this.result);
|
|
58
|
+
case 1:
|
|
59
|
+
case "end":
|
|
60
|
+
return _context.stop();
|
|
62
61
|
}
|
|
63
62
|
}, _callee, this);
|
|
64
63
|
}));
|
|
@@ -76,16 +75,14 @@ var WebSocketTransportResult = /*#__PURE__*/function () {
|
|
|
76
75
|
}, {
|
|
77
76
|
key: "text",
|
|
78
77
|
value: function () {
|
|
79
|
-
var _text = _asyncToGenerator__default['default'](
|
|
78
|
+
var _text = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee2() {
|
|
80
79
|
return _regeneratorRuntime__default['default'].wrap(function _callee2$(_context2) {
|
|
81
|
-
while (1) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return _context2.stop();
|
|
88
|
-
}
|
|
80
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
81
|
+
case 0:
|
|
82
|
+
return _context2.abrupt("return", typeof this.result === 'string' ? this.result : JSON.stringify(this.result));
|
|
83
|
+
case 1:
|
|
84
|
+
case "end":
|
|
85
|
+
return _context2.stop();
|
|
89
86
|
}
|
|
90
87
|
}, _callee2, this);
|
|
91
88
|
}));
|
|
@@ -95,7 +92,6 @@ var WebSocketTransportResult = /*#__PURE__*/function () {
|
|
|
95
92
|
return text;
|
|
96
93
|
}()
|
|
97
94
|
}]);
|
|
98
|
-
return WebSocketTransportResult;
|
|
99
95
|
}();
|
|
100
96
|
var WebSocketTransport = /*#__PURE__*/function () {
|
|
101
97
|
function WebSocketTransport(_ref2) {
|
|
@@ -120,7 +116,7 @@ var WebSocketTransport = /*#__PURE__*/function () {
|
|
|
120
116
|
this.heartBeatInterval = hearBeatInterval;
|
|
121
117
|
}
|
|
122
118
|
}
|
|
123
|
-
_createClass__default['default'](WebSocketTransport, [{
|
|
119
|
+
return _createClass__default['default'](WebSocketTransport, [{
|
|
124
120
|
key: "authorization",
|
|
125
121
|
get: function get() {
|
|
126
122
|
return this.token;
|
|
@@ -134,20 +130,18 @@ var WebSocketTransport = /*#__PURE__*/function () {
|
|
|
134
130
|
}, {
|
|
135
131
|
key: "close",
|
|
136
132
|
value: function () {
|
|
137
|
-
var _close = _asyncToGenerator__default['default'](
|
|
133
|
+
var _close = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee3() {
|
|
138
134
|
return _regeneratorRuntime__default['default'].wrap(function _callee3$(_context3) {
|
|
139
|
-
while (1) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return _context3.stop();
|
|
150
|
-
}
|
|
135
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
136
|
+
case 0:
|
|
137
|
+
if (this.ws) {
|
|
138
|
+
// Flush send queue before sending close frame
|
|
139
|
+
this.ws.sendQueue();
|
|
140
|
+
this.ws.close();
|
|
141
|
+
}
|
|
142
|
+
case 1:
|
|
143
|
+
case "end":
|
|
144
|
+
return _context3.stop();
|
|
151
145
|
}
|
|
152
146
|
}, _callee3, this);
|
|
153
147
|
}));
|
|
@@ -243,19 +237,17 @@ var WebSocketTransport = /*#__PURE__*/function () {
|
|
|
243
237
|
} else {
|
|
244
238
|
this.messageQueue.push(message);
|
|
245
239
|
}
|
|
246
|
-
setTimeout(
|
|
240
|
+
setTimeout(/*#__PURE__*/_asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee4() {
|
|
247
241
|
return _regeneratorRuntime__default['default'].wrap(function _callee4$(_context4) {
|
|
248
|
-
while (1) {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
return _context4.stop();
|
|
258
|
-
}
|
|
242
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
243
|
+
case 0:
|
|
244
|
+
_context4.next = 2;
|
|
245
|
+
return _this2.initSocket();
|
|
246
|
+
case 2:
|
|
247
|
+
_this2.ws.sendQueue();
|
|
248
|
+
case 3:
|
|
249
|
+
case "end":
|
|
250
|
+
return _context4.stop();
|
|
259
251
|
}
|
|
260
252
|
}, _callee4);
|
|
261
253
|
})), 100);
|
|
@@ -290,47 +282,43 @@ var WebSocketTransport = /*#__PURE__*/function () {
|
|
|
290
282
|
return {
|
|
291
283
|
subscribe: function subscribe(callback) {
|
|
292
284
|
var _this3 = this;
|
|
293
|
-
return _asyncToGenerator__default['default'](
|
|
285
|
+
return _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee5() {
|
|
294
286
|
var result;
|
|
295
287
|
return _regeneratorRuntime__default['default'].wrap(function _callee5$(_context5) {
|
|
296
|
-
while (1) {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
return
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
return _context5.stop();
|
|
315
|
-
}
|
|
288
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
289
|
+
case 0:
|
|
290
|
+
transport.sendMessage(message);
|
|
291
|
+
_context5.next = 3;
|
|
292
|
+
return new Promise(function (resolve) {
|
|
293
|
+
nextMessage = resolve;
|
|
294
|
+
if (pendingResults.length) {
|
|
295
|
+
runNextMessage();
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
case 3:
|
|
299
|
+
result = _context5.sent;
|
|
300
|
+
return _context5.abrupt("return", callback(result, function () {
|
|
301
|
+
return _this3.subscribe(callback);
|
|
302
|
+
}));
|
|
303
|
+
case 5:
|
|
304
|
+
case "end":
|
|
305
|
+
return _context5.stop();
|
|
316
306
|
}
|
|
317
307
|
}, _callee5);
|
|
318
308
|
}))();
|
|
319
309
|
},
|
|
320
310
|
unsubscribe: function unsubscribe() {
|
|
321
|
-
return _asyncToGenerator__default['default'](
|
|
311
|
+
return _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee6() {
|
|
322
312
|
return _regeneratorRuntime__default['default'].wrap(function _callee6$(_context6) {
|
|
323
|
-
while (1) {
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
return _context6.stop();
|
|
333
|
-
}
|
|
313
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
314
|
+
case 0:
|
|
315
|
+
transport.sendMessage({
|
|
316
|
+
unsubscribe: message.messageId
|
|
317
|
+
});
|
|
318
|
+
delete transport.messageIdToSubscription[message.messageId];
|
|
319
|
+
case 2:
|
|
320
|
+
case "end":
|
|
321
|
+
return _context6.stop();
|
|
334
322
|
}
|
|
335
323
|
}, _callee6);
|
|
336
324
|
}))();
|
|
@@ -338,7 +326,6 @@ var WebSocketTransport = /*#__PURE__*/function () {
|
|
|
338
326
|
};
|
|
339
327
|
}
|
|
340
328
|
}]);
|
|
341
|
-
return WebSocketTransport;
|
|
342
329
|
}();
|
|
343
330
|
|
|
344
331
|
module.exports = WebSocketTransport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cubejs-client-ws-transport.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 // Flush send queue before sending close frame\n this.ws.sendQueue();\n\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","_ref","status","message","_classCallCheck","_defineProperty","result","_createClass","key","value","_json","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","abrupt","stop","json","apply","arguments","clone","_text","_callee2","_callee2$","_context2","JSON","stringify","text","WebSocketTransport","_ref2","authorization","apiUrl","heartBeatInterval","hearBeatInterval","token","console","warn","get","set","ws","close","_close","_callee3","_callee3$","_context3","sendQueue","initSocket","_this","initPromise","WebSocket","messageIdSent","sendMessage","messageId","send","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","onerror","_this2","unsubscribe","find","m","filter","push","setTimeout","_callee4","_callee4$","_context4","request","method","_ref4","baseRequestId","params","_objectWithoutProperties","_excluded","messageCounter","requestId","pendingResults","nextMessage","runNextMessage","pop","transport","subscribe","_this3","_callee5","_callee5$","_context5","sent","_callee6","_callee6$","_context6"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA,IASMA,wBAAwB;EAK5B,SAAAA,yBAAAC,IAAA,EAA+E;IAAA,IAA1DC,MAAM,GAAAD,IAAA,CAANC,MAAM;MAAEC,OAAO,GAAAF,IAAA,CAAPE,OAAO;IAAAC,mCAAA,OAAAJ,wBAAA;IAAAK,mCAAA;IAAAA,mCAAA;IAClC,IAAI,CAACH,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACI,MAAM,GAAGH,OAAO;;EACtBI,gCAAA,CAAAP,wBAAA;IAAAQ,GAAA;IAAAC,KAAA;MAAA,IAAAC,KAAA,GAAAC,qCAAA,eAAAC,uCAAA,CAAAC,IAAA,CAED,SAAAC;QAAA,OAAAF,uCAAA,CAAAG,IAAA,UAAAC,SAAAC,QAAA;UAAA;YAAA,QAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;cAAA;gBAAA,OAAAF,QAAA,CAAAG,MAAA,WACS,IAAI,CAACd,MAAM;cAAA;cAAA;gBAAA,OAAAW,QAAA,CAAAI,IAAA;;;WAAAP,OAAA;OACnB;MAAA,SAAAQ;QAAA,OAAAZ,KAAA,CAAAa,KAAA,OAAAC,SAAA;;MAAA,OAAAF,IAAA;;;IAAAd,GAAA;IAAAC,KAAA,EAED,SAAAgB,QAAe;;MAEb,OAAO,IAAI;;;IACZjB,GAAA;IAAAC,KAAA;MAAA,IAAAiB,KAAA,GAAAf,qCAAA,eAAAC,uCAAA,CAAAC,IAAA,CAED,SAAAc;QAAA,OAAAf,uCAAA,CAAAG,IAAA,UAAAa,UAAAC,SAAA;UAAA;YAAA,QAAAA,SAAA,CAAAX,IAAA,GAAAW,SAAA,CAAAV,IAAA;cAAA;gBAAA,OAAAU,SAAA,CAAAT,MAAA,WACS,OAAO,IAAI,CAACd,MAAM,KAAK,QAAQ,GAAG,IAAI,CAACA,MAAM,GAAGwB,IAAI,CAACC,SAAS,CAAC,IAAI,CAACzB,MAAM,CAAC;cAAA;cAAA;gBAAA,OAAAuB,SAAA,CAAAR,IAAA;;;WAAAM,QAAA;OACnF;MAAA,SAAAK;QAAA,OAAAN,KAAA,CAAAH,KAAA,OAAAC,SAAA;;MAAA,OAAAQ,IAAA;;;EAAA,OAAAhC,wBAAA;AAAA;IAuBGiC,kBAAkB;EAetB,SAAAA,mBAAAC,KAAA,EAA8G;IAAA,IAAzFC,aAAa,GAAAD,KAAA,CAAbC,aAAa;MAAEC,MAAM,GAAAF,KAAA,CAANE,MAAM;MAAEC,iBAAiB,GAAAH,KAAA,CAAjBG,iBAAiB;MAAEC,gBAAgB,GAAAJ,KAAA,CAAhBI,gBAAgB;IAAAlC,mCAAA,OAAA6B,kBAAA;IAAA5B,mCAAA;IAAAA,mCAAA,4BAZhC,EAAE;IAAAA,mCAAA;IAAAA,mCAAA,aAI7B,IAAI;IAAAA,mCAAA,yBAEW,CAAC;IAAAA,mCAAA,kCAE8B,EAAE;IAAAA,mCAAA,uBAEhC,EAAE;IAGpC,IAAI,CAACkC,KAAK,GAAGJ,aAAa;IAC1B,IAAI,CAACC,MAAM,GAAGA,MAAM;IAEpB,IAAIC,iBAAiB,EAAE;MACrB,IAAI,CAACA,iBAAiB,GAAGA,iBAAiB;KAC3C,MAAM,IAAIC,gBAAgB,EAAE;MAC3BE,OAAO,CAACC,IAAI,CAAC,8EAA8E,CAAC;MAC5F,IAAI,CAACJ,iBAAiB,GAAGC,gBAAgB;;;EAE5C/B,gCAAA,CAAA0B,kBAAA;IAAAzB,GAAA;IAAAkC,GAAA,EAmBD,SAAAA,MAA2B;MACzB,OAAO,IAAI,CAACH,KAAK;KAClB;IAAAI,GAAA,EAnBD,SAAAA,IAAyBJ,KAAK,EAAE;MAC9B,IAAI,CAACA,KAAK,GAAGA,KAAK;MAElB,IAAI,IAAI,CAACK,EAAE,EAAE;QACX,IAAI,CAACA,EAAE,CAACC,KAAK,EAAE;;;;IAElBrC,GAAA;IAAAC,KAAA;MAAA,IAAAqC,MAAA,GAAAnC,qCAAA,eAAAC,uCAAA,CAAAC,IAAA,CAED,SAAAkC;QAAA,OAAAnC,uCAAA,CAAAG,IAAA,UAAAiC,UAAAC,SAAA;UAAA;YAAA,QAAAA,SAAA,CAAA/B,IAAA,GAAA+B,SAAA,CAAA9B,IAAA;cAAA;gBACE,IAAI,IAAI,CAACyB,EAAE,EAAE;;kBAEX,IAAI,CAACA,EAAE,CAACM,SAAS,EAAE;kBAEnB,IAAI,CAACN,EAAE,CAACC,KAAK,EAAE;;cAChB;cAAA;gBAAA,OAAAI,SAAA,CAAA5B,IAAA;;;WAAA0B,QAAA;OACF;MAAA,SAAAF;QAAA,OAAAC,MAAA,CAAAvB,KAAA,OAAAC,SAAA;;MAAA,OAAAqB,KAAA;;;IAAArC,GAAA;IAAAC,KAAA,EAMD,SAAA0C,aAAuB;MAAA,IAAAC,KAAA;MACrB,IAAI,IAAI,CAACR,EAAE,EAAE;QACX,OAAO,IAAI,CAACA,EAAE,CAACS,WAAW;;MAG5B,IAAMT,EAAO,GAAG,IAAIU,6BAAS,CAAC,IAAI,CAAClB,MAAM,CAAC;MAE1CQ,EAAE,CAACW,aAAa,GAAG,EAAE;MAErBX,EAAE,CAACY,WAAW,GAAG,UAACrD,OAAY,EAAK;QACjC,IAAI,CAACA,OAAO,CAACsD,SAAS,IAAItD,OAAO,CAACsD,SAAS,IAAI,CAACb,EAAE,CAACW,aAAa,CAACpD,OAAO,CAACsD,SAAS,CAAC,EAAE;UACnFb,EAAE,CAACc,IAAI,CAAC5B,IAAI,CAACC,SAAS,CAAC5B,OAAO,CAAC,CAAC;UAChCyC,EAAE,CAACW,aAAa,CAACpD,OAAO,CAACsD,SAAS,CAAC,GAAG,IAAI;;OAE7C;MAEDb,EAAE,CAACM,SAAS,GAAG,YAAM;QACnBE,KAAI,CAACO,YAAY,CAACC,OAAO,CAAC,UAAAzD,OAAO;UAAA,OAAIyC,EAAE,CAACY,WAAW,CAACrD,OAAO,CAAC;UAAC;QAC7DiD,KAAI,CAACO,YAAY,GAAG,EAAE;OACvB;MAEDf,EAAE,CAACiB,SAAS,GAAG,YAAM;QACnB,IAAI,IAAIC,IAAI,EAAE,CAACC,OAAO,EAAE,GAAGnB,EAAE,CAACoB,oBAAoB,CAACD,OAAO,EAAE,GAAG,CAAC,GAAGX,KAAI,CAACf,iBAAiB,GAAG,IAAI,EAAE;UAChGO,EAAE,CAACC,KAAK,EAAE;SACX,MAAM;UACLoB,MAAM,CAACC,IAAI,CAACd,KAAI,CAACe,uBAAuB,CAAC,CAACP,OAAO,CAAC,UAAAH,SAAS,EAAI;;YAE7Db,EAAE,CAACY,WAAW,CAACJ,KAAI,CAACe,uBAAuB,CAACV,SAAS,CAAC,CAACtD,OAAO,CAAC;WAChE,CAAC;;OAEL;MAEDyC,EAAE,CAACoB,oBAAoB,GAAG,IAAIF,IAAI,EAAE;MAEpClB,EAAE,CAACS,WAAW,GAAG,IAAIe,OAAO,CAAO,UAAAC,OAAO,EAAI;QAC5CzB,EAAE,CAAC0B,MAAM,GAAG,YAAM;UAChB1B,EAAE,CAACY,WAAW,CAAC;YAAErB,aAAa,EAAEiB,KAAI,CAACjB;WAAe,CAAC;SACtD;QAEDS,EAAE,CAAC2B,SAAS,GAAG,UAACC,KAAU,EAAK;UAC7B5B,EAAE,CAACoB,oBAAoB,GAAG,IAAIF,IAAI,EAAE;UAEpC,IAAM3D,OAAY,GAAG2B,IAAI,CAAC2C,KAAK,CAACD,KAAK,CAACE,IAAI,CAAC;UAC3C,IAAIvE,OAAO,CAACwE,SAAS,EAAE;YACrB/B,EAAE,CAACiB,SAAS,EAAE;YACdjB,EAAE,CAACgC,cAAc,GAAGC,WAAW,CAAC,YAAM;cACpCjC,EAAE,CAACW,aAAa,GAAG,EAAE;cACrBX,EAAE,CAACiB,SAAS,EAAE;aACf,EAAET,KAAI,CAACf,iBAAiB,GAAG,IAAI,CAAC;YACjCgC,OAAO,EAAE;;UAGX,IAAIjB,KAAI,CAACe,uBAAuB,CAAChE,OAAO,CAACsD,SAAS,CAAC,EAAE;YACnDL,KAAI,CAACe,uBAAuB,CAAChE,OAAO,CAACsD,SAAS,CAAC,CAACqB,QAAQ,CACtD,IAAI9E,wBAAwB,CAACG,OAAO,CACtC,CAAC;;UAGHyC,EAAE,CAACM,SAAS,EAAE;SACf;QAEDN,EAAE,CAACmC,OAAO,GAAG,YAAM;UACjB,IAAInC,EAAE,IAAIA,EAAE,CAACoC,UAAU,KAAK1B,6BAAS,CAAC2B,MAAM,IAAIrC,EAAE,CAACoC,UAAU,KAAK1B,6BAAS,CAAC4B,OAAO,EAAE;YACnFtC,EAAE,CAACC,KAAK,EAAE;;UAEZ,IAAID,EAAE,CAACgC,cAAc,EAAE;YACrBO,aAAa,CAACvC,EAAE,CAACgC,cAAc,CAAC;YAChChC,EAAE,CAACgC,cAAc,GAAG,IAAI;;UAE1B,IAAIxB,KAAI,CAACR,EAAE,KAAKA,EAAE,EAAE;YAClBQ,KAAI,CAACR,EAAE,GAAG,IAAI;YACd,IAAIqB,MAAM,CAACC,IAAI,CAACd,KAAI,CAACe,uBAAuB,CAAC,CAACiB,MAAM,EAAE;cACpDhC,KAAI,CAACD,UAAU,EAAE;;;SAGtB;QAEDP,EAAE,CAACyC,OAAO,GAAGzC,EAAE,CAACmC,OAAO;OACxB,CAAC;MAEF,IAAI,CAACnC,EAAE,GAAGA,EAAE;MAEZ,OAAO,IAAI,CAACA,EAAE,CAACS,WAAW;;;IAC3B7C,GAAA;IAAAC,KAAA,EAED,SAAA+C,YAAsBrD,OAAY,EAAE;MAAA,IAAAmF,MAAA;MAClC,IAAInF,OAAO,CAACoF,WAAW,IAAI,IAAI,CAAC5B,YAAY,CAAC6B,IAAI,CAAC,UAAAC,CAAC;QAAA,OAAIA,CAAC,CAAChC,SAAS,KAAKtD,OAAO,CAACoF,WAAW;QAAC,EAAE;QAC3F,IAAI,CAAC5B,YAAY,GAAG,IAAI,CAACA,YAAY,CAAC+B,MAAM,CAAC,UAAAD,CAAC;UAAA,OAAIA,CAAC,CAAChC,SAAS,KAAKtD,OAAO,CAACoF,WAAW;UAAC;OACvF,MAAM;QACL,IAAI,CAAC5B,YAAY,CAACgC,IAAI,CAACxF,OAAO,CAAC;;MAGjCyF,UAAU,eAAAjF,qCAAA,eAAAC,uCAAA,CAAAC,IAAA,CAAC,SAAAgF;QAAA,OAAAjF,uCAAA,CAAAG,IAAA,UAAA+E,UAAAC,SAAA;UAAA;YAAA,QAAAA,SAAA,CAAA7E,IAAA,GAAA6E,SAAA,CAAA5E,IAAA;cAAA;gBAAA4E,SAAA,CAAA5E,IAAA;gBAAA,OACHmE,MAAI,CAACnC,UAAU,EAAE;cAAA;gBACvBmC,MAAI,CAAC1C,EAAE,CAACM,SAAS,EAAE;cAAC;cAAA;gBAAA,OAAA6C,SAAA,CAAA1E,IAAA;;;WAAAwE,QAAA;OACrB,IAAE,GAAG,CAAC;;;IACRrF,GAAA;IAAAC,KAAA,EAED,SAAAuF,QACEC,MAAc,EAAAC,KAAA,EAEgC;MAAA,IAD5CC,aAAa,GAAAD,KAAA,CAAbC,aAAa;QAAKC,MAAM,GAAAC,4CAAA,CAAAH,KAAA,EAAAI,SAAA;MAE1B,IAAMnG,OAAgB,GAAG;QACvBsD,SAAS,EAAE,IAAI,CAAC8C,cAAc,EAAE;QAChCC,SAAS,EAAEL,aAAa;QACxBF,MAAM,EAANA,MAAM;QACNG,MAAM,EAANA;OACD;MAED,IAAMK,cAA0C,GAAG,EAAE;MACrD,IAAIC,WAA0C,GAAG,IAAI;MAErD,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,GAAS;QAC3B,IAAID,WAAW,EAAE;UACfA,WAAW,CAACD,cAAc,CAACG,GAAG,EAAE,CAAC;UACjCF,WAAW,GAAG,IAAI;;OAErB;MAED,IAAI,CAACvC,uBAAuB,CAAChE,OAAO,CAACsD,SAAS,CAAC,GAAG;QAChDtD,OAAO,EAAPA,OAAO;QACP2E,QAAQ,EAAE,SAAAA,SAACxE,MAAM,EAAK;UACpBmG,cAAc,CAACd,IAAI,CAACrF,MAAM,CAAC;UAC3BqG,cAAc,EAAE;;OAEnB;MAED,IAAME,SAAS,GAAG,IAAI;MAEtB,OAAO;QACCC,SAAS,WAAAA,UAAChC,QAAQ,EAAE;UAAA,IAAAiC,MAAA;UAAA,OAAApG,qCAAA,eAAAC,uCAAA,CAAAC,IAAA,UAAAmG;YAAA,IAAA1G,MAAA;YAAA,OAAAM,uCAAA,CAAAG,IAAA,UAAAkG,UAAAC,SAAA;cAAA;gBAAA,QAAAA,SAAA,CAAAhG,IAAA,GAAAgG,SAAA,CAAA/F,IAAA;kBAAA;oBACxB0F,SAAS,CAACrD,WAAW,CAACrD,OAAO,CAAC;oBAAC+G,SAAA,CAAA/F,IAAA;oBAAA,OAEV,IAAIiD,OAAO,CAA2B,UAACC,OAAO,EAAK;sBACtEqC,WAAW,GAAGrC,OAAO;sBACrB,IAAIoC,cAAc,CAACrB,MAAM,EAAE;wBACzBuB,cAAc,EAAE;;qBAEnB,CAAC;kBAAA;oBALIrG,MAAM,GAAA4G,SAAA,CAAAC,IAAA;oBAAA,OAAAD,SAAA,CAAA9F,MAAA,WAOL0D,QAAQ,CAACxE,MAAM,EAAE;sBAAA,OAAMyG,MAAI,CAACD,SAAS,CAAChC,QAAQ,CAAC;sBAAC;kBAAA;kBAAA;oBAAA,OAAAoC,SAAA,CAAA7F,IAAA;;;eAAA2F,QAAA;;SACxD;QACKzB,WAAW,WAAAA,cAAG;UAAA,OAAA5E,qCAAA,eAAAC,uCAAA,CAAAC,IAAA,UAAAuG;YAAA,OAAAxG,uCAAA,CAAAG,IAAA,UAAAsG,UAAAC,SAAA;cAAA;gBAAA,QAAAA,SAAA,CAAApG,IAAA,GAAAoG,SAAA,CAAAnG,IAAA;kBAAA;oBAClB0F,SAAS,CAACrD,WAAW,CAAC;sBAAE+B,WAAW,EAAEpF,OAAO,CAACsD;qBAAW,CAAC;oBACzD,OAAOoD,SAAS,CAAC1C,uBAAuB,CAAChE,OAAO,CAACsD,SAAS,CAAC;kBAAC;kBAAA;oBAAA,OAAA6D,SAAA,CAAAjG,IAAA;;;eAAA+F,QAAA;;;OAE/D;;;EACF,OAAAnF,kBAAA;AAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"cubejs-client-ws-transport.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 // Flush send queue before sending close frame\n this.ws.sendQueue();\n\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","_ref","status","message","_classCallCheck","_defineProperty","result","_createClass","key","value","_json","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","abrupt","stop","json","apply","arguments","clone","_text","_callee2","_callee2$","_context2","JSON","stringify","text","WebSocketTransport","_ref2","authorization","apiUrl","heartBeatInterval","hearBeatInterval","token","console","warn","get","set","ws","close","_close","_callee3","_callee3$","_context3","sendQueue","initSocket","_this","initPromise","WebSocket","messageIdSent","sendMessage","messageId","send","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","onerror","_this2","unsubscribe","find","m","filter","push","setTimeout","_callee4","_callee4$","_context4","request","method","_ref4","baseRequestId","params","_objectWithoutProperties","_excluded","messageCounter","requestId","pendingResults","nextMessage","runNextMessage","pop","transport","subscribe","_this3","_callee5","_callee5$","_context5","sent","_callee6","_callee6$","_context6"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA,IASMA,wBAAwB;EAK5B,SAAAA,yBAAAC,IAAA,EAA+E;IAAA,IAA1DC,MAAM,GAAAD,IAAA,CAANC,MAAM;MAAEC,OAAO,GAAAF,IAAA,CAAPE,OAAO;IAAAC,mCAAA,OAAAJ,wBAAA;IAAAK,mCAAA;IAAAA,mCAAA;IAClC,IAAI,CAACH,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACI,MAAM,GAAGH,OAAO;;EACtB,OAAAI,gCAAA,CAAAP,wBAAA;IAAAQ,GAAA;IAAAC,KAAA;MAAA,IAAAC,KAAA,GAAAC,qCAAA,cAAAC,uCAAA,CAAAC,IAAA,CAED,SAAAC;QAAA,OAAAF,uCAAA,CAAAG,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cAAA,OAAAF,QAAA,CAAAG,MAAA,WACS,IAAI,CAACd,MAAM;YAAA;YAAA;cAAA,OAAAW,QAAA,CAAAI,IAAA;;WAAAP,OAAA;OACnB;MAAA,SAFYQ,IAAIA;QAAA,OAAAZ,KAAA,CAAAa,KAAA,OAAAC,SAAA;;MAAA,OAAJF,IAAI;;;IAAAd,GAAA;IAAAC,KAAA,EAIjB,SAAOgB,KAAKA,GAAG;;MAEb,OAAO,IAAI;;;IACZjB,GAAA;IAAAC,KAAA;MAAA,IAAAiB,KAAA,GAAAf,qCAAA,cAAAC,uCAAA,CAAAC,IAAA,CAED,SAAAc;QAAA,OAAAf,uCAAA,CAAAG,IAAA,UAAAa,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAAX,IAAA,GAAAW,SAAA,CAAAV,IAAA;YAAA;cAAA,OAAAU,SAAA,CAAAT,MAAA,WACS,OAAO,IAAI,CAACd,MAAM,KAAK,QAAQ,GAAG,IAAI,CAACA,MAAM,GAAGwB,IAAI,CAACC,SAAS,CAAC,IAAI,CAACzB,MAAM,CAAC;YAAA;YAAA;cAAA,OAAAuB,SAAA,CAAAR,IAAA;;WAAAM,QAAA;OACnF;MAAA,SAFYK,IAAIA;QAAA,OAAAN,KAAA,CAAAH,KAAA,OAAAC,SAAA;;MAAA,OAAJQ,IAAI;;;AAAA;IAyBbC,kBAAkB;EAetB,SAAAA,mBAAAC,KAAA,EAA8G;IAAA,IAAzFC,aAAa,GAAAD,KAAA,CAAbC,aAAa;MAAEC,MAAM,GAAAF,KAAA,CAANE,MAAM;MAAEC,iBAAiB,GAAAH,KAAA,CAAjBG,iBAAiB;MAAEC,gBAAgB,GAAAJ,KAAA,CAAhBI,gBAAgB;IAAAlC,mCAAA,OAAA6B,kBAAA;IAAA5B,mCAAA;IAAAA,mCAAA,4BAZhC,EAAE;IAAAA,mCAAA;IAAAA,mCAAA,aAI7B,IAAI;IAAAA,mCAAA,yBAEW,CAAC;IAAAA,mCAAA,kCAE8B,EAAE;IAAAA,mCAAA,uBAEhC,EAAE;IAGpC,IAAI,CAACkC,KAAK,GAAGJ,aAAa;IAC1B,IAAI,CAACC,MAAM,GAAGA,MAAM;IAEpB,IAAIC,iBAAiB,EAAE;MACrB,IAAI,CAACA,iBAAiB,GAAGA,iBAAiB;KAC3C,MAAM,IAAIC,gBAAgB,EAAE;MAC3BE,OAAO,CAACC,IAAI,CAAC,8EAA8E,CAAC;MAC5F,IAAI,CAACJ,iBAAiB,GAAGC,gBAAgB;;;EAE5C,OAAA/B,gCAAA,CAAA0B,kBAAA;IAAAzB,GAAA;IAAAkC,GAAA,EAmBD,SAAAA,MAA2B;MACzB,OAAO,IAAI,CAACH,KAAK;KAClB;IAAAI,GAAA,EAnBD,SAAAA,IAAyBJ,KAAK,EAAE;MAC9B,IAAI,CAACA,KAAK,GAAGA,KAAK;MAElB,IAAI,IAAI,CAACK,EAAE,EAAE;QACX,IAAI,CAACA,EAAE,CAACC,KAAK,EAAE;;;;IAElBrC,GAAA;IAAAC,KAAA;MAAA,IAAAqC,MAAA,GAAAnC,qCAAA,cAAAC,uCAAA,CAAAC,IAAA,CAED,SAAAkC;QAAA,OAAAnC,uCAAA,CAAAG,IAAA,UAAAiC,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAA/B,IAAA,GAAA+B,SAAA,CAAA9B,IAAA;YAAA;cACE,IAAI,IAAI,CAACyB,EAAE,EAAE;;gBAEX,IAAI,CAACA,EAAE,CAACM,SAAS,EAAE;gBAEnB,IAAI,CAACN,EAAE,CAACC,KAAK,EAAE;;YAChB;YAAA;cAAA,OAAAI,SAAA,CAAA5B,IAAA;;WAAA0B,QAAA;OACF;MAAA,SAPYF,KAAKA;QAAA,OAAAC,MAAA,CAAAvB,KAAA,OAAAC,SAAA;;MAAA,OAALqB,KAAK;;;IAAArC,GAAA;IAAAC,KAAA,EAalB,SAAU0C,UAAUA,GAAG;MAAA,IAAAC,KAAA;MACrB,IAAI,IAAI,CAACR,EAAE,EAAE;QACX,OAAO,IAAI,CAACA,EAAE,CAACS,WAAW;;MAG5B,IAAMT,EAAO,GAAG,IAAIU,6BAAS,CAAC,IAAI,CAAClB,MAAM,CAAC;MAE1CQ,EAAE,CAACW,aAAa,GAAG,EAAE;MAErBX,EAAE,CAACY,WAAW,GAAG,UAACrD,OAAY,EAAK;QACjC,IAAI,CAACA,OAAO,CAACsD,SAAS,IAAItD,OAAO,CAACsD,SAAS,IAAI,CAACb,EAAE,CAACW,aAAa,CAACpD,OAAO,CAACsD,SAAS,CAAC,EAAE;UACnFb,EAAE,CAACc,IAAI,CAAC5B,IAAI,CAACC,SAAS,CAAC5B,OAAO,CAAC,CAAC;UAChCyC,EAAE,CAACW,aAAa,CAACpD,OAAO,CAACsD,SAAS,CAAC,GAAG,IAAI;;OAE7C;MAEDb,EAAE,CAACM,SAAS,GAAG,YAAM;QACnBE,KAAI,CAACO,YAAY,CAACC,OAAO,CAAC,UAAAzD,OAAO;UAAA,OAAIyC,EAAE,CAACY,WAAW,CAACrD,OAAO,CAAC;UAAC;QAC7DiD,KAAI,CAACO,YAAY,GAAG,EAAE;OACvB;MAEDf,EAAE,CAACiB,SAAS,GAAG,YAAM;QACnB,IAAI,IAAIC,IAAI,EAAE,CAACC,OAAO,EAAE,GAAGnB,EAAE,CAACoB,oBAAoB,CAACD,OAAO,EAAE,GAAG,CAAC,GAAGX,KAAI,CAACf,iBAAiB,GAAG,IAAI,EAAE;UAChGO,EAAE,CAACC,KAAK,EAAE;SACX,MAAM;UACLoB,MAAM,CAACC,IAAI,CAACd,KAAI,CAACe,uBAAuB,CAAC,CAACP,OAAO,CAAC,UAAAH,SAAS,EAAI;;YAE7Db,EAAE,CAACY,WAAW,CAACJ,KAAI,CAACe,uBAAuB,CAACV,SAAS,CAAC,CAACtD,OAAO,CAAC;WAChE,CAAC;;OAEL;MAEDyC,EAAE,CAACoB,oBAAoB,GAAG,IAAIF,IAAI,EAAE;MAEpClB,EAAE,CAACS,WAAW,GAAG,IAAIe,OAAO,CAAO,UAAAC,OAAO,EAAI;QAC5CzB,EAAE,CAAC0B,MAAM,GAAG,YAAM;UAChB1B,EAAE,CAACY,WAAW,CAAC;YAAErB,aAAa,EAAEiB,KAAI,CAACjB;WAAe,CAAC;SACtD;QAEDS,EAAE,CAAC2B,SAAS,GAAG,UAACC,KAAU,EAAK;UAC7B5B,EAAE,CAACoB,oBAAoB,GAAG,IAAIF,IAAI,EAAE;UAEpC,IAAM3D,OAAY,GAAG2B,IAAI,CAAC2C,KAAK,CAACD,KAAK,CAACE,IAAI,CAAC;UAC3C,IAAIvE,OAAO,CAACwE,SAAS,EAAE;YACrB/B,EAAE,CAACiB,SAAS,EAAE;YACdjB,EAAE,CAACgC,cAAc,GAAGC,WAAW,CAAC,YAAM;cACpCjC,EAAE,CAACW,aAAa,GAAG,EAAE;cACrBX,EAAE,CAACiB,SAAS,EAAE;aACf,EAAET,KAAI,CAACf,iBAAiB,GAAG,IAAI,CAAC;YACjCgC,OAAO,EAAE;;UAGX,IAAIjB,KAAI,CAACe,uBAAuB,CAAChE,OAAO,CAACsD,SAAS,CAAC,EAAE;YACnDL,KAAI,CAACe,uBAAuB,CAAChE,OAAO,CAACsD,SAAS,CAAC,CAACqB,QAAQ,CACtD,IAAI9E,wBAAwB,CAACG,OAAO,CACtC,CAAC;;UAGHyC,EAAE,CAACM,SAAS,EAAE;SACf;QAEDN,EAAE,CAACmC,OAAO,GAAG,YAAM;UACjB,IAAInC,EAAE,IAAIA,EAAE,CAACoC,UAAU,KAAK1B,6BAAS,CAAC2B,MAAM,IAAIrC,EAAE,CAACoC,UAAU,KAAK1B,6BAAS,CAAC4B,OAAO,EAAE;YACnFtC,EAAE,CAACC,KAAK,EAAE;;UAEZ,IAAID,EAAE,CAACgC,cAAc,EAAE;YACrBO,aAAa,CAACvC,EAAE,CAACgC,cAAc,CAAC;YAChChC,EAAE,CAACgC,cAAc,GAAG,IAAI;;UAE1B,IAAIxB,KAAI,CAACR,EAAE,KAAKA,EAAE,EAAE;YAClBQ,KAAI,CAACR,EAAE,GAAG,IAAI;YACd,IAAIqB,MAAM,CAACC,IAAI,CAACd,KAAI,CAACe,uBAAuB,CAAC,CAACiB,MAAM,EAAE;cACpDhC,KAAI,CAACD,UAAU,EAAE;;;SAGtB;QAEDP,EAAE,CAACyC,OAAO,GAAGzC,EAAE,CAACmC,OAAO;OACxB,CAAC;MAEF,IAAI,CAACnC,EAAE,GAAGA,EAAE;MAEZ,OAAO,IAAI,CAACA,EAAE,CAACS,WAAW;;;IAC3B7C,GAAA;IAAAC,KAAA,EAED,SAAU+C,WAAWA,CAACrD,OAAY,EAAE;MAAA,IAAAmF,MAAA;MAClC,IAAInF,OAAO,CAACoF,WAAW,IAAI,IAAI,CAAC5B,YAAY,CAAC6B,IAAI,CAAC,UAAAC,CAAC;QAAA,OAAIA,CAAC,CAAChC,SAAS,KAAKtD,OAAO,CAACoF,WAAW;QAAC,EAAE;QAC3F,IAAI,CAAC5B,YAAY,GAAG,IAAI,CAACA,YAAY,CAAC+B,MAAM,CAAC,UAAAD,CAAC;UAAA,OAAIA,CAAC,CAAChC,SAAS,KAAKtD,OAAO,CAACoF,WAAW;UAAC;OACvF,MAAM;QACL,IAAI,CAAC5B,YAAY,CAACgC,IAAI,CAACxF,OAAO,CAAC;;MAGjCyF,UAAU,cAAAjF,qCAAA,cAAAC,uCAAA,CAAAC,IAAA,CAAC,SAAAgF;QAAA,OAAAjF,uCAAA,CAAAG,IAAA,UAAA+E,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAA7E,IAAA,GAAA6E,SAAA,CAAA5E,IAAA;YAAA;cAAA4E,SAAA,CAAA5E,IAAA;cAAA,OACHmE,MAAI,CAACnC,UAAU,EAAE;YAAA;cACvBmC,MAAI,CAAC1C,EAAE,CAACM,SAAS,EAAE;YAAC;YAAA;cAAA,OAAA6C,SAAA,CAAA1E,IAAA;;WAAAwE,QAAA;OACrB,IAAE,GAAG,CAAC;;;IACRrF,GAAA;IAAAC,KAAA,EAED,SAAOuF,OAAOA,CACZC,MAAc,EAAAC,KAAA,EAEgC;MAAA,IAD5CC,aAAa,GAAAD,KAAA,CAAbC,aAAa;QAAKC,MAAM,GAAAC,4CAAA,CAAAH,KAAA,EAAAI,SAAA;MAE1B,IAAMnG,OAAgB,GAAG;QACvBsD,SAAS,EAAE,IAAI,CAAC8C,cAAc,EAAE;QAChCC,SAAS,EAAEL,aAAa;QACxBF,MAAM,EAANA,MAAM;QACNG,MAAM,EAANA;OACD;MAED,IAAMK,cAA0C,GAAG,EAAE;MACrD,IAAIC,WAA0C,GAAG,IAAI;MAErD,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,GAAS;QAC3B,IAAID,WAAW,EAAE;UACfA,WAAW,CAACD,cAAc,CAACG,GAAG,EAAE,CAAC;UACjCF,WAAW,GAAG,IAAI;;OAErB;MAED,IAAI,CAACvC,uBAAuB,CAAChE,OAAO,CAACsD,SAAS,CAAC,GAAG;QAChDtD,OAAO,EAAPA,OAAO;QACP2E,QAAQ,EAAE,SAAVA,QAAQA,CAAGxE,MAAM,EAAK;UACpBmG,cAAc,CAACd,IAAI,CAACrF,MAAM,CAAC;UAC3BqG,cAAc,EAAE;;OAEnB;MAED,IAAME,SAAS,GAAG,IAAI;MAEtB,OAAO;QACCC,SAAS,WAATA,SAASA,CAAChC,QAAQ,EAAE;UAAA,IAAAiC,MAAA;UAAA,OAAApG,qCAAA,cAAAC,uCAAA,CAAAC,IAAA,UAAAmG;YAAA,IAAA1G,MAAA;YAAA,OAAAM,uCAAA,CAAAG,IAAA,UAAAkG,UAAAC,SAAA;cAAA,kBAAAA,SAAA,CAAAhG,IAAA,GAAAgG,SAAA,CAAA/F,IAAA;gBAAA;kBACxB0F,SAAS,CAACrD,WAAW,CAACrD,OAAO,CAAC;kBAAC+G,SAAA,CAAA/F,IAAA;kBAAA,OAEV,IAAIiD,OAAO,CAA2B,UAACC,OAAO,EAAK;oBACtEqC,WAAW,GAAGrC,OAAO;oBACrB,IAAIoC,cAAc,CAACrB,MAAM,EAAE;sBACzBuB,cAAc,EAAE;;mBAEnB,CAAC;gBAAA;kBALIrG,MAAM,GAAA4G,SAAA,CAAAC,IAAA;kBAAA,OAAAD,SAAA,CAAA9F,MAAA,WAOL0D,QAAQ,CAACxE,MAAM,EAAE;oBAAA,OAAMyG,MAAI,CAACD,SAAS,CAAChC,QAAQ,CAAC;oBAAC;gBAAA;gBAAA;kBAAA,OAAAoC,SAAA,CAAA7F,IAAA;;eAAA2F,QAAA;;SACxD;QACKzB,WAAW,WAAXA,WAAWA,GAAG;UAAA,OAAA5E,qCAAA,cAAAC,uCAAA,CAAAC,IAAA,UAAAuG;YAAA,OAAAxG,uCAAA,CAAAG,IAAA,UAAAsG,UAAAC,SAAA;cAAA,kBAAAA,SAAA,CAAApG,IAAA,GAAAoG,SAAA,CAAAnG,IAAA;gBAAA;kBAClB0F,SAAS,CAACrD,WAAW,CAAC;oBAAE+B,WAAW,EAAEpF,OAAO,CAACsD;mBAAW,CAAC;kBACzD,OAAOoD,SAAS,CAAC1C,uBAAuB,CAAChE,OAAO,CAACsD,SAAS,CAAC;gBAAC;gBAAA;kBAAA,OAAA6D,SAAA,CAAAjG,IAAA;;eAAA+F,QAAA;;;OAE/D;;;AACF;;;;"}
|