@theia/core 1.27.0-next.9 → 1.27.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 (436) hide show
  1. package/README.md +6 -7
  2. package/i18n/nls.cs.json +52 -6
  3. package/i18n/nls.de.json +52 -6
  4. package/i18n/nls.es.json +52 -6
  5. package/i18n/nls.fr.json +52 -6
  6. package/i18n/nls.hu.json +55 -9
  7. package/i18n/nls.it.json +52 -6
  8. package/i18n/nls.ja.json +52 -6
  9. package/i18n/nls.json +52 -6
  10. package/i18n/nls.pl.json +52 -6
  11. package/i18n/nls.pt-br.json +52 -6
  12. package/i18n/nls.pt-pt.json +52 -6
  13. package/i18n/nls.ru.json +52 -6
  14. package/i18n/nls.zh-cn.json +52 -6
  15. package/lib/browser/color-application-contribution.d.ts +2 -2
  16. package/lib/browser/color-application-contribution.d.ts.map +1 -1
  17. package/lib/browser/color-application-contribution.js +15 -16
  18. package/lib/browser/color-application-contribution.js.map +1 -1
  19. package/lib/browser/color-registry.d.ts +0 -4
  20. package/lib/browser/color-registry.d.ts.map +1 -1
  21. package/lib/browser/color-registry.js +0 -14
  22. package/lib/browser/color-registry.js.map +1 -1
  23. package/lib/browser/common-frontend-contribution.d.ts +4 -0
  24. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  25. package/lib/browser/common-frontend-contribution.js +157 -163
  26. package/lib/browser/common-frontend-contribution.js.map +1 -1
  27. package/lib/browser/common-styling-participants.d.ts +28 -0
  28. package/lib/browser/common-styling-participants.d.ts.map +1 -0
  29. package/lib/browser/common-styling-participants.js +319 -0
  30. package/lib/browser/common-styling-participants.js.map +1 -0
  31. package/lib/browser/connection-status-service.d.ts.map +1 -1
  32. package/lib/browser/connection-status-service.js +2 -2
  33. package/lib/browser/connection-status-service.js.map +1 -1
  34. package/lib/browser/connection-status-service.spec.js +1 -2
  35. package/lib/browser/connection-status-service.spec.js.map +1 -1
  36. package/lib/browser/context-menu-renderer.d.ts +1 -5
  37. package/lib/browser/context-menu-renderer.d.ts.map +1 -1
  38. package/lib/browser/context-menu-renderer.js +10 -30
  39. package/lib/browser/context-menu-renderer.js.map +1 -1
  40. package/lib/browser/core-preferences.d.ts +1 -0
  41. package/lib/browser/core-preferences.d.ts.map +1 -1
  42. package/lib/browser/core-preferences.js +5 -0
  43. package/lib/browser/core-preferences.js.map +1 -1
  44. package/lib/browser/decoration-style.d.ts +1 -0
  45. package/lib/browser/decoration-style.d.ts.map +1 -1
  46. package/lib/browser/decoration-style.js +6 -2
  47. package/lib/browser/decoration-style.js.map +1 -1
  48. package/lib/browser/frontend-application-bindings.d.ts.map +1 -1
  49. package/lib/browser/frontend-application-bindings.js +1 -3
  50. package/lib/browser/frontend-application-bindings.js.map +1 -1
  51. package/lib/browser/frontend-application-config-provider.d.ts +1 -0
  52. package/lib/browser/frontend-application-config-provider.d.ts.map +1 -1
  53. package/lib/browser/frontend-application-config-provider.js +2 -1
  54. package/lib/browser/frontend-application-config-provider.js.map +1 -1
  55. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  56. package/lib/browser/frontend-application-module.js +9 -3
  57. package/lib/browser/frontend-application-module.js.map +1 -1
  58. package/lib/browser/i18n/i18n-frontend-module.d.ts.map +1 -1
  59. package/lib/browser/i18n/i18n-frontend-module.js +2 -0
  60. package/lib/browser/i18n/i18n-frontend-module.js.map +1 -1
  61. package/lib/browser/i18n/language-quick-pick-service.d.ts +17 -0
  62. package/lib/browser/i18n/language-quick-pick-service.d.ts.map +1 -0
  63. package/lib/browser/i18n/language-quick-pick-service.js +142 -0
  64. package/lib/browser/i18n/language-quick-pick-service.js.map +1 -0
  65. package/lib/browser/index.d.ts +1 -0
  66. package/lib/browser/index.d.ts.map +1 -1
  67. package/lib/browser/index.js +1 -0
  68. package/lib/browser/index.js.map +1 -1
  69. package/lib/browser/keybinding.d.ts.map +1 -1
  70. package/lib/browser/keybinding.js +2 -1
  71. package/lib/browser/keybinding.js.map +1 -1
  72. package/lib/browser/keybinding.spec.js +18 -21
  73. package/lib/browser/keybinding.spec.js.map +1 -1
  74. package/lib/browser/label-provider.d.ts +0 -12
  75. package/lib/browser/label-provider.d.ts.map +1 -1
  76. package/lib/browser/label-provider.js +1 -13
  77. package/lib/browser/label-provider.js.map +1 -1
  78. package/lib/browser/logger-frontend-module.d.ts.map +1 -1
  79. package/lib/browser/logger-frontend-module.js +8 -1
  80. package/lib/browser/logger-frontend-module.js.map +1 -1
  81. package/lib/browser/messaging/ws-connection-provider.d.ts +5 -4
  82. package/lib/browser/messaging/ws-connection-provider.d.ts.map +1 -1
  83. package/lib/browser/messaging/ws-connection-provider.js +30 -23
  84. package/lib/browser/messaging/ws-connection-provider.js.map +1 -1
  85. package/lib/browser/preferences/preference-contribution.d.ts +2 -19
  86. package/lib/browser/preferences/preference-contribution.d.ts.map +1 -1
  87. package/lib/browser/preferences/preference-contribution.js +1 -24
  88. package/lib/browser/preferences/preference-contribution.js.map +1 -1
  89. package/lib/browser/preferences/preference-proxy.d.ts +0 -4
  90. package/lib/browser/preferences/preference-proxy.d.ts.map +1 -1
  91. package/lib/browser/preferences/preference-proxy.js.map +1 -1
  92. package/lib/browser/preferences/preference-proxy.spec.js +3 -102
  93. package/lib/browser/preferences/preference-proxy.spec.js.map +1 -1
  94. package/lib/browser/preferences/preference-schema-provider.spec.js +4 -3
  95. package/lib/browser/preferences/preference-schema-provider.spec.js.map +1 -1
  96. package/lib/browser/preferences/preference-service.spec.js +1 -2
  97. package/lib/browser/preferences/preference-service.spec.js.map +1 -1
  98. package/lib/browser/preferences/preference-validation-service.d.ts +2 -2
  99. package/lib/browser/preferences/preference-validation-service.d.ts.map +1 -1
  100. package/lib/browser/preferences/preference-validation-service.spec.js.map +1 -1
  101. package/lib/browser/preloader.d.ts.map +1 -1
  102. package/lib/browser/preloader.js +7 -1
  103. package/lib/browser/preloader.js.map +1 -1
  104. package/lib/browser/progress-status-bar-item.d.ts +1 -1
  105. package/lib/browser/progress-status-bar-item.d.ts.map +1 -1
  106. package/lib/browser/quick-input/quick-command-service.d.ts.map +1 -1
  107. package/lib/browser/quick-input/quick-command-service.js +2 -2
  108. package/lib/browser/quick-input/quick-command-service.js.map +1 -1
  109. package/lib/browser/saveable.d.ts.map +1 -1
  110. package/lib/browser/saveable.js +5 -4
  111. package/lib/browser/saveable.js.map +1 -1
  112. package/lib/browser/shell/application-shell.d.ts +4 -0
  113. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  114. package/lib/browser/shell/application-shell.js +42 -36
  115. package/lib/browser/shell/application-shell.js.map +1 -1
  116. package/lib/browser/shell/shell-layout-restorer.d.ts +2 -0
  117. package/lib/browser/shell/shell-layout-restorer.d.ts.map +1 -1
  118. package/lib/browser/shell/shell-layout-restorer.js +5 -1
  119. package/lib/browser/shell/shell-layout-restorer.js.map +1 -1
  120. package/lib/browser/shell/side-panel-handler.d.ts.map +1 -1
  121. package/lib/browser/shell/side-panel-handler.js +3 -2
  122. package/lib/browser/shell/side-panel-handler.js.map +1 -1
  123. package/lib/browser/shell/tab-bars.d.ts +4 -2
  124. package/lib/browser/shell/tab-bars.d.ts.map +1 -1
  125. package/lib/browser/shell/tab-bars.js +12 -4
  126. package/lib/browser/shell/tab-bars.js.map +1 -1
  127. package/lib/browser/source-tree/source-tree-widget.js +1 -1
  128. package/lib/browser/source-tree/source-tree-widget.js.map +1 -1
  129. package/lib/browser/source-tree/tree-source.d.ts +2 -1
  130. package/lib/browser/source-tree/tree-source.d.ts.map +1 -1
  131. package/lib/browser/source-tree/tree-source.js.map +1 -1
  132. package/lib/browser/styling-service.d.ts +26 -0
  133. package/lib/browser/styling-service.d.ts.map +1 -0
  134. package/lib/browser/styling-service.js +76 -0
  135. package/lib/browser/styling-service.js.map +1 -0
  136. package/lib/browser/theming.d.ts +4 -8
  137. package/lib/browser/theming.d.ts.map +1 -1
  138. package/lib/browser/theming.js +38 -53
  139. package/lib/browser/theming.js.map +1 -1
  140. package/lib/browser/tree/search-box.d.ts.map +1 -1
  141. package/lib/browser/tree/search-box.js +5 -4
  142. package/lib/browser/tree/search-box.js.map +1 -1
  143. package/lib/browser/tree/test/tree-test-container.d.ts.map +1 -1
  144. package/lib/browser/tree/test/tree-test-container.js +2 -0
  145. package/lib/browser/tree/test/tree-test-container.js.map +1 -1
  146. package/lib/browser/tree/tree-compression/compressed-tree-model.d.ts +1 -1
  147. package/lib/browser/tree/tree-compression/compressed-tree-model.d.ts.map +1 -1
  148. package/lib/browser/tree/tree-compression/compressed-tree-model.js +4 -2
  149. package/lib/browser/tree/tree-compression/compressed-tree-model.js.map +1 -1
  150. package/lib/browser/tree/tree-compression/compressed-tree-widget.d.ts.map +1 -1
  151. package/lib/browser/tree/tree-compression/compressed-tree-widget.js +4 -2
  152. package/lib/browser/tree/tree-compression/compressed-tree-widget.js.map +1 -1
  153. package/lib/browser/tree/tree-container.d.ts +2 -0
  154. package/lib/browser/tree/tree-container.d.ts.map +1 -1
  155. package/lib/browser/tree/tree-container.js +3 -0
  156. package/lib/browser/tree/tree-container.js.map +1 -1
  157. package/lib/browser/tree/tree-focus-service.d.ts +20 -0
  158. package/lib/browser/tree/tree-focus-service.d.ts.map +1 -0
  159. package/lib/browser/tree/tree-focus-service.js +62 -0
  160. package/lib/browser/tree/tree-focus-service.js.map +1 -0
  161. package/lib/browser/tree/tree-model.d.ts +11 -2
  162. package/lib/browser/tree/tree-model.d.ts.map +1 -1
  163. package/lib/browser/tree/tree-model.js +29 -8
  164. package/lib/browser/tree/tree-model.js.map +1 -1
  165. package/lib/browser/tree/tree-selection-impl.d.ts +4 -1
  166. package/lib/browser/tree/tree-selection-impl.d.ts.map +1 -1
  167. package/lib/browser/tree/tree-selection-impl.js +13 -2
  168. package/lib/browser/tree/tree-selection-impl.js.map +1 -1
  169. package/lib/browser/tree/tree-selection-state.d.ts +1 -0
  170. package/lib/browser/tree/tree-selection-state.d.ts.map +1 -1
  171. package/lib/browser/tree/tree-selection-state.js +8 -2
  172. package/lib/browser/tree/tree-selection-state.js.map +1 -1
  173. package/lib/browser/tree/tree-selection.d.ts +9 -0
  174. package/lib/browser/tree/tree-selection.d.ts.map +1 -1
  175. package/lib/browser/tree/tree-selection.js +3 -0
  176. package/lib/browser/tree/tree-selection.js.map +1 -1
  177. package/lib/browser/tree/tree-widget-selection.d.ts.map +1 -1
  178. package/lib/browser/tree/tree-widget-selection.js +9 -1
  179. package/lib/browser/tree/tree-widget-selection.js.map +1 -1
  180. package/lib/browser/tree/tree-widget.d.ts +14 -0
  181. package/lib/browser/tree/tree-widget.d.ts.map +1 -1
  182. package/lib/browser/tree/tree-widget.js +80 -40
  183. package/lib/browser/tree/tree-widget.js.map +1 -1
  184. package/lib/browser/tree/tree.d.ts +2 -1
  185. package/lib/browser/tree/tree.d.ts.map +1 -1
  186. package/lib/browser/tree/tree.js +12 -2
  187. package/lib/browser/tree/tree.js.map +1 -1
  188. package/lib/browser/view-container.d.ts +9 -4
  189. package/lib/browser/view-container.d.ts.map +1 -1
  190. package/lib/browser/view-container.js +36 -6
  191. package/lib/browser/view-container.js.map +1 -1
  192. package/lib/common/cancellation.d.ts +1 -0
  193. package/lib/common/cancellation.d.ts.map +1 -1
  194. package/lib/common/cancellation.js +8 -0
  195. package/lib/common/cancellation.js.map +1 -1
  196. package/lib/common/command.d.ts +1 -1
  197. package/lib/common/command.d.ts.map +1 -1
  198. package/lib/common/command.js +13 -16
  199. package/lib/common/command.js.map +1 -1
  200. package/lib/common/index.d.ts +1 -0
  201. package/lib/common/index.d.ts.map +1 -1
  202. package/lib/common/index.js +1 -0
  203. package/lib/common/index.js.map +1 -1
  204. package/lib/common/message-rpc/channel.d.ts +106 -0
  205. package/lib/common/message-rpc/channel.d.ts.map +1 -0
  206. package/lib/common/message-rpc/channel.js +195 -0
  207. package/lib/common/message-rpc/channel.js.map +1 -0
  208. package/lib/common/message-rpc/channel.spec.d.ts +9 -0
  209. package/lib/common/message-rpc/channel.spec.d.ts.map +1 -0
  210. package/lib/common/message-rpc/channel.spec.js +80 -0
  211. package/lib/common/message-rpc/channel.spec.js.map +1 -0
  212. package/lib/common/message-rpc/index.d.ts +4 -0
  213. package/lib/common/message-rpc/index.d.ts.map +1 -0
  214. package/lib/{node/messaging/logger.js → common/message-rpc/index.js} +6 -19
  215. package/lib/common/message-rpc/index.js.map +1 -0
  216. package/lib/common/message-rpc/message-buffer.d.ts +50 -0
  217. package/lib/common/message-rpc/message-buffer.d.ts.map +1 -0
  218. package/lib/common/message-rpc/message-buffer.js +56 -0
  219. package/lib/common/message-rpc/message-buffer.js.map +1 -0
  220. package/lib/common/message-rpc/rpc-message-encoder.d.ts +171 -0
  221. package/lib/common/message-rpc/rpc-message-encoder.d.ts.map +1 -0
  222. package/lib/common/message-rpc/rpc-message-encoder.js +409 -0
  223. package/lib/common/message-rpc/rpc-message-encoder.js.map +1 -0
  224. package/lib/common/message-rpc/rpc-message-encoder.spec.d.ts +2 -0
  225. package/lib/common/message-rpc/rpc-message-encoder.spec.d.ts.map +1 -0
  226. package/lib/common/message-rpc/rpc-message-encoder.spec.js +49 -0
  227. package/lib/common/message-rpc/rpc-message-encoder.spec.js.map +1 -0
  228. package/lib/common/message-rpc/rpc-protocol.d.ts +61 -0
  229. package/lib/common/message-rpc/rpc-protocol.d.ts.map +1 -0
  230. package/lib/common/message-rpc/rpc-protocol.js +183 -0
  231. package/lib/common/message-rpc/rpc-protocol.js.map +1 -0
  232. package/lib/common/message-rpc/uint8-array-message-buffer.d.ts +52 -0
  233. package/lib/common/message-rpc/uint8-array-message-buffer.d.ts.map +1 -0
  234. package/lib/common/message-rpc/uint8-array-message-buffer.js +169 -0
  235. package/lib/common/message-rpc/uint8-array-message-buffer.js.map +1 -0
  236. package/lib/common/message-rpc/uint8-array-message-buffer.spec.d.ts +2 -0
  237. package/lib/common/message-rpc/uint8-array-message-buffer.spec.d.ts.map +1 -0
  238. package/lib/common/message-rpc/uint8-array-message-buffer.spec.js +39 -0
  239. package/lib/common/message-rpc/uint8-array-message-buffer.spec.js.map +1 -0
  240. package/lib/common/messaging/abstract-connection-provider.d.ts +9 -8
  241. package/lib/common/messaging/abstract-connection-provider.d.ts.map +1 -1
  242. package/lib/common/messaging/abstract-connection-provider.js +20 -35
  243. package/lib/common/messaging/abstract-connection-provider.js.map +1 -1
  244. package/lib/common/messaging/connection-error-handler.d.ts +1 -2
  245. package/lib/common/messaging/connection-error-handler.d.ts.map +1 -1
  246. package/lib/common/messaging/connection-error-handler.js +1 -1
  247. package/lib/common/messaging/connection-error-handler.js.map +1 -1
  248. package/lib/common/messaging/handler.d.ts +2 -2
  249. package/lib/common/messaging/handler.d.ts.map +1 -1
  250. package/lib/common/messaging/proxy-factory.d.ts +13 -7
  251. package/lib/common/messaging/proxy-factory.d.ts.map +1 -1
  252. package/lib/common/messaging/proxy-factory.js +18 -13
  253. package/lib/common/messaging/proxy-factory.js.map +1 -1
  254. package/lib/common/messaging/proxy-factory.spec.js +4 -15
  255. package/lib/common/messaging/proxy-factory.spec.js.map +1 -1
  256. package/lib/common/messaging/web-socket-channel.d.ts +54 -48
  257. package/lib/common/messaging/web-socket-channel.d.ts.map +1 -1
  258. package/lib/common/messaging/web-socket-channel.js +41 -105
  259. package/lib/common/messaging/web-socket-channel.js.map +1 -1
  260. package/lib/common/nls.d.ts +2 -0
  261. package/lib/common/nls.d.ts.map +1 -1
  262. package/lib/common/nls.js +11 -0
  263. package/lib/common/nls.js.map +1 -1
  264. package/lib/common/preferences/preference-schema.d.ts +1 -5
  265. package/lib/common/preferences/preference-schema.d.ts.map +1 -1
  266. package/lib/common/preferences/preference-schema.js.map +1 -1
  267. package/lib/common/promise-util.d.ts +2 -1
  268. package/lib/common/promise-util.d.ts.map +1 -1
  269. package/lib/common/promise-util.js +8 -13
  270. package/lib/common/promise-util.js.map +1 -1
  271. package/lib/common/resource.d.ts +5 -0
  272. package/lib/common/resource.d.ts.map +1 -1
  273. package/lib/common/resource.js +28 -1
  274. package/lib/common/resource.js.map +1 -1
  275. package/lib/common/theme.d.ts +3 -2
  276. package/lib/common/theme.d.ts.map +1 -1
  277. package/lib/common/theme.js +5 -0
  278. package/lib/common/theme.js.map +1 -1
  279. package/lib/electron-browser/messaging/electron-ipc-connection-provider.d.ts +2 -2
  280. package/lib/electron-browser/messaging/electron-ipc-connection-provider.d.ts.map +1 -1
  281. package/lib/electron-browser/messaging/electron-ipc-connection-provider.js +18 -7
  282. package/lib/electron-browser/messaging/electron-ipc-connection-provider.js.map +1 -1
  283. package/lib/electron-browser/messaging/electron-ws-connection-provider.d.ts +2 -2
  284. package/lib/electron-browser/messaging/electron-ws-connection-provider.d.ts.map +1 -1
  285. package/lib/electron-browser/messaging/electron-ws-connection-provider.js +5 -7
  286. package/lib/electron-browser/messaging/electron-ws-connection-provider.js.map +1 -1
  287. package/lib/electron-main/event-utils.d.ts +1 -1
  288. package/lib/electron-main/messaging/electron-messaging-contribution.d.ts +37 -9
  289. package/lib/electron-main/messaging/electron-messaging-contribution.d.ts.map +1 -1
  290. package/lib/electron-main/messaging/electron-messaging-contribution.js +83 -68
  291. package/lib/electron-main/messaging/electron-messaging-contribution.js.map +1 -1
  292. package/lib/electron-main/messaging/electron-messaging-service.d.ts +2 -8
  293. package/lib/electron-main/messaging/electron-messaging-service.d.ts.map +1 -1
  294. package/lib/electron-main/messaging/electron-messaging-service.js.map +1 -1
  295. package/lib/node/messaging/binary-message-pipe.d.ts +45 -0
  296. package/lib/node/messaging/binary-message-pipe.d.ts.map +1 -0
  297. package/lib/node/messaging/binary-message-pipe.js +152 -0
  298. package/lib/node/messaging/binary-message-pipe.js.map +1 -0
  299. package/lib/node/messaging/ipc-bootstrap.js +2 -11
  300. package/lib/node/messaging/ipc-bootstrap.js.map +1 -1
  301. package/lib/node/messaging/ipc-channel.d.ts +26 -0
  302. package/lib/node/messaging/ipc-channel.d.ts.map +1 -0
  303. package/lib/node/messaging/ipc-channel.js +86 -0
  304. package/lib/node/messaging/ipc-channel.js.map +1 -0
  305. package/lib/node/messaging/ipc-connection-provider.d.ts +3 -5
  306. package/lib/node/messaging/ipc-connection-provider.d.ts.map +1 -1
  307. package/lib/node/messaging/ipc-connection-provider.js +14 -31
  308. package/lib/node/messaging/ipc-connection-provider.js.map +1 -1
  309. package/lib/node/messaging/ipc-protocol.d.ts +2 -2
  310. package/lib/node/messaging/ipc-protocol.d.ts.map +1 -1
  311. package/lib/node/messaging/messaging-contribution.d.ts +6 -9
  312. package/lib/node/messaging/messaging-contribution.d.ts.map +1 -1
  313. package/lib/node/messaging/messaging-contribution.js +23 -68
  314. package/lib/node/messaging/messaging-contribution.js.map +1 -1
  315. package/lib/node/messaging/messaging-service.d.ts +4 -23
  316. package/lib/node/messaging/messaging-service.d.ts.map +1 -1
  317. package/lib/node/messaging/messaging-service.js +1 -15
  318. package/lib/node/messaging/messaging-service.js.map +1 -1
  319. package/lib/node/messaging/test/test-web-socket-channel.d.ts +4 -2
  320. package/lib/node/messaging/test/test-web-socket-channel.d.ts.map +1 -1
  321. package/lib/node/messaging/test/test-web-socket-channel.js +25 -12
  322. package/lib/node/messaging/test/test-web-socket-channel.js.map +1 -1
  323. package/lib/node/request/proxy-cli-contribution.js +1 -1
  324. package/lib/node/request/proxy-cli-contribution.js.map +1 -1
  325. package/package.json +7 -10
  326. package/src/browser/color-application-contribution.ts +10 -17
  327. package/src/browser/color-registry.ts +0 -5
  328. package/src/browser/common-frontend-contribution.ts +26 -33
  329. package/src/browser/common-styling-participants.ts +307 -0
  330. package/src/browser/connection-status-service.spec.ts +1 -4
  331. package/src/browser/connection-status-service.ts +3 -3
  332. package/src/browser/context-menu-renderer.ts +13 -29
  333. package/src/browser/core-preferences.ts +6 -0
  334. package/src/browser/decoration-style.ts +6 -2
  335. package/src/browser/frontend-application-bindings.ts +1 -3
  336. package/src/browser/frontend-application-config-provider.ts +2 -0
  337. package/src/browser/frontend-application-module.ts +11 -4
  338. package/src/browser/i18n/i18n-frontend-module.ts +2 -0
  339. package/src/browser/i18n/language-quick-pick-service.ts +128 -0
  340. package/src/browser/index.ts +1 -0
  341. package/src/browser/keybinding.spec.ts +22 -27
  342. package/src/browser/keybinding.ts +2 -1
  343. package/src/browser/label-provider.ts +0 -13
  344. package/src/browser/logger-frontend-module.ts +8 -1
  345. package/src/browser/messaging/ws-connection-provider.ts +34 -25
  346. package/src/browser/preferences/preference-contribution.ts +3 -28
  347. package/src/browser/preferences/preference-proxy.spec.ts +3 -113
  348. package/src/browser/preferences/preference-proxy.ts +0 -4
  349. package/src/browser/preferences/preference-schema-provider.spec.ts +1 -4
  350. package/src/browser/preferences/preference-service.spec.ts +1 -5
  351. package/src/browser/preferences/preference-validation-service.spec.ts +2 -2
  352. package/src/browser/preferences/preference-validation-service.ts +2 -2
  353. package/src/browser/preloader.ts +9 -2
  354. package/src/browser/progress-status-bar-item.ts +1 -1
  355. package/src/browser/quick-input/quick-command-service.ts +3 -3
  356. package/src/browser/saveable.ts +5 -4
  357. package/src/browser/shell/application-shell.ts +42 -35
  358. package/src/browser/shell/shell-layout-restorer.ts +4 -6
  359. package/src/browser/shell/side-panel-handler.ts +3 -2
  360. package/src/browser/shell/tab-bars.ts +14 -4
  361. package/src/browser/source-tree/source-tree-widget.tsx +1 -1
  362. package/src/browser/source-tree/tree-source.ts +2 -1
  363. package/src/browser/style/breadcrumbs.css +0 -1
  364. package/src/browser/style/index.css +66 -29
  365. package/src/browser/style/menus.css +4 -2
  366. package/src/browser/style/select-component.css +2 -0
  367. package/src/browser/style/sidepanel.css +11 -25
  368. package/src/browser/style/status-bar.css +8 -17
  369. package/src/browser/style/tabs.css +0 -16
  370. package/src/browser/style/tooltip.css +3 -3
  371. package/src/browser/style/tree.css +27 -11
  372. package/src/browser/style/view-container.css +4 -0
  373. package/src/browser/styling-service.ts +76 -0
  374. package/src/browser/theming.ts +18 -45
  375. package/src/browser/tree/search-box.ts +5 -4
  376. package/src/browser/tree/test/tree-test-container.ts +2 -0
  377. package/src/browser/tree/tree-compression/compressed-tree-model.ts +8 -2
  378. package/src/browser/tree/tree-compression/compressed-tree-widget.tsx +4 -2
  379. package/src/browser/tree/tree-container.ts +4 -0
  380. package/src/browser/tree/tree-focus-service.ts +55 -0
  381. package/src/browser/tree/tree-model.ts +32 -8
  382. package/src/browser/tree/tree-selection-impl.ts +13 -4
  383. package/src/browser/tree/tree-selection-state.ts +7 -2
  384. package/src/browser/tree/tree-selection.ts +10 -0
  385. package/src/browser/tree/tree-widget-selection.ts +10 -1
  386. package/src/browser/tree/tree-widget.tsx +83 -43
  387. package/src/browser/tree/tree.ts +8 -2
  388. package/src/browser/view-container.ts +41 -4
  389. package/src/common/cancellation.ts +8 -0
  390. package/src/common/command.ts +14 -16
  391. package/src/common/index.ts +1 -0
  392. package/src/common/message-rpc/channel.spec.ts +88 -0
  393. package/src/common/message-rpc/channel.ts +260 -0
  394. package/src/{node/messaging/logger.ts → common/message-rpc/index.ts} +4 -23
  395. package/src/common/message-rpc/message-buffer.ts +99 -0
  396. package/src/common/message-rpc/rpc-message-encoder.spec.ts +55 -0
  397. package/src/common/message-rpc/rpc-message-encoder.ts +552 -0
  398. package/src/common/message-rpc/rpc-protocol.ts +217 -0
  399. package/src/common/message-rpc/uint8-array-message-buffer.spec.ts +41 -0
  400. package/src/common/message-rpc/uint8-array-message-buffer.ts +206 -0
  401. package/src/common/messaging/abstract-connection-provider.ts +28 -37
  402. package/src/common/messaging/connection-error-handler.ts +1 -2
  403. package/src/common/messaging/handler.ts +2 -2
  404. package/src/common/messaging/proxy-factory.spec.ts +4 -17
  405. package/src/common/messaging/proxy-factory.ts +27 -16
  406. package/src/common/messaging/web-socket-channel.ts +79 -135
  407. package/src/common/nls.ts +11 -0
  408. package/src/common/preferences/preference-schema.ts +1 -6
  409. package/src/common/promise-util.ts +13 -14
  410. package/src/common/resource.ts +29 -2
  411. package/src/common/theme.ts +6 -2
  412. package/src/electron-browser/messaging/electron-ipc-connection-provider.ts +21 -7
  413. package/src/electron-browser/messaging/electron-ws-connection-provider.ts +5 -8
  414. package/src/electron-main/messaging/electron-messaging-contribution.ts +87 -65
  415. package/src/electron-main/messaging/electron-messaging-service.ts +2 -8
  416. package/src/node/messaging/binary-message-pipe.ts +168 -0
  417. package/src/node/messaging/ipc-bootstrap.ts +3 -11
  418. package/src/node/messaging/ipc-channel.ts +97 -0
  419. package/src/node/messaging/ipc-connection-provider.ts +18 -35
  420. package/src/node/messaging/ipc-protocol.ts +2 -2
  421. package/src/node/messaging/messaging-contribution.ts +29 -74
  422. package/src/node/messaging/messaging-service.ts +4 -31
  423. package/src/node/messaging/test/test-web-socket-channel.ts +26 -17
  424. package/src/node/request/proxy-cli-contribution.ts +1 -1
  425. package/lib/browser/preferences/validated-preference-proxy.d.ts +0 -21
  426. package/lib/browser/preferences/validated-preference-proxy.d.ts.map +0 -1
  427. package/lib/browser/preferences/validated-preference-proxy.js +0 -118
  428. package/lib/browser/preferences/validated-preference-proxy.js.map +0 -1
  429. package/lib/node/messaging/logger.d.ts +0 -8
  430. package/lib/node/messaging/logger.d.ts.map +0 -1
  431. package/lib/node/messaging/logger.js.map +0 -1
  432. package/shared/vscode-ws-jsonrpc/index.d.ts +0 -1
  433. package/shared/vscode-ws-jsonrpc/index.js +0 -1
  434. package/src/browser/preferences/validated-preference-proxy.ts +0 -111
  435. package/src/browser/style/variables-bright.useable.css +0 -93
  436. package/src/browser/style/variables-dark.useable.css +0 -93
