@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.
- package/README.md +6 -7
- package/lib/browser/messaging/ws-connection-provider.d.ts +5 -4
- package/lib/browser/messaging/ws-connection-provider.d.ts.map +1 -1
- package/lib/browser/messaging/ws-connection-provider.js +30 -23
- package/lib/browser/messaging/ws-connection-provider.js.map +1 -1
- package/lib/browser/progress-status-bar-item.d.ts +1 -1
- package/lib/browser/progress-status-bar-item.d.ts.map +1 -1
- package/lib/browser/tree/tree-compression/compressed-tree-widget.js +2 -2
- package/lib/browser/tree/tree-compression/compressed-tree-widget.js.map +1 -1
- package/lib/browser/widgets/select-component.d.ts +4 -1
- package/lib/browser/widgets/select-component.d.ts.map +1 -1
- package/lib/browser/widgets/select-component.js +30 -16
- package/lib/browser/widgets/select-component.js.map +1 -1
- package/lib/common/cancellation.d.ts +1 -0
- package/lib/common/cancellation.d.ts.map +1 -1
- package/lib/common/cancellation.js +8 -0
- package/lib/common/cancellation.js.map +1 -1
- package/lib/common/index.d.ts +2 -0
- package/lib/common/index.d.ts.map +1 -1
- package/lib/common/index.js +2 -0
- package/lib/common/index.js.map +1 -1
- package/lib/common/message-rpc/channel.d.ts +106 -0
- package/lib/common/message-rpc/channel.d.ts.map +1 -0
- package/lib/common/message-rpc/channel.js +195 -0
- package/lib/common/message-rpc/channel.js.map +1 -0
- package/lib/common/message-rpc/channel.spec.d.ts +9 -0
- package/lib/common/message-rpc/channel.spec.d.ts.map +1 -0
- package/lib/common/message-rpc/channel.spec.js +80 -0
- package/lib/common/message-rpc/channel.spec.js.map +1 -0
- package/lib/common/message-rpc/index.d.ts +4 -0
- package/lib/common/message-rpc/index.d.ts.map +1 -0
- package/lib/{node/messaging/logger.js → common/message-rpc/index.js} +6 -19
- package/lib/common/message-rpc/index.js.map +1 -0
- package/lib/common/message-rpc/message-buffer.d.ts +50 -0
- package/lib/common/message-rpc/message-buffer.d.ts.map +1 -0
- package/lib/common/message-rpc/message-buffer.js +56 -0
- package/lib/common/message-rpc/message-buffer.js.map +1 -0
- package/lib/common/message-rpc/rpc-message-encoder.d.ts +159 -0
- package/lib/common/message-rpc/rpc-message-encoder.d.ts.map +1 -0
- package/lib/common/message-rpc/rpc-message-encoder.js +362 -0
- package/lib/common/message-rpc/rpc-message-encoder.js.map +1 -0
- package/lib/common/message-rpc/rpc-message-encoder.spec.d.ts +2 -0
- package/lib/common/message-rpc/rpc-message-encoder.spec.d.ts.map +1 -0
- package/lib/common/message-rpc/rpc-message-encoder.spec.js +37 -0
- package/lib/common/message-rpc/rpc-message-encoder.spec.js.map +1 -0
- package/lib/common/message-rpc/rpc-protocol.d.ts +61 -0
- package/lib/common/message-rpc/rpc-protocol.d.ts.map +1 -0
- package/lib/common/message-rpc/rpc-protocol.js +183 -0
- package/lib/common/message-rpc/rpc-protocol.js.map +1 -0
- package/lib/common/message-rpc/uint8-array-message-buffer.d.ts +52 -0
- package/lib/common/message-rpc/uint8-array-message-buffer.d.ts.map +1 -0
- package/lib/common/message-rpc/uint8-array-message-buffer.js +169 -0
- package/lib/common/message-rpc/uint8-array-message-buffer.js.map +1 -0
- package/lib/common/message-rpc/uint8-array-message-buffer.spec.d.ts +2 -0
- package/lib/common/message-rpc/uint8-array-message-buffer.spec.d.ts.map +1 -0
- package/lib/common/message-rpc/uint8-array-message-buffer.spec.js +39 -0
- package/lib/common/message-rpc/uint8-array-message-buffer.spec.js.map +1 -0
- package/lib/common/messaging/abstract-connection-provider.d.ts +9 -8
- package/lib/common/messaging/abstract-connection-provider.d.ts.map +1 -1
- package/lib/common/messaging/abstract-connection-provider.js +20 -35
- package/lib/common/messaging/abstract-connection-provider.js.map +1 -1
- package/lib/common/messaging/connection-error-handler.d.ts +1 -2
- package/lib/common/messaging/connection-error-handler.d.ts.map +1 -1
- package/lib/common/messaging/connection-error-handler.js +1 -1
- package/lib/common/messaging/connection-error-handler.js.map +1 -1
- package/lib/common/messaging/handler.d.ts +2 -2
- package/lib/common/messaging/handler.d.ts.map +1 -1
- package/lib/common/messaging/proxy-factory.d.ts +13 -7
- package/lib/common/messaging/proxy-factory.d.ts.map +1 -1
- package/lib/common/messaging/proxy-factory.js +18 -13
- package/lib/common/messaging/proxy-factory.js.map +1 -1
- package/lib/common/messaging/proxy-factory.spec.js +4 -15
- package/lib/common/messaging/proxy-factory.spec.js.map +1 -1
- package/lib/common/messaging/web-socket-channel.d.ts +54 -48
- package/lib/common/messaging/web-socket-channel.d.ts.map +1 -1
- package/lib/common/messaging/web-socket-channel.js +41 -105
- package/lib/common/messaging/web-socket-channel.js.map +1 -1
- package/lib/electron-browser/messaging/electron-ipc-connection-provider.d.ts +2 -2
- package/lib/electron-browser/messaging/electron-ipc-connection-provider.d.ts.map +1 -1
- package/lib/electron-browser/messaging/electron-ipc-connection-provider.js +18 -7
- package/lib/electron-browser/messaging/electron-ipc-connection-provider.js.map +1 -1
- package/lib/electron-browser/messaging/electron-ws-connection-provider.d.ts +2 -2
- package/lib/electron-browser/messaging/electron-ws-connection-provider.d.ts.map +1 -1
- package/lib/electron-browser/messaging/electron-ws-connection-provider.js +5 -7
- package/lib/electron-browser/messaging/electron-ws-connection-provider.js.map +1 -1
- package/lib/electron-main/messaging/electron-messaging-contribution.d.ts +37 -9
- package/lib/electron-main/messaging/electron-messaging-contribution.d.ts.map +1 -1
- package/lib/electron-main/messaging/electron-messaging-contribution.js +83 -68
- package/lib/electron-main/messaging/electron-messaging-contribution.js.map +1 -1
- package/lib/electron-main/messaging/electron-messaging-service.d.ts +2 -8
- package/lib/electron-main/messaging/electron-messaging-service.d.ts.map +1 -1
- package/lib/electron-main/messaging/electron-messaging-service.js.map +1 -1
- package/lib/electron-main/theia-electron-window.d.ts.map +1 -1
- package/lib/electron-main/theia-electron-window.js +11 -8
- package/lib/electron-main/theia-electron-window.js.map +1 -1
- package/lib/node/messaging/binary-message-pipe.d.ts +45 -0
- package/lib/node/messaging/binary-message-pipe.d.ts.map +1 -0
- package/lib/node/messaging/binary-message-pipe.js +152 -0
- package/lib/node/messaging/binary-message-pipe.js.map +1 -0
- package/lib/node/messaging/ipc-bootstrap.js +2 -11
- package/lib/node/messaging/ipc-bootstrap.js.map +1 -1
- package/lib/node/messaging/ipc-channel.d.ts +26 -0
- package/lib/node/messaging/ipc-channel.d.ts.map +1 -0
- package/lib/node/messaging/ipc-channel.js +86 -0
- package/lib/node/messaging/ipc-channel.js.map +1 -0
- package/lib/node/messaging/ipc-connection-provider.d.ts +3 -5
- package/lib/node/messaging/ipc-connection-provider.d.ts.map +1 -1
- package/lib/node/messaging/ipc-connection-provider.js +14 -31
- package/lib/node/messaging/ipc-connection-provider.js.map +1 -1
- package/lib/node/messaging/ipc-protocol.d.ts +2 -2
- package/lib/node/messaging/ipc-protocol.d.ts.map +1 -1
- package/lib/node/messaging/messaging-contribution.d.ts +6 -9
- package/lib/node/messaging/messaging-contribution.d.ts.map +1 -1
- package/lib/node/messaging/messaging-contribution.js +23 -68
- package/lib/node/messaging/messaging-contribution.js.map +1 -1
- package/lib/node/messaging/messaging-service.d.ts +4 -23
- package/lib/node/messaging/messaging-service.d.ts.map +1 -1
- package/lib/node/messaging/messaging-service.js +1 -15
- package/lib/node/messaging/messaging-service.js.map +1 -1
- package/lib/node/messaging/test/test-web-socket-channel.d.ts +4 -2
- package/lib/node/messaging/test/test-web-socket-channel.d.ts.map +1 -1
- package/lib/node/messaging/test/test-web-socket-channel.js +25 -12
- package/lib/node/messaging/test/test-web-socket-channel.js.map +1 -1
- package/package.json +5 -8
- package/src/browser/messaging/ws-connection-provider.ts +34 -25
- package/src/browser/progress-status-bar-item.ts +1 -1
- package/src/browser/style/menus.css +1 -0
- package/src/browser/tree/tree-compression/compressed-tree-widget.tsx +2 -2
- package/src/browser/widgets/select-component.tsx +37 -17
- package/src/common/cancellation.ts +8 -0
- package/src/common/index.ts +2 -0
- package/src/common/message-rpc/channel.spec.ts +88 -0
- package/src/common/message-rpc/channel.ts +260 -0
- package/src/{node/messaging/logger.ts → common/message-rpc/index.ts} +4 -23
- package/src/common/message-rpc/message-buffer.ts +99 -0
- package/src/common/message-rpc/rpc-message-encoder.spec.ts +42 -0
- package/src/common/message-rpc/rpc-message-encoder.ts +497 -0
- package/src/common/message-rpc/rpc-protocol.ts +217 -0
- package/src/common/message-rpc/uint8-array-message-buffer.spec.ts +41 -0
- package/src/common/message-rpc/uint8-array-message-buffer.ts +206 -0
- package/src/common/messaging/abstract-connection-provider.ts +28 -37
- package/src/common/messaging/connection-error-handler.ts +1 -2
- package/src/common/messaging/handler.ts +2 -2
- package/src/common/messaging/proxy-factory.spec.ts +4 -17
- package/src/common/messaging/proxy-factory.ts +27 -16
- package/src/common/messaging/web-socket-channel.ts +79 -135
- package/src/electron-browser/messaging/electron-ipc-connection-provider.ts +21 -7
- package/src/electron-browser/messaging/electron-ws-connection-provider.ts +5 -8
- package/src/electron-main/messaging/electron-messaging-contribution.ts +87 -65
- package/src/electron-main/messaging/electron-messaging-service.ts +2 -8
- package/src/electron-main/theia-electron-window.ts +12 -9
- package/src/node/messaging/binary-message-pipe.ts +168 -0
- package/src/node/messaging/ipc-bootstrap.ts +3 -11
- package/src/node/messaging/ipc-channel.ts +97 -0
- package/src/node/messaging/ipc-connection-provider.ts +18 -35
- package/src/node/messaging/ipc-protocol.ts +2 -2
- package/src/node/messaging/messaging-contribution.ts +29 -74
- package/src/node/messaging/messaging-service.ts +4 -31
- package/src/node/messaging/test/test-web-socket-channel.ts +26 -17
- package/lib/node/messaging/logger.d.ts +0 -8
- package/lib/node/messaging/logger.d.ts.map +0 -1
- package/lib/node/messaging/logger.js.map +0 -1
- package/shared/vscode-ws-jsonrpc/index.d.ts +0 -1
- package/shared/vscode-ws-jsonrpc/index.js +0 -1
|
@@ -28,16 +28,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
28
28
|
exports.MessagingContribution = exports.MessagingContainer = void 0;
|
|
29
29
|
const socket_io_1 = require("socket.io");
|
|
30
30
|
const inversify_1 = require("inversify");
|
|
31
|
-
const connection_1 = require("vscode-ws-jsonrpc/lib/socket/connection");
|
|
32
|
-
const launch = require("vscode-ws-jsonrpc/lib/server/launch");
|
|
33
31
|
const common_1 = require("../../common");
|
|
34
32
|
const web_socket_channel_1 = require("../../common/messaging/web-socket-channel");
|
|
35
33
|
const messaging_service_1 = require("./messaging-service");
|
|
36
|
-
const logger_1 = require("./logger");
|
|
37
34
|
const connection_container_module_1 = require("./connection-container-module");
|
|
38
35
|
const Route = require("route-parser");
|
|
39
36
|
const ws_request_validators_1 = require("../ws-request-validators");
|
|
40
37
|
const messaging_listeners_1 = require("./messaging-listeners");
|
|
38
|
+
const channel_1 = require("../../common/message-rpc/channel");
|
|
41
39
|
exports.MessagingContainer = Symbol('MessagingContainer');
|
|
42
40
|
let MessagingContribution = MessagingContribution_1 = class MessagingContribution {
|
|
43
41
|
constructor() {
|
|
@@ -52,18 +50,6 @@ let MessagingContribution = MessagingContribution_1 = class MessagingContributio
|
|
|
52
50
|
contribution.configure(this);
|
|
53
51
|
}
|
|
54
52
|
}
|
|
55
|
-
listen(spec, callback) {
|
|
56
|
-
this.wsChannel(spec, (params, channel) => {
|
|
57
|
-
const connection = (0, connection_1.createWebSocketConnection)(channel, new logger_1.ConsoleLogger());
|
|
58
|
-
callback(params, connection);
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
forward(spec, callback) {
|
|
62
|
-
this.wsChannel(spec, (params, channel) => {
|
|
63
|
-
const connection = launch.createWebSocketConnection(channel);
|
|
64
|
-
callback(params, messaging_service_1.WebSocketChannelConnection.create(connection, channel));
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
53
|
wsChannel(spec, callback) {
|
|
68
54
|
this.channelHandlers.push(spec, (params, channel) => callback(params, channel));
|
|
69
55
|
}
|
|
@@ -106,54 +92,31 @@ let MessagingContribution = MessagingContribution_1 = class MessagingContributio
|
|
|
106
92
|
}
|
|
107
93
|
}
|
|
108
94
|
handleChannels(socket) {
|
|
95
|
+
const socketChannel = new web_socket_channel_1.WebSocketChannel(this.toIWebSocket(socket));
|
|
96
|
+
const mulitplexer = new channel_1.ChannelMultiplexer(socketChannel);
|
|
109
97
|
const channelHandlers = this.getConnectionChannelHandlers(socket);
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
if (message.kind === 'open') {
|
|
115
|
-
const { id, path } = message;
|
|
116
|
-
const channel = this.createChannel(id, socket);
|
|
117
|
-
if (channelHandlers.route(path, channel)) {
|
|
118
|
-
channel.ready();
|
|
119
|
-
console.debug(`Opening channel for service path '${path}'. [ID: ${id}]`);
|
|
120
|
-
channels.set(id, channel);
|
|
121
|
-
channel.onClose(() => {
|
|
122
|
-
console.debug(`Closing channel on service path '${path}'. [ID: ${id}]`);
|
|
123
|
-
channels.delete(id);
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
console.error('Cannot find a service for the path: ' + path);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
const { id } = message;
|
|
132
|
-
const channel = channels.get(id);
|
|
133
|
-
if (channel) {
|
|
134
|
-
channel.handleMessage(message);
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
console.error('The ws channel does not exist', id);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
98
|
+
mulitplexer.onDidOpenChannel(event => {
|
|
99
|
+
if (channelHandlers.route(event.id, event.channel)) {
|
|
100
|
+
console.debug(`Opening channel for service path '${event.id}'.`);
|
|
101
|
+
event.channel.onClose(() => console.debug(`Closing channel on service path '${event.id}'.`));
|
|
140
102
|
}
|
|
141
|
-
catch (error) {
|
|
142
|
-
console.error('Failed to handle message', { error, data });
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
socket.on('error', err => {
|
|
146
|
-
for (const channel of channels.values()) {
|
|
147
|
-
channel.fireError(err);
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
socket.on('disconnect', reason => {
|
|
151
|
-
for (const channel of channels.values()) {
|
|
152
|
-
channel.close(undefined, reason);
|
|
153
|
-
}
|
|
154
|
-
channels.clear();
|
|
155
103
|
});
|
|
156
104
|
}
|
|
105
|
+
toIWebSocket(socket) {
|
|
106
|
+
return {
|
|
107
|
+
close: () => {
|
|
108
|
+
socket.removeAllListeners('disconnect');
|
|
109
|
+
socket.removeAllListeners('error');
|
|
110
|
+
socket.removeAllListeners('message');
|
|
111
|
+
socket.disconnect();
|
|
112
|
+
},
|
|
113
|
+
isConnected: () => socket.connected,
|
|
114
|
+
onClose: cb => socket.on('disconnect', reason => cb(reason)),
|
|
115
|
+
onError: cb => socket.on('error', error => cb(error)),
|
|
116
|
+
onMessage: cb => socket.on('message', data => cb(data)),
|
|
117
|
+
send: message => socket.emit('message', message)
|
|
118
|
+
};
|
|
119
|
+
}
|
|
157
120
|
createSocketContainer(socket) {
|
|
158
121
|
const connectionContainer = this.container.createChild();
|
|
159
122
|
connectionContainer.bind(socket_io_1.Socket).toConstantValue(socket);
|
|
@@ -167,19 +130,11 @@ let MessagingContribution = MessagingContribution_1 = class MessagingContributio
|
|
|
167
130
|
const connectionHandlers = connectionContainer.getNamed(common_1.ContributionProvider, common_1.ConnectionHandler);
|
|
168
131
|
for (const connectionHandler of connectionHandlers.getContributions(true)) {
|
|
169
132
|
connectionChannelHandlers.push(connectionHandler.path, (_, channel) => {
|
|
170
|
-
|
|
171
|
-
connectionHandler.onConnection(connection);
|
|
133
|
+
connectionHandler.onConnection(channel);
|
|
172
134
|
});
|
|
173
135
|
}
|
|
174
136
|
return connectionChannelHandlers;
|
|
175
137
|
}
|
|
176
|
-
createChannel(id, socket) {
|
|
177
|
-
return new web_socket_channel_1.WebSocketChannel(id, content => {
|
|
178
|
-
if (socket.connected) {
|
|
179
|
-
socket.send(content);
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
138
|
};
|
|
184
139
|
__decorate([
|
|
185
140
|
(0, inversify_1.inject)(exports.MessagingContainer),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messaging-contribution.js","sourceRoot":"","sources":["../../../src/node/messaging/messaging-contribution.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;;;;;;;;;;;;;AAIhF,yCAA2C;AAC3C,yCAA4F;
|
|
1
|
+
{"version":3,"file":"messaging-contribution.js","sourceRoot":"","sources":["../../../src/node/messaging/messaging-contribution.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +1,18 @@
|
|
|
1
1
|
import { Socket } from 'socket.io';
|
|
2
|
-
import {
|
|
3
|
-
import { IConnection } from 'vscode-ws-jsonrpc/lib/server/connection';
|
|
4
|
-
import { WebSocketChannel } from '../../common/messaging/web-socket-channel';
|
|
2
|
+
import { Channel } from '../../common/message-rpc/channel';
|
|
5
3
|
export interface MessagingService {
|
|
6
|
-
/**
|
|
7
|
-
* Accept a JSON-RPC connection on the given path.
|
|
8
|
-
* A path supports the route syntax: https://github.com/rcs/route-parser#what-can-i-use-in-my-routes.
|
|
9
|
-
*/
|
|
10
|
-
listen(path: string, callback: (params: MessagingService.PathParams, connection: MessageConnection) => void): void;
|
|
11
|
-
/**
|
|
12
|
-
* Accept a raw JSON-RPC connection on the given path.
|
|
13
|
-
* A path supports the route syntax: https://github.com/rcs/route-parser#what-can-i-use-in-my-routes.
|
|
14
|
-
*/
|
|
15
|
-
forward(path: string, callback: (params: MessagingService.PathParams, connection: IConnection) => void): void;
|
|
16
4
|
/**
|
|
17
5
|
* Accept a web socket channel on the given path.
|
|
18
6
|
* A path supports the route syntax: https://github.com/rcs/route-parser#what-can-i-use-in-my-routes.
|
|
19
7
|
*/
|
|
20
|
-
wsChannel(path: string, callback: (params: MessagingService.PathParams,
|
|
8
|
+
wsChannel(path: string, callback: (params: MessagingService.PathParams, channel: Channel) => void): void;
|
|
21
9
|
/**
|
|
22
10
|
* Accept a web socket connection on the given path.
|
|
23
11
|
* A path supports the route syntax: https://github.com/rcs/route-parser#what-can-i-use-in-my-routes.
|
|
24
12
|
*
|
|
25
13
|
* #### Important
|
|
26
|
-
* Prefer
|
|
27
|
-
* and excessive amount can cause performance degradation. All
|
|
14
|
+
* Prefer using web socket channels over establishing new web socket connection. Clients can handle only limited amount of web sockets
|
|
15
|
+
* and excessive amount can cause performance degradation. All web socket channels share a single web socket connection.
|
|
28
16
|
*/
|
|
29
17
|
ws(path: string, callback: (params: MessagingService.PathParams, socket: Socket) => void): void;
|
|
30
18
|
}
|
|
@@ -39,11 +27,4 @@ export declare namespace MessagingService {
|
|
|
39
27
|
configure(service: MessagingService): void;
|
|
40
28
|
}
|
|
41
29
|
}
|
|
42
|
-
export interface WebSocketChannelConnection extends IConnection {
|
|
43
|
-
channel: WebSocketChannel;
|
|
44
|
-
}
|
|
45
|
-
export declare namespace WebSocketChannelConnection {
|
|
46
|
-
function is(connection: IConnection): connection is WebSocketChannelConnection;
|
|
47
|
-
function create(connection: IConnection, channel: WebSocketChannel): WebSocketChannelConnection;
|
|
48
|
-
}
|
|
49
30
|
//# sourceMappingURL=messaging-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messaging-service.d.ts","sourceRoot":"","sources":["../../../src/node/messaging/messaging-service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"messaging-service.d.ts","sourceRoot":"","sources":["../../../src/node/messaging/messaging-service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC7B;;;OAGG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IACzG;;;;;;;OAOG;IACH,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;CACnG;AACD,yBAAiB,gBAAgB,CAAC;IAC9B,2EAA2E;IACpE,MAAM,UAAU,eAA6B,CAAC;IACrD,UAAiB,UAAU;QACvB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KACzB;IACM,MAAM,YAAY,eAA0C,CAAC;IACpE,UAAiB,YAAY;QACzB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;KAC9C;CACJ"}
|
|
@@ -15,25 +15,11 @@
|
|
|
15
15
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
16
16
|
// *****************************************************************************
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.
|
|
19
|
-
const web_socket_channel_1 = require("../../common/messaging/web-socket-channel");
|
|
18
|
+
exports.MessagingService = void 0;
|
|
20
19
|
var MessagingService;
|
|
21
20
|
(function (MessagingService) {
|
|
22
21
|
/** Inversify container identifier for the `MessagingService` component. */
|
|
23
22
|
MessagingService.Identifier = Symbol('MessagingService');
|
|
24
23
|
MessagingService.Contribution = Symbol('MessagingService.Contribution');
|
|
25
24
|
})(MessagingService = exports.MessagingService || (exports.MessagingService = {}));
|
|
26
|
-
var WebSocketChannelConnection;
|
|
27
|
-
(function (WebSocketChannelConnection) {
|
|
28
|
-
function is(connection) {
|
|
29
|
-
return connection.channel instanceof web_socket_channel_1.WebSocketChannel;
|
|
30
|
-
}
|
|
31
|
-
WebSocketChannelConnection.is = is;
|
|
32
|
-
function create(connection, channel) {
|
|
33
|
-
const result = connection;
|
|
34
|
-
result.channel = channel;
|
|
35
|
-
return result;
|
|
36
|
-
}
|
|
37
|
-
WebSocketChannelConnection.create = create;
|
|
38
|
-
})(WebSocketChannelConnection = exports.WebSocketChannelConnection || (exports.WebSocketChannelConnection = {}));
|
|
39
25
|
//# sourceMappingURL=messaging-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messaging-service.js","sourceRoot":"","sources":["../../../src/node/messaging/messaging-service.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;;;
|
|
1
|
+
{"version":3,"file":"messaging-service.js","sourceRoot":"","sources":["../../../src/node/messaging/messaging-service.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;;;AAqBhF,IAAiB,gBAAgB,CAUhC;AAVD,WAAiB,gBAAgB;IAC7B,2EAA2E;IAC9D,2BAAU,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAIxC,6BAAY,GAAG,MAAM,CAAC,+BAA+B,CAAC,CAAC;AAIxE,CAAC,EAVgB,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAUhC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import * as http from 'http';
|
|
3
3
|
import * as https from 'https';
|
|
4
|
-
import {
|
|
5
|
-
export declare class
|
|
4
|
+
import { Channel, ChannelMultiplexer } from '../../../common/message-rpc/channel';
|
|
5
|
+
export declare class TestWebSocketChannelSetup {
|
|
6
|
+
readonly multiplexer: ChannelMultiplexer;
|
|
7
|
+
readonly channel: Channel;
|
|
6
8
|
constructor({ server, path }: {
|
|
7
9
|
server: http.Server | https.Server;
|
|
8
10
|
path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-web-socket-channel.d.ts","sourceRoot":"","sources":["../../../../src/node/messaging/test/test-web-socket-channel.ts"],"names":[],"mappings":";AAgBA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"test-web-socket-channel.d.ts","sourceRoot":"","sources":["../../../../src/node/messaging/test/test-web-socket-channel.ts"],"names":[],"mappings":";AAgBA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAGlF,qBAAa,yBAAyB;IAClC,SAAgB,WAAW,EAAE,kBAAkB,CAAC;IAChD,SAAgB,OAAO,EAAE,OAAO,CAAC;gBAErB,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC1B,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACnC,IAAI,EAAE,MAAM,CAAA;KACf;CASJ"}
|
|
@@ -15,22 +15,35 @@
|
|
|
15
15
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
16
16
|
// *****************************************************************************
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.
|
|
19
|
-
const web_socket_channel_1 = require("../../../common/messaging/web-socket-channel");
|
|
20
|
-
const disposable_1 = require("../../../common/disposable");
|
|
18
|
+
exports.TestWebSocketChannelSetup = void 0;
|
|
21
19
|
const socket_io_client_1 = require("socket.io-client");
|
|
22
|
-
|
|
20
|
+
const channel_1 = require("../../../common/message-rpc/channel");
|
|
21
|
+
const web_socket_channel_1 = require("../../../common/messaging/web-socket-channel");
|
|
22
|
+
class TestWebSocketChannelSetup {
|
|
23
23
|
constructor({ server, path }) {
|
|
24
|
-
super(0, content => socket.send(content));
|
|
25
24
|
const socket = (0, socket_io_client_1.io)(`ws://localhost:${server.address().port}${web_socket_channel_1.WebSocketChannel.wsPath}`);
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
socket.on('
|
|
29
|
-
this.
|
|
25
|
+
this.channel = new web_socket_channel_1.WebSocketChannel(toIWebSocket(socket));
|
|
26
|
+
this.multiplexer = new channel_1.ChannelMultiplexer(this.channel);
|
|
27
|
+
socket.on('connect', () => {
|
|
28
|
+
this.multiplexer.open(path);
|
|
30
29
|
});
|
|
31
|
-
socket.
|
|
32
|
-
this.toDispose.push(disposable_1.Disposable.create(() => socket.close()));
|
|
30
|
+
socket.connect();
|
|
33
31
|
}
|
|
34
32
|
}
|
|
35
|
-
exports.
|
|
33
|
+
exports.TestWebSocketChannelSetup = TestWebSocketChannelSetup;
|
|
34
|
+
function toIWebSocket(socket) {
|
|
35
|
+
return {
|
|
36
|
+
close: () => {
|
|
37
|
+
socket.removeAllListeners('disconnect');
|
|
38
|
+
socket.removeAllListeners('error');
|
|
39
|
+
socket.removeAllListeners('message');
|
|
40
|
+
socket.close();
|
|
41
|
+
},
|
|
42
|
+
isConnected: () => socket.connected,
|
|
43
|
+
onClose: cb => socket.on('disconnect', reason => cb(reason)),
|
|
44
|
+
onError: cb => socket.on('error', reason => cb(reason)),
|
|
45
|
+
onMessage: cb => socket.on('message', data => cb(data)),
|
|
46
|
+
send: message => socket.emit('message', message)
|
|
47
|
+
};
|
|
48
|
+
}
|
|
36
49
|
//# sourceMappingURL=test-web-socket-channel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-web-socket-channel.js","sourceRoot":"","sources":["../../../../src/node/messaging/test/test-web-socket-channel.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;;;
|
|
1
|
+
{"version":3,"file":"test-web-socket-channel.js","sourceRoot":"","sources":["../../../../src/node/messaging/test/test-web-socket-channel.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;;;AAKhF,uDAA8C;AAC9C,iEAAkF;AAClF,qFAA4F;AAE5F,MAAa,yBAAyB;IAIlC,YAAY,EAAE,MAAM,EAAE,IAAI,EAGzB;QACG,MAAM,MAAM,GAAG,IAAA,qBAAE,EAAC,kBAAmB,MAAM,CAAC,OAAO,EAAkB,CAAC,IAAI,GAAG,qCAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;QACxG,IAAI,CAAC,OAAO,GAAG,IAAI,qCAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,WAAW,GAAG,IAAI,4BAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;CACJ;AAhBD,8DAgBC;AAED,SAAS,YAAY,CAAC,MAAc;IAChC,OAAO;QACH,KAAK,EAAE,GAAG,EAAE;YACR,MAAM,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACxC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS;QACnC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAC5D,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QACvD,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;KACnD,CAAC;AACN,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.27.0-next.10+83d43084618",
|
|
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.
|
|
20
|
-
"@theia/request": "1.
|
|
19
|
+
"@theia/application-package": "1.27.0-next.10+83d43084618",
|
|
20
|
+
"@theia/request": "1.27.0-next.10+83d43084618",
|
|
21
21
|
"@types/body-parser": "^1.16.4",
|
|
22
22
|
"@types/cookie": "^0.3.3",
|
|
23
23
|
"@types/dompurify": "^2.2.2",
|
|
@@ -61,7 +61,6 @@
|
|
|
61
61
|
"react-dom": "^16.8.0",
|
|
62
62
|
"react-tooltip": "^4.2.21",
|
|
63
63
|
"react-virtualized": "^9.20.0",
|
|
64
|
-
"reconnecting-websocket": "^4.2.0",
|
|
65
64
|
"reflect-metadata": "^0.1.10",
|
|
66
65
|
"route-parser": "^0.0.5",
|
|
67
66
|
"safer-buffer": "^2.1.2",
|
|
@@ -70,7 +69,6 @@
|
|
|
70
69
|
"uuid": "^8.3.2",
|
|
71
70
|
"vscode-languageserver-protocol": "~3.15.3",
|
|
72
71
|
"vscode-uri": "^2.1.1",
|
|
73
|
-
"vscode-ws-jsonrpc": "^0.2.0",
|
|
74
72
|
"ws": "^7.1.2",
|
|
75
73
|
"yargs": "^15.3.1"
|
|
76
74
|
},
|
|
@@ -113,8 +111,7 @@
|
|
|
113
111
|
"react-dom",
|
|
114
112
|
"react-virtualized",
|
|
115
113
|
"vscode-languageserver-protocol",
|
|
116
|
-
"vscode-uri"
|
|
117
|
-
"vscode-ws-jsonrpc"
|
|
114
|
+
"vscode-uri"
|
|
118
115
|
],
|
|
119
116
|
"export =": [
|
|
120
117
|
"dompurify as DOMPurify",
|
|
@@ -203,5 +200,5 @@
|
|
|
203
200
|
"nyc": {
|
|
204
201
|
"extends": "../../configs/nyc.json"
|
|
205
202
|
},
|
|
206
|
-
"gitHead": "
|
|
203
|
+
"gitHead": "83d430846182a2ccd8465bcfd28ba7214c42abf3"
|
|
207
204
|
}
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
17
|
import { injectable, interfaces, decorate, unmanaged } from 'inversify';
|
|
18
|
-
import { JsonRpcProxyFactory, JsonRpcProxy, Emitter, Event } from '../../common';
|
|
19
|
-
import { WebSocketChannel } from '../../common/messaging/web-socket-channel';
|
|
18
|
+
import { JsonRpcProxyFactory, JsonRpcProxy, Emitter, Event, Channel } from '../../common';
|
|
20
19
|
import { Endpoint } from '../endpoint';
|
|
21
20
|
import { AbstractConnectionProvider } from '../../common/messaging/abstract-connection-provider';
|
|
22
21
|
import { io, Socket } from 'socket.io-client';
|
|
22
|
+
import { IWebSocket, WebSocketChannel } from '../../common/messaging/web-socket-channel';
|
|
23
23
|
|
|
24
24
|
decorate(injectable(), JsonRpcProxyFactory);
|
|
25
25
|
decorate(unmanaged(), JsonRpcProxyFactory, 0);
|
|
@@ -53,26 +53,42 @@ export class WebSocketConnectionProvider extends AbstractConnectionProvider<WebS
|
|
|
53
53
|
constructor() {
|
|
54
54
|
super();
|
|
55
55
|
const url = this.createWebSocketUrl(WebSocketChannel.wsPath);
|
|
56
|
-
|
|
57
|
-
socket.on('connect', () => {
|
|
58
|
-
this.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
channel.close(undefined, reason);
|
|
56
|
+
this.socket = this.createWebSocket(url);
|
|
57
|
+
this.socket.on('connect', () => {
|
|
58
|
+
this.initializeMultiplexer();
|
|
59
|
+
if (this.reconnectChannelOpeners.length > 0) {
|
|
60
|
+
this.reconnectChannelOpeners.forEach(opener => opener());
|
|
61
|
+
this.reconnectChannelOpeners = [];
|
|
63
62
|
}
|
|
64
|
-
this.fireSocketDidClose();
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
this.handleIncomingRawMessage(data);
|
|
63
|
+
this.socket.on('disconnect', () => this.fireSocketDidClose());
|
|
64
|
+
this.socket.on('message', () => this.onIncomingMessageActivityEmitter.fire(undefined));
|
|
65
|
+
this.fireSocketDidOpen();
|
|
68
66
|
});
|
|
69
|
-
socket.connect();
|
|
70
|
-
this.socket = socket;
|
|
67
|
+
this.socket.connect();
|
|
71
68
|
}
|
|
72
69
|
|
|
73
|
-
|
|
70
|
+
protected createMainChannel(): Channel {
|
|
71
|
+
return new WebSocketChannel(this.toIWebSocket(this.socket));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
protected toIWebSocket(socket: Socket): IWebSocket {
|
|
75
|
+
return {
|
|
76
|
+
close: () => {
|
|
77
|
+
socket.removeAllListeners('disconnect');
|
|
78
|
+
socket.removeAllListeners('error');
|
|
79
|
+
socket.removeAllListeners('message');
|
|
80
|
+
},
|
|
81
|
+
isConnected: () => socket.connected,
|
|
82
|
+
onClose: cb => socket.on('disconnect', reason => cb(reason)),
|
|
83
|
+
onError: cb => socket.on('error', reason => cb(reason)),
|
|
84
|
+
onMessage: cb => socket.on('message', data => cb(data)),
|
|
85
|
+
send: message => socket.emit('message', message)
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
override async openChannel(path: string, handler: (channel: Channel) => void, options?: WebSocketOptions): Promise<void> {
|
|
74
90
|
if (this.socket.connected) {
|
|
75
|
-
super.openChannel(path, handler, options);
|
|
91
|
+
return super.openChannel(path, handler, options);
|
|
76
92
|
} else {
|
|
77
93
|
const openChannel = () => {
|
|
78
94
|
this.socket.off('connect', openChannel);
|
|
@@ -82,14 +98,6 @@ export class WebSocketConnectionProvider extends AbstractConnectionProvider<WebS
|
|
|
82
98
|
}
|
|
83
99
|
}
|
|
84
100
|
|
|
85
|
-
protected createChannel(id: number): WebSocketChannel {
|
|
86
|
-
return new WebSocketChannel(id, content => {
|
|
87
|
-
if (this.socket.connected) {
|
|
88
|
-
this.socket.send(content);
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
|
|
93
101
|
/**
|
|
94
102
|
* @param path The handler to reach in the backend.
|
|
95
103
|
*/
|
|
@@ -143,3 +151,4 @@ export class WebSocketConnectionProvider extends AbstractConnectionProvider<WebS
|
|
|
143
151
|
this.onSocketDidCloseEmitter.fire(undefined);
|
|
144
152
|
}
|
|
145
153
|
}
|
|
154
|
+
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
17
|
import { injectable, inject } from 'inversify';
|
|
18
|
-
import { CancellationToken } from 'vscode-
|
|
18
|
+
import { CancellationToken } from '../../shared/vscode-languageserver-protocol';
|
|
19
19
|
import { ProgressClient, ProgressMessage, ProgressUpdate } from '../common';
|
|
20
20
|
import { StatusBar, StatusBarAlignment } from './status-bar';
|
|
21
21
|
import { Deferred } from '../common/promise-util';
|
|
@@ -123,8 +123,8 @@ export class CompressedTreeWidget extends TreeViewWelcomeWidget {
|
|
|
123
123
|
protected getCaptionChildEventHandlers(node: TreeNode, props: CompressedNodeProps): React.Attributes & React.HtmlHTMLAttributes<HTMLElement> {
|
|
124
124
|
return {
|
|
125
125
|
onClick: event => (event.stopPropagation(), this.handleClickEvent(node, event)),
|
|
126
|
-
onDoubleClick: event => (event.stopPropagation(), this.
|
|
127
|
-
onContextMenu: event => (event.stopPropagation(), this.
|
|
126
|
+
onDoubleClick: event => (event.stopPropagation(), this.handleDblClickEvent(node, event)),
|
|
127
|
+
onContextMenu: event => (event.stopPropagation(), this.handleContextMenuEvent(node, event)),
|
|
128
128
|
};
|
|
129
129
|
}
|
|
130
130
|
|
|
@@ -34,8 +34,10 @@ export interface SelectOption {
|
|
|
34
34
|
|
|
35
35
|
export interface SelectComponentProps {
|
|
36
36
|
options: SelectOption[]
|
|
37
|
-
|
|
38
|
-
onChange?: (option: SelectOption, index: number) => void
|
|
37
|
+
defaultValue?: string | number
|
|
38
|
+
onChange?: (option: SelectOption, index: number) => void,
|
|
39
|
+
onBlur?: () => void,
|
|
40
|
+
onFocus?: () => void
|
|
39
41
|
}
|
|
40
42
|
|
|
41
43
|
export interface SelectComponentDropdownDimensions {
|
|
@@ -64,10 +66,10 @@ export class SelectComponent extends React.Component<SelectComponentProps, Selec
|
|
|
64
66
|
constructor(props: SelectComponentProps) {
|
|
65
67
|
super(props);
|
|
66
68
|
let selected = 0;
|
|
67
|
-
if (typeof props.
|
|
68
|
-
selected = props.
|
|
69
|
-
} else if (typeof props.
|
|
70
|
-
selected = Math.max(props.options.findIndex(e => e.value === props.
|
|
69
|
+
if (typeof props.defaultValue === 'number') {
|
|
70
|
+
selected = props.defaultValue;
|
|
71
|
+
} else if (typeof props.defaultValue === 'string') {
|
|
72
|
+
selected = Math.max(props.options.findIndex(e => e.value === props.defaultValue), 0);
|
|
71
73
|
}
|
|
72
74
|
this.state = {
|
|
73
75
|
selected,
|
|
@@ -162,8 +164,8 @@ export class SelectComponent extends React.Component<SelectComponentProps, Selec
|
|
|
162
164
|
override render(): React.ReactNode {
|
|
163
165
|
const { options } = this.props;
|
|
164
166
|
let { selected } = this.state;
|
|
165
|
-
|
|
166
|
-
selected = (
|
|
167
|
+
if (options[selected]?.separator) {
|
|
168
|
+
selected = this.nextNotSeparator('forwards');
|
|
167
169
|
}
|
|
168
170
|
const selectedItemLabel = options[selected].label ?? options[selected].value;
|
|
169
171
|
return <>
|
|
@@ -173,7 +175,13 @@ export class SelectComponent extends React.Component<SelectComponentProps, Selec
|
|
|
173
175
|
tabIndex={0}
|
|
174
176
|
className="theia-select-component"
|
|
175
177
|
onClick={e => this.handleClickEvent(e)}
|
|
176
|
-
onBlur={
|
|
178
|
+
onBlur={
|
|
179
|
+
() => {
|
|
180
|
+
this.hide();
|
|
181
|
+
this.props.onBlur?.();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
onFocus={() => this.props.onFocus?.()}
|
|
177
185
|
onKeyDown={e => this.handleKeypress(e)}
|
|
178
186
|
>
|
|
179
187
|
<div key="label" className="theia-select-component-label">{selectedItemLabel}</div>
|
|
@@ -183,24 +191,36 @@ export class SelectComponent extends React.Component<SelectComponentProps, Selec
|
|
|
183
191
|
</>;
|
|
184
192
|
}
|
|
185
193
|
|
|
194
|
+
protected nextNotSeparator(direction: 'forwards' | 'backwards'): number {
|
|
195
|
+
const { options } = this.props;
|
|
196
|
+
const step = direction === 'forwards' ? 1 : -1;
|
|
197
|
+
const length = this.props.options.length;
|
|
198
|
+
let selected = this.state.selected;
|
|
199
|
+
let count = 0;
|
|
200
|
+
do {
|
|
201
|
+
selected = (selected + step) % length;
|
|
202
|
+
if (selected < 0) {
|
|
203
|
+
selected = length - 1;
|
|
204
|
+
}
|
|
205
|
+
count++;
|
|
206
|
+
}
|
|
207
|
+
while (options[selected]?.separator && count < length);
|
|
208
|
+
return selected;
|
|
209
|
+
}
|
|
210
|
+
|
|
186
211
|
protected handleKeypress(ev: React.KeyboardEvent<HTMLDivElement>): void {
|
|
187
212
|
if (!this.fieldRef.current) {
|
|
188
213
|
return;
|
|
189
214
|
}
|
|
190
215
|
if (ev.key === 'ArrowUp') {
|
|
191
|
-
|
|
192
|
-
if (selected <= 0) {
|
|
193
|
-
selected = this.props.options.length - 1;
|
|
194
|
-
} else {
|
|
195
|
-
selected--;
|
|
196
|
-
}
|
|
216
|
+
const selected = this.nextNotSeparator('backwards');
|
|
197
217
|
this.setState({
|
|
198
218
|
selected,
|
|
199
219
|
hover: selected
|
|
200
220
|
});
|
|
201
221
|
} else if (ev.key === 'ArrowDown') {
|
|
202
222
|
if (this.state.dimensions) {
|
|
203
|
-
const selected =
|
|
223
|
+
const selected = this.nextNotSeparator('forwards');
|
|
204
224
|
this.setState({
|
|
205
225
|
selected,
|
|
206
226
|
hover: selected
|
|
@@ -208,8 +228,8 @@ export class SelectComponent extends React.Component<SelectComponentProps, Selec
|
|
|
208
228
|
} else {
|
|
209
229
|
this.toggleVisibility();
|
|
210
230
|
this.setState({
|
|
231
|
+
selected: 0,
|
|
211
232
|
hover: 0,
|
|
212
|
-
selected: 0
|
|
213
233
|
});
|
|
214
234
|
}
|
|
215
235
|
} else if (ev.key === 'Enter') {
|