@gitpod/gitpod-protocol 0.1.5-sje-installer-helm.1 → 0.1.5-sje-installer-helm.3

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.
@@ -1,7 +1,7 @@
1
1
  import { Logger } from "vscode-ws-jsonrpc";
2
2
  import { JsonRpcProxy } from "../proxy-factory";
3
- import { ConnectionHandler } from "../handler";
4
- import ReconnectingWebSocket from 'reconnecting-websocket';
3
+ import { ConnectionEventHandler, ConnectionHandler } from "../handler";
4
+ import ReconnectingWebSocket, { Event } from 'reconnecting-websocket';
5
5
  export interface WebSocketOptions {
6
6
  onerror?: (event: Event) => void;
7
7
  onListening?: (socket: ReconnectingWebSocket) => void;
@@ -18,7 +18,7 @@ export declare class WebSocketConnectionProvider {
18
18
  /**
19
19
  * Install a connection handler for the given path.
20
20
  */
21
- listen(handler: ConnectionHandler, options?: WebSocketOptions): WebSocket;
21
+ listen(handler: ConnectionHandler, eventHandler: ConnectionEventHandler, options?: WebSocketOptions): WebSocket;
22
22
  protected createLogger(): Logger;
23
23
  /**
24
24
  * Creates a web socket for the given url
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/messaging/browser/connection.ts"],"names":[],"mappings":"AAOA,OAAO,EAAsB,MAAM,EAAiB,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAuB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,qBAAqB,MAAM,wBAAwB,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACzD;AAED,qBAAa,2BAA2B;IAEpC;;;;;;OAMG;IACH,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,YAAY,CAAC,CAAC,CAAC;IAsB3H;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS;IAuBzE,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhC;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;CAW1C"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/messaging/browser/connection.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAuC,MAAM,mBAAmB,CAAC;AAIhF,OAAO,EAAuB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,qBAAqB,EAAE,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACzD;AAED,qBAAa,2BAA2B;IAEpC;;;;;;OAMG;IACH,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,YAAY,CAAC,CAAC,CAAC;IAyB3H;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS;IAwB/G,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhC;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;CAW1C"}
@@ -5,9 +5,56 @@
5
5
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
6
6
  * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
7
7
  */
8
+ var __extends = (this && this.__extends) || (function () {
9
+ var extendStatics = function (d, b) {
10
+ extendStatics = Object.setPrototypeOf ||
11
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
12
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
13
+ return extendStatics(d, b);
14
+ };
15
+ return function (d, b) {
16
+ extendStatics(d, b);
17
+ function __() { this.constructor = d; }
18
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
19
+ };
20
+ })();
21
+ var __read = (this && this.__read) || function (o, n) {
22
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
23
+ if (!m) return o;
24
+ var i = m.call(o), r, ar = [], e;
25
+ try {
26
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
27
+ }
28
+ catch (error) { e = { error: error }; }
29
+ finally {
30
+ try {
31
+ if (r && !r.done && (m = i["return"])) m.call(i);
32
+ }
33
+ finally { if (e) throw e.error; }
34
+ }
35
+ return ar;
36
+ };
37
+ var __spread = (this && this.__spread) || function () {
38
+ for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
39
+ return ar;
40
+ };
41
+ var __values = (this && this.__values) || function(o) {
42
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
43
+ if (m) return m.call(o);
44
+ if (o && typeof o.length === "number") return {
45
+ next: function () {
46
+ if (o && i >= o.length) o = void 0;
47
+ return { value: o && o[i++], done: !o };
48
+ }
49
+ };
50
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
51
+ };
8
52
  Object.defineProperty(exports, "__esModule", { value: true });
9
53
  exports.WebSocketConnectionProvider = void 0;
10
54
  var vscode_ws_jsonrpc_1 = require("vscode-ws-jsonrpc");
55
+ var vscode_jsonrpc_1 = require("vscode-jsonrpc");
56
+ var messageWriter_1 = require("vscode-jsonrpc/lib/messageWriter");
57
+ var messageReader_1 = require("vscode-jsonrpc/lib/messageReader");
11
58
  var proxy_factory_1 = require("../proxy-factory");
12
59
  var reconnecting_websocket_1 = require("reconnecting-websocket");
13
60
  var WebSocketConnectionProvider = /** @class */ (function () {
@@ -26,7 +73,10 @@ var WebSocketConnectionProvider = /** @class */ (function () {
26
73
  var startListening = function (path) {
27
74
  var socket = _this.listen({
28
75
  path: path,
29
- onConnection: function (c) { return factory.listen(c); }
76
+ onConnection: function (c) { return factory.listen(c); },
77
+ }, {
78
+ onTransportDidClose: function () { return factory.fireConnectionClosed(); },
79
+ onTransportDidOpen: function () { return factory.fireConnectionOpened(); },
30
80
  }, options);
31
81
  if (options === null || options === void 0 ? void 0 : options.onListening) {
32
82
  options.onListening(socket);
@@ -43,7 +93,7 @@ var WebSocketConnectionProvider = /** @class */ (function () {
43
93
  /**
44
94
  * Install a connection handler for the given path.
45
95
  */
46
- WebSocketConnectionProvider.prototype.listen = function (handler, options) {
96
+ WebSocketConnectionProvider.prototype.listen = function (handler, eventHandler, options) {
47
97
  var url = handler.path;
48
98
  var webSocket = this.createWebSocket(url);
49
99
  var logger = this.createLogger();
@@ -58,11 +108,7 @@ var WebSocketConnectionProvider = /** @class */ (function () {
58
108
  logger.error(JSON.stringify(error));
59
109
  });
60
110
  }
61
- vscode_ws_jsonrpc_1.listen({
62
- webSocket: webSocket,
63
- onConnection: function (connection) { return handler.onConnection(connection); },
64
- logger: logger
65
- });
111
+ doListen(webSocket, handler, eventHandler, logger);
66
112
  return webSocket;
67
113
  };
68
114
  WebSocketConnectionProvider.prototype.createLogger = function () {
@@ -84,4 +130,160 @@ var WebSocketConnectionProvider = /** @class */ (function () {
84
130
  return WebSocketConnectionProvider;
85
131
  }());
86
132
  exports.WebSocketConnectionProvider = WebSocketConnectionProvider;
133
+ // The following was extracted from vscode-ws-jsonrpc to make these changes:
134
+ // - switch from WebSocket to ReconnectingWebSocket
135
+ // - webSocket.onopen: making sure it's only ever called once so we're re-using MessageConnection
136
+ // - WebSocketMessageWriter: buffer and re-try messages instead of throwing an error immidiately
137
+ // - WebSocketMessageReader: don't close MessageConnection on 'socket.onclose'
138
+ function doListen(resocket, handler, eventHandler, logger) {
139
+ resocket.addEventListener("close", function () { return eventHandler.onTransportDidClose(); });
140
+ var alreadyOpened = false;
141
+ resocket.onopen = function () {
142
+ // trigerr "open" every time we re-open the underlying websocket
143
+ eventHandler.onTransportDidOpen();
144
+ // make sure we're only ever creating one MessageConnection, irregardless of how many times we have to re-open the underlying (reconnecting) websocket
145
+ if (alreadyOpened) {
146
+ return;
147
+ }
148
+ alreadyOpened = true;
149
+ var connection = createWebSocketConnection(resocket, logger);
150
+ handler.onConnection(connection);
151
+ };
152
+ }
153
+ function createWebSocketConnection(resocket, logger) {
154
+ var socket = vscode_ws_jsonrpc_1.toSocket(resocket);
155
+ var messageReader = new NonClosingWebSocketMessageReader(socket);
156
+ var messageWriter = new BufferingWebSocketMessageWriter(resocket, logger);
157
+ var connection = vscode_jsonrpc_1.createMessageConnection(messageReader, messageWriter, logger);
158
+ connection.onClose(function () { return connection.dispose(); });
159
+ return connection;
160
+ }
161
+ /**
162
+ * This takes vscode-ws-jsonrpc/lib/socket/writer/WebSocketMessageWriter and adds a buffer
163
+ */
164
+ var BufferingWebSocketMessageWriter = /** @class */ (function (_super) {
165
+ __extends(BufferingWebSocketMessageWriter, _super);
166
+ function BufferingWebSocketMessageWriter(socket, logger) {
167
+ var _this = _super.call(this) || this;
168
+ _this.errorCount = 0;
169
+ _this.buffer = [];
170
+ _this.socket = socket;
171
+ _this.logger = logger;
172
+ socket.addEventListener("open", function (event) { return _this.flushBuffer(); });
173
+ return _this;
174
+ }
175
+ BufferingWebSocketMessageWriter.prototype.write = function (msg) {
176
+ if (this.socket.readyState !== reconnecting_websocket_1.default.OPEN) {
177
+ this.bufferMsg(msg);
178
+ return;
179
+ }
180
+ try {
181
+ var content = JSON.stringify(msg);
182
+ this.socket.send(content);
183
+ }
184
+ catch (e) {
185
+ this.errorCount++;
186
+ this.fireError(e, msg, this.errorCount);
187
+ this.bufferMsg(msg);
188
+ }
189
+ };
190
+ BufferingWebSocketMessageWriter.prototype.flushBuffer = function () {
191
+ var e_1, _a;
192
+ if (this.buffer.length === 0) {
193
+ return;
194
+ }
195
+ var buffer = __spread(this.buffer);
196
+ this.buffer = [];
197
+ try {
198
+ for (var buffer_1 = __values(buffer), buffer_1_1 = buffer_1.next(); !buffer_1_1.done; buffer_1_1 = buffer_1.next()) {
199
+ var msg = buffer_1_1.value;
200
+ this.write(msg);
201
+ }
202
+ }
203
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
204
+ finally {
205
+ try {
206
+ if (buffer_1_1 && !buffer_1_1.done && (_a = buffer_1.return)) _a.call(buffer_1);
207
+ }
208
+ finally { if (e_1) throw e_1.error; }
209
+ }
210
+ //this.logger.info(`flushed buffer (${this.buffer.length})`)
211
+ };
212
+ BufferingWebSocketMessageWriter.prototype.bufferMsg = function (msg) {
213
+ this.buffer.push(msg);
214
+ //this.logger.info(`buffered message (${this.buffer.length})`);
215
+ };
216
+ return BufferingWebSocketMessageWriter;
217
+ }(messageWriter_1.AbstractMessageWriter));
218
+ /**
219
+ * This takes vscode-ws-jsonrpc/lib/socket/reader/WebSocketMessageReader and removes the "onClose -> fireClose" connection
220
+ */
221
+ var NonClosingWebSocketMessageReader = /** @class */ (function (_super) {
222
+ __extends(NonClosingWebSocketMessageReader, _super);
223
+ function NonClosingWebSocketMessageReader(socket) {
224
+ var _this = _super.call(this) || this;
225
+ _this.events = [];
226
+ _this.state = 'initial';
227
+ _this.callback = function () { };
228
+ _this.socket = socket;
229
+ _this.socket.onMessage(function (message) { return _this.readMessage(message); });
230
+ _this.socket.onError(function (error) { return _this.fireError(error); });
231
+ _this.socket.onClose(function (code, reason) {
232
+ if (code !== 1000) {
233
+ var error = {
234
+ name: '' + code,
235
+ message: "Error during socket reconnect: code = " + code + ", reason = " + reason
236
+ };
237
+ _this.fireError(error);
238
+ }
239
+ // this.fireClose(); // <-- reason for this class to be copied over
240
+ });
241
+ return _this;
242
+ }
243
+ NonClosingWebSocketMessageReader.prototype.listen = function (callback) {
244
+ if (this.state === 'initial') {
245
+ this.state = 'listening';
246
+ this.callback = callback;
247
+ while (this.events.length !== 0) {
248
+ var event_1 = this.events.pop();
249
+ if (event_1.message) {
250
+ this.readMessage(event_1.message);
251
+ }
252
+ else if (event_1.error) {
253
+ this.fireError(event_1.error);
254
+ }
255
+ else {
256
+ this.fireClose();
257
+ }
258
+ }
259
+ }
260
+ };
261
+ NonClosingWebSocketMessageReader.prototype.readMessage = function (message) {
262
+ if (this.state === 'initial') {
263
+ this.events.splice(0, 0, { message: message });
264
+ }
265
+ else if (this.state === 'listening') {
266
+ var data = JSON.parse(message);
267
+ this.callback(data);
268
+ }
269
+ };
270
+ NonClosingWebSocketMessageReader.prototype.fireError = function (error) {
271
+ if (this.state === 'initial') {
272
+ this.events.splice(0, 0, { error: error });
273
+ }
274
+ else if (this.state === 'listening') {
275
+ _super.prototype.fireError.call(this, error);
276
+ }
277
+ };
278
+ NonClosingWebSocketMessageReader.prototype.fireClose = function () {
279
+ if (this.state === 'initial') {
280
+ this.events.splice(0, 0, {});
281
+ }
282
+ else if (this.state === 'listening') {
283
+ _super.prototype.fireClose.call(this);
284
+ }
285
+ this.state = 'closed';
286
+ };
287
+ return NonClosingWebSocketMessageReader;
288
+ }(messageReader_1.AbstractMessageReader));
87
289
  //# sourceMappingURL=connection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/messaging/browser/connection.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,uDAA8E;AAC9E,kDAAqE;AAErE,iEAA2D;AAO3D;IAAA;IA2EA,CAAC;IAzEG;;;;;;OAMG;IACH,iDAAW,GAAX,UAA8B,IAA8B,EAAE,MAAe,EAAE,OAA0B;QAAzG,iBAoBC;QAnBG,IAAM,OAAO,GAAG,IAAI,mCAAmB,CAAI,MAAM,CAAC,CAAC;QACnD,IAAM,cAAc,GAAG,UAAC,IAAY;YAChC,IAAM,MAAM,GAAG,KAAI,CAAC,MAAM,CAAC;gBACvB,IAAI,MAAA;gBACJ,YAAY,EAAE,UAAA,CAAC,IAAI,OAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAjB,CAAiB;aACvC,EACG,OAAO,CACV,CAAC;YACF,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,EAAE;gBACtB,OAAO,CAAC,WAAW,CAAC,MAAsC,CAAC,CAAA;aAC9D;QACL,CAAC,CAAC;QAEF,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC1B,cAAc,CAAC,IAAI,CAAC,CAAC;SACxB;aAAM;YACH,IAAI,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,cAAc,CAAC,IAAI,CAAC,EAApB,CAAoB,CAAC,CAAC;SAC3C;QACD,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,4CAAM,GAAN,UAAO,OAA0B,EAAE,OAA0B;QACzD,IAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAE5C,IAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACnC,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;YAC5B,IAAM,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAChC,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAC,KAAK;gBACtC,SAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;SACN;aAAM;YACH,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAC,KAAY;gBAC7C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;SACN;QACD,0BAAQ,CAAC;YACL,SAAS,WAAA;YACT,YAAY,EAAE,UAAA,UAAU,IAAI,OAAA,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,EAAhC,CAAgC;YAC5D,MAAM,QAAA;SACT,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACrB,CAAC;IAES,kDAAY,GAAtB;QACI,OAAO,IAAI,iCAAa,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,qDAAe,GAAf,UAAgB,GAAW;QACvB,OAAO,IAAI,gCAAqB,CAAC,GAAG,EAAE,SAAS,EAAE;YAC7C,oBAAoB,EAAE,KAAK;YAC3B,oBAAoB,EAAE,IAAI;YAC1B,2BAA2B,EAAE,GAAG;YAChC,UAAU,EAAE,QAAQ;YACpB,KAAK,EAAE,KAAK;YACZ,SAAS,EAAE,SAAS;SACvB,CAAQ,CAAC;IACd,CAAC;IAEL,kCAAC;AAAD,CAAC,AA3ED,IA2EC;AA3EY,kEAA2B"}
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/messaging/browser/connection.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uDAAgF;AAChF,iDAAyD;AACzD,kEAAyE;AACzE,kEAAyE;AACzE,kDAAqE;AAErE,iEAAsE;AAOtE;IAAA;IA+EA,CAAC;IA7EG;;;;;;OAMG;IACH,iDAAW,GAAX,UAA8B,IAA8B,EAAE,MAAe,EAAE,OAA0B;QAAzG,iBAuBC;QAtBG,IAAM,OAAO,GAAG,IAAI,mCAAmB,CAAI,MAAM,CAAC,CAAC;QACnD,IAAM,cAAc,GAAG,UAAC,IAAY;YAChC,IAAM,MAAM,GAAG,KAAI,CAAC,MAAM,CAAC;gBACvB,IAAI,MAAA;gBACJ,YAAY,EAAE,UAAA,CAAC,IAAI,OAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAjB,CAAiB;aACvC,EAAE;gBACC,mBAAmB,EAAE,cAAM,OAAA,OAAO,CAAC,oBAAoB,EAAE,EAA9B,CAA8B;gBACzD,kBAAkB,EAAE,cAAM,OAAA,OAAO,CAAC,oBAAoB,EAAE,EAA9B,CAA8B;aAC3D,EACG,OAAO,CACV,CAAC;YACF,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,EAAE;gBACtB,OAAO,CAAC,WAAW,CAAC,MAAsC,CAAC,CAAA;aAC9D;QACL,CAAC,CAAC;QAEF,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC1B,cAAc,CAAC,IAAI,CAAC,CAAC;SACxB;aAAM;YACH,IAAI,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,cAAc,CAAC,IAAI,CAAC,EAApB,CAAoB,CAAC,CAAC;SAC3C;QACD,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,4CAAM,GAAN,UAAO,OAA0B,EAAE,YAAoC,EAAE,OAA0B;QAC/F,IAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAE5C,IAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACnC,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;YAC5B,IAAM,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAChC,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAC,KAAK;gBACtC,SAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;SACN;aAAM;YACH,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAC,KAAY;gBAC7C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;SACN;QACD,QAAQ,CACJ,SAAyC,EACzC,OAAO,EACP,YAAY,EACZ,MAAM,CACT,CAAC;QACF,OAAO,SAAS,CAAC;IACrB,CAAC;IAES,kDAAY,GAAtB;QACI,OAAO,IAAI,iCAAa,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,qDAAe,GAAf,UAAgB,GAAW;QACvB,OAAO,IAAI,gCAAqB,CAAC,GAAG,EAAE,SAAS,EAAE;YAC7C,oBAAoB,EAAE,KAAK;YAC3B,oBAAoB,EAAE,IAAI;YAC1B,2BAA2B,EAAE,GAAG;YAChC,UAAU,EAAE,QAAQ;YACpB,KAAK,EAAE,KAAK;YACZ,SAAS,EAAE,SAAS;SACvB,CAAQ,CAAC;IACd,CAAC;IAEL,kCAAC;AAAD,CAAC,AA/ED,IA+EC;AA/EY,kEAA2B;AAiFxC,4EAA4E;AAC5E,oDAAoD;AACpD,kGAAkG;AAClG,iGAAiG;AACjG,+EAA+E;AAC/E,SAAS,QAAQ,CAAC,QAA+B,EAAE,OAA0B,EAAE,YAAoC,EAAE,MAAc;IAC/H,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAM,OAAA,YAAY,CAAC,mBAAmB,EAAE,EAAlC,CAAkC,CAAC,CAAC;IAE7E,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,QAAQ,CAAC,MAAM,GAAG;QACd,gEAAgE;QAChE,YAAY,CAAC,kBAAkB,EAAE,CAAC;QAElC,sJAAsJ;QACtJ,IAAI,aAAa,EAAE;YACf,OAAO;SACV;QACD,aAAa,GAAG,IAAI,CAAC;QAErB,IAAM,UAAU,GAAG,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/D,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,yBAAyB,CAAC,QAA+B,EAAE,MAAc;IAC9E,IAAM,MAAM,GAAG,4BAAQ,CAAC,QAAe,CAAC,CAAC;IACzC,IAAM,aAAa,GAAG,IAAI,gCAAgC,CAAC,MAAM,CAAC,CAAC;IACnE,IAAM,aAAa,GAAG,IAAI,+BAA+B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5E,IAAM,UAAU,GAAG,wCAAuB,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IACjF,UAAU,CAAC,OAAO,CAAC,cAAM,OAAA,UAAU,CAAC,OAAO,EAAE,EAApB,CAAoB,CAAC,CAAC;IAC/C,OAAO,UAAU,CAAC;AACtB,CAAC;AAED;;GAEG;AACH;IAA8C,mDAAqB;IAO/D,yCAAY,MAA6B,EAAE,MAAc;QAAzD,YACI,iBAAO,SAKV;QAVS,gBAAU,GAAW,CAAC,CAAC;QAEvB,YAAM,GAAU,EAAE,CAAC;QAIzB,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAC,KAAY,IAAK,OAAA,KAAI,CAAC,WAAW,EAAE,EAAlB,CAAkB,CAAC,CAAC;;IAC1E,CAAC;IAED,+CAAK,GAAL,UAAM,GAAQ;QACV,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,gCAAqB,CAAC,IAAI,EAAE;YACvD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACpB,OAAO;SACV;QAED,IAAI;YACA,IAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC7B;QAAC,OAAO,CAAC,EAAE;YACR,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAExC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;SACvB;IACL,CAAC;IAES,qDAAW,GAArB;;QACI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1B,OAAM;SACT;QAED,IAAM,MAAM,YAAO,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;;YACjB,KAAkB,IAAA,WAAA,SAAA,MAAM,CAAA,8BAAA,kDAAE;gBAArB,IAAM,GAAG,mBAAA;gBACV,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACnB;;;;;;;;;QACD,4DAA4D;IAChE,CAAC;IAES,mDAAS,GAAnB,UAAoB,GAAQ;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,+DAA+D;IACnE,CAAC;IACL,sCAAC;AAAD,CAAC,AAjDD,CAA8C,qCAAqB,GAiDlE;AAGD;;GAEG;AACH;IAA+C,oDAAqB;IAMhE,0CAAY,MAAkB;QAA9B,YACI,iBAAO,SAcV;QAnBkB,YAAM,GAAU,EAAE,CAAC;QAC5B,WAAK,GAAuC,SAAS,CAAC;QACtD,cAAQ,GAA2B,cAAO,CAAC,CAAC;QAIlD,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,KAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAA,OAAO,IAAI,OAAA,KAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAzB,CAAyB,CAAC,CAAC;QAC5D,KAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAA,KAAK,IAAI,OAAA,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAArB,CAAqB,CAAC,CAAC;QACpD,KAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,MAAM;YAC7B,IAAI,IAAI,KAAK,IAAI,EAAE;gBACf,IAAM,KAAK,GAAG;oBACV,IAAI,EAAE,EAAE,GAAG,IAAI;oBACf,OAAO,EAAE,2CAAyC,IAAI,mBAAc,MAAQ;iBAC/E,CAAC;gBACF,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;aACzB;YACD,0EAA0E;QAC9E,CAAC,CAAC,CAAC;;IACP,CAAC;IACD,iDAAM,GAAN,UAAO,QAAgC;QACnC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC1B,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC7B,IAAM,OAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBAChC,IAAI,OAAK,CAAC,OAAO,EAAE;oBACf,IAAI,CAAC,WAAW,CAAC,OAAK,CAAC,OAAO,CAAC,CAAC;iBACnC;qBACI,IAAI,OAAK,CAAC,KAAK,EAAE;oBAClB,IAAI,CAAC,SAAS,CAAC,OAAK,CAAC,KAAK,CAAC,CAAC;iBAC/B;qBACI;oBACD,IAAI,CAAC,SAAS,EAAE,CAAC;iBACpB;aACJ;SACJ;IACL,CAAC;IACD,sDAAW,GAAX,UAAY,OAAY;QACpB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,SAAA,EAAE,CAAC,CAAC;SACzC;aACI,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE;YACjC,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SACvB;IACL,CAAC;IACD,oDAAS,GAAT,UAAU,KAAU;QAChB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,OAAA,EAAE,CAAC,CAAC;SACvC;aACI,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE;YACjC,iBAAM,SAAS,YAAC,KAAK,CAAC,CAAC;SAC1B;IACL,CAAC;IACD,oDAAS,GAAT;QACI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;SAChC;aACI,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE;YACjC,iBAAM,SAAS,WAAE,CAAC;SACrB;QACD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;IAC1B,CAAC;IACL,uCAAC;AAAD,CAAC,AAlED,CAA+C,qCAAqB,GAkEnE"}
@@ -4,4 +4,14 @@ export interface ConnectionHandler {
4
4
  readonly path: string;
5
5
  onConnection(connection: MessageConnection, session?: object): void;
6
6
  }
7
+ export interface ConnectionEventHandler {
8
+ /**
9
+ * Called when the transport underpinning the connection got closed
10
+ */
11
+ onTransportDidClose(): void;
12
+ /**
13
+ * Called when the transport underpinning the connection is (re-)opened
14
+ */
15
+ onTransportDidOpen(): void;
16
+ }
7
17
  //# sourceMappingURL=handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/messaging/handler.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,eAAO,MAAM,iBAAiB,eAA8B,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,UAAU,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvE"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/messaging/handler.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,eAAO,MAAM,iBAAiB,eAA8B,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,UAAU,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvE;AAED,MAAM,WAAW,sBAAsB;IACnC;;OAEG;IACF,mBAAmB,IAAI,IAAI,CAAC;IAE5B;;OAEG;IACH,kBAAkB,IAAI,IAAI,CAAC;CAC/B"}
@@ -77,6 +77,8 @@ export declare class JsonRpcProxyFactory<T extends object> implements ProxyHandl
77
77
  */
78
78
  constructor(target?: any);
79
79
  protected waitForConnection(): void;
80
+ fireConnectionClosed(): void;
81
+ fireConnectionOpened(): void;
80
82
  /**
81
83
  * Connect a MessageConnection to the factory.
82
84
  *
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-factory.d.ts","sourceRoot":"","sources":["../../src/messaging/proxy-factory.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG9C,oBAAY,aAAa,CAAC,MAAM,IAAI,UAAU,GAAG;IAC7C;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;CAC/C,CAAC;AAEF,MAAM,WAAW,6BAA6B;IAC1C,QAAQ,CAAC,mBAAmB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;CAC9C;AACD,oBAAY,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,6BAA6B,CAAC;AAEhE,qBAAa,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,iBAAiB;IAE5E,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,GAAG;gBADhE,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,GAAG;IAG7E,YAAY,CAAC,UAAU,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;CAMtE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,qBAAa,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IActD,MAAM,CAAC;IAZ1B,SAAS,CAAC,QAAQ,CAAC,0BAA0B,gBAAuB;IACpE,SAAS,CAAC,QAAQ,CAAC,2BAA2B,gBAAuB;IAErE,SAAS,CAAC,wBAAwB,EAAE,CAAC,UAAU,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC5E,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAExD;;;;;OAKG;gBACgB,MAAM,CAAC,KAAK;IAI/B,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAYnC;;;;;OAKG;IACH,MAAM,CAAC,UAAU,EAAE,iBAAiB;IAQpC;;;;;;;;;;;OAWG;cACa,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAavE;;;;;OAKG;IACH,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM9D;;;;;;OAMG;IACH,WAAW,IAAI,YAAY,CAAC,CAAC,CAAC;IAK9B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,GAAG,GAAG;IAiClD;;;;;;;;OAQG;IACH,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO;CAGpD"}
1
+ {"version":3,"file":"proxy-factory.d.ts","sourceRoot":"","sources":["../../src/messaging/proxy-factory.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG9C,oBAAY,aAAa,CAAC,MAAM,IAAI,UAAU,GAAG;IAC7C;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;CAC/C,CAAC;AAEF,MAAM,WAAW,6BAA6B;IAC1C,QAAQ,CAAC,mBAAmB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;CAC9C;AACD,oBAAY,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,6BAA6B,CAAC;AAEhE,qBAAa,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,iBAAiB;IAE5E,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,GAAG;gBADhE,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,GAAG;IAG7E,YAAY,CAAC,UAAU,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;CAMtE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,qBAAa,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IActD,MAAM,CAAC;IAZ1B,SAAS,CAAC,QAAQ,CAAC,0BAA0B,gBAAuB;IACpE,SAAS,CAAC,QAAQ,CAAC,2BAA2B,gBAAuB;IAErE,SAAS,CAAC,wBAAwB,EAAE,CAAC,UAAU,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC5E,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAExD;;;;;OAKG;gBACgB,MAAM,CAAC,KAAK;IAI/B,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAUnC,oBAAoB;IAIpB,oBAAoB;IAIpB;;;;;OAKG;IACH,MAAM,CAAC,UAAU,EAAE,iBAAiB;IAQpC;;;;;;;;;;;OAWG;cACa,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAavE;;;;;OAKG;IACH,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM9D;;;;;;OAMG;IACH,WAAW,IAAI,YAAY,CAAC,CAAC,CAAC;IAK9B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,GAAG,GAAG;IAiClD;;;;;;;;OAQG;IACH,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO;CAGpD"}
@@ -141,12 +141,16 @@ var JsonRpcProxyFactory = /** @class */ (function () {
141
141
  return _this.connectionPromiseResolve = resolve;
142
142
  });
143
143
  this.connectionPromise.then(function (connection) {
144
- connection.onClose(function () {
145
- return _this.onDidCloseConnectionEmitter.fire(undefined);
146
- });
147
- _this.onDidOpenConnectionEmitter.fire(undefined);
144
+ connection.onClose(function () { return _this.fireConnectionClosed(); });
145
+ _this.fireConnectionOpened();
148
146
  });
149
147
  };
148
+ JsonRpcProxyFactory.prototype.fireConnectionClosed = function () {
149
+ this.onDidCloseConnectionEmitter.fire(undefined);
150
+ };
151
+ JsonRpcProxyFactory.prototype.fireConnectionOpened = function () {
152
+ this.onDidOpenConnectionEmitter.fire(undefined);
153
+ };
150
154
  /**
151
155
  * Connect a MessageConnection to the factory.
152
156
  *
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-factory.js","sourceRoot":"","sources":["../../src/messaging/proxy-factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxy-factory.js","sourceRoot":"","sources":["../../src/messaging/proxy-factory.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -52,5 +52,5 @@
52
52
  "watch": "leeway exec --package .:lib --transitive-dependencies --filter-type yarn --components --parallel -- tsc -w --preserveWatchOutput"
53
53
  },
54
54
  "types": "./lib/index.d.ts",
55
- "version": "0.1.5-sje-installer-helm.1"
55
+ "version": "0.1.5-sje-installer-helm.3"
56
56
  }
package/pkg-yarn.lock CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  "@gitpod/gitpod-protocol@0.1.5":
6
6
  version "0.1.5"
7
- resolved "file:///tmp/cache/83d2b490b4e0663a9db5b3631668ff0b4ec91794.tar.gz"
7
+ resolved "file:///tmp/cache/35cfab5c67d0ea6caf11324e9ba1e3f48a45940e.tar.gz"
8
8
  dependencies:
9
9
  ajv "^6.5.4"
10
10
  analytics-node "^4.0.1"
@@ -5,10 +5,13 @@
5
5
  * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6
6
  */
7
7
 
8
- import { listen as doListen, Logger, ConsoleLogger } from "vscode-ws-jsonrpc";
8
+ import { Logger, ConsoleLogger, toSocket, IWebSocket } from "vscode-ws-jsonrpc";
9
+ import { createMessageConnection } from "vscode-jsonrpc";
10
+ import { AbstractMessageWriter } from "vscode-jsonrpc/lib/messageWriter";
11
+ import { AbstractMessageReader } from "vscode-jsonrpc/lib/messageReader";
9
12
  import { JsonRpcProxyFactory, JsonRpcProxy } from "../proxy-factory";
10
- import { ConnectionHandler } from "../handler";
11
- import ReconnectingWebSocket from 'reconnecting-websocket';
13
+ import { ConnectionEventHandler, ConnectionHandler } from "../handler";
14
+ import ReconnectingWebSocket, { Event } from 'reconnecting-websocket';
12
15
 
13
16
  export interface WebSocketOptions {
14
17
  onerror?: (event: Event) => void;
@@ -29,7 +32,10 @@ export class WebSocketConnectionProvider {
29
32
  const startListening = (path: string) => {
30
33
  const socket = this.listen({
31
34
  path,
32
- onConnection: c => factory.listen(c)
35
+ onConnection: c => factory.listen(c),
36
+ }, {
37
+ onTransportDidClose: () => factory.fireConnectionClosed(),
38
+ onTransportDidOpen: () => factory.fireConnectionOpened(),
33
39
  },
34
40
  options
35
41
  );
@@ -49,7 +55,7 @@ export class WebSocketConnectionProvider {
49
55
  /**
50
56
  * Install a connection handler for the given path.
51
57
  */
52
- listen(handler: ConnectionHandler, options?: WebSocketOptions): WebSocket {
58
+ listen(handler: ConnectionHandler, eventHandler: ConnectionEventHandler, options?: WebSocketOptions): WebSocket {
53
59
  const url = handler.path;
54
60
  const webSocket = this.createWebSocket(url);
55
61
 
@@ -64,11 +70,12 @@ export class WebSocketConnectionProvider {
64
70
  logger.error(JSON.stringify(error));
65
71
  });
66
72
  }
67
- doListen({
68
- webSocket,
69
- onConnection: connection => handler.onConnection(connection),
70
- logger
71
- });
73
+ doListen(
74
+ webSocket as any as ReconnectingWebSocket,
75
+ handler,
76
+ eventHandler,
77
+ logger,
78
+ );
72
79
  return webSocket;
73
80
  }
74
81
 
@@ -91,3 +98,162 @@ export class WebSocketConnectionProvider {
91
98
  }
92
99
 
93
100
  }
101
+
102
+ // The following was extracted from vscode-ws-jsonrpc to make these changes:
103
+ // - switch from WebSocket to ReconnectingWebSocket
104
+ // - webSocket.onopen: making sure it's only ever called once so we're re-using MessageConnection
105
+ // - WebSocketMessageWriter: buffer and re-try messages instead of throwing an error immidiately
106
+ // - WebSocketMessageReader: don't close MessageConnection on 'socket.onclose'
107
+ function doListen(resocket: ReconnectingWebSocket, handler: ConnectionHandler, eventHandler: ConnectionEventHandler, logger: Logger) {
108
+ resocket.addEventListener("close", () => eventHandler.onTransportDidClose());
109
+
110
+ let alreadyOpened = false;
111
+ resocket.onopen = () => {
112
+ // trigerr "open" every time we re-open the underlying websocket
113
+ eventHandler.onTransportDidOpen();
114
+
115
+ // make sure we're only ever creating one MessageConnection, irregardless of how many times we have to re-open the underlying (reconnecting) websocket
116
+ if (alreadyOpened) {
117
+ return;
118
+ }
119
+ alreadyOpened = true;
120
+
121
+ const connection = createWebSocketConnection(resocket, logger);
122
+ handler.onConnection(connection);
123
+ };
124
+ }
125
+
126
+ function createWebSocketConnection(resocket: ReconnectingWebSocket, logger: Logger) {
127
+ const socket = toSocket(resocket as any);
128
+ const messageReader = new NonClosingWebSocketMessageReader(socket);
129
+ const messageWriter = new BufferingWebSocketMessageWriter(resocket, logger);
130
+ const connection = createMessageConnection(messageReader, messageWriter, logger);
131
+ connection.onClose(() => connection.dispose());
132
+ return connection;
133
+ }
134
+
135
+ /**
136
+ * This takes vscode-ws-jsonrpc/lib/socket/writer/WebSocketMessageWriter and adds a buffer
137
+ */
138
+ class BufferingWebSocketMessageWriter extends AbstractMessageWriter {
139
+ protected readonly socket: ReconnectingWebSocket;
140
+ protected readonly logger: Logger;
141
+ protected errorCount: number = 0;
142
+
143
+ protected buffer: any[] = [];
144
+
145
+ constructor(socket: ReconnectingWebSocket, logger: Logger) {
146
+ super();
147
+ this.socket = socket;
148
+ this.logger = logger;
149
+
150
+ socket.addEventListener("open", (event: Event) => this.flushBuffer());
151
+ }
152
+
153
+ write(msg: any) {
154
+ if (this.socket.readyState !== ReconnectingWebSocket.OPEN) {
155
+ this.bufferMsg(msg);
156
+ return;
157
+ }
158
+
159
+ try {
160
+ const content = JSON.stringify(msg);
161
+ this.socket.send(content);
162
+ } catch (e) {
163
+ this.errorCount++;
164
+ this.fireError(e, msg, this.errorCount);
165
+
166
+ this.bufferMsg(msg);
167
+ }
168
+ }
169
+
170
+ protected flushBuffer() {
171
+ if (this.buffer.length === 0) {
172
+ return
173
+ }
174
+
175
+ const buffer = [...this.buffer];
176
+ this.buffer = [];
177
+ for (const msg of buffer) {
178
+ this.write(msg);
179
+ }
180
+ //this.logger.info(`flushed buffer (${this.buffer.length})`)
181
+ }
182
+
183
+ protected bufferMsg(msg: any) {
184
+ this.buffer.push(msg);
185
+ //this.logger.info(`buffered message (${this.buffer.length})`);
186
+ }
187
+ }
188
+
189
+
190
+ /**
191
+ * This takes vscode-ws-jsonrpc/lib/socket/reader/WebSocketMessageReader and removes the "onClose -> fireClose" connection
192
+ */
193
+ class NonClosingWebSocketMessageReader extends AbstractMessageReader {
194
+ protected readonly socket: IWebSocket;
195
+ protected readonly events: any[] = [];
196
+ protected state: 'initial' | 'listening' | 'closed' = 'initial';
197
+ protected callback: (message: any) => void = () => {};
198
+
199
+ constructor(socket: IWebSocket) {
200
+ super();
201
+ this.socket = socket;
202
+ this.socket.onMessage(message => this.readMessage(message));
203
+ this.socket.onError(error => this.fireError(error));
204
+ this.socket.onClose((code, reason) => {
205
+ if (code !== 1000) {
206
+ const error = {
207
+ name: '' + code,
208
+ message: `Error during socket reconnect: code = ${code}, reason = ${reason}`
209
+ };
210
+ this.fireError(error);
211
+ }
212
+ // this.fireClose(); // <-- reason for this class to be copied over
213
+ });
214
+ }
215
+ listen(callback: (message: any) => void) {
216
+ if (this.state === 'initial') {
217
+ this.state = 'listening';
218
+ this.callback = callback;
219
+ while (this.events.length !== 0) {
220
+ const event = this.events.pop();
221
+ if (event.message) {
222
+ this.readMessage(event.message);
223
+ }
224
+ else if (event.error) {
225
+ this.fireError(event.error);
226
+ }
227
+ else {
228
+ this.fireClose();
229
+ }
230
+ }
231
+ }
232
+ }
233
+ readMessage(message: any) {
234
+ if (this.state === 'initial') {
235
+ this.events.splice(0, 0, { message });
236
+ }
237
+ else if (this.state === 'listening') {
238
+ const data = JSON.parse(message);
239
+ this.callback(data);
240
+ }
241
+ }
242
+ fireError(error: any) {
243
+ if (this.state === 'initial') {
244
+ this.events.splice(0, 0, { error });
245
+ }
246
+ else if (this.state === 'listening') {
247
+ super.fireError(error);
248
+ }
249
+ }
250
+ fireClose() {
251
+ if (this.state === 'initial') {
252
+ this.events.splice(0, 0, {});
253
+ }
254
+ else if (this.state === 'listening') {
255
+ super.fireClose();
256
+ }
257
+ this.state = 'closed';
258
+ }
259
+ }
@@ -13,3 +13,15 @@ export interface ConnectionHandler {
13
13
  readonly path: string;
14
14
  onConnection(connection: MessageConnection, session?: object): void;
15
15
  }
16
+
17
+ export interface ConnectionEventHandler {
18
+ /**
19
+ * Called when the transport underpinning the connection got closed
20
+ */
21
+ onTransportDidClose(): void;
22
+
23
+ /**
24
+ * Called when the transport underpinning the connection is (re-)opened
25
+ */
26
+ onTransportDidOpen(): void;
27
+ }
@@ -105,13 +105,19 @@ export class JsonRpcProxyFactory<T extends object> implements ProxyHandler<T> {
105
105
  this.connectionPromiseResolve = resolve
106
106
  );
107
107
  this.connectionPromise.then(connection => {
108
- connection.onClose(() =>
109
- this.onDidCloseConnectionEmitter.fire(undefined)
110
- );
111
- this.onDidOpenConnectionEmitter.fire(undefined);
108
+ connection.onClose(() => this.fireConnectionClosed());
109
+ this.fireConnectionOpened();
112
110
  });
113
111
  }
114
112
 
113
+ fireConnectionClosed() {
114
+ this.onDidCloseConnectionEmitter.fire(undefined)
115
+ }
116
+
117
+ fireConnectionOpened() {
118
+ this.onDidOpenConnectionEmitter.fire(undefined);
119
+ }
120
+
115
121
  /**
116
122
  * Connect a MessageConnection to the factory.
117
123
  *