@theia/core 1.71.0-next.8 → 1.71.0

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 (257) hide show
  1. package/README.md +19 -19
  2. package/i18n/nls.cs.json +97 -51
  3. package/i18n/nls.de.json +97 -51
  4. package/i18n/nls.es.json +97 -51
  5. package/i18n/nls.fr.json +97 -51
  6. package/i18n/nls.hu.json +97 -51
  7. package/i18n/nls.it.json +97 -51
  8. package/i18n/nls.ja.json +97 -51
  9. package/i18n/nls.json +101 -55
  10. package/i18n/nls.ko.json +97 -51
  11. package/i18n/nls.pl.json +97 -51
  12. package/i18n/nls.pt-br.json +97 -51
  13. package/i18n/nls.ru.json +97 -51
  14. package/i18n/nls.tr.json +97 -51
  15. package/i18n/nls.zh-cn.json +97 -51
  16. package/i18n/nls.zh-tw.json +97 -51
  17. package/lib/browser/catalog.json +169 -10
  18. package/lib/browser/common-frontend-contribution.js +2 -2
  19. package/lib/browser/common-frontend-contribution.js.map +1 -1
  20. package/lib/browser/components/card.d.ts.map +1 -1
  21. package/lib/browser/components/card.js +11 -3
  22. package/lib/browser/components/card.js.map +1 -1
  23. package/lib/browser/connection-status-service.js +1 -1
  24. package/lib/browser/connection-status-service.js.map +1 -1
  25. package/lib/browser/frontend-application-contribution.d.ts +2 -2
  26. package/lib/browser/frontend-application-contribution.d.ts.map +1 -1
  27. package/lib/browser/frontend-application.d.ts +2 -0
  28. package/lib/browser/frontend-application.d.ts.map +1 -1
  29. package/lib/browser/frontend-application.js +15 -6
  30. package/lib/browser/frontend-application.js.map +1 -1
  31. package/lib/browser/keyboard/index.d.ts +1 -0
  32. package/lib/browser/keyboard/index.d.ts.map +1 -1
  33. package/lib/browser/keyboard/index.js +1 -0
  34. package/lib/browser/keyboard/index.js.map +1 -1
  35. package/lib/browser/keyboard/keyboard-utils.d.ts +17 -0
  36. package/lib/browser/keyboard/keyboard-utils.d.ts.map +1 -0
  37. package/lib/browser/keyboard/keyboard-utils.js +40 -0
  38. package/lib/browser/keyboard/keyboard-utils.js.map +1 -0
  39. package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
  40. package/lib/browser/menu/browser-menu-plugin.js +8 -1
  41. package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
  42. package/lib/browser/messaging/connection-source.d.ts +2 -1
  43. package/lib/browser/messaging/connection-source.d.ts.map +1 -1
  44. package/lib/browser/messaging/connection-source.js.map +1 -1
  45. package/lib/browser/messaging/messaging-frontend-module.d.ts.map +1 -1
  46. package/lib/browser/messaging/messaging-frontend-module.js +3 -0
  47. package/lib/browser/messaging/messaging-frontend-module.js.map +1 -1
  48. package/lib/browser/messaging/service-connection-provider.d.ts +2 -2
  49. package/lib/browser/messaging/service-connection-provider.d.ts.map +1 -1
  50. package/lib/browser/messaging/service-connection-provider.js +2 -2
  51. package/lib/browser/messaging/service-connection-provider.js.map +1 -1
  52. package/lib/browser/messaging/ws-connection-provider.d.ts +1 -1
  53. package/lib/browser/messaging/ws-connection-provider.d.ts.map +1 -1
  54. package/lib/browser/messaging/ws-connection-provider.js +3 -3
  55. package/lib/browser/messaging/ws-connection-provider.js.map +1 -1
  56. package/lib/browser/messaging/ws-connection-source.d.ts +4 -2
  57. package/lib/browser/messaging/ws-connection-source.d.ts.map +1 -1
  58. package/lib/browser/messaging/ws-connection-source.js +15 -10
  59. package/lib/browser/messaging/ws-connection-source.js.map +1 -1
  60. package/lib/browser/performance/frontend-stopwatch.js +1 -1
  61. package/lib/browser/performance/frontend-stopwatch.js.map +1 -1
  62. package/lib/browser/preload/i18n-preload-contribution.d.ts +1 -1
  63. package/lib/browser/preload/i18n-preload-contribution.d.ts.map +1 -1
  64. package/lib/browser/preload/i18n-preload-contribution.js +2 -2
  65. package/lib/browser/preload/i18n-preload-contribution.js.map +1 -1
  66. package/lib/browser/preload/os-preload-contribution.d.ts +1 -1
  67. package/lib/browser/preload/os-preload-contribution.d.ts.map +1 -1
  68. package/lib/browser/preload/os-preload-contribution.js +6 -6
  69. package/lib/browser/preload/os-preload-contribution.js.map +1 -1
  70. package/lib/browser/saveable-service.d.ts +9 -2
  71. package/lib/browser/saveable-service.d.ts.map +1 -1
  72. package/lib/browser/saveable-service.js +34 -25
  73. package/lib/browser/saveable-service.js.map +1 -1
  74. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts +1 -0
  75. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts.map +1 -1
  76. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +10 -1
  77. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
  78. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts +2 -0
  79. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts.map +1 -1
  80. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.js +11 -2
  81. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.js.map +1 -1
  82. package/lib/browser/window/browser-window-module.d.ts.map +1 -1
  83. package/lib/browser/window/browser-window-module.js +2 -0
  84. package/lib/browser/window/browser-window-module.js.map +1 -1
  85. package/lib/browser/window/default-secondary-window-service.d.ts +2 -0
  86. package/lib/browser/window/default-secondary-window-service.d.ts.map +1 -1
  87. package/lib/browser/window/default-secondary-window-service.js +7 -0
  88. package/lib/browser/window/default-secondary-window-service.js.map +1 -1
  89. package/lib/browser/window/window-focus-service.d.ts +71 -0
  90. package/lib/browser/window/window-focus-service.d.ts.map +1 -0
  91. package/lib/browser/window/window-focus-service.js +173 -0
  92. package/lib/browser/window/window-focus-service.js.map +1 -0
  93. package/lib/common/event.d.ts +16 -0
  94. package/lib/common/event.d.ts.map +1 -1
  95. package/lib/common/event.js +20 -2
  96. package/lib/common/event.js.map +1 -1
  97. package/lib/common/event.spec.js +63 -0
  98. package/lib/common/event.spec.js.map +1 -1
  99. package/lib/common/glob.d.ts +2 -0
  100. package/lib/common/glob.d.ts.map +1 -1
  101. package/lib/common/glob.js +8 -7
  102. package/lib/common/glob.js.map +1 -1
  103. package/lib/common/message-rpc/channel.d.ts +1 -1
  104. package/lib/common/message-rpc/channel.d.ts.map +1 -1
  105. package/lib/common/message-rpc/channel.js +20 -12
  106. package/lib/common/message-rpc/channel.js.map +1 -1
  107. package/lib/common/message-rpc/channel.spec.d.ts.map +1 -1
  108. package/lib/common/message-rpc/channel.spec.js +94 -0
  109. package/lib/common/message-rpc/channel.spec.js.map +1 -1
  110. package/lib/common/message-rpc/rpc-protocol.d.ts.map +1 -1
  111. package/lib/common/message-rpc/rpc-protocol.js +13 -3
  112. package/lib/common/message-rpc/rpc-protocol.js.map +1 -1
  113. package/lib/common/message-rpc/uint8-array-message-buffer.d.ts.map +1 -1
  114. package/lib/common/message-rpc/uint8-array-message-buffer.js +1 -1
  115. package/lib/common/message-rpc/uint8-array-message-buffer.js.map +1 -1
  116. package/lib/common/messaging/index.d.ts +1 -0
  117. package/lib/common/messaging/index.d.ts.map +1 -1
  118. package/lib/common/messaging/index.js +1 -0
  119. package/lib/common/messaging/index.js.map +1 -1
  120. package/lib/common/messaging/socket-write-buffer.d.ts +4 -3
  121. package/lib/common/messaging/socket-write-buffer.d.ts.map +1 -1
  122. package/lib/common/messaging/socket-write-buffer.js +14 -4
  123. package/lib/common/messaging/socket-write-buffer.js.map +1 -1
  124. package/lib/common/performance/index.d.ts +1 -0
  125. package/lib/common/performance/index.d.ts.map +1 -1
  126. package/lib/common/performance/index.js +1 -0
  127. package/lib/common/performance/index.js.map +1 -1
  128. package/lib/common/performance/simple-stopwatch.d.ts +18 -0
  129. package/lib/common/performance/simple-stopwatch.d.ts.map +1 -0
  130. package/lib/common/performance/simple-stopwatch.js +80 -0
  131. package/lib/common/performance/simple-stopwatch.js.map +1 -0
  132. package/lib/common/performance/stopwatch.d.ts +41 -0
  133. package/lib/common/performance/stopwatch.d.ts.map +1 -1
  134. package/lib/common/performance/stopwatch.js +89 -3
  135. package/lib/common/performance/stopwatch.js.map +1 -1
  136. package/lib/common/performance/stopwatch.spec.d.ts +2 -0
  137. package/lib/common/performance/stopwatch.spec.d.ts.map +1 -0
  138. package/lib/common/performance/stopwatch.spec.js +256 -0
  139. package/lib/common/performance/stopwatch.spec.js.map +1 -0
  140. package/lib/common/preferences/index.d.ts +1 -0
  141. package/lib/common/preferences/index.d.ts.map +1 -1
  142. package/lib/common/preferences/index.js +1 -0
  143. package/lib/common/preferences/index.js.map +1 -1
  144. package/lib/common/preferences/preference-utils.d.ts +6 -0
  145. package/lib/common/preferences/preference-utils.d.ts.map +1 -0
  146. package/lib/common/preferences/preference-utils.js +29 -0
  147. package/lib/common/preferences/preference-utils.js.map +1 -0
  148. package/lib/common/resource.d.ts +2 -0
  149. package/lib/common/resource.d.ts.map +1 -1
  150. package/lib/common/resource.js +7 -3
  151. package/lib/common/resource.js.map +1 -1
  152. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
  153. package/lib/electron-browser/menu/electron-main-menu-factory.js +5 -1
  154. package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
  155. package/lib/electron-browser/messaging/electron-messaging-frontend-module.d.ts.map +1 -1
  156. package/lib/electron-browser/messaging/electron-messaging-frontend-module.js +3 -0
  157. package/lib/electron-browser/messaging/electron-messaging-frontend-module.js.map +1 -1
  158. package/lib/electron-browser/window/electron-window-module.d.ts.map +1 -1
  159. package/lib/electron-browser/window/electron-window-module.js +2 -0
  160. package/lib/electron-browser/window/electron-window-module.js.map +1 -1
  161. package/lib/electron-main/electron-api-main.d.ts.map +1 -1
  162. package/lib/electron-main/electron-api-main.js +4 -2
  163. package/lib/electron-main/electron-api-main.js.map +1 -1
  164. package/lib/electron-main/electron-main-application-module.d.ts.map +1 -1
  165. package/lib/electron-main/electron-main-application-module.js +3 -0
  166. package/lib/electron-main/electron-main-application-module.js.map +1 -1
  167. package/lib/electron-main/electron-main-application.d.ts +2 -0
  168. package/lib/electron-main/electron-main-application.d.ts.map +1 -1
  169. package/lib/electron-main/electron-main-application.js +14 -5
  170. package/lib/electron-main/electron-main-application.js.map +1 -1
  171. package/lib/electron-main/theia-electron-window.d.ts.map +1 -1
  172. package/lib/electron-main/theia-electron-window.js +3 -0
  173. package/lib/electron-main/theia-electron-window.js.map +1 -1
  174. package/lib/node/backend-application.d.ts +2 -0
  175. package/lib/node/backend-application.d.ts.map +1 -1
  176. package/lib/node/backend-application.js +17 -5
  177. package/lib/node/backend-application.js.map +1 -1
  178. package/lib/node/messaging/default-messaging-service.d.ts.map +1 -1
  179. package/lib/node/messaging/default-messaging-service.js +1 -0
  180. package/lib/node/messaging/default-messaging-service.js.map +1 -1
  181. package/lib/node/messaging/index.d.ts +1 -0
  182. package/lib/node/messaging/index.d.ts.map +1 -1
  183. package/lib/node/messaging/index.js +1 -0
  184. package/lib/node/messaging/index.js.map +1 -1
  185. package/lib/node/messaging/messaging-backend-module.d.ts.map +1 -1
  186. package/lib/node/messaging/messaging-backend-module.js +4 -0
  187. package/lib/node/messaging/messaging-backend-module.js.map +1 -1
  188. package/lib/node/messaging/test/default-messaging-service.spec.d.ts +2 -0
  189. package/lib/node/messaging/test/default-messaging-service.spec.d.ts.map +1 -0
  190. package/lib/node/messaging/test/default-messaging-service.spec.js +81 -0
  191. package/lib/node/messaging/test/default-messaging-service.spec.js.map +1 -0
  192. package/lib/node/messaging/websocket-frontend-connection-service.d.ts +9 -5
  193. package/lib/node/messaging/websocket-frontend-connection-service.d.ts.map +1 -1
  194. package/lib/node/messaging/websocket-frontend-connection-service.js +21 -5
  195. package/lib/node/messaging/websocket-frontend-connection-service.js.map +1 -1
  196. package/lib/node/performance/node-stopwatch.js +1 -1
  197. package/lib/node/performance/node-stopwatch.js.map +1 -1
  198. package/lib/node/process-utils.d.ts.map +1 -1
  199. package/lib/node/process-utils.js +9 -1
  200. package/lib/node/process-utils.js.map +1 -1
  201. package/package.json +34 -34
  202. package/src/browser/common-frontend-contribution.ts +2 -2
  203. package/src/browser/components/card.tsx +13 -2
  204. package/src/browser/connection-status-service.ts +1 -1
  205. package/src/browser/frontend-application-contribution.ts +2 -2
  206. package/src/browser/frontend-application.ts +26 -17
  207. package/src/browser/keyboard/index.ts +1 -0
  208. package/src/browser/keyboard/keyboard-utils.ts +37 -0
  209. package/src/browser/menu/browser-menu-plugin.ts +8 -1
  210. package/src/browser/messaging/connection-source.ts +2 -1
  211. package/src/browser/messaging/messaging-frontend-module.ts +3 -0
  212. package/src/browser/messaging/service-connection-provider.ts +2 -2
  213. package/src/browser/messaging/ws-connection-provider.ts +1 -1
  214. package/src/browser/messaging/ws-connection-source.ts +7 -4
  215. package/src/browser/performance/frontend-stopwatch.ts +1 -1
  216. package/src/browser/preload/i18n-preload-contribution.ts +1 -1
  217. package/src/browser/preload/os-preload-contribution.ts +1 -1
  218. package/src/browser/saveable-service.ts +34 -27
  219. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +14 -1
  220. package/src/browser/shell/tab-bar-toolbar/tab-toolbar-item.tsx +13 -2
  221. package/src/browser/style/card.css +4 -2
  222. package/src/browser/style/hover-service.css +7 -0
  223. package/src/browser/window/browser-window-module.ts +2 -0
  224. package/src/browser/window/default-secondary-window-service.ts +6 -0
  225. package/src/browser/window/window-focus-service.ts +187 -0
  226. package/src/common/event.spec.ts +80 -0
  227. package/src/common/event.ts +31 -2
  228. package/src/common/glob.ts +2 -2
  229. package/src/common/i18n/nls.metadata.json +4254 -1058
  230. package/src/common/message-rpc/channel.spec.ts +116 -0
  231. package/src/common/message-rpc/channel.ts +15 -11
  232. package/src/common/message-rpc/rpc-protocol.ts +12 -3
  233. package/src/common/message-rpc/uint8-array-message-buffer.ts +1 -1
  234. package/src/common/messaging/index.ts +1 -0
  235. package/src/common/messaging/socket-write-buffer.ts +10 -4
  236. package/src/common/performance/index.ts +1 -0
  237. package/src/common/performance/simple-stopwatch.ts +91 -0
  238. package/src/common/performance/stopwatch.spec.ts +321 -0
  239. package/src/common/performance/stopwatch.ts +103 -2
  240. package/src/common/preferences/index.ts +1 -0
  241. package/src/common/preferences/preference-utils.ts +28 -0
  242. package/src/common/resource.ts +8 -2
  243. package/src/electron-browser/menu/electron-main-menu-factory.ts +5 -1
  244. package/src/electron-browser/messaging/electron-messaging-frontend-module.ts +3 -0
  245. package/src/electron-browser/window/electron-window-module.ts +2 -0
  246. package/src/electron-main/electron-api-main.ts +4 -2
  247. package/src/electron-main/electron-main-application-module.ts +3 -0
  248. package/src/electron-main/electron-main-application.ts +21 -5
  249. package/src/electron-main/theia-electron-window.ts +3 -0
  250. package/src/node/backend-application.ts +27 -10
  251. package/src/node/messaging/default-messaging-service.ts +1 -0
  252. package/src/node/messaging/index.ts +1 -0
  253. package/src/node/messaging/messaging-backend-module.ts +5 -1
  254. package/src/node/messaging/test/default-messaging-service.spec.ts +85 -0
  255. package/src/node/messaging/websocket-frontend-connection-service.ts +20 -7
  256. package/src/node/performance/node-stopwatch.ts +1 -1
  257. package/src/node/process-utils.ts +9 -1
