@theia/plugin-ext 1.23.0-next.3 → 1.23.0-next.35

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 (413) hide show
  1. package/lib/common/character-classifier.js +2 -2
  2. package/lib/common/character-classifier.js.map +1 -1
  3. package/lib/common/index.js +1 -1
  4. package/lib/common/objects.js +3 -3
  5. package/lib/common/objects.js.map +1 -1
  6. package/lib/common/plugin-api-rpc-model.d.ts +13 -19
  7. package/lib/common/plugin-api-rpc-model.d.ts.map +1 -1
  8. package/lib/common/plugin-api-rpc-model.js.map +1 -1
  9. package/lib/common/plugin-api-rpc.d.ts +33 -13
  10. package/lib/common/plugin-api-rpc.d.ts.map +1 -1
  11. package/lib/common/plugin-api-rpc.js +64 -62
  12. package/lib/common/plugin-api-rpc.js.map +1 -1
  13. package/lib/common/plugin-protocol.d.ts +6 -0
  14. package/lib/common/plugin-protocol.d.ts.map +1 -1
  15. package/lib/common/plugin-protocol.js +6 -1
  16. package/lib/common/plugin-protocol.js.map +1 -1
  17. package/lib/hosted/browser/hosted-plugin-watcher.js +1 -1
  18. package/lib/hosted/browser/hosted-plugin-watcher.js.map +1 -1
  19. package/lib/hosted/browser/hosted-plugin.d.ts +3 -2
  20. package/lib/hosted/browser/hosted-plugin.d.ts.map +1 -1
  21. package/lib/hosted/browser/hosted-plugin.js +53 -68
  22. package/lib/hosted/browser/hosted-plugin.js.map +1 -1
  23. package/lib/hosted/browser/plugin-worker.js +1 -1
  24. package/lib/hosted/browser/plugin-worker.js.map +1 -1
  25. package/lib/hosted/browser/worker/worker-main.js +4 -4
  26. package/lib/hosted/browser/worker/worker-main.js.map +1 -1
  27. package/lib/hosted/node/hosted-plugin-cli-contribution.js +1 -1
  28. package/lib/hosted/node/hosted-plugin-cli-contribution.js.map +1 -1
  29. package/lib/hosted/node/hosted-plugin-deployer-handler.d.ts +2 -0
  30. package/lib/hosted/node/hosted-plugin-deployer-handler.d.ts.map +1 -1
  31. package/lib/hosted/node/hosted-plugin-deployer-handler.js +25 -7
  32. package/lib/hosted/node/hosted-plugin-deployer-handler.js.map +1 -1
  33. package/lib/hosted/node/hosted-plugin-localization-service.js +3 -3
  34. package/lib/hosted/node/hosted-plugin-localization-service.js.map +1 -1
  35. package/lib/hosted/node/hosted-plugin-process.js +9 -9
  36. package/lib/hosted/node/hosted-plugin-process.js.map +1 -1
  37. package/lib/hosted/node/hosted-plugin.js +6 -6
  38. package/lib/hosted/node/hosted-plugin.js.map +1 -1
  39. package/lib/hosted/node/metadata-scanner.js +2 -2
  40. package/lib/hosted/node/metadata-scanner.js.map +1 -1
  41. package/lib/hosted/node/plugin-ext-hosted-backend-module.js +2 -2
  42. package/lib/hosted/node/plugin-ext-hosted-backend-module.js.map +1 -1
  43. package/lib/hosted/node/plugin-host-rpc.js +6 -6
  44. package/lib/hosted/node/plugin-host-rpc.js.map +1 -1
  45. package/lib/hosted/node/plugin-reader.d.ts.map +1 -1
  46. package/lib/hosted/node/plugin-reader.js +9 -8
  47. package/lib/hosted/node/plugin-reader.js.map +1 -1
  48. package/lib/hosted/node/plugin-service.js +9 -9
  49. package/lib/hosted/node/plugin-service.js.map +1 -1
  50. package/lib/hosted/node/scanners/backend-init-theia.js +2 -1
  51. package/lib/hosted/node/scanners/backend-init-theia.js.map +1 -1
  52. package/lib/hosted/node/scanners/file-plugin-uri-factory.js +1 -1
  53. package/lib/hosted/node/scanners/file-plugin-uri-factory.js.map +1 -1
  54. package/lib/hosted/node/scanners/grammars-reader.js +1 -1
  55. package/lib/hosted/node/scanners/grammars-reader.js.map +1 -1
  56. package/lib/hosted/node/scanners/scanner-theia.d.ts.map +1 -1
  57. package/lib/hosted/node/scanners/scanner-theia.js +9 -8
  58. package/lib/hosted/node/scanners/scanner-theia.js.map +1 -1
  59. package/lib/hosted/node-electron/plugin-ext-hosted-electron-backend-module.js +1 -1
  60. package/lib/hosted/node-electron/plugin-ext-hosted-electron-backend-module.js.map +1 -1
  61. package/lib/hosted/node-electron/scanner-theia-electron.d.ts.map +1 -1
  62. package/lib/hosted/node-electron/scanner-theia-electron.js +1 -1
  63. package/lib/hosted/node-electron/scanner-theia-electron.js.map +1 -1
  64. package/lib/main/browser/authentication-main.d.ts +18 -11
  65. package/lib/main/browser/authentication-main.d.ts.map +1 -1
  66. package/lib/main/browser/authentication-main.js +111 -67
  67. package/lib/main/browser/authentication-main.js.map +1 -1
  68. package/lib/main/browser/commands.js +3 -3
  69. package/lib/main/browser/commands.js.map +1 -1
  70. package/lib/main/browser/comments/comment-thread-widget.d.ts.map +1 -1
  71. package/lib/main/browser/comments/comment-thread-widget.js.map +1 -1
  72. package/lib/main/browser/comments/comments-context-key-service.d.ts +1 -1
  73. package/lib/main/browser/comments/comments-context-key-service.d.ts.map +1 -1
  74. package/lib/main/browser/comments/comments-context-key-service.js +3 -3
  75. package/lib/main/browser/comments/comments-context-key-service.js.map +1 -1
  76. package/lib/main/browser/comments/comments-contribution.js +8 -8
  77. package/lib/main/browser/comments/comments-contribution.js.map +1 -1
  78. package/lib/main/browser/comments/comments-decorator.js +1 -1
  79. package/lib/main/browser/comments/comments-decorator.js.map +1 -1
  80. package/lib/main/browser/comments/comments-main.js +1 -1
  81. package/lib/main/browser/comments/comments-main.js.map +1 -1
  82. package/lib/main/browser/comments/comments-service.js +1 -1
  83. package/lib/main/browser/comments/comments-service.js.map +1 -1
  84. package/lib/main/browser/custom-editors/custom-editor-contribution.js +2 -2
  85. package/lib/main/browser/custom-editors/custom-editor-contribution.js.map +1 -1
  86. package/lib/main/browser/custom-editors/custom-editor-opener.js +3 -3
  87. package/lib/main/browser/custom-editors/custom-editor-opener.js.map +1 -1
  88. package/lib/main/browser/custom-editors/custom-editor-service.js +1 -1
  89. package/lib/main/browser/custom-editors/custom-editor-service.js.map +1 -1
  90. package/lib/main/browser/custom-editors/custom-editor-widget.d.ts.map +1 -1
  91. package/lib/main/browser/custom-editors/custom-editor-widget.js +3 -3
  92. package/lib/main/browser/custom-editors/custom-editor-widget.js.map +1 -1
  93. package/lib/main/browser/custom-editors/custom-editors-main.js.map +1 -1
  94. package/lib/main/browser/custom-editors/paths.js +1 -1
  95. package/lib/main/browser/custom-editors/paths.js.map +1 -1
  96. package/lib/main/browser/custom-editors/plugin-custom-editor-registry.js +8 -8
  97. package/lib/main/browser/custom-editors/plugin-custom-editor-registry.js.map +1 -1
  98. package/lib/main/browser/custom-editors/undo-redo-service.js +1 -1
  99. package/lib/main/browser/custom-editors/undo-redo-service.js.map +1 -1
  100. package/lib/main/browser/debug/plugin-debug-service.js +4 -4
  101. package/lib/main/browser/debug/plugin-debug-service.js.map +1 -1
  102. package/lib/main/browser/debug/plugin-debug-session-contribution-registry.js +4 -4
  103. package/lib/main/browser/debug/plugin-debug-session-contribution-registry.js.map +1 -1
  104. package/lib/main/browser/debug/plugin-debug-session-factory.d.ts.map +1 -1
  105. package/lib/main/browser/debug/plugin-debug-session-factory.js.map +1 -1
  106. package/lib/main/browser/dialogs/modal-notification.d.ts.map +1 -1
  107. package/lib/main/browser/dialogs/modal-notification.js +4 -4
  108. package/lib/main/browser/dialogs/modal-notification.js.map +1 -1
  109. package/lib/main/browser/dialogs-main.js.map +1 -1
  110. package/lib/main/browser/documents-main.js +1 -1
  111. package/lib/main/browser/documents-main.js.map +1 -1
  112. package/lib/main/browser/editor/untitled-resource.js +2 -2
  113. package/lib/main/browser/editor/untitled-resource.js.map +1 -1
  114. package/lib/main/browser/keybindings/keybindings-contribution-handler.js +2 -2
  115. package/lib/main/browser/keybindings/keybindings-contribution-handler.js.map +1 -1
  116. package/lib/main/browser/languages-main.d.ts +1 -0
  117. package/lib/main/browser/languages-main.d.ts.map +1 -1
  118. package/lib/main/browser/languages-main.js +23 -15
  119. package/lib/main/browser/languages-main.js.map +1 -1
  120. package/lib/main/browser/main-context.d.ts.map +1 -1
  121. package/lib/main/browser/main-context.js +3 -0
  122. package/lib/main/browser/main-context.js.map +1 -1
  123. package/lib/main/browser/main-file-system-event-service.js.map +1 -1
  124. package/lib/main/browser/menus/menus-contribution-handler.js +14 -14
  125. package/lib/main/browser/menus/menus-contribution-handler.js.map +1 -1
  126. package/lib/main/browser/output-channel-registry-main.js +2 -2
  127. package/lib/main/browser/output-channel-registry-main.js.map +1 -1
  128. package/lib/main/browser/plugin-authentication-service.d.ts +29 -0
  129. package/lib/main/browser/plugin-authentication-service.d.ts.map +1 -0
  130. package/lib/main/browser/plugin-authentication-service.js +81 -0
  131. package/lib/main/browser/plugin-authentication-service.js.map +1 -0
  132. package/lib/main/browser/plugin-contribution-handler.d.ts +1 -1
  133. package/lib/main/browser/plugin-contribution-handler.d.ts.map +1 -1
  134. package/lib/main/browser/plugin-contribution-handler.js +23 -23
  135. package/lib/main/browser/plugin-contribution-handler.js.map +1 -1
  136. package/lib/main/browser/plugin-ext-deploy-command.js +4 -4
  137. package/lib/main/browser/plugin-ext-deploy-command.js.map +1 -1
  138. package/lib/main/browser/plugin-ext-frontend-module.d.ts.map +1 -1
  139. package/lib/main/browser/plugin-ext-frontend-module.js +14 -10
  140. package/lib/main/browser/plugin-ext-frontend-module.js.map +1 -1
  141. package/lib/main/browser/plugin-ext-widget.d.ts.map +1 -1
  142. package/lib/main/browser/plugin-ext-widget.js +6 -6
  143. package/lib/main/browser/plugin-ext-widget.js.map +1 -1
  144. package/lib/main/browser/plugin-frontend-contribution.js +3 -3
  145. package/lib/main/browser/plugin-frontend-contribution.js.map +1 -1
  146. package/lib/main/browser/plugin-frontend-view-contribution.js +1 -1
  147. package/lib/main/browser/plugin-frontend-view-contribution.js.map +1 -1
  148. package/lib/main/browser/plugin-icon-theme-service.js +11 -11
  149. package/lib/main/browser/plugin-icon-theme-service.js.map +1 -1
  150. package/lib/main/browser/plugin-shared-style.js +1 -1
  151. package/lib/main/browser/plugin-shared-style.js.map +1 -1
  152. package/lib/main/browser/plugin-storage.js.map +1 -1
  153. package/lib/main/browser/quick-open-main.js +1 -1
  154. package/lib/main/browser/quick-open-main.js.map +1 -1
  155. package/lib/main/browser/scm-main.js.map +1 -1
  156. package/lib/main/browser/selection-provider-command.js +3 -3
  157. package/lib/main/browser/selection-provider-command.js.map +1 -1
  158. package/lib/main/browser/text-editor-main.js +1 -1
  159. package/lib/main/browser/text-editor-main.js.map +1 -1
  160. package/lib/main/browser/text-editor-model-service.js +3 -3
  161. package/lib/main/browser/text-editor-model-service.js.map +1 -1
  162. package/lib/main/browser/text-editors-main.js +9 -9
  163. package/lib/main/browser/text-editors-main.js.map +1 -1
  164. package/lib/main/browser/view/plugin-tree-view-node-label-provider.js +3 -3
  165. package/lib/main/browser/view/plugin-tree-view-node-label-provider.js.map +1 -1
  166. package/lib/main/browser/view/plugin-view-registry.d.ts +8 -4
  167. package/lib/main/browser/view/plugin-view-registry.d.ts.map +1 -1
  168. package/lib/main/browser/view/plugin-view-registry.js +74 -18
  169. package/lib/main/browser/view/plugin-view-registry.js.map +1 -1
  170. package/lib/main/browser/view/plugin-view-widget.d.ts.map +1 -1
  171. package/lib/main/browser/view/plugin-view-widget.js +7 -7
  172. package/lib/main/browser/view/plugin-view-widget.js.map +1 -1
  173. package/lib/main/browser/view/tree-view-widget.d.ts +0 -2
  174. package/lib/main/browser/view/tree-view-widget.d.ts.map +1 -1
  175. package/lib/main/browser/view/tree-view-widget.js +16 -18
  176. package/lib/main/browser/view/tree-view-widget.js.map +1 -1
  177. package/lib/main/browser/view/view-context-key-service.js +3 -3
  178. package/lib/main/browser/view/view-context-key-service.js.map +1 -1
  179. package/lib/main/browser/view-column-service.js +4 -4
  180. package/lib/main/browser/view-column-service.js.map +1 -1
  181. package/lib/main/browser/webview/webview-environment.js +3 -3
  182. package/lib/main/browser/webview/webview-environment.js.map +1 -1
  183. package/lib/main/browser/webview/webview-frontend-security-warnings.js +4 -4
  184. package/lib/main/browser/webview/webview-frontend-security-warnings.js.map +1 -1
  185. package/lib/main/browser/webview/webview-preferences.js +1 -1
  186. package/lib/main/browser/webview/webview-preferences.js.map +1 -1
  187. package/lib/main/browser/webview/webview-resource-cache.js +1 -1
  188. package/lib/main/browser/webview/webview-resource-cache.js.map +1 -1
  189. package/lib/main/browser/webview/webview-theme-data-provider.d.ts +2 -2
  190. package/lib/main/browser/webview/webview-theme-data-provider.d.ts.map +1 -1
  191. package/lib/main/browser/webview/webview-theme-data-provider.js +5 -5
  192. package/lib/main/browser/webview/webview-theme-data-provider.js.map +1 -1
  193. package/lib/main/browser/webview/webview.d.ts.map +1 -1
  194. package/lib/main/browser/webview/webview.js +17 -17
  195. package/lib/main/browser/webview/webview.js.map +1 -1
  196. package/lib/main/browser/webview-views/webview-views-main.d.ts +46 -0
  197. package/lib/main/browser/webview-views/webview-views-main.d.ts.map +1 -0
  198. package/lib/main/browser/webview-views/webview-views-main.js +127 -0
  199. package/lib/main/browser/webview-views/webview-views-main.js.map +1 -0
  200. package/lib/main/browser/webview-views/webview-views.d.ts +30 -0
  201. package/lib/main/browser/webview-views/webview-views.d.ts.map +1 -0
  202. package/lib/main/browser/webview-views/webview-views.js +23 -0
  203. package/lib/main/browser/webview-views/webview-views.js.map +1 -0
  204. package/lib/main/browser/webviews-main.js.map +1 -1
  205. package/lib/main/browser/window-state-main.js +1 -1
  206. package/lib/main/browser/window-state-main.js.map +1 -1
  207. package/lib/main/browser/workspace-main.d.ts +2 -0
  208. package/lib/main/browser/workspace-main.d.ts.map +1 -1
  209. package/lib/main/browser/workspace-main.js +6 -1
  210. package/lib/main/browser/workspace-main.js.map +1 -1
  211. package/lib/main/common/plugin-theia-environment.js +2 -2
  212. package/lib/main/common/plugin-theia-environment.js.map +1 -1
  213. package/lib/main/electron-browser/webview/electron-webview-widget-factory.d.ts.map +1 -1
  214. package/lib/main/electron-browser/webview/electron-webview-widget-factory.js.map +1 -1
  215. package/lib/main/node/handlers/plugin-theia-directory-handler.js +1 -1
  216. package/lib/main/node/handlers/plugin-theia-directory-handler.js.map +1 -1
  217. package/lib/main/node/handlers/plugin-theia-file-handler.js +3 -3
  218. package/lib/main/node/handlers/plugin-theia-file-handler.js.map +1 -1
  219. package/lib/main/node/paths/plugin-paths-service.js +7 -7
  220. package/lib/main/node/paths/plugin-paths-service.js.map +1 -1
  221. package/lib/main/node/plugin-cli-contribution.js +1 -1
  222. package/lib/main/node/plugin-cli-contribution.js.map +1 -1
  223. package/lib/main/node/plugin-deployer-contribution.js +3 -3
  224. package/lib/main/node/plugin-deployer-contribution.js.map +1 -1
  225. package/lib/main/node/plugin-deployer-impl.d.ts +3 -1
  226. package/lib/main/node/plugin-deployer-impl.d.ts.map +1 -1
  227. package/lib/main/node/plugin-deployer-impl.js +24 -19
  228. package/lib/main/node/plugin-deployer-impl.js.map +1 -1
  229. package/lib/main/node/plugin-deployer-proxy-entry-impl.js +1 -1
  230. package/lib/main/node/plugin-deployer-proxy-entry-impl.js.map +1 -1
  231. package/lib/main/node/plugin-ext-backend-module.js +1 -1
  232. package/lib/main/node/plugin-ext-backend-module.js.map +1 -1
  233. package/lib/main/node/plugin-github-resolver.js +1 -1
  234. package/lib/main/node/plugin-github-resolver.js.map +1 -1
  235. package/lib/main/node/plugin-http-resolver.js +1 -1
  236. package/lib/main/node/plugin-http-resolver.js.map +1 -1
  237. package/lib/main/node/plugin-server-handler.js +3 -3
  238. package/lib/main/node/plugin-server-handler.js.map +1 -1
  239. package/lib/main/node/plugin-service.js +2 -2
  240. package/lib/main/node/plugin-service.js.map +1 -1
  241. package/lib/main/node/plugin-theia-deployer-participant.js +2 -2
  242. package/lib/main/node/plugin-theia-deployer-participant.js.map +1 -1
  243. package/lib/main/node/plugins-key-value-storage.js +4 -4
  244. package/lib/main/node/plugins-key-value-storage.js.map +1 -1
  245. package/lib/main/node/resolvers/local-directory-plugin-deployer-resolver.js +1 -1
  246. package/lib/main/node/resolvers/local-directory-plugin-deployer-resolver.js.map +1 -1
  247. package/lib/main/node/resolvers/local-file-plugin-deployer-resolver.js +1 -1
  248. package/lib/main/node/resolvers/local-file-plugin-deployer-resolver.js.map +1 -1
  249. package/lib/main/node/resolvers/local-plugin-deployer-resolver.js +1 -1
  250. package/lib/main/node/resolvers/local-plugin-deployer-resolver.js.map +1 -1
  251. package/lib/main/node/webview-backend-security-warnings.js +1 -1
  252. package/lib/main/node/webview-backend-security-warnings.js.map +1 -1
  253. package/lib/plugin/authentication-ext.d.ts +23 -8
  254. package/lib/plugin/authentication-ext.d.ts.map +1 -1
  255. package/lib/plugin/authentication-ext.js +28 -24
  256. package/lib/plugin/authentication-ext.js.map +1 -1
  257. package/lib/plugin/comments.js +6 -6
  258. package/lib/plugin/comments.js.map +1 -1
  259. package/lib/plugin/decorations.js +1 -1
  260. package/lib/plugin/decorations.js.map +1 -1
  261. package/lib/plugin/document-data.js +4 -4
  262. package/lib/plugin/document-data.js.map +1 -1
  263. package/lib/plugin/documents.js +1 -1
  264. package/lib/plugin/documents.js.map +1 -1
  265. package/lib/plugin/editors-and-documents.js +6 -6
  266. package/lib/plugin/editors-and-documents.js.map +1 -1
  267. package/lib/plugin/env.js +2 -2
  268. package/lib/plugin/env.js.map +1 -1
  269. package/lib/plugin/file-system-event-service-ext-impl.js +2 -2
  270. package/lib/plugin/file-system-event-service-ext-impl.js.map +1 -1
  271. package/lib/plugin/file-system-ext-impl.js +1 -1
  272. package/lib/plugin/file-system-ext-impl.js.map +1 -1
  273. package/lib/plugin/known-commands.js +17 -16
  274. package/lib/plugin/known-commands.js.map +1 -1
  275. package/lib/plugin/known-commands.spec.js +1 -1
  276. package/lib/plugin/known-commands.spec.js.map +1 -1
  277. package/lib/plugin/languages/code-action.d.ts +7 -1
  278. package/lib/plugin/languages/code-action.d.ts.map +1 -1
  279. package/lib/plugin/languages/code-action.js +36 -2
  280. package/lib/plugin/languages/code-action.js.map +1 -1
  281. package/lib/plugin/languages/completion.js.map +1 -1
  282. package/lib/plugin/languages/declaration.js +2 -2
  283. package/lib/plugin/languages/declaration.js.map +1 -1
  284. package/lib/plugin/languages/definition.js +2 -2
  285. package/lib/plugin/languages/definition.js.map +1 -1
  286. package/lib/plugin/languages/diagnostics.js +3 -3
  287. package/lib/plugin/languages/diagnostics.js.map +1 -1
  288. package/lib/plugin/languages/implementation.js +2 -2
  289. package/lib/plugin/languages/implementation.js.map +1 -1
  290. package/lib/plugin/languages/reference.js +1 -1
  291. package/lib/plugin/languages/reference.js.map +1 -1
  292. package/lib/plugin/languages/rename.js +1 -1
  293. package/lib/plugin/languages/rename.js.map +1 -1
  294. package/lib/plugin/languages/semantic-highlighting.js +4 -4
  295. package/lib/plugin/languages/semantic-highlighting.js.map +1 -1
  296. package/lib/plugin/languages/type-definition.js +2 -2
  297. package/lib/plugin/languages/type-definition.js.map +1 -1
  298. package/lib/plugin/languages.d.ts +2 -0
  299. package/lib/plugin/languages.d.ts.map +1 -1
  300. package/lib/plugin/languages.js +8 -1
  301. package/lib/plugin/languages.js.map +1 -1
  302. package/lib/plugin/node/debug/debug.js +7 -7
  303. package/lib/plugin/node/debug/debug.js.map +1 -1
  304. package/lib/plugin/node/debug/plugin-debug-adapter-session.d.ts.map +1 -1
  305. package/lib/plugin/node/debug/plugin-debug-adapter-session.js.map +1 -1
  306. package/lib/plugin/node/debug/plugin-debug-adapter-starter.d.ts +1 -1
  307. package/lib/plugin/node/debug/plugin-debug-adapter-starter.d.ts.map +1 -1
  308. package/lib/plugin/node/debug/plugin-debug-adapter-starter.js +4 -4
  309. package/lib/plugin/node/debug/plugin-debug-adapter-starter.js.map +1 -1
  310. package/lib/plugin/node/debug/plugin-inline-debug-adapter.d.ts +34 -0
  311. package/lib/plugin/node/debug/plugin-inline-debug-adapter.d.ts.map +1 -0
  312. package/lib/plugin/node/debug/plugin-inline-debug-adapter.js +45 -0
  313. package/lib/plugin/node/debug/plugin-inline-debug-adapter.js.map +1 -0
  314. package/lib/plugin/node/env-node-ext.d.ts.map +1 -1
  315. package/lib/plugin/node/env-node-ext.js +2 -2
  316. package/lib/plugin/node/env-node-ext.js.map +1 -1
  317. package/lib/plugin/path.spec.js +3 -3
  318. package/lib/plugin/path.spec.js.map +1 -1
  319. package/lib/plugin/plugin-context.d.ts.map +1 -1
  320. package/lib/plugin/plugin-context.js +76 -32
  321. package/lib/plugin/plugin-context.js.map +1 -1
  322. package/lib/plugin/plugin-manager.d.ts.map +1 -1
  323. package/lib/plugin/plugin-manager.js +7 -6
  324. package/lib/plugin/plugin-manager.js.map +1 -1
  325. package/lib/plugin/preference-registry.js +3 -3
  326. package/lib/plugin/preference-registry.js.map +1 -1
  327. package/lib/plugin/preferences/configuration.js +1 -1
  328. package/lib/plugin/preferences/configuration.js.map +1 -1
  329. package/lib/plugin/quick-open.d.ts.map +1 -1
  330. package/lib/plugin/quick-open.js +1 -1
  331. package/lib/plugin/quick-open.js.map +1 -1
  332. package/lib/plugin/scm.js +1 -3
  333. package/lib/plugin/scm.js.map +1 -1
  334. package/lib/plugin/status-bar/status-bar-item.d.ts +3 -2
  335. package/lib/plugin/status-bar/status-bar-item.d.ts.map +1 -1
  336. package/lib/plugin/status-bar/status-bar-item.js +5 -2
  337. package/lib/plugin/status-bar/status-bar-item.js.map +1 -1
  338. package/lib/plugin/status-bar-message-registry.d.ts +1 -1
  339. package/lib/plugin/status-bar-message-registry.d.ts.map +1 -1
  340. package/lib/plugin/status-bar-message-registry.js +2 -2
  341. package/lib/plugin/status-bar-message-registry.js.map +1 -1
  342. package/lib/plugin/text-editor.js +10 -10
  343. package/lib/plugin/text-editor.js.map +1 -1
  344. package/lib/plugin/timeline.js.map +1 -1
  345. package/lib/plugin/type-converters.js +6 -5
  346. package/lib/plugin/type-converters.js.map +1 -1
  347. package/lib/plugin/type-converters.spec.js +5 -5
  348. package/lib/plugin/type-converters.spec.js.map +1 -1
  349. package/lib/plugin/types-impl.d.ts.map +1 -1
  350. package/lib/plugin/types-impl.js +34 -32
  351. package/lib/plugin/types-impl.js.map +1 -1
  352. package/lib/plugin/webview-views.d.ts +68 -0
  353. package/lib/plugin/webview-views.d.ts.map +1 -0
  354. package/lib/plugin/webview-views.js +145 -0
  355. package/lib/plugin/webview-views.js.map +1 -0
  356. package/lib/plugin/webviews.d.ts +6 -0
  357. package/lib/plugin/webviews.d.ts.map +1 -1
  358. package/lib/plugin/webviews.js +29 -6
  359. package/lib/plugin/webviews.js.map +1 -1
  360. package/lib/plugin/workspace.d.ts +6 -0
  361. package/lib/plugin/workspace.d.ts.map +1 -1
  362. package/lib/plugin/workspace.js +21 -3
  363. package/lib/plugin/workspace.js.map +1 -1
  364. package/lib/plugin-ext-backend-electron-module.js +2 -2
  365. package/lib/plugin-ext-backend-electron-module.js.map +1 -1
  366. package/lib/plugin-ext-backend-module.js +2 -2
  367. package/lib/plugin-ext-backend-module.js.map +1 -1
  368. package/package.json +23 -23
  369. package/src/common/plugin-api-rpc-model.ts +13 -17
  370. package/src/common/plugin-api-rpc.ts +46 -14
  371. package/src/common/plugin-protocol.ts +7 -0
  372. package/src/hosted/browser/hosted-plugin.ts +20 -40
  373. package/src/hosted/node/hosted-plugin-deployer-handler.ts +23 -3
  374. package/src/hosted/node/plugin-reader.ts +2 -1
  375. package/src/hosted/node/scanners/scanner-theia.ts +2 -1
  376. package/src/hosted/node-electron/scanner-theia-electron.ts +1 -1
  377. package/src/main/browser/authentication-main.ts +137 -81
  378. package/src/main/browser/comments/comment-thread-widget.tsx +12 -12
  379. package/src/main/browser/custom-editors/custom-editor-widget.ts +5 -5
  380. package/src/main/browser/debug/plugin-debug-session-factory.ts +22 -22
  381. package/src/main/browser/dialogs/modal-notification.ts +1 -1
  382. package/src/main/browser/languages-main.ts +13 -3
  383. package/src/main/browser/main-context.ts +4 -0
  384. package/src/main/browser/plugin-authentication-service.ts +71 -0
  385. package/src/main/browser/plugin-ext-frontend-module.ts +13 -8
  386. package/src/main/browser/plugin-ext-widget.tsx +1 -1
  387. package/src/main/browser/view/plugin-view-registry.ts +73 -5
  388. package/src/main/browser/view/plugin-view-widget.ts +4 -4
  389. package/src/main/browser/view/tree-view-widget.tsx +14 -17
  390. package/src/main/browser/view-column-service.ts +1 -1
  391. package/src/main/browser/webview/webview.ts +5 -5
  392. package/src/main/browser/webview-views/webview-views-main.ts +142 -0
  393. package/src/main/browser/webview-views/webview-views.ts +38 -0
  394. package/src/main/browser/workspace-main.ts +9 -1
  395. package/src/main/electron-browser/webview/electron-webview-widget-factory.ts +4 -4
  396. package/src/main/node/paths/plugin-paths-service.ts +1 -1
  397. package/src/main/node/plugin-deployer-impl.ts +11 -7
  398. package/src/plugin/authentication-ext.ts +42 -32
  399. package/src/plugin/languages/code-action.ts +46 -3
  400. package/src/plugin/languages.ts +9 -0
  401. package/src/plugin/node/debug/plugin-debug-adapter-session.ts +7 -7
  402. package/src/plugin/node/debug/plugin-debug-adapter-starter.ts +1 -1
  403. package/src/plugin/node/debug/plugin-inline-debug-adapter.ts +47 -0
  404. package/src/plugin/node/env-node-ext.ts +1 -1
  405. package/src/plugin/plugin-context.ts +64 -9
  406. package/src/plugin/plugin-manager.ts +2 -1
  407. package/src/plugin/quick-open.ts +13 -11
  408. package/src/plugin/status-bar/status-bar-item.ts +8 -2
  409. package/src/plugin/status-bar-message-registry.ts +3 -2
  410. package/src/plugin/types-impl.ts +8 -8
  411. package/src/plugin/webview-views.ts +213 -0
  412. package/src/plugin/webviews.ts +30 -0
  413. package/src/plugin/workspace.ts +23 -0
