@theia/core 1.33.0-next.5 → 1.33.0-next.9

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 (32) hide show
  1. package/README.md +6 -6
  2. package/lib/common/message-rpc/channel.d.ts +9 -0
  3. package/lib/common/message-rpc/channel.d.ts.map +1 -1
  4. package/lib/common/message-rpc/channel.js +22 -19
  5. package/lib/common/message-rpc/channel.js.map +1 -1
  6. package/lib/common/message-rpc/index.d.ts +2 -2
  7. package/lib/common/message-rpc/index.d.ts.map +1 -1
  8. package/lib/common/message-rpc/index.js +5 -3
  9. package/lib/common/message-rpc/index.js.map +1 -1
  10. package/lib/common/message-rpc/msg-pack-extension-manager.d.ts +23 -0
  11. package/lib/common/message-rpc/msg-pack-extension-manager.d.ts.map +1 -0
  12. package/lib/common/message-rpc/msg-pack-extension-manager.js +58 -0
  13. package/lib/common/message-rpc/msg-pack-extension-manager.js.map +1 -0
  14. package/lib/common/message-rpc/rpc-message-encoder.d.ts +1 -0
  15. package/lib/common/message-rpc/rpc-message-encoder.d.ts.map +1 -1
  16. package/lib/common/message-rpc/rpc-message-encoder.js +24 -16
  17. package/lib/common/message-rpc/rpc-message-encoder.js.map +1 -1
  18. package/lib/common/message-rpc/rpc-protocol.d.ts +11 -5
  19. package/lib/common/message-rpc/rpc-protocol.d.ts.map +1 -1
  20. package/lib/common/message-rpc/rpc-protocol.js +45 -28
  21. package/lib/common/message-rpc/rpc-protocol.js.map +1 -1
  22. package/lib/node/messaging/index.d.ts +1 -0
  23. package/lib/node/messaging/index.d.ts.map +1 -1
  24. package/lib/node/messaging/index.js +1 -0
  25. package/lib/node/messaging/index.js.map +1 -1
  26. package/package.json +4 -4
  27. package/src/common/message-rpc/channel.ts +20 -5
  28. package/src/common/message-rpc/index.ts +6 -2
  29. package/src/common/message-rpc/msg-pack-extension-manager.ts +70 -0
  30. package/src/common/message-rpc/rpc-message-encoder.ts +24 -22
  31. package/src/common/message-rpc/rpc-protocol.ts +57 -33
  32. package/src/node/messaging/index.ts +1 -0
