@theia/plugin-ext 1.23.0-next.2 → 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 (362) 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/text-editor.js +10 -10
  311. package/lib/plugin/text-editor.js.map +1 -1
  312. package/lib/plugin/timeline.js.map +1 -1
  313. package/lib/plugin/type-converters.js +6 -5
  314. package/lib/plugin/type-converters.js.map +1 -1
  315. package/lib/plugin/type-converters.spec.js +5 -5
  316. package/lib/plugin/type-converters.spec.js.map +1 -1
  317. package/lib/plugin/types-impl.js +34 -32
  318. package/lib/plugin/types-impl.js.map +1 -1
  319. package/lib/plugin/webview-views.d.ts +68 -0
  320. package/lib/plugin/webview-views.d.ts.map +1 -0
  321. package/lib/plugin/webview-views.js +145 -0
  322. package/lib/plugin/webview-views.js.map +1 -0
  323. package/lib/plugin/webviews.d.ts +6 -0
  324. package/lib/plugin/webviews.d.ts.map +1 -1
  325. package/lib/plugin/webviews.js +29 -6
  326. package/lib/plugin/webviews.js.map +1 -1
  327. package/lib/plugin/workspace.d.ts +6 -0
  328. package/lib/plugin/workspace.d.ts.map +1 -1
  329. package/lib/plugin/workspace.js +21 -3
  330. package/lib/plugin/workspace.js.map +1 -1
  331. package/lib/plugin-ext-backend-electron-module.js +2 -2
  332. package/lib/plugin-ext-backend-electron-module.js.map +1 -1
  333. package/lib/plugin-ext-backend-module.js +2 -2
  334. package/lib/plugin-ext-backend-module.js.map +1 -1
  335. package/package.json +23 -23
  336. package/src/common/plugin-api-rpc-model.ts +12 -17
  337. package/src/common/plugin-api-rpc.ts +43 -13
  338. package/src/common/plugin-protocol.ts +7 -0
  339. package/src/hosted/browser/hosted-plugin.ts +20 -40
  340. package/src/hosted/node/hosted-plugin-deployer-handler.ts +23 -3
  341. package/src/hosted/node/plugin-reader.ts +2 -1
  342. package/src/hosted/node/scanners/scanner-theia.ts +2 -1
  343. package/src/main/browser/authentication-main.ts +137 -81
  344. package/src/main/browser/main-context.ts +4 -0
  345. package/src/main/browser/plugin-authentication-service.ts +71 -0
  346. package/src/main/browser/plugin-ext-frontend-module.ts +13 -8
  347. package/src/main/browser/view/plugin-view-registry.ts +73 -5
  348. package/src/main/browser/view-column-service.ts +1 -1
  349. package/src/main/browser/webview-views/webview-views-main.ts +142 -0
  350. package/src/main/browser/webview-views/webview-views.ts +38 -0
  351. package/src/main/browser/workspace-main.ts +9 -1
  352. package/src/main/electron-browser/webview/electron-webview-widget-factory.ts +2 -2
  353. package/src/main/node/paths/plugin-paths-service.ts +1 -1
  354. package/src/main/node/plugin-deployer-impl.ts +11 -7
  355. package/src/plugin/authentication-ext.ts +42 -32
  356. package/src/plugin/node/debug/plugin-debug-adapter-starter.ts +1 -1
  357. package/src/plugin/node/debug/plugin-inline-debug-adapter.ts +47 -0
  358. package/src/plugin/plugin-context.ts +44 -3
  359. package/src/plugin/plugin-manager.ts +2 -1
  360. package/src/plugin/webview-views.ts +213 -0
  361. package/src/plugin/webviews.ts +30 -0
  362. package/src/plugin/workspace.ts +23 -0
@@ -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,6 +433,15 @@ 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
  },
@@ -571,6 +603,15 @@ export function createAPIFactory(
571
603
  },
572
604
  registerTimelineProvider(scheme: string | string[], provider: theia.TimelineProvider): theia.Disposable {
573
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;
574
615
  }
575
616
  };