@@ -21,21 +21,21 @@
21
21
  // code copied and modified from https://github.com/microsoft/vscode/blob/1.47.3/src/vs/workbench/api/browser/mainThreadAuthentication.ts
22
22
 
23
23
  import { interfaces } from '@theia/core/shared/inversify';
24
- import { AuthenticationExt, AuthenticationMain, MAIN_RPC_CONTEXT } from '../../common/plugin-api-rpc';
24
+ import { AuthenticationExt, AuthenticationMain, PluginManagerExt, MAIN_RPC_CONTEXT } from '../../common/plugin-api-rpc';
25
25
  import { RPCProtocol } from '../../common/rpc-protocol';
26
26
  import { MessageService } from '@theia/core/lib/common/message-service';
27
- import { StorageService } from '@theia/core/lib/browser';
27
+ import { Dialog, StorageService } from '@theia/core/lib/browser';
28
28
  import {
29
29
  AuthenticationProvider,
30
30
  AuthenticationService,
31
31
  readAllowedExtensions
32
32
  } from '@theia/core/lib/browser/authentication-service';
33
33
  import { QuickPickService } from '@theia/core/lib/common/quick-pick-service';
34
- import {
35
- AuthenticationSession,
36
- AuthenticationSessionsChangeEvent
37
- } from '../../common/plugin-api-rpc-model';
34
+ import * as theia from '@theia/plugin';
38
35
  import { QuickPickValue } from '@theia/core/lib/browser/quick-input/quick-input-service';
