@theia/core 1.26.0 → 1.27.0-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/README.md +6 -7
  2. package/lib/browser/messaging/ws-connection-provider.d.ts +5 -4
  3. package/lib/browser/messaging/ws-connection-provider.d.ts.map +1 -1
  4. package/lib/browser/messaging/ws-connection-provider.js +30 -23
  5. package/lib/browser/messaging/ws-connection-provider.js.map +1 -1
  6. package/lib/browser/progress-status-bar-item.d.ts +1 -1
  7. package/lib/browser/progress-status-bar-item.d.ts.map +1 -1
  8. package/lib/browser/tree/tree-compression/compressed-tree-widget.js +2 -2
  9. package/lib/browser/tree/tree-compression/compressed-tree-widget.js.map +1 -1
  10. package/lib/browser/widgets/select-component.d.ts +4 -1
  11. package/lib/browser/widgets/select-component.d.ts.map +1 -1
  12. package/lib/browser/widgets/select-component.js +30 -16
  13. package/lib/browser/widgets/select-component.js.map +1 -1
  14. package/lib/common/cancellation.d.ts +1 -0
  15. package/lib/common/cancellation.d.ts.map +1 -1
  16. package/lib/common/cancellation.js +8 -0
  17. package/lib/common/cancellation.js.map +1 -1
  18. package/lib/common/index.d.ts +2 -0
  19. package/lib/common/index.d.ts.map +1 -1
  20. package/lib/common/index.js +2 -0
  21. package/lib/common/index.js.map +1 -1
  22. package/lib/common/message-rpc/channel.d.ts +106 -0
  23. package/lib/common/message-rpc/channel.d.ts.map +1 -0
  24. package/lib/common/message-rpc/channel.js +195 -0
  25. package/lib/common/message-rpc/channel.js.map +1 -0
  26. package/lib/common/message-rpc/channel.spec.d.ts +9 -0
  27. package/lib/common/message-rpc/channel.spec.d.ts.map +1 -0
  28. package/lib/common/message-rpc/channel.spec.js +80 -0
  29. package/lib/common/message-rpc/channel.spec.js.map +1 -0
  30. package/lib/common/message-rpc/index.d.ts +4 -0
  31. package/lib/common/message-rpc/index.d.ts.map +1 -0
  32. package/lib/{node/messaging/logger.js → common/message-rpc/index.js} +6 -19
  33. package/lib/common/message-rpc/index.js.map +1 -0
  34. package/lib/common/message-rpc/message-buffer.d.ts +50 -0
  35. package/lib/common/message-rpc/message-buffer.d.ts.map +1 -0
  36. package/lib/common/message-rpc/message-buffer.js +56 -0
  37. package/lib/common/message-rpc/message-buffer.js.map +1 -0
  38. package/lib/common/message-rpc/rpc-message-encoder.d.ts +159 -0
  39. package/lib/common/message-rpc/rpc-message-encoder.d.ts.map +1 -0
  40. package/lib/common/message-rpc/rpc-message-encoder.js +362 -0
  41. package/lib/common/message-rpc/rpc-message-encoder.js.map +1 -0
  42. package/lib/common/message-rpc/rpc-message-encoder.spec.d.ts +2 -0
  43. package/lib/common/message-rpc/rpc-message-encoder.spec.d.ts.map +1 -0
  44. package/lib/common/message-rpc/rpc-message-encoder.spec.js +37 -0
  45. package/lib/common/message-rpc/rpc-message-encoder.spec.js.map +1 -0
  46. package/lib/common/message-rpc/rpc-protocol.d.ts +61 -0
  47. package/lib/common/message-rpc/rpc-protocol.d.ts.map +1 -0
  48. package/lib/common/message-rpc/rpc-protocol.js +183 -0
  49. package/lib/common/message-rpc/rpc-protocol.js.map +1 -0
  50. package/lib/common/message-rpc/uint8-array-message-buffer.d.ts +52 -0
  51. package/lib/common/message-rpc/uint8-array-message-buffer.d.ts.map +1 -0
  52. package/lib/common/message-rpc/uint8-array-message-buffer.js +169 -0
  53. package/lib/common/message-rpc/uint8-array-message-buffer.js.map +1 -0
  54. package/lib/common/message-rpc/uint8-array-message-buffer.spec.d.ts +2 -0
  55. package/lib/common/message-rpc/uint8-array-message-buffer.spec.d.ts.map +1 -0
  56. package/lib/common/message-rpc/uint8-array-message-buffer.spec.js +39 -0
  57. package/lib/common/message-rpc/uint8-array-message-buffer.spec.js.map +1 -0
  58. package/lib/common/messaging/abstract-connection-provider.d.ts +9 -8
  59. package/lib/common/messaging/abstract-connection-provider.d.ts.map +1 -1
  60. package/lib/common/messaging/abstract-connection-provider.js +20 -35
  61. package/lib/common/messaging/abstract-connection-provider.js.map +1 -1
  62. package/lib/common/messaging/connection-error-handler.d.ts +1 -2
  63. package/lib/common/messaging/connection-error-handler.d.ts.map +1 -1
  64. package/lib/common/messaging/connection-error-handler.js +1 -1
  65. package/lib/common/messaging/connection-error-handler.js.map +1 -1
  66. package/lib/common/messaging/handler.d.ts +2 -2
  67. package/lib/common/messaging/handler.d.ts.map +1 -1
  68. package/lib/common/messaging/proxy-factory.d.ts +13 -7
  69. package/lib/common/messaging/proxy-factory.d.ts.map +1 -1
  70. package/lib/common/messaging/proxy-factory.js +18 -13
  71. package/lib/common/messaging/proxy-factory.js.map +1 -1
  72. package/lib/common/messaging/proxy-factory.spec.js +4 -15
  73. package/lib/common/messaging/proxy-factory.spec.js.map +1 -1
  74. package/lib/common/messaging/web-socket-channel.d.ts +54 -48
  75. package/lib/common/messaging/web-socket-channel.d.ts.map +1 -1
  76. package/lib/common/messaging/web-socket-channel.js +41 -105
  77. package/lib/common/messaging/web-socket-channel.js.map +1 -1
  78. package/lib/electron-browser/messaging/electron-ipc-connection-provider.d.ts +2 -2
  79. package/lib/electron-browser/messaging/electron-ipc-connection-provider.d.ts.map +1 -1
  80. package/lib/electron-browser/messaging/electron-ipc-connection-provider.js +18 -7
  81. package/lib/electron-browser/messaging/electron-ipc-connection-provider.js.map +1 -1
  82. package/lib/electron-browser/messaging/electron-ws-connection-provider.d.ts +2 -2
  83. package/lib/electron-browser/messaging/electron-ws-connection-provider.d.ts.map +1 -1
  84. package/lib/electron-browser/messaging/electron-ws-connection-provider.js +5 -7
  85. package/lib/electron-browser/messaging/electron-ws-connection-provider.js.map +1 -1
  86. package/lib/electron-main/messaging/electron-messaging-contribution.d.ts +37 -9
  87. package/lib/electron-main/messaging/electron-messaging-contribution.d.ts.map +1 -1
  88. package/lib/electron-main/messaging/electron-messaging-contribution.js +83 -68
  89. package/lib/electron-main/messaging/electron-messaging-contribution.js.map +1 -1
  90. package/lib/electron-main/messaging/electron-messaging-service.d.ts +2 -8
  91. package/lib/electron-main/messaging/electron-messaging-service.d.ts.map +1 -1
  92. package/lib/electron-main/messaging/electron-messaging-service.js.map +1 -1
  93. package/lib/electron-main/theia-electron-window.d.ts.map +1 -1
  94. package/lib/electron-main/theia-electron-window.js +11 -8
  95. package/lib/electron-main/theia-electron-window.js.map +1 -1
  96. package/lib/node/messaging/binary-message-pipe.d.ts +45 -0
  97. package/lib/node/messaging/binary-message-pipe.d.ts.map +1 -0
  98. package/lib/node/messaging/binary-message-pipe.js +152 -0
  99. package/lib/node/messaging/binary-message-pipe.js.map +1 -0
  100. package/lib/node/messaging/ipc-bootstrap.js +2 -11
  101. package/lib/node/messaging/ipc-bootstrap.js.map +1 -1
  102. package/lib/node/messaging/ipc-channel.d.ts +26 -0
  103. package/lib/node/messaging/ipc-channel.d.ts.map +1 -0
  104. package/lib/node/messaging/ipc-channel.js +86 -0
  105. package/lib/node/messaging/ipc-channel.js.map +1 -0
  106. package/lib/node/messaging/ipc-connection-provider.d.ts +3 -5
  107. package/lib/node/messaging/ipc-connection-provider.d.ts.map +1 -1
  108. package/lib/node/messaging/ipc-connection-provider.js +14 -31
  109. package/lib/node/messaging/ipc-connection-provider.js.map +1 -1
  110. package/lib/node/messaging/ipc-protocol.d.ts +2 -2
  111. package/lib/node/messaging/ipc-protocol.d.ts.map +1 -1
  112. package/lib/node/messaging/messaging-contribution.d.ts +6 -9
  113. package/lib/node/messaging/messaging-contribution.d.ts.map +1 -1
  114. package/lib/node/messaging/messaging-contribution.js +23 -68
  115. package/lib/node/messaging/messaging-contribution.js.map +1 -1
  116. package/lib/node/messaging/messaging-service.d.ts +4 -23
  117. package/lib/node/messaging/messaging-service.d.ts.map +1 -1
  118. package/lib/node/messaging/messaging-service.js +1 -15
  119. package/lib/node/messaging/messaging-service.js.map +1 -1
  120. package/lib/node/messaging/test/test-web-socket-channel.d.ts +4 -2
  121. package/lib/node/messaging/test/test-web-socket-channel.d.ts.map +1 -1
  122. package/lib/node/messaging/test/test-web-socket-channel.js +25 -12
  123. package/lib/node/messaging/test/test-web-socket-channel.js.map +1 -1
  124. package/package.json +5 -8
  125. package/src/browser/messaging/ws-connection-provider.ts +34 -25
  126. package/src/browser/progress-status-bar-item.ts +1 -1
  127. package/src/browser/style/menus.css +1 -0
  128. package/src/browser/tree/tree-compression/compressed-tree-widget.tsx +2 -2
  129. package/src/browser/widgets/select-component.tsx +37 -17
  130. package/src/common/cancellation.ts +8 -0
  131. package/src/common/index.ts +2 -0
  132. package/src/common/message-rpc/channel.spec.ts +88 -0
  133. package/src/common/message-rpc/channel.ts +260 -0
  134. package/src/{node/messaging/logger.ts → common/message-rpc/index.ts} +4 -23
  135. package/src/common/message-rpc/message-buffer.ts +99 -0
  136. package/src/common/message-rpc/rpc-message-encoder.spec.ts +42 -0
  137. package/src/common/message-rpc/rpc-message-encoder.ts +497 -0
  138. package/src/common/message-rpc/rpc-protocol.ts +217 -0
  139. package/src/common/message-rpc/uint8-array-message-buffer.spec.ts +41 -0
  140. package/src/common/message-rpc/uint8-array-message-buffer.ts +206 -0
  141. package/src/common/messaging/abstract-connection-provider.ts +28 -37
  142. package/src/common/messaging/connection-error-handler.ts +1 -2
  143. package/src/common/messaging/handler.ts +2 -2
  144. package/src/common/messaging/proxy-factory.spec.ts +4 -17
  145. package/src/common/messaging/proxy-factory.ts +27 -16
  146. package/src/common/messaging/web-socket-channel.ts +79 -135
  147. package/src/electron-browser/messaging/electron-ipc-connection-provider.ts +21 -7
  148. package/src/electron-browser/messaging/electron-ws-connection-provider.ts +5 -8
  149. package/src/electron-main/messaging/electron-messaging-contribution.ts +87 -65
  150. package/src/electron-main/messaging/electron-messaging-service.ts +2 -8
  151. package/src/electron-main/theia-electron-window.ts +12 -9
  152. package/src/node/messaging/binary-message-pipe.ts +168 -0
  153. package/src/node/messaging/ipc-bootstrap.ts +3 -11
  154. package/src/node/messaging/ipc-channel.ts +97 -0
  155. package/src/node/messaging/ipc-connection-provider.ts +18 -35
  156. package/src/node/messaging/ipc-protocol.ts +2 -2
  157. package/src/node/messaging/messaging-contribution.ts +29 -74
  158. package/src/node/messaging/messaging-service.ts +4 -31
  159. package/src/node/messaging/test/test-web-socket-channel.ts +26 -17
  160. package/lib/node/messaging/logger.d.ts +0 -8
  161. package/lib/node/messaging/logger.d.ts.map +0 -1
  162. package/lib/node/messaging/logger.js.map +0 -1
  163. package/shared/vscode-ws-jsonrpc/index.d.ts +0 -1
  164. package/shared/vscode-ws-jsonrpc/index.js +0 -1
