@theia/plugin-ext 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 (366) 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 +12 -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 +31 -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.js +1 -1
  62. package/lib/hosted/node-electron/scanner-theia-electron.js.map +1 -1
  63. package/lib/main/browser/authentication-main.d.ts +18 -11
  64. package/lib/main/browser/authentication-main.d.ts.map +1 -1
  65. package/lib/main/browser/authentication-main.js +111 -67
  66. package/lib/main/browser/authentication-main.js.map +1 -1
  67. package/lib/main/browser/commands.js +3 -3
  68. package/lib/main/browser/commands.js.map +1 -1
  69. package/lib/main/browser/comments/comment-thread-widget.js.map +1 -1
  70. package/lib/main/browser/comments/comments-context-key-service.d.ts +1 -1
  71. package/lib/main/browser/comments/comments-context-key-service.d.ts.map +1 -1
  72. package/lib/main/browser/comments/comments-context-key-service.js +3 -3
  73. package/lib/main/browser/comments/comments-context-key-service.js.map +1 -1
  74. package/lib/main/browser/comments/comments-contribution.js +8 -8
  75. package/lib/main/browser/comments/comments-contribution.js.map +1 -1
  76. package/lib/main/browser/comments/comments-decorator.js +1 -1
  77. package/lib/main/browser/comments/comments-decorator.js.map +1 -1
  78. package/lib/main/browser/comments/comments-main.js +1 -1
  79. package/lib/main/browser/comments/comments-main.js.map +1 -1
  80. package/lib/main/browser/comments/comments-service.js +1 -1
  81. package/lib/main/browser/comments/comments-service.js.map +1 -1
  82. package/lib/main/browser/custom-editors/custom-editor-contribution.js +2 -2
  83. package/lib/main/browser/custom-editors/custom-editor-contribution.js.map +1 -1
  84. package/lib/main/browser/custom-editors/custom-editor-opener.js +3 -3
  85. package/lib/main/browser/custom-editors/custom-editor-opener.js.map +1 -1
  86. package/lib/main/browser/custom-editors/custom-editor-service.js +1 -1
  87. package/lib/main/browser/custom-editors/custom-editor-service.js.map +1 -1
  88. package/lib/main/browser/custom-editors/custom-editor-widget.js +3 -3
  89. package/lib/main/browser/custom-editors/custom-editor-widget.js.map +1 -1
  90. package/lib/main/browser/custom-editors/custom-editors-main.js.map +1 -1
  91. package/lib/main/browser/custom-editors/paths.js +1 -1
  92. package/lib/main/browser/custom-editors/paths.js.map +1 -1
  93. package/lib/main/browser/custom-editors/plugin-custom-editor-registry.js +8 -8
  94. package/lib/main/browser/custom-editors/plugin-custom-editor-registry.js.map +1 -1
  95. package/lib/main/browser/custom-editors/undo-redo-service.js +1 -1
  96. package/lib/main/browser/custom-editors/undo-redo-service.js.map +1 -1
  97. package/lib/main/browser/debug/plugin-debug-service.js +4 -4
  98. package/lib/main/browser/debug/plugin-debug-service.js.map +1 -1
  99. package/lib/main/browser/debug/plugin-debug-session-contribution-registry.js +4 -4
  100. package/lib/main/browser/debug/plugin-debug-session-contribution-registry.js.map +1 -1
  101. package/lib/main/browser/dialogs/modal-notification.js +4 -4
  102. package/lib/main/browser/dialogs/modal-notification.js.map +1 -1
  103. package/lib/main/browser/dialogs-main.js.map +1 -1
  104. package/lib/main/browser/documents-main.js +1 -1
  105. package/lib/main/browser/documents-main.js.map +1 -1
  106. package/lib/main/browser/editor/untitled-resource.js +2 -2
  107. package/lib/main/browser/editor/untitled-resource.js.map +1 -1
  108. package/lib/main/browser/keybindings/keybindings-contribution-handler.js +2 -2
  109. package/lib/main/browser/keybindings/keybindings-contribution-handler.js.map +1 -1
  110. package/lib/main/browser/languages-main.js +12 -12
  111. package/lib/main/browser/languages-main.js.map +1 -1
  112. package/lib/main/browser/main-context.d.ts.map +1 -1
  113. package/lib/main/browser/main-context.js +3 -0
  114. package/lib/main/browser/main-context.js.map +1 -1
  115. package/lib/main/browser/main-file-system-event-service.js.map +1 -1
  116. package/lib/main/browser/menus/menus-contribution-handler.js +14 -14
  117. package/lib/main/browser/menus/menus-contribution-handler.js.map +1 -1
  118. package/lib/main/browser/output-channel-registry-main.js +2 -2
  119. package/lib/main/browser/output-channel-registry-main.js.map +1 -1
  120. package/lib/main/browser/plugin-authentication-service.d.ts +29 -0
  121. package/lib/main/browser/plugin-authentication-service.d.ts.map +1 -0
  122. package/lib/main/browser/plugin-authentication-service.js +81 -0
  123. package/lib/main/browser/plugin-authentication-service.js.map +1 -0
  124. package/lib/main/browser/plugin-contribution-handler.d.ts +1 -1
  125. package/lib/main/browser/plugin-contribution-handler.d.ts.map +1 -1
  126. package/lib/main/browser/plugin-contribution-handler.js +23 -23
  127. package/lib/main/browser/plugin-contribution-handler.js.map +1 -1
  128. package/lib/main/browser/plugin-ext-deploy-command.js +4 -4
  129. package/lib/main/browser/plugin-ext-deploy-command.js.map +1 -1
  130. package/lib/main/browser/plugin-ext-frontend-module.d.ts.map +1 -1
  131. package/lib/main/browser/plugin-ext-frontend-module.js +14 -10
  132. package/lib/main/browser/plugin-ext-frontend-module.js.map +1 -1
  133. package/lib/main/browser/plugin-ext-widget.js +6 -6
  134. package/lib/main/browser/plugin-ext-widget.js.map +1 -1
  135. package/lib/main/browser/plugin-frontend-contribution.js +3 -3
  136. package/lib/main/browser/plugin-frontend-contribution.js.map +1 -1
  137. package/lib/main/browser/plugin-frontend-view-contribution.js +1 -1
  138. package/lib/main/browser/plugin-frontend-view-contribution.js.map +1 -1
  139. package/lib/main/browser/plugin-icon-theme-service.js +11 -11
  140. package/lib/main/browser/plugin-icon-theme-service.js.map +1 -1
  141. package/lib/main/browser/plugin-shared-style.js +1 -1
  142. package/lib/main/browser/plugin-shared-style.js.map +1 -1
  143. package/lib/main/browser/plugin-storage.js.map +1 -1
  144. package/lib/main/browser/quick-open-main.js +1 -1
  145. package/lib/main/browser/quick-open-main.js.map +1 -1
  146. package/lib/main/browser/scm-main.js.map +1 -1
  147. package/lib/main/browser/selection-provider-command.js +3 -3
  148. package/lib/main/browser/selection-provider-command.js.map +1 -1
  149. package/lib/main/browser/text-editor-main.js +1 -1
  150. package/lib/main/browser/text-editor-main.js.map +1 -1
  151. package/lib/main/browser/text-editor-model-service.js +3 -3
  152. package/lib/main/browser/text-editor-model-service.js.map +1 -1
  153. package/lib/main/browser/text-editors-main.js +9 -9
  154. package/lib/main/browser/text-editors-main.js.map +1 -1
  155. package/lib/main/browser/view/plugin-tree-view-node-label-provider.js +3 -3
  156. package/lib/main/browser/view/plugin-tree-view-node-label-provider.js.map +1 -1
  157. package/lib/main/browser/view/plugin-view-registry.d.ts +8 -4
  158. package/lib/main/browser/view/plugin-view-registry.d.ts.map +1 -1
  159. package/lib/main/browser/view/plugin-view-registry.js +74 -18
  160. package/lib/main/browser/view/plugin-view-registry.js.map +1 -1
  161. package/lib/main/browser/view/plugin-view-widget.js +7 -7
  162. package/lib/main/browser/view/plugin-view-widget.js.map +1 -1
  163. package/lib/main/browser/view/tree-view-widget.js +16 -16
  164. package/lib/main/browser/view/tree-view-widget.js.map +1 -1
  165. package/lib/main/browser/view/view-context-key-service.js +3 -3
  166. package/lib/main/browser/view/view-context-key-service.js.map +1 -1
  167. package/lib/main/browser/view-column-service.js +4 -4
  168. package/lib/main/browser/view-column-service.js.map +1 -1
  169. package/lib/main/browser/webview/webview-environment.js +3 -3
  170. package/lib/main/browser/webview/webview-environment.js.map +1 -1
  171. package/lib/main/browser/webview/webview-frontend-security-warnings.js +4 -4
  172. package/lib/main/browser/webview/webview-frontend-security-warnings.js.map +1 -1
  173. package/lib/main/browser/webview/webview-preferences.js +1 -1
  174. package/lib/main/browser/webview/webview-preferences.js.map +1 -1
  175. package/lib/main/browser/webview/webview-resource-cache.js +1 -1
  176. package/lib/main/browser/webview/webview-resource-cache.js.map +1 -1
  177. package/lib/main/browser/webview/webview-theme-data-provider.d.ts +2 -2
  178. package/lib/main/browser/webview/webview-theme-data-provider.d.ts.map +1 -1
  179. package/lib/main/browser/webview/webview-theme-data-provider.js +5 -5
  180. package/lib/main/browser/webview/webview-theme-data-provider.js.map +1 -1
  181. package/lib/main/browser/webview/webview.js +17 -17
  182. package/lib/main/browser/webview/webview.js.map +1 -1
  183. package/lib/main/browser/webview-views/webview-views-main.d.ts +46 -0
  184. package/lib/main/browser/webview-views/webview-views-main.d.ts.map +1 -0
  185. package/lib/main/browser/webview-views/webview-views-main.js +127 -0
  186. package/lib/main/browser/webview-views/webview-views-main.js.map +1 -0
  187. package/lib/main/browser/webview-views/webview-views.d.ts +30 -0
  188. package/lib/main/browser/webview-views/webview-views.d.ts.map +1 -0
  189. package/lib/main/browser/webview-views/webview-views.js +23 -0
  190. package/lib/main/browser/webview-views/webview-views.js.map +1 -0
  191. package/lib/main/browser/webviews-main.js.map +1 -1
  192. package/lib/main/browser/window-state-main.js +1 -1
  193. package/lib/main/browser/window-state-main.js.map +1 -1
  194. package/lib/main/browser/workspace-main.d.ts +2 -0
  195. package/lib/main/browser/workspace-main.d.ts.map +1 -1
  196. package/lib/main/browser/workspace-main.js +6 -1
  197. package/lib/main/browser/workspace-main.js.map +1 -1
  198. package/lib/main/common/plugin-theia-environment.js +2 -2
  199. package/lib/main/common/plugin-theia-environment.js.map +1 -1
  200. package/lib/main/electron-browser/webview/electron-webview-widget-factory.js.map +1 -1
  201. package/lib/main/node/handlers/plugin-theia-directory-handler.js +1 -1
  202. package/lib/main/node/handlers/plugin-theia-directory-handler.js.map +1 -1
  203. package/lib/main/node/handlers/plugin-theia-file-handler.js +3 -3
  204. package/lib/main/node/handlers/plugin-theia-file-handler.js.map +1 -1
  205. package/lib/main/node/paths/plugin-paths-service.js +7 -7
  206. package/lib/main/node/paths/plugin-paths-service.js.map +1 -1
  207. package/lib/main/node/plugin-cli-contribution.js +1 -1
  208. package/lib/main/node/plugin-cli-contribution.js.map +1 -1
  209. package/lib/main/node/plugin-deployer-contribution.js +3 -3
  210. package/lib/main/node/plugin-deployer-contribution.js.map +1 -1
  211. package/lib/main/node/plugin-deployer-impl.d.ts +3 -1
  212. package/lib/main/node/plugin-deployer-impl.d.ts.map +1 -1
  213. package/lib/main/node/plugin-deployer-impl.js +24 -19
  214. package/lib/main/node/plugin-deployer-impl.js.map +1 -1
  215. package/lib/main/node/plugin-deployer-proxy-entry-impl.js +1 -1
  216. package/lib/main/node/plugin-deployer-proxy-entry-impl.js.map +1 -1
  217. package/lib/main/node/plugin-ext-backend-module.js +1 -1
  218. package/lib/main/node/plugin-ext-backend-module.js.map +1 -1
  219. package/lib/main/node/plugin-github-resolver.js +1 -1
  220. package/lib/main/node/plugin-github-resolver.js.map +1 -1
  221. package/lib/main/node/plugin-http-resolver.js +1 -1
  222. package/lib/main/node/plugin-http-resolver.js.map +1 -1
  223. package/lib/main/node/plugin-server-handler.js +3 -3
  224. package/lib/main/node/plugin-server-handler.js.map +1 -1
  225. package/lib/main/node/plugin-service.js +2 -2
  226. package/lib/main/node/plugin-service.js.map +1 -1
  227. package/lib/main/node/plugin-theia-deployer-participant.js +2 -2
  228. package/lib/main/node/plugin-theia-deployer-participant.js.map +1 -1
  229. package/lib/main/node/plugins-key-value-storage.js +4 -4
  230. package/lib/main/node/plugins-key-value-storage.js.map +1 -1
  231. package/lib/main/node/resolvers/local-directory-plugin-deployer-resolver.js +1 -1
  232. package/lib/main/node/resolvers/local-directory-plugin-deployer-resolver.js.map +1 -1
  233. package/lib/main/node/resolvers/local-file-plugin-deployer-resolver.js +1 -1
  234. package/lib/main/node/resolvers/local-file-plugin-deployer-resolver.js.map +1 -1
  235. package/lib/main/node/resolvers/local-plugin-deployer-resolver.js +1 -1
  236. package/lib/main/node/resolvers/local-plugin-deployer-resolver.js.map +1 -1
  237. package/lib/main/node/webview-backend-security-warnings.js +1 -1
  238. package/lib/main/node/webview-backend-security-warnings.js.map +1 -1
  239. package/lib/plugin/authentication-ext.d.ts +23 -8
  240. package/lib/plugin/authentication-ext.d.ts.map +1 -1
  241. package/lib/plugin/authentication-ext.js +28 -24
  242. package/lib/plugin/authentication-ext.js.map +1 -1
  243. package/lib/plugin/comments.js +6 -6
  244. package/lib/plugin/comments.js.map +1 -1
  245. package/lib/plugin/decorations.js +1 -1
  246. package/lib/plugin/decorations.js.map +1 -1
  247. package/lib/plugin/document-data.js +4 -4
  248. package/lib/plugin/document-data.js.map +1 -1
  249. package/lib/plugin/documents.js +1 -1
  250. package/lib/plugin/documents.js.map +1 -1
  251. package/lib/plugin/editors-and-documents.js +6 -6
  252. package/lib/plugin/editors-and-documents.js.map +1 -1
  253. package/lib/plugin/env.js +2 -2
  254. package/lib/plugin/env.js.map +1 -1
  255. package/lib/plugin/file-system-event-service-ext-impl.js +2 -2
  256. package/lib/plugin/file-system-event-service-ext-impl.js.map +1 -1
  257. package/lib/plugin/file-system-ext-impl.js +1 -1
  258. package/lib/plugin/file-system-ext-impl.js.map +1 -1
  259. package/lib/plugin/known-commands.js +17 -16
  260. package/lib/plugin/known-commands.js.map +1 -1
  261. package/lib/plugin/known-commands.spec.js +1 -1
  262. package/lib/plugin/known-commands.spec.js.map +1 -1
  263. package/lib/plugin/languages/completion.js.map +1 -1
  264. package/lib/plugin/languages/declaration.js +2 -2
  265. package/lib/plugin/languages/declaration.js.map +1 -1
  266. package/lib/plugin/languages/definition.js +2 -2
  267. package/lib/plugin/languages/definition.js.map +1 -1
  268. package/lib/plugin/languages/diagnostics.js +3 -3
  269. package/lib/plugin/languages/diagnostics.js.map +1 -1
  270. package/lib/plugin/languages/implementation.js +2 -2
  271. package/lib/plugin/languages/implementation.js.map +1 -1
  272. package/lib/plugin/languages/reference.js +1 -1
  273. package/lib/plugin/languages/reference.js.map +1 -1
  274. package/lib/plugin/languages/rename.js +1 -1
  275. package/lib/plugin/languages/rename.js.map +1 -1
  276. package/lib/plugin/languages/semantic-highlighting.js +4 -4
  277. package/lib/plugin/languages/semantic-highlighting.js.map +1 -1
  278. package/lib/plugin/languages/type-definition.js +2 -2
  279. package/lib/plugin/languages/type-definition.js.map +1 -1
  280. package/lib/plugin/languages.js +1 -1
  281. package/lib/plugin/languages.js.map +1 -1
  282. package/lib/plugin/node/debug/debug.js +7 -7
  283. package/lib/plugin/node/debug/debug.js.map +1 -1
  284. package/lib/plugin/node/debug/plugin-debug-adapter-starter.d.ts +1 -1
  285. package/lib/plugin/node/debug/plugin-debug-adapter-starter.d.ts.map +1 -1
  286. package/lib/plugin/node/debug/plugin-debug-adapter-starter.js +4 -4
  287. package/lib/plugin/node/debug/plugin-debug-adapter-starter.js.map +1 -1
  288. package/lib/plugin/node/debug/plugin-inline-debug-adapter.d.ts +34 -0
  289. package/lib/plugin/node/debug/plugin-inline-debug-adapter.d.ts.map +1 -0
  290. package/lib/plugin/node/debug/plugin-inline-debug-adapter.js +45 -0
  291. package/lib/plugin/node/debug/plugin-inline-debug-adapter.js.map +1 -0
  292. package/lib/plugin/node/env-node-ext.js +2 -2
  293. package/lib/plugin/node/env-node-ext.js.map +1 -1
  294. package/lib/plugin/path.spec.js +3 -3
  295. package/lib/plugin/path.spec.js.map +1 -1
  296. package/lib/plugin/plugin-context.d.ts.map +1 -1
  297. package/lib/plugin/plugin-context.js +62 -30
  298. package/lib/plugin/plugin-context.js.map +1 -1
  299. package/lib/plugin/plugin-manager.d.ts.map +1 -1
  300. package/lib/plugin/plugin-manager.js +7 -6
  301. package/lib/plugin/plugin-manager.js.map +1 -1
  302. package/lib/plugin/preference-registry.js +3 -3
  303. package/lib/plugin/preference-registry.js.map +1 -1
  304. package/lib/plugin/preferences/configuration.js +1 -1
  305. package/lib/plugin/preferences/configuration.js.map +1 -1
  306. package/lib/plugin/quick-open.js +1 -1
  307. package/lib/plugin/quick-open.js.map +1 -1
  308. package/lib/plugin/scm.js +1 -3
  309. package/lib/plugin/scm.js.map +1 -1
  310. package/lib/plugin/terminal-ext.d.ts +2 -2
  311. package/lib/plugin/terminal-ext.d.ts.map +1 -1
  312. package/lib/plugin/terminal-ext.js.map +1 -1
  313. package/lib/plugin/text-editor.js +10 -10
  314. package/lib/plugin/text-editor.js.map +1 -1
  315. package/lib/plugin/timeline.js.map +1 -1
  316. package/lib/plugin/type-converters.js +6 -5
  317. package/lib/plugin/type-converters.js.map +1 -1
  318. package/lib/plugin/type-converters.spec.js +5 -5
  319. package/lib/plugin/type-converters.spec.js.map +1 -1
  320. package/lib/plugin/types-impl.js +34 -32
  321. package/lib/plugin/types-impl.js.map +1 -1
  322. package/lib/plugin/webview-views.d.ts +68 -0
  323. package/lib/plugin/webview-views.d.ts.map +1 -0
  324. package/lib/plugin/webview-views.js +145 -0
  325. package/lib/plugin/webview-views.js.map +1 -0
  326. package/lib/plugin/webviews.d.ts +6 -0
  327. package/lib/plugin/webviews.d.ts.map +1 -1
  328. package/lib/plugin/webviews.js +29 -6
  329. package/lib/plugin/webviews.js.map +1 -1
  330. package/lib/plugin/workspace.d.ts +6 -0
  331. package/lib/plugin/workspace.d.ts.map +1 -1
  332. package/lib/plugin/workspace.js +21 -3
  333. package/lib/plugin/workspace.js.map +1 -1
  334. package/lib/plugin-ext-backend-electron-module.js +2 -2
  335. package/lib/plugin-ext-backend-electron-module.js.map +1 -1
  336. package/lib/plugin-ext-backend-module.js +2 -2
  337. package/lib/plugin-ext-backend-module.js.map +1 -1
  338. package/package.json +23 -23
  339. package/src/common/plugin-api-rpc-model.ts +12 -17
  340. package/src/common/plugin-api-rpc.ts +43 -13
  341. package/src/common/plugin-protocol.ts +7 -0
  342. package/src/hosted/browser/hosted-plugin.ts +20 -40
  343. package/src/hosted/node/hosted-plugin-deployer-handler.ts +23 -3
  344. package/src/hosted/node/plugin-reader.ts +2 -1
  345. package/src/hosted/node/scanners/scanner-theia.ts +2 -1
  346. package/src/main/browser/authentication-main.ts +137 -81
  347. package/src/main/browser/main-context.ts +4 -0
  348. package/src/main/browser/plugin-authentication-service.ts +71 -0
  349. package/src/main/browser/plugin-ext-frontend-module.ts +13 -8
  350. package/src/main/browser/view/plugin-view-registry.ts +73 -5
  351. package/src/main/browser/view-column-service.ts +1 -1
  352. package/src/main/browser/webview-views/webview-views-main.ts +142 -0
  353. package/src/main/browser/webview-views/webview-views.ts +38 -0
  354. package/src/main/browser/workspace-main.ts +9 -1
  355. package/src/main/electron-browser/webview/electron-webview-widget-factory.ts +2 -2
  356. package/src/main/node/paths/plugin-paths-service.ts +1 -1
  357. package/src/main/node/plugin-deployer-impl.ts +11 -7
  358. package/src/plugin/authentication-ext.ts +42 -32
  359. package/src/plugin/node/debug/plugin-debug-adapter-starter.ts +1 -1
  360. package/src/plugin/node/debug/plugin-inline-debug-adapter.ts +47 -0
  361. package/src/plugin/plugin-context.ts +47 -4
  362. package/src/plugin/plugin-manager.ts +2 -1
  363. package/src/plugin/terminal-ext.ts +2 -2
  364. package/src/plugin/webview-views.ts +213 -0
  365. package/src/plugin/webviews.ts +30 -0
  366. package/src/plugin/workspace.ts +23 -0
