@theia/core 1.22.1 → 1.23.0-next.26

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 (603) hide show
  1. package/README.md +5 -5
  2. package/lib/browser/about-dialog.js +5 -5
  3. package/lib/browser/about-dialog.js.map +1 -1
  4. package/lib/browser/authentication-service.d.ts +52 -22
  5. package/lib/browser/authentication-service.d.ts.map +1 -1
  6. package/lib/browser/authentication-service.js +49 -44
  7. package/lib/browser/authentication-service.js.map +1 -1
  8. package/lib/browser/breadcrumbs/breadcrumb-popup-container.js +5 -5
  9. package/lib/browser/breadcrumbs/breadcrumb-popup-container.js.map +1 -1
  10. package/lib/browser/breadcrumbs/breadcrumb-renderer.js +1 -1
  11. package/lib/browser/breadcrumbs/breadcrumb-renderer.js.map +1 -1
  12. package/lib/browser/breadcrumbs/breadcrumbs-renderer.d.ts.map +1 -1
  13. package/lib/browser/breadcrumbs/breadcrumbs-renderer.js +6 -6
  14. package/lib/browser/breadcrumbs/breadcrumbs-renderer.js.map +1 -1
  15. package/lib/browser/breadcrumbs/breadcrumbs-service.js +5 -5
  16. package/lib/browser/breadcrumbs/breadcrumbs-service.js.map +1 -1
  17. package/lib/browser/breadcrumbs/index.js +1 -1
  18. package/lib/browser/browser-clipboard-service.js +3 -3
  19. package/lib/browser/browser-clipboard-service.js.map +1 -1
  20. package/lib/browser/color-application-contribution.js +4 -4
  21. package/lib/browser/color-application-contribution.js.map +1 -1
  22. package/lib/browser/color-registry.js +2 -2
  23. package/lib/browser/color-registry.js.map +1 -1
  24. package/lib/browser/command-open-handler.js +2 -2
  25. package/lib/browser/command-open-handler.js.map +1 -1
  26. package/lib/browser/common-frontend-contribution.js +24 -24
  27. package/lib/browser/common-frontend-contribution.js.map +1 -1
  28. package/lib/browser/connection-status-service.js +15 -13
  29. package/lib/browser/connection-status-service.js.map +1 -1
  30. package/lib/browser/connection-status-service.spec.js +18 -18
  31. package/lib/browser/connection-status-service.spec.js.map +1 -1
  32. package/lib/browser/context-key-service.js +1 -1
  33. package/lib/browser/context-key-service.js.map +1 -1
  34. package/lib/browser/context-menu-renderer.js +1 -1
  35. package/lib/browser/context-menu-renderer.js.map +1 -1
  36. package/lib/browser/core-preferences.js +1 -1
  37. package/lib/browser/core-preferences.js.map +1 -1
  38. package/lib/browser/credentials-service.js +2 -2
  39. package/lib/browser/credentials-service.js.map +1 -1
  40. package/lib/browser/decorations-service.js +1 -1
  41. package/lib/browser/decorations-service.js.map +1 -1
  42. package/lib/browser/dialogs/react-dialog.js +2 -2
  43. package/lib/browser/dialogs/react-dialog.js.map +1 -1
  44. package/lib/browser/dialogs.js +11 -11
  45. package/lib/browser/dialogs.js.map +1 -1
  46. package/lib/browser/diff-uris.js +3 -3
  47. package/lib/browser/diff-uris.js.map +1 -1
  48. package/lib/browser/encoding-registry.js +3 -3
  49. package/lib/browser/encoding-registry.js.map +1 -1
  50. package/lib/browser/external-uri-service.js +1 -1
  51. package/lib/browser/external-uri-service.js.map +1 -1
  52. package/lib/browser/frontend-application-bindings.js +2 -2
  53. package/lib/browser/frontend-application-bindings.js.map +1 -1
  54. package/lib/browser/frontend-application-config-provider.js +1 -1
  55. package/lib/browser/frontend-application-config-provider.js.map +1 -1
  56. package/lib/browser/frontend-application-config-provider.spec.js +7 -7
  57. package/lib/browser/frontend-application-config-provider.spec.js.map +1 -1
  58. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  59. package/lib/browser/frontend-application-module.js +23 -20
  60. package/lib/browser/frontend-application-module.js.map +1 -1
  61. package/lib/browser/frontend-application-state.js +2 -2
  62. package/lib/browser/frontend-application-state.js.map +1 -1
  63. package/lib/browser/frontend-application.d.ts +4 -2
  64. package/lib/browser/frontend-application.d.ts.map +1 -1
  65. package/lib/browser/frontend-application.js +30 -36
  66. package/lib/browser/frontend-application.js.map +1 -1
  67. package/lib/browser/http-open-handler.js +3 -3
  68. package/lib/browser/http-open-handler.js.map +1 -1
  69. package/lib/browser/icon-theme-contribution.js +5 -5
  70. package/lib/browser/icon-theme-contribution.js.map +1 -1
  71. package/lib/browser/icon-theme-service.js +4 -4
  72. package/lib/browser/icon-theme-service.js.map +1 -1
  73. package/lib/browser/index.js +1 -1
  74. package/lib/browser/json-schema-store.js +5 -5
  75. package/lib/browser/json-schema-store.js.map +1 -1
  76. package/lib/browser/keybinding.js +11 -11
  77. package/lib/browser/keybinding.js.map +1 -1
  78. package/lib/browser/keybinding.spec.js +9 -9
  79. package/lib/browser/keybinding.spec.js.map +1 -1
  80. package/lib/browser/keyboard/browser-keyboard-frontend-contribution.js +4 -4
  81. package/lib/browser/keyboard/browser-keyboard-frontend-contribution.js.map +1 -1
  82. package/lib/browser/keyboard/browser-keyboard-layout-provider.js +4 -4
  83. package/lib/browser/keyboard/browser-keyboard-layout-provider.js.map +1 -1
  84. package/lib/browser/keyboard/browser-keyboard-layout-provider.spec.js +3 -3
  85. package/lib/browser/keyboard/browser-keyboard-layout-provider.spec.js.map +1 -1
  86. package/lib/browser/keyboard/index.js +1 -1
  87. package/lib/browser/keyboard/keyboard-layout-service.js +5 -5
  88. package/lib/browser/keyboard/keyboard-layout-service.js.map +1 -1
  89. package/lib/browser/keyboard/keyboard-layout-service.spec.js +1 -1
  90. package/lib/browser/keyboard/keyboard-layout-service.spec.js.map +1 -1
  91. package/lib/browser/keyboard/keys.js +1 -1
  92. package/lib/browser/keyboard/keys.spec.js +2 -2
  93. package/lib/browser/keyboard/keys.spec.js.map +1 -1
  94. package/lib/browser/label-parser.js +1 -1
  95. package/lib/browser/label-parser.js.map +1 -1
  96. package/lib/browser/label-parser.spec.js +38 -38
  97. package/lib/browser/label-parser.spec.js.map +1 -1
  98. package/lib/browser/label-provider.js +8 -8
  99. package/lib/browser/label-provider.js.map +1 -1
  100. package/lib/browser/label-provider.spec.js +5 -5
  101. package/lib/browser/label-provider.spec.js.map +1 -1
  102. package/lib/browser/language-service.js +1 -1
  103. package/lib/browser/language-service.js.map +1 -1
  104. package/lib/browser/logger-frontend-module.js +1 -1
  105. package/lib/browser/logger-frontend-module.js.map +1 -1
  106. package/lib/browser/menu/browser-context-menu-renderer.js +3 -3
  107. package/lib/browser/menu/browser-context-menu-renderer.js.map +1 -1
  108. package/lib/browser/menu/browser-menu-plugin.js +13 -13
  109. package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
  110. package/lib/browser/menu/context-menu-context.js +1 -1
  111. package/lib/browser/menu/context-menu-context.js.map +1 -1
  112. package/lib/browser/messaging/index.js +1 -1
  113. package/lib/browser/messaging/ws-connection-provider.js +7 -7
  114. package/lib/browser/messaging/ws-connection-provider.js.map +1 -1
  115. package/lib/browser/mime-service.js +1 -1
  116. package/lib/browser/mime-service.js.map +1 -1
  117. package/lib/browser/navigatable.js +1 -1
  118. package/lib/browser/opener-service.js +3 -2
  119. package/lib/browser/opener-service.js.map +1 -1
  120. package/lib/browser/performance/frontend-stopwatch.d.ts +21 -0
  121. package/lib/browser/performance/frontend-stopwatch.d.ts.map +1 -0
  122. package/lib/browser/performance/frontend-stopwatch.js +71 -0
  123. package/lib/browser/performance/frontend-stopwatch.js.map +1 -0
  124. package/lib/browser/performance/index.d.ts +18 -0
  125. package/lib/browser/performance/index.d.ts.map +1 -0
  126. package/lib/browser/performance/index.js +30 -0
  127. package/lib/browser/performance/index.js.map +1 -0
  128. package/lib/browser/performance/measurement-frontend-bindings.d.ts +20 -0
  129. package/lib/browser/performance/measurement-frontend-bindings.d.ts.map +1 -0
  130. package/lib/browser/performance/measurement-frontend-bindings.js +33 -0
  131. package/lib/browser/performance/measurement-frontend-bindings.js.map +1 -0
  132. package/lib/browser/preferences/index.js +1 -1
  133. package/lib/browser/preferences/preference-configurations.js +4 -4
  134. package/lib/browser/preferences/preference-configurations.js.map +1 -1
  135. package/lib/browser/preferences/preference-contribution.js +8 -8
  136. package/lib/browser/preferences/preference-contribution.js.map +1 -1
  137. package/lib/browser/preferences/preference-language-override-service.d.ts +11 -0
  138. package/lib/browser/preferences/preference-language-override-service.d.ts.map +1 -1
  139. package/lib/browser/preferences/preference-language-override-service.js +21 -7
  140. package/lib/browser/preferences/preference-language-override-service.js.map +1 -1
  141. package/lib/browser/preferences/preference-provider.js +2 -2
  142. package/lib/browser/preferences/preference-provider.js.map +1 -1
  143. package/lib/browser/preferences/preference-proxy.spec.js +6 -6
  144. package/lib/browser/preferences/preference-proxy.spec.js.map +1 -1
  145. package/lib/browser/preferences/preference-schema-provider.spec.js +3 -3
  146. package/lib/browser/preferences/preference-schema-provider.spec.js.map +1 -1
  147. package/lib/browser/preferences/preference-service.js +8 -8
  148. package/lib/browser/preferences/preference-service.js.map +1 -1
  149. package/lib/browser/preferences/preference-service.spec.js +5 -5
  150. package/lib/browser/preferences/preference-service.spec.js.map +1 -1
  151. package/lib/browser/preferences/test/index.js +1 -1
  152. package/lib/browser/preferences/test/mock-preference-service.js +1 -1
  153. package/lib/browser/preferences/test/mock-preference-service.js.map +1 -1
  154. package/lib/browser/progress-bar.js +4 -4
  155. package/lib/browser/progress-bar.js.map +1 -1
  156. package/lib/browser/progress-client.js +3 -3
  157. package/lib/browser/progress-client.js.map +1 -1
  158. package/lib/browser/progress-location-service.js +1 -1
  159. package/lib/browser/progress-location-service.js.map +1 -1
  160. package/lib/browser/progress-location-service.spec.js +1 -1
  161. package/lib/browser/progress-location-service.spec.js.map +1 -1
  162. package/lib/browser/progress-status-bar-item.js +2 -2
  163. package/lib/browser/progress-status-bar-item.js.map +1 -1
  164. package/lib/browser/quick-input/index.js +1 -1
  165. package/lib/browser/quick-input/quick-command-frontend-contribution.js +5 -5
  166. package/lib/browser/quick-input/quick-command-frontend-contribution.js.map +1 -1
  167. package/lib/browser/quick-input/quick-command-service.js +9 -9
  168. package/lib/browser/quick-input/quick-command-service.js.map +1 -1
  169. package/lib/browser/quick-input/quick-help-service.js +3 -3
  170. package/lib/browser/quick-input/quick-help-service.js.map +1 -1
  171. package/lib/browser/quick-input/quick-input-frontend-contribution.js +3 -3
  172. package/lib/browser/quick-input/quick-input-frontend-contribution.js.map +1 -1
  173. package/lib/browser/quick-input/quick-input-service.js +1 -1
  174. package/lib/browser/quick-input/quick-input-service.spec.js +15 -15
  175. package/lib/browser/quick-input/quick-input-service.spec.js.map +1 -1
  176. package/lib/browser/quick-input/quick-pick-service-impl.d.ts.map +1 -1
  177. package/lib/browser/quick-input/quick-pick-service-impl.js +3 -3
  178. package/lib/browser/quick-input/quick-pick-service-impl.js.map +1 -1
  179. package/lib/browser/quick-input/quick-view-service.js +4 -4
  180. package/lib/browser/quick-input/quick-view-service.js.map +1 -1
  181. package/lib/browser/resource-context-key.js +4 -4
  182. package/lib/browser/resource-context-key.js.map +1 -1
  183. package/lib/browser/saveable.d.ts +17 -2
  184. package/lib/browser/saveable.d.ts.map +1 -1
  185. package/lib/browser/saveable.js +71 -24
  186. package/lib/browser/saveable.js.map +1 -1
  187. package/lib/browser/shell/application-shell-mouse-tracker.js +5 -5
  188. package/lib/browser/shell/application-shell-mouse-tracker.js.map +1 -1
  189. package/lib/browser/shell/application-shell.d.ts +16 -1
  190. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  191. package/lib/browser/shell/application-shell.js +76 -64
  192. package/lib/browser/shell/application-shell.js.map +1 -1
  193. package/lib/browser/shell/current-widget-command-adapter.js.map +1 -1
  194. package/lib/browser/shell/index.js +1 -1
  195. package/lib/browser/shell/shell-layout-restorer.js +7 -7
  196. package/lib/browser/shell/shell-layout-restorer.js.map +1 -1
  197. package/lib/browser/shell/side-panel-handler.d.ts +1 -0
  198. package/lib/browser/shell/side-panel-handler.d.ts.map +1 -1
  199. package/lib/browser/shell/side-panel-handler.js +26 -14
  200. package/lib/browser/shell/side-panel-handler.js.map +1 -1
  201. package/lib/browser/shell/side-panel-toolbar.js.map +1 -1
  202. package/lib/browser/shell/sidebar-bottom-menu-widget.js +1 -1
  203. package/lib/browser/shell/sidebar-bottom-menu-widget.js.map +1 -1
  204. package/lib/browser/shell/sidebar-menu-widget.js +2 -2
  205. package/lib/browser/shell/sidebar-menu-widget.js.map +1 -1
  206. package/lib/browser/shell/sidebar-top-menu-widget.js +1 -1
  207. package/lib/browser/shell/sidebar-top-menu-widget.js.map +1 -1
  208. package/lib/browser/shell/split-panels.js +1 -1
  209. package/lib/browser/shell/split-panels.js.map +1 -1
  210. package/lib/browser/shell/tab-bar-decorator.js +3 -3
  211. package/lib/browser/shell/tab-bar-decorator.js.map +1 -1
  212. package/lib/browser/shell/tab-bar-toolbar.d.ts.map +1 -1
  213. package/lib/browser/shell/tab-bar-toolbar.js +12 -12
  214. package/lib/browser/shell/tab-bar-toolbar.js.map +1 -1
  215. package/lib/browser/shell/tab-bar-toolbar.spec.js +14 -14
  216. package/lib/browser/shell/tab-bar-toolbar.spec.js.map +1 -1
  217. package/lib/browser/shell/tab-bars.d.ts.map +1 -1
  218. package/lib/browser/shell/tab-bars.js +1 -0
  219. package/lib/browser/shell/tab-bars.js.map +1 -1
  220. package/lib/browser/shell/tab-bars.spec.js +9 -9
  221. package/lib/browser/shell/tab-bars.spec.js.map +1 -1
  222. package/lib/browser/shell/theia-dock-panel.d.ts +3 -2
  223. package/lib/browser/shell/theia-dock-panel.d.ts.map +1 -1
  224. package/lib/browser/shell/theia-dock-panel.js +4 -4
  225. package/lib/browser/shell/theia-dock-panel.js.map +1 -1
  226. package/lib/browser/shell/view-contribution.js +5 -5
  227. package/lib/browser/shell/view-contribution.js.map +1 -1
  228. package/lib/browser/source-tree/index.js +1 -1
  229. package/lib/browser/source-tree/source-tree-widget.d.ts.map +1 -1
  230. package/lib/browser/source-tree/source-tree-widget.js +7 -8
  231. package/lib/browser/source-tree/source-tree-widget.js.map +1 -1
  232. package/lib/browser/source-tree/source-tree.d.ts.map +1 -1
  233. package/lib/browser/source-tree/source-tree.js +2 -1
  234. package/lib/browser/source-tree/source-tree.js.map +1 -1
  235. package/lib/browser/source-tree/tree-source.js +2 -2
  236. package/lib/browser/source-tree/tree-source.js.map +1 -1
  237. package/lib/browser/status-bar/index.js +1 -1
  238. package/lib/browser/status-bar/status-bar.js +6 -6
  239. package/lib/browser/status-bar/status-bar.js.map +1 -1
  240. package/lib/browser/storage-service.js +5 -5
  241. package/lib/browser/storage-service.js.map +1 -1
  242. package/lib/browser/storage-service.spec.js +4 -4
  243. package/lib/browser/storage-service.spec.js.map +1 -1
  244. package/lib/browser/test/mock-opener-service.js +1 -1
  245. package/lib/browser/test/mock-opener-service.js.map +1 -1
  246. package/lib/browser/test/mock-storage-service.js +1 -1
  247. package/lib/browser/test/mock-storage-service.js.map +1 -1
  248. package/lib/browser/theming.js +1 -1
  249. package/lib/browser/tooltip-service.js +6 -5
  250. package/lib/browser/tooltip-service.js.map +1 -1
  251. package/lib/browser/tree/fuzzy-search.js +1 -1
  252. package/lib/browser/tree/fuzzy-search.js.map +1 -1
  253. package/lib/browser/tree/fuzzy-search.spec.js +2 -2
  254. package/lib/browser/tree/fuzzy-search.spec.js.map +1 -1
  255. package/lib/browser/tree/index.d.ts +1 -0
  256. package/lib/browser/tree/index.d.ts.map +1 -1
  257. package/lib/browser/tree/index.js +2 -1
  258. package/lib/browser/tree/index.js.map +1 -1
  259. package/lib/browser/tree/test/tree-test-container.js +1 -1
  260. package/lib/browser/tree/test/tree-test-container.js.map +1 -1
  261. package/lib/browser/tree/tree-compression/compressed-tree-expansion-service.d.ts +24 -0
  262. package/lib/browser/tree/tree-compression/compressed-tree-expansion-service.d.ts.map +1 -0
  263. package/lib/browser/tree/tree-compression/compressed-tree-expansion-service.js +68 -0
  264. package/lib/browser/tree/tree-compression/compressed-tree-expansion-service.js.map +1 -0
  265. package/lib/browser/tree/tree-compression/compressed-tree-model.d.ts +39 -0
  266. package/lib/browser/tree/tree-compression/compressed-tree-model.d.ts.map +1 -0
  267. package/lib/browser/tree/tree-compression/compressed-tree-model.js +96 -0
  268. package/lib/browser/tree/tree-compression/compressed-tree-model.js.map +1 -0
  269. package/lib/browser/tree/tree-compression/compressed-tree-widget.d.ts +55 -0
  270. package/lib/browser/tree/tree-compression/compressed-tree-widget.d.ts.map +1 -0
  271. package/lib/browser/tree/tree-compression/compressed-tree-widget.js +194 -0
  272. package/lib/browser/tree/tree-compression/compressed-tree-widget.js.map +1 -0
  273. package/lib/browser/tree/tree-compression/index.d.ts +20 -0
  274. package/lib/browser/tree/tree-compression/index.d.ts.map +1 -0
  275. package/lib/browser/tree/tree-compression/index.js +32 -0
  276. package/lib/browser/tree/tree-compression/index.js.map +1 -0
  277. package/lib/browser/tree/tree-compression/tree-compression-service.d.ts +73 -0
  278. package/lib/browser/tree/tree-compression/tree-compression-service.d.ts.map +1 -0
  279. package/lib/browser/tree/tree-compression/tree-compression-service.js +100 -0
  280. package/lib/browser/tree/tree-compression/tree-compression-service.js.map +1 -0
  281. package/lib/browser/tree/tree-consistency.spec.js +2 -2
  282. package/lib/browser/tree/tree-consistency.spec.js.map +1 -1
  283. package/lib/browser/tree/tree-container.d.ts +46 -1
  284. package/lib/browser/tree/tree-container.d.ts.map +1 -1
  285. package/lib/browser/tree/tree-container.js +67 -20
  286. package/lib/browser/tree/tree-container.js.map +1 -1
  287. package/lib/browser/tree/tree-decorator.js +2 -2
  288. package/lib/browser/tree/tree-decorator.js.map +1 -1
  289. package/lib/browser/tree/tree-decorator.spec.js +10 -10
  290. package/lib/browser/tree/tree-decorator.spec.js.map +1 -1
  291. package/lib/browser/tree/tree-expansion.d.ts +1 -1
  292. package/lib/browser/tree/tree-expansion.d.ts.map +1 -1
  293. package/lib/browser/tree/tree-expansion.js +3 -3
  294. package/lib/browser/tree/tree-expansion.js.map +1 -1
  295. package/lib/browser/tree/tree-expansion.spec.js +15 -15
  296. package/lib/browser/tree/tree-expansion.spec.js.map +1 -1
  297. package/lib/browser/tree/tree-iterator.spec.js +22 -22
  298. package/lib/browser/tree/tree-iterator.spec.js.map +1 -1
  299. package/lib/browser/tree/tree-label-provider.js +1 -1
  300. package/lib/browser/tree/tree-label-provider.js.map +1 -1
  301. package/lib/browser/tree/tree-model.d.ts +2 -1
  302. package/lib/browser/tree/tree-model.d.ts.map +1 -1
  303. package/lib/browser/tree/tree-model.js +20 -19
  304. package/lib/browser/tree/tree-model.js.map +1 -1
  305. package/lib/browser/tree/tree-navigation.js +1 -1
  306. package/lib/browser/tree/tree-navigation.js.map +1 -1
  307. package/lib/browser/tree/tree-search.js +5 -5
  308. package/lib/browser/tree/tree-search.js.map +1 -1
  309. package/lib/browser/tree/tree-selection-impl.js +3 -3
  310. package/lib/browser/tree/tree-selection-impl.js.map +1 -1
  311. package/lib/browser/tree/tree-selection-state.spec.js +6 -6
  312. package/lib/browser/tree/tree-selection-state.spec.js.map +1 -1
  313. package/lib/browser/tree/tree-view-welcome-widget.d.ts.map +1 -1
  314. package/lib/browser/tree/tree-view-welcome-widget.js +6 -6
  315. package/lib/browser/tree/tree-view-welcome-widget.js.map +1 -1
  316. package/lib/browser/tree/tree-widget.d.ts +6 -1
  317. package/lib/browser/tree/tree-widget.d.ts.map +1 -1
  318. package/lib/browser/tree/tree-widget.js +33 -20
  319. package/lib/browser/tree/tree-widget.js.map +1 -1
  320. package/lib/browser/tree/tree.d.ts +1 -1
  321. package/lib/browser/tree/tree.d.ts.map +1 -1
  322. package/lib/browser/tree/tree.js +3 -3
  323. package/lib/browser/tree/tree.js.map +1 -1
  324. package/lib/browser/tree/tree.spec.js +11 -11
  325. package/lib/browser/tree/tree.spec.js.map +1 -1
  326. package/lib/browser/view-container.d.ts +1 -1
  327. package/lib/browser/view-container.d.ts.map +1 -1
  328. package/lib/browser/view-container.js +60 -56
  329. package/lib/browser/view-container.js.map +1 -1
  330. package/lib/browser/widget-manager.js +4 -4
  331. package/lib/browser/widget-manager.js.map +1 -1
  332. package/lib/browser/widget-manager.spec.js +3 -3
  333. package/lib/browser/widget-manager.spec.js.map +1 -1
  334. package/lib/browser/widget-open-handler.d.ts.map +1 -1
  335. package/lib/browser/widget-open-handler.js +5 -6
  336. package/lib/browser/widget-open-handler.js.map +1 -1
  337. package/lib/browser/widgets/alert-message.js +4 -4
  338. package/lib/browser/widgets/alert-message.js.map +1 -1
  339. package/lib/browser/widgets/index.js +1 -1
  340. package/lib/browser/widgets/react-renderer.js +3 -2
  341. package/lib/browser/widgets/react-renderer.js.map +1 -1
  342. package/lib/browser/widgets/react-widget.js +2 -2
  343. package/lib/browser/widgets/react-widget.js.map +1 -1
  344. package/lib/browser/widgets/widget.js +4 -4
  345. package/lib/browser/widgets/widget.js.map +1 -1
  346. package/lib/browser/window/default-window-service.js +5 -5
  347. package/lib/browser/window/default-window-service.js.map +1 -1
  348. package/lib/browser/window/test/mock-window-service.js +1 -1
  349. package/lib/browser/window/test/mock-window-service.js.map +1 -1
  350. package/lib/browser/window-contribution.js +2 -2
  351. package/lib/browser/window-contribution.js.map +1 -1
  352. package/lib/common/command.js +3 -2
  353. package/lib/common/command.js.map +1 -1
  354. package/lib/common/contribution-filter/contribution-filter-registry.d.ts +1 -1
  355. package/lib/common/contribution-filter/contribution-filter-registry.d.ts.map +1 -1
  356. package/lib/common/contribution-filter/contribution-filter-registry.js +3 -2
  357. package/lib/common/contribution-filter/contribution-filter-registry.js.map +1 -1
  358. package/lib/common/contribution-filter/index.js +1 -1
  359. package/lib/common/encoding-service.js +2 -2
  360. package/lib/common/encoding-service.js.map +1 -1
  361. package/lib/common/env-variables/index.js +1 -1
  362. package/lib/common/event.js.map +1 -1
  363. package/lib/common/event.spec.js +2 -2
  364. package/lib/common/event.spec.js.map +1 -1
  365. package/lib/common/index.d.ts +1 -0
  366. package/lib/common/index.d.ts.map +1 -1
  367. package/lib/common/index.js +2 -1
  368. package/lib/common/index.js.map +1 -1
  369. package/lib/common/keybinding.js.map +1 -1
  370. package/lib/common/logger-protocol.js +1 -1
  371. package/lib/common/logger-protocol.js.map +1 -1
  372. package/lib/common/logger-watcher.js +1 -1
  373. package/lib/common/logger-watcher.js.map +1 -1
  374. package/lib/common/logger.js +5 -5
  375. package/lib/common/logger.js.map +1 -1
  376. package/lib/common/logger.spec.js +6 -6
  377. package/lib/common/logger.spec.js.map +1 -1
  378. package/lib/common/menu.js +4 -3
  379. package/lib/common/menu.js.map +1 -1
  380. package/lib/common/message-service-protocol.js +1 -1
  381. package/lib/common/message-service-protocol.js.map +1 -1
  382. package/lib/common/message-service.js +2 -2
  383. package/lib/common/message-service.js.map +1 -1
  384. package/lib/common/messaging/abstract-connection-provider.js +2 -2
  385. package/lib/common/messaging/abstract-connection-provider.js.map +1 -1
  386. package/lib/common/messaging/index.js +1 -1
  387. package/lib/common/messaging/proxy-factory.js.map +1 -1
  388. package/lib/common/messaging/proxy-factory.spec.js +2 -2
  389. package/lib/common/messaging/proxy-factory.spec.js.map +1 -1
  390. package/lib/common/path.spec.js +16 -16
  391. package/lib/common/path.spec.js.map +1 -1
  392. package/lib/common/performance/index.d.ts +19 -0
  393. package/lib/common/performance/index.d.ts.map +1 -0
  394. package/lib/common/performance/index.js +31 -0
  395. package/lib/common/performance/index.js.map +1 -0
  396. package/lib/common/performance/measurement-protocol.d.ts +65 -0
  397. package/lib/common/performance/measurement-protocol.d.ts.map +1 -0
  398. package/lib/common/performance/measurement-protocol.js +79 -0
  399. package/lib/common/performance/measurement-protocol.js.map +1 -0
  400. package/lib/common/performance/measurement.d.ts +91 -0
  401. package/lib/common/performance/measurement.d.ts.map +1 -0
  402. package/lib/common/performance/measurement.js +18 -0
  403. package/lib/common/performance/measurement.js.map +1 -0
  404. package/lib/common/performance/stopwatch.d.ts +68 -0
  405. package/lib/common/performance/stopwatch.d.ts.map +1 -0
  406. package/lib/common/performance/stopwatch.js +134 -0
  407. package/lib/common/performance/stopwatch.js.map +1 -0
  408. package/lib/common/progress-service.js +3 -3
  409. package/lib/common/progress-service.js.map +1 -1
  410. package/lib/common/promise-util.d.ts +11 -0
  411. package/lib/common/promise-util.d.ts.map +1 -1
  412. package/lib/common/promise-util.js +18 -2
  413. package/lib/common/promise-util.js.map +1 -1
  414. package/lib/common/promise-util.spec.js +2 -2
  415. package/lib/common/promise-util.spec.js.map +1 -1
  416. package/lib/common/resource.js +5 -4
  417. package/lib/common/resource.js.map +1 -1
  418. package/lib/common/selection-service.js +1 -1
  419. package/lib/common/selection-service.js.map +1 -1
  420. package/lib/common/stream.js.map +1 -1
  421. package/lib/common/ternary-search-tree.js +6 -6
  422. package/lib/common/ternary-search-tree.js.map +1 -1
  423. package/lib/common/test/expect.js +1 -1
  424. package/lib/common/test/expect.js.map +1 -1
  425. package/lib/common/test/mock-logger.js +1 -1
  426. package/lib/common/test/mock-logger.js.map +1 -1
  427. package/lib/common/test/mock-resource-provider.js +1 -1
  428. package/lib/common/test/mock-resource-provider.js.map +1 -1
  429. package/lib/common/types.d.ts +23 -1
  430. package/lib/common/types.d.ts.map +1 -1
  431. package/lib/common/types.js +26 -2
  432. package/lib/common/types.js.map +1 -1
  433. package/lib/common/uri.spec.js.map +1 -1
  434. package/lib/electron-browser/electron-clipboard-service.js +1 -1
  435. package/lib/electron-browser/electron-clipboard-service.js.map +1 -1
  436. package/lib/electron-browser/keyboard/electron-keyboard-layout-change-notifier.js +2 -2
  437. package/lib/electron-browser/keyboard/electron-keyboard-layout-change-notifier.js.map +1 -1
  438. package/lib/electron-browser/menu/electron-context-menu-renderer.js +8 -8
  439. package/lib/electron-browser/menu/electron-context-menu-renderer.js.map +1 -1
  440. package/lib/electron-browser/menu/electron-main-menu-factory.js +5 -5
  441. package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
  442. package/lib/electron-browser/menu/electron-menu-contribution.js +7 -7
  443. package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
  444. package/lib/electron-browser/messaging/electron-ipc-connection-provider.js +1 -1
  445. package/lib/electron-browser/messaging/electron-ipc-connection-provider.js.map +1 -1
  446. package/lib/electron-browser/messaging/electron-ws-connection-provider.js +1 -1
  447. package/lib/electron-browser/messaging/electron-ws-connection-provider.js.map +1 -1
  448. package/lib/electron-browser/window/electron-window-module.js +1 -1
  449. package/lib/electron-browser/window/electron-window-module.js.map +1 -1
  450. package/lib/electron-browser/window/electron-window-preferences.js +1 -1
  451. package/lib/electron-browser/window/electron-window-preferences.js.map +1 -1
  452. package/lib/electron-browser/window/electron-window-service.js +4 -4
  453. package/lib/electron-browser/window/electron-window-service.js.map +1 -1
  454. package/lib/electron-main/electron-main-application-module.js +4 -4
  455. package/lib/electron-main/electron-main-application-module.js.map +1 -1
  456. package/lib/electron-main/electron-main-application.d.ts +0 -4
  457. package/lib/electron-main/electron-main-application.d.ts.map +1 -1
  458. package/lib/electron-main/electron-main-application.js +9 -29
  459. package/lib/electron-main/electron-main-application.js.map +1 -1
  460. package/lib/electron-main/electron-main-window-service-impl.js +2 -2
  461. package/lib/electron-main/electron-main-window-service-impl.js.map +1 -1
  462. package/lib/electron-main/electron-native-keymap.js +1 -1
  463. package/lib/electron-main/electron-native-keymap.js.map +1 -1
  464. package/lib/electron-main/electron-security-token-service.js +2 -2
  465. package/lib/electron-main/electron-security-token-service.js.map +1 -1
  466. package/lib/electron-main/messaging/electron-messaging-contribution.js +8 -8
  467. package/lib/electron-main/messaging/electron-messaging-contribution.js.map +1 -1
  468. package/lib/electron-node/hosting/electron-ws-origin-validator.js +1 -1
  469. package/lib/electron-node/hosting/electron-ws-origin-validator.js.map +1 -1
  470. package/lib/electron-node/keyboard/electron-keyboard-layout-provider.js +1 -1
  471. package/lib/electron-node/keyboard/electron-keyboard-layout-provider.js.map +1 -1
  472. package/lib/electron-node/token/electron-token-backend-contribution.js +2 -2
  473. package/lib/electron-node/token/electron-token-backend-contribution.js.map +1 -1
  474. package/lib/electron-node/token/electron-token-messaging-contribution.js +2 -2
  475. package/lib/electron-node/token/electron-token-messaging-contribution.js.map +1 -1
  476. package/lib/electron-node/token/electron-token-validator.js +2 -2
  477. package/lib/electron-node/token/electron-token-validator.js.map +1 -1
  478. package/lib/node/application-server.js +2 -2
  479. package/lib/node/application-server.js.map +1 -1
  480. package/lib/node/backend-application-config-provider.js +1 -1
  481. package/lib/node/backend-application-config-provider.js.map +1 -1
  482. package/lib/node/backend-application-config-provider.spec.js +1 -1
  483. package/lib/node/backend-application-config-provider.spec.js.map +1 -1
  484. package/lib/node/backend-application-module.d.ts.map +1 -1
  485. package/lib/node/backend-application-module.js +7 -4
  486. package/lib/node/backend-application-module.js.map +1 -1
  487. package/lib/node/backend-application.d.ts +2 -2
  488. package/lib/node/backend-application.d.ts.map +1 -1
  489. package/lib/node/backend-application.js +17 -35
  490. package/lib/node/backend-application.js.map +1 -1
  491. package/lib/node/cli.js +3 -2
  492. package/lib/node/cli.js.map +1 -1
  493. package/lib/node/console-logger-server.js +4 -4
  494. package/lib/node/console-logger-server.js.map +1 -1
  495. package/lib/node/console-logger-server.spec.js +5 -5
  496. package/lib/node/console-logger-server.spec.js.map +1 -1
  497. package/lib/node/env-variables/env-variables-server.js +3 -3
  498. package/lib/node/env-variables/env-variables-server.js.map +1 -1
  499. package/lib/node/env-variables/index.js +1 -1
  500. package/lib/node/environment-utils.js +1 -1
  501. package/lib/node/environment-utils.js.map +1 -1
  502. package/lib/node/hosting/backend-application-hosts.js +2 -2
  503. package/lib/node/hosting/backend-application-hosts.js.map +1 -1
  504. package/lib/node/hosting/ws-origin-validator.js +2 -2
  505. package/lib/node/hosting/ws-origin-validator.js.map +1 -1
  506. package/lib/node/i18n/i18n-backend-module.js +1 -1
  507. package/lib/node/i18n/i18n-backend-module.js.map +1 -1
  508. package/lib/node/i18n/localization-backend-contribution.js +3 -3
  509. package/lib/node/i18n/localization-backend-contribution.js.map +1 -1
  510. package/lib/node/i18n/localization-contribution.js +4 -4
  511. package/lib/node/i18n/localization-contribution.js.map +1 -1
  512. package/lib/node/i18n/localization-provider.js +1 -1
  513. package/lib/node/i18n/localization-provider.js.map +1 -1
  514. package/lib/node/index.js +1 -1
  515. package/lib/node/keytar-server.js +1 -1
  516. package/lib/node/keytar-server.js.map +1 -1
  517. package/lib/node/logger-backend-module.js +1 -1
  518. package/lib/node/logger-backend-module.js.map +1 -1
  519. package/lib/node/logger-cli-contribution.js +1 -1
  520. package/lib/node/logger-cli-contribution.js.map +1 -1
  521. package/lib/node/logger-cli-contribution.spec.js +13 -13
  522. package/lib/node/logger-cli-contribution.spec.js.map +1 -1
  523. package/lib/node/main.js +1 -1
  524. package/lib/node/main.js.map +1 -1
  525. package/lib/node/messaging/http-websocket-adapter.js +3 -3
  526. package/lib/node/messaging/http-websocket-adapter.js.map +1 -1
  527. package/lib/node/messaging/index.js +1 -1
  528. package/lib/node/messaging/ipc-bootstrap.js +3 -3
  529. package/lib/node/messaging/ipc-bootstrap.js.map +1 -1
  530. package/lib/node/messaging/ipc-connection-provider.d.ts.map +1 -1
  531. package/lib/node/messaging/ipc-connection-provider.js +11 -7
  532. package/lib/node/messaging/ipc-connection-provider.js.map +1 -1
  533. package/lib/node/messaging/messaging-backend-module.js +3 -3
  534. package/lib/node/messaging/messaging-backend-module.js.map +1 -1
  535. package/lib/node/messaging/messaging-contribution.js +14 -14
  536. package/lib/node/messaging/messaging-contribution.js.map +1 -1
  537. package/lib/node/messaging/messaging-listeners.js +3 -3
  538. package/lib/node/messaging/messaging-listeners.js.map +1 -1
  539. package/lib/node/performance/index.d.ts +18 -0
  540. package/lib/node/performance/index.d.ts.map +1 -0
  541. package/lib/node/performance/index.js +30 -0
  542. package/lib/node/performance/index.js.map +1 -0
  543. package/lib/node/performance/measurement-backend-bindings.d.ts +20 -0
  544. package/lib/node/performance/measurement-backend-bindings.d.ts.map +1 -0
  545. package/lib/node/performance/measurement-backend-bindings.js +31 -0
  546. package/lib/node/performance/measurement-backend-bindings.js.map +1 -0
  547. package/lib/node/performance/node-stopwatch.d.ts +21 -0
  548. package/lib/node/performance/node-stopwatch.d.ts.map +1 -0
  549. package/lib/node/performance/node-stopwatch.js +52 -0
  550. package/lib/node/performance/node-stopwatch.js.map +1 -0
  551. package/lib/node/process-utils.js +1 -1
  552. package/lib/node/process-utils.js.map +1 -1
  553. package/lib/node/process-utils.spec.js +1 -1
  554. package/lib/node/process-utils.spec.js.map +1 -1
  555. package/lib/node/ws-request-validators.js +3 -3
  556. package/lib/node/ws-request-validators.js.map +1 -1
  557. package/package.json +3 -3
  558. package/src/browser/authentication-service.ts +103 -59
  559. package/src/browser/frontend-application-module.ts +4 -0
  560. package/src/browser/frontend-application.ts +17 -22
  561. package/src/browser/performance/frontend-stopwatch.ts +62 -0
  562. package/src/browser/performance/index.ts +18 -0
  563. package/src/browser/performance/measurement-frontend-bindings.ts +31 -0
  564. package/src/browser/preferences/preference-language-override-service.ts +17 -3
  565. package/src/browser/saveable.ts +84 -27
  566. package/src/browser/shell/application-shell.ts +42 -28
  567. package/src/browser/shell/side-panel-handler.ts +12 -0
  568. package/src/browser/shell/tab-bars.ts +1 -0
  569. package/src/browser/source-tree/source-tree-widget.tsx +6 -9
  570. package/src/browser/source-tree/source-tree.ts +6 -4
  571. package/src/browser/style/sidepanel.css +4 -0
  572. package/src/browser/style/view-container.css +0 -8
  573. package/src/browser/tree/index.ts +1 -0
  574. package/src/browser/tree/tree-compression/compressed-tree-expansion-service.ts +46 -0
  575. package/src/browser/tree/tree-compression/compressed-tree-model.ts +82 -0
  576. package/src/browser/tree/tree-compression/compressed-tree-widget.tsx +181 -0
  577. package/src/browser/tree/tree-compression/index.ts +20 -0
  578. package/src/browser/tree/tree-compression/tree-compression-service.ts +121 -0
  579. package/src/browser/tree/tree-compression/tree-compression.css +28 -0
  580. package/src/browser/tree/tree-container.ts +107 -29
  581. package/src/browser/tree/tree-expansion.ts +1 -1
  582. package/src/browser/tree/tree-model.ts +13 -11
  583. package/src/browser/tree/tree-widget.tsx +30 -12
  584. package/src/browser/tree/tree.ts +2 -2
  585. package/src/browser/view-container.ts +27 -23
  586. package/src/browser/widget-open-handler.ts +1 -3
  587. package/src/common/event.ts +2 -2
  588. package/src/common/index.ts +1 -0
  589. package/src/common/messaging/proxy-factory.ts +1 -1
  590. package/src/common/performance/index.ts +19 -0
  591. package/src/common/performance/measurement-protocol.ts +104 -0
  592. package/src/common/performance/measurement.ts +104 -0
  593. package/src/common/performance/stopwatch.ts +157 -0
  594. package/src/common/promise-util.ts +16 -0
  595. package/src/common/types.ts +41 -1
  596. package/src/electron-browser/menu/electron-menu-contribution.ts +1 -1
  597. package/src/electron-main/electron-main-application.ts +1 -22
  598. package/src/node/backend-application-module.ts +4 -0
  599. package/src/node/backend-application.ts +10 -33
  600. package/src/node/messaging/ipc-connection-provider.ts +9 -5
  601. package/src/node/performance/index.ts +18 -0
  602. package/src/node/performance/measurement-backend-bindings.ts +35 -0
  603. package/src/node/performance/node-stopwatch.ts +40 -0