@@ -0,0 +1,362 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2022 Red Hat, Inc. and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ /* eslint-disable @typescript-eslint/no-explicit-any */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.RpcMessageEncoder = exports.RpcMessageDecoder = exports.ObjectType = exports.ResponseError = void 0;
20
+ /**
21
+ * A special error that can be returned in case a request
22
+ * has failed. Provides additional information i.e. an error code
23
+ * and additional error data.
24
+ */
25
+ class ResponseError extends Error {
26
+ constructor(code, message, data) {
27
+ super(message);
28
+ this.code = code;
29
+ this.data = data;
30
+ }
31
+ }
32
+ exports.ResponseError = ResponseError;
33
+ /**
34
+ * The tag values for the default {@link ValueEncoder}s & {@link ValueDecoder}s
35
+ */
36
+ var ObjectType;
37
+ (function (ObjectType) {
38
+ ObjectType[ObjectType["JSON"] = 0] = "JSON";
39
+ ObjectType[ObjectType["ByteArray"] = 1] = "ByteArray";
40
+ ObjectType[ObjectType["ObjectArray"] = 2] = "ObjectArray";
41
+ ObjectType[ObjectType["Undefined"] = 3] = "Undefined";
42
+ ObjectType[ObjectType["Object"] = 4] = "Object";
43
+ ObjectType[ObjectType["String"] = 5] = "String";
44
+ ObjectType[ObjectType["Boolean"] = 6] = "Boolean";
45
+ ObjectType[ObjectType["Number"] = 7] = "Number";
46
+ // eslint-disable-next-line @typescript-eslint/no-shadow
47
+ ObjectType[ObjectType["ResponseError"] = 8] = "ResponseError";
48
+ ObjectType[ObjectType["Error"] = 9] = "Error";
49
+ })(ObjectType = exports.ObjectType || (exports.ObjectType = {}));
50
+ /**
51
+ * A `RpcMessageDecoder` parses a a binary message received via {@link ReadBuffer} into a {@link RpcMessage}
52
+ */
53
+ class RpcMessageDecoder {
54
+ constructor() {
55
+ this.decoders = new Map();
56
+ this.registerDecoder(ObjectType.JSON, {
57
+ read: buf => {
58
+ const json = buf.readString();
59
+ return JSON.parse(json);
60
+ }
61
+ });
62
+ this.registerDecoder(ObjectType.Error, {
63
+ read: buf => {
64
+ const serializedError = JSON.parse(buf.readString());
65
+ const error = new Error(serializedError.message);
66
+ Object.assign(error, serializedError);
67
+ return error;
68
+ }
69
+ });
70
+ this.registerDecoder(ObjectType.ResponseError, {
71
+ read: buf => {
72
+ const error = JSON.parse(buf.readString());
73
+ return new ResponseError(error.code, error.message, error.data);
74
+ }
75
+ });
76
+ this.registerDecoder(ObjectType.ByteArray, {
77
+ read: buf => buf.readBytes()
78
+ });
79
+ this.registerDecoder(ObjectType.ObjectArray, {
80
+ read: buf => this.readArray(buf)
81
+ });
82
+ this.registerDecoder(ObjectType.Undefined, {
83
+ read: () => undefined
84
+ });
85
+ this.registerDecoder(ObjectType.Object, {
86
+ read: (buf, recursiveRead) => {
87
+ const propertyCount = buf.readLength();
88
+ const result = Object.create({});
89
+ for (let i = 0; i < propertyCount; i++) {
90
+ const key = buf.readString();
91
+ const value = recursiveRead(buf);
92
+ result[key] = value;
93
+ }
94
+ return result;
95
+ }
96
+ });
97
+ this.registerDecoder(ObjectType.String, {
98
+ read: (buf, recursiveRead) => buf.readString()
99
+ });
100
+ this.registerDecoder(ObjectType.Boolean, {
101
+ read: buf => buf.readUint8() === 1
102
+ });
103
+ this.registerDecoder(ObjectType.Number, {
104
+ read: buf => buf.readNumber()
105
+ });
106
+ }
107
+ /**
108
+ * Registers a new {@link ValueDecoder} for the given tag.
109
+ * After the successful registration the {@link tagIntType} is recomputed
110
+ * by retrieving the highest tag value and calculating the required Uint size to store it.
111
+ * @param tag the tag for which the decoder should be registered.
112
+ * @param decoder the decoder that should be registered.
113
+ */
114
+ registerDecoder(tag, decoder) {
115
+ if (this.decoders.has(tag)) {
116
+ throw new Error(`Decoder already registered: ${tag}`);
117
+ }
118
+ this.decoders.set(tag, decoder);
119
+ }
120
+ parse(buf) {
121
+ try {
122
+ const msgType = buf.readUint8();
123
+ switch (msgType) {
124
+ case 1 /* Request */:
125
+ return this.parseRequest(buf);
126
+ case 2 /* Notification */:
127
+ return this.parseNotification(buf);
128
+ case 3 /* Reply */:
129
+ return this.parseReply(buf);
130
+ case 4 /* ReplyErr */:
131
+ return this.parseReplyErr(buf);
132
+ case 5 /* Cancel */:
133
+ return this.parseCancel(buf);
134
+ }
135
+ throw new Error(`Unknown message type: ${msgType}`);
136
+ }
137
+ catch (e) {
138
+ // exception does not show problematic content: log it!
139
+ console.log('failed to parse message: ' + buf);
140
+ throw e;
141
+ }
142
+ }
143
+ parseCancel(msg) {
144
+ const callId = msg.readUint32();
145
+ return {
146
+ type: 5 /* Cancel */,
147
+ id: callId
148
+ };
149
+ }
150
+ parseRequest(msg) {
151
+ const callId = msg.readUint32();
152
+ const method = msg.readString();
153
+ let args = this.readArray(msg);
154
+ // convert `null` to `undefined`, since we don't use `null` in internal plugin APIs
155
+ args = args.map(arg => arg === null ? undefined : arg); // eslint-disable-line no-null/no-null
156
+ return {
157
+ type: 1 /* Request */,
158
+ id: callId,
159
+ method: method,
160
+ args: args
161
+ };
162
+ }
163
+ parseNotification(msg) {
164
+ const callId = msg.readUint32();
165
+ const method = msg.readString();
166
+ let args = this.readArray(msg);
167
+ // convert `null` to `undefined`, since we don't use `null` in internal plugin APIs
168
+ args = args.map(arg => arg === null ? undefined : arg); // eslint-disable-line no-null/no-null
169
+ return {
170
+ type: 2 /* Notification */,
171
+ id: callId,
172
+ method: method,
173
+ args: args
174
+ };
175
+ }
176
+ parseReply(msg) {
177
+ const callId = msg.readUint32();
178
+ const value = this.readTypedValue(msg);
179
+ return {
180
+ type: 3 /* Reply */,
181
+ id: callId,
182
+ res: value
183
+ };
184
+ }
185
+ parseReplyErr(msg) {
186
+ const callId = msg.readUint32();
187
+ const err = this.readTypedValue(msg);
188
+ return {
189
+ type: 4 /* ReplyErr */,
190
+ id: callId,
191
+ err
192
+ };
193
+ }
194
+ readArray(buf) {
195
+ const length = buf.readLength();
196
+ const result = new Array(length);
197
+ for (let i = 0; i < length; i++) {
198
+ result[i] = this.readTypedValue(buf);
199
+ }
200
+ return result;
201
+ }
202
+ readTypedValue(buf) {
203
+ const type = buf.readUint8();
204
+ const decoder = this.decoders.get(type);
205
+ if (!decoder) {
206
+ throw new Error(`No decoder for tag ${type}`);
207
+ }
208
+ return decoder.read(buf, innerBuffer => this.readTypedValue(innerBuffer));
209
+ }
210
+ }
211
+ exports.RpcMessageDecoder = RpcMessageDecoder;
212
+ /**
213
+ * A `RpcMessageEncoder` writes {@link RpcMessage} objects to a {@link WriteBuffer}. Note that it is
214
+ * up to clients to commit the message. This allows for multiple messages being
215
+ * encoded before sending.
216
+ */
217
+ class RpcMessageEncoder {
218
+ constructor() {
219
+ this.encoders = [];
220
+ this.registeredTags = new Set();
221
+ this.registerEncoders();
222
+ }
223
+ registerEncoders() {
224
+ // encoders will be consulted in reverse order of registration, so the JSON fallback needs to be last
225
+ this.registerEncoder(ObjectType.JSON, {
226
+ is: () => true,
227
+ write: (buf, value) => {
228
+ buf.writeString(JSON.stringify(value));
229
+ }
230
+ });
231
+ this.registerEncoder(ObjectType.Object, {
232
+ is: value => typeof value === 'object',
233
+ write: (buf, object, recursiveEncode) => {
234
+ const properties = Object.keys(object);
235
+ const relevant = [];
236
+ for (const property of properties) {
237
+ const value = object[property];
238
+ if (typeof value !== 'function') {
239
+ relevant.push([property, value]);
240
+ }
241
+ }
242
+ buf.writeLength(relevant.length);
243
+ for (const [property, value] of relevant) {
244
+ buf.writeString(property);
245
+ recursiveEncode === null || recursiveEncode === void 0 ? void 0 : recursiveEncode(buf, value);
246
+ }
247
+ }
248
+ });
249
+ this.registerEncoder(ObjectType.Error, {
250
+ is: value => value instanceof Error,
251
+ write: (buf, error) => {
252
+ const { name, message } = error;
253
+ const stack = error.stacktrace || error.stack;
254
+ const serializedError = {
255
+ $isError: true,
256
+ name,
257
+ message,
258
+ stack
259
+ };
260
+ buf.writeString(JSON.stringify(serializedError));
261
+ }
262
+ });
263
+ this.registerEncoder(ObjectType.ResponseError, {
264
+ is: value => value instanceof ResponseError,
265
+ write: (buf, value) => buf.writeString(JSON.stringify(value))
266
+ });
267
+ this.registerEncoder(ObjectType.Undefined, {
268
+ // eslint-disable-next-line no-null/no-null
269
+ is: value => value == null,
270
+ write: () => { }
271
+ });
272
+ this.registerEncoder(ObjectType.ObjectArray, {
273
+ is: value => Array.isArray(value),
274
+ write: (buf, value) => {
275
+ this.writeArray(buf, value);
276
+ }
277
+ });
278
+ this.registerEncoder(ObjectType.ByteArray, {
279
+ is: value => value instanceof Uint8Array,
280
+ write: (buf, value) => {
281
+ buf.writeBytes(value);
282
+ }
283
+ });
284
+ this.registerEncoder(ObjectType.String, {
285
+ is: value => typeof value === 'string',
286
+ write: (buf, value) => {
287
+ buf.writeString(value);
288
+ }
289
+ });
290
+ this.registerEncoder(ObjectType.Boolean, {
291
+ is: value => typeof value === 'boolean',
292
+ write: (buf, value) => {
293
+ buf.writeUint8(value === true ? 1 : 0);
294
+ }
295
+ });
296
+ this.registerEncoder(ObjectType.Number, {
297
+ is: value => typeof value === 'number',
298
+ write: (buf, value) => {
299
+ buf.writeNumber(value);
300
+ }
301
+ });
302
+ }
303
+ /**
304
+ * Registers a new {@link ValueEncoder} for the given tag.
305
+ * After the successful registration the {@link tagIntType} is recomputed
306
+ * by retrieving the highest tag value and calculating the required Uint size to store it.
307
+ * @param tag the tag for which the encoder should be registered.
308
+ * @param decoder the encoder that should be registered.
309
+ */
310
+ registerEncoder(tag, encoder) {
311
+ if (this.registeredTags.has(tag)) {
312
+ throw new Error(`Tag already registered: ${tag}`);
313
+ }
314
+ this.registeredTags.add(tag);
315
+ this.encoders.push([tag, encoder]);
316
+ }
317
+ cancel(buf, requestId) {
318
+ buf.writeUint8(5 /* Cancel */);
319
+ buf.writeUint32(requestId);
320
+ }
321
+ notification(buf, requestId, method, args) {
322
+ buf.writeUint8(2 /* Notification */);
323
+ buf.writeUint32(requestId);
324
+ buf.writeString(method);
325
+ this.writeArray(buf, args);
326
+ }
327
+ request(buf, requestId, method, args) {
328
+ buf.writeUint8(1 /* Request */);
329
+ buf.writeUint32(requestId);
330
+ buf.writeString(method);
331
+ this.writeArray(buf, args);
332
+ }
333
+ replyOK(buf, requestId, res) {
334
+ buf.writeUint8(3 /* Reply */);
335
+ buf.writeUint32(requestId);
336
+ this.writeTypedValue(buf, res);
337
+ }
338
+ replyErr(buf, requestId, err) {
339
+ buf.writeUint8(4 /* ReplyErr */);
340
+ buf.writeUint32(requestId);
341
+ this.writeTypedValue(buf, err);
342
+ }
343
+ writeTypedValue(buf, value) {
344
+ for (let i = this.encoders.length - 1; i >= 0; i--) {
345
+ if (this.encoders[i][1].is(value)) {
346
+ buf.writeUint8(this.encoders[i][0]);
347
+ this.encoders[i][1].write(buf, value, (innerBuffer, innerValue) => {
348
+ this.writeTypedValue(innerBuffer, innerValue);
349
+ });
350
+ return;
351
+ }
352
+ }
353
+ }
354
+ writeArray(buf, value) {
355
+ buf.writeLength(value.length);
356
+ for (let i = 0; i < value.length; i++) {
357
+ this.writeTypedValue(buf, value[i]);
358
+ }
359
+ }
360
+ }
361
+ exports.RpcMessageEncoder = RpcMessageEncoder;
362
+ //# sourceMappingURL=rpc-message-encoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-message-encoder.js","sourceRoot":"","sources":["../../../src/common/message-rpc/rpc-message-encoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rpc-message-encoder.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-message-encoder.spec.d.ts","sourceRoot":"","sources":["../../../src/common/message-rpc/rpc-message-encoder.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2021 Red Hat, Inc. and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const chai_1 = require("chai");
19
+ const uint8_array_message_buffer_1 = require("./uint8-array-message-buffer");
20
+ const rpc_message_encoder_1 = require("./rpc-message-encoder");
21
+ describe('PPC Message Codex', () => {
22
+ describe('RPC Message Encoder & Decoder', () => {
23
+ it('should encode object into binary message and decode the message back into the original object', () => {
24
+ const buffer = new Uint8Array(1024);
25
+ const writer = new uint8_array_message_buffer_1.Uint8ArrayWriteBuffer(buffer);
26
+ const encoder = new rpc_message_encoder_1.RpcMessageEncoder();
27
+ const jsonMangled = JSON.parse(JSON.stringify(encoder));
28
+ encoder.writeTypedValue(writer, encoder);
29
+ const written = writer.getCurrentContents();
30
+ const reader = new uint8_array_message_buffer_1.Uint8ArrayReadBuffer(written);
31
+ const decoder = new rpc_message_encoder_1.RpcMessageDecoder();
32
+ const decoded = decoder.readTypedValue(reader);
33
+ (0, chai_1.expect)(decoded).deep.equal(jsonMangled);
34
+ });
35
+ });
36
+ });
37
+ //# sourceMappingURL=rpc-message-encoder.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-message-encoder.spec.js","sourceRoot":"","sources":["../../../src/common/message-rpc/rpc-message-encoder.spec.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+CAA+C;AAC/C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;;AAEhF,+BAA8B;AAC9B,6EAA2F;AAC3F,+DAA6E;AAE7E,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAC/B,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,+FAA+F,EAAE,GAAG,EAAE;YACrG,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,kDAAqB,CAAC,MAAM,CAAC,CAAC;YAEjD,MAAM,OAAO,GAAG,IAAI,uCAAiB,EAAE,CAAC;YACxC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YAExD,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAEzC,MAAM,OAAO,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAE5C,MAAM,MAAM,GAAG,IAAI,iDAAoB,CAAC,OAAO,CAAC,CAAC;YAEjD,MAAM,OAAO,GAAG,IAAI,uCAAiB,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAE/C,IAAA,aAAM,EAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { CancellationTokenSource } from '../cancellation';
2
+ import { DisposableCollection } from '../disposable';
3
+ import { Emitter, Event } from '../event';
4
+ import { Deferred } from '../promise-util';
5
+ import { Channel } from './channel';
6
+ import { RpcMessage, RpcMessageDecoder, RpcMessageEncoder } from './rpc-message-encoder';
7
+ /**
8
+ * Handles request messages received by the {@link RpcServer}.
9
+ */
10
+ export declare type RequestHandler = (method: string, args: any[]) => Promise<any>;
11
+ /**
12
+ * Initialization options for a {@link RpcProtocol}.
13
+ */
14
+ export interface RpcProtocolOptions {
15
+ /**
16
+ * The message encoder that should be used. If `undefined` the default {@link RpcMessageEncoder} will be used.
17
+ */
18
+ encoder?: RpcMessageEncoder;
19
+ /**
20
+ * The message decoder that should be used. If `undefined` the default {@link RpcMessageDecoder} will be used.
21
+ */
22
+ decoder?: RpcMessageDecoder;
23
+ }
24
+ /**
25
+ * Establish a bi-directional RPC protocol on top of a given channel. Bi-directional means to send
26
+ * sends requests and notifications to the remote side as well as receiving requests and notifications from the remote side.
27
+ * Clients can get a promise for a remote request result that will be either resolved or
28
+ * rejected depending on the success of the request. Keeps track of outstanding requests and matches replies to the appropriate request
29
+ * Currently, there is no timeout handling for long running requests implemented.
30
+ */
31
+ export declare class RpcProtocol {
32
+ readonly channel: Channel;
33
+ readonly requestHandler: RequestHandler;
34
+ static readonly CANCELLATION_TOKEN_KEY = "add.cancellation.token";
35
+ protected readonly pendingRequests: Map<number, Deferred<any>>;
36
+ protected nextMessageId: number;
37
+ protected readonly encoder: RpcMessageEncoder;
38
+ protected readonly decoder: RpcMessageDecoder;
39
+ protected readonly onNotificationEmitter: Emitter<{
40
+ method: string;
41
+ args: any[];
42
+ }>;
43
+ protected readonly cancellationTokenSources: Map<number, CancellationTokenSource>;
44
+ get onNotification(): Event<{
45
+ method: string;
46
+ args: any[];
47
+ }>;
48
+ protected toDispose: DisposableCollection;
49
+ constructor(channel: Channel, requestHandler: RequestHandler, options?: RpcProtocolOptions);
50
+ handleMessage(message: RpcMessage): void;
51
+ protected handleReply(id: number, value: any): void;
52
+ protected handleReplyErr(id: number, error: any): void;
53
+ sendRequest<T>(method: string, args: any[]): Promise<T>;
54
+ sendNotification(method: string, args: any[]): void;
55
+ sendCancel(requestId: number): void;
56
+ cancelError(): Error;
57
+ protected handleCancel(id: number): void;
58
+ protected handleRequest(id: number, method: string, args: any[]): Promise<void>;
59
+ protected handleNotify(id: number, method: string, args: any[]): Promise<void>;
60
+ }
61
+ //# sourceMappingURL=rpc-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-protocol.d.ts","sourceRoot":"","sources":["../../../src/common/message-rpc/rpc-protocol.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAqB,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAkB,MAAM,uBAAuB,CAAC;AAGzG;;GAEG;AACH,oBAAY,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B;;OAEG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B;;OAEG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAA;CAC9B;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;aAmBQ,OAAO,EAAE,OAAO;aAAkB,cAAc,EAAE,cAAc;IAlB5F,MAAM,CAAC,QAAQ,CAAC,sBAAsB,4BAA4B;IAElE,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAa;IAE3E,SAAS,CAAC,aAAa,EAAE,MAAM,CAAK;IAEpC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IAE9C,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,EAAE,CAAC;KAAE,CAAC,CAAiB;IACpG,SAAS,CAAC,QAAQ,CAAC,wBAAwB,uCAA8C;IAEzF,IAAI,cAAc,IAAI,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,EAAE,CAAC;KAAE,CAAC,CAE5D;IAED,SAAS,CAAC,SAAS,uBAA8B;gBAErB,OAAO,EAAE,OAAO,EAAkB,cAAc,EAAE,cAAc,EAAE,OAAO,GAAE,kBAAuB;IAQ9H,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAyBxC,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAUnD,SAAS,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IActD,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IA2BvD,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAMnD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAMnC,WAAW,IAAI,KAAK;IAMpB,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;cAQxB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;cA8BrE,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAMvF"}