@@ -16,10 +16,12 @@
16
16
 
17
17
  /* eslint-disable @typescript-eslint/no-explicit-any */
18
18
 
19
- import { MessageConnection, ResponseError } from 'vscode-ws-jsonrpc';
19
+ import { ResponseError } from '../message-rpc/rpc-message-encoder';
20
20
  import { ApplicationError } from '../application-error';
21
- import { Event, Emitter } from '../event';
22
21
  import { Disposable } from '../disposable';
22
+ import { Emitter, Event } from '../event';
23
+ import { Channel } from '../message-rpc/channel';
24
+ import { RequestHandler, RpcProtocol } from '../message-rpc/rpc-protocol';
23
25
  import { ConnectionHandler } from './handler';
24
26
 
25
27
  export type JsonRpcServer<Client> = Disposable & {
@@ -45,13 +47,19 @@ export class JsonRpcConnectionHandler<T extends object> implements ConnectionHan
45
47
  readonly factoryConstructor: new () => JsonRpcProxyFactory<T> = JsonRpcProxyFactory
46
48
  ) { }
47
49
 
48
- onConnection(connection: MessageConnection): void {
50
+ onConnection(connection: Channel): void {
49
51
  const factory = new this.factoryConstructor();
50
52
  const proxy = factory.createProxy();
51
53
  factory.target = this.targetFactory(proxy);
52
54
  factory.listen(connection);
53
55
  }
54
56
  }