@@ -0,0 +1,142 @@
1
+ /********************************************************************************
2
+ * Copyright (C) 2021 SAP SE or an SAP affiliate company 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
+ * Copyright (c) Microsoft Corporation. All rights reserved.
18
+ * Licensed under the MIT License. See License.txt in the project root for license information.
19
+ *--------------------------------------------------------------------------------------------*/
20
+ // some code copied and modified from https://github.com/microsoft/vscode/blob/e1f0f8f51390dea5df9096718fb6b647ed5a9534/src/vs/workbench/api/browser/mainThreadWebviewViews.ts
21
+
22
+ import { inject, interfaces } from '@theia/core/shared/inversify';
23
+ import { WebviewViewsMain, MAIN_RPC_CONTEXT, WebviewViewsExt } from '../../../common/plugin-api-rpc';
24
+ import { RPCProtocol } from '../../../common/rpc-protocol';
25
+ import { Disposable, DisposableCollection, ILogger } from '@theia/core';
26
+ import { WebviewView } from './webview-views';
27
+ import { CancellationToken } from '@theia/core/lib/common/cancellation';
28
+ import { WebviewsMainImpl } from '../webviews-main';
29
+ import { Widget, WidgetManager } from '@theia/core/lib/browser';
30
+ import { PluginViewRegistry } from '../view/plugin-view-registry';
31
+
32
+ export class WebviewViewsMainImpl implements WebviewViewsMain, Disposable {
33
+
34
+ protected readonly proxy: WebviewViewsExt;
35
+ protected readonly toDispose = new DisposableCollection(
36
+ Disposable.create(() => { /* mark as not disposed */ })
37
+ );
38
+
39
+ protected readonly webviewViews = new Map<string, WebviewView>();
40
+ protected readonly webviewViewProviders = new Map<string, Disposable>();
41
+ protected readonly widgetManager: WidgetManager;
42
+ protected readonly pluginViewRegistry: PluginViewRegistry;
43
+
44
+ @inject(ILogger)
45
+ protected readonly logger: ILogger;
46
+
47
+ constructor(rpc: RPCProtocol,
48
+ container: interfaces.Container,
49
+ readonly webviewsMain: WebviewsMainImpl
50
+ ) {
51
+ this.proxy = rpc.getProxy(MAIN_RPC_CONTEXT.WEBVIEW_VIEWS_EXT);
52
+ this.widgetManager = container.get(WidgetManager);
53
+ this.pluginViewRegistry = container.get(PluginViewRegistry);
54
+ }
55
+
56
+ dispose(): void {
57
+ this.toDispose.dispose();
58
+ }
59
+
60
+ async $registerWebviewViewProvider(viewType: string, options: { retainContextWhenHidden?: boolean, serializeBuffersForPostMessage: boolean }): Promise<void> {
61
+
62
+ if (this.webviewViewProviders.has(viewType)) {
63
+ throw new Error(`View provider for ${viewType} already registered`);
64
+ }
65
+
66
+ const registration = await this.pluginViewRegistry.registerWebviewView(viewType, {
67
+ resolve: async (webviewView: WebviewView, cancellation: CancellationToken) => {
68
+ const handle = webviewView.webview.identifier.id;
69
+ this.webviewViews.set(handle, webviewView);
70
+ this.webviewsMain.hookWebview(webviewView.webview);
71
+
72
+ let state: string | undefined;
73
+ if (webviewView.webview.state) {
74
+ try {
75
+ state = JSON.parse(webviewView.webview.state);
76
+ console.log(state);
77
+ } catch (e) {
78
+ console.error('Could not load webview state', e, webviewView.webview.state);
79
+ }
80
+ }
81
+ if (options) {
82
+ webviewView.webview.options = options;
83
+ }
84
+
85
+ webviewView.onDidChangeVisibility(visible => {
86
+ this.proxy.$onDidChangeWebviewViewVisibility(handle, visible);
87
+ });
88
+
89
+ webviewView.onDidDispose(() => {
90
+ this.proxy.$disposeWebviewView(handle);
91
+ this.webviewViews.delete(handle);
92
+ });
93
+
94
+ try {
95
+ this.proxy.$resolveWebviewView(handle, viewType, webviewView.title, state, cancellation);
96
+ } catch (error) {
97
+ this.logger.error(`Error resolving webview view '${viewType}': ${error}`);
98
+ webviewView.webview.setHTML('failed to load plugin webview view');
99
+ }
100
+ }
101
+ });
102
+
103
+ this.webviewViewProviders.set(viewType, registration);
104
+ }
105
+
106
+ protected getWebview(handle: string): Widget | undefined {
107
+ return this.widgetManager.tryGetWidget(handle);
108
+ }
109
+
110
+ $unregisterWebviewViewProvider(viewType: string): void {
111
+ const provider = this.webviewViewProviders.get(viewType);
112
+ if (!provider) {
113
+ throw new Error(`No view provider for ${viewType} registered`);
114
+ }
115
+ provider.dispose();
116
+ this.webviewViewProviders.delete(viewType);
117
+ }
118
+
119
+ $setWebviewViewTitle(handle: string, value: string | undefined): void {
120
+ const webviewView = this.getWebviewView(handle);
121
+ webviewView.title = value;
122
+ }
123
+
124
+ $setWebviewViewDescription(handle: string, value: string | undefined): void {
125
+ const webviewView = this.getWebviewView(handle);
126
+ webviewView.description = value;
127
+ }
128
+
129
+ $show(handle: string, preserveFocus: boolean): void {
130
+ const webviewView = this.getWebviewView(handle);
131
+ webviewView.show(preserveFocus);
132
+ }
133
+
134
+ protected getWebviewView(handle: string): WebviewView {
135
+ const webviewView = this.webviewViews.get(handle);
136
+ if (!webviewView) {
137
+ throw new Error(`No webview view registered for handle '${handle}'`);
138
+ }
139
+ return webviewView;
140
+ }
141
+
142
+ }
@@ -0,0 +1,38 @@
1
+ /********************************************************************************
2
+ * Copyright (C) 2021 SAP SE or an SAP affiliate company 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
+ * Copyright (c) Microsoft Corporation. All rights reserved.
18
+ * Licensed under the MIT License. See License.txt in the project root for license information.
19
+ *--------------------------------------------------------------------------------------------*/
20
+ // copied and modified from https://github.com/microsoft/vscode/blob/a4a4cf5ace4472bc4f5176396bb290cafa15c518/src/vs/workbench/contrib/webviewView/browser/webviewViewService.ts
21
+
22
+ import { CancellationToken, Event } from '@theia/core/lib/common';
23
+ import { WebviewWidget } from '../webview/webview';
24
+
25
+ export interface WebviewView {
26
+ title?: string;
27
+ description?: string;
28
+ readonly webview: WebviewWidget;
29
+ readonly onDidChangeVisibility: Event<boolean>;
30
+ readonly onDidDispose: Event<void>;
31
+
32
+ dispose(): void;
33
+ show(preserveFocus: boolean): void;
34
+ }
35
+
36
+ export interface WebviewViewResolver {
37
+ resolve(webviewView: WebviewView, cancellation: CancellationToken): Promise<void>;
38
+ }
@@ -22,7 +22,7 @@ import { URI as Uri } from '@theia/core/shared/vscode-uri';
22
22
  import { UriComponents } from '../../common/uri-components';