@@ -1,12 +1,16 @@
1
1
  import { Channel, WriteBuffer } from '../../common/message-rpc';
2
2
  import { MessagingService } from './messaging-service';
3
+ import { interfaces } from 'inversify';
3
4
  import { Socket } from 'socket.io';
4
5
  import { ConnectionHandlers } from './default-messaging-service';
6
+ import { SocketWriteBuffer } from '../../common/messaging/socket-write-buffer';
5
7
  import { FrontendConnectionService } from './frontend-connection-service';
6
8
  import { AbstractChannel } from '../../common/message-rpc/channel';
7
9
  import { WebsocketEndpoint } from './websocket-endpoint';
10
+ import { DisposableCollection } from '../../common';
8
11
  export declare class WebsocketFrontendConnectionService implements FrontendConnectionService {
9
12
  protected readonly websocketServer: WebsocketEndpoint;
13
+ protected readonly container: interfaces.Container;
10
14
  protected readonly wsHandlers: ConnectionHandlers<unknown>;
11
15
  protected readonly connectionsByFrontend: Map<string, ReconnectableSocketChannel>;
12
16
  protected readonly closeTimeouts: Map<string, NodeJS.Timeout>;
@@ -19,13 +23,13 @@ export declare class WebsocketFrontendConnectionService implements FrontendConne
19
23
  markForClose(channelId: string): void;
20
24
  private frontendConnectionTimeout;
21
25
  }