57
+ /**
58
+ * Factory for creating a new {@link RpcConnection} for a given chanel and {@link RequestHandler}.
59
+ */
60
+ export type RpcConnectionFactory = (channel: Channel, requestHandler: RequestHandler) => RpcProtocol;
61
+
62
+ const defaultRPCConnectionFactory: RpcConnectionFactory = (channel, requestHandler) => new RpcProtocol(channel, requestHandler);
55
63
 
56
64
  /**
57
65
  * Factory for JSON-RPC proxy objects.
@@ -95,13 +103,14 @@ export class JsonRpcConnectionHandler<T extends object> implements ConnectionHan
95
103
  *
96
104
  * @param <T> - The type of the object to expose to JSON-RPC.
97
105
  */
106
+
98
107
  export class JsonRpcProxyFactory<T extends object> implements ProxyHandler<T> {
99
108
 
100
109
  protected readonly onDidOpenConnectionEmitter = new Emitter<void>();
101
110
  protected readonly onDidCloseConnectionEmitter = new Emitter<void>();
102
111
 
103
- protected connectionPromiseResolve: (connection: MessageConnection) => void;
104
- protected connectionPromise: Promise<MessageConnection>;
112
+ protected connectionPromiseResolve: (connection: RpcProtocol) => void;
113
+ protected connectionPromise: Promise<RpcProtocol>;
105
114
 
106
115
  /**
107
116
  * Build a new JsonRpcProxyFactory.
@@ -109,7 +118,7 @@ export class JsonRpcProxyFactory<T extends object> implements ProxyHandler<T> {
109
118
  * @param target - The object to expose to JSON-RPC methods calls. If this
110
119
  * is omitted, the proxy won't be able to handle requests, only send them.
111
120
  */
112
- constructor(public target?: any) {
121
+ constructor(public target?: any, protected rpcConnectionFactory = defaultRPCConnectionFactory) {
113
122
  this.waitForConnection();
114
123
  }
115
124
 
@@ -118,9 +127,11 @@ export class JsonRpcProxyFactory<T extends object> implements ProxyHandler<T> {
118
127
  this.connectionPromiseResolve = resolve
119
128
  );
120
129
  this.connectionPromise.then(connection => {
121
- connection.onClose(() =>
122
- this.onDidCloseConnectionEmitter.fire(undefined)
123
- );
130
+ connection.channel.onClose(() => {
131
+ this.onDidCloseConnectionEmitter.fire(undefined);
132
+ // Wait for connection in case the backend reconnects
133
+ this.waitForConnection();
134
+ });
124
135
  this.onDidOpenConnectionEmitter.fire(undefined);
125
136
  });
126
137
  }
@@ -131,11 +142,10 @@ export class JsonRpcProxyFactory<T extends object> implements ProxyHandler<T> {
131
142
  * This connection will be used to send/receive JSON-RPC requests and
132
143
  * response.
133
144
  */
134
- listen(connection: MessageConnection): void {
135
- connection.onRequest((prop, ...args) => this.onRequest(prop, ...args));
136
- connection.onNotification((prop, ...args) => this.onNotification(prop, ...args));
137
- connection.onDispose(() => this.waitForConnection());
138
- connection.listen();
145
+ listen(channel: Channel): void {
146
+ const connection = this.rpcConnectionFactory(channel, (meth, args) => this.onRequest(meth, ...args));
147
+ connection.onNotification(event => this.onNotification(event.method, ...event.args));
148
+
139
149
  this.connectionPromiseResolve(connection);
140
150
  }
141
151
 
@@ -239,10 +249,10 @@ export class JsonRpcProxyFactory<T extends object> implements ProxyHandler<T> {
239
249
  new Promise<void>((resolve, reject) => {
240
250
  try {
241
251
  if (isNotify) {
242
- connection.sendNotification(method, ...args);
252
+ connection.sendNotification(method, args);
243
253
  resolve(undefined);
244
254
  } else {
245
- const resultPromise = connection.sendRequest(method, ...args) as Promise<any>;
255
+ const resultPromise = connection.sendRequest(method, args) as Promise<any>;
246
256
  resultPromise
247
257
  .catch((err: any) => reject(this.deserializeError(capturedError, err)))
248
258
  .then((result: any) => resolve(result));
@@ -293,3 +303,4 @@ export class JsonRpcProxyFactory<T extends object> implements ProxyHandler<T> {
293
303
  }
294
304
 
295
305
  }
306
+
@@ -16,157 +16,101 @@
16
16
 
17
17
  /* eslint-disable @typescript-eslint/no-explicit-any */
18
18
 
19
- import { IWebSocket } from 'vscode-ws-jsonrpc/lib/socket/socket';
20
- import { Disposable, DisposableCollection } from '../disposable';
21
- import { Emitter } from '../event';
22
-
23
- export class WebSocketChannel implements IWebSocket {
24
-
19
+ import { Emitter, Event } from '../event';
20
+ import { WriteBuffer } from '../message-rpc';
21
+ import { Uint8ArrayReadBuffer, Uint8ArrayWriteBuffer } from '../message-rpc/uint8-array-message-buffer';
22
+ import { Channel, MessageProvider, ChannelCloseEvent } from '../message-rpc/channel';
23
+ import { DisposableCollection } from '../disposable';
24
+
25
+ /**
26
+ * A channel that manages the main websocket connection between frontend and backend. All service channels
27
+ * are reusing this main channel. (multiplexing). An {@link IWebSocket} abstraction is used to keep the implementation
28
+ * independent of the actual websocket implementation and its execution context (backend vs. frontend).
29
+ */
30
+ export class WebSocketChannel implements Channel {
25
31
  static wsPath = '/services';
26
32
 
27
- protected readonly closeEmitter = new Emitter<[number, string]>();
28
- protected readonly toDispose = new DisposableCollection(this.closeEmitter);
29
-
30
- constructor(
31
- readonly id: number,
32
- protected readonly doSend: (content: string) => void
33
- ) { }
34
-
35
- dispose(): void {
36
- this.toDispose.dispose();
37
- }
38
-
39
- protected checkNotDisposed(): void {
40
- if (this.toDispose.disposed) {
41
- throw new Error('The channel has been disposed.');
42
- }
33
+ protected readonly onCloseEmitter: Emitter<ChannelCloseEvent> = new Emitter();
34
+ get onClose(): Event<ChannelCloseEvent> {
35
+ return this.onCloseEmitter.event;
43
36
  }
44
37
 
45
- handleMessage(message: WebSocketChannel.Message): void {
46
- if (message.kind === 'ready') {
47
- this.fireOpen();
48
- } else if (message.kind === 'data') {
49
- this.fireMessage(message.content);
50
- } else if (message.kind === 'close') {
51
- this.fireClose(message.code, message.reason);
52
- }
38
+ protected readonly onMessageEmitter: Emitter<MessageProvider> = new Emitter();
39
+ get onMessage(): Event<MessageProvider> {
40
+ return this.onMessageEmitter.event;
53
41
  }
54
42
 
55
- open(path: string): void {
56
- this.checkNotDisposed();
57
- this.doSend(JSON.stringify(<WebSocketChannel.OpenMessage>{
58
- kind: 'open',
59
- id: this.id,
60
- path
61
- }));
43
+ protected readonly onErrorEmitter: Emitter<unknown> = new Emitter();
44
+ get onError(): Event<unknown> {
45
+ return this.onErrorEmitter.event;
62
46
  }
63
47
 
64
- ready(): void {
65
- this.checkNotDisposed();
66
- this.doSend(JSON.stringify(<WebSocketChannel.ReadyMessage>{
67
- kind: 'ready',
68
- id: this.id
69
- }));
70
- }
48
+ protected toDispose = new DisposableCollection();
71
49
 
72
- send(content: string): void {
73
- this.checkNotDisposed();
74
- this.doSend(JSON.stringify(<WebSocketChannel.DataMessage>{
75
- kind: 'data',
76
- id: this.id,
77
- content
50
+ constructor(protected readonly socket: IWebSocket) {
51
+ this.toDispose.pushAll([this.onCloseEmitter, this.onMessageEmitter, this.onErrorEmitter]);
52
+ socket.onClose((reason, code) => this.onCloseEmitter.fire({ reason, code }));
53
+ socket.onClose(() => this.close());
54
+ socket.onError(error => this.onErrorEmitter.fire(error));
55
+ // eslint-disable-next-line arrow-body-style
56
+ socket.onMessage(data => this.onMessageEmitter.fire(() => {
57
+ // In the browser context socketIO receives binary messages as ArrayBuffers.
58
+ // So we have to convert them to a Uint8Array before delegating the message to the read buffer.
59
+ const buffer = data instanceof ArrayBuffer ? new Uint8Array(data) : data;
60
+ return new Uint8ArrayReadBuffer(buffer);
78
61
  }));
79
62
  }
80
63
 
81
- close(code: number = 1000, reason: string = ''): void {
82
- if (this.closing) {
83
- // Do not try to close the channel if it is already closing.
84
- return;
85
- }
86
- this.checkNotDisposed();
87
- this.doSend(JSON.stringify(<WebSocketChannel.CloseMessage>{
88
- kind: 'close',
89
- id: this.id,
90
- code,
91
- reason
92
- }));
93
- this.fireClose(code, reason);
94
- }
64
+ getWriteBuffer(): WriteBuffer {
65
+ const result = new Uint8ArrayWriteBuffer();
95
66
 
96
- tryClose(code: number = 1000, reason: string = ''): void {
97
- if (this.closing || this.toDispose.disposed) {
98
- // Do not try to close the channel if it is already closing or disposed.
99
- return;
100
- }
101
- this.doSend(JSON.stringify(<WebSocketChannel.CloseMessage>{
102
- kind: 'close',
103
- id: this.id,
104
- code,
105
- reason
106
- }));
107
- this.fireClose(code, reason);
108
- }
67
+ result.onCommit(buffer => {
68
+ if (this.socket.isConnected()) {
69
+ this.socket.send(buffer);
70
+ }
71
+ });
109
72
 
110
- protected fireOpen: () => void = () => { };
111
- onOpen(cb: () => void): void {
112
- this.checkNotDisposed();
113
- this.fireOpen = cb;
114
- this.toDispose.push(Disposable.create(() => this.fireOpen = () => { }));
73
+ return result;
115
74
  }
116
75
 
117
- protected fireMessage: (data: any) => void = () => { };
118
- onMessage(cb: (data: any) => void): void {
119
- this.checkNotDisposed();
120
- this.fireMessage = cb;
121
- this.toDispose.push(Disposable.create(() => this.fireMessage = () => { }));
122
- }
123
-
124
- fireError: (reason: any) => void = () => { };
125
- onError(cb: (reason: any) => void): void {
126
- this.checkNotDisposed();
127
- this.fireError = cb;
128
- this.toDispose.push(Disposable.create(() => this.fireError = () => { }));
129
- }
130
-
131
- protected closing = false;
132
- protected fireClose(code: number, reason: string): void {
133
- if (this.closing) {
134
- return;
135
- }
136
- this.closing = true;
137
- try {
138
- this.closeEmitter.fire([code, reason]);
139
- } finally {
140
- this.closing = false;
141
- }
142
- this.dispose();
143
- }
144
- onClose(cb: (code: number, reason: string) => void): Disposable {
145
- this.checkNotDisposed();
146
- return this.closeEmitter.event(([code, reason]) => cb(code, reason));
76
+ close(): void {
77
+ this.toDispose.dispose();
78
+ this.socket.close();
147
79
  }
148
-
149
80
  }
150
- export namespace WebSocketChannel {
151
- export interface OpenMessage {
152
- kind: 'open'
153
- id: number
154
- path: string
155
- }
156
- export interface ReadyMessage {
157
- kind: 'ready'
158
- id: number
159
- }
160
- export interface DataMessage {
161
- kind: 'data'
162
- id: number
163
- content: string
164
- }
165
- export interface CloseMessage {
166
- kind: 'close'
167
- id: number
168
- code: number
169
- reason: string
170
- }
171
- export type Message = OpenMessage | ReadyMessage | DataMessage | CloseMessage;
81
+
82
+ /**
83
+ * An abstraction that enables reuse of the `{@link WebSocketChannel} class in the frontend and backend
84
+ * independent of the actual underlying socket implementation.
85
+ */
86
+ export interface IWebSocket {
87
+ /**
88
+ * Sends the given message over the web socket in binary format.
89
+ * @param message The binary message.
90
+ */
91
+ send(message: Uint8Array): void;
92
+ /**
93
+ * Closes the websocket from the local side.
94
+ */
95
+ close(): void;
96
+ /**
97
+ * The connection state of the web socket.
98
+ */
99
+ isConnected(): boolean;
100
+ /**
101
+ * Listener callback to handle incoming messages.
102
+ * @param cb The callback.
103
+ */
104
+ onMessage(cb: (message: Uint8Array) => void): void;
105
+ /**
106
+ * Listener callback to handle socket errors.
107
+ * @param cb The callback.
108
+ */
109
+ onError(cb: (reason: any) => void): void;
110
+ /**
111
+ * Listener callback to handle close events (Remote side).
112
+ * @param cb The callback.
113
+ */
114
+ onClose(cb: (reason: string, code?: number) => void): void;
172
115
  }
116
+
package/src/common/nls.ts CHANGED
@@ -55,6 +55,17 @@ export namespace nls {
55
55
  export function localize(key: string, defaultValue: string, ...args: FormatType[]): string {
56
56
  return Localization.localize(localization, key, defaultValue, ...args);
57
57
  }
58
+
59
+ export function isSelectedLocale(id: string): boolean {
60
+ if (locale === undefined && id === 'en') {
61
+ return true;
62
+ }
63
+ return locale === id;
64
+ }
65
+
66
+ export function setLocale(id: string): void {
67
+ window.localStorage.setItem(localeId, id);
68
+ }
58
69
  }
59
70
 
60
71
  interface NlsKeys {
@@ -17,14 +17,9 @@
17
17
  /* eslint-disable @typescript-eslint/no-explicit-any */
18
18
 
19
19
  import { JSONValue } from '@phosphor/coreutils';
20
- import { IJSONSchema, JsonType } from '../json-schema';
20
+ import { IJSONSchema } from '../json-schema';
21
21
  import { PreferenceScope } from './preference-scope';
22
22
 
23
- /**
24
- * @deprecated since 1.22.0. Import from @theia/core/common/json-schema.ts instead.
25
- */
26
- export { JsonType };
27
-
28
23
  export interface PreferenceSchema {
29
24
  [name: string]: any,
30
25
  scope?: 'application' | 'window' | 'resource' | PreferenceScope,
@@ -25,22 +25,21 @@ import { CancellationToken, CancellationError, cancelled } from './cancellation'
25
25
  export class Deferred<T = void> {
26
26
  state: 'resolved' | 'rejected' | 'unresolved' = 'unresolved';
27
27
  resolve: (value: T | PromiseLike<T>) => void;
28
- reject: (err?: any) => void; // eslint-disable-line @typescript-eslint/no-explicit-any
28
+ reject: (err?: unknown) => void;
29
29
 
30
30
  promise = new Promise<T>((resolve, reject) => {
31
- this.resolve = result => {
32
- resolve(result);
33
- if (this.state === 'unresolved') {
34
- this.state = 'resolved';
35
- }
36
- };
37
- this.reject = err => {
38
- reject(err);
39
- if (this.state === 'unresolved') {
40
- this.state = 'rejected';
41
- }
42
- };
43
- });
31
+ this.resolve = resolve;
32
+ this.reject = reject;
33
+ }).then(
34
+ res => (this.setState('resolved'), res),
35
+ err => (this.setState('rejected'), Promise.reject(err)),
36
+ );
37
+
38
+ protected setState(state: 'resolved' | 'rejected'): void {
39
+ if (this.state === 'unresolved') {
40
+ this.state = state;
41
+ }
42
+ }
44
43
  }
45
44
 
46
45
  /**
@@ -327,6 +327,14 @@ export class UntitledResourceResolver implements ResourceResolver {
327
327
 
328
328
  protected readonly resources = new Map<string, UntitledResource>();
329
329
 
330
+ has(uri: URI): boolean {
331
+ if (uri.scheme !== UNTITLED_SCHEME) {
332
+ throw new Error('The given uri is not untitled file uri: ' + uri);
333
+ } else {
334
+ return this.resources.has(uri.toString());
335
+ }
336
+ }
337
+
330
338
  async resolve(uri: URI): Promise<UntitledResource> {
331
339
  if (uri.scheme !== UNTITLED_SCHEME) {
332
340
  throw new Error('The given uri is not untitled file uri: ' + uri);
@@ -341,8 +349,24 @@ export class UntitledResourceResolver implements ResourceResolver {
341
349
  }
342
350
 
343
351
  async createUntitledResource(content?: string, extension?: string, uri?: URI): Promise<UntitledResource> {
344
- return new UntitledResource(this.resources, uri ? uri : new URI().withScheme(UNTITLED_SCHEME).withPath(`/Untitled-${untitledResourceSequenceIndex++}${extension ?? ''}`),
345
- content);
352
+ if (!uri) {
353
+ uri = this.createUntitledURI(extension);
354
+ }
355
+ return new UntitledResource(this.resources, uri, content);
356
+ }
357
+
358
+ createUntitledURI(extension?: string, parent?: URI): URI {
359
+ let counter = 1; // vscode starts at 1
360
+ let untitledUri;
361
+ do {
362
+ const name = `Untitled-${counter}${extension ?? ''}`;
363
+ if (parent) {
364
+ untitledUri = parent.resolve(name).withScheme(UNTITLED_SCHEME);
365
+ }
366
+ untitledUri = new URI().resolve(name).withScheme(UNTITLED_SCHEME);
367
+ counter++;
368
+ } while (this.has(untitledUri));
369
+ return untitledUri;
346
370
  }
347
371
  }
348
372
 
@@ -389,6 +413,9 @@ export class UntitledResource implements Resource {
389
413
  }
390
414
  }
391
415
 
416
+ /**
417
+ * @deprecated Since 1.27.0. Please use `UntitledResourceResolver.createUntitledURI` instead.
418
+ */
392
419
  export function createUntitledURI(extension?: string, parent?: URI): URI {
393
420
  const name = `Untitled-${untitledResourceSequenceIndex++}${extension ?? ''}`;
394
421
  if (parent) {
@@ -22,8 +22,12 @@ export interface Theme {
22
22
  readonly label: string;
23
23
  readonly description?: string;
24
24
  readonly editorTheme?: string;
25
- activate(): void;
26
- deactivate(): void;
25
+ activate?(): void;
26
+ deactivate?(): void;
27
+ }
28
+
29
+ export function isHighContrast(scheme: ThemeType): boolean {
30
+ return scheme === 'hc';
27
31
  }
28
32
 
29
33
  export interface ThemeChangeEvent {
@@ -17,9 +17,11 @@
17
17
  import { Event as ElectronEvent, ipcRenderer } from '@theia/electron/shared/electron';
18
18
  import { injectable, interfaces } from 'inversify';
19
19
  import { JsonRpcProxy } from '../../common/messaging';
20
- import { WebSocketChannel } from '../../common/messaging/web-socket-channel';
21
20
  import { AbstractConnectionProvider } from '../../common/messaging/abstract-connection-provider';
22
21
  import { THEIA_ELECTRON_IPC_CHANNEL_NAME } from '../../electron-common/messaging/electron-connection-handler';
22
+ import { Emitter, Event } from '../../common';
23
+ import { Uint8ArrayReadBuffer, Uint8ArrayWriteBuffer } from '../../common/message-rpc/uint8-array-message-buffer';
24
+ import { Channel, MessageProvider } from '../../common/message-rpc/channel';
23
25
 
24
26
  export interface ElectronIpcOptions {
25
27
  }
@@ -36,15 +38,27 @@ export class ElectronIpcConnectionProvider extends AbstractConnectionProvider<El
36
38
 
37
39
  constructor() {
38
40
  super();
39
- ipcRenderer.on(THEIA_ELECTRON_IPC_CHANNEL_NAME, (event: ElectronEvent, data: string) => {
40
- this.handleIncomingRawMessage(data);
41
- });
41
+ this.initializeMultiplexer();
42
42
  }
43
43
 
44
- protected createChannel(id: number): WebSocketChannel {
45
- return new WebSocketChannel(id, content => {
46
- ipcRenderer.send(THEIA_ELECTRON_IPC_CHANNEL_NAME, content);
44
+ protected createMainChannel(): Channel {
45
+ const onMessageEmitter = new Emitter<MessageProvider>();
46
+ ipcRenderer.on(THEIA_ELECTRON_IPC_CHANNEL_NAME, (_event: ElectronEvent, data: Uint8Array) => {
47
+ onMessageEmitter.fire(() => new Uint8ArrayReadBuffer(data));
47
48
  });
49
+ return {
50
+ close: () => Event.None,
51
+ getWriteBuffer: () => {
52
+ const writer = new Uint8ArrayWriteBuffer();
53
+ writer.onCommit(buffer =>
54
+ ipcRenderer.send(THEIA_ELECTRON_IPC_CHANNEL_NAME, buffer)
55
+ );
56
+ return writer;
57
+ },
58
+ onClose: Event.None,
59
+ onError: Event.None,
60
+ onMessage: onMessageEmitter.event
61
+ };
48
62
  }
49
63
 
50
64
  }
@@ -15,9 +15,9 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { injectable } from 'inversify';
18
- import { WebSocketChannel } from '../../common/messaging/web-socket-channel';
19
18
  import { WebSocketConnectionProvider, WebSocketOptions } from '../../browser/messaging/ws-connection-provider';
20
19
  import { FrontendApplicationContribution } from '../../browser/frontend-application';
20
+ import { Channel } from '../../common';
21
21
 
22
22
  /**
23
23
  * Customized connection provider between the frontend and the backend in electron environment.
@@ -34,16 +34,13 @@ export class ElectronWebSocketConnectionProvider extends WebSocketConnectionProv
34
34
 
35
35
  onStop(): void {
36
36
  this.stopping = true;
37
- // Close the websocket connection `onStop`. Otherwise, the channels will be closed with 30 sec (`MessagingContribution#checkAliveTimeout`) delay.
37
+ // Manually close the websocket connections `onStop`. Otherwise, the channels will be closed with 30 sec (`MessagingContribution#checkAliveTimeout`) delay.
38
38
  // https://github.com/eclipse-theia/theia/issues/6499
39
- for (const channel of [...this.channels.values()]) {
40
- // `1001` indicates that an endpoint is "going away", such as a server going down or a browser having navigated away from a page.
41
- // But we cannot use `1001`: https://github.com/TypeFox/vscode-ws-jsonrpc/issues/15
42
- channel.close(1000, 'The frontend is "going away"...');
43
- }
39
+ // `1001` indicates that an endpoint is "going away", such as a server going down or a browser having navigated away from a page.
40
+ this.channelMultiPlexer?.onUnderlyingChannelClose({ reason: 'The frontend is "going away"', code: 1001 });
44
41
  }
45
42
 
46
- override openChannel(path: string, handler: (channel: WebSocketChannel) => void, options?: WebSocketOptions): void {
43
+ override async openChannel(path: string, handler: (channel: Channel) => void, options?: WebSocketOptions): Promise<void> {
47
44
  if (!this.stopping) {
48
45
  super.openChannel(path, handler, options);
49
46
  }