@@ -0,0 +1,104 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2021 STMicroelectronics and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ *******************************************************************************/
16
+
17
+ /* eslint-disable @typescript-eslint/no-explicit-any */
18
+
19
+ import { inject, injectable } from 'inversify';
20
+ import { Measurement, MeasurementOptions } from './measurement';
21
+ import { Stopwatch } from './stopwatch';
22
+
23
+ export const BackendStopwatch = Symbol('BackendStopwatch');
24
+
25
+ /** API path of the stopwatch service that exposes the back-end stopwatch to clients. */
26
+ export const stopwatchPath = '/services/stopwatch';
27
+
28
+ /** Token representing a remote measurement in the {@link BackendStopwatch} protocol. */
29
+ export type RemoteMeasurement = number;
30
+
31
+ export const BackendStopwatchOptions = Symbol('BackendStopwatchOptions');
32
+
33
+ /**
34
+ * A service that exposes the back-end's {@link Stopwatch} to clients
35
+ * via the remote API. If you do not need this service then bind or re-bind
36
+ * the {@link NullBackendStopwatch} implementation to this service interface.
37
+ */
38
+ export interface BackendStopwatch {
39
+
40
+ /**
41
+ * Create a {@link Measurement} that will compute the time that elapsed on the back-end when logged.
42
+ *
43
+ * @param name the {@link Measurement.name measurement name}
44
+ * @param options optional configuration of the new measurement
45
+ * @returns a token identifying an unique self-timing measurement relative to the back-end's timeline
46
+ */
47
+ start(name: string, options?: MeasurementOptions): Promise<RemoteMeasurement>;
48
+
49
+ /**
50
+ * Stop a measurement previously {@link start started} and log in the back-end a measurement of
51
+ * its duration relative to the back-end's timeline.
52
+ *
53
+ * @param measurement token identifying a measurement previously {@link start started}
54
+ * @param message a message to log
55
+ * @param messageArgs optional arguments to the `message`
56
+ */
57
+ stop(measurement: RemoteMeasurement, message: string, messageArgs: any[]): Promise<void>;
58
+
59
+ }
60
+
61
+ /**
62
+ * Default implementation of the (remote) back-end stopwatch service.
63
+ */
64
+ @injectable()
65
+ export class DefaultBackendStopwatch {
66
+
67
+ readonly measurements = new Map<number, Measurement>();
68
+
69
+ protected idSequence: number = 0;
70
+
71
+ @inject(Stopwatch)
72
+ protected readonly stopwatch: Stopwatch;
73
+
74
+ start(name: string, options?: MeasurementOptions): RemoteMeasurement {
75
+ const result = ++this.idSequence;
76
+ this.measurements.set(result, this.stopwatch.start(name, options));
77
+ return result;
78
+ }
79
+
80
+ stop(measurementToken: RemoteMeasurement, message: string, messageArgs: any[]): void {
81
+ const measurement = this.measurements.get(measurementToken);
82
+ if (measurement) {
83
+ this.measurements.delete(measurementToken);
84
+ measurement.log(message, ...messageArgs);
85
+ }
86
+ }
87
+
88
+ }
89
+
90
+ /**
91
+ * No-op implementation of the (remote) back-end stopwatch service.
92
+ */
93
+ @injectable()
94
+ export class NullBackendStopwatch implements BackendStopwatch {
95
+
96
+ start(): Promise<RemoteMeasurement> {
97
+ return Promise.resolve(0);
98
+ }
99
+
100
+ stop(): Promise<void> {
101
+ return Promise.resolve();
102
+ }
103
+
104
+ }
@@ -0,0 +1,104 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2021 STMicroelectronics and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ *******************************************************************************/
16
+
17
+ /* eslint-disable @typescript-eslint/no-explicit-any */
18
+
19
+ import { LogLevel } from '../logger';
20
+
21
+ /**
22
+ * A `Measurement` counts the time elapsed between its creation when the {@link Stopwatch}
23
+ * is {@link Stopwatch.start started} and when it is {@link stop stopped}.
24
+ */
25
+ export interface Measurement {
26
+ /**
27
+ * Compute the elapsed time, in milliseconds, if not already done (only has effect on the first invocation).
28
+ * A `NaN` result indicates that the watch was stopped but failed to make a measurement.
29
+ */
30
+ stop(): number;
31
+
32
+ /** The measurement name. This may show up in the performance measurement framework appropriate to the application context. */
33
+ name: string;
34
+
35
+ /**
36
+ * The elapsed time measured, if it has been {@link stop stopped} and measured, or `NaN` if the platform disabled
37
+ * performance measurement.
38
+ */
39
+ elapsed?: number;
40
+
41
+ /**
42
+ * Compute the elapsed time and log a message annotated with that timing information.
43
+ * The message is logged at the level determined by the {@link MeasurementOptions}.
44
+ *
45
+ * @param detail a message detailing what activity was measured
46
+ * @param optionalArgs optional message arguments as per the usual console API
47
+ */
48
+ log(detail: string, ...optionalArgs: any[]): void;
49
+
50
+ /**
51
+ * Compute the elapsed time and log a debug message annotated with that timing information.
52
+ *
53
+ * @param detail a message detailing what activity was measured
54
+ * @param optionalArgs optional message arguments as per the usual console API
55
+ */
56
+ debug(detail: string, ...optionalArgs: any[]): void;
57
+
58
+ /**
59
+ * Compute the elapsed time and log an info message annotated with that timing information.
60
+ *
61
+ * @param detail a message detailing what activity was measured
62
+ * @param optionalArgs optional message arguments as per the usual console API
63
+ */
64
+ info(detail: string, ...optionalArgs: any[]): void;
65
+
66
+ /**
67
+ * Compute the elapsed time and log a warning message annotated with that timing information.
68
+ *
69
+ * @param detail a message detailing what activity was measured
70
+ * @param optionalArgs optional message arguments as per the usual console API
71
+ */
72
+ warn(detail: string, ...optionalArgs: any[]): void;
73
+
74
+ /**
75
+ * Compute the elapsed time and log an error message annotated with that timing information.
76
+ *
77
+ * @param detail a message detailing what activity was measured
78
+ * @param optionalArgs optional message arguments as per the usual console API
79
+ */
80
+ error(detail: string, ...optionalArgs: any[]): void;
81
+ }
82
+
83
+ /**
84
+ * Optional configuration of a {@link Measurement} specified at the time of its creation.
85
+ */
86
+ export interface MeasurementOptions {
87
+ /**
88
+ * A specific context of the application in which an activity was measured.
89
+ * Results in logs being emitted with a "[<context>]" qualified at the head.
90
+ */
91
+ context?: string;
92
+
93
+ /** An optional logging level at which to emit the log message. The default value is {@link LogLevel.INFO}. */
94
+ defaultLogLevel?: LogLevel;
95
+
96
+ /**
97
+ * Some measurements are measured against a threshold (in millis) that they should not exceed.
98
+ * If omitted, the implied threshold is unlimited time (no threshold).
99
+ *
100
+ * @see {@link Stopwatch.startAsync}
101
+ * @see {@link thresholdLogLevel}
102
+ */
103
+ thresholdMillis?: number;
104
+ }
@@ -0,0 +1,157 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2021 STMicroelectronics and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ *******************************************************************************/
16
+
17
+ /* eslint-disable @typescript-eslint/no-explicit-any */
18
+
19
+ import { inject, injectable } from 'inversify';
20
+ import { ILogger, LogLevel } from '../logger';
21
+ import { MaybePromise } from '../types';
22
+ import { Measurement, MeasurementOptions } from './measurement';
23
+
24
+ /** The default log level for measurements that are not otherwise configured with a default. */
25
+ const DEFAULT_LOG_LEVEL = LogLevel.INFO;
26
+
27
+ /**
28
+ * Configuration of the log messages written by a {@link Measurement}.
29
+ */
30
+ interface LogOptions extends MeasurementOptions {
31
+ /** A function that computes the current time, in millis, since the start of the application. */
32
+ now: () => number;
33
+
34
+ /** An optional label for the application the start of which (in real time) is the basis of all measurements. */
35
+ owner?: string;
36
+
37
+ /** An optional log level to override any default or dynamic log level for a specific log message. */
38
+ levelOverride?: LogLevel;
39
+
40
+ /** Optional arguments to the log message. The 'optionalArgs' coming in from the {@link Measurement} API are slotted in here. */
41
+ arguments?: any[];
42
+ }
43
+
44
+ /**
45
+ * A factory of {@link Measurement}s for performance logging.
46
+ */
47
+ @injectable()
48
+ export abstract class Stopwatch {
49
+
50
+ @inject(ILogger)
51
+ protected readonly logger: ILogger;
52
+
53
+ protected constructor(protected readonly defaultLogOptions: LogOptions) {
54
+ if (!defaultLogOptions.defaultLogLevel) {
55
+ defaultLogOptions.defaultLogLevel = DEFAULT_LOG_LEVEL;
56
+ }
57
+ }
58
+
59
+ /**
60
+ * Create a {@link Measurement} that will compute its elapsed time when logged.
61
+ *
62
+ * @param name the {@link Measurement.name measurement name}
63
+ * @param options optional configuration of the new measurement
64
+ * @returns a self-timing measurement
65
+ */
66
+ public abstract start(name: string, options?: MeasurementOptions): Measurement;
67
+
68
+ /**
69
+ * Wrap an asynchronous function in a {@link Measurement} that logs itself on completion.
70
+ * If obtaining and awaiting the `computation` runs too long according to the threshold
71
+ * set in the `options`, then the log message is a warning, otherwise a debug log.
72
+ *
73
+ * @param name the {@link Measurement.name name of the measurement} to wrap around the function
74
+ * @param description a description of what the function does, to be included in the log
75
+ * @param computation a supplier of the asynchronous function to wrap
76
+ * @param options optional addition configuration as for {@link measure}
77
+ * @returns the wrapped `computation`
78
+ *
79
+ * @see {@link MeasurementOptions.thresholdMillis}
80
+ */
81
+ public async startAsync<T>(name: string, description: string, computation: () => MaybePromise<T>, options?: MeasurementOptions): Promise<T> {
82
+ const threshold = options?.thresholdMillis ?? Number.POSITIVE_INFINITY;
83
+
84
+ const measure = this.start(name, options);
85
+ const result = await computation();
86
+ if (measure.stop() > threshold) {
87
+ measure.warn(`${description} took longer than the expected maximum ${threshold} milliseconds`);
88
+ } else {
89
+ measure.log(description);
90
+ }
91
+ return result;
92
+ }
93
+
94
+ protected createMeasurement(name: string, measurement: () => number, options?: MeasurementOptions): Measurement {
95
+ const logOptions = this.mergeLogOptions(options);
96
+
97
+ const result: Measurement = {
98
+ name,
99
+ stop: () => {
100
+ if (result.elapsed === undefined) {
101
+ result.elapsed = measurement();
102
+ }
103
+ return result.elapsed;
104
+ },
105
+ log: (activity: string, ...optionalArgs: any[]) => this.log(result, activity, this.atLevel(logOptions, undefined, optionalArgs)),
106
+ debug: (activity: string, ...optionalArgs: any[]) => this.log(result, activity, this.atLevel(logOptions, LogLevel.DEBUG, optionalArgs)),
107
+ info: (activity: string, ...optionalArgs: any[]) => this.log(result, activity, this.atLevel(logOptions, LogLevel.INFO, optionalArgs)),
108
+ warn: (activity: string, ...optionalArgs: any[]) => this.log(result, activity, this.atLevel(logOptions, LogLevel.WARN, optionalArgs)),
109
+ error: (activity: string, ...optionalArgs: any[]) => this.log(result, activity, this.atLevel(logOptions, LogLevel.ERROR, optionalArgs)),
110
+ };
111
+
112
+ return result;
113
+ }
114
+
115
+ protected mergeLogOptions(logOptions?: Partial<LogOptions>): LogOptions {
116
+ const result: LogOptions = { ...this.defaultLogOptions };
117
+ if (logOptions) {
118
+ Object.assign(result, logOptions);
119
+ }
120
+ return result;
121
+ }
122
+
123
+ protected atLevel(logOptions: LogOptions, levelOverride?: LogLevel, optionalArgs?: any[]): LogOptions {
124
+ return { ...logOptions, levelOverride, arguments: optionalArgs };
125
+ }
126
+
127
+ protected logLevel(elapsed: number, options?: Partial<LogOptions>): LogLevel {
128
+ if (options?.levelOverride) {
129
+ return options.levelOverride;
130
+ }
131
+
132
+ return options?.defaultLogLevel ?? this.defaultLogOptions.defaultLogLevel ?? DEFAULT_LOG_LEVEL;
133
+ }
134
+
135
+ protected log(measurement: Measurement, activity: string, options: LogOptions): void {
136
+ const elapsed = measurement.stop();
137
+ const level = this.logLevel(elapsed, options);
138
+
139
+ if (Number.isNaN(elapsed)) {
140
+ switch (level) {
141
+ case LogLevel.ERROR:
142
+ case LogLevel.FATAL:
143
+ // Always log errors, even if NaN duration from native API preventing a measurement
144
+ break;
145
+ default:
146
+ // Measurement was prevented by native API, do not log NaN duration
147
+ return;
148
+ }
149
+ }
150
+
151
+ const start = options.owner ? `${options.owner} start` : 'start';
152
+ const timeFromStart = `Finished ${(options.now() / 1000).toFixed(3)} s after ${start}`;
153
+ const whatWasMeasured = options.context ? `[${options.context}] ${activity}` : activity;
154
+ this.logger.log(level, `${whatWasMeasured}: ${elapsed.toFixed(1)} ms [${timeFromStart}]`, ...(options.arguments ?? []));
155
+ }
156
+
157
+ }
@@ -57,6 +57,22 @@ export function timeout(ms: number, token = CancellationToken.None): Promise<voi
57
57
  return deferred.promise;
