@theia/plugin-ext 1.53.0-next.4 → 1.53.0-next.55

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 (472) hide show
  1. package/README.md +54 -54
  2. package/lib/common/plugin-api-rpc.d.ts +19 -4
  3. package/lib/common/plugin-api-rpc.d.ts.map +1 -1
  4. package/lib/common/plugin-api-rpc.js +4 -2
  5. package/lib/common/plugin-api-rpc.js.map +1 -1
  6. package/lib/common/rpc-protocol.d.ts +14 -13
  7. package/lib/common/rpc-protocol.d.ts.map +1 -1
  8. package/lib/common/rpc-protocol.js +56 -53
  9. package/lib/common/rpc-protocol.js.map +1 -1
  10. package/lib/hosted/browser/hosted-plugin.d.ts +1 -0
  11. package/lib/hosted/browser/hosted-plugin.d.ts.map +1 -1
  12. package/lib/hosted/browser/hosted-plugin.js +22 -12
  13. package/lib/hosted/browser/hosted-plugin.js.map +1 -1
  14. package/lib/hosted/node/scanners/scanner-theia.d.ts.map +1 -1
  15. package/lib/hosted/node/scanners/scanner-theia.js +13 -1
  16. package/lib/hosted/node/scanners/scanner-theia.js.map +1 -1
  17. package/lib/main/browser/authentication-main.d.ts +6 -5
  18. package/lib/main/browser/authentication-main.d.ts.map +1 -1
  19. package/lib/main/browser/authentication-main.js +15 -9
  20. package/lib/main/browser/authentication-main.js.map +1 -1
  21. package/lib/main/browser/custom-editors/custom-editor-opener.d.ts +9 -3
  22. package/lib/main/browser/custom-editors/custom-editor-opener.d.ts.map +1 -1
  23. package/lib/main/browser/custom-editors/custom-editor-opener.js +120 -31
  24. package/lib/main/browser/custom-editors/custom-editor-opener.js.map +1 -1
  25. package/lib/main/browser/custom-editors/custom-editor-widget.d.ts +7 -4
  26. package/lib/main/browser/custom-editors/custom-editor-widget.d.ts.map +1 -1
  27. package/lib/main/browser/custom-editors/custom-editor-widget.js +21 -7
  28. package/lib/main/browser/custom-editors/custom-editor-widget.js.map +1 -1
  29. package/lib/main/browser/custom-editors/custom-editors-main.d.ts +3 -4
  30. package/lib/main/browser/custom-editors/custom-editors-main.d.ts.map +1 -1
  31. package/lib/main/browser/custom-editors/custom-editors-main.js +5 -55
  32. package/lib/main/browser/custom-editors/custom-editors-main.js.map +1 -1
  33. package/lib/main/browser/custom-editors/plugin-custom-editor-registry.d.ts +4 -3
  34. package/lib/main/browser/custom-editors/plugin-custom-editor-registry.d.ts.map +1 -1
  35. package/lib/main/browser/custom-editors/plugin-custom-editor-registry.js +24 -16
  36. package/lib/main/browser/custom-editors/plugin-custom-editor-registry.js.map +1 -1
  37. package/lib/main/browser/main-context.d.ts.map +1 -1
  38. package/lib/main/browser/main-context.js +3 -0
  39. package/lib/main/browser/main-context.js.map +1 -1
  40. package/lib/main/browser/menus/menus-contribution-handler.d.ts.map +1 -1
  41. package/lib/main/browser/menus/menus-contribution-handler.js +1 -1
  42. package/lib/main/browser/menus/menus-contribution-handler.js.map +1 -1
  43. package/lib/main/browser/menus/plugin-menu-command-adapter.d.ts +1 -0
  44. package/lib/main/browser/menus/plugin-menu-command-adapter.d.ts.map +1 -1
  45. package/lib/main/browser/menus/plugin-menu-command-adapter.js +22 -1
  46. package/lib/main/browser/menus/plugin-menu-command-adapter.js.map +1 -1
  47. package/lib/main/browser/menus/vscode-theia-menu-mappings.d.ts +2 -2
  48. package/lib/main/browser/menus/vscode-theia-menu-mappings.d.ts.map +1 -1
  49. package/lib/main/browser/menus/vscode-theia-menu-mappings.js +2 -0
  50. package/lib/main/browser/menus/vscode-theia-menu-mappings.js.map +1 -1
  51. package/lib/main/browser/notebooks/notebook-documents-and-editors-main.js +1 -1
  52. package/lib/main/browser/notebooks/notebook-documents-and-editors-main.js.map +1 -1
  53. package/lib/main/browser/notebooks/notebook-documents-main.d.ts.map +1 -1
  54. package/lib/main/browser/notebooks/notebook-documents-main.js +22 -3
  55. package/lib/main/browser/notebooks/notebook-documents-main.js.map +1 -1
  56. package/lib/main/browser/notebooks/notebook-editors-main.d.ts +1 -1
  57. package/lib/main/browser/notebooks/notebook-editors-main.d.ts.map +1 -1
  58. package/lib/main/browser/notebooks/notebook-editors-main.js +16 -2
  59. package/lib/main/browser/notebooks/notebook-editors-main.js.map +1 -1
  60. package/lib/main/browser/notebooks/renderers/cell-output-webview.d.ts +1 -1
  61. package/lib/main/browser/notebooks/renderers/cell-output-webview.d.ts.map +1 -1
  62. package/lib/main/browser/notebooks/renderers/cell-output-webview.js +152 -77
  63. package/lib/main/browser/notebooks/renderers/cell-output-webview.js.map +1 -1
  64. package/lib/main/browser/notebooks/renderers/output-webview-internal.d.ts.map +1 -1
  65. package/lib/main/browser/notebooks/renderers/output-webview-internal.js +38 -19
  66. package/lib/main/browser/notebooks/renderers/output-webview-internal.js.map +1 -1
  67. package/lib/main/browser/plugin-ext-frontend-module.d.ts.map +1 -1
  68. package/lib/main/browser/plugin-ext-frontend-module.js +18 -0
  69. package/lib/main/browser/plugin-ext-frontend-module.js.map +1 -1
  70. package/lib/main/browser/plugin-icon-theme-service.js +20 -20
  71. package/lib/main/browser/plugin-shared-style.js +14 -14
  72. package/lib/main/browser/uri-main.d.ts +16 -0
  73. package/lib/main/browser/uri-main.d.ts.map +1 -0
  74. package/lib/main/browser/uri-main.js +64 -0
  75. package/lib/main/browser/uri-main.js.map +1 -0
  76. package/lib/main/browser/view/plugin-view-registry.js +3 -3
  77. package/lib/main/browser/webview/webview-frontend-security-warnings.js +2 -2
  78. package/lib/main/browser/webview/webview-secondary-window-support.js +10 -10
  79. package/lib/main/browser/webview/webview.d.ts +1 -3
  80. package/lib/main/browser/webview/webview.d.ts.map +1 -1
  81. package/lib/main/browser/webview/webview.js +5 -4
  82. package/lib/main/browser/webview/webview.js.map +1 -1
  83. package/lib/main/browser/webviews-main.d.ts.map +1 -1
  84. package/lib/main/browser/webviews-main.js +6 -1
  85. package/lib/main/browser/webviews-main.js.map +1 -1
  86. package/lib/main/browser/workspace-main.d.ts +2 -0
  87. package/lib/main/browser/workspace-main.d.ts.map +1 -1
  88. package/lib/main/node/plugin-service.d.ts +1 -1
  89. package/lib/main/node/webview-backend-security-warnings.js +6 -6
  90. package/lib/plugin/authentication-ext.d.ts +3 -2
  91. package/lib/plugin/authentication-ext.d.ts.map +1 -1
  92. package/lib/plugin/authentication-ext.js +8 -5
  93. package/lib/plugin/authentication-ext.js.map +1 -1
  94. package/lib/plugin/custom-editors.d.ts +2 -4
  95. package/lib/plugin/custom-editors.d.ts.map +1 -1
  96. package/lib/plugin/custom-editors.js +5 -7
  97. package/lib/plugin/custom-editors.js.map +1 -1
  98. package/lib/plugin/env.d.ts +2 -0
  99. package/lib/plugin/env.d.ts.map +1 -1
  100. package/lib/plugin/env.js +4 -1
  101. package/lib/plugin/env.js.map +1 -1
  102. package/lib/plugin/known-commands.d.ts.map +1 -1
  103. package/lib/plugin/known-commands.js +1 -0
  104. package/lib/plugin/known-commands.js.map +1 -1
  105. package/lib/plugin/languages.d.ts +1 -0
  106. package/lib/plugin/languages.d.ts.map +1 -1
  107. package/lib/plugin/notebook/notebook-kernels.d.ts +2 -0
  108. package/lib/plugin/notebook/notebook-kernels.d.ts.map +1 -1
  109. package/lib/plugin/plugin-context.d.ts.map +1 -1
  110. package/lib/plugin/plugin-context.js +17 -6
  111. package/lib/plugin/plugin-context.js.map +1 -1
  112. package/lib/plugin/plugin-manager.d.ts.map +1 -1
  113. package/lib/plugin/plugin-manager.js +2 -1
  114. package/lib/plugin/plugin-manager.js.map +1 -1
  115. package/lib/plugin/scm.d.ts +1 -0
  116. package/lib/plugin/scm.d.ts.map +1 -1
  117. package/lib/plugin/terminal-ext.d.ts +3 -0
  118. package/lib/plugin/terminal-ext.d.ts.map +1 -1
  119. package/lib/plugin/terminal-ext.js +2 -0
  120. package/lib/plugin/terminal-ext.js.map +1 -1
  121. package/lib/plugin/type-converters.d.ts +6 -0
  122. package/lib/plugin/type-converters.d.ts.map +1 -1
  123. package/lib/plugin/type-converters.js +24 -3
  124. package/lib/plugin/type-converters.js.map +1 -1
  125. package/lib/plugin/types-impl.d.ts +8 -2
  126. package/lib/plugin/types-impl.d.ts.map +1 -1
  127. package/lib/plugin/types-impl.js +9 -1
  128. package/lib/plugin/types-impl.js.map +1 -1
  129. package/lib/plugin/uri-ext.d.ts +37 -0
  130. package/lib/plugin/uri-ext.d.ts.map +1 -0
  131. package/lib/plugin/uri-ext.js +50 -0
  132. package/lib/plugin/uri-ext.js.map +1 -0
  133. package/lib/plugin/webviews.js +1 -1
  134. package/lib/plugin/webviews.js.map +1 -1
  135. package/lib/plugin/workspace.d.ts +4 -0
  136. package/lib/plugin/workspace.d.ts.map +1 -1
  137. package/package.json +29 -29
  138. package/src/common/arrays.ts +70 -70
  139. package/src/common/assert.ts +23 -23
  140. package/src/common/cache.ts +51 -51
  141. package/src/common/character-classifier.ts +73 -73
  142. package/src/common/collections.ts +54 -54
  143. package/src/common/commands.ts +19 -19
  144. package/src/common/connection.ts +137 -137
  145. package/src/common/disposable-util.ts +39 -39
  146. package/src/common/editor-options.ts +74 -74
  147. package/src/common/env.ts +19 -19
  148. package/src/common/errors.ts +63 -63
  149. package/src/common/id-generator.ts +26 -26
  150. package/src/common/index.ts +24 -24
  151. package/src/common/language-pack-service.ts +34 -34
  152. package/src/common/link-computer.ts +354 -354
  153. package/src/common/object-identifier.ts +33 -33
  154. package/src/common/objects.ts +50 -50
  155. package/src/common/paths-util.ts +158 -158
  156. package/src/common/plugin-api-rpc-model.ts +907 -907
  157. package/src/common/plugin-api-rpc.ts +2752 -2738
  158. package/src/common/plugin-ext-api-contribution.ts +115 -115
  159. package/src/common/plugin-identifiers.ts +84 -84
  160. package/src/common/plugin-protocol.ts +1094 -1094
  161. package/src/common/reference-map.ts +38 -38
  162. package/src/common/rpc-protocol.ts +306 -310
  163. package/src/common/semantic-tokens-dto.ts +182 -182
  164. package/src/common/test-types.ts +154 -154
  165. package/src/common/types.ts +129 -129
  166. package/src/common/uint.ts +37 -37
  167. package/src/common/uri-components.ts +81 -81
  168. package/src/hosted/browser/hosted-plugin-watcher.ts +54 -54
  169. package/src/hosted/browser/hosted-plugin.ts +635 -624
  170. package/src/hosted/browser/plugin-worker.ts +52 -52
  171. package/src/hosted/browser/worker/debug-stub.ts +29 -29
  172. package/src/hosted/browser/worker/plugin-manifest-loader.ts +114 -114
  173. package/src/hosted/browser/worker/worker-env-ext.ts +40 -40
  174. package/src/hosted/browser/worker/worker-main.ts +212 -212
  175. package/src/hosted/browser/worker/worker-plugin-module.ts +80 -80
  176. package/src/hosted/common/hosted-plugin.ts +456 -456
  177. package/src/hosted/node/hosted-plugin-cli-contribution.ts +75 -75
  178. package/src/hosted/node/hosted-plugin-deployer-handler.ts +274 -274
  179. package/src/hosted/node/hosted-plugin-localization-service.ts +410 -410
  180. package/src/hosted/node/hosted-plugin-process.ts +248 -248
  181. package/src/hosted/node/hosted-plugin-protocol.ts +49 -49
  182. package/src/hosted/node/hosted-plugin.ts +116 -116
  183. package/src/hosted/node/metadata-scanner.ts +64 -64
  184. package/src/hosted/node/plugin-activation-events.ts +112 -112
  185. package/src/hosted/node/plugin-ext-hosted-backend-module.ts +94 -94
  186. package/src/hosted/node/plugin-host-module.ts +69 -69
  187. package/src/hosted/node/plugin-host-proxy.ts +82 -82
  188. package/src/hosted/node/plugin-host-rpc.ts +377 -377
  189. package/src/hosted/node/plugin-host.ts +110 -110
  190. package/src/hosted/node/plugin-language-pack-service.ts +43 -43
  191. package/src/hosted/node/plugin-manifest-loader.ts +32 -32
  192. package/src/hosted/node/plugin-reader.ts +136 -136
  193. package/src/hosted/node/plugin-service.ts +197 -197
  194. package/src/hosted/node/scanners/backend-init-theia.ts +71 -71
  195. package/src/hosted/node/scanners/file-plugin-uri-factory.ts +32 -32
  196. package/src/hosted/node/scanners/grammars-reader.ts +57 -57
  197. package/src/hosted/node/scanners/plugin-uri-factory.ts +33 -33
  198. package/src/hosted/node/scanners/scanner-theia.ts +963 -952
  199. package/src/hosted/node-electron/plugin-ext-hosted-electron-backend-module.ts +26 -26
  200. package/src/hosted/node-electron/scanner-theia-electron.ts +32 -32
  201. package/src/main/browser/authentication-main.ts +401 -388
  202. package/src/main/browser/clipboard-main.ts +38 -38
  203. package/src/main/browser/command-registry-main.ts +130 -130
  204. package/src/main/browser/commands.ts +104 -104
  205. package/src/main/browser/comments/comment-glyph-widget.ts +66 -66
  206. package/src/main/browser/comments/comment-thread-widget.tsx +696 -696
  207. package/src/main/browser/comments/comments-context-key-service.ts +68 -68
  208. package/src/main/browser/comments/comments-contribution.ts +268 -268
  209. package/src/main/browser/comments/comments-decorator.ts +110 -110
  210. package/src/main/browser/comments/comments-main.ts +482 -482
  211. package/src/main/browser/comments/comments-service.ts +205 -205
  212. package/src/main/browser/custom-editors/custom-editor-opener.tsx +205 -105
  213. package/src/main/browser/custom-editors/custom-editor-service.ts +108 -108
  214. package/src/main/browser/custom-editors/custom-editor-undo-redo-handler.ts +41 -41
  215. package/src/main/browser/custom-editors/custom-editor-widget-factory.ts +44 -44
  216. package/src/main/browser/custom-editors/custom-editor-widget.ts +127 -118
  217. package/src/main/browser/custom-editors/custom-editors-main.ts +526 -585
  218. package/src/main/browser/custom-editors/plugin-custom-editor-registry.ts +126 -120
  219. package/src/main/browser/data-transfer/data-transfer-type-converters.ts +68 -68
  220. package/src/main/browser/debug/debug-main.ts +397 -397
  221. package/src/main/browser/debug/plugin-debug-adapter-contribution.ts +48 -48
  222. package/src/main/browser/debug/plugin-debug-configuration-provider.ts +63 -63
  223. package/src/main/browser/debug/plugin-debug-service.ts +427 -427
  224. package/src/main/browser/debug/plugin-debug-session-contribution-registry.ts +76 -76
  225. package/src/main/browser/debug/plugin-debug-session-factory.ts +115 -115
  226. package/src/main/browser/decorations/decorations-main.ts +146 -146
  227. package/src/main/browser/dialogs/modal-notification.ts +112 -112
  228. package/src/main/browser/dialogs/style/modal-notification.css +123 -123
  229. package/src/main/browser/dialogs-main.ts +185 -185
  230. package/src/main/browser/documents-main.ts +275 -275
  231. package/src/main/browser/editors-and-documents-main.ts +425 -425
  232. package/src/main/browser/env-main.ts +60 -60
  233. package/src/main/browser/file-system-main-impl.ts +267 -267
  234. package/src/main/browser/hierarchy/hierarchy-types-converters.ts +189 -189
  235. package/src/main/browser/keybindings/keybindings-contribution-handler.ts +66 -66
  236. package/src/main/browser/label-service-main.ts +51 -51
  237. package/src/main/browser/languages-main.ts +1439 -1439
  238. package/src/main/browser/localization-main.ts +34 -34
  239. package/src/main/browser/main-context.ts +210 -206
  240. package/src/main/browser/main-file-system-event-service.ts +76 -76
  241. package/src/main/browser/menus/menus-contribution-handler.ts +172 -171
  242. package/src/main/browser/menus/plugin-menu-command-adapter.ts +358 -337
  243. package/src/main/browser/menus/vscode-theia-menu-mappings.ts +118 -116
  244. package/src/main/browser/message-registry-main.ts +43 -43
  245. package/src/main/browser/notebooks/notebook-documents-and-editors-main.ts +249 -249
  246. package/src/main/browser/notebooks/notebook-documents-main.ts +202 -182
  247. package/src/main/browser/notebooks/notebook-dto.ts +131 -131
  248. package/src/main/browser/notebooks/notebook-editors-main.ts +88 -75
  249. package/src/main/browser/notebooks/notebook-kernels-main.ts +339 -339
  250. package/src/main/browser/notebooks/notebook-renderers-main.ts +47 -47
  251. package/src/main/browser/notebooks/notebooks-main.ts +164 -164
  252. package/src/main/browser/notebooks/renderers/cell-output-webview.tsx +452 -375
  253. package/src/main/browser/notebooks/renderers/output-webview-internal.ts +636 -613
  254. package/src/main/browser/notebooks/renderers/webview-communication.ts +107 -107
  255. package/src/main/browser/notification-main.ts +26 -26
  256. package/src/main/browser/output-channel-registry-main.ts +53 -53
  257. package/src/main/browser/plugin-authentication-service.ts +71 -71
  258. package/src/main/browser/plugin-contribution-handler.ts +698 -698
  259. package/src/main/browser/plugin-ext-frontend-module.ts +291 -272
  260. package/src/main/browser/plugin-ext-widget.tsx +132 -132
  261. package/src/main/browser/plugin-frontend-contribution.ts +70 -70
  262. package/src/main/browser/plugin-frontend-view-contribution.ts +38 -38
  263. package/src/main/browser/plugin-icon-service.ts +92 -92
  264. package/src/main/browser/plugin-icon-theme-service.ts +625 -625
  265. package/src/main/browser/plugin-shared-style.ts +154 -154
  266. package/src/main/browser/plugin-storage.ts +55 -55
  267. package/src/main/browser/plugin-terminal-registry.ts +27 -27
  268. package/src/main/browser/preference-registry-main.ts +123 -123
  269. package/src/main/browser/quick-open-main.ts +367 -367
  270. package/src/main/browser/scm-main.ts +472 -472
  271. package/src/main/browser/secrets-main.ts +82 -82
  272. package/src/main/browser/selection-provider-command.ts +45 -45
  273. package/src/main/browser/status-bar-message-registry-main.ts +90 -90
  274. package/src/main/browser/style/comments.css +345 -345
  275. package/src/main/browser/style/index.css +84 -84
  276. package/src/main/browser/style/plugin-sidebar.css +73 -73
  277. package/src/main/browser/style/tree.css +54 -54
  278. package/src/main/browser/style/webview.css +55 -55
  279. package/src/main/browser/tabs/tabs-main.ts +384 -384
  280. package/src/main/browser/tasks-main.ts +268 -268
  281. package/src/main/browser/terminal-main.ts +370 -370
  282. package/src/main/browser/test-main.ts +632 -632
  283. package/src/main/browser/text-editor-main.ts +478 -478
  284. package/src/main/browser/text-editor-model-service.ts +111 -111
  285. package/src/main/browser/text-editors-main.ts +234 -234
  286. package/src/main/browser/theme-icon-override.ts +246 -246
  287. package/src/main/browser/theming-main.ts +42 -42
  288. package/src/main/browser/timeline-main.ts +80 -80
  289. package/src/main/browser/uri-main.ts +72 -0
  290. package/src/main/browser/view/dnd-file-content-store.ts +42 -42
  291. package/src/main/browser/view/plugin-tree-view-node-label-provider.ts +81 -81
  292. package/src/main/browser/view/plugin-view-registry.ts +967 -967
  293. package/src/main/browser/view/plugin-view-widget.ts +221 -221
  294. package/src/main/browser/view/tree-view-decorator-service.ts +51 -51
  295. package/src/main/browser/view/tree-view-widget.tsx +931 -931
  296. package/src/main/browser/view/tree-views-main.ts +205 -205
  297. package/src/main/browser/view/view-context-key-service.ts +64 -64
  298. package/src/main/browser/webview/pre/fake.html +14 -14
  299. package/src/main/browser/webview/pre/host.js +130 -130
  300. package/src/main/browser/webview/pre/index.html +17 -17
  301. package/src/main/browser/webview/pre/main.js +682 -682
  302. package/src/main/browser/webview/pre/service-worker.js +296 -295
  303. package/src/main/browser/webview/webview-context-keys.ts +62 -62
  304. package/src/main/browser/webview/webview-environment.ts +87 -87
  305. package/src/main/browser/webview/webview-frontend-security-warnings.ts +59 -59
  306. package/src/main/browser/webview/webview-preferences.ts +72 -72
  307. package/src/main/browser/webview/webview-resource-cache.ts +88 -88
  308. package/src/main/browser/webview/webview-secondary-window-support.ts +47 -47
  309. package/src/main/browser/webview/webview-theme-data-provider.ts +124 -124
  310. package/src/main/browser/webview/webview.ts +718 -719
  311. package/src/main/browser/webview-views/webview-views-main.ts +154 -154
  312. package/src/main/browser/webview-views/webview-views.ts +43 -43
  313. package/src/main/browser/webviews-main.ts +287 -282
  314. package/src/main/browser/window-activity-tracker.ts +96 -96
  315. package/src/main/browser/window-state-main.ts +85 -85
  316. package/src/main/browser/workspace-main.ts +424 -424
  317. package/src/main/common/basic-message-registry-main.ts +53 -53
  318. package/src/main/common/basic-notification-main.ts +86 -86
  319. package/src/main/common/env-main.ts +44 -44
  320. package/src/main/common/plugin-paths-protocol.ts +26 -26
  321. package/src/main/common/plugin-theia-environment.ts +36 -36
  322. package/src/main/common/webview-protocol.ts +28 -28
  323. package/src/main/electron-browser/plugin-ext-frontend-electron-module.ts +25 -25
  324. package/src/main/electron-browser/webview/electron-webview-widget-factory.ts +59 -59
  325. package/src/main/node/errors.spec.ts +37 -37
  326. package/src/main/node/handlers/plugin-theia-directory-handler.ts +137 -137
  327. package/src/main/node/handlers/plugin-theia-file-handler.ts +66 -66
  328. package/src/main/node/paths/const.ts +21 -21
  329. package/src/main/node/paths/plugin-paths-service.ts +163 -163
  330. package/src/main/node/plugin-cli-contribution.ts +85 -85
  331. package/src/main/node/plugin-deployer-contribution.ts +35 -35
  332. package/src/main/node/plugin-deployer-directory-handler-context-impl.ts +45 -45
  333. package/src/main/node/plugin-deployer-entry-impl.ts +132 -132
  334. package/src/main/node/plugin-deployer-file-handler-context-impl.ts +33 -33
  335. package/src/main/node/plugin-deployer-impl.ts +375 -375
  336. package/src/main/node/plugin-deployer-proxy-entry-impl.ts +96 -96
  337. package/src/main/node/plugin-deployer-resolver-context-impl.ts +55 -55
  338. package/src/main/node/plugin-ext-backend-module.ts +106 -106
  339. package/src/main/node/plugin-github-resolver.ts +139 -139
  340. package/src/main/node/plugin-http-resolver.ts +92 -92
  341. package/src/main/node/plugin-localization-server.ts +42 -42
  342. package/src/main/node/plugin-mgmt-cli-contribution.ts +64 -64
  343. package/src/main/node/plugin-remote-cli-contribution.ts +36 -36
  344. package/src/main/node/plugin-remote-copy-contribution.ts +36 -36
  345. package/src/main/node/plugin-server-handler.ts +69 -69
  346. package/src/main/node/plugin-service.ts +97 -97
  347. package/src/main/node/plugin-theia-deployer-participant.ts +32 -32
  348. package/src/main/node/plugin-uninstallation-manager.ts +74 -74
  349. package/src/main/node/plugins-key-value-storage.spec.ts +110 -110
  350. package/src/main/node/plugins-key-value-storage.ts +161 -161
  351. package/src/main/node/resolvers/local-directory-plugin-deployer-resolver.ts +37 -37
  352. package/src/main/node/resolvers/local-plugin-deployer-resolver.ts +56 -56
  353. package/src/main/node/temp-dir-util.ts +36 -36
  354. package/src/main/node/webview-backend-security-warnings.ts +45 -45
  355. package/src/main/style/status-bar.css +35 -35
  356. package/src/plugin/authentication-ext.ts +140 -136
  357. package/src/plugin/clipboard-ext.ts +43 -43
  358. package/src/plugin/command-registry.ts +219 -219
  359. package/src/plugin/comments.ts +549 -549
  360. package/src/plugin/custom-editors.ts +334 -336
  361. package/src/plugin/debug/debug-ext.ts +549 -549
  362. package/src/plugin/debug/plugin-debug-adapter-creator.ts +50 -50
  363. package/src/plugin/debug/plugin-debug-adapter-session.ts +106 -106
  364. package/src/plugin/debug/plugin-debug-adapter-tracker.ts +85 -85
  365. package/src/plugin/decorations.ts +140 -140
  366. package/src/plugin/dialogs.ts +96 -96
  367. package/src/plugin/document-data.ts +366 -366
  368. package/src/plugin/documents.ts +283 -283
  369. package/src/plugin/editors-and-documents.ts +176 -176
  370. package/src/plugin/env.ts +134 -129
  371. package/src/plugin/file-system-event-service-ext-impl.ts +256 -256
  372. package/src/plugin/file-system-ext-impl.ts +415 -415
  373. package/src/plugin/known-commands.spec.ts +50 -50
  374. package/src/plugin/known-commands.ts +429 -428
  375. package/src/plugin/label-service.ts +36 -36
  376. package/src/plugin/languages/call-hierarchy.ts +124 -124
  377. package/src/plugin/languages/code-action.ts +162 -162
  378. package/src/plugin/languages/color.ts +75 -75
  379. package/src/plugin/languages/completion.ts +183 -183
  380. package/src/plugin/languages/declaration.ts +72 -72
  381. package/src/plugin/languages/definition.ts +73 -73
  382. package/src/plugin/languages/diagnostics.ts +325 -325
  383. package/src/plugin/languages/document-drop-edit.ts +44 -44
  384. package/src/plugin/languages/document-formatting.ts +47 -47
  385. package/src/plugin/languages/document-highlight.ts +61 -61
  386. package/src/plugin/languages/evaluatable-expression.ts +47 -47
  387. package/src/plugin/languages/folding.ts +46 -46
  388. package/src/plugin/languages/hover.ts +58 -58
  389. package/src/plugin/languages/implementation.ts +73 -73
  390. package/src/plugin/languages/inlay-hints.ts +149 -149
  391. package/src/plugin/languages/inline-completion.ts +126 -126
  392. package/src/plugin/languages/inline-values.ts +50 -50
  393. package/src/plugin/languages/lens.ts +102 -102
  394. package/src/plugin/languages/link-provider.ts +81 -81
  395. package/src/plugin/languages/linked-editing-range.ts +48 -48
  396. package/src/plugin/languages/on-type-formatting.ts +50 -50
  397. package/src/plugin/languages/outline.ts +126 -126
  398. package/src/plugin/languages/range-formatting.ts +48 -48
  399. package/src/plugin/languages/reference.ts +58 -58
  400. package/src/plugin/languages/rename.ts +130 -130
  401. package/src/plugin/languages/selection-range.ts +80 -80
  402. package/src/plugin/languages/semantic-highlighting.ts +211 -211
  403. package/src/plugin/languages/signature.ts +82 -82
  404. package/src/plugin/languages/type-definition.ts +73 -73
  405. package/src/plugin/languages/type-hierarchy.ts +117 -117
  406. package/src/plugin/languages/util.ts +26 -26
  407. package/src/plugin/languages/workspace-symbol.ts +66 -66
  408. package/src/plugin/languages-utils.ts +68 -68
  409. package/src/plugin/languages.ts +1022 -1022
  410. package/src/plugin/localization-ext.ts +89 -89
  411. package/src/plugin/markdown-string.ts +115 -115
  412. package/src/plugin/message-registry.ts +70 -70
  413. package/src/plugin/node/debug/debug.spec.ts +98 -98
  414. package/src/plugin/node/debug/plugin-node-debug-adapter-creator.ts +167 -167
  415. package/src/plugin/node/env-node-ext.ts +64 -64
  416. package/src/plugin/node/plugin-container-module.ts +165 -165
  417. package/src/plugin/notebook/notebook-document.ts +446 -446
  418. package/src/plugin/notebook/notebook-documents.ts +58 -58
  419. package/src/plugin/notebook/notebook-editor.ts +116 -116
  420. package/src/plugin/notebook/notebook-editors.ts +71 -71
  421. package/src/plugin/notebook/notebook-kernels.ts +631 -631
  422. package/src/plugin/notebook/notebook-renderers.ts +71 -71
  423. package/src/plugin/notebook/notebooks.ts +449 -449
  424. package/src/plugin/notification.ts +80 -80
  425. package/src/plugin/output-channel/log-output-channel.ts +108 -108
  426. package/src/plugin/output-channel/output-channel-item.ts +73 -73
  427. package/src/plugin/output-channel-registry.ts +52 -52
  428. package/src/plugin/path.spec.ts +40 -40
  429. package/src/plugin/path.ts +68 -68
  430. package/src/plugin/plugin-context.ts +1606 -1595
  431. package/src/plugin/plugin-icon-path.ts +53 -53
  432. package/src/plugin/plugin-manager.ts +508 -507
  433. package/src/plugin/plugin-storage.ts +138 -138
  434. package/src/plugin/preference-registry.spec.ts +288 -288
  435. package/src/plugin/preference-registry.ts +335 -335
  436. package/src/plugin/prefix-sum-computer.ts +218 -218
  437. package/src/plugin/quick-open.ts +735 -735
  438. package/src/plugin/scm.ts +919 -919
  439. package/src/plugin/secrets-ext.ts +104 -104
  440. package/src/plugin/status-bar/status-bar-item.ts +193 -193
  441. package/src/plugin/status-bar-message-registry.ts +103 -103
  442. package/src/plugin/tabs.ts +431 -431
  443. package/src/plugin/tasks/task-provider.ts +57 -57
  444. package/src/plugin/tasks/tasks.ts +252 -252
  445. package/src/plugin/telemetry-ext.ts +298 -298
  446. package/src/plugin/terminal-ext.ts +569 -566
  447. package/src/plugin/test-item.ts +174 -174
  448. package/src/plugin/tests.ts +545 -545
  449. package/src/plugin/text-editor.ts +581 -581
  450. package/src/plugin/text-editors.ts +157 -157
  451. package/src/plugin/theming.ts +73 -73
  452. package/src/plugin/timeline.ts +186 -186
  453. package/src/plugin/tree/tree-views.ts +682 -682
  454. package/src/plugin/type-converters.spec.ts +476 -476
  455. package/src/plugin/type-converters.ts +1768 -1748
  456. package/src/plugin/types-impl.spec.ts +85 -85
  457. package/src/plugin/types-impl.ts +4011 -4001
  458. package/src/plugin/uri-ext.ts +60 -0
  459. package/src/plugin/webview-views.ts +228 -228
  460. package/src/plugin/webviews.ts +468 -468
  461. package/src/plugin/window-state.ts +75 -75
  462. package/src/plugin/word-helper.ts +162 -162
  463. package/src/plugin/workspace.ts +505 -505
  464. package/src/plugin-ext-backend-electron-module.ts +24 -24
  465. package/src/plugin-ext-backend-module.ts +24 -24
  466. package/src/plugin-ext-frontend-electron-module.ts +19 -19
  467. package/src/plugin-ext-frontend-module.ts +19 -19
  468. package/lib/common/proxy-handler.d.ts +0 -73
  469. package/lib/common/proxy-handler.d.ts.map +0 -1
  470. package/lib/common/proxy-handler.js +0 -106
  471. package/lib/common/proxy-handler.js.map +0 -1
  472. package/src/common/proxy-handler.ts +0 -143