package/README.md CHANGED
@@ -86,12 +86,12 @@ export class SomeClass {
86
86
  - `@phosphor/signaling` (from [`@phosphor/signaling@1`](https://www.npmjs.com/package/@phosphor/signaling))
87
87
  - `@phosphor/virtualdom` (from [`@phosphor/virtualdom@1`](https://www.npmjs.com/package/@phosphor/virtualdom))
88
88
  - `@phosphor/widgets` (from [`@phosphor/widgets@1`](https://www.npmjs.com/package/@phosphor/widgets))
89
- - `@theia/application-package` (from [`@theia/application-package@1.33.0-next.5+cb0778617`](https://www.npmjs.com/package/@theia/application-package/v/1.33.0-next.5))
90
- - `@theia/application-package/lib/api` (from [`@theia/application-package@1.33.0-next.5+cb0778617`](https://www.npmjs.com/package/@theia/application-package/v/1.33.0-next.5))
91
- - `@theia/application-package/lib/environment` (from [`@theia/application-package@1.33.0-next.5+cb0778617`](https://www.npmjs.com/package/@theia/application-package/v/1.33.0-next.5))
92
- - `@theia/request` (from [`@theia/request@1.33.0-next.5+cb0778617`](https://www.npmjs.com/package/@theia/request/v/1.33.0-next.5))
93
- - `@theia/request/lib/proxy` (from [`@theia/request@1.33.0-next.5+cb0778617`](https://www.npmjs.com/package/@theia/request/v/1.33.0-next.5))
94
- - `@theia/request/lib/node-request-service` (from [`@theia/request@1.33.0-next.5+cb0778617`](https://www.npmjs.com/package/@theia/request/v/1.33.0-next.5))
89
+ - `@theia/application-package` (from [`@theia/application-package@1.33.0-next.9+1dcddc630`](https://www.npmjs.com/package/@theia/application-package/v/1.33.0-next.9))
90
+ - `@theia/application-package/lib/api` (from [`@theia/application-package@1.33.0-next.9+1dcddc630`](https://www.npmjs.com/package/@theia/application-package/v/1.33.0-next.9))
91
+ - `@theia/application-package/lib/environment` (from [`@theia/application-package@1.33.0-next.9+1dcddc630`](https://www.npmjs.com/package/@theia/application-package/v/1.33.0-next.9))
92
+ - `@theia/request` (from [`@theia/request@1.33.0-next.9+1dcddc630`](https://www.npmjs.com/package/@theia/request/v/1.33.0-next.9))
93
+ - `@theia/request/lib/proxy` (from [`@theia/request@1.33.0-next.9+1dcddc630`](https://www.npmjs.com/package/@theia/request/v/1.33.0-next.9))
94
+ - `@theia/request/lib/node-request-service` (from [`@theia/request@1.33.0-next.9+1dcddc630`](https://www.npmjs.com/package/@theia/request/v/1.33.0-next.9))
95
95
  - `fs-extra` (from [`fs-extra@^4.0.2`](https://www.npmjs.com/package/fs-extra))
96
96
  - `fuzzy` (from [`fuzzy@^0.1.3`](https://www.npmjs.com/package/fuzzy))
97
97
  - `inversify` (from [`inversify@^5.1.1`](https://www.npmjs.com/package/inversify))
@@ -58,6 +58,15 @@ export declare abstract class AbstractChannel implements Channel {
58
58
  close(): void;
59
59
  abstract getWriteBuffer(): WriteBuffer;
60
60
  }
61
+ /**
62
+ * A very basic {@link AbstractChannel} implementation which takes a function
63
+ * for retrieving the {@link WriteBuffer} as constructor argument.
64
+ */
65
+ export declare class BasicChannel extends AbstractChannel {
66
+ protected writeBufferProvider: () => WriteBuffer;
67
+ constructor(writeBufferProvider: () => WriteBuffer);
68
+ getWriteBuffer(): WriteBuffer;
69
+ }
61
70
  /**
62
71
  * Helper class to implement the single channels on a {@link ChannelMultiplexer}. Simply forwards write requests to
63
72
  * the given write buffer source i.e. the main channel of the {@link ChannelMultiplexer}.
@@ -1 +1 @@
1
- {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../../src/common/message-rpc/channel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../../src/common/message-rpc/channel.ts"],"names":[],"mappings":"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"}
@@ -14,18 +14,8 @@
14
14
  //
15
15
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
16
16
  // *****************************************************************************
17
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
18
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
19
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
21
- return c > 3 && r && Object.defineProperty(target, key, r), r;
22
- };
23
- var __metadata = (this && this.__metadata) || function (k, v) {
24
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
25
- };
26
17
  Object.defineProperty(exports, "__esModule", { value: true });
27
- exports.ChannelMultiplexer = exports.MessageTypes = exports.ForwardingChannel = exports.AbstractChannel = void 0;
28
- const inversify_1 = require("../../../shared/inversify");
18
+ exports.ChannelMultiplexer = exports.MessageTypes = exports.ForwardingChannel = exports.BasicChannel = exports.AbstractChannel = void 0;
29
19
  const disposable_1 = require("../disposable");
30
20
  const event_1 = require("../event");
31
21
  ;
@@ -33,7 +23,7 @@ const event_1 = require("../event");
33
23
  * Reusable abstract {@link Channel} implementation that sets up
34
24
  * the basic channel event listeners and offers a generic close method.
35
25
  */
36
- let AbstractChannel = class AbstractChannel {
26
+ class AbstractChannel {
37
27
  constructor() {
38
28
  this.onCloseEmitter = new event_1.Emitter();
39
29
  this.onErrorEmitter = new event_1.Emitter();
@@ -56,12 +46,22 @@ let AbstractChannel = class AbstractChannel {
56
46
  close() {
57
47
  this.toDispose.dispose();
58
48
  }
59
- };
60
- AbstractChannel = __decorate([
61
- (0, inversify_1.injectable)(),
62
- __metadata("design:paramtypes", [])
63
- ], AbstractChannel);
49
+ }
64
50
  exports.AbstractChannel = AbstractChannel;
51
+ /**
52
+ * A very basic {@link AbstractChannel} implementation which takes a function
53
+ * for retrieving the {@link WriteBuffer} as constructor argument.
54
+ */
55
+ class BasicChannel extends AbstractChannel {
56
+ constructor(writeBufferProvider) {
57
+ super();
58
+ this.writeBufferProvider = writeBufferProvider;
59
+ }
60
+ getWriteBuffer() {
61
+ return this.writeBufferProvider();
62
+ }
63
+ }
64
+ exports.BasicChannel = BasicChannel;
65
65
  /**
66
66
  * Helper class to implement the single channels on a {@link ChannelMultiplexer}. Simply forwards write requests to
67
67
  * the given write buffer source i.e. the main channel of the {@link ChannelMultiplexer}.
@@ -145,7 +145,7 @@ class ChannelMultiplexer {
145
145
  return this.handleClose(id);
146
146
  }
147
147
  case MessageTypes.Data: {
148
- return this.handleData(id, buffer.sliceAtReadPosition());
148
+ return this.handleData(id, buffer);
149
149
  }
150
150
  }
151
151
  }
@@ -183,7 +183,7 @@ class ChannelMultiplexer {
183
183
  handleData(id, data) {
184
184
  const channel = this.openChannels.get(id);
185
185
  if (channel) {
186
- channel.onMessageEmitter.fire(() => data);
186
+ channel.onMessageEmitter.fire(() => data.sliceAtReadPosition());
187
187
  }
188
188
  }
189
189
  createChannel(id) {
@@ -205,6 +205,9 @@ class ChannelMultiplexer {
205
205
  this.openChannels.delete(id);
206
206
  }
207
207
  open(id) {
208
+ if (this.openChannels.has(id)) {
209
+ throw new Error(`Another channel with the id '${id}' is already open.`);
210
+ }
208
211
  const result = new Promise((resolve, reject) => {
209
212
  this.pendingOpen.set(id, resolve);
210
213
  });
@@ -1 +1 @@
1
- {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../../src/common/message-rpc/channel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../../src/common/message-rpc/channel.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export { RequestHandler, RpcProtocol, RpcProtocolOptions } from './rpc-protocol';
2
- export { Channel, AbstractChannel, ChannelCloseEvent, MessageProvider } from './channel';
1
+ export { AbstractChannel, Channel, ChannelCloseEvent, MessageProvider } from './channel';
3
2
  export { ReadBuffer, WriteBuffer } from './message-buffer';
3
+ export { RequestHandler, RpcProtocol, RpcProtocolOptions } from './rpc-protocol';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/message-rpc/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/message-rpc/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AbstractChannel = exports.RpcProtocol = void 0;
3
+ exports.RpcProtocol = exports.AbstractChannel = void 0;
4
4
  // *****************************************************************************
5
5
  // Copyright (C) 2022 STMicroelectronics and others.
6
6
  //
@@ -16,8 +16,10 @@ exports.AbstractChannel = exports.RpcProtocol = void 0;
16
16
  //
17
17
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
18
18
  // *****************************************************************************
19
- var rpc_protocol_1 = require("./rpc-protocol");
20
- Object.defineProperty(exports, "RpcProtocol", { enumerable: true, get: function () { return rpc_protocol_1.RpcProtocol; } });
21
19
  var channel_1 = require("./channel");
22
20
  Object.defineProperty(exports, "AbstractChannel", { enumerable: true, get: function () { return channel_1.AbstractChannel; } });
21
+ var rpc_protocol_1 = require("./rpc-protocol");
22
+ Object.defineProperty(exports, "RpcProtocol", { enumerable: true, get: function () { return rpc_protocol_1.RpcProtocol; } });
23
+ const rpc_message_encoder_1 = require("./rpc-message-encoder");
24
+ (0, rpc_message_encoder_1.registerMsgPackExtensions)();
23
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/message-rpc/index.ts"],"names":[],"mappings":";;;AAAA,gFAAgF;AAChF,oDAAoD;AACpD,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;AAChF,+CAAiF;AAAxD,2GAAA,WAAW,OAAA;AACpC,qCAAyF;AAAvE,0GAAA,eAAe,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/message-rpc/index.ts"],"names":[],"mappings":";;;AAAA,gFAAgF;AAChF,oDAAoD;AACpD,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;AAChF,qCAAyF;AAAhF,0GAAA,eAAe,OAAA;AAExB,+CAAiF;AAAxD,2GAAA,WAAW,OAAA;AAEpC,+DAAkE;AAElE,IAAA,+CAAyB,GAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Handles the global registration of custom MsgPackR extensions
3
+ * required for the default RPC communication. MsgPackR extensions
4
+ * are installed globally on both ends of the communication channel.
5
+ * (frontend-backend, pluginExt-pluginMain).
6
+ * Is implemented as singleton as it is also used in plugin child processes which have no access to inversify.
7
+ */
8
+ export declare class MsgPackExtensionManager {
9
+ private static readonly INSTANCE;
10
+ static getInstance(): MsgPackExtensionManager;
11
+ private extensions;
12
+ private constructor();
13
+ registerExtensions(...extensions: MsgPackExtension[]): void;
14
+ getExtension(tag: number): MsgPackExtension | undefined;
15
+ }
16
+ export interface MsgPackExtension {
17
+ class: Function;
18
+ tag: number;
19
+ serialize(instance: unknown): unknown;
20
+ deserialize(serialized: any): unknown;
21
+ }
22
+ export declare type Constructor<T> = new (...params: unknown[]) => T;
23
+ //# sourceMappingURL=msg-pack-extension-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msg-pack-extension-manager.d.ts","sourceRoot":"","sources":["../../../src/common/message-rpc/msg-pack-extension-manager.ts"],"names":[],"mappings":"AAkBA;;;;;;GAMG;AACH,qBAAa,uBAAuB;IAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAiC;WACnD,WAAW,IAAI,uBAAuB;IAIpD,OAAO,CAAC,UAAU,CAAuC;IAEzD,OAAO;IAGP,kBAAkB,CAAC,GAAG,UAAU,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAmB3D,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;CAG1D;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,QAAQ,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;IAEtC,WAAW,CAAC,UAAU,EAAE,GAAG,GAAG,OAAO,CAAA;CACxC;AAED,oBAAY,WAAW,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2022 STMicroelectronics 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
+ exports.MsgPackExtensionManager = void 0;
19
+ const msgpackr_1 = require("msgpackr");
20
+ /**
21
+ * Handles the global registration of custom MsgPackR extensions
22
+ * required for the default RPC communication. MsgPackR extensions
23
+ * are installed globally on both ends of the communication channel.
24
+ * (frontend-backend, pluginExt-pluginMain).
25
+ * Is implemented as singleton as it is also used in plugin child processes which have no access to inversify.
26
+ */
27
+ class MsgPackExtensionManager {
28
+ constructor() {
29
+ this.extensions = new Map();
30
+ }
31
+ static getInstance() {
32
+ return this.INSTANCE;
33
+ }
34
+ registerExtensions(...extensions) {
35
+ extensions.forEach(extension => {
36
+ if (extension.tag < 1 || extension.tag > 100) {
37
+ // MsgPackR reserves the tag range 1-100 for custom extensions.
38
+ throw new Error(`MsgPack extension tag should be a number from 1-100 but was '${extension.tag}'`);
39
+ }
40
+ if (this.extensions.has(extension.tag)) {
41
+ throw new Error(`Another MsgPack extension with the tag '${extension.tag}' is already registered`);
42
+ }
43
+ this.extensions.set(extension.tag, extension);
44
+ (0, msgpackr_1.addExtension)({
45
+ Class: extension.class,
46
+ type: extension.tag,
47
+ write: extension.serialize,
48
+ read: extension.deserialize
49
+ });
50
+ });
51
+ }
52
+ getExtension(tag) {
53
+ return this.extensions.get(tag);
54
+ }
55
+ }
56
+ exports.MsgPackExtensionManager = MsgPackExtensionManager;
57
+ MsgPackExtensionManager.INSTANCE = new MsgPackExtensionManager();
58
+ //# sourceMappingURL=msg-pack-extension-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msg-pack-extension-manager.js","sourceRoot":"","sources":["../../../src/common/message-rpc/msg-pack-extension-manager.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,oDAAoD;AACpD,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,uCAAwC;AAExC;;;;;;GAMG;AACH,MAAa,uBAAuB;IAQhC;QAFQ,eAAU,GAAG,IAAI,GAAG,EAA4B,CAAC;IAGzD,CAAC;IAPM,MAAM,CAAC,WAAW;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAOD,kBAAkB,CAAC,GAAG,UAA8B;QAChD,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC3B,IAAI,SAAS,CAAC,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,GAAG,GAAG,EAAE;gBAC1C,+DAA+D;gBAC/D,MAAM,IAAI,KAAK,CAAC,gEAAgE,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;aACrG;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;gBACpC,MAAM,IAAI,KAAK,CAAC,2CAA2C,SAAS,CAAC,GAAG,yBAAyB,CAAC,CAAC;aACtG;YACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAC9C,IAAA,uBAAY,EAAC;gBACT,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,IAAI,EAAE,SAAS,CAAC,GAAG;gBACnB,KAAK,EAAE,SAAS,CAAC,SAAS;gBAC1B,IAAI,EAAE,SAAS,CAAC,WAAW;aAC9B,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,YAAY,CAAC,GAAW;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;;AAhCL,0DAiCC;AAhC2B,gCAAQ,GAAG,IAAI,uBAAuB,EAAE,CAAC"}
@@ -100,4 +100,5 @@ export declare class MsgPackMessageDecoder implements RpcMessageDecoder {
100
100
  decode<T = any>(buf: ReadBuffer): T;
101
101
  parse(buffer: ReadBuffer): RpcMessage;
102
102
  }
103
+ export declare function registerMsgPackExtensions(): void;
103
104
  //# sourceMappingURL=rpc-message-encoder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-message-encoder.d.ts","sourceRoot":"","sources":["../../../src/common/message-rpc/rpc-message-encoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rpc-message-encoder.d.ts","sourceRoot":"","sources":["../../../src/common/message-rpc/rpc-message-encoder.ts"],"names":[],"mappings":"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"}
@@ -16,8 +16,9 @@
16
16
  // *****************************************************************************
17
17
  /* eslint-disable @typescript-eslint/no-explicit-any */
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.MsgPackMessageDecoder = exports.MsgPackMessageEncoder = exports.defaultMsgPack = exports.EncodingError = exports.ResponseError = void 0;
19
+ exports.registerMsgPackExtensions = exports.MsgPackMessageDecoder = exports.MsgPackMessageEncoder = exports.defaultMsgPack = exports.EncodingError = exports.ResponseError = void 0;
20
20
  const msgpackr_1 = require("msgpackr");
21
+ const msg_pack_extension_manager_1 = require("./msg-pack-extension-manager");
21
22
  /**
22
23
  * A special error that can be returned in case a request
23
24
  * has failed. Provides additional information i.e. an error code
@@ -43,21 +44,6 @@ class EncodingError extends Error {
43
44
  }
44
45
  exports.EncodingError = EncodingError;
45
46
  exports.defaultMsgPack = new msgpackr_1.Packr({ moreTypes: true, encodeUndefinedAsNil: false, bundleStrings: false });
46
- // Add custom msgpackR extension for ResponseErrors.
47
- (0, msgpackr_1.addExtension)({
48
- Class: ResponseError,
49
- type: 1,
50
- write: (instance) => {
51
- const { code, data, message, name, stack } = instance;
52
- return { code, data, message, name, stack };
53
- },
54
- read: data => {
55
- const error = new ResponseError(data.code, data.message, data.data);
56
- error.name = data.name;
57
- error.stack = data.stack;
58
- return error;
59
- }
60
- });
61
47
  class MsgPackMessageEncoder {
62
48
  constructor(msgPack = exports.defaultMsgPack) {
63
49
  this.msgPack = msgPack;
@@ -103,4 +89,26 @@ class MsgPackMessageDecoder {
103
89
  }
104
90
  }
105
91
  exports.MsgPackMessageDecoder = MsgPackMessageDecoder;
92
+ function registerMsgPackExtensions() {
93
+ // Register custom msgPack extension for Errors.
94
+ msg_pack_extension_manager_1.MsgPackExtensionManager.getInstance().registerExtensions({
95
+ class: Error,
96
+ tag: 1,
97
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
98
+ serialize: (error) => {
99
+ var _a;
100
+ const { code, data, message, name } = error;
101
+ const stack = (_a = error.stacktrace) !== null && _a !== void 0 ? _a : error.stack;
102
+ const isResponseError = error instanceof ResponseError;
103
+ return { code, data, message, name, stack, isResponseError };
104
+ },
105
+ deserialize: data => {
106
+ const error = data.isResponseError ? new ResponseError(data.code, data.message, data.data) : new Error(data.message);
107
+ error.name = data.name;
108
+ error.stack = data.stack;
109
+ return error;
110
+ }
111
+ });
112
+ }
113
+ exports.registerMsgPackExtensions = registerMsgPackExtensions;
106
114
  //# sourceMappingURL=rpc-message-encoder.js.map
@@ -1 +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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"}
1
+ {"version":3,"file":"rpc-message-encoder.js","sourceRoot":"","sources":["../../../src/common/message-rpc/rpc-message-encoder.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { Deferred } from '../promise-util';
5
5
  import { Channel } from './channel';
6
6
  import { RpcMessage, RpcMessageDecoder, RpcMessageEncoder } from './rpc-message-encoder';
7
7
  /**
8
- * Handles request messages received by the {@link RpcServer}.
8
+ * Handles request messages received by the {@link RPCProtocol}.
9
9
  */
10
10
  export declare type RequestHandler = (method: string, args: any[]) => Promise<any>;
11
11
  /**
@@ -20,22 +20,28 @@ export interface RpcProtocolOptions {
20
20
  * The message decoder that should be used. If `undefined` the default {@link RpcMessageDecoder} will be used.
21
21
  */
22
22
  decoder?: RpcMessageDecoder;
23
+ /**
24
+ * The runtime mode determines whether the RPC protocol is bi-directional (default) or acts as a client or server only.
25
+ */
26
+ mode?: 'default' | 'clientOnly' | 'serverOnly';
23
27
  }
24
28
  /**
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.
29
+ * Establish a RPC protocol on top of a given channel. By default the rpc protocol is bi-directional, meaning it is possible to send
30
+ * requests and notifications to the remote side (i.e. acts as client) as well as receiving requests and notifications from the remote side (i.e. acts as a server).
27
31
  * Clients can get a promise for a remote request result that will be either resolved or
28
32
  * rejected depending on the success of the request. Keeps track of outstanding requests and matches replies to the appropriate request
29
33
  * Currently, there is no timeout handling for long running requests implemented.
34
+ * The bi-directional mode can be reconfigured using the {@link RpcProtocolOptions} to construct an RPC protocol instance that acts only as client or server instead.
30
35
  */
31
36
  export declare class RpcProtocol {
32
37
  readonly channel: Channel;
33
- readonly requestHandler: RequestHandler;
38
+ readonly requestHandler: RequestHandler | undefined;
34
39
  static readonly CANCELLATION_TOKEN_KEY = "add.cancellation.token";
35
40
  protected readonly pendingRequests: Map<number, Deferred<any>>;
36
41
  protected nextMessageId: number;
37
42
  protected readonly encoder: RpcMessageEncoder;
38
43
  protected readonly decoder: RpcMessageDecoder;
44
+ protected readonly mode: 'default' | 'clientOnly' | 'serverOnly';
39
45
  protected readonly onNotificationEmitter: Emitter<{
40
46
  method: string;
41
47
  args: any[];
@@ -46,7 +52,7 @@ export declare class RpcProtocol {
46
52
  args: any[];
47
53
  }>;
48
54
  protected toDispose: DisposableCollection;
49
- constructor(channel: Channel, requestHandler: RequestHandler, options?: RpcProtocolOptions);
55
+ constructor(channel: Channel, requestHandler: RequestHandler | undefined, options?: RpcProtocolOptions);
50
56
  handleMessage(message: RpcMessage): void;
51
57
  protected handleReply(id: number, value: any): void;
52
58
  protected handleReplyErr(id: number, error: any): void;
@@ -1 +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,EAAgD,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAkB,MAAM,uBAAuB,CAAC;AAGvJ;;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,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"}
1
+ {"version":3,"file":"rpc-protocol.d.ts","sourceRoot":"","sources":["../../../src/common/message-rpc/rpc-protocol.ts"],"names":[],"mappings":"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"}
@@ -22,17 +22,17 @@ const disposable_1 = require("../disposable");
22
22
  const event_1 = require("../event");
23
23
  const promise_util_1 = require("../promise-util");
24
24
  const rpc_message_encoder_1 = require("./rpc-message-encoder");
25
- const uint8_array_message_buffer_1 = require("./uint8-array-message-buffer");
26
25
  /**
27
- * Establish a bi-directional RPC protocol on top of a given channel. Bi-directional means to send
28
- * sends requests and notifications to the remote side as well as receiving requests and notifications from the remote side.
26
+ * Establish a RPC protocol on top of a given channel. By default the rpc protocol is bi-directional, meaning it is possible to send
27
+ * requests and notifications to the remote side (i.e. acts as client) as well as receiving requests and notifications from the remote side (i.e. acts as a server).
29
28
  * Clients can get a promise for a remote request result that will be either resolved or
30
29
  * rejected depending on the success of the request. Keeps track of outstanding requests and matches replies to the appropriate request
31
30
  * Currently, there is no timeout handling for long running requests implemented.
31
+ * The bi-directional mode can be reconfigured using the {@link RpcProtocolOptions} to construct an RPC protocol instance that acts only as client or server instead.
32
32
  */
33
33
  class RpcProtocol {
34
34
  constructor(channel, requestHandler, options = {}) {
35
- var _a, _b;
35
+ var _a, _b, _c;
36
36
  this.channel = channel;
37
37
  this.requestHandler = requestHandler;
38
38
  this.pendingRequests = new Map();
@@ -43,35 +43,47 @@ class RpcProtocol {
43
43
  this.encoder = (_a = options.encoder) !== null && _a !== void 0 ? _a : new rpc_message_encoder_1.MsgPackMessageEncoder();
44
44
  this.decoder = (_b = options.decoder) !== null && _b !== void 0 ? _b : new rpc_message_encoder_1.MsgPackMessageDecoder();
45
45
  this.toDispose.push(this.onNotificationEmitter);
46
- this.toDispose.push(channel.onMessage(readBuffer => this.handleMessage(this.decoder.parse(readBuffer()))));
47
46
  channel.onClose(() => this.toDispose.dispose());
47
+ this.toDispose.push(channel.onMessage(readBuffer => this.handleMessage(this.decoder.parse(readBuffer()))));
48
+ this.mode = (_c = options.mode) !== null && _c !== void 0 ? _c : 'default';
49
+ if (this.mode !== 'clientOnly' && requestHandler === undefined) {
50
+ console.error('RPCProtocol was initialized without a request handler but was not set to clientOnly mode.');
51
+ }
48
52
  }
49
53
  get onNotification() {
50
54
  return this.onNotificationEmitter.event;
51
55
  }
52
56
  handleMessage(message) {
53
- switch (message.type) {
54
- case 5 /* Cancel */: {
55
- this.handleCancel(message.id);
56
- break;
57
- }
58
- case 1 /* Request */: {
59
- this.handleRequest(message.id, message.method, message.args);
60
- break;
57
+ if (this.mode !== 'clientOnly') {
58
+ switch (message.type) {
59
+ case 5 /* Cancel */: {
60
+ this.handleCancel(message.id);
61
+ return;
62
+ }
63
+ case 1 /* Request */: {
64
+ this.handleRequest(message.id, message.method, message.args);
65
+ return;
66
+ }
67
+ case 2 /* Notification */: {
68
+ this.handleNotify(message.id, message.method, message.args);
69
+ return;
70
+ }
61
71
  }
62
- case 2 /* Notification */: {
63
- this.handleNotify(message.id, message.method, message.args);
64
- break;
65
- }
66
- case 3 /* Reply */: {
67
- this.handleReply(message.id, message.res);
68
- break;
69
- }
70
- case 4 /* ReplyErr */: {
71
- this.handleReplyErr(message.id, message.err);
72
- break;
72
+ }
73
+ if (this.mode !== 'serverOnly') {
74
+ switch (message.type) {
75
+ case 3 /* Reply */: {
76
+ this.handleReply(message.id, message.res);
77
+ return;
78
+ }
79
+ case 4 /* ReplyErr */: {
80
+ this.handleReplyErr(message.id, message.err);
81
+ return;
82
+ }
73
83
  }
74
84
  }
85
+ // If the message was not handled until here, it is incompatible with the mode.
86
+ console.warn(`Received message incompatible with this RPCProtocol's mode '${this.mode}'. Type: ${message.type}. ID: ${message.id}.`);
75
87
  }
76
88
  handleReply(id, value) {
77
89
  const replyHandler = this.pendingRequests.get(id);
@@ -99,11 +111,11 @@ class RpcProtocol {
99
111
  }
100
112
  }
101
113
  sendRequest(method, args) {
102
- const id = this.nextMessageId++;
103
- const reply = new promise_util_1.Deferred();
104
114
  // The last element of the request args might be a cancellation token. As these tokens are not serializable we have to remove it from the
105
115
  // args array and the `CANCELLATION_TOKEN_KEY` string instead.
106
116
  const cancellationToken = args.length && cancellation_1.CancellationToken.is(args[args.length - 1]) ? args.pop() : undefined;
117
+ const id = this.nextMessageId++;
118
+ const reply = new promise_util_1.Deferred();
107
119
  if (cancellationToken) {
108
120
  args.push(RpcProtocol.CANCELLATION_TOKEN_KEY);
109
121
  }
@@ -120,6 +132,12 @@ class RpcProtocol {
120
132
  return reply.promise;
121
133
  }
122
134
  sendNotification(method, args) {
135
+ // If the notification supports a CancellationToken, it needs to be treated like a request
136
+ // because cancellation does not work with the simplified "fire and forget" approach of simple notifications.
137
+ if (args.length && cancellation_1.CancellationToken.is(args[args.length - 1])) {
138
+ this.sendRequest(method, args);
139
+ return;
140
+ }
123
141
  const output = this.channel.getWriteBuffer();
124
142
  this.encoder.notification(output, this.nextMessageId++, method, args);
125
143
  output.commit();
@@ -132,7 +150,6 @@ class RpcProtocol {
132
150
  handleCancel(id) {
133
151
  const cancellationTokenSource = this.cancellationTokenSources.get(id);
134
152
  if (cancellationTokenSource) {
135
- this.cancellationTokenSources.delete(id);
136
153
  cancellationTokenSource.cancel();
137
154
  }
138
155
  }
@@ -155,7 +172,7 @@ class RpcProtocol {
155
172
  catch (err) {
156
173
  // In case of an error the output buffer might already contains parts of an message.
157
174
  // => Dispose the current buffer and retrieve a new, clean one for writing the response error.
158
- if (output instanceof uint8_array_message_buffer_1.Uint8ArrayWriteBuffer) {
175
+ if (disposable_1.Disposable.is(output)) {
159
176
  output.dispose();
160
177
  }
161
178
  const errorOutput = this.channel.getWriteBuffer();
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-protocol.js","sourceRoot":"","sources":["../../../src/common/message-rpc/rpc-protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rpc-protocol.js","sourceRoot":"","sources":["../../../src/common/message-rpc/rpc-protocol.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export * from './messaging-service';
2
2
  export * from './ipc-connection-provider';
3
+ export * from './ipc-channel';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/node/messaging/index.ts"],"names":[],"mappings":"AAgBA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/node/messaging/index.ts"],"names":[],"mappings":"AAgBA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC"}
@@ -27,4 +27,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
27
27
  Object.defineProperty(exports, "__esModule", { value: true });
28
28
  __exportStar(require("./messaging-service"), exports);
29
29
  __exportStar(require("./ipc-connection-provider"), exports);
30
+ __exportStar(require("./ipc-channel"), exports);
30
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/messaging/index.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,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,sDAAoC;AACpC,4DAA0C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/messaging/index.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,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,sDAAoC;AACpC,4DAA0C;AAC1C,gDAA8B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theia/core",
3
- "version": "1.33.0-next.5+cb0778617",
3
+ "version": "1.33.0-next.9+1dcddc630",
4
4
  "description": "Theia is a cloud & desktop IDE framework implemented in TypeScript.",
5
5
  "main": "lib/common/index.js",
6
6
  "typings": "lib/common/index.d.ts",
@@ -16,8 +16,8 @@
16
16
  "@phosphor/signaling": "1",
17
17
  "@phosphor/virtualdom": "1",
18
18
  "@phosphor/widgets": "1",
19
- "@theia/application-package": "1.33.0-next.5+cb0778617",
20
- "@theia/request": "1.33.0-next.5+cb0778617",
19
+ "@theia/application-package": "1.33.0-next.9+1dcddc630",
20
+ "@theia/request": "1.33.0-next.9+1dcddc630",
21
21
  "@types/body-parser": "^1.16.4",
22
22
  "@types/cookie": "^0.3.3",
23
23
  "@types/dompurify": "^2.2.2",
@@ -202,5 +202,5 @@
202
202
  "nyc": {
203
203
  "extends": "../../configs/nyc.json"
204
204
  },
205
- "gitHead": "cb0778617e8726fa51c920208b7468149753a3fb"
205
+ "gitHead": "1dcddc630ab0beb5d66ec885d207d3e6529fb692"
206
206
  }
@@ -14,7 +14,6 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { injectable } from '../../../shared/inversify';
18
17
  import { Disposable, DisposableCollection } from '../disposable';
19
18
  import { Emitter, Event } from '../event';
20
19
  import { ReadBuffer, WriteBuffer } from './message-buffer';
@@ -72,7 +71,6 @@ export type MessageProvider = () => ReadBuffer;
72
71
  * Reusable abstract {@link Channel} implementation that sets up
73
72
  * the basic channel event listeners and offers a generic close method.
74
73
  */
75
- @injectable()
76
74
  export abstract class AbstractChannel implements Channel {
77
75
 
78
76
  onCloseEmitter: Emitter<ChannelCloseEvent> = new Emitter();
@@ -101,7 +99,21 @@ export abstract class AbstractChannel implements Channel {
101
99
  }
102
100
 
103
101
  abstract getWriteBuffer(): WriteBuffer;
102
+ }
103
+
104
+ /**
105
+ * A very basic {@link AbstractChannel} implementation which takes a function
106
+ * for retrieving the {@link WriteBuffer} as constructor argument.
107
+ */
108
+ export class BasicChannel extends AbstractChannel {
109
+
110
+ constructor(protected writeBufferProvider: () => WriteBuffer) {
111
+ super();
112
+ }
104
113
 
114
+ getWriteBuffer(): WriteBuffer {
115
+ return this.writeBufferProvider();
116
+ }
105
117
  }
106
118
 
107
119
  /**
@@ -194,7 +206,7 @@ export class ChannelMultiplexer implements Disposable {
194
206
  return this.handleClose(id);
195
207
  }
196
208
  case MessageTypes.Data: {
197
- return this.handleData(id, buffer.sliceAtReadPosition());
209
+ return this.handleData(id, buffer);
198
210
  }
199
211
  }
200
212
  }
@@ -206,7 +218,7 @@ export class ChannelMultiplexer implements Disposable {
206
218
  const channel = this.createChannel(id);
207
219
  this.pendingOpen.delete(id);
208
220
  this.openChannels.set(id, channel);
209
- resolve!(channel);
221
+ resolve(channel);
210
222
  this.onOpenChannelEmitter.fire({ id, channel });
211
223
  }
212
224
  }
@@ -236,7 +248,7 @@ export class ChannelMultiplexer implements Disposable {
236
248
  protected handleData(id: string, data: ReadBuffer): void {
237
249
  const channel = this.openChannels.get(id);
238
250
  if (channel) {
239
- channel.onMessageEmitter.fire(() => data);
251
+ channel.onMessageEmitter.fire(() => data.sliceAtReadPosition());
240
252
  }
241
253
  }
242
254
 
@@ -263,6 +275,9 @@ export class ChannelMultiplexer implements Disposable {
263
275
  }
264
276
 
265
277
  open(id: string): Promise<Channel> {
278
+ if (this.openChannels.has(id)) {
279
+ throw new Error(`Another channel with the id '${id}' is already open.`);
280
+ }
266
281
  const result = new Promise<Channel>((resolve, reject) => {
267
282
  this.pendingOpen.set(id, resolve);
268
283
  });
@@ -13,6 +13,10 @@
13
13
  //
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
- export { RequestHandler, RpcProtocol, RpcProtocolOptions } from './rpc-protocol';
17
- export { Channel, AbstractChannel, ChannelCloseEvent, MessageProvider } from './channel';
16
+ export { AbstractChannel, Channel, ChannelCloseEvent, MessageProvider } from './channel';
18
17
  export { ReadBuffer, WriteBuffer } from './message-buffer';
18
+ export { RequestHandler, RpcProtocol, RpcProtocolOptions } from './rpc-protocol';
19
+
20
+ import { registerMsgPackExtensions } from './rpc-message-encoder';
21
+
22
+ registerMsgPackExtensions();
@@ -0,0 +1,70 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2022 STMicroelectronics and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { addExtension } from 'msgpackr';
18
+
19
+ /**
20
+ * Handles the global registration of custom MsgPackR extensions
21
+ * required for the default RPC communication. MsgPackR extensions
22
+ * are installed globally on both ends of the communication channel.
23
+ * (frontend-backend, pluginExt-pluginMain).
24
+ * Is implemented as singleton as it is also used in plugin child processes which have no access to inversify.
25
+ */
26
+ export class MsgPackExtensionManager {
27
+ private static readonly INSTANCE = new MsgPackExtensionManager();
28
+ public static getInstance(): MsgPackExtensionManager {
29
+ return this.INSTANCE;
30
+ }
31
+
32
+ private extensions = new Map<number, MsgPackExtension>();
33
+
34
+ private constructor() {
35
+ }
36
+
37
+ registerExtensions(...extensions: MsgPackExtension[]): void {
38
+ extensions.forEach(extension => {
39
+ if (extension.tag < 1 || extension.tag > 100) {
40
+ // MsgPackR reserves the tag range 1-100 for custom extensions.
41
+ throw new Error(`MsgPack extension tag should be a number from 1-100 but was '${extension.tag}'`);
42
+ }
43
+ if (this.extensions.has(extension.tag)) {
44
+ throw new Error(`Another MsgPack extension with the tag '${extension.tag}' is already registered`);
45
+ }
46
+ this.extensions.set(extension.tag, extension);
47
+ addExtension({
48
+ Class: extension.class,
49
+ type: extension.tag,
50
+ write: extension.serialize,
51
+ read: extension.deserialize
52
+ });
53
+ });
54
+ }
55
+
56
+ getExtension(tag: number): MsgPackExtension | undefined {
57
+ return this.extensions.get(tag);
58
+ }
59
+ }
60
+
61
+ export interface MsgPackExtension {
62
+ class: Function,
63
+ tag: number,
64
+ serialize(instance: unknown): unknown,
65
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
66
+ deserialize(serialized: any): unknown
67
+ }
68
+
69
+ export type Constructor<T> = new (...params: unknown[]) => T;
70
+
@@ -15,8 +15,9 @@
15
15
  // *****************************************************************************
16
16
  /* eslint-disable @typescript-eslint/no-explicit-any */
17
17
 
18
- import { addExtension, Packr as MsgPack } from 'msgpackr';
18
+ import { Packr as MsgPack } from 'msgpackr';
19
19
  import { ReadBuffer, WriteBuffer } from './message-buffer';
20
+ import { MsgPackExtensionManager } from './msg-pack-extension-manager';
20
21
 
21
22
  /**
22
23
  * This code lets you encode rpc protocol messages (request/reply/notification/error/cancel)
@@ -121,27 +122,10 @@ export interface RpcMessageEncoder {
121
122
  }
122
123
 
123
124
  export const defaultMsgPack = new MsgPack({ moreTypes: true, encodeUndefinedAsNil: false, bundleStrings: false });
124
- // Add custom msgpackR extension for ResponseErrors.
125
- addExtension({
126
- Class: ResponseError,
127
- type: 1,
128
- write: (instance: ResponseError) => {
129
- const { code, data, message, name, stack } = instance;
130
- return { code, data, message, name, stack };
131
- },
132
- read: data => {
133
- const error = new ResponseError(data.code, data.message, data.data);
134
- error.name = data.name;
135
- error.stack = data.stack;
136
- return error;
137
- }
138
- });
139
125
 
140
126
  export class MsgPackMessageEncoder implements RpcMessageEncoder {
141
127
 
142
- constructor(protected readonly msgPack: MsgPack = defaultMsgPack) {
143
-
144
- }
128
+ constructor(protected readonly msgPack: MsgPack = defaultMsgPack) { }
145
129
 
146
130
  cancel(buf: WriteBuffer, requestId: number): void {
147
131
  this.encode<CancelMessage>(buf, { type: RpcMessageType.Cancel, id: requestId });
@@ -169,13 +153,11 @@ export class MsgPackMessageEncoder implements RpcMessageEncoder {
169
153
  throw err;
170
154
  }
171
155
  }
172
-
173
156
  }
174
157
 
175
158
  export class MsgPackMessageDecoder implements RpcMessageDecoder {
176
- constructor(protected readonly msgPack: MsgPack = defaultMsgPack) {
159
+ constructor(protected readonly msgPack: MsgPack = defaultMsgPack) { }
177
160
 
178
- }
179
161
  decode<T = any>(buf: ReadBuffer): T {
180
162
  const bytes = buf.readBytes();
181
163
  return this.msgPack.decode(bytes);
@@ -184,5 +166,25 @@ export class MsgPackMessageDecoder implements RpcMessageDecoder {
184
166
  parse(buffer: ReadBuffer): RpcMessage {
185
167
  return this.decode(buffer);
186
168
  }
169
+ }
187
170
 
171
+ export function registerMsgPackExtensions(): void {
172
+ // Register custom msgPack extension for Errors.
173
+ MsgPackExtensionManager.getInstance().registerExtensions({
174
+ class: Error,
175
+ tag: 1,
176
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
177
+ serialize: (error: any) => {
178
+ const { code, data, message, name } = error;
179
+ const stack = error.stacktrace ?? error.stack;
180
+ const isResponseError = error instanceof ResponseError;
181
+ return { code, data, message, name, stack, isResponseError };
182
+ },
183
+ deserialize: data => {
184
+ const error = data.isResponseError ? new ResponseError(data.code, data.message, data.data) : new Error(data.message);
185
+ error.name = data.name;
186
+ error.stack = data.stack;
187
+ return error;
188
+ }
189
+ });
188
190
  }
@@ -16,15 +16,14 @@
16
16
  /* eslint-disable @typescript-eslint/no-explicit-any */
17
17
 
18
18
  import { CancellationToken, CancellationTokenSource } from '../cancellation';
19
- import { DisposableCollection } from '../disposable';
19
+ import { Disposable, DisposableCollection } from '../disposable';
20
20
  import { Emitter, Event } from '../event';
21
21
  import { Deferred } from '../promise-util';
22
22
  import { Channel } from './channel';
23
23
  import { MsgPackMessageDecoder, MsgPackMessageEncoder, RpcMessage, RpcMessageDecoder, RpcMessageEncoder, RpcMessageType } from './rpc-message-encoder';
24
- import { Uint8ArrayWriteBuffer } from './uint8-array-message-buffer';
25
24
 
26
25
  /**
27
- * Handles request messages received by the {@link RpcServer}.
26
+ * Handles request messages received by the {@link RPCProtocol}.
28
27
  */
29
28
  export type RequestHandler = (method: string, args: any[]) => Promise<any>;
30
29
 
@@ -39,15 +38,20 @@ export interface RpcProtocolOptions {
39
38
  /**
40
39
  * The message decoder that should be used. If `undefined` the default {@link RpcMessageDecoder} will be used.
41
40
  */
42
- decoder?: RpcMessageDecoder
41
+ decoder?: RpcMessageDecoder,
42
+ /**
43
+ * The runtime mode determines whether the RPC protocol is bi-directional (default) or acts as a client or server only.
44
+ */
45
+ mode?: 'default' | 'clientOnly' | 'serverOnly'
43
46
  }
44
47
 
45
48
  /**
46
- * Establish a bi-directional RPC protocol on top of a given channel. Bi-directional means to send
47
- * sends requests and notifications to the remote side as well as receiving requests and notifications from the remote side.
49
+ * Establish a RPC protocol on top of a given channel. By default the rpc protocol is bi-directional, meaning it is possible to send
50
+ * requests and notifications to the remote side (i.e. acts as client) as well as receiving requests and notifications from the remote side (i.e. acts as a server).
48
51
  * Clients can get a promise for a remote request result that will be either resolved or
49
52
  * rejected depending on the success of the request. Keeps track of outstanding requests and matches replies to the appropriate request
50
53
  * Currently, there is no timeout handling for long running requests implemented.
54
+ * The bi-directional mode can be reconfigured using the {@link RpcProtocolOptions} to construct an RPC protocol instance that acts only as client or server instead.
51
55
  */
52
56
  export class RpcProtocol {
53
57
  static readonly CANCELLATION_TOKEN_KEY = 'add.cancellation.token';
@@ -58,6 +62,7 @@ export class RpcProtocol {
58
62
 
59
63
  protected readonly encoder: RpcMessageEncoder;
60
64
  protected readonly decoder: RpcMessageDecoder;
65
+ protected readonly mode: 'default' | 'clientOnly' | 'serverOnly';
61
66
 
62
67
  protected readonly onNotificationEmitter: Emitter<{ method: string; args: any[]; }> = new Emitter();
63
68
  protected readonly cancellationTokenSources = new Map<number, CancellationTokenSource>();
@@ -68,37 +73,50 @@ export class RpcProtocol {
68
73
 
69
74
  protected toDispose = new DisposableCollection();
70
75
 
71
- constructor(public readonly channel: Channel, public readonly requestHandler: RequestHandler, options: RpcProtocolOptions = {}) {
76
+ constructor(public readonly channel: Channel, public readonly requestHandler: RequestHandler | undefined, options: RpcProtocolOptions = {}) {
72
77
  this.encoder = options.encoder ?? new MsgPackMessageEncoder();
73
78
  this.decoder = options.decoder ?? new MsgPackMessageDecoder();
74
79
  this.toDispose.push(this.onNotificationEmitter);
75
- this.toDispose.push(channel.onMessage(readBuffer => this.handleMessage(this.decoder.parse(readBuffer()))));
76
80
  channel.onClose(() => this.toDispose.dispose());
81
+ this.toDispose.push(channel.onMessage(readBuffer => this.handleMessage(this.decoder.parse(readBuffer()))));
82
+ this.mode = options.mode ?? 'default';
83
+
84
+ if (this.mode !== 'clientOnly' && requestHandler === undefined) {
85
+ console.error('RPCProtocol was initialized without a request handler but was not set to clientOnly mode.');
86
+ }
77
87
  }
78
88
 
79
89
  handleMessage(message: RpcMessage): void {
80
- switch (message.type) {
81
- case RpcMessageType.Cancel: {
82
- this.handleCancel(message.id);
83
- break;
84
- }
85
- case RpcMessageType.Request: {
86
- this.handleRequest(message.id, message.method, message.args);
87
- break;
88
- }
89
- case RpcMessageType.Notification: {
90
- this.handleNotify(message.id, message.method, message.args);
91
- break;
90
+ if (this.mode !== 'clientOnly') {
91
+ switch (message.type) {
92
+ case RpcMessageType.Cancel: {
93
+ this.handleCancel(message.id);
94
+ return;
95
+ }
96
+ case RpcMessageType.Request: {
97
+ this.handleRequest(message.id, message.method, message.args);
98
+ return;
99
+ }
100
+ case RpcMessageType.Notification: {
101
+ this.handleNotify(message.id, message.method, message.args);
102
+ return;
103
+ }
92
104
  }
93
- case RpcMessageType.Reply: {
94
- this.handleReply(message.id, message.res);
95
- break;
96
- }
97
- case RpcMessageType.ReplyErr: {
98
- this.handleReplyErr(message.id, message.err);
99
- break;
105
+ }
106
+ if (this.mode !== 'serverOnly') {
107
+ switch (message.type) {
108
+ case RpcMessageType.Reply: {
109
+ this.handleReply(message.id, message.res);
110
+ return;
111
+ }
112
+ case RpcMessageType.ReplyErr: {
113
+ this.handleReplyErr(message.id, message.err);
114
+ return;
115
+ }
100
116
  }
101
117
  }
118
+ // If the message was not handled until here, it is incompatible with the mode.
119
+ console.warn(`Received message incompatible with this RPCProtocol's mode '${this.mode}'. Type: ${message.type}. ID: ${message.id}.`);
102
120
  }
103
121
 
104
122
  protected handleReply(id: number, value: any): void {
@@ -126,13 +144,13 @@ export class RpcProtocol {
126
144
  }
127
145
 
128
146
  sendRequest<T>(method: string, args: any[]): Promise<T> {
129
- const id = this.nextMessageId++;
130
- const reply = new Deferred<T>();
131
-
132
147
  // The last element of the request args might be a cancellation token. As these tokens are not serializable we have to remove it from the
133
148
  // args array and the `CANCELLATION_TOKEN_KEY` string instead.
134
149
  const cancellationToken: CancellationToken | undefined = args.length && CancellationToken.is(args[args.length - 1]) ? args.pop() : undefined;
135
150
 
151
+ const id = this.nextMessageId++;
152
+ const reply = new Deferred<T>();
153
+
136
154
  if (cancellationToken) {
137
155
  args.push(RpcProtocol.CANCELLATION_TOKEN_KEY);
138
156
  }
@@ -153,6 +171,13 @@ export class RpcProtocol {
153
171
  }
154
172
 
155
173
  sendNotification(method: string, args: any[]): void {
174
+ // If the notification supports a CancellationToken, it needs to be treated like a request
175
+ // because cancellation does not work with the simplified "fire and forget" approach of simple notifications.
176
+ if (args.length && CancellationToken.is(args[args.length - 1])) {
177
+ this.sendRequest(method, args);
178
+ return;
179
+ }
180
+
156
181
  const output = this.channel.getWriteBuffer();
157
182
  this.encoder.notification(output, this.nextMessageId++, method, args);
158
183
  output.commit();
@@ -167,7 +192,6 @@ export class RpcProtocol {
167
192
  protected handleCancel(id: number): void {
168
193
  const cancellationTokenSource = this.cancellationTokenSources.get(id);
169
194
  if (cancellationTokenSource) {
170
- this.cancellationTokenSources.delete(id);
171
195
  cancellationTokenSource.cancel();
172
196
  }
173
197
  }
@@ -185,14 +209,14 @@ export class RpcProtocol {
185
209
  }
186
210
 
187
211
  try {
188
- const result = await this.requestHandler(method, args);
212
+ const result = await this.requestHandler!(method, args);
189
213
  this.cancellationTokenSources.delete(id);
190
214
  this.encoder.replyOK(output, id, result);
191
215
  output.commit();
192
216
  } catch (err) {
193
217
  // In case of an error the output buffer might already contains parts of an message.
194
218
  // => Dispose the current buffer and retrieve a new, clean one for writing the response error.
195
- if (output instanceof Uint8ArrayWriteBuffer) {
219
+ if (Disposable.is(output)) {
196
220
  output.dispose();
197
221
  }
198
222
  const errorOutput = this.channel.getWriteBuffer();
@@ -16,3 +16,4 @@
16
16
 
17
17
  export * from './messaging-service';
18
18
  export * from './ipc-connection-provider';
19
+ export * from './ipc-channel';