23
23
  import { FileSearchService } from '@theia/file-search/lib/common/file-search-service';
24
24
  import URI from '@theia/core/lib/common/uri';
25
- import { WorkspaceService } from '@theia/workspace/lib/browser';
25
+ import { WorkspaceService, WorkspaceTrustService } from '@theia/workspace/lib/browser';
26
26
  import { Resource } from '@theia/core/lib/common/resource';
27
27
  import { Disposable, DisposableCollection } from '@theia/core/lib/common/disposable';
28
28
  import { Emitter, Event, ResourceResolver, CancellationToken } from '@theia/core';
@@ -52,6 +52,8 @@ export class WorkspaceMainImpl implements WorkspaceMain, Disposable {
52
52
 
53
53
  private workspaceService: WorkspaceService;
54
54
 
55
+ private workspaceTrustService: WorkspaceTrustService;
56
+
55
57
  private fsPreferences: FileSystemPreferences;
56
58
 
57
59
  protected readonly toDispose = new DisposableCollection();
@@ -67,6 +69,7 @@ export class WorkspaceMainImpl implements WorkspaceMain, Disposable {
67
69
  this.resourceResolver = container.get(TextContentResourceResolver);
68
70
  this.pluginServer = container.get(PluginServer);
69
71
  this.workspaceService = container.get(WorkspaceService);
72
+ this.workspaceTrustService = container.get(WorkspaceTrustService);
70
73
  this.fsPreferences = container.get(FileSystemPreferences);
71
74
 
72
75
  this.processWorkspaceFoldersChanged(this.workspaceService.tryGetRoots().map(root => root.resource.toString()));
@@ -76,6 +79,8 @@ export class WorkspaceMainImpl implements WorkspaceMain, Disposable {
76
79
  this.toDispose.push(this.workspaceService.onWorkspaceLocationChanged(stat => {
77
80
  this.proxy.$onWorkspaceLocationChanged(stat);
78
81
  }));
82
+
83
+ this.workspaceTrustService.getWorkspaceTrust().then(trust => this.proxy.$onWorkspaceTrustChanged(trust));
79
84
  }
80
85
 
81
86
  dispose(): void {
@@ -269,6 +274,9 @@ export class WorkspaceMainImpl implements WorkspaceMain, Disposable {
269
274
  await this.workspaceService.spliceRoots(start, deleteCount, ...rootsToAdd.map(root => new URI(root)));
270
275
  }
271
276
 
277
+ async $requestWorkspaceTrust(_options?: theia.WorkspaceTrustRequestOptions): Promise<boolean | undefined> {
278
+ return this.workspaceTrustService.requestWorkspaceTrust();
279
+ }
272
280
  }
273
281
 
274
282
  /**
@@ -35,7 +35,7 @@ export class ElectronWebviewWidgetFactory extends WebviewWidgetFactory {
35
35
  * @param endpoint cookie's target url
36
36
  */
37
37
  protected async attachElectronSecurityCookie(endpoint: string): Promise<void> {
38
- await electronRemote.session.defaultSession!.cookies.set({
38
+ await electronRemote.session.defaultSession.cookies.set({
39
39
  url: endpoint,
40
40
  name: ElectronSecurityToken,
41
41
  value: JSON.stringify(this.container.get(ElectronSecurityToken)),
@@ -59,7 +59,7 @@ export class ElectronCustomEditorWidgetFactory extends CustomEditorWidgetFactory
59
59
  * @param endpoint cookie's target url
60
60
  */
61
61
  protected async attachElectronSecurityCookie(endpoint: string): Promise<void> {
62
- await electronRemote.session.defaultSession!.cookies.set({
62
+ await electronRemote.session.defaultSession.cookies.set({
63
63
  url: endpoint,
64
64
  name: ElectronSecurityToken,
65
65
  value: JSON.stringify(this.container.get(ElectronSecurityToken)),
@@ -142,7 +142,7 @@ export class PluginPathsServiceImpl implements PluginPathsService {
142
142
 
143
143
  private async cleanupOldLogs(parentLogsDir: string): Promise<void> {
144
144
  // @ts-ignore - fs-extra types (Even latest version) is not updated with the `withFileTypes` option.
145
- const dirEntries = await readdir(parentLogsDir, { withFileTypes: true });
145
+ const dirEntries = await readdir(parentLogsDir, { withFileTypes: true }) as string[];
146
146
  // `Dirent` type is defined in @types/node since 10.10.0
147
147
  // However, upgrading the @types/node in theia to 10.11 (as defined in engine field)
148
148
  // Causes other packages to break in compilation, so we are using the infamous `any` type...
@@ -33,7 +33,7 @@ import { PluginDeployerFileHandlerContextImpl } from './plugin-deployer-file-han
33
33
  import { PluginDeployerDirectoryHandlerContextImpl } from './plugin-deployer-directory-handler-context-impl';
34
34
  import { ILogger, Emitter, ContributionProvider } from '@theia/core';
35
35
  import { PluginCliContribution } from './plugin-cli-contribution';
36
- import { performance } from 'perf_hooks';
36
+ import { Measurement, Stopwatch } from '@theia/core/lib/common';
37
37
 
38
38
  @injectable()
39
39
  export class PluginDeployerImpl implements PluginDeployer {
@@ -50,6 +50,9 @@ export class PluginDeployerImpl implements PluginDeployer {
50
50
  @inject(PluginCliContribution)
51
51
  protected readonly cliContribution: PluginCliContribution;
52
52
 
53
+ @inject(Stopwatch)
54
+ protected readonly stopwatch: Stopwatch;
55
+
53
56
  /**
54
57
  * Inject all plugin resolvers found at runtime.
55
58
  */
@@ -117,7 +120,7 @@ export class PluginDeployerImpl implements PluginDeployer {
117
120
  }
118
121
  }
119
122
 
120
- const startDeployTime = performance.now();
123
+ const deployPlugins = this.measure('deployPlugins');
121
124
  const unresolvedUserEntries = context.userEntries.map(id => ({
122
125
  id,
123
126
  type: PluginType.User
@@ -127,8 +130,9 @@ export class PluginDeployerImpl implements PluginDeployer {
127
130
  type: PluginType.System
128
131
  }));
129
132
  const plugins = await this.resolvePlugins([...unresolvedUserEntries, ...unresolvedSystemEntries]);
133
+ deployPlugins.log('Resolve plugins list');
130
134
  await this.deployPlugins(plugins);
131
- this.logMeasurement('Deploy plugins list', startDeployTime);
135
+ deployPlugins.log('Deploy plugins list');
132
136
  }
133
137
 
134
138
  async undeploy(pluginId: string): Promise<void> {
@@ -138,9 +142,9 @@ export class PluginDeployerImpl implements PluginDeployer {
138
142
  }
139
143
 
140
144
  async deploy(plugin: UnresolvedPluginEntry): Promise<void> {
141
- const startDeployTime = performance.now();
145
+ const deploy = this.measure('deploy');
142
146
  await this.deployMultipleEntries([plugin]);
143
- this.logMeasurement('Deploy plugin entry', startDeployTime);
147
+ deploy.log(`Deploy plugin ${plugin}`);
144
148
  }
145
149
 
146
150
  protected async deployMultipleEntries(plugins: UnresolvedPluginEntry[]): Promise<void> {
@@ -310,7 +314,7 @@ export class PluginDeployerImpl implements PluginDeployer {
310
314
  return pluginDeployerEntries;
311
315
  }
312
316
 
313
- protected logMeasurement(prefix: string, startTime: number): void {
314
- console.log(`${prefix} took: ${(performance.now() - startTime).toFixed(1)} ms`);
317
+ protected measure(name: string): Measurement {
318
+ return this.stopwatch.start(name);
315
319
  }
316
320
  }
@@ -28,8 +28,7 @@ import {
28
28
  } from '../common/plugin-api-rpc';
29
29
  import { RPCProtocol } from '../common/rpc-protocol';
30
30
  import { Emitter, Event } from '@theia/core/lib/common/event';
31
- import * as theia from '@theia/plugin';
32
- import { AuthenticationSession, AuthenticationSessionsChangeEvent } from '../common/plugin-api-rpc-model';
31
+ import * as theia from '@theia/plugin/';
33
32
 
34
33
  export class AuthenticationExtImpl implements AuthenticationExt {
35
34
  private proxy: AuthenticationMain;
@@ -61,82 +60,88 @@ export class AuthenticationExtImpl implements AuthenticationExt {
61
60
  return Object.freeze(this._providers.slice());
62
61
  }
63
62
 
64
- async getSession(requestingExtension: InternalPlugin, providerId: string, scopes: string[],
65
- options: theia.AuthenticationGetSessionOptions & { createIfNone: true }): Promise<theia.AuthenticationSession>;
66
- async getSession(requestingExtension: InternalPlugin, providerId: string, scopes: string[],
67
- options: theia.AuthenticationGetSessionOptions = {}): Promise<theia.AuthenticationSession | undefined> {
63
+ async getSession(requestingExtension: InternalPlugin, providerId: string, scopes: readonly string[],
64
+ options: theia.AuthenticationGetSessionOptions & ({ createIfNone: true } | { forceNewSession: true } | { forceNewSession: { detail: string } })):
65
+ Promise<theia.AuthenticationSession>;
66
+ async getSession(requestingExtension: InternalPlugin, providerId: string, scopes: readonly string[],
67
+ options: theia.AuthenticationGetSessionOptions & { forceNewSession: true }): Promise<theia.AuthenticationSession>;
68
+ async getSession(requestingExtension: InternalPlugin, providerId: string, scopes: readonly string[],
69
+ options: theia.AuthenticationGetSessionOptions & { forceNewSession: { detail: string } }): Promise<theia.AuthenticationSession>;
70
+ async getSession(requestingExtension: InternalPlugin, providerId: string, scopes: readonly string[],
71
+ options: theia.AuthenticationGetSessionOptions): Promise<theia.AuthenticationSession | undefined>;
72
+ async getSession(requestingExtension: InternalPlugin, providerId: string, scopes: readonly string[],
73
+ options: theia.AuthenticationGetSessionOptions = {}): Promise<theia.AuthenticationSession | undefined> {
68
74
  const extensionName = requestingExtension.model.displayName || requestingExtension.model.name;
69
75
  const extensionId = requestingExtension.model.id.toLowerCase();
70
-
71
76
  return this.proxy.$getSession(providerId, scopes, extensionId, extensionName, options);
72
77
  }
73
78
 
74
79
  async logout(providerId: string, sessionId: string): Promise<void> {
75
- return this.proxy.$logout(providerId, sessionId);
80
+ return this.proxy.$removeSession(providerId, sessionId);
76
81
  }
77
82
 
78
- registerAuthenticationProvider(provider: theia.AuthenticationProvider): theia.Disposable {
79
- if (this.authenticationProviders.get(provider.id)) {
80
- throw new Error(`An authentication provider with id '${provider.id}' is already registered.`);
83
+ registerAuthenticationProvider(id: string, label: string, provider: theia.AuthenticationProvider, options?: theia.AuthenticationProviderOptions): theia.Disposable {
84
+ if (this.authenticationProviders.get(id)) {
85
+ throw new Error(`An authentication provider with id '${id}' is already registered.`);
81
86
  }
82
87
 
83
- this.authenticationProviders.set(provider.id, provider);
84
- if (this._providerIds.indexOf(provider.id) === -1) {
85
- this._providerIds.push(provider.id);
88
+ this.authenticationProviders.set(id, provider);
89
+ if (this._providerIds.indexOf(id) === -1) {
90
+ this._providerIds.push(id);
86
91
  }
87
92
 
88
- if (!this._providers.find(p => p.id === provider.id)) {
93
+ if (!this._providers.find(p => p.id === id)) {
89
94
  this._providers.push({
90
- id: provider.id,
91
- label: provider.label
95
+ id,
96
+ label
92
97
  });
93
98
  }
94
99
 
95
100
  const listener = provider.onDidChangeSessions(e => {
96
- this.proxy.$updateSessions(provider.id, e);
101
+ this.proxy.$sendDidChangeSessions(id, e);
97
102
  });
98
103
 
99
- this.proxy.$registerAuthenticationProvider(provider.id, provider.label, provider.supportsMultipleAccounts);
104
+ this.proxy.$registerAuthenticationProvider(id, label, !!options?.supportsMultipleAccounts);
100
105
 
101
106
  return new Disposable(() => {
102
107
  listener.dispose();
103
- this.authenticationProviders.delete(provider.id);
104
- const index = this._providerIds.findIndex(id => id === provider.id);
108
+ this.authenticationProviders.delete(id);
109
+ const index = this._providerIds.findIndex(pid => id === pid);
105
110
  if (index > -1) {
106
111
  this._providerIds.splice(index);
107
112
  }
108
113
 
109
- const i = this._providers.findIndex(p => p.id === provider.id);
114
+ const i = this._providers.findIndex(p => p.id === id);
110
115
  if (i > -1) {
111
116
  this._providers.splice(i);
112
117
  }
113
118
 
114
- this.proxy.$unregisterAuthenticationProvider(provider.id);
119
+ this.proxy.$unregisterAuthenticationProvider(id);
115
120
  });
116
121
  }
117
122
 
118
- $login(providerId: string, scopes: string[]): Promise<AuthenticationSession> {
123
+ $createSession(providerId: string, scopes: string[]): Promise<theia.AuthenticationSession> {
119
124
  const authProvider = this.authenticationProviders.get(providerId);
120
125
  if (authProvider) {
121
- return Promise.resolve(authProvider.login(scopes));
126
+ return Promise.resolve(authProvider.createSession(scopes));
122
127
  }
123
128
 
124
129
  throw new Error(`Unable to find authentication provider with handle: ${providerId}`);
125
130
  }
126
131
 
127
- $logout(providerId: string, sessionId: string): Promise<void> {
132
+ $removeSession(providerId: string, sessionId: string): Promise<void> {
128
133
  const authProvider = this.authenticationProviders.get(providerId);
129
134
  if (authProvider) {
130
- return Promise.resolve(authProvider.logout(sessionId));
135
+ return Promise.resolve(authProvider.removeSession(sessionId));
131
136
  }
132
137
 
133
138
  throw new Error(`Unable to find authentication provider with handle: ${providerId}`);
134
139
  }
135
140
 
136
- async $getSessions(providerId: string): Promise<ReadonlyArray<AuthenticationSession>> {
141
+ async $getSessions(providerId: string, scopes?: string[]): Promise<ReadonlyArray<theia.AuthenticationSession>> {
137
142
  const authProvider = this.authenticationProviders.get(providerId);
138
143
  if (authProvider) {
139
- const sessions = await authProvider.getSessions();
144
+ const sessions = await authProvider.getSessions(scopes);
140
145
 
141
146
  /* Wrap the session object received from the plugin to prevent serialization mismatches
142
147
  e.g. if the plugin object is constructed with the help of getters they won't be serialized:
@@ -158,12 +163,12 @@ export class AuthenticationExtImpl implements AuthenticationExt {
158
163
  throw new Error(`Unable to find authentication provider with handle: ${providerId}`);
159
164
  }
160
165
 
161
- $onDidChangeAuthenticationSessions(id: string, label: string, event: AuthenticationSessionsChangeEvent): Promise<void> {
162
- this.onDidChangeSessionsEmitter.fire({ provider: { id, label }, ...event });
166
+ $onDidChangeAuthenticationSessions(id: string, label: string): Promise<void> {
167
+ this.onDidChangeSessionsEmitter.fire({ provider: { id, label } });
163
168
  return Promise.resolve();
164
169
  }
165
170
 
166
- async $onDidChangeAuthenticationProviders(added: theia.AuthenticationProviderInformation[], removed: theia.AuthenticationProviderInformation[]): Promise<void> {
171
+ async $onDidChangeAuthenticationProviders(added: theia.AuthenticationProviderInformation[], removed: theia.AuthenticationProviderInformation[]): Promise<void> {
167
172
  added.forEach(id => {
168
173
  if (this._providers.indexOf(id) === -1) {
169
174
  this._providers.push(id);
@@ -179,4 +184,9 @@ export class AuthenticationExtImpl implements AuthenticationExt {
179
184
 
180
185
  this.onDidChangeAuthenticationProvidersEmitter.fire({ added, removed });
181
186
  }
187
+
188
+ $setProviders(providers: theia.AuthenticationProviderInformation[]): Promise<void> {
189
+ this._providers.push(...providers);
190
+ return Promise.resolve(undefined);
191
+ }
182
192
  }
@@ -18,7 +18,7 @@ import * as net from 'net';
18
18
  import { ChildProcess, spawn, fork, ForkOptions } from 'child_process';
19
19
  import { DebugAdapter } from '@theia/debug/lib/node/debug-model';
20
20
  import { DebugAdapterExecutable, DebugAdapterInlineImplementation, DebugAdapterNamedPipeServer, DebugAdapterServer } from '../../types-impl';
21
- import { InlineDebugAdapter } from '@theia/debug/lib/node/inline-debug-adapter';
21
+ import { InlineDebugAdapter } from './plugin-inline-debug-adapter';
22
22
  import { ProcessDebugAdapter, SocketDebugAdapter } from '@theia/debug/lib/node/stream-debug-adapter';
23
23
  const isElectron = require('is-electron');
24
24
 
@@ -0,0 +1,47 @@
1
+ /********************************************************************************
2
+ * Copyright (C) 2021 Red Hat, Inc. 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
+ import { Emitter, Event } from '@theia/core/lib/common/event';
18
+ import { DebugAdapter } from '@theia/debug/lib/node/debug-model';
19
+ import * as theia from '@theia/plugin';
20
+
21
+ /**
22
+ * A debug adapter for using the inline implementation from a plugin.
23
+ */
24
+ export class InlineDebugAdapter implements DebugAdapter {
25
+ private messageReceivedEmitter = new Emitter<string>();
26
+ onMessageReceived: Event<string> = this.messageReceivedEmitter.event;
27
+ onError: Event<Error> = Event.None;
28
+ private closeEmitter = new Emitter<void>();
29
+ onClose: Event<void> = this.closeEmitter.event;
30
+
31
+ constructor(private debugAdapter: theia.DebugAdapter) {
32
+ this.debugAdapter.onDidSendMessage(msg => {
33
+ this.messageReceivedEmitter.fire(JSON.stringify(msg));
34
+ });
35
+ }
36
+
37
+ async start(): Promise<void> {
38
+ }
39
+
40
+ send(message: string): void {
41
+ this.debugAdapter.handleMessage(JSON.parse(message));
42
+ }
43
+
44
+ async stop(): Promise<void> {
45
+ this.debugAdapter.dispose();
46
+ }
47
+ }
@@ -173,6 +173,7 @@ import { TimelineExtImpl } from './timeline';
173
173
  import { ThemingExtImpl } from './theming';
174
174
  import { CommentsExtImpl } from './comments';
175
175
  import { CustomEditorsExtImpl } from './custom-editors';
176
+ import { WebviewViewsExtImpl } from './webview-views';
176
177
 
177
178
  export function createAPIFactory(
178
179
  rpc: RPCProtocol,
@@ -211,18 +212,36 @@ export function createAPIFactory(
211
212
  const themingExt = rpc.set(MAIN_RPC_CONTEXT.THEMING_EXT, new ThemingExtImpl(rpc));
212
213
  const commentsExt = rpc.set(MAIN_RPC_CONTEXT.COMMENTS_EXT, new CommentsExtImpl(rpc, commandRegistry, documents));
213
214
  const customEditorExt = rpc.set(MAIN_RPC_CONTEXT.CUSTOM_EDITORS_EXT, new CustomEditorsExtImpl(rpc, documents, webviewExt, workspaceExt));
215
+ const webviewViewsExt = rpc.set(MAIN_RPC_CONTEXT.WEBVIEW_VIEWS_EXT, new WebviewViewsExtImpl(rpc, webviewExt));
214
216
  rpc.set(MAIN_RPC_CONTEXT.DEBUG_EXT, debugExt);
215
217
 
216
218
  return function (plugin: InternalPlugin): typeof theia {
217
219
  const authentication: typeof theia.authentication = {
218
- registerAuthenticationProvider(provider: theia.AuthenticationProvider): theia.Disposable {
219
- return authenticationExt.registerAuthenticationProvider(provider);
220
+ // support older (< 1.53.0) and newer version of authentication provider registration
221
+ registerAuthenticationProvider(
222
+ id: string | theia.AuthenticationProvider, label?: string, provider?: theia.AuthenticationProvider, options?: theia.AuthenticationProviderOptions):
223
+ theia.Disposable {
224
+ // collect registration data based on registration type: new (all parameters given) vs old (data stored in provider)
225
+ const isNewRegistration = typeof id === 'string';
226
+ const regProvider = isNewRegistration ? provider! : id;
227
+ const regId = isNewRegistration ? id : regProvider.id;
228
+ const regLabel = isNewRegistration ? label! : regProvider.label;
229
+ const regOptions = isNewRegistration ? options : { supportsMultipleAccounts: regProvider.supportsMultipleAccounts };
230
+
231
+ // ensure that all methods of the new AuthenticationProvider are available or delegate otherwise
232
+ if (!regProvider['createSession']) {
233
+ regProvider['createSession'] = (scopes: string[]) => regProvider.login(scopes);
234
+ }
235
+ if (!regProvider['removeSession']) {
236
+ regProvider['removeSession'] = (sessionId: string) => regProvider.logout(sessionId);
237
+ }
238
+ return authenticationExt.registerAuthenticationProvider(regId, regLabel, regProvider, regOptions);
220
239
  },
221
240
  get onDidChangeAuthenticationProviders(): theia.Event<theia.AuthenticationProvidersChangeEvent> {
222
241
  return authenticationExt.onDidChangeAuthenticationProviders;
223
242
  },
224
243
  getProviderIds(): Thenable<ReadonlyArray<string>> {
225
- return authenticationExt.getProviderIds();
244
+ return Promise.resolve(authenticationExt.providerIds);
226
245
  },
227
246
  get providerIds(): string[] {
228
247
  return authenticationExt.providerIds;
@@ -238,6 +257,10 @@ export function createAPIFactory(
238
257
  },
239
258
  get onDidChangeSessions(): theia.Event<theia.AuthenticationSessionsChangeEvent> {
240
259
  return authenticationExt.onDidChangeSessions;
260
+ },
261
+ async hasSession(providerId: string, scopes: readonly string[]): Promise<boolean> {
262
+ const session = await authenticationExt.getSession(plugin, providerId, scopes, { silent: true });
263
+ return !!session;
241
264
  }
242
265
  };
243
266
  const commands: typeof theia.commands = {
@@ -410,13 +433,24 @@ export function createAPIFactory(
410
433
  options: { webviewOptions?: theia.WebviewPanelOptions, supportsMultipleEditorsPerDocument?: boolean } = {}): theia.Disposable {
411
434
  return customEditorExt.registerCustomEditorProvider(viewType, provider, options, plugin);
412
435
  },
436
+ registerWebviewViewProvider(viewType: string,
437
+ provider: theia.WebviewViewProvider,
438
+ options?: {
439
+ webviewOptions?: {
440
+ retainContextWhenHidden?: boolean
441
+ }
442
+ }): theia.Disposable {
443
+ return webviewViewsExt.registerWebviewViewProvider(viewType, provider, plugin, options?.webviewOptions);
444
+ },
413
445
  get state(): theia.WindowState {
414
446
  return windowStateExt.getWindowState();
415
447
  },
416
448
  onDidChangeWindowState(listener, thisArg?, disposables?): theia.Disposable {
417
449
  return windowStateExt.onDidChangeWindowState(listener, thisArg, disposables);
418
450
  },
419
- createTerminal(nameOrOptions: theia.TerminalOptions | theia.PseudoTerminalOptions | (string | undefined), shellPath?: string, shellArgs?: string[]): theia.Terminal {
451
+ createTerminal(nameOrOptions: theia.TerminalOptions | theia.PseudoTerminalOptions | theia.ExtensionTerminalOptions | (string | undefined),
452
+ shellPath?: string,
453
+ shellArgs?: string[]): theia.Terminal {
420
454
  return terminalExt.createTerminal(nameOrOptions, shellPath, shellArgs);
421
455
  },
422
456
  onDidCloseTerminal,
@@ -569,6 +603,15 @@ export function createAPIFactory(
569
603
  },
570
604
  registerTimelineProvider(scheme: string | string[], provider: theia.TimelineProvider): theia.Disposable {
571
605
  return timelineExt.registerTimelineProvider(plugin, scheme, provider);
606
+ },
607
+ get isTrusted(): boolean {
608
+ return workspaceExt.trusted;
609
+ },
610
+ async requestWorkspaceTrust(options?: theia.WorkspaceTrustRequestOptions): Promise<boolean | undefined> {
611
+ return workspaceExt.requestWorkspaceTrust(options);
612
+ },
613
+ get onDidGrantWorkspaceTrust(): theia.Event<void> {
614
+ return workspaceExt.onDidGrantWorkspaceTrust;
572
615
  }
573
616
  };
574
617
 
@@ -91,7 +91,8 @@ export class PluginManagerExtImpl implements PluginManagerExt, PluginManager {
91
91
  'onWebviewPanel',
92
92
  'onFileSystem',
93
93
  'onCustomEditor',
94
- 'onStartupFinished'
94
+ 'onStartupFinished',
95
+ 'onAuthenticationRequest'
95
96
  ]);
96
97
 
97
98
  private configStorage: ConfigStorage | undefined;
@@ -14,7 +14,7 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
  import { UUID } from '@theia/core/shared/@phosphor/coreutils';
17
- import { Terminal, TerminalOptions, PseudoTerminalOptions } from '@theia/plugin';
17
+ import { Terminal, TerminalOptions, PseudoTerminalOptions, ExtensionTerminalOptions } from '@theia/plugin';
18
18
  import { TerminalServiceExt, TerminalServiceMain, PLUGIN_RPC_CONTEXT } from '../common/plugin-api-rpc';
19
19
  import { RPCProtocol } from '../common/rpc-protocol';
20
20
  import { Event, Emitter } from '@theia/core/lib/common/event';
@@ -54,7 +54,7 @@ export class TerminalServiceExtImpl implements TerminalServiceExt {
54
54
  return [...this._terminals.values()];
55
55
  }
56
56
 
57
- createTerminal(nameOrOptions: TerminalOptions | PseudoTerminalOptions | (string | undefined), shellPath?: string, shellArgs?: string[]): Terminal {
57
+ createTerminal(nameOrOptions: TerminalOptions | PseudoTerminalOptions | ExtensionTerminalOptions | (string | undefined), shellPath?: string, shellArgs?: string[]): Terminal {
58
58
  let options: TerminalOptions;
59
59
  let pseudoTerminal: theia.Pseudoterminal | undefined = undefined;
60
60
  const id = `plugin-terminal-${UUID.uuid4()}`;