58
58
  }
59
59
 
60
+ /**
61
+ * Creates a promise that is rejected after the given amount of time. A typical use case is to wait for another promise until a specified timeout using:
62
+ * ```
63
+ * Promise.race([ promiseToPerform, timeoutReject(timeout, 'Timeout error message') ]);
64
+ * ```
65
+ *
66
+ * @param ms timeout in milliseconds
67
+ * @param message error message on promise rejection
68
+ * @returns rejection promise
69
+ */
70
+ export function timeoutReject<T>(ms: number, message?: string): Promise<T> {
71
+ const deferred = new Deferred<T>();
72
+ setTimeout(() => deferred.reject(new Error(message)), ms);
73
+ return deferred.promise;
74
+ }
75
+
60
76
  export async function retry<T>(task: () => Promise<T>, retryDelay: number, retries: number): Promise<T> {
61
77
  let lastError: Error | undefined;
62
78
 
@@ -68,8 +68,48 @@ export namespace Prioritizeable {
68
68
  }
69
69
  }
70
70
 
71
+ export namespace ArrayUtils {
72
+ export interface Head<T> extends Array<T> {
73
+ head(): T;
74
+ }
75
+
76
+ export interface Tail<T> extends Array<T> {
77
+ tail(): T;
78
+ }
79
+
80
+ export interface Children<T> extends Array<T> {
81
+ children(): Tail<T>
82
+ }
83
+
84
+ export const TailImpl = {
85
+ tail<T>(this: Array<T>): T {
86
+ return this[this.length - 1];
87
+ },
88
+ };
89
+
90
+ export const HeadAndChildrenImpl = {
91
+ head<T>(this: Array<T>): T {
92
+ return this[0];
93
+ },
94
+
95
+ children<T>(this: Array<T>): Tail<T> {
96
+ return Object.assign(this.slice(1), TailImpl);
97
+ }
98
+ };
99
+
100
+ export interface HeadAndTail<T> extends Head<T>, Tail<T>, Children<T> { }
101
+
102
+ export function asTail<T>(array: Array<T>): Tail<T> {
103
+ return Object.assign(array, TailImpl);
104
+ }
105
+
106
+ export function asHeadAndTail<T>(array: Array<T>): HeadAndTail<T> {
107
+ return Object.assign(array, HeadAndChildrenImpl, TailImpl);
108
+ }
109
+ }
110
+
71
111
  /**
72
- * Throws when called and statically make sure that all variants of a type were consumed.
112
+ * Throws when called and statically makes sure that all variants of a type were consumed.
73
113
  */