36
+ import { nls } from '@theia/core/lib/common/nls';
37
+
38
+ export function getAuthenticationProviderActivationEvent(id: string): string { return `onAuthenticationRequest:${id}`; }
39
39
 
40
40
  export class AuthenticationMainImpl implements AuthenticationMain {
41
41
  private readonly proxy: AuthenticationExt;
@@ -43,15 +43,17 @@ export class AuthenticationMainImpl implements AuthenticationMain {
43
43
  private readonly storageService: StorageService;
44
44
  private readonly authenticationService: AuthenticationService;
45
45
  private readonly quickPickService: QuickPickService;
46
+ private readonly extensionService: PluginManagerExt;
46
47
  constructor(rpc: RPCProtocol, container: interfaces.Container) {
47
48
  this.proxy = rpc.getProxy(MAIN_RPC_CONTEXT.AUTHENTICATION_EXT);
48
49
  this.messageService = container.get(MessageService);
49
50
  this.storageService = container.get(StorageService);
50
51
  this.authenticationService = container.get(AuthenticationService);
51
52
  this.quickPickService = container.get(QuickPickService);
53
+ this.extensionService = rpc.getProxy(MAIN_RPC_CONTEXT.HOSTED_PLUGIN_MANAGER_EXT);
52
54
 
53
55
  this.authenticationService.onDidChangeSessions(e => {
54
- this.proxy.$onDidChangeAuthenticationSessions(e.providerId, e.label, e.event);
56
+ this.proxy.$onDidChangeAuthenticationSessions(e.providerId, e.label);
55
57
  });
56
58
  this.authenticationService.onDidRegisterAuthenticationProvider(info => {
57
59
  this.proxy.$onDidChangeAuthenticationProviders([info], []);
@@ -73,7 +75,7 @@ export class AuthenticationMainImpl implements AuthenticationMain {
73
75
  this.authenticationService.unregisterAuthenticationProvider(id);
74
76
  }
75
77
 
76
- async $updateSessions(id: string, event: AuthenticationSessionsChangeEvent): Promise<void> {
78
+ async $updateSessions(id: string, event: theia.AuthenticationProviderAuthenticationSessionsChangeEvent): Promise<void> {
77
79
  this.authenticationService.updateSessions(id, event);
78
80
  }
79
81
 
@@ -86,75 +88,85 @@ export class AuthenticationMainImpl implements AuthenticationMain {
86
88
  }
87
89
 
88
90
  async $getSession(providerId: string, scopes: string[], extensionId: string, extensionName: string,
89
- options: { createIfNone: boolean, clearSessionPreference: boolean }): Promise<AuthenticationSession | undefined> {
90
- const orderedScopes = scopes.sort().join(' ');
91
- const sessions = (await this.authenticationService.getSessions(providerId)).filter(session => session.scopes.slice().sort().join(' ') === orderedScopes);
92
- const label = this.authenticationService.getLabel(providerId);
93
-
94
- if (sessions.length) {
95
- if (!this.authenticationService.supportsMultipleAccounts(providerId)) {
96
- const session = sessions[0];
97
- const allowed = await this.getSessionsPrompt(providerId, session.account.label, label, extensionId, extensionName);
98
- if (allowed) {
99
- return session;
91
+ options: theia.AuthenticationGetSessionOptions): Promise<theia.AuthenticationSession | undefined> {
92
+ const sessions = await this.authenticationService.getSessions(providerId, scopes);
93
+
94
+ // Error cases
95
+ if (options.forceNewSession && !sessions.length) {
96
+ throw new Error('No existing sessions found.');
97
+ }
98
+ if (options.forceNewSession && options.createIfNone) {
99
+ throw new Error('Invalid combination of options. Please remove one of the following: forceNewSession, createIfNone');
100
+ }
101
+ if (options.forceNewSession && options.silent) {
102
+ throw new Error('Invalid combination of options. Please remove one of the following: forceNewSession, silent');
103
+ }
104
+ if (options.createIfNone && options.silent) {
105
+ throw new Error('Invalid combination of options. Please remove one of the following: createIfNone, silent');
106
+ }
107
+
108
+ const supportsMultipleAccounts = this.authenticationService.supportsMultipleAccounts(providerId);
109
+ // Check if the sessions we have are valid
110
+ if (!options.forceNewSession && sessions.length) {
111
+ if (supportsMultipleAccounts) {
112
+ if (options.clearSessionPreference) {
113
+ await this.storageService.setData(`authentication-session-${extensionName}-${providerId}`, undefined);
100
114
  } else {
101
- throw new Error('User did not consent to login.');
115
+ const existingSessionPreference = await this.storageService.getData(`authentication-session-${extensionName}-${providerId}`);
116
+ if (existingSessionPreference) {
117
+ const matchingSession = sessions.find(session => session.id === existingSessionPreference);
118
+ if (matchingSession && await this.isAccessAllowed(providerId, matchingSession.account.label, extensionId)) {
119
+ return matchingSession;
120
+ }
121
+ }
102
122
  }
123
+ } else if (await this.isAccessAllowed(providerId, sessions[0].account.label, extensionId)) {
124
+ return sessions[0];
103
125
  }
126
+ }
104
127
 
105
- // On renderer side, confirm consent, ask user to choose between accounts if multiple sessions are valid
106
- const selected = await this.selectSession(providerId, label, extensionId, extensionName, sessions, scopes, !!options.clearSessionPreference);
107
- return sessions.find(session => session.id === selected.id);
108
- } else {
109
- if (options.createIfNone) {
110
- const isAllowed = await this.loginPrompt(label, extensionName);
111
- if (!isAllowed) {
112
- throw new Error('User did not consent to login.');
113
- }
114
-
115
- const session = await this.authenticationService.login(providerId, scopes);
116
- await this.setTrustedExtensionAndAccountPreference(providerId, session.account.label, extensionId, extensionName, session.id);
117
- return session;
118
- } else {
119
- await this.requestNewSession(providerId, scopes, extensionId, extensionName);
120
- return undefined;
128
+ // We may need to prompt because we don't have a valid session modal flows
129
+ if (options.createIfNone || options.forceNewSession) {
130
+ const providerName = this.authenticationService.getLabel(providerId);
131
+ const detail = (typeof options.forceNewSession === 'object') ? options.forceNewSession!.detail : undefined;
132
+ const isAllowed = await this.loginPrompt(providerName, extensionName, !!options.forceNewSession, detail);
133
+ if (!isAllowed) {
134
+ throw new Error('User did not consent to login.');
121
135
  }
136
+
137
+ const session = sessions?.length && !options.forceNewSession && supportsMultipleAccounts
138
+ ? await this.selectSession(providerId, providerName, extensionId, extensionName, sessions, scopes, !!options.clearSessionPreference)
139
+ : await this.authenticationService.login(providerId, scopes);
140
+ await this.setTrustedExtensionAndAccountPreference(providerId, session.account.label, extensionId, extensionName, session.id);
141
+ return session;
142
+ }
143
+
144
+ // passive flows (silent or default)
145
+ const validSession = sessions.find(s => this.isAccessAllowed(providerId, s.account.label, extensionId));
146
+ if (!options.silent && !validSession) {
147
+ this.authenticationService.requestNewSession(providerId, scopes, extensionId, extensionName);
122
148
  }
149
+ return validSession;
123
150
  }
124
151
 
125
152
  protected async selectSession(providerId: string, providerName: string, extensionId: string, extensionName: string,
126
- potentialSessions: AuthenticationSession[], scopes: string[], clearSessionPreference: boolean): Promise<AuthenticationSession> {
153
+ potentialSessions: Readonly<theia.AuthenticationSession[]>, scopes: string[], clearSessionPreference: boolean): Promise<theia.AuthenticationSession> {
127
154
  if (!potentialSessions.length) {
128
155
  throw new Error('No potential sessions found');
129
156
  }
130
157
 
131
- if (clearSessionPreference) {
132
- await this.storageService.setData(`authentication-session-${extensionName}-${providerId}`, undefined);
133
- } else {
134
- const existingSessionPreference = await this.storageService.getData(`authentication-session-${extensionName}-${providerId}`);
135
- if (existingSessionPreference) {
136
- const matchingSession = potentialSessions.find(session => session.id === existingSessionPreference);
137
- if (matchingSession) {
138
- const allowed = await this.getSessionsPrompt(providerId, matchingSession.account.label, providerName, extensionId, extensionName);
139
- if (allowed) {
140
- return matchingSession;
141
- }
142
- }
143
- }
144
- }
145
-
146
158
  return new Promise(async (resolve, reject) => {
147
- const items: QuickPickValue<{ session?: AuthenticationSession }>[] = potentialSessions.map(session => ({
159
+ const items: QuickPickValue<{ session?: theia.AuthenticationSession }>[] = potentialSessions.map(session => ({
148
160
  label: session.account.label,
149
161
  value: { session }
150
162
  }));
151
163
  items.push({
152
- label: 'Sign in to another account',
164
+ label: nls.localizeByDefault('Sign in to another account'),
153
165
  value: { session: undefined }
154
166
  });
155
167
  const selected = await this.quickPickService.show(items,
156
168
  {
157
- title: `The extension '${extensionName}' wants to access a ${providerName} account`,
169
+ title: nls.localizeByDefault("The extension '{0}' wants to access a {1} account", extensionName, providerName),
158
170
  ignoreFocusOut: true
159
171
  });
160
172
  if (selected) {
@@ -196,20 +208,39 @@ export class AuthenticationMainImpl implements AuthenticationMain {
196
208
  return allow;
197
209
  }
198
210
 
199
- protected async loginPrompt(providerName: string, extensionName: string): Promise<boolean> {
200
- const choice = await this.messageService.info(`The extension '${extensionName}' wants to sign in using ${providerName}.`, 'Allow', 'Cancel');
211
+ protected async loginPrompt(providerName: string, extensionName: string, recreatingSession: boolean, _detail?: string): Promise<boolean> {
212
+ const message = recreatingSession
213
+ ? nls.localizeByDefault("The extension '{0}' wants you to sign in again using {1}.", extensionName, providerName)
214
+ : nls.localizeByDefault("The extension '{0}' wants to sign in using {1}.", extensionName, providerName);
215
+ const choice = await this.messageService.info(message, 'Allow', 'Cancel');
201
216
  return choice === 'Allow';
202
217
  }
203
218
 
219
+ protected async isAccessAllowed(providerId: string, accountName: string, extensionId: string): Promise<boolean> {
220
+ const allowList = await readAllowedExtensions(this.storageService, providerId, accountName);
221
+ return !!allowList.find(allowed => allowed.id === extensionId);
222
+ }
223
+
204
224
  protected async setTrustedExtensionAndAccountPreference(providerId: string, accountName: string, extensionId: string, extensionName: string, sessionId: string): Promise<void> {
205
225
  const allowList = await readAllowedExtensions(this.storageService, providerId, accountName);
206
226
  if (!allowList.find(allowed => allowed.id === extensionId)) {
207
227
  allowList.push({ id: extensionId, name: extensionName });
208
228
  this.storageService.setData(`authentication-trusted-extensions-${providerId}-${accountName}`, JSON.stringify(allowList));
209
229
  }
210
-
211
230
  this.storageService.setData(`authentication-session-${extensionName}-${providerId}`, sessionId);
212
231
  }
232
+
233
+ $ensureProvider(id: string): Promise<void> {
234
+ return this.extensionService.$activateByEvent(getAuthenticationProviderActivationEvent(id));
235
+ }
236
+
237
+ $removeSession(providerId: string, sessionId: string): Promise<void> {
238
+ return this.authenticationService.logout(providerId, sessionId);
239
+ }
240
+
241
+ $sendDidChangeSessions(providerId: string, event: theia.AuthenticationProviderAuthenticationSessionsChangeEvent): void {
242
+ this.authenticationService.updateSessions(providerId, event);
243
+ }
213
244
  }
214
245
 
215
246
  async function addAccountUsage(storageService: StorageService, providerId: string, accountName: string, extensionId: string, extensionName: string): Promise<void> {
@@ -244,6 +275,8 @@ export class AuthenticationProviderImpl implements AuthenticationProvider {
244
275
  private accounts = new Map<string, string[]>(); // Map account name to session ids
245
276
  private sessions = new Map<string, string>(); // Map account id to name
246
277
 
278
+ readonly onDidChangeSessions: theia.Event<theia.AuthenticationProviderAuthenticationSessionsChangeEvent>;
279
+
247
280
  constructor(
248
281
  private readonly proxy: AuthenticationExt,
249
282
  public readonly id: string,
@@ -257,7 +290,7 @@ export class AuthenticationProviderImpl implements AuthenticationProvider {
257
290
  return !!this.sessions.size;
258
291
  }
259
292
 
260
- private registerSession(session: AuthenticationSession): void {
293
+ private registerSession(session: theia.AuthenticationSession): void {
261
294
  this.sessions.set(session.id, session.account.label);
262
295
 
263
296
  const existingSessionsForAccount = this.accounts.get(session.account.label);
@@ -272,34 +305,41 @@ export class AuthenticationProviderImpl implements AuthenticationProvider {
272
305
  async signOut(accountName: string): Promise<void> {
273
306
  const accountUsages = await readAccountUsages(this.storageService, this.id, accountName);
274
307
  const sessionsForAccount = this.accounts.get(accountName);
275
- const result = await this.messageService.info(accountUsages.length ? `The account ${accountName} has been used by:
276
- ${accountUsages.map(usage => usage.extensionName).join(', ')}. Sign out of these features?` : `Sign out of ${accountName}?`, 'Yes');
277
-
278
- if (result && result === 'Yes' && sessionsForAccount) {
308
+ const result = await this.messageService.info(accountUsages.length
309
+ ? nls.localizeByDefault("The account '{0}' has been used by: \n\n{1}\n\n Sign out from these extensions?", accountName,
310
+ accountUsages.map(usage => usage.extensionName).join(', '))
311
+ : nls.localizeByDefault("Sign out of '{0}'?", accountName),
312
+ nls.localizeByDefault('Sign Out'),
313
+ Dialog.CANCEL);
314
+
315
+ if (result && result === nls.localizeByDefault('Sign Out') && sessionsForAccount) {
279
316
  sessionsForAccount.forEach(sessionId => this.logout(sessionId));
280
317
  removeAccountUsage(this.storageService, this.id, accountName);
281
318
  }
282
319
  }
283
320
 
284
- async getSessions(): Promise<ReadonlyArray<AuthenticationSession>> {
285
- return this.proxy.$getSessions(this.id);
321
+ async getSessions(scopes?: string[]): Promise<ReadonlyArray<theia.AuthenticationSession>> {
322
+ return this.proxy.$getSessions(this.id, scopes);
286
323
  }
287
324
 
288
- async updateSessionItems(event: AuthenticationSessionsChangeEvent): Promise<void> {
325
+ async updateSessionItems(event: theia.AuthenticationProviderAuthenticationSessionsChangeEvent): Promise<void> {
289
326
  const { added, removed } = event;
290
327
  const session = await this.proxy.$getSessions(this.id);
291
- const addedSessions = session.filter(s => added.some(id => id === s.id));
292
-
293
- removed.forEach(sessionId => {
294
- const accountName = this.sessions.get(sessionId);
295
- if (accountName) {
296
- this.sessions.delete(sessionId);
297
- const sessionsForAccount = this.accounts.get(accountName) || [];
298
- const sessionIndex = sessionsForAccount.indexOf(sessionId);
299
- sessionsForAccount.splice(sessionIndex);
300
-
301
- if (!sessionsForAccount.length) {
302
- this.accounts.delete(accountName);
328
+ const addedSessions = session.filter(s => added.some(addedSession => this.getSessionId(addedSession) === s.id));
329
+
330
+ removed.forEach(removedSession => {
331
+ const sessionId = this.getSessionId(removedSession);
332
+ if (sessionId) {
333
+ const accountName = this.sessions.get(sessionId);
334
+ if (accountName) {
335
+ this.sessions.delete(sessionId);
336
+ const sessionsForAccount = this.accounts.get(accountName) || [];
337
+ const sessionIndex = sessionsForAccount.indexOf(sessionId);
338
+ sessionsForAccount.splice(sessionIndex);
339
+
340
+ if (!sessionsForAccount.length) {
341
+ this.accounts.delete(accountName);
342
+ }
303
343
  }
304
344
  }
305
345
  });
@@ -307,14 +347,30 @@ export class AuthenticationProviderImpl implements AuthenticationProvider {
307
347
  addedSessions.forEach(s => this.registerSession(s));
308
348
  }
309
349
 
310
- login(scopes: string[]): Promise<AuthenticationSession> {
311
- return this.proxy.$login(this.id, scopes);
350
+ login(scopes: string[]): Promise<theia.AuthenticationSession> {
351
+ return this.proxy.$createSession(this.id, scopes);
312
352
  }
313
353
 
314
354
  async logout(sessionId: string): Promise<void> {
315
- await this.proxy.$logout(this.id, sessionId);
355
+ await this.proxy.$removeSession(this.id, sessionId);
316
356
  this.messageService.info('Successfully signed out.');
317
357
  }
358
+
359
+ createSession(scopes: string[]): Thenable<theia.AuthenticationSession> {
360
+ return this.login(scopes);
361
+ }
362
+
363
+ removeSession(sessionId: string): Thenable<void> {
364
+ return this.logout(sessionId);
365
+ }
366
+
367
+ // utility method to be backwards compatible with the old AuthenticationProviderAuthenticationSessionsChangeEvent containing only the session id string
368
+ private getSessionId(obj: string | theia.AuthenticationSession | undefined): string | undefined {
369
+ if (!obj || typeof obj === 'string') {
370
+ return obj;
371
+ }
372
+ return obj.id;
373
+ }
318
374
  }
319
375
 
320
376
  async function readAccountUsages(storageService: StorageService, providerId: string, accountName: string): Promise<AccountUsage[]> {
@@ -114,7 +114,7 @@ export class CommentThreadWidget extends BaseWidget {
114
114
  this.commentService.disposeCommentThread(this.owner, this._commentThread.threadId);
115
115
  }
116
116
 
117
- dispose(): void {
117
+ override dispose(): void {
118
118
  super.dispose();
119
119
  if (this.commentGlyphWidget) {
120
120
  this.commentGlyphWidget.dispose();
@@ -134,7 +134,7 @@ export class CommentThreadWidget extends BaseWidget {
134
134
  }
135
135
  }
136
136
 
137
- hide(): void {
137
+ override hide(): void {
138
138
  this.zoneWidget.hide();
139
139
  this.isExpanded = false;
140
140
  super.hide();
@@ -231,7 +231,7 @@ export class CommentThreadWidget extends BaseWidget {
231
231
  return label;
232
232
  }
233
233
 
234
- update(): void {
234
+ override update(): void {
235
235
  if (!this.isExpanded) {
236
236
  return;
237
237
  }
@@ -342,7 +342,7 @@ export class CommentForm<P extends CommentForm.Props = CommentForm.Props> extend
342
342
  }, 100);
343
343
  };
344
344
 
345
- componentDidMount(): void {
345
+ override componentDidMount(): void {
346
346
  // Wait for the widget to be rendered.
347
347
  setTimeout(() => {
348
348
  this.inputRef.current?.focus();
@@ -377,7 +377,7 @@ export class CommentForm<P extends CommentForm.Props = CommentForm.Props> extend
377
377
  });
378
378
  }
379
379
 
380
- render(): React.ReactNode {
380
+ override render(): React.ReactNode {
381
381
  const { commands, commentThread, contextKeyService } = this.props;
382
382
  const hasExistingComments = commentThread.comments && commentThread.comments.length > 0;
383
383
  return <div className={'comment-form' + (this.state.expanded || commentThread.comments && commentThread.comments.length === 0 ? ' expand' : '')}>
@@ -453,7 +453,7 @@ export class ReviewComment<P extends ReviewComment.Props = ReviewComment.Props>
453
453
  protected showHover = () => this.setState({ hover: true });
454
454
  protected hideHover = () => this.setState({ hover: false });
455
455
 
456
- render(): React.ReactNode {
456
+ override render(): React.ReactNode {
457
457
  const { comment, commentForm, contextKeyService, menus, commands, commentThread } = this.props;
458
458
  const commentUniqueId = comment.uniqueIdInThread;
459
459
  const { hover } = this.state;
@@ -499,7 +499,7 @@ namespace CommentBody {
499
499
  }
500
500
 
501
501
  export class CommentBody extends React.Component<CommentBody.Props> {
502
- render(): React.ReactNode {
502
+ override render(): React.ReactNode {
503
503
  const { value, isVisible } = this.props;
504
504
  if (!isVisible) {
505
505
  return false;
@@ -528,7 +528,7 @@ export class CommentEditContainer extends React.Component<CommentEditContainer.P
528
528
  private dirtyCommentMode: CommentMode | undefined;
529
529
  private dirtyCommentFormState: boolean | undefined;
530
530
 
531
- componentDidUpdate(prevProps: Readonly<CommentEditContainer.Props>, prevState: Readonly<{}>): void {
531
+ override componentDidUpdate(prevProps: Readonly<CommentEditContainer.Props>, prevState: Readonly<{}>): void {
532
532
  const commentFormState = this.props.commentForm.current?.state;
533
533
  const mode = this.props.comment.mode;
534
534
  if (this.dirtyCommentMode !== mode || (this.dirtyCommentFormState !== commentFormState?.expanded && !commentFormState?.expanded)) {
@@ -545,7 +545,7 @@ export class CommentEditContainer extends React.Component<CommentEditContainer.P
545
545
  this.dirtyCommentFormState = commentFormState?.expanded;
546
546
  }
547
547
 
548
- render(): React.ReactNode {
548
+ override render(): React.ReactNode {
549
549
  const { menus, comment, commands, commentThread, contextKeyService } = this.props;
550
550
  if (!(comment.mode === CommentMode.Editing)) {
551
551
  return false;
@@ -588,7 +588,7 @@ namespace CommentsInlineAction {
588
588
  }
589
589
 
590
590
  export class CommentsInlineAction extends React.Component<CommentsInlineAction.Props> {
591
- render(): React.ReactNode {
591
+ override render(): React.ReactNode {
592
592
  const { node, commands, contextKeyService, commentThread, commentUniqueId } = this.props;
593
593
  if (node.action.when && !contextKeyService.match(node.action.when)) {
594
594
  return false;
@@ -618,7 +618,7 @@ namespace CommentActions {
618
618
  }
619
619
 
620
620
  export class CommentActions extends React.Component<CommentActions.Props> {
621
- render(): React.ReactNode {
621
+ override render(): React.ReactNode {
622
622
  const { contextKeyService, commands, menu, commentThread, getInput, clearInput } = this.props;
623
623
  return <div className={'form-actions'}>
624
624
  {menu.children.map((node, index) => node instanceof ActionMenuNode &&
@@ -647,7 +647,7 @@ namespace CommentAction {
647
647
  }
648
648
 
649
649
  export class CommentAction extends React.Component<CommentAction.Props> {
650
- render(): React.ReactNode {
650
+ override render(): React.ReactNode {
651
651
  const classNames = ['comments-button', 'comments-text-button', 'theia-button'];
652
652
  const { node, commands, contextKeyService, onClick } = this.props;
653
653
  if (node.action.when && !contextKeyService.match(node.action.when)) {
@@ -25,9 +25,9 @@ import { CustomEditorModel } from './custom-editors-main';
25
25
 
26
26
  @injectable()
27
27
  export class CustomEditorWidget extends WebviewWidget implements SaveableSource, NavigatableWidget {
28
- static FACTORY_ID = 'plugin-custom-editor';
28
+ static override FACTORY_ID = 'plugin-custom-editor';
29
29
 
30
- id: string;
30
+ override id: string;
31
31
  resource: URI;
32
32
 
33
33
  protected _modelRef: Reference<CustomEditorModel>;
@@ -47,7 +47,7 @@ export class CustomEditorWidget extends WebviewWidget implements SaveableSource,
47
47
  protected readonly undoRedoService: UndoRedoService;
48
48
 
49
49
  @postConstruct()
50
- protected init(): void {
50
+ protected override init(): void {
51
51
  super.init();
52
52
  this.id = CustomEditorWidget.FACTORY_ID + ':' + this.identifier.id;
53
53
  this.toDispose.push(this.fileService.onDidRunOperation(e => {
@@ -83,14 +83,14 @@ export class CustomEditorWidget extends WebviewWidget implements SaveableSource,
83
83
  return this.resource.withPath(resourceUri.path);
84
84
  }
85
85
 
86
- storeState(): CustomEditorWidget.State {
86
+ override storeState(): CustomEditorWidget.State {
87
87
  return {
88
88
  ...super.storeState(),
89
89
  strResource: this.resource.toString(),
90
90
  };
91
91
  }
92
92
 
93
- restoreState(oldState: CustomEditorWidget.State): void {
93
+ override restoreState(oldState: CustomEditorWidget.State): void {
94
94
  const { strResource } = oldState;
95
95
  this.resource = new URI(strResource);
96
96
  super.restoreState(oldState);
@@ -34,22 +34,22 @@ import { Channel } from '@theia/debug/lib/common/debug-service';
34
34
 
35
35
  export class PluginDebugSession extends DebugSession {
36
36
  constructor(
37
- readonly id: string,
38
- readonly options: DebugSessionOptions,
39
- readonly parentSession: DebugSession | undefined,
40
- protected readonly connection: DebugSessionConnection,
41
- protected readonly terminalServer: TerminalService,
42
- protected readonly editorManager: EditorManager,
43
- protected readonly breakpoints: BreakpointManager,
44
- protected readonly labelProvider: LabelProvider,
45
- protected readonly messages: MessageClient,
46
- protected readonly fileService: FileService,
37
+ override readonly id: string,
38
+ override readonly options: DebugSessionOptions,
39
+ override readonly parentSession: DebugSession | undefined,
40
+ protected override readonly connection: DebugSessionConnection,
41
+ protected override readonly terminalServer: TerminalService,
42
+ protected override readonly editorManager: EditorManager,
43
+ protected override readonly breakpoints: BreakpointManager,
44
+ protected override readonly labelProvider: LabelProvider,
45
+ protected override readonly messages: MessageClient,
46
+ protected override readonly fileService: FileService,
47
47
  protected readonly terminalOptionsExt: TerminalOptionsExt | undefined,
48
- protected readonly debugContributionProvider: ContributionProvider<DebugContribution>) {
48
+ protected override readonly debugContributionProvider: ContributionProvider<DebugContribution>) {
49
49
  super(id, options, parentSession, connection, terminalServer, editorManager, breakpoints, labelProvider, messages, fileService, debugContributionProvider);
50
50
  }
51
51
 
52
- protected async doCreateTerminal(terminalWidgetOptions: TerminalWidgetOptions): Promise<TerminalWidget> {
52
+ protected override async doCreateTerminal(terminalWidgetOptions: TerminalWidgetOptions): Promise<TerminalWidget> {
53
53
  terminalWidgetOptions = Object.assign({}, terminalWidgetOptions, this.terminalOptionsExt);
54
54
  return super.doCreateTerminal(terminalWidgetOptions);
55
55
  }
@@ -61,22 +61,22 @@ export class PluginDebugSession extends DebugSession {
61
61
  */
62
62
  export class PluginDebugSessionFactory extends DefaultDebugSessionFactory {
63
63
  constructor(
64
- protected readonly terminalService: TerminalService,
65
- protected readonly editorManager: EditorManager,
66
- protected readonly breakpoints: BreakpointManager,
67
- protected readonly labelProvider: LabelProvider,
68
- protected readonly messages: MessageClient,
69
- protected readonly outputChannelManager: OutputChannelManager,
70
- protected readonly debugPreferences: DebugPreferences,
64
+ protected override readonly terminalService: TerminalService,
65
+ protected override readonly editorManager: EditorManager,
66
+ protected override readonly breakpoints: BreakpointManager,
67
+ protected override readonly labelProvider: LabelProvider,
68
+ protected override readonly messages: MessageClient,
69
+ protected override readonly outputChannelManager: OutputChannelManager,
70
+ protected override readonly debugPreferences: DebugPreferences,
71
71
  protected readonly connectionFactory: (sessionId: string) => Promise<Channel>,
72
- protected readonly fileService: FileService,
72
+ protected override readonly fileService: FileService,
73
73
  protected readonly terminalOptionsExt: TerminalOptionsExt | undefined,
74
- protected readonly debugContributionProvider: ContributionProvider<DebugContribution>
74
+ protected override readonly debugContributionProvider: ContributionProvider<DebugContribution>
75
75
  ) {
76
76
  super();
77
77
  }
78
78
 
79
- get(sessionId: string, options: DebugSessionOptions, parentSession?: DebugSession): DebugSession {
79
+ override get(sessionId: string, options: DebugSessionOptions, parentSession?: DebugSession): DebugSession {
80
80
  const connection = new DebugSessionConnection(
81
81
  sessionId,
82
82
  this.connectionFactory,
@@ -42,7 +42,7 @@ export class ModalNotification extends AbstractDialog<string | undefined> {
42
42
  super({ title: FrontendApplicationConfigProvider.get().applicationName });
43
43
  }
44
44
 
45
- protected onCloseRequest(msg: Message): void {
45
+ protected override onCloseRequest(msg: Message): void {
46
46
  this.actionTitle = undefined;
47
47
  this.accept();
48
48
  }
@@ -718,6 +718,8 @@ export class LanguagesMainImpl implements LanguagesMain, Disposable {
718
718
  const markers = monaco.services.StaticServices.markerService.get().read({ resource: model.uri }).filter(m => monaco.Range.areIntersectingOrTouching(m, range));
719
719
  return this.provideCodeActions(handle, model, range, { markers, only: context.only }, token);
720
720
  },
721
+ resolveCodeAction: (codeAction: monaco.languages.CodeAction, token: monaco.CancellationToken): Promise<monaco.languages.CodeAction> =>
722
+ this.resolveCodeAction(handle, codeAction, token),
721
723
  providedCodeActionKinds
722
724
  };
723
725
  this.register(handle, monaco.modes.CodeActionProviderRegistry.register(languageSelector, quickFixProvider));
@@ -734,12 +736,20 @@ export class LanguagesMainImpl implements LanguagesMain, Disposable {
734
736
  }
735
737
  return {
736
738
  actions: actions.map(a => toMonacoAction(a)),
737
- dispose: () => {
738
- // TODO this.proxy.$releaseCodeActions(handle, cacheId);
739
- }
739
+ dispose: () => this.proxy.$releaseCodeActions(handle, actions.map(a => a.cacheId))
740
740
  };
741
741
  }
742
742
 
743
+ protected async resolveCodeAction(handle: number, codeAction: monaco.languages.CodeAction, token: monaco.CancellationToken): Promise<monaco.languages.CodeAction> {
744
+ // The cacheId is kept in toMonacoAction when converting a received CodeAction DTO to a monaco code action
745
+ const cacheId = (codeAction as CodeAction).cacheId;
746
+ if (cacheId !== undefined) {
747
+ const resolvedEdit = await this.proxy.$resolveCodeAction(handle, cacheId, token);
748
+ codeAction.edit = resolvedEdit && toMonacoWorkspaceEdit(resolvedEdit);
749
+ }
750
+ return codeAction;
751
+ }
752
+
743
753
  $registerRenameProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], supportsResolveLocation: boolean): void {
744
754
  const languageSelector = this.toLanguageSelector(selector);
745
755
  const renameProvider = this.createRenameProvider(handle, supportsResolveLocation);
@@ -56,6 +56,7 @@ import { ThemingMainImpl } from './theming-main';
56
56
  import { CommentsMainImp } from './comments/comments-main';
57
57
  import { CustomEditorsMainImpl } from './custom-editors/custom-editors-main';
58
58
  import { SecretsMainImpl } from './secrets-main';
59
+ import { WebviewViewsMainImpl } from './webview-views/webview-views-main';
59
60
 
60
61
  export function setUpPluginApi(rpc: RPCProtocol, container: interfaces.Container): void {
61
62
  const authenticationMain = new AuthenticationMainImpl(rpc, container);
@@ -127,6 +128,9 @@ export function setUpPluginApi(rpc: RPCProtocol, container: interfaces.Container
127
128
  const customEditorsMain = new CustomEditorsMainImpl(rpc, container, webviewsMain);
128
129
  rpc.set(PLUGIN_RPC_CONTEXT.CUSTOM_EDITORS_MAIN, customEditorsMain);
129
130
 
131
+ const webviewViewsMain = new WebviewViewsMainImpl(rpc, container, webviewsMain);
132
+ rpc.set(PLUGIN_RPC_CONTEXT.WEBVIEW_VIEWS_MAIN, webviewViewsMain);
133
+
130
134
  const storageMain = new StorageMainImpl(container);
131
135
  rpc.set(PLUGIN_RPC_CONTEXT.STORAGE_MAIN, storageMain);
132
136