@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
@@ -26,20 +26,17 @@ import { StorageService } from '../browser/storage-service';
26
26
  import { Disposable, DisposableCollection } from '../common/disposable';
27
27
  import { ACCOUNTS_MENU, ACCOUNTS_SUBMENU, MenuModelRegistry } from '../common/menu';
28
28
  import { Command, CommandRegistry } from '../common/command';
29
+ import { nls } from '../common/nls';
29
30
 
30
- export interface AuthenticationSessionsChangeEvent {
31
- added: ReadonlyArray<string>;
32
- removed: ReadonlyArray<string>;
33
- changed: ReadonlyArray<string>;
31
+ export interface AuthenticationSessionAccountInformation {
32
+ readonly id: string;
33
+ readonly label: string;
34
34
  }
35
35
 
36
36
  export interface AuthenticationSession {
37
37
  id: string;
38
38
  accessToken: string;
39
- account: {
40
- label: string;
41
- id: string;
42
- }
39
+ account: AuthenticationSessionAccountInformation;
43
40
  scopes: ReadonlyArray<string>;
44
41
  }
45
42
 
@@ -48,6 +45,13 @@ export interface AuthenticationProviderInformation {
48
45
  label: string;
49
46
  }
50
47
 
48
+ /** Should match the definition from the theia/vscode types */
49
+ export interface AuthenticationProviderAuthenticationSessionsChangeEvent {
50
+ readonly added: ReadonlyArray<AuthenticationSession | string | undefined>;
51
+ readonly removed: ReadonlyArray<AuthenticationSession | string | undefined>;
52
+ readonly changed: ReadonlyArray<AuthenticationSession | string | undefined>;
53
+ }
54
+
51
55
  export interface SessionRequest {
52
56
  disposables: Disposable[];
53
57
  requestingExtensionIds: string[];
@@ -57,6 +61,7 @@ export interface SessionRequestInfo {
57
61
  [scopes: string]: SessionRequest;
58
62
  }
59
63
 
64
+ /** Should match the definition from the theia/vscode types */
60
65
  export interface AuthenticationProvider {
61
66
  id: string;
62
67
 
@@ -68,13 +73,40 @@ export interface AuthenticationProvider {
68
73
 
69
74
  signOut(accountName: string): Promise<void>;
70
75
 
71
- getSessions(): Promise<ReadonlyArray<AuthenticationSession>>;
76
+ getSessions(scopes?: string[]): Promise<ReadonlyArray<AuthenticationSession>>;
72
77
 
73
- updateSessionItems(event: AuthenticationSessionsChangeEvent): Promise<void>;
78
+ updateSessionItems(event: AuthenticationProviderAuthenticationSessionsChangeEvent): Promise<void>;
74
79
 
75
80
  login(scopes: string[]): Promise<AuthenticationSession>;
76
81
 
77
82
  logout(sessionId: string): Promise<void>;
83
+
84
+ /**
85
+ * An [event](#Event) which fires when the array of sessions has changed, or data
86
+ * within a session has changed.
87
+ */
88
+ readonly onDidChangeSessions: Omit<Event<AuthenticationProviderAuthenticationSessionsChangeEvent>, 'maxListeners'>;
89
+
90
+ /**
91
+ * Get a list of sessions.
92
+ * @param scopes An optional list of scopes. If provided, the sessions returned should match
93
+ * these permissions, otherwise all sessions should be returned.
94
+ * @returns A promise that resolves to an array of authentication sessions.
95
+ */
96
+ getSessions(scopes?: string[]): Thenable<ReadonlyArray<AuthenticationSession>>;
97
+
98
+ /**
99
+ * Prompts a user to login.
100
+ * @param scopes A list of scopes, permissions, that the new session should be created with.
101
+ * @returns A promise that resolves to an authentication session.
102
+ */
103
+ createSession(scopes: string[]): Thenable<AuthenticationSession>;
104
+
105
+ /**
106
+ * Removes the session corresponding to session id.
107
+ * @param sessionId The id of the session to remove.
108
+ */
109
+ removeSession(sessionId: string): Thenable<void>;
78
110
  }
79
111
  export const AuthenticationService = Symbol('AuthenticationService');
80
112
 
@@ -84,13 +116,13 @@ export interface AuthenticationService {
84
116
  registerAuthenticationProvider(id: string, provider: AuthenticationProvider): void;
85
117
  unregisterAuthenticationProvider(id: string): void;
86
118
  requestNewSession(id: string, scopes: string[], extensionId: string, extensionName: string): void;
87
- updateSessions(providerId: string, event: AuthenticationSessionsChangeEvent): void;
119
+ updateSessions(providerId: string, event: AuthenticationProviderAuthenticationSessionsChangeEvent): void;
88
120
 
89
121
  readonly onDidRegisterAuthenticationProvider: Event<AuthenticationProviderInformation>;
90
122
  readonly onDidUnregisterAuthenticationProvider: Event<AuthenticationProviderInformation>;
91
123
 
92
- readonly onDidChangeSessions: Event<{ providerId: string, label: string, event: AuthenticationSessionsChangeEvent }>;
93
- getSessions(providerId: string): Promise<ReadonlyArray<AuthenticationSession>>;
124
+ readonly onDidChangeSessions: Event<{ providerId: string, label: string, event: AuthenticationProviderAuthenticationSessionsChangeEvent }>;
125
+ getSessions(providerId: string, scopes?: string[]): Promise<ReadonlyArray<AuthenticationSession>>;
94
126
  getLabel(providerId: string): string;
95
127
  supportsMultipleAccounts(providerId: string): boolean;
96
128
  login(providerId: string, scopes: string[]): Promise<AuthenticationSession>;
@@ -99,13 +131,20 @@ export interface AuthenticationService {
99
131
  signOutOfAccount(providerId: string, accountName: string): Promise<void>;
100
132
  }
101
133
 
134
+ export interface SessionChangeEvent {
135
+ providerId: string,
136
+ label: string,
137
+ event: AuthenticationProviderAuthenticationSessionsChangeEvent
138
+ }
139
+
102
140
  @injectable()
103
141
  export class AuthenticationServiceImpl implements AuthenticationService {
104
142
  private noAccountsMenuItem: Disposable | undefined;
105
143
  private noAccountsCommand: Command = { id: 'noAccounts' };
106
144
  private signInRequestItems = new Map<string, SessionRequestInfo>();
145
+ private sessionMap = new Map<string, DisposableCollection>();
107
146
 
108
- private authenticationProviders: Map<string, AuthenticationProvider> = new Map<string, AuthenticationProvider>();
147
+ protected authenticationProviders: Map<string, AuthenticationProvider> = new Map<string, AuthenticationProvider>();
109
148
 
110
149
  private onDidRegisterAuthenticationProviderEmitter: Emitter<AuthenticationProviderInformation> = new Emitter<AuthenticationProviderInformation>();
111
150
  readonly onDidRegisterAuthenticationProvider: Event<AuthenticationProviderInformation> = this.onDidRegisterAuthenticationProviderEmitter.event;
@@ -113,9 +152,8 @@ export class AuthenticationServiceImpl implements AuthenticationService {
113
152
  private onDidUnregisterAuthenticationProviderEmitter: Emitter<AuthenticationProviderInformation> = new Emitter<AuthenticationProviderInformation>();
114
153
  readonly onDidUnregisterAuthenticationProvider: Event<AuthenticationProviderInformation> = this.onDidUnregisterAuthenticationProviderEmitter.event;
115
154
 
116
- private onDidChangeSessionsEmitter: Emitter<{ providerId: string, label: string, event: AuthenticationSessionsChangeEvent }> =
117
- new Emitter<{ providerId: string, label: string, event: AuthenticationSessionsChangeEvent }>();
118
- readonly onDidChangeSessions: Event<{ providerId: string, label: string, event: AuthenticationSessionsChangeEvent }> = this.onDidChangeSessionsEmitter.event;
155
+ private onDidChangeSessionsEmitter: Emitter<SessionChangeEvent> = new Emitter<SessionChangeEvent>();
156
+ readonly onDidChangeSessions: Event<SessionChangeEvent> = this.onDidChangeSessionsEmitter.event;
119
157
 
120
158
  @inject(MenuModelRegistry) protected readonly menus: MenuModelRegistry;
121
159
  @inject(CommandRegistry) protected readonly commands: CommandRegistry;
@@ -123,48 +161,54 @@ export class AuthenticationServiceImpl implements AuthenticationService {
123
161
 
124
162
  @postConstruct()
125
163
  init(): void {
126
- const disposableMap = new Map<string, DisposableCollection>();
127
- this.onDidChangeSessions(async e => {
128
- if (e.event.added.length > 0) {
129
- const sessions = await this.getSessions(e.providerId);
130
- sessions.forEach(session => {
131
- if (sessions.find(s => disposableMap.get(s.id))) {
132
- return;
133
- }
134
- const disposables = new DisposableCollection();
135
- const commandId = `account-sign-out-${e.providerId}-${session.id}`;
136
- const command = this.commands.registerCommand({ id: commandId }, {
137
- execute: async () => {
138
- this.signOutOfAccount(e.providerId, session.account.label);
139
- }
140
- });
141
- const subSubMenuPath = [...ACCOUNTS_SUBMENU, 'account-sub-menu'];
142
- this.menus.registerSubmenu(subSubMenuPath, `${session.account.label} (${e.label})`);
143
- const menuAction = this.menus.registerMenuAction(subSubMenuPath, {
144
- label: 'Sign Out',
145
- commandId
146
- });
147
- disposables.push(menuAction);
148
- disposables.push(command);
149
- disposableMap.set(session.id, disposables);
150
- });
151
- }
152
- if (e.event.removed.length > 0) {
153
- e.event.removed.forEach(removed => {
154
- const toDispose = disposableMap.get(removed);
155
- if (toDispose) {
156
- toDispose.dispose();
157
- disposableMap.delete(removed);
158
- }
159
- });
160
- }
161
- });
164
+ this.onDidChangeSessions(event => this.handleSessionChange(event));
162
165
  this.commands.registerCommand(this.noAccountsCommand, {
163
- execute: () => {},
166
+ execute: () => { },
164
167
  isEnabled: () => false
165
168
  });
166
169
  }
167
170
 
171
+ protected async handleSessionChange(changeEvent: SessionChangeEvent): Promise<void> {
172
+ if (changeEvent.event.added.length > 0) {
173
+ const sessions = await this.getSessions(changeEvent.providerId);
174
+ sessions.forEach(session => {
175
+ if (!this.sessionMap.get(session.id)) {
176
+ this.sessionMap.set(session.id, this.createAccountUi(changeEvent.providerId, changeEvent.label, session));
177
+ }
178
+ });
179
+ }
180
+ for (const removed of changeEvent.event.removed) {
181
+ const sessionId = typeof removed === 'string' ? removed : removed?.id;
182
+ if (sessionId) {
183
+ this.sessionMap.get(sessionId)?.dispose();
184
+ this.sessionMap.delete(sessionId);
185
+ }
186
+ }
187
+ }
188
+
189
+ protected createAccountUi(providerId: string, providerLabel: string, session: AuthenticationSession): DisposableCollection {
190
+ // unregister old commands and menus if present (there is only one per account but there may be several sessions per account)
191
+ const providerAccountId = `account-sign-out-${providerId}-${session.account.id}`;
192
+ this.commands.unregisterCommand(providerAccountId);
193
+
194
+ const providerAccountSubmenu = [...ACCOUNTS_SUBMENU, providerAccountId];
195
+ this.menus.unregisterMenuAction({ commandId: providerAccountId }, providerAccountSubmenu);
196
+
197
+ // register new command and menu entry for the sessions account
198
+ const disposables = new DisposableCollection();
199
+ disposables.push(this.commands.registerCommand({ id: providerAccountId }, {
200
+ execute: async () => {
201
+ this.signOutOfAccount(providerId, session.account.label);
202
+ }
203
+ }));
204
+ this.menus.registerSubmenu(providerAccountSubmenu, `${session.account.label} (${providerLabel})`);
205
+ disposables.push(this.menus.registerMenuAction(providerAccountSubmenu, {
206
+ label: nls.localizeByDefault('Sign Out'),
207
+ commandId: providerAccountId
208
+ }));
209
+ return disposables;
210
+ }
211
+
168
212
  getProviderIds(): string[] {
169
213
  const providerIds: string[] = [];
170
214
  this.authenticationProviders.forEach(provider => {
@@ -219,7 +263,7 @@ export class AuthenticationServiceImpl implements AuthenticationService {
219
263
  }
220
264
  }
221
265
 
222
- async updateSessions(id: string, event: AuthenticationSessionsChangeEvent): Promise<void> {
266
+ async updateSessions(id: string, event: AuthenticationProviderAuthenticationSessionsChangeEvent): Promise<void> {
223
267
  const provider = this.authenticationProviders.get(id);
224
268
  if (provider) {
225
269
  await provider.updateSessionItems(event);
@@ -264,11 +308,11 @@ export class AuthenticationServiceImpl implements AuthenticationService {
264
308
  // Activate has already been called for the authentication provider, but it cannot block on registering itself
265
309
  // since this is sync and returns a disposable. So, wait for registration event to fire that indicates the
266
310
  // provider is now in the map.
267
- await new Promise((resolve, _) => {
311
+ await new Promise<void>((resolve, _) => {
268
312
  this.onDidRegisterAuthenticationProvider(e => {
269
313
  if (e.id === providerId) {
270
314
  provider = this.authenticationProviders.get(providerId);
271
- resolve();
315
+ resolve(undefined);
272
316
  }
273
317
  });
274
318
  });
@@ -344,10 +388,10 @@ export class AuthenticationServiceImpl implements AuthenticationService {
344
388
  }
345
389
  }
346
390
 
347
- async getSessions(id: string): Promise<ReadonlyArray<AuthenticationSession>> {
391
+ async getSessions(id: string, scopes?: string[]): Promise<ReadonlyArray<AuthenticationSession>> {
348
392
  const authProvider = this.authenticationProviders.get(id);
349
393
  if (authProvider) {
350
- return authProvider.getSessions();
394
+ return authProvider.getSessions(scopes);
351
395
  } else {
352
396
  throw new Error(`No authentication provider '${id}' is currently registered.`);
353
397
  }
@@ -119,6 +119,7 @@ import {
119
119
  } from './breadcrumbs';
120
120
  import { RendererHost } from './widgets';
121
121
  import { TooltipService, TooltipServiceImpl } from './tooltip-service';
122
+ import { bindFrontendStopwatch, bindBackendStopwatch } from './performance';
122
123
 
123
124
  export { bindResourceProvider, bindMessageService, bindPreferenceService };
124
125
 
@@ -390,4 +391,7 @@ export const frontendApplicationModule = new ContainerModule((bind, unbind, isBo
390
391
  child.bind(Coordinate).toConstantValue(position);
391
392
  return child.get(BreadcrumbPopupContainer);
392
393
  });
394
+
395
+ bindFrontendStopwatch(bind);
396
+ bindBackendStopwatch(bind);
393
397
  });
@@ -15,7 +15,7 @@
15
15
  ********************************************************************************/
16
16
 
17
17
  import { inject, injectable, named } from 'inversify';
18
- import { ContributionProvider, CommandRegistry, MenuModelRegistry, isOSX } from '../common';
18
+ import { ContributionProvider, CommandRegistry, MenuModelRegistry, isOSX, BackendStopwatch, LogLevel, Stopwatch } from '../common';
19
19
  import { MaybePromise } from '../common/types';
20
20
  import { KeybindingRegistry } from './keybinding';
21
21
  import { Widget } from './widgets';
@@ -127,6 +127,12 @@ export class FrontendApplication {
127
127
  @inject(TooltipService)
128
128
  protected readonly tooltipService: TooltipService;
129
129
 
130
+ @inject(Stopwatch)
131
+ protected readonly stopwatch: Stopwatch;
132
+
133
+ @inject(BackendStopwatch)
134
+ protected readonly backendStopwatch: BackendStopwatch;
135
+
130
136
  constructor(
131
137
  @inject(CommandRegistry) protected readonly commands: CommandRegistry,
132
138
  @inject(MenuModelRegistry) protected readonly menus: MenuModelRegistry,
@@ -152,7 +158,9 @@ export class FrontendApplication {
152
158
  * - reveal the application shell if it was hidden by a startup indicator
153
159
  */
154
160
  async start(): Promise<void> {
155
- await this.startContributions();
161
+ const startup = this.backendStopwatch.start('frontend');
162
+
163
+ await this.measure('startContributions', () => this.startContributions(), 'Start frontend contributions', false);
156
164
  this.stateService.state = 'started_contributions';
157
165
 
158
166
  const host = await this.getHost();
@@ -161,13 +169,15 @@ export class FrontendApplication {
161
169
  await animationFrame();
162
170
  this.stateService.state = 'attached_shell';
163
171
 
164
- await this.initializeLayout();
172
+ await this.measure('initializeLayout', () => this.initializeLayout(), 'Initialize the workbench layout', false);
165
173
  this.stateService.state = 'initialized_layout';
166
174
  await this.fireOnDidInitializeLayout();
167
175
 
168
- await this.revealShell(host);
176
+ await this.measure('revealShell', () => this.revealShell(host), 'Replace loading indicator with ready workbench UI (animation)', false);
169
177
  this.registerEventListeners();
170
178
  this.stateService.state = 'ready';
179
+
180
+ startup.then(idToken => this.backendStopwatch.stop(idToken, 'Frontend application start', []));
171
181
  }
172
182
 
173
183
  /**
@@ -266,7 +276,6 @@ export class FrontendApplication {
266
276
  return new Promise(resolve => {
267
277
  window.requestAnimationFrame(() => {
268
278
  startupElem.classList.add('theia-hidden');
269
- console.log(`Finished loading frontend application after ${(performance.now() / 1000).toFixed(3)} seconds`);
270
279
  const preloadStyle = window.getComputedStyle(startupElem);
271
280
  const transitionDuration = parseCssTime(preloadStyle.transitionDuration, 0);
272
281
  window.setTimeout(() => {
@@ -408,23 +417,9 @@ export class FrontendApplication {
408
417
  console.info('<<< All frontend contributions have been stopped.');
409
418
  }
410
419
 
411
- protected async measure<T>(name: string, fn: () => MaybePromise<T>): Promise<T> {
412
- const startMark = name + '-start';
413
- const endMark = name + '-end';
414
- performance.mark(startMark);
415
- const result = await fn();
416
- performance.mark(endMark);
417
- performance.measure(name, startMark, endMark);
418
- for (const item of performance.getEntriesByName(name)) {
419
- const contribution = `Frontend ${item.name}`;
420
- if (item.duration > TIMER_WARNING_THRESHOLD) {
421
- console.warn(`${contribution} is slow, took: ${item.duration.toFixed(1)} ms`);
422
- } else {
423
- console.debug(`${contribution} took: ${item.duration.toFixed(1)} ms`);
424
- }
425
- }
426
- performance.clearMeasures(name);
427
- return result;
420
+ protected async measure<T>(name: string, fn: () => MaybePromise<T>, message = `Frontend ${name}`, threshold = true): Promise<T> {
421
+ return this.stopwatch.startAsync(name, message, fn,
422
+ threshold ? { thresholdMillis: TIMER_WARNING_THRESHOLD, defaultLogLevel: LogLevel.DEBUG } : {});
428
423
  }
429
424
 
430
425
  }
@@ -0,0 +1,62 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2019, 2021 TypeFox, 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
+ import { injectable } from 'inversify';
18
+ import { Measurement, MeasurementOptions, Stopwatch } from '../../common';
19
+
20
+ @injectable()
21
+ export class FrontendStopwatch extends Stopwatch {
22
+
23
+ constructor() {
24
+ super({
25
+ owner: 'frontend',
26
+ now: () => performance.now(),
27
+ });
28
+ }
29
+
30
+ start(name: string, options?: MeasurementOptions): Measurement {
31
+ const startMarker = `${name}-start`;
32
+ const endMarker = `${name}-end`;
33
+ performance.clearMeasures(name);
34
+ performance.clearMarks(startMarker);
35
+ performance.clearMarks(endMarker);
36
+
37
+ performance.mark(startMarker);
38
+
39
+ return this.createMeasurement(name, () => {
40
+ performance.mark(endMarker);
41
+
42
+ let duration: number;
43
+
44
+ try {
45
+ performance.measure(name, startMarker, endMarker);
46
+
47
+ const entries = performance.getEntriesByName(name);
48
+ // If no entries, then performance measurement was disabled or failed, so
49
+ // signal that with a `NaN` result
50
+ duration = entries.length > 0 ? entries[0].duration : Number.NaN;
51
+ } catch (e) {
52
+ console.warn(e);
53
+ duration = Number.NaN;
54
+ }
55
+
56
+ performance.clearMeasures(name);
57
+ performance.clearMarks(startMarker);
58
+ performance.clearMarks(endMarker);
59
+ return duration;
60
+ }, options);
61
+ }
62
+ };
@@ -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 './frontend-stopwatch';
18
+ export * from './measurement-frontend-bindings';
@@ -0,0 +1,31 @@
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
+ import { interfaces } from 'inversify';
18
+ import { BackendStopwatch, Stopwatch, stopwatchPath } from '../../common';
19
+ import { WebSocketConnectionProvider } from '../messaging';
20
+ import { FrontendStopwatch } from './frontend-stopwatch';
21
+
22
+ export function bindFrontendStopwatch(bind: interfaces.Bind): interfaces.BindingWhenOnSyntax<Stopwatch> {
23
+ return bind(Stopwatch).to(FrontendStopwatch).inSingletonScope();
24
+ }
25
+
26
+ export function bindBackendStopwatch(bind: interfaces.Bind): interfaces.BindingWhenOnSyntax<unknown> {
27
+ return bind(BackendStopwatch).toDynamicValue(({ container }) => {
28
+ const connection = container.get(WebSocketConnectionProvider);
29
+ return connection.createProxy<BackendStopwatch>(stopwatchPath);
30
+ }).inSingletonScope();
31
+ }
@@ -42,21 +42,35 @@ export class PreferenceLanguageOverrideService {
42
42
  return PreferenceSchemaProperties.is(value) && OVERRIDE_PROPERTY_PATTERN.test(name);
43
43
  }
44
44
 
45
+ /**
46
+ * @param overrideIdentifier the language id associated for a language override, e.g. `typescript`
47
+ * @returns the form used to mark language overrides in preference files, e.g. `[typescript]`
48
+ */
49
+ markLanguageOverride(overrideIdentifier: string): string {
50
+ return `[${overrideIdentifier}]`;
51
+ }
52
+
53
+ /**
54
+ * @returns the flat JSON path to an overridden preference, e.g. [typescript].editor.tabSize.
55
+ */
45
56
  overridePreferenceName({ preferenceName, overrideIdentifier }: OverridePreferenceName): string {
46
- return `[${overrideIdentifier}].${preferenceName}`;
57
+ return `${this.markLanguageOverride(overrideIdentifier)}.${preferenceName}`;
47
58
  }
48
59
 
60
+ /**
61
+ * @returns an OverridePreferenceName if the `name` contains a language override, e.g. [typescript].editor.tabSize.
62
+ */
49
63
  overriddenPreferenceName(name: string): OverridePreferenceName | undefined {
50
64
  const index = name.indexOf('.');
51
65
  if (index === -1) {
52
66
  return undefined;
53
67
  }
54
- const matches = name.substr(0, index).match(OVERRIDE_PROPERTY_PATTERN);
68
+ const matches = name.substring(0, index).match(OVERRIDE_PROPERTY_PATTERN);
55
69
  const overrideIdentifier = matches && matches[1];
56
70
  if (!overrideIdentifier || !this.overrideIdentifiers.has(overrideIdentifier)) {
57
71
  return undefined;
58
72
  }
59
- const preferenceName = name.substr(index + 1);
73
+ const preferenceName = name.substring(index + 1);
60
74
  return { preferenceName, overrideIdentifier };
61
75
  }
62
76
 
@@ -93,51 +93,93 @@ export namespace Saveable {
93
93
  await saveable.save(options);
94
94
  }
95
95
  }
96
- export function apply(widget: Widget): SaveableWidget | undefined {
97
- if (SaveableWidget.is(widget)) {
98
- return widget;
99
- }
100
- const saveable = Saveable.get(widget);
101
- if (!saveable) {
102
- return undefined;
96
+
97
+ async function closeWithoutSaving(this: PostCreationSaveableWidget, doRevert: boolean = true): Promise<void> {
98
+ const saveable = get(this);
99
+ if (saveable && doRevert && saveable.dirty && saveable.revert) {
100
+ await saveable.revert();
103
101
  }
104
- setDirty(widget, saveable.dirty);
105
- saveable.onDirtyChanged(() => setDirty(widget, saveable.dirty));
106
- const closeWidget = widget.close.bind(widget);
107
- const closeWithoutSaving: SaveableWidget['closeWithoutSaving'] = async () => {
108
- if (saveable.dirty && saveable.revert) {
109
- await saveable.revert();
110
- }
111
- closeWidget();
112
- return waitForClosed(widget);
113
- };
102
+ this[close]();
103
+ return waitForClosed(this);
104
+ }
105
+
106
+ function createCloseWithSaving(getOtherSaveables?: () => Array<Widget | SaveableWidget>): (this: SaveableWidget, options?: SaveableWidget.CloseOptions) => Promise<void> {
114
107
  let closing = false;
115
- const closeWithSaving: SaveableWidget['closeWithSaving'] = async options => {
116
- if (closing) {
117
- return;
118
- }
108
+ return async function (this: SaveableWidget, options: SaveableWidget.CloseOptions): Promise<void> {
109
+ if (closing) { return; }
110
+ const saveable = get(this);
111
+ if (!saveable) { return; }
119
112
  closing = true;
120
113
  try {
121
114
  const result = await shouldSave(saveable, () => {
115
+ const notLastWithDocument = !closingWidgetWouldLoseSaveable(this, getOtherSaveables?.() ?? []);
116
+ if (notLastWithDocument) {
117
+ return this.closeWithoutSaving(false).then(() => undefined);
118
+ }
122
119
  if (options && options.shouldSave) {
123
120
  return options.shouldSave();
124
121
  }
125
- return new ShouldSaveDialog(widget).open();
122
+ return new ShouldSaveDialog(this).open();
126
123
  });
127
124
  if (typeof result === 'boolean') {
128
125
  if (result) {
129
- await Saveable.save(widget);
126
+ await Saveable.save(this);
130
127
  }
131
- await closeWithoutSaving();
128
+ await this.closeWithoutSaving();
132
129
  }
133
130
  } finally {
134
131
  closing = false;
135
132
  }
136
133
  };
137
- return Object.assign(widget, {
134
+ }
135
+
136
+ export async function confirmSaveBeforeClose(toClose: Iterable<Widget>, others: Widget[]): Promise<boolean | undefined> {
137
+ for (const widget of toClose) {
138
+ const saveable = Saveable.get(widget);
139
+ if (saveable?.dirty) {
140
+ if (!closingWidgetWouldLoseSaveable(widget, others)) {
141
+ continue;
142
+ }
143
+ const userWantsToSave = await new ShouldSaveDialog(widget).open();
144
+ if (userWantsToSave === undefined) { // User clicked cancel.
145
+ return undefined;
146
+ } else if (userWantsToSave) {
147
+ await saveable.save();
148
+ } else {
149
+ await saveable.revert?.();
150
+ }
151
+ }
152
+ }
153
+ return true;
154
+ }
155
+
156
+ /**
157
+ * @param widget the widget that may be closed
158
+ * @param others widgets that will not be closed.
159
+ * @returns `true` if widget is saveable and no widget among the `others` refers to the same saveable. `false` otherwise.
160
+ */
161
+ function closingWidgetWouldLoseSaveable(widget: Widget, others: Widget[]): boolean {
162
+ const saveable = get(widget);
163
+ return !!saveable && !others.some(otherWidget => otherWidget !== widget && get(otherWidget) === saveable);
164
+ }
165
+
166
+ export function apply(widget: Widget, getOtherSaveables?: () => Array<Widget | SaveableWidget>): SaveableWidget | undefined {
167
+ if (SaveableWidget.is(widget)) {
168
+ return widget;
169
+ }
170
+ const saveable = Saveable.get(widget);
171
+ if (!saveable) {
172
+ return undefined;
173
+ }
174
+ const saveableWidget = widget as SaveableWidget;
175
+ setDirty(saveableWidget, saveable.dirty);
176
+ saveable.onDirtyChanged(() => setDirty(saveableWidget, saveable.dirty));
177
+ const closeWithSaving = createCloseWithSaving(getOtherSaveables);
178
+ return Object.assign(saveableWidget, {
138
179
  closeWithoutSaving,
139
180
  closeWithSaving,
140
- close: () => closeWithSaving()
181
+ close: closeWithSaving,
182
+ [close]: saveableWidget.close,
141
183
  });
142
184
  }
143
185
  export async function shouldSave(saveable: Saveable, cb: () => MaybePromise<boolean | undefined>): Promise<boolean | undefined> {
@@ -154,9 +196,24 @@ export namespace Saveable {
154
196
  }
155
197
 
156
198
  export interface SaveableWidget extends Widget {
157
- closeWithoutSaving(): Promise<void>;
199
+ /**
200
+ * @param doRevert whether the saveable should be reverted before being saved. Defaults to `true`.
201
+ */
202
+ closeWithoutSaving(doRevert?: boolean): Promise<void>;
158
203
  closeWithSaving(options?: SaveableWidget.CloseOptions): Promise<void>;
159
204
  }
205
+
206
+ export const close = Symbol('close');
207
+ /**
208
+ * An interface describing saveable widgets that are created by the `Saveable.apply` function.
209
+ * The original `close` function is reassigned to a locally-defined `Symbol`
210
+ */
211
+ export interface PostCreationSaveableWidget extends SaveableWidget {
212
+ /**
213
+ * The original `close` function of the widget
214
+ */
215
+ [close](): void;
216
+ }
160
217
  export namespace SaveableWidget {
161
218
  export function is(widget: Widget | undefined): widget is SaveableWidget {
162
219
  return !!widget && 'closeWithoutSaving' in widget;