@@ -1,367 +1,367 @@
1
- // *****************************************************************************
2
- // Copyright (C) 2018 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-only WITH Classpath-exception-2.0
15
- // *****************************************************************************
16
- /* eslint-disable @typescript-eslint/no-explicit-any */
17
-
18
- import { InputBoxOptions } from '@theia/plugin';
19
- import { interfaces } from '@theia/core/shared/inversify';
20
- import { RPCProtocol } from '../../common/rpc-protocol';
21
- import {
22
- QuickOpenExt,
23
- QuickOpenMain,
24
- MAIN_RPC_CONTEXT,
25
- TransferInputBox,
26
- TransferQuickPickItem,
27
- TransferQuickInput,
28
- TransferQuickInputButton,
29
- TransferQuickPickOptions
30
- } from '../../common/plugin-api-rpc';
31
- import {
32
- InputOptions,
33
- QuickInput,
34
- QuickInputButton,
35
- QuickInputButtonHandle,
36
- QuickInputService,
37
- QuickPickItem,
38
- QuickPickItemOrSeparator,
39
- codiconArray
40
- } from '@theia/core/lib/browser';
41
- import { DisposableCollection, Disposable } from '@theia/core/lib/common/disposable';
42
- import { CancellationToken } from '@theia/core/lib/common/cancellation';
43
- import { MonacoQuickInputService } from '@theia/monaco/lib/browser/monaco-quick-input-service';
44
- import { QuickInputButtons } from '../../plugin/types-impl';
45
- import { ThemeIcon } from '@theia/monaco-editor-core/esm/vs/base/common/themables';
46
- import { PluginSharedStyle } from './plugin-shared-style';
47
- import { QuickPickSeparator } from '@theia/core';
48
-
49
- export interface QuickInputSession {
50
- input: QuickInput;
51
- handlesToItems: Map<number, QuickPickItemOrSeparator>;
52
- }
53
-
54
- export class QuickOpenMainImpl implements QuickOpenMain, Disposable {
55
-
56
- private quickInputService: QuickInputService;
57
- private proxy: QuickOpenExt;
58
- private delegate: MonacoQuickInputService;
59
- private sharedStyle: PluginSharedStyle;
60
- private readonly items: Record<number, {
61
- resolve(items: QuickPickItemOrSeparator[]): void;
62
- reject(error: Error): void;
63
- }> = {};
64
-
65
- protected readonly toDispose = new DisposableCollection();
66
-
67
- constructor(rpc: RPCProtocol, container: interfaces.Container) {
68
- this.proxy = rpc.getProxy(MAIN_RPC_CONTEXT.QUICK_OPEN_EXT);
69
- this.delegate = container.get(MonacoQuickInputService);
70
- this.quickInputService = container.get(QuickInputService);
71
- this.sharedStyle = container.get(PluginSharedStyle);
72
- }
73
-
74
- dispose(): void {
75
- this.toDispose.dispose();
76
- }
77
-
78
- async $show(instance: number, options: TransferQuickPickOptions<TransferQuickPickItem>, token: CancellationToken): Promise<number | number[] | undefined> {
79
- const contents = new Promise<QuickPickItemOrSeparator[]>((resolve, reject) => {
80
- this.items[instance] = { resolve, reject };
81
- });
82
-
83
- const activeItem = await options.activeItem;
84
- const transformedOptions = {
85
- ...options,
86
- onDidFocus: (el: any) => {
87
- if (el) {
88
- this.proxy.$onItemSelected(Number.parseInt((<QuickPickItem>el).id!));
89
- }
90
- },
91
- activeItem: this.isItem(activeItem) ? this.toQuickPickItem(activeItem) : undefined
92
- };
93
-
94
- const result = await this.delegate.pick(contents, transformedOptions, token);
95
-
96
- if (Array.isArray(result)) {
97
- return result.map(({ id }) => Number.parseInt(id!));
98
- } else if (result) {
99
- return Number.parseInt(result.id!);
100
- }
101
- return undefined;
102
- }
103
-
104
- private isItem(item?: TransferQuickPickItem): item is TransferQuickPickItem & { kind: 'item' } {
105
- return item?.kind === 'item';
106
- }
107
-
108
- private toIconClasses(path: { light: string; dark: string } | ThemeIcon | string | undefined): string[] {
109
- const iconClasses: string[] = [];
110
- if (ThemeIcon.isThemeIcon(path)) {
111
- const codicon = codiconArray(path.id);
112
- iconClasses.push(...codicon);
113
- } else if (path) {
114
- const iconReference = this.sharedStyle.toIconClass(path);
115
- this.toDispose.push(iconReference);
116
- iconClasses.push(iconReference.object.iconClass);
117
- }
118
- return iconClasses;
119
- }
120
-
121
- private toIconClass(path: { light: string; dark: string } | ThemeIcon | string | undefined): string {
122
- return this.toIconClasses(path).join(' ');
123
- }
124
-
125
- private toQuickPickItem(item: undefined): undefined;
126
- private toQuickPickItem(item: TransferQuickPickItem & { kind: 'item' }): QuickPickItem;
127
- private toQuickPickItem(item: TransferQuickPickItem & { kind: 'separator' }): QuickPickSeparator;
128
- private toQuickPickItem(item: TransferQuickPickItem): QuickPickItemOrSeparator;
129
- private toQuickPickItem(item: TransferQuickPickItem | undefined): QuickPickItemOrSeparator | undefined {
130
- if (!item) {
131
- return undefined;
132
- } else if (item.kind === 'separator') {
133
- return {
134
- type: 'separator',
135
- label: item.label
136
- };
137
- }
138
- return {
139
- type: 'item',
140
- id: item.handle.toString(),
141
- label: item.label,
142
- description: item.description,
143
- detail: item.detail,
144
- alwaysShow: item.alwaysShow,
145
- iconClasses: this.toIconClasses(item.iconUrl),
146
- buttons: item.buttons ? this.convertToQuickInputButtons(item.buttons) : undefined
147
- };
148
- }
149
-
150
- $setItems(instance: number, items: TransferQuickPickItem[]): Promise<any> {
151
- if (this.items[instance]) {
152
- this.items[instance].resolve(items.map(item => this.toQuickPickItem(item)));
153
- delete this.items[instance];
154
- }
155
- return Promise.resolve();
156
- }
157
-
158
- $setError(instance: number, error: Error): Promise<void> {
159
- if (this.items[instance]) {
160
- this.items[instance].reject(error);
161
- delete this.items[instance];
162
- }
163
- return Promise.resolve();
164
- }
165
-
166
- $input(options: InputBoxOptions, validateInput: boolean, token: CancellationToken): Promise<string | undefined> {
167
- const inputOptions: InputOptions = Object.create(null);
168
-
169
- if (options) {
170
- inputOptions.title = options.title;
171
- inputOptions.password = options.password;
172
- inputOptions.placeHolder = options.placeHolder;
173
- inputOptions.valueSelection = options.valueSelection;
174
- inputOptions.prompt = options.prompt;
175
- inputOptions.value = options.value;
176
- inputOptions.ignoreFocusLost = options.ignoreFocusOut;
177
- }
178
-
179
- if (validateInput) {
180
- inputOptions.validateInput = (val: string) => this.proxy.$validateInput(val);
181
- }
182
-
183
- return this.quickInputService?.input(inputOptions, token);
184
- }
185
-
186
- async $showInputBox(options: TransferInputBox, validateInput: boolean): Promise<string | undefined> {
187
- return new Promise<string | undefined>((resolve, reject) => {
188
- const sessionId = options.id;
189
- const toDispose = new DisposableCollection();
190
-
191
- const inputBox = this.quickInputService?.createInputBox();
192
- inputBox.prompt = options.prompt;
193
- inputBox.placeholder = options.placeHolder;
194
- inputBox.value = options.value;
195
- if (options.busy) {
196
- inputBox.busy = options.busy;
197
- }
198
- if (options.enabled) {
199
- inputBox.enabled = options.enabled;
200
- }
201
- inputBox.ignoreFocusOut = options.ignoreFocusOut;
202
- inputBox.contextKey = options.contextKey;
203
- if (options.password) {
204
- inputBox.password = options.password;
205
- }
206
- inputBox.step = options.step;
207
- inputBox.title = options.title;
208
- inputBox.description = options.description;
209
- inputBox.totalSteps = options.totalSteps;
210
- inputBox.buttons = options.buttons ? this.convertToQuickInputButtons(options.buttons) : [];
211
- inputBox.validationMessage = options.validationMessage;
212
- if (validateInput) {
213
- options.validateInput = (val: string) => {
214
- this.proxy.$validateInput(val);
215
- };
216
- }
217
-
218
- toDispose.push(inputBox.onDidAccept(() => {
219
- this.proxy.$acceptOnDidAccept(sessionId);
220
- resolve(inputBox.value);
221
- }));
222
- toDispose.push(inputBox.onDidChangeValue((value: string) => {
223
- this.proxy.$acceptDidChangeValue(sessionId, value);
224
- inputBox.validationMessage = options.validateInput(value);
225
- }));
226
- toDispose.push(inputBox.onDidTriggerButton((button: any) => {
227
- this.proxy.$acceptOnDidTriggerButton(sessionId, button);
228
- }));
229
-
230
- toDispose.push(inputBox.onDidHide(() => {
231
- if (toDispose.disposed) {
232
- return;
233
- }
234
- this.proxy.$acceptOnDidHide(sessionId);
235
- toDispose.dispose();
236
- resolve(undefined);
237
- }));
238
- this.toDispose.push(toDispose);
239
-
240
- inputBox.show();
241
- });
242
- }
243
-
244
- private sessions = new Map<number, QuickInputSession>();
245
-
246
- $createOrUpdate(params: TransferQuickInput): Promise<void> {
247
- const sessionId = params.id;
248
- let session: QuickInputSession;
249
- const candidate = this.sessions.get(sessionId);
250
- if (!candidate) {
251
- if (params.type === 'quickPick') {
252
- const quickPick = this.quickInputService.createQuickPick();
253
- quickPick.onDidAccept(() => {
254
- this.proxy.$acceptOnDidAccept(sessionId);
255
- });
256
- quickPick.onDidChangeActive((items: QuickPickItem[]) => {
257
- this.proxy.$onDidChangeActive(sessionId, items.map(item => Number.parseInt(item.id!)));
258
- });
259
- quickPick.onDidChangeSelection((items: QuickPickItem[]) => {
260
- this.proxy.$onDidChangeSelection(sessionId, items.map(item => Number.parseInt(item.id!)));
261
- });
262
- quickPick.onDidTriggerButton((button: QuickInputButtonHandle) => {
263
- this.proxy.$acceptOnDidTriggerButton(sessionId, button);
264
- });
265
- quickPick.onDidTriggerItemButton(e => {
266
- this.proxy.$onDidTriggerItemButton(sessionId, Number.parseInt(e.item.id!), (e.button as TransferQuickPickItem).handle);
267
- });
268
- quickPick.onDidChangeValue((value: string) => {
269
- this.proxy.$acceptDidChangeValue(sessionId, value);
270
- });
271
- quickPick.onDidHide(() => {
272
- this.proxy.$acceptOnDidHide(sessionId);
273
- });
274
- session = {
275
- input: quickPick,
276
- handlesToItems: new Map()
277
- };
278
- } else {
279
- const inputBox = this.quickInputService.createInputBox();
280
- inputBox.onDidAccept(() => {
281
- this.proxy.$acceptOnDidAccept(sessionId);
282
- });
283
- inputBox.onDidTriggerButton((button: QuickInputButtonHandle) => {
284
- this.proxy.$acceptOnDidTriggerButton(sessionId, button);
285
- });
286
- inputBox.onDidChangeValue((value: string) => {
287
- this.proxy.$acceptDidChangeValue(sessionId, value);
288
- });
289
- inputBox.onDidHide(() => {
290
- this.proxy.$acceptOnDidHide(sessionId);
291
- });
292
- session = {
293
- input: inputBox,
294
- handlesToItems: new Map()
295
- };
296
- }
297
- this.sessions.set(sessionId, session);
298
- } else {
299
- session = candidate;
300
- }
301
- if (session) {
302
- const { input, handlesToItems } = session;
303
- for (const param in params) {
304
- if (param === 'id' || param === 'type') {
305
- continue;
306
- }
307
- if (param === 'visible') {
308
- if (params.visible) {
309
- input.show();
310
- } else {
311
- input.hide();
312
- }
313
- } else if (param === 'items') {
314
- handlesToItems.clear();
315
- const items: QuickPickItemOrSeparator[] = [];
316
- params[param].forEach((transferItem: TransferQuickPickItem) => {
317
- const item = this.toQuickPickItem(transferItem);
318
- items.push(item);
319
- handlesToItems.set(transferItem.handle, item);
320
- });
321
- (input as any)[param] = items;
322
- } else if (param === 'activeItems' || param === 'selectedItems') {
323
- (input as any)[param] = params[param]
324
- .filter((handle: number) => handlesToItems.has(handle))
325
- .map((handle: number) => handlesToItems.get(handle));
326
- } else if (param === 'buttons') {
327
- (input as any)[param] = params.buttons!.map(button => {
328
- if (button.handle === -1) {
329
- return this.quickInputService.backButton;
330
- }
331
- const { iconUrl, tooltip, handle } = button;
332
- return {
333
- tooltip,
334
- handle,
335
- iconClass: this.toIconClass(iconUrl)
336
- };
337
- });
338
- } else {
339
- (input as any)[param] = params[param];
340
- }
341
- }
342
- }
343
-
344
- return Promise.resolve(undefined);
345
- }
346
-
347
- $hide(): void {
348
- this.delegate.hide();
349
- }
350
-
351
- $dispose(sessionId: number): Promise<void> {
352
- const session = this.sessions.get(sessionId);
353
- if (session) {
354
- session.input.dispose();
355
- this.sessions.delete(sessionId);
356
- }
357
- return Promise.resolve(undefined);
358
- }
359
-
360
- private convertToQuickInputButtons(buttons: readonly TransferQuickInputButton[]): QuickInputButton[] {
361
- return buttons.map((button, i) => ({
362
- iconClass: this.toIconClass(button.iconUrl),
363
- tooltip: button.tooltip,
364
- handle: button === QuickInputButtons.Back ? -1 : i,
365
- } as QuickInputButton));
366
- }
367
- }
1
+ // *****************************************************************************
2
+ // Copyright (C) 2018 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-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+ /* eslint-disable @typescript-eslint/no-explicit-any */
17
+
18
+ import { InputBoxOptions } from '@theia/plugin';
19
+ import { interfaces } from '@theia/core/shared/inversify';
20
+ import { RPCProtocol } from '../../common/rpc-protocol';
21
+ import {
22
+ QuickOpenExt,
23
+ QuickOpenMain,
24
+ MAIN_RPC_CONTEXT,
25
+ TransferInputBox,
26
+ TransferQuickPickItem,
27
+ TransferQuickInput,
28
+ TransferQuickInputButton,
29
+ TransferQuickPickOptions
30
+ } from '../../common/plugin-api-rpc';
31
+ import {
32
+ InputOptions,
33
+ QuickInput,
34
+ QuickInputButton,
35
+ QuickInputButtonHandle,
36
+ QuickInputService,
37
+ QuickPickItem,
38
+ QuickPickItemOrSeparator,
39
+ codiconArray
40
+ } from '@theia/core/lib/browser';
41
+ import { DisposableCollection, Disposable } from '@theia/core/lib/common/disposable';
42
+ import { CancellationToken } from '@theia/core/lib/common/cancellation';
43
+ import { MonacoQuickInputService } from '@theia/monaco/lib/browser/monaco-quick-input-service';
44
+ import { QuickInputButtons } from '../../plugin/types-impl';
45
+ import { ThemeIcon } from '@theia/monaco-editor-core/esm/vs/base/common/themables';
46
+ import { PluginSharedStyle } from './plugin-shared-style';
47
+ import { QuickPickSeparator } from '@theia/core';
48
+
49
+ export interface QuickInputSession {
50
+ input: QuickInput;
51
+ handlesToItems: Map<number, QuickPickItemOrSeparator>;
52
+ }
53
+
54
+ export class QuickOpenMainImpl implements QuickOpenMain, Disposable {
55
+
56
+ private quickInputService: QuickInputService;
57
+ private proxy: QuickOpenExt;
58
+ private delegate: MonacoQuickInputService;
59
+ private sharedStyle: PluginSharedStyle;
60
+ private readonly items: Record<number, {
61
+ resolve(items: QuickPickItemOrSeparator[]): void;
62
+ reject(error: Error): void;
63
+ }> = {};
64
+
65
+ protected readonly toDispose = new DisposableCollection();
66
+
67
+ constructor(rpc: RPCProtocol, container: interfaces.Container) {
68
+ this.proxy = rpc.getProxy(MAIN_RPC_CONTEXT.QUICK_OPEN_EXT);
69
+ this.delegate = container.get(MonacoQuickInputService);
70
+ this.quickInputService = container.get(QuickInputService);
71
+ this.sharedStyle = container.get(PluginSharedStyle);
72
+ }
73
+
74
+ dispose(): void {
75
+ this.toDispose.dispose();
76
+ }
77
+
78
+ async $show(instance: number, options: TransferQuickPickOptions<TransferQuickPickItem>, token: CancellationToken): Promise<number | number[] | undefined> {
79
+ const contents = new Promise<QuickPickItemOrSeparator[]>((resolve, reject) => {
80
+ this.items[instance] = { resolve, reject };
81
+ });
82
+
83
+ const activeItem = await options.activeItem;
84
+ const transformedOptions = {
85
+ ...options,
86
+ onDidFocus: (el: any) => {
87
+ if (el) {
88
+ this.proxy.$onItemSelected(Number.parseInt((<QuickPickItem>el).id!));
89
+ }
90
+ },
91
+ activeItem: this.isItem(activeItem) ? this.toQuickPickItem(activeItem) : undefined
92
+ };
93
+
94
+ const result = await this.delegate.pick(contents, transformedOptions, token);
95
+
96
+ if (Array.isArray(result)) {
97
+ return result.map(({ id }) => Number.parseInt(id!));
98
+ } else if (result) {
99
+ return Number.parseInt(result.id!);
100
+ }
101
+ return undefined;
102
+ }
103
+
104
+ private isItem(item?: TransferQuickPickItem): item is TransferQuickPickItem & { kind: 'item' } {
105
+ return item?.kind === 'item';
106
+ }
107
+
108
+ private toIconClasses(path: { light: string; dark: string } | ThemeIcon | string | undefined): string[] {
109
+ const iconClasses: string[] = [];
110
+ if (ThemeIcon.isThemeIcon(path)) {
111
+ const codicon = codiconArray(path.id);
112
+ iconClasses.push(...codicon);
113
+ } else if (path) {
114
+ const iconReference = this.sharedStyle.toIconClass(path);
115
+ this.toDispose.push(iconReference);
116
+ iconClasses.push(iconReference.object.iconClass);
117
+ }
118
+ return iconClasses;
119
+ }
120
+
121
+ private toIconClass(path: { light: string; dark: string } | ThemeIcon | string | undefined): string {
122
+ return this.toIconClasses(path).join(' ');
123
+ }
124
+
125
+ private toQuickPickItem(item: undefined): undefined;
126
+ private toQuickPickItem(item: TransferQuickPickItem & { kind: 'item' }): QuickPickItem;
127
+ private toQuickPickItem(item: TransferQuickPickItem & { kind: 'separator' }): QuickPickSeparator;
128
+ private toQuickPickItem(item: TransferQuickPickItem): QuickPickItemOrSeparator;
129
+ private toQuickPickItem(item: TransferQuickPickItem | undefined): QuickPickItemOrSeparator | undefined {
130
+ if (!item) {
131
+ return undefined;
132
+ } else if (item.kind === 'separator') {
133
+ return {
134
+ type: 'separator',
135
+ label: item.label
136
+ };
137
+ }
138
+ return {
139
+ type: 'item',
140
+ id: item.handle.toString(),
141
+ label: item.label,
142
+ description: item.description,
143
+ detail: item.detail,
144
+ alwaysShow: item.alwaysShow,
145
+ iconClasses: this.toIconClasses(item.iconUrl),
146
+ buttons: item.buttons ? this.convertToQuickInputButtons(item.buttons) : undefined
147
+ };
148
+ }
149
+
150
+ $setItems(instance: number, items: TransferQuickPickItem[]): Promise<any> {
151
+ if (this.items[instance]) {
152
+ this.items[instance].resolve(items.map(item => this.toQuickPickItem(item)));
153
+ delete this.items[instance];
154
+ }
155
+ return Promise.resolve();
156
+ }
157
+
158
+ $setError(instance: number, error: Error): Promise<void> {
159
+ if (this.items[instance]) {
160
+ this.items[instance].reject(error);
161
+ delete this.items[instance];
162
+ }
163
+ return Promise.resolve();
164
+ }
165
+
166
+ $input(options: InputBoxOptions, validateInput: boolean, token: CancellationToken): Promise<string | undefined> {
167
+ const inputOptions: InputOptions = Object.create(null);
168
+
169
+ if (options) {
170
+ inputOptions.title = options.title;
171
+ inputOptions.password = options.password;
172
+ inputOptions.placeHolder = options.placeHolder;
173
+ inputOptions.valueSelection = options.valueSelection;
174
+ inputOptions.prompt = options.prompt;
175
+ inputOptions.value = options.value;
176
+ inputOptions.ignoreFocusLost = options.ignoreFocusOut;
177
+ }
178
+
179
+ if (validateInput) {
180
+ inputOptions.validateInput = (val: string) => this.proxy.$validateInput(val);
181
+ }
182
+
183
+ return this.quickInputService?.input(inputOptions, token);
184
+ }
185
+
186
+ async $showInputBox(options: TransferInputBox, validateInput: boolean): Promise<string | undefined> {
187
+ return new Promise<string | undefined>((resolve, reject) => {
188
+ const sessionId = options.id;
189
+ const toDispose = new DisposableCollection();
190
+
191
+ const inputBox = this.quickInputService?.createInputBox();
192
+ inputBox.prompt = options.prompt;
193
+ inputBox.placeholder = options.placeHolder;
194
+ inputBox.value = options.value;
195
+ if (options.busy) {
196
+ inputBox.busy = options.busy;
197
+ }
198
+ if (options.enabled) {
199
+ inputBox.enabled = options.enabled;
200
+ }
201
+ inputBox.ignoreFocusOut = options.ignoreFocusOut;
202
+ inputBox.contextKey = options.contextKey;
203
+ if (options.password) {
204
+ inputBox.password = options.password;
205
+ }
206
+ inputBox.step = options.step;
207
+ inputBox.title = options.title;
208
+ inputBox.description = options.description;
209
+ inputBox.totalSteps = options.totalSteps;
210
+ inputBox.buttons = options.buttons ? this.convertToQuickInputButtons(options.buttons) : [];
211
+ inputBox.validationMessage = options.validationMessage;
212
+ if (validateInput) {
213
+ options.validateInput = (val: string) => {
214
+ this.proxy.$validateInput(val);
215
+ };
216
+ }
217
+
218
+ toDispose.push(inputBox.onDidAccept(() => {
219
+ this.proxy.$acceptOnDidAccept(sessionId);
220
+ resolve(inputBox.value);
221
+ }));
222
+ toDispose.push(inputBox.onDidChangeValue((value: string) => {
223
+ this.proxy.$acceptDidChangeValue(sessionId, value);
224
+ inputBox.validationMessage = options.validateInput(value);
225
+ }));
226
+ toDispose.push(inputBox.onDidTriggerButton((button: any) => {
227
+ this.proxy.$acceptOnDidTriggerButton(sessionId, button);
228
+ }));
229
+
230
+ toDispose.push(inputBox.onDidHide(() => {
231
+ if (toDispose.disposed) {
232
+ return;
233
+ }
234
+ this.proxy.$acceptOnDidHide(sessionId);
235
+ toDispose.dispose();
236
+ resolve(undefined);
237
+ }));
238
+ this.toDispose.push(toDispose);
239
+
240
+ inputBox.show();
241
+ });
242
+ }
243
+
244
+ private sessions = new Map<number, QuickInputSession>();
245
+
246
+ $createOrUpdate(params: TransferQuickInput): Promise<void> {
247
+ const sessionId = params.id;
248
+ let session: QuickInputSession;
249
+ const candidate = this.sessions.get(sessionId);
250
+ if (!candidate) {
251
+ if (params.type === 'quickPick') {
252
+ const quickPick = this.quickInputService.createQuickPick();
253
+ quickPick.onDidAccept(() => {
254
+ this.proxy.$acceptOnDidAccept(sessionId);
255
+ });
256
+ quickPick.onDidChangeActive((items: QuickPickItem[]) => {
257
+ this.proxy.$onDidChangeActive(sessionId, items.map(item => Number.parseInt(item.id!)));
258
+ });
259
+ quickPick.onDidChangeSelection((items: QuickPickItem[]) => {
260
+ this.proxy.$onDidChangeSelection(sessionId, items.map(item => Number.parseInt(item.id!)));
261
+ });
262
+ quickPick.onDidTriggerButton((button: QuickInputButtonHandle) => {
263
+ this.proxy.$acceptOnDidTriggerButton(sessionId, button);
264
+ });
265
+ quickPick.onDidTriggerItemButton(e => {
266
+ this.proxy.$onDidTriggerItemButton(sessionId, Number.parseInt(e.item.id!), (e.button as TransferQuickPickItem).handle);
267
+ });
268
+ quickPick.onDidChangeValue((value: string) => {
269
+ this.proxy.$acceptDidChangeValue(sessionId, value);
270
+ });
271
+ quickPick.onDidHide(() => {
272
+ this.proxy.$acceptOnDidHide(sessionId);
273
+ });
274
+ session = {
275
+ input: quickPick,
276
+ handlesToItems: new Map()
277
+ };
278
+ } else {
279
+ const inputBox = this.quickInputService.createInputBox();
280
+ inputBox.onDidAccept(() => {
281
+ this.proxy.$acceptOnDidAccept(sessionId);
282
+ });
283
+ inputBox.onDidTriggerButton((button: QuickInputButtonHandle) => {
284
+ this.proxy.$acceptOnDidTriggerButton(sessionId, button);
285
+ });
286
+ inputBox.onDidChangeValue((value: string) => {
287
+ this.proxy.$acceptDidChangeValue(sessionId, value);
288
+ });
289
+ inputBox.onDidHide(() => {
290
+ this.proxy.$acceptOnDidHide(sessionId);
291
+ });
292
+ session = {
293
+ input: inputBox,
294
+ handlesToItems: new Map()
295
+ };
296
+ }
297
+ this.sessions.set(sessionId, session);
298
+ } else {
299
+ session = candidate;
300
+ }
301
+ if (session) {
302
+ const { input, handlesToItems } = session;
303
+ for (const param in params) {
304
+ if (param === 'id' || param === 'type') {
305
+ continue;
306
+ }
307
+ if (param === 'visible') {
308
+ if (params.visible) {
309
+ input.show();
310
+ } else {
311
+ input.hide();
312
+ }
313
+ } else if (param === 'items') {
314
+ handlesToItems.clear();
315
+ const items: QuickPickItemOrSeparator[] = [];
316
+ params[param].forEach((transferItem: TransferQuickPickItem) => {
317
+ const item = this.toQuickPickItem(transferItem);
318
+ items.push(item);
319
+ handlesToItems.set(transferItem.handle, item);
320
+ });
321
+ (input as any)[param] = items;
322
+ } else if (param === 'activeItems' || param === 'selectedItems') {
323
+ (input as any)[param] = params[param]
324
+ .filter((handle: number) => handlesToItems.has(handle))
325
+ .map((handle: number) => handlesToItems.get(handle));
326
+ } else if (param === 'buttons') {
327
+ (input as any)[param] = params.buttons!.map(button => {
328
+ if (button.handle === -1) {
329
+ return this.quickInputService.backButton;
330
+ }
331
+ const { iconUrl, tooltip, handle } = button;
332
+ return {
333
+ tooltip,
334
+ handle,
335
+ iconClass: this.toIconClass(iconUrl)
336
+ };
337
+ });
338
+ } else {
339
+ (input as any)[param] = params[param];
340
+ }
341
+ }
342
+ }
343
+
344
+ return Promise.resolve(undefined);
345
+ }
346
+
347
+ $hide(): void {
348
+ this.delegate.hide();
349
+ }
350
+
351
+ $dispose(sessionId: number): Promise<void> {
352
+ const session = this.sessions.get(sessionId);
353
+ if (session) {
354
+ session.input.dispose();
355
+ this.sessions.delete(sessionId);
356
+ }
357
+ return Promise.resolve(undefined);
358
+ }
359
+
360
+ private convertToQuickInputButtons(buttons: readonly TransferQuickInputButton[]): QuickInputButton[] {
361
+ return buttons.map((button, i) => ({
362
+ iconClass: this.toIconClass(button.iconUrl),
363
+ tooltip: button.tooltip,
364
+ handle: button === QuickInputButtons.Back ? -1 : i,
365
+ } as QuickInputButton));
366
+ }
367
+ }