22
- declare class ReconnectableSocketChannel extends AbstractChannel {
23
- private socket;
24
- private socketBuffer;
25
- private disposables;
26
+ export declare class ReconnectableSocketChannel extends AbstractChannel {
27
+ protected socket: Socket | undefined;
28
+ protected socketBuffer: SocketWriteBuffer;
29
+ protected disposables: DisposableCollection;
26
30
  connect(socket: Socket): void;
27
31
  disconnect(): void;
32
+ drainBuffer(): void;
28
33
  getWriteBuffer(): WriteBuffer;
29
34
  }
30
- export {};
31
35
  //# sourceMappingURL=websocket-frontend-connection-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-frontend-connection-service.d.ts","sourceRoot":"","sources":["../../../src/node/messaging/websocket-frontend-connection-service.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAIzD,qBACa,kCAAmC,YAAW,yBAAyB;IAGhF,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,iBAAiB,CAAC;IAEtD,SAAS,CAAC,QAAQ,CAAC,UAAU,8BAA4B;IACzD,SAAS,CAAC,QAAQ,CAAC,qBAAqB,0CAAiD;IACzF,SAAS,CAAC,QAAQ,CAAC,aAAa,8BAAqC;IACrE,SAAS,CAAC,QAAQ,CAAC,sBAAsB,cAAqB;IAE9D,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;cAIxG,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAoClH,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAcnE,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,0BAA0B;IAS1F,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAqBrG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIrC,OAAO,CAAC,yBAAyB;CAQpC;AAED,cAAM,0BAA2B,SAAQ,eAAe;IACpD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,WAAW,CAA8B;IAEjD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAyB7B,UAAU,IAAI,IAAI;IAKT,cAAc,IAAI,WAAW;CAWzC"}
1
+ {"version":3,"file":"websocket-frontend-connection-service.d.ts","sourceRoot":"","sources":["../../../src/node/messaging/websocket-frontend-connection-service.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAsB,UAAU,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAsB,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAc,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEhE,qBACa,kCAAmC,YAAW,yBAAyB;IAGhF,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,iBAAiB,CAAC;IAGtD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC;IAEnD,SAAS,CAAC,QAAQ,CAAC,UAAU,8BAA4B;IACzD,SAAS,CAAC,QAAQ,CAAC,qBAAqB,0CAAiD;IACzF,SAAS,CAAC,QAAQ,CAAC,aAAa,8BAAqC;IACrE,SAAS,CAAC,QAAQ,CAAC,sBAAsB,cAAqB;IAE9D,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;cAIxG,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAoClH,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAenE,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,0BAA0B;IAS1F,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAqBrG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIrC,OAAO,CAAC,yBAAyB;CAQpC;AAED,qBACa,0BAA2B,SAAQ,eAAe;IAC3D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAGrC,SAAS,CAAC,YAAY,EAAE,iBAAiB,CAAC;IAE1C,SAAS,CAAC,WAAW,uBAA8B;IAEnD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IA0B7B,UAAU,IAAI,IAAI;IAKlB,WAAW,IAAI,IAAI;IAIV,cAAc,IAAI,WAAW;CAWzC"}
@@ -14,7 +14,7 @@
14
14
  //
15
15
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.WebsocketFrontendConnectionService = void 0;
17
+ exports.ReconnectableSocketChannel = exports.WebsocketFrontendConnectionService = void 0;
18
18
  const tslib_1 = require("tslib");
19
19
  const inversify_1 = require("inversify");
20
20
  const default_messaging_service_1 = require("./default-messaging-service");
@@ -78,11 +78,12 @@ let WebsocketFrontendConnectionService = class WebsocketFrontendConnectionServic
78
78
  clearTimeout(pendingTimeout);
79
79
  this.closeTimeouts.delete(frontEndId);
80
80
  connection.onCloseEmitter.fire({ reason });
81
+ connection.drainBuffer();
81
82
  connection.close();
82
83
  }
83
84
  createConnection(socket, frontEndId) {
84
85
  console.info(`creating connection for ${frontEndId}`);
85
- const channel = new ReconnectableSocketChannel();
86
+ const channel = this.container.get(ReconnectableSocketChannel);
86
87
  channel.connect(socket);
87
88
  this.connectionsByFrontend.set(frontEndId, channel);
88
89
  return channel;
@@ -124,16 +125,20 @@ tslib_1.__decorate([
124
125
  (0, inversify_1.inject)(websocket_endpoint_1.WebsocketEndpoint),
125
126
  tslib_1.__metadata("design:type", websocket_endpoint_1.WebsocketEndpoint)
126
127
  ], WebsocketFrontendConnectionService.prototype, "websocketServer", void 0);
128
+ tslib_1.__decorate([
129
+ (0, inversify_1.inject)(default_messaging_service_1.MessagingContainer),
130
+ tslib_1.__metadata("design:type", Object)
131
+ ], WebsocketFrontendConnectionService.prototype, "container", void 0);
127
132
  exports.WebsocketFrontendConnectionService = WebsocketFrontendConnectionService = tslib_1.__decorate([
128
133
  (0, inversify_1.injectable)()
129
134
  ], WebsocketFrontendConnectionService);
130
- class ReconnectableSocketChannel extends channel_1.AbstractChannel {
135
+ let ReconnectableSocketChannel = class ReconnectableSocketChannel extends channel_1.AbstractChannel {
131
136
  constructor() {
132
137
  super(...arguments);
133
- this.socketBuffer = new socket_write_buffer_1.SocketWriteBuffer();
134
138
  this.disposables = new common_1.DisposableCollection();
135
139
  }
136
140
  connect(socket) {
141
+ this.disposables.dispose();
137
142
  this.disposables = new common_1.DisposableCollection();
138
143
  this.socket = socket;
139
144
  const errorHandler = (err) => {
@@ -160,6 +165,9 @@ class ReconnectableSocketChannel extends channel_1.AbstractChannel {
160
165
  this.disposables.dispose();
161
166
  this.socket = undefined;
162
167
  }
168
+ drainBuffer() {
169
+ this.socketBuffer.drain();
170
+ }
163
171
  getWriteBuffer() {
164
172
  const writeBuffer = new uint8_array_message_buffer_1.Uint8ArrayWriteBuffer();
165
173
  writeBuffer.onCommit(data => {
@@ -172,5 +180,13 @@ class ReconnectableSocketChannel extends channel_1.AbstractChannel {
172
180
  });
173
181
  return writeBuffer;
174
182
  }
175
- }
183
+ };
184
+ exports.ReconnectableSocketChannel = ReconnectableSocketChannel;
185
+ tslib_1.__decorate([
186
+ (0, inversify_1.inject)(socket_write_buffer_1.SocketWriteBuffer),
187
+ tslib_1.__metadata("design:type", socket_write_buffer_1.SocketWriteBuffer)
188
+ ], ReconnectableSocketChannel.prototype, "socketBuffer", void 0);
189
+ exports.ReconnectableSocketChannel = ReconnectableSocketChannel = tslib_1.__decorate([
190
+ (0, inversify_1.injectable)()
191
+ ], ReconnectableSocketChannel);
176
192
  //# sourceMappingURL=websocket-frontend-connection-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-frontend-connection-service.js","sourceRoot":"","sources":["../../../src/node/messaging/websocket-frontend-connection-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket-frontend-connection-service.js","sourceRoot":"","sources":["../../../src/node/messaging/websocket-frontend-connection-service.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ const common_1 = require("../../common");
23
23
  let NodeStopwatch = class NodeStopwatch extends common_1.Stopwatch {
24
24
  constructor() {
25
25
  super({
26
- owner: 'backend',
26
+ owner: 'backend process',
27
27
  now: () => perf_hooks_1.performance.now(),
28
28
  });
29
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"node-stopwatch.js","sourceRoot":"","sources":["../../../src/node/performance/node-stopwatch.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;gFAcgF;;;;AAEhF,yCAAuC;AACvC,2CAAyC;AACzC,yCAA0E;AAGnE,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,kBAAS;IAExC;QACI,KAAK,CAAC;YACF,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,GAAG,EAAE,CAAC,wBAAW,CAAC,GAAG,EAAE;SAC/B,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,OAA4B;QAC5C,MAAM,SAAS,GAAG,wBAAW,CAAC,GAAG,EAAE,CAAC;QAEpC,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE;YACrC,MAAM,QAAQ,GAAG,wBAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAC/C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;QACnC,CAAC,EAAE,OAAO,CAAC,CAAC;IAChB,CAAC;CAEJ,CAAA;AAlBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,sBAAU,GAAE;;GACA,aAAa,CAkBzB;AAAA,CAAC"}
1
+ {"version":3,"file":"node-stopwatch.js","sourceRoot":"","sources":["../../../src/node/performance/node-stopwatch.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;gFAcgF;;;;AAEhF,yCAAuC;AACvC,2CAAyC;AACzC,yCAA0E;AAGnE,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,kBAAS;IAExC;QACI,KAAK,CAAC;YACF,KAAK,EAAE,iBAAiB;YACxB,GAAG,EAAE,GAAG,EAAE,CAAC,wBAAW,CAAC,GAAG,EAAE;SAC/B,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,OAA4B;QAC5C,MAAM,SAAS,GAAG,wBAAW,CAAC,GAAG,EAAE,CAAC;QAEpC,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE;YACrC,MAAM,QAAQ,GAAG,wBAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAC/C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;QACnC,CAAC,EAAE,OAAO,CAAC,CAAC;IAChB,CAAC;CAEJ,CAAA;AAlBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,sBAAU,GAAE;;GACA,aAAa,CAkBzB;AAAA,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"process-utils.d.ts","sourceRoot":"","sources":["../../src/node/process-utils.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC;AAGpC;;GAEG;AACH,qBACa,YAAY;IAErB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxC,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrD,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAqBtD,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAK1C,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IA4B7D,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC;CAUhH"}
1
+ {"version":3,"file":"process-utils.d.ts","sourceRoot":"","sources":["../../src/node/process-utils.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC;AAGpC;;GAEG;AACH,qBACa,YAAY;IAErB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxC,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAYrD,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAqBtD,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAK1C,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IA4B7D,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC;CAUhH"}
@@ -32,7 +32,15 @@ let ProcessUtils = class ProcessUtils {
32
32
  }
33
33
  }
34
34
  winTerminateProcessTree(ppid) {
35
- this.spawnSync('taskkill.exe', ['/f', '/t', '/pid', ppid.toString(10)]);
35
+ const result = cp.spawnSync('taskkill.exe', ['/f', '/t', '/pid', ppid.toString(10)], { encoding: 'utf8' });
36
+ if (result.error) {
37
+ throw result.error;
38
+ }
39
+ // taskkill may exit with a non-zero code when some child processes have already exited.
40
+ // This is expected during shutdown — log but don't throw.
41
+ if (result.status !== 0) {
42
+ console.warn(`taskkill.exe exited with ${result.status} for PID ${ppid}. Output:\n${JSON.stringify(result.output)}`);
43
+ }
36
44
  }
37
45
  unixTerminateProcessTree(ppid) {
38
46
  for (const pid of this.unixGetChildrenRecursive(ppid)) {
@@ -1 +1 @@
1
- {"version":3,"file":"process-utils.js","sourceRoot":"","sources":["../../src/node/process-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process-utils.js","sourceRoot":"","sources":["../../src/node/process-utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@theia/core",
3
- "version": "1.71.0-next.8+8ec70800c",
3
+ "version": "1.71.0",
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",
7
7
  "dependencies": {
8
- "@babel/runtime": "^7.10.0",
8
+ "@babel/runtime": "^7.29.2",
9
9
  "@lumino/algorithm": "^2.0.4",
10
10
  "@lumino/commands": "^2.3.3",
11
11
  "@lumino/coreutils": "^2.2.2",
@@ -16,31 +16,31 @@
16
16
  "@lumino/signaling": "^2.1.5",
17
17
  "@lumino/virtualdom": "^2.0.4",
18
18
  "@lumino/widgets": "2.7.5",
19
- "@parcel/watcher": "^2.5.0",
20
- "@theia/application-package": "1.71.0-next.8+8ec70800c",
21
- "@theia/request": "1.71.0-next.8+8ec70800c",
22
- "@types/body-parser": "^1.16.4",
19
+ "@parcel/watcher": "^2.5.6",
20
+ "@theia/application-package": "1.71.0",
21
+ "@theia/request": "1.71.0",
22
+ "@types/body-parser": "^1.19.6",
23
23
  "@types/express": "^4.17.21",
24
24
  "@types/fs-extra": "^4.0.2",
25
25
  "@types/lodash.debounce": "4.0.3",
26
- "@types/lodash.throttle": "^4.1.3",
27
- "@types/markdown-it": "^14.1.0",
26
+ "@types/lodash.throttle": "^4.1.9",
27
+ "@types/markdown-it": "^14.1.2",
28
28
  "@types/markdown-it-emoji": "^3.0.1",
29
- "@types/react": "^18.0.15",
30
- "@types/react-dom": "^18.0.6",
31
- "@types/route-parser": "^0.1.1",
32
- "@types/safer-buffer": "^2.1.0",
29
+ "@types/react": "^18.3.28",
30
+ "@types/react-dom": "^18.3.7",
31
+ "@types/route-parser": "^0.1.7",
32
+ "@types/safer-buffer": "^2.1.3",
33
33
  "@types/uuid": "^9.0.8",
34
- "@types/ws": "^8.5.5",
34
+ "@types/ws": "^8.18.1",
35
35
  "@types/yargs": "^15",
36
36
  "@vscode/codicons": "0.0.45",
37
- "ajv": "^6.5.3",
38
- "async-mutex": "^0.4.0",
39
- "body-parser": "^1.17.2",
40
- "cookie": "^1.0.2",
41
- "dompurify": "^3.2.4",
37
+ "ajv": "^6.14.0",
38
+ "async-mutex": "^0.4.1",
39
+ "body-parser": "^1.20.4",
40
+ "cookie": "^1.1.1",
41
+ "dompurify": "^3.3.3",
42
42
  "drivelist": "^12.0.2",
43
- "express": "^4.21.0",
43
+ "express": "^4.22.1",
44
44
  "fast-json-stable-stringify": "^2.1.0",
45
45
  "file-icons-js": "~1.0.3",
46
46
  "font-awesome": "^4.7.0",
@@ -48,32 +48,32 @@
48
48
  "fuzzy": "^0.1.3",
49
49
  "http-proxy-agent": "^5.0.0",
50
50
  "https-proxy-agent": "^5.0.0",
51
- "iconv-lite": "^0.6.0",
52
- "inversify": "^6.1.3",
53
- "jschardet": "^2.1.1",
51
+ "iconv-lite": "^0.6.3",
52
+ "inversify": "^6.2.2",
53
+ "jschardet": "^2.3.0",
54
54
  "keytar": "7.9.0",
55
55
  "lodash.debounce": "^4.0.8",
56
56
  "lodash.throttle": "^4.1.1",
57
- "markdown-it": "^14.1.0",
57
+ "markdown-it": "^14.1.1",
58
58
  "markdown-it-anchor": "^9.2.0",
59
59
  "markdown-it-emoji": "^3.0.0",
60
- "msgpackr": "^1.10.2",
60
+ "msgpackr": "^1.11.9",
61
61
  "p-debounce": "^2.1.0",
62
62
  "perfect-scrollbar": "1.5.5",
63
- "react": "^18.2.0",
64
- "react-dom": "^18.2.0",
65
- "react-tooltip": "^4.2.21",
66
- "react-virtuoso": "^2.17.0",
63
+ "react": "^18.3.1",
64
+ "react-dom": "^18.3.1",
65
+ "react-tooltip": "^4.5.1",
66
+ "react-virtuoso": "^2.19.1",
67
67
  "reflect-metadata": "^0.2.2",
68
68
  "route-parser": "^0.0.5",
69
69
  "safer-buffer": "^2.1.2",
70
- "socket.io": "^4.5.3",
71
- "socket.io-client": "^4.5.3",
70
+ "socket.io": "^4.8.3",
71
+ "socket.io-client": "^4.8.3",
72
72
  "tslib": "^2.6.2",
73
73
  "uuid": "^9.0.1",
74
74
  "vscode-languageserver-protocol": "3.17.5",
75
75
  "vscode-uri": "3.0.8",
76
- "ws": "^8.17.1",
76
+ "ws": "^8.20.0",
77
77
  "yargs": "^15.3.1"
78
78
  },
79
79
  "peerDependencies": {
@@ -213,13 +213,13 @@
213
213
  "watch": "theiaext watch"
214
214
  },
215
215
  "devDependencies": {
216
- "@theia/ext-scripts": "1.70.0",
217
- "@theia/re-exports": "1.70.0",
216
+ "@theia/ext-scripts": "1.71.0",
217
+ "@theia/re-exports": "1.71.0",
218
218
  "minimist": "^1.2.0",
219
219
  "nodejs-file-downloader": "4.13.0"
220
220
  },
221
221
  "nyc": {
222
222
  "extends": "../../configs/nyc.json"
223
223
  },
224
- "gitHead": "8ec70800c488b9fc44915e8896636628b7cb8636"
224
+ "gitHead": "d8a596fc99f0a8e68b466828ed162569d79e3a71"
225
225
  }
@@ -718,8 +718,8 @@ export class CommonFrontendContribution implements FrontendApplicationContributi
718
718
  execute: title => title?.owner && this.shell.toggleMaximized(title?.owner),
719
719
  }));
720
720
  commandRegistry.registerCommand(CommonCommands.SHOW_MENU_BAR, {
721
- isEnabled: () => !isOSX,
722
- isVisible: () => !isOSX,
721
+ isEnabled: () => !this.isElectron() || !isOSX,
722
+ isVisible: () => !this.isElectron() || !isOSX,
723
723
  execute: () => {
724
724
  const menuBarVisibility = 'window.menuBarVisibility';
725
725
  const visibility = this.preferences[menuBarVisibility];
@@ -15,6 +15,7 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import * as React from 'react';
18
+ import { buttonKeyboardProps, isActivationKey } from '../keyboard/keyboard-utils';
18
19
 
19
20
  export interface CardActionButton {
20
21
  /** Icon class (e.g., codicon) */
@@ -69,14 +70,22 @@ export const Card = React.memo(function Card(props: CardProps): React.ReactEleme
69
70
  } = props;
70
71
 
71
72
  const isInteractive = onClick !== undefined;
73
+ const [hasFocus, setHasFocus] = React.useState(false);
72
74
 
73
75
  const handleKeyDown = React.useCallback((e: React.KeyboardEvent<HTMLDivElement>) => {
74
- if (onClick && (e.key === 'Enter' || e.key === ' ')) {
76
+ if (onClick && isActivationKey(e)) {
75
77
  e.preventDefault();
76
78
  onClick();
77
79
  }
78
80
  }, [onClick]);
79
81
 
82
+ const handleFocus = React.useCallback(() => setHasFocus(true), []);
83
+ const handleBlur = React.useCallback((e: React.FocusEvent<HTMLDivElement>) => {
84
+ if (!e.currentTarget.contains(e.relatedTarget as Node)) {
85
+ setHasFocus(false);
86
+ }
87
+ }, []);
88
+
80
89
  const cardClasses = [
81
90
  'theia-Card',
82
91
  isInteractive && 'theia-Card-interactive',
@@ -94,6 +103,8 @@ export const Card = React.memo(function Card(props: CardProps): React.ReactEleme
94
103
  role={isInteractive ? 'button' : undefined}
95
104
  tabIndex={isInteractive ? 0 : undefined}
96
105
  onKeyDown={isInteractive ? handleKeyDown : undefined}
106
+ onFocus={actionButtons ? handleFocus : undefined}
107
+ onBlur={actionButtons ? handleBlur : undefined}
97
108
  >
98
109
  {icon && (
99
110
  <div className={`theia-Card-icon ${icon}`}></div>
@@ -115,7 +126,7 @@ export const Card = React.memo(function Card(props: CardProps): React.ReactEleme
115
126
  key={i}
116
127
  className={`theia-Card-action-btn ${btn.iconClass}`}
117
128
  title={btn.title}
118
- aria-label={btn.title}
129
+ {...buttonKeyboardProps(btn.title, hasFocus ? 0 : -1)}
119
130
  onClick={btn.onClick}
120
131
  />
121
132
  ))}
@@ -205,7 +205,7 @@ export class ApplicationConnectionStatusContribution extends DefaultFrontendAppl
205
205
  protected handleOffline(): void {
206
206
  this.statusBar.setElement(this.statusbarId, {
207
207
  alignment: StatusBarAlignment.LEFT,
208
- text: nls.localize('theia/core/offline', 'Offline'),
208
+ text: nls.localizeByDefault('Offline'),
209
209
  tooltip: nls.localize('theia/localize/offlineTooltip', 'Cannot connect to backend.'),
210
210
  priority: 5000
211
211
  });
@@ -28,7 +28,7 @@ export interface FrontendApplicationContribution {
28
28
  /**
29
29
  * Called on application startup before configure is called.
30
30
  */
31
- initialize?(): void;
31
+ initialize?(): MaybePromise<void>;
32
32
 
33
33
  /**
34
34
  * Called before commands, key bindings and menus are initialized.
@@ -103,7 +103,7 @@ export namespace OnWillStopAction {
103
103
  @injectable()
104
104
  export abstract class DefaultFrontendApplicationContribution implements FrontendApplicationContribution {
105
105
 
106
- initialize(): void {
106
+ initialize(): MaybePromise<void> {
107
107
  // NOOP
108
108
  }
109
109
 
@@ -15,7 +15,7 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { inject, injectable, named } from 'inversify';
18
- import { ContributionProvider, CommandRegistry, MenuModelRegistry, isOSX, BackendStopwatch, LogLevel, Stopwatch } from '../common';
18
+ import { ContributionProvider, CommandRegistry, MenuModelRegistry, isOSX, BackendStopwatch, LogLevel, MeasurementContext, Stopwatch } from '../common';
19
19
  import { MaybePromise } from '../common/types';
20
20
  import { KeybindingRegistry } from './keybinding';
21
21
  import { Widget } from './widgets';
@@ -48,6 +48,8 @@ export class FrontendApplication {
48
48
  @inject(BackendStopwatch)
49
49
  protected readonly backendStopwatch: BackendStopwatch;
50
50
 
51
+ private settlementContext?: MeasurementContext<FrontendApplicationContribution>;
52
+
51
53
  constructor(
52
54
  @inject(CommandRegistry) protected readonly commands: CommandRegistry,
53
55
  @inject(MenuModelRegistry) protected readonly menus: MenuModelRegistry,
@@ -74,6 +76,7 @@ export class FrontendApplication {
74
76
  */
75
77
  async start(): Promise<void> {
76
78
  const startup = this.backendStopwatch.start('frontend');
79
+ this.settlementContext = new MeasurementContext(this.stopwatch, 'Frontend', TIMER_WARNING_THRESHOLD);
77
80
 
78
81
  await this.measure('startContributions', () => this.startContributions(), 'Start frontend contributions', false);
79
82
  this.stateService.state = 'started_contributions';
@@ -91,8 +94,9 @@ export class FrontendApplication {
91
94
  await this.measure('revealShell', () => this.revealShell(host), 'Replace loading indicator with ready workbench UI (animation)', false);
92
95
  this.registerEventListeners();
93
96
  this.stateService.state = 'ready';
97
+ this.settlementContext?.armAllSettled();
94
98
 
95
- startup.then(idToken => this.backendStopwatch.stop(idToken, 'Frontend application start', []));
99
+ startup.then(idToken => this.backendStopwatch.stop(idToken, 'Frontend application startup sequence completed (async work may still be pending)', []));
96
100
  }
97
101
 
98
102
  /**
@@ -229,9 +233,8 @@ export class FrontendApplication {
229
233
  protected async createDefaultLayout(): Promise<void> {
230
234
  for (const contribution of this.contributions.getContributions()) {
231
235
  if (contribution.initializeLayout) {
232
- await this.measure(contribution.constructor.name + '.initializeLayout',
233
- () => contribution.initializeLayout!(this)
234
- );
236
+ await this.measureContribution(contribution, 'initializeLayout',
237
+ () => contribution.initializeLayout!(this));
235
238
  }
236
239
  }
237
240
  }
@@ -239,9 +242,8 @@ export class FrontendApplication {
239
242
  protected async fireOnDidInitializeLayout(): Promise<void> {
240
243
  for (const contribution of this.contributions.getContributions()) {
241
244
  if (contribution.onDidInitializeLayout) {
242
- await this.measure(contribution.constructor.name + '.onDidInitializeLayout',
243
- () => contribution.onDidInitializeLayout!(this)
244
- );
245
+ await this.measureContribution(contribution, 'onDidInitializeLayout',
246
+ () => contribution.onDidInitializeLayout!(this));
245
247
  }
246
248
  }
247
249
  }
@@ -253,9 +255,8 @@ export class FrontendApplication {
253
255
  for (const contribution of this.contributions.getContributions()) {
254
256
  if (contribution.initialize) {
255
257
  try {
256
- await this.measure(contribution.constructor.name + '.initialize',
257
- () => contribution.initialize!()
258
- );
258
+ await this.measureContribution(contribution, 'initialize',
259
+ () => contribution.initialize!());
259
260
  } catch (error) {
260
261
  console.error('Could not initialize contribution', error);
261
262
  }
@@ -265,9 +266,8 @@ export class FrontendApplication {
265
266
  for (const contribution of this.contributions.getContributions()) {
266
267
  if (contribution.configure) {
267
268
  try {
268
- await this.measure(contribution.constructor.name + '.configure',
269
- () => contribution.configure!(this)
270
- );
269
+ await this.measureContribution(contribution, 'configure',
270
+ () => contribution.configure!(this));
271
271
  } catch (error) {
272
272
  console.error('Could not configure contribution', error);
273
273
  }
@@ -291,9 +291,8 @@ export class FrontendApplication {
291
291
  for (const contribution of this.contributions.getContributions()) {
292
292
  if (contribution.onStart) {
293
293
  try {
294
- await this.measure(contribution.constructor.name + '.onStart',
295
- () => contribution.onStart!(this)
296
- );
294
+ await this.measureContribution(contribution, 'onStart',
295
+ () => contribution.onStart!(this));
297
296
  } catch (error) {
298
297
  console.error('Could not start contribution', error);
299
298
  }
@@ -318,6 +317,16 @@ export class FrontendApplication {
318
317
  console.info('<<< All frontend contributions have been stopped.');
319
318
  }
320
319
 
320
+ protected async measureContribution<T>(contribution: FrontendApplicationContribution, hook: string, fn: () => MaybePromise<T>): Promise<T> {
321
+ let innerResult: MaybePromise<T>;
322
+ this.settlementContext?.ensureEntry(contribution);
323
+ const result = await this.measure(contribution.constructor.name + '.' + hook,
324
+ () => (innerResult = fn())
325
+ );
326
+ this.settlementContext?.trackSettlement(contribution, innerResult!);
327
+ return result;
328
+ }
329
+
321
330
  protected async measure<T>(name: string, fn: () => MaybePromise<T>, message = `Frontend ${name}`, threshold = true): Promise<T> {
322
331
  return this.stopwatch.startAsync(name, message, fn,
323
332
  threshold ? { thresholdMillis: TIMER_WARNING_THRESHOLD, defaultLogLevel: LogLevel.DEBUG } : {});
@@ -18,3 +18,4 @@ export * from './keys';
18
18
  export * from './keyboard-layout-service';
19
19
  export * from './browser-keyboard-layout-provider';
20
20
  export * from './browser-keyboard-frontend-contribution';
21
+ export * from './keyboard-utils';
@@ -0,0 +1,37 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 EclipseSource 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-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ /**
18
+ * Query whether the keyboard event represents an element activation.
19
+ * That is, whether the user pressed `Enter` or `Space` on a focusable
20
+ * element with `role="button"` or similar interactive role.
21
+ */
22
+ export function isActivationKey(e: React.KeyboardEvent | KeyboardEvent): boolean {
23
+ return e.key === 'Enter' || e.key === ' ';
24
+ }
25
+
26
+ /**
27
+ * Returns the ARIA/accessibility props that make a non-button HTML element
28
+ * keyboard-navigable and screen-reader-accessible as a button.
29
+ *
30
+ * Spread these onto the element alongside `onClick` and `onKeyDown`:
31
+ * ```tsx
32
+ * <div {...buttonKeyboardProps(label)} onClick={handler} onKeyDown={e => isActivationKey(e) && handler()} />
33
+ * ```
34
+ */
35
+ export function buttonKeyboardProps(ariaLabel: string, tabIndex = 0): React.HTMLAttributes<HTMLElement> {
36
+ return { tabIndex, role: 'button', 'aria-label': ariaLabel };
37
+ }
@@ -143,7 +143,14 @@ export class DynamicMenuBarWidget extends MenuBarWidget {
143
143
  protected previousFocusedElement: HTMLElement | undefined;
144
144
 
145
145
  constructor() {
146
- super();
146
+ // Disable Lumino's overflow menu feature. The feature has a bug where
147
+ // `onUpdateRequest` consumes a stale `_overflowIndex` (only recomputed at the
148
+ // end of the method), which causes a RangeError when the menu bar is rendered
149
+ // at zero width. Additionally, Theia's CSS does not constrain the menu bar's
150
+ // offsetWidth to the available space, so the overflow detection never triggers.
151
+ // See https://github.com/eclipse-theia/theia/issues/17352
152
+ // See https://github.com/jupyterlab/lumino/issues/811
153
+ super({ overflowMenuOptions: { isVisible: false } });
147
154
  // HACK we need to hook in on private method _openChildMenu. Don't do this at home!
148
155
  DynamicMenuBarWidget.prototype['_openChildMenu'] = () => {
149
156
  if (this.activeMenu instanceof DynamicMenuWidget) {
@@ -14,7 +14,8 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { Channel, Event } from '../../common';
17
+ import { Channel } from '../../common/message-rpc/channel';
18
+ import { Event } from '../../common/event';
18
19
 
19
20
  export const ConnectionSource = Symbol('ConnectionSource');
20
21
 
@@ -21,10 +21,13 @@ import { LocalConnectionProvider, RemoteConnectionProvider, ServiceConnectionPro
21
21
  import { ConnectionSource } from './connection-source';
22
22
  import { ConnectionCloseService, connectionCloseServicePath } from '../../common/messaging/connection-management';
23
23
  import { WebSocketConnectionProvider } from './ws-connection-provider';
24
+ import { SocketWriteBuffer } from '../../common/messaging/socket-write-buffer';
24
25
 
25
26
  const backendServiceProvider = Symbol('backendServiceProvider');
26
27
 
27
28
  export const messagingFrontendModule = new ContainerModule(bind => {
29
+ // Transient: each connection source gets its own private buffer instance.
30
+ bind(SocketWriteBuffer).toSelf();
28
31
  bind(ConnectionCloseService).toDynamicValue(ctx => WebSocketConnectionProvider.createProxy(ctx.container, connectionCloseServicePath)).inSingletonScope();
29
32
  bind(BrowserFrontendIdProvider).toSelf().inSingletonScope();
30
33
  bind(FrontendIdProvider).toService(BrowserFrontendIdProvider);