576
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;
@@ -0,0 +1,213 @@
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 of the code is copied and modified from https://github.com/microsoft/vscode/blob/e1f0f8f51390dea5df9096718fb6b647ed5a9534/src/vs/workbench/api/common/extHostWebviewView.ts
21
+
22
+ import { Disposable } from './types-impl';
23
+ import { RPCProtocol } from '../common/rpc-protocol';
24
+ import { PLUGIN_RPC_CONTEXT, WebviewViewsMain, WebviewViewsExt, Plugin } from '../common/plugin-api-rpc';
25
+ import { CancellationToken } from '@theia/core/lib/common/cancellation';
26
+ import { WebviewImpl, WebviewsExtImpl } from './webviews';
27
+ import { WebviewViewProvider } from '@theia/plugin';
28
+ import { Emitter, Event } from '@theia/core/lib/common/event';
29
+ import * as theia from '@theia/plugin';
30
+
31
+ export class WebviewViewsExtImpl implements WebviewViewsExt {
32
+
33
+ private readonly proxy: WebviewViewsMain;
34
+
35
+ protected readonly viewProviders = new Map<string, {
36
+ readonly provider: WebviewViewProvider;
37
+ readonly plugin: Plugin;
38
+ }>();
39
+ protected readonly webviewViews = new Map<string, WebviewViewExtImpl>();
40
+
41
+ constructor(rpc: RPCProtocol,
42
+ private readonly webviewsExt: WebviewsExtImpl) {
43
+ this.proxy = rpc.getProxy(PLUGIN_RPC_CONTEXT.WEBVIEW_VIEWS_MAIN);
44
+ }
45
+
46
+ registerWebviewViewProvider(
47
+ viewType: string,
48
+ provider: WebviewViewProvider,
49
+ plugin: Plugin,
50
+ webviewOptions?: {
51
+ retainContextWhenHidden?: boolean
52
+ }
53
+ ): Disposable {
54
+ if (this.viewProviders.has(viewType)) {
55
+ throw new Error(`View provider for '${viewType}' already registered`);
56
+ }
57
+
58
+ this.viewProviders.set(viewType, { provider: provider, plugin: plugin });
59
+
60
+ this.proxy.$registerWebviewViewProvider(viewType, {
61
+ retainContextWhenHidden: webviewOptions?.retainContextWhenHidden,
62
+ serializeBuffersForPostMessage: false,
63
+ });
64
+
65
+ return new Disposable(() => {
66
+ this.viewProviders.delete(viewType);
67
+ this.proxy.$unregisterWebviewViewProvider(viewType);
68
+ });
69
+ }
70
+
71
+ async $resolveWebviewView(handle: string,
72
+ viewType: string,
73
+ title: string | undefined,
74
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
+ state: any,
76
+ cancellation: CancellationToken
77
+ ): Promise<void> {
78
+ const entry = this.viewProviders.get(viewType);
79
+ if (!entry) {
80
+ throw new Error(`No view provider found for '${viewType}'`);
81
+ }
82
+
83
+ const { provider, plugin } = entry;
84
+
85
+ const webviewNoPanel = this.webviewsExt.createNewWebview({}, plugin, handle);
86
+ const revivedView = new WebviewViewExtImpl(handle, this.proxy, viewType, title, webviewNoPanel, true);
87
+ this.webviewViews.set(handle, revivedView);
88
+ await provider.resolveWebviewView(revivedView, { state }, cancellation);
89
+ }
90
+
91
+ async $onDidChangeWebviewViewVisibility(
92
+ handle: string,
93
+ visible: boolean
94
+ ): Promise<void> {
95
+ const webviewView = this.getWebviewView(handle);
96
+ webviewView.setVisible(visible);
97
+ webviewView.onDidChangeVisibilityEmitter.fire(visible);
98
+ }
99
+
100
+ async $disposeWebviewView(handle: string): Promise<void> {
101
+ const webviewView = this.getWebviewView(handle);
102
+ this.webviewViews.delete(handle);
103
+ webviewView.dispose();
104
+
105
+ this.webviewsExt.deleteWebview(handle);
106
+ }
107
+
108
+ protected getWebviewView(handle: string): WebviewViewExtImpl {
109
+ const entry = this.webviewViews.get(handle);
110
+ if (!entry) {
111
+ throw new Error('No webview found');
112
+ }
113
+
114
+ return entry;
115
+ }
116
+ }
117
+
118
+ export class WebviewViewExtImpl implements theia.WebviewView {
119
+
120
+ readonly onDidChangeVisibilityEmitter = new Emitter<boolean>();
121
+ readonly onDidChangeVisibility = this.onDidChangeVisibilityEmitter.event;
122
+
123
+ readonly onDidDisposeEmitter = new Emitter<void>();
124
+ readonly onDidDispose = this.onDidDisposeEmitter.event;
125
+
126
+ readonly handle: string;
127
+ readonly proxy: WebviewViewsMain;
128
+
129
+ readonly _viewType: string;
130
+ readonly _webview: WebviewImpl;
131
+
132
+ _isDisposed = false;
133
+ _isVisible: boolean;
134
+ _title: string | undefined;
135
+ _description: string | undefined;
136
+
137
+ constructor(
138
+ handle: string,
139
+ proxy: WebviewViewsMain,
140
+ viewType: string,
141
+ title: string | undefined,
142
+ webview: WebviewImpl,
143
+ isVisible: boolean,
144
+ ) {
145
+ this._viewType = viewType;
146
+ this._title = title;
147
+ this.handle = handle;
148
+ this.proxy = proxy;
149
+ this._webview = webview;
150
+ this._isVisible = isVisible;
151
+ }
152
+ onDispose: Event<void>;
153
+
154
+ dispose(): void {
155
+ if (this._isDisposed) {
156
+ return;
157
+ }
158
+
159
+ this._isDisposed = true;
160
+ this.onDidDisposeEmitter.fire();
161
+ }
162
+
163
+ get title(): string | undefined {
164
+ this.assertNotDisposed();
165
+ return this._title;
166
+ }
167
+
168
+ set title(value: string | undefined) {
169
+ this.assertNotDisposed();
170
+ if (this.title !== value) {
171
+ this.title = value;
172
+ this.proxy.$setWebviewViewTitle(this.handle, value);
173
+ }
174
+ }
175
+
176
+ get description(): string | undefined {
177
+ this.assertNotDisposed();
178
+ return this._description;
179
+ }
180
+
181
+ set description(value: string | undefined) {
182
+ this.assertNotDisposed();
183
+ if (this._description !== value) {
184
+ this._description = value;
185
+ this.proxy.$setWebviewViewDescription(this.handle, value);
186
+ }
187
+ }
188
+
189
+ get visible(): boolean { return this._isVisible; }
190
+ get webview(): WebviewImpl { return this._webview; }
191
+ get viewType(): string { return this._viewType; }
192
+
193
+ setVisible(visible: boolean): void {
194
+ if (visible === this._isVisible || this._isDisposed) {
195
+ return;
196
+ }
197
+
198
+ this._isVisible = visible;
199
+ this.onDidChangeVisibilityEmitter.fire(this._isVisible);
200
+ }
201
+
202
+ show(preserveFocus?: boolean): void {
203
+ this.assertNotDisposed();
204
+ this.proxy.$show(this.handle, !!preserveFocus);
205
+ }
206
+
207
+ protected assertNotDisposed(): void {
208
+ if (this._isDisposed) {
209
+ throw new Error('Webview is disposed');
210
+ }
211
+ }
212
+ }
213
+
@@ -27,12 +27,16 @@ import { PluginIconPath } from './plugin-icon-path';
27
27
  export class WebviewsExtImpl implements WebviewsExt {
28
28
  private readonly proxy: WebviewsMain;
29
29
  private readonly webviewPanels = new Map<string, WebviewPanelImpl>();
30
+ private readonly webviews = new Map<string, WebviewImpl>();
30
31
  private readonly serializers = new Map<string, {
31
32
  serializer: theia.WebviewPanelSerializer,
32
33
  plugin: Plugin
33
34
  }>();
34
35
  private initData: WebviewInitData | undefined;
35
36
 
37
+ readonly onDidDisposeEmitter = new Emitter<void>();
38
+ readonly onDidDispose: Event<void> = this.onDidDisposeEmitter.event;
39
+
36
40
  constructor(
37
41
  rpc: RPCProtocol,
38
42
  private readonly workspace: WorkspaceExtImpl,
@@ -49,6 +53,11 @@ export class WebviewsExtImpl implements WebviewsExt {
49
53
  const panel = this.getWebviewPanel(handle);
50
54
  if (panel) {
51
55
  panel.webview.onMessageEmitter.fire(message);
56
+ } else {
57
+ const webview = this.getWebview(handle);
58
+ if (webview) {
59
+ webview.onMessageEmitter.fire(message);
60
+ }
52
61
  }
53
62
  }
54
63
  $onDidChangeWebviewPanelViewState(handle: string, newState: WebviewPanelViewState): void {
@@ -128,6 +137,19 @@ export class WebviewsExtImpl implements WebviewsExt {
128
137
  return panel;
129
138
  }
130
139
 
140
+ createNewWebview(
141
+ options: theia.WebviewPanelOptions & theia.WebviewOptions,
142
+ plugin: Plugin,
143
+ viewId: string
144
+ ): WebviewImpl {
145
+ if (!this.initData) {
146
+ throw new Error('Webviews are not initialized');
147
+ }
148
+ const webview = new WebviewImpl(viewId, this.proxy, options, this.initData, this.workspace, plugin);
149
+ this.webviews.set(viewId, webview);
150
+ return webview;
151
+ }
152
+
131
153
  registerWebviewPanelSerializer(
132
154
  viewType: string,
133
155
  serializer: theia.WebviewPanelSerializer,
@@ -152,6 +174,14 @@ export class WebviewsExtImpl implements WebviewsExt {
152
174
  }
153
175
  return undefined;
154
176
  }
177
+
178
+ public deleteWebview(handle: string): void {
179
+ this.webviews.delete(handle);
180
+ }
181
+
182
+ public getWebview(handle: string): WebviewImpl | undefined {
183
+ return this.webviews.get(handle);
184
+ }
155
185
  }
156
186
 
157
187
  export class WebviewImpl implements theia.Webview {
@@ -56,6 +56,10 @@ export class WorkspaceExtImpl implements WorkspaceExt {
56
56
  private searchInWorkspaceEmitter: Emitter<{ result?: theia.TextSearchResult, searchId: number }> = new Emitter<{ result?: theia.TextSearchResult, searchId: number }>();
57
57
  protected workspaceSearchSequence: number = 0;
58
58
 
59
+ private _trusted?: boolean = undefined;
60
+ private didGrantWorkspaceTrustEmitter = new Emitter<void>();
61
+ public readonly onDidGrantWorkspaceTrust: Event<void> = this.didGrantWorkspaceTrustEmitter.event;
62
+
59
63
  constructor(rpc: RPCProtocol,
60
64
  private editorsAndDocuments: EditorsAndDocumentsExtImpl,
61
65
  private messageService: MessageRegistryExt) {
@@ -418,4 +422,23 @@ export class WorkspaceExtImpl implements WorkspaceExt {
418
422
  this.workspaceFileUri = URI.parse(workspace.resource.toString());
419
423
  }
420
424
  }
425
+
426
+ get trusted(): boolean {
427
+ if (this._trusted === undefined) {
428
+ this.requestWorkspaceTrust();
429
+ }
430
+ return !!this._trusted;
431
+ }
432
+
433
+ requestWorkspaceTrust(options?: theia.WorkspaceTrustRequestOptions): Promise<boolean | undefined> {
434
+ return this.proxy.$requestWorkspaceTrust(options);
435
+ }
436
+
437
+ $onWorkspaceTrustChanged(trust: boolean | undefined): void {
438
+ if (!this._trusted && trust) {
439
+ this._trusted = trust;
440
+ this.didGrantWorkspaceTrustEmitter.fire();
441
+ }
442
+ }
443
+
421
444
  }