74
114
  export function unreachable(_never: never, message: string = 'unhandled case'): never {
75
115
  throw new Error(message);
@@ -267,7 +267,7 @@ export class ElectronMenuContribution extends BrowserMenuBarContribution impleme
267
267
  });
268
268
 
269
269
  registry.registerCommand(ElectronCommands.RELOAD, {
270
- execute: () => currentWindow.reload()
270
+ execute: () => this.windowService.reload()
271
271
  });
272
272
  registry.registerCommand(ElectronCommands.CLOSE_WINDOW, {
273
273
  execute: () => currentWindow.close()
@@ -16,7 +16,7 @@
16
16
 
17
17
  import { inject, injectable, named } from 'inversify';
18
18
  import * as electronRemoteMain from '../../electron-shared/@electron/remote/main';
19
- import { screen, globalShortcut, ipcMain, app, BrowserWindow, BrowserWindowConstructorOptions, Event as ElectronEvent } from '../../electron-shared/electron';
19
+ import { screen, ipcMain, app, BrowserWindow, BrowserWindowConstructorOptions, Event as ElectronEvent } from '../../electron-shared/electron';
20
20
  import * as path from 'path';
21
21
  import { Argv } from 'yargs';
22
22
  import { AddressInfo } from 'net';
@@ -266,7 +266,6 @@ export class ElectronMainApplication {
266
266
  electronWindow.setMenuBarVisibility(false);
267
267
  this.attachReadyToShow(electronWindow);
268
268
  this.attachSaveWindowState(electronWindow);
269
- this.attachGlobalShortcuts(electronWindow);
270
269
  this.restoreMaximizedState(electronWindow, options);
271
270
  this.attachCloseListeners(electronWindow, options);
272
271
  electronRemoteMain.enable(electronWindow.webContents);
@@ -445,26 +444,6 @@ export class ElectronMainApplication {
445
444
  ).sort().join('-');
446
445
  }
447
446
 
448
- /**
449
- * Catch certain keybindings to prevent reloading the window using keyboard shortcuts.
450
- */
451
- protected attachGlobalShortcuts(electronWindow: BrowserWindow): void {
452
- const handler = this.config.electron?.disallowReloadKeybinding
453
- ? () => { }
454
- : () => this.reload(electronWindow);
455
- const accelerators = ['CmdOrCtrl+R', 'F5'];
456
- electronWindow.on('focus', () => {
457
- for (const accelerator of accelerators) {
458
- globalShortcut.register(accelerator, handler);
459
- }
460
- });
461
- electronWindow.on('blur', () => {
462
- for (const accelerator of accelerators) {
463
- globalShortcut.unregister(accelerator);
464
- }
465
- });
466
- }
467
-
468
447
  protected restoreMaximizedState(electronWindow: BrowserWindow, options: TheiaBrowserWindowOptions): void {
469
448
  if (options.isMaximized) {
470
449
  electronWindow.maximize();
@@ -35,6 +35,7 @@ import { KeytarServiceImpl } from './keytar-server';
35
35
  import { ContributionFilterRegistry, ContributionFilterRegistryImpl } from '../common/contribution-filter';
36
36
  import { EnvironmentUtils } from './environment-utils';
37
37
  import { ProcessUtils } from './process-utils';
38
+ import { bindNodeStopwatch, bindBackendStopwatchServer } from './performance';
38
39
 
39
40
  decorate(injectable(), ApplicationPackage);
40
41
 
@@ -109,4 +110,7 @@ export const backendApplicationModule = new ContainerModule(bind => {
109
110
 
110
111
  bind(EnvironmentUtils).toSelf().inSingletonScope();
111
112
  bind(ProcessUtils).toSelf().inSingletonScope();
113
+
114
+ bindNodeStopwatch(bind);
115
+ bindBackendStopwatchServer(bind);
112
116
  });
@@ -20,9 +20,8 @@ import * as https from 'https';
20
20
  import * as express from 'express';
21
21
  import * as yargs from 'yargs';
22
22
  import * as fs from 'fs-extra';
23
- import { performance, PerformanceObserver } from 'perf_hooks';
24
23
  import { inject, named, injectable, postConstruct } from 'inversify';
25
- import { ContributionProvider, MaybePromise } from '../common';
24
+ import { ContributionProvider, MaybePromise, Stopwatch } from '../common';
26
25
  import { CliContribution } from './cli';
27
26
  import { Deferred } from '../common/promise-util';
28
27
  import { environment } from '../common/index';
@@ -152,13 +151,13 @@ export class BackendApplication {
152
151
  @inject(ProcessUtils)
153
152
  protected readonly processUtils: ProcessUtils;
154
153
 
155
- private readonly _performanceObserver: PerformanceObserver;
154
+ @inject(Stopwatch)
155
+ protected readonly stopwatch: Stopwatch;
156
156
 
157
157
  constructor(
158
158
  @inject(ContributionProvider) @named(BackendApplicationContribution)
159
159
  protected readonly contributionsProvider: ContributionProvider<BackendApplicationContribution>,
160
- @inject(BackendApplicationCliContribution) protected readonly cliParams: BackendApplicationCliContribution
161
- ) {
160
+ @inject(BackendApplicationCliContribution) protected readonly cliParams: BackendApplicationCliContribution) {
162
161
  process.on('uncaughtException', error => {
163
162
  if (error) {
164
163
  console.error('Uncaught Exception: ', error.toString());
@@ -185,23 +184,6 @@ export class BackendApplication {
185
184
  process.on('SIGINT', signalHandler);
186
185
  // Handles `kill pid`.
187
186
  process.on('SIGTERM', signalHandler);
188
-
189
- // Create performance observer
190
- this._performanceObserver = new PerformanceObserver(list => {
191
- for (const item of list.getEntries()) {
192
- const contribution = `Backend ${item.name}`;
193
- if (item.duration > TIMER_WARNING_THRESHOLD) {
194
- console.warn(`${contribution} is slow, took: ${item.duration.toFixed(1)} ms`);
195
- } else {
196
- console.debug(`${contribution} took: ${item.duration.toFixed(1)} ms`);
197
- }
198
- }
199
- });
200
- this._performanceObserver.observe({
201
- entryTypes: ['measure']
202
- });
203
-
204
- this.initialize();
205
187
  }
206
188
 
207
189
  protected async initialize(): Promise<void> {
@@ -220,6 +202,10 @@ export class BackendApplication {
220
202
 
221
203
  @postConstruct()
222
204
  protected async configure(): Promise<void> {
205
+ // Do not await the initialization because contributions are expected to handle
206
+ // concurrent initialize/configure in undefined order if they provide both
207
+ this.initialize();
208
+
223
209
  this.app.get('*.js', this.serveGzipped.bind(this, 'text/javascript'));
224
210
  this.app.get('*.js.map', this.serveGzipped.bind(this, 'application/json'));
225
211
  this.app.get('*.css', this.serveGzipped.bind(this, 'text/css'));
@@ -309,7 +295,7 @@ export class BackendApplication {
309
295
  }
310
296
  }
311
297
  }
312
- return deferred.promise;
298
+ return this.stopwatch.startAsync('server', 'Finished starting backend application', () => deferred.promise);
313
299
  }
314
300
 
315
301
  protected onStop(): void {
@@ -324,7 +310,6 @@ export class BackendApplication {
324
310
  }
325
311
  }
326
312
  console.info('<<< All backend contributions have been stopped.');
327
- this._performanceObserver.disconnect();
328
313
  this.processUtils.terminateProcessTree(process.pid);
329
314
  }
330
315
 
@@ -347,15 +332,7 @@ export class BackendApplication {
347
332
  }
348
333
 
349
334
  protected async measure<T>(name: string, fn: () => MaybePromise<T>): Promise<T> {
350
- const startMark = name + '-start';
351
- const endMark = name + '-end';
352
- performance.mark(startMark);
353
- const result = await fn();
354
- performance.mark(endMark);
355
- performance.measure(name, startMark, endMark);
356
- // Observer should immediately log the measurement, so we can clear it
357
- performance.clearMarks(name);
358
- return result;
335
+ return this.stopwatch.startAsync(name, `Backend ${name}`, fn, { thresholdMillis: TIMER_WARNING_THRESHOLD });
359
336
  }
360
337
 
361
338
  }
@@ -17,7 +17,7 @@
17
17
  import * as cp from 'child_process';
18
18
  import * as path from 'path';
19
19
  import { injectable, inject } from 'inversify';
20
- import { Trace, IPCMessageReader, IPCMessageWriter, createMessageConnection, MessageConnection, Message } from 'vscode-ws-jsonrpc';
20
+ import { Trace, Tracer, IPCMessageReader, IPCMessageWriter, createMessageConnection, MessageConnection, Message } from 'vscode-ws-jsonrpc';
21
21
  import { ILogger, ConnectionErrorHandler, DisposableCollection, Disposable } from '../../common';
22
22
  import { createIpcEnv } from './ipc-protocol';
23
23
 
@@ -83,10 +83,14 @@ export class IPCConnectionProvider {
83
83
  info: (message: string) => this.logger.info(`[${options.serverName}: ${childProcess.pid}] ${message}`),
84
84
  log: (message: string) => this.logger.info(`[${options.serverName}: ${childProcess.pid}] ${message}`)
85
85
  });
86
- const traceVerbosity = this.logger.isDebug() ? Trace.Verbose : Trace.Off;
87
- connection.trace(traceVerbosity, {
88
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
89
- log: (message: any, data?: string) => this.logger.debug(`[${options.serverName}: ${childProcess.pid}] ${message}` + (typeof data === 'string' ? ' ' + data : ''))
86
+ const tracer: Tracer = {
87
+ log: (message: unknown, data?: string) => this.logger.debug(`[${options.serverName}: ${childProcess.pid}] ${message}` + (typeof data === 'string' ? ' ' + data : ''))
88
+ };
89
+ connection.trace(Trace.Verbose, tracer);
90
+ this.logger.isDebug().then(isDebug => {
91
+ if (!isDebug) {
92
+ connection.trace(Trace.Off, tracer);
93
+ }
90
94
  });
91
95
  return connection;
92
96
  }
@@ -0,0 +1,18 @@
1
+ /********************************************************************************
2
+ * Copyright (C) 2021 STMicroelectronics and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+
17
+ export * from './node-stopwatch';
18
+ export * from './measurement-backend-bindings';