@theia/core 1.65.0-next.6 → 1.65.0

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 (440) hide show
  1. package/README.md +6 -6
  2. package/i18n/nls.cs.json +117 -15
  3. package/i18n/nls.de.json +117 -15
  4. package/i18n/nls.es.json +117 -15
  5. package/i18n/nls.fr.json +117 -15
  6. package/i18n/nls.hu.json +117 -15
  7. package/i18n/nls.it.json +117 -15
  8. package/i18n/nls.ja.json +117 -15
  9. package/i18n/nls.json +121 -19
  10. package/i18n/nls.ko.json +117 -15
  11. package/i18n/nls.pl.json +117 -15
  12. package/i18n/nls.pt-br.json +117 -15
  13. package/i18n/nls.ru.json +117 -15
  14. package/i18n/nls.tr.json +117 -15
  15. package/i18n/nls.zh-cn.json +117 -15
  16. package/i18n/nls.zh-tw.json +117 -15
  17. package/lib/browser/breadcrumbs/breadcrumbs-renderer.d.ts +1 -1
  18. package/lib/browser/breadcrumbs/breadcrumbs-renderer.d.ts.map +1 -1
  19. package/lib/browser/breadcrumbs/breadcrumbs-renderer.js +1 -1
  20. package/lib/browser/breadcrumbs/breadcrumbs-renderer.js.map +1 -1
  21. package/lib/browser/catalog.json +202 -30
  22. package/lib/browser/common-frontend-contribution.d.ts +2 -3
  23. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  24. package/lib/browser/common-frontend-contribution.js +3 -4
  25. package/lib/browser/common-frontend-contribution.js.map +1 -1
  26. package/lib/browser/dialogs/react-dialog.d.ts.map +1 -1
  27. package/lib/browser/dialogs/react-dialog.js +1 -0
  28. package/lib/browser/dialogs/react-dialog.js.map +1 -1
  29. package/lib/browser/encoding-registry.d.ts +1 -1
  30. package/lib/browser/encoding-registry.d.ts.map +1 -1
  31. package/lib/browser/encoding-registry.js +1 -1
  32. package/lib/browser/encoding-registry.js.map +1 -1
  33. package/lib/browser/frontend-application-bindings.d.ts.map +1 -1
  34. package/lib/browser/frontend-application-bindings.js +10 -17
  35. package/lib/browser/frontend-application-bindings.js.map +1 -1
  36. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  37. package/lib/browser/frontend-application-module.js +10 -6
  38. package/lib/browser/frontend-application-module.js.map +1 -1
  39. package/lib/browser/frontend-application.d.ts +1 -1
  40. package/lib/browser/frontend-application.d.ts.map +1 -1
  41. package/lib/browser/frontend-application.js +1 -1
  42. package/lib/browser/frontend-application.js.map +1 -1
  43. package/lib/browser/hover-service.d.ts +1 -2
  44. package/lib/browser/hover-service.d.ts.map +1 -1
  45. package/lib/browser/hover-service.js +1 -2
  46. package/lib/browser/hover-service.js.map +1 -1
  47. package/lib/browser/icon-theme-service.d.ts +3 -2
  48. package/lib/browser/icon-theme-service.d.ts.map +1 -1
  49. package/lib/browser/icon-theme-service.js +4 -3
  50. package/lib/browser/icon-theme-service.js.map +1 -1
  51. package/lib/browser/index.d.ts +0 -1
  52. package/lib/browser/index.d.ts.map +1 -1
  53. package/lib/browser/index.js +0 -1
  54. package/lib/browser/index.js.map +1 -1
  55. package/lib/browser/json-schema-store.d.ts +2 -0
  56. package/lib/browser/json-schema-store.d.ts.map +1 -1
  57. package/lib/browser/json-schema-store.js +10 -3
  58. package/lib/browser/json-schema-store.js.map +1 -1
  59. package/lib/browser/keybinding.d.ts +1 -1
  60. package/lib/browser/keybinding.d.ts.map +1 -1
  61. package/lib/browser/keybinding.js +1 -1
  62. package/lib/browser/keybinding.js.map +1 -1
  63. package/lib/browser/keybinding.spec.js +1 -1
  64. package/lib/browser/keybinding.spec.js.map +1 -1
  65. package/lib/browser/menu/browser-menu-plugin.d.ts +3 -3
  66. package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
  67. package/lib/browser/menu/browser-menu-plugin.js +4 -5
  68. package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
  69. package/lib/browser/open-with-service.d.ts +1 -1
  70. package/lib/browser/open-with-service.d.ts.map +1 -1
  71. package/lib/browser/open-with-service.js +3 -3
  72. package/lib/browser/open-with-service.js.map +1 -1
  73. package/lib/browser/opener-service.d.ts +1 -2
  74. package/lib/browser/opener-service.d.ts.map +1 -1
  75. package/lib/browser/opener-service.js.map +1 -1
  76. package/lib/browser/preferences/frontend-config-preference-contributions.d.ts +6 -0
  77. package/lib/browser/preferences/frontend-config-preference-contributions.d.ts.map +1 -0
  78. package/lib/browser/preferences/frontend-config-preference-contributions.js +60 -0
  79. package/lib/browser/preferences/frontend-config-preference-contributions.js.map +1 -0
  80. package/lib/browser/preferences/index.d.ts +0 -5
  81. package/lib/browser/preferences/index.d.ts.map +1 -1
  82. package/lib/browser/preferences/index.js +0 -5
  83. package/lib/browser/preferences/index.js.map +1 -1
  84. package/lib/browser/preferences/preference-contribution.d.ts +0 -96
  85. package/lib/browser/preferences/preference-contribution.d.ts.map +1 -1
  86. package/lib/browser/preferences/preference-contribution.js +14 -355
  87. package/lib/browser/preferences/preference-contribution.js.map +1 -1
  88. package/lib/browser/preferences/preference-proxy.spec.js +25 -17
  89. package/lib/browser/preferences/preference-proxy.spec.js.map +1 -1
  90. package/lib/browser/preferences/preference-schema-provider.spec.js +21 -34
  91. package/lib/browser/preferences/preference-schema-provider.spec.js.map +1 -1
  92. package/lib/browser/preferences/preference-service.spec.js +57 -80
  93. package/lib/browser/preferences/preference-service.spec.js.map +1 -1
  94. package/lib/browser/preferences/preference-validation-service.d.ts +24 -26
  95. package/lib/browser/preferences/preference-validation-service.d.ts.map +1 -1
  96. package/lib/browser/preferences/preference-validation-service.js +40 -20
  97. package/lib/browser/preferences/preference-validation-service.js.map +1 -1
  98. package/lib/browser/preferences/preference-validation-service.spec.js +10 -6
  99. package/lib/browser/preferences/preference-validation-service.spec.js.map +1 -1
  100. package/lib/browser/preferences/test/mock-preference-provider.d.ts +2 -3
  101. package/lib/browser/preferences/test/mock-preference-provider.d.ts.map +1 -1
  102. package/lib/browser/preferences/test/mock-preference-provider.js +5 -7
  103. package/lib/browser/preferences/test/mock-preference-provider.js.map +1 -1
  104. package/lib/browser/preferences/test/mock-preference-proxy.d.ts.map +1 -1
  105. package/lib/browser/preferences/test/mock-preference-proxy.js.map +1 -1
  106. package/lib/browser/preferences/test/mock-preference-service.d.ts +1 -4
  107. package/lib/browser/preferences/test/mock-preference-service.d.ts.map +1 -1
  108. package/lib/browser/preferences/test/mock-preference-service.js.map +1 -1
  109. package/lib/browser/quick-input/quick-command-service.d.ts +1 -1
  110. package/lib/browser/quick-input/quick-command-service.d.ts.map +1 -1
  111. package/lib/browser/quick-input/quick-command-service.js +1 -1
  112. package/lib/browser/quick-input/quick-command-service.js.map +1 -1
  113. package/lib/browser/request/browser-request-service.d.ts +1 -1
  114. package/lib/browser/request/browser-request-service.d.ts.map +1 -1
  115. package/lib/browser/request/browser-request-service.js +2 -2
  116. package/lib/browser/request/browser-request-service.js.map +1 -1
  117. package/lib/browser/saveable.d.ts +9 -0
  118. package/lib/browser/saveable.d.ts.map +1 -1
  119. package/lib/browser/saveable.js.map +1 -1
  120. package/lib/browser/secondary-window-handler.d.ts +21 -9
  121. package/lib/browser/secondary-window-handler.d.ts.map +1 -1
  122. package/lib/browser/secondary-window-handler.js +162 -21
  123. package/lib/browser/secondary-window-handler.js.map +1 -1
  124. package/lib/browser/shell/application-shell.d.ts +7 -2
  125. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  126. package/lib/browser/shell/application-shell.js +27 -10
  127. package/lib/browser/shell/application-shell.js.map +1 -1
  128. package/lib/browser/shell/shell-layout-restorer.d.ts +13 -0
  129. package/lib/browser/shell/shell-layout-restorer.d.ts.map +1 -1
  130. package/lib/browser/shell/shell-layout-restorer.js +8 -1
  131. package/lib/browser/shell/shell-layout-restorer.js.map +1 -1
  132. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts +30 -16
  133. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts.map +1 -1
  134. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js +116 -33
  135. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js.map +1 -1
  136. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
  137. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +8 -3
  138. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
  139. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +1 -1
  140. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
  141. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts +2 -2
  142. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts.map +1 -1
  143. package/lib/browser/shell/tab-bars.d.ts +1 -1
  144. package/lib/browser/shell/tab-bars.d.ts.map +1 -1
  145. package/lib/browser/shell/theia-dock-panel.d.ts +19 -2
  146. package/lib/browser/shell/theia-dock-panel.d.ts.map +1 -1
  147. package/lib/browser/shell/theia-dock-panel.js +82 -0
  148. package/lib/browser/shell/theia-dock-panel.js.map +1 -1
  149. package/lib/browser/status-bar/status-bar.d.ts +1 -1
  150. package/lib/browser/status-bar/status-bar.d.ts.map +1 -1
  151. package/lib/browser/status-bar/status-bar.js +3 -2
  152. package/lib/browser/status-bar/status-bar.js.map +1 -1
  153. package/lib/browser/theming.d.ts +5 -4
  154. package/lib/browser/theming.d.ts.map +1 -1
  155. package/lib/browser/theming.js +7 -6
  156. package/lib/browser/theming.js.map +1 -1
  157. package/lib/browser/tooltip-service.d.ts +1 -1
  158. package/lib/browser/tooltip-service.d.ts.map +1 -1
  159. package/lib/browser/tooltip-service.js +1 -1
  160. package/lib/browser/tooltip-service.js.map +1 -1
  161. package/lib/browser/tree/index.d.ts +0 -1
  162. package/lib/browser/tree/index.d.ts.map +1 -1
  163. package/lib/browser/tree/index.js +0 -1
  164. package/lib/browser/tree/index.js.map +1 -1
  165. package/lib/browser/tree/tree-widget.d.ts +2 -2
  166. package/lib/browser/tree/tree-widget.d.ts.map +1 -1
  167. package/lib/browser/tree/tree-widget.js +5 -4
  168. package/lib/browser/tree/tree-widget.js.map +1 -1
  169. package/lib/browser/view-container.d.ts.map +1 -1
  170. package/lib/browser/view-container.js +2 -2
  171. package/lib/browser/view-container.js.map +1 -1
  172. package/lib/browser/widgets/extractable-widget.d.ts +3 -0
  173. package/lib/browser/widgets/extractable-widget.d.ts.map +1 -1
  174. package/lib/browser/widgets/extractable-widget.js.map +1 -1
  175. package/lib/browser/widgets/widget.js +4 -4
  176. package/lib/browser/widgets/widget.js.map +1 -1
  177. package/lib/browser/window/default-secondary-window-service.d.ts +10 -5
  178. package/lib/browser/window/default-secondary-window-service.d.ts.map +1 -1
  179. package/lib/browser/window/default-secondary-window-service.js +53 -13
  180. package/lib/browser/window/default-secondary-window-service.js.map +1 -1
  181. package/lib/browser/window/default-window-service.d.ts +1 -1
  182. package/lib/browser/window/default-window-service.d.ts.map +1 -1
  183. package/lib/browser/window/default-window-service.js +1 -1
  184. package/lib/browser/window/default-window-service.js.map +1 -1
  185. package/lib/browser/window/default-window-service.spec.js +1 -1
  186. package/lib/browser/window/default-window-service.spec.js.map +1 -1
  187. package/lib/browser/window/secondary-window-service.d.ts +15 -2
  188. package/lib/browser/window/secondary-window-service.d.ts.map +1 -1
  189. package/lib/browser/window/secondary-window-service.js +12 -1
  190. package/lib/browser/window/secondary-window-service.js.map +1 -1
  191. package/lib/browser/window/window-title-service.d.ts +1 -1
  192. package/lib/browser/window/window-title-service.d.ts.map +1 -1
  193. package/lib/browser/window/window-title-service.js +1 -1
  194. package/lib/browser/window/window-title-service.js.map +1 -1
  195. package/lib/{browser → common}/core-preferences.d.ts +2 -1
  196. package/lib/common/core-preferences.d.ts.map +1 -0
  197. package/lib/{browser → common}/core-preferences.js +17 -18
  198. package/lib/common/core-preferences.js.map +1 -0
  199. package/lib/common/index.d.ts +4 -0
  200. package/lib/common/index.d.ts.map +1 -1
  201. package/lib/common/index.js +4 -0
  202. package/lib/common/index.js.map +1 -1
  203. package/lib/common/inversify-utils.d.ts +31 -0
  204. package/lib/common/inversify-utils.d.ts.map +1 -0
  205. package/lib/common/inversify-utils.js +60 -0
  206. package/lib/common/inversify-utils.js.map +1 -0
  207. package/lib/common/json-schema.d.ts +1 -0
  208. package/lib/common/json-schema.d.ts.map +1 -1
  209. package/lib/common/menu/menu-types.d.ts +1 -0
  210. package/lib/common/menu/menu-types.d.ts.map +1 -1
  211. package/lib/common/menu/menu-types.js.map +1 -1
  212. package/lib/common/preferences/defaults-preference-provider.d.ts +21 -0
  213. package/lib/common/preferences/defaults-preference-provider.d.ts.map +1 -0
  214. package/lib/common/preferences/defaults-preference-provider.js +99 -0
  215. package/lib/common/preferences/defaults-preference-provider.js.map +1 -0
  216. package/lib/common/preferences/index.d.ts +12 -0
  217. package/lib/common/preferences/index.d.ts.map +1 -0
  218. package/lib/common/preferences/index.js +30 -0
  219. package/lib/common/preferences/index.js.map +1 -0
  220. package/lib/{browser → common}/preferences/injectable-preference-proxy.d.ts +1 -1
  221. package/lib/common/preferences/injectable-preference-proxy.d.ts.map +1 -0
  222. package/lib/{browser → common}/preferences/injectable-preference-proxy.js +2 -2
  223. package/lib/common/preferences/injectable-preference-proxy.js.map +1 -0
  224. package/lib/common/preferences/preference-configurations.d.ts.map +1 -0
  225. package/lib/common/preferences/preference-configurations.js.map +1 -0
  226. package/lib/{browser → common}/preferences/preference-language-override-service.d.ts +4 -13
  227. package/lib/common/preferences/preference-language-override-service.d.ts.map +1 -0
  228. package/lib/{browser → common}/preferences/preference-language-override-service.js +14 -30
  229. package/lib/common/preferences/preference-language-override-service.js.map +1 -0
  230. package/lib/common/preferences/preference-provider-impl.d.ts +52 -0
  231. package/lib/common/preferences/preference-provider-impl.d.ts.map +1 -0
  232. package/lib/{browser/preferences/preference-provider.js → common/preferences/preference-provider-impl.js} +23 -95
  233. package/lib/common/preferences/preference-provider-impl.js.map +1 -0
  234. package/lib/{browser → common}/preferences/preference-provider.d.ts +34 -59
  235. package/lib/common/preferences/preference-provider.d.ts.map +1 -0
  236. package/lib/common/preferences/preference-provider.js +71 -0
  237. package/lib/common/preferences/preference-provider.js.map +1 -0
  238. package/lib/common/preferences/preference-provider.spec.d.ts.map +1 -0
  239. package/lib/{browser → common}/preferences/preference-provider.spec.js +4 -4
  240. package/lib/common/preferences/preference-provider.spec.js.map +1 -0
  241. package/lib/{browser → common}/preferences/preference-proxy.d.ts +2 -2
  242. package/lib/common/preferences/preference-proxy.d.ts.map +1 -0
  243. package/lib/{browser → common}/preferences/preference-proxy.js +10 -10
  244. package/lib/common/preferences/preference-proxy.js.map +1 -0
  245. package/lib/common/preferences/preference-schema-service.d.ts +55 -0
  246. package/lib/common/preferences/preference-schema-service.d.ts.map +1 -0
  247. package/lib/common/preferences/preference-schema-service.js +402 -0
  248. package/lib/common/preferences/preference-schema-service.js.map +1 -0
  249. package/lib/common/preferences/preference-schema.d.ts +145 -43
  250. package/lib/common/preferences/preference-schema.d.ts.map +1 -1
  251. package/lib/common/preferences/preference-schema.js +3 -41
  252. package/lib/common/preferences/preference-schema.js.map +1 -1
  253. package/lib/common/preferences/preference-scope.d.ts +4 -1
  254. package/lib/common/preferences/preference-scope.d.ts.map +1 -1
  255. package/lib/common/preferences/preference-scope.js +5 -14
  256. package/lib/common/preferences/preference-scope.js.map +1 -1
  257. package/lib/{browser → common}/preferences/preference-service.d.ts +9 -10
  258. package/lib/common/preferences/preference-service.d.ts.map +1 -0
  259. package/lib/{browser → common}/preferences/preference-service.js +65 -60
  260. package/lib/common/preferences/preference-service.js.map +1 -0
  261. package/lib/common/stream.d.ts +9 -0
  262. package/lib/common/stream.d.ts.map +1 -1
  263. package/lib/common/stream.js +93 -2
  264. package/lib/common/stream.js.map +1 -1
  265. package/lib/common/supported-encodings.d.ts.map +1 -0
  266. package/lib/common/supported-encodings.js.map +1 -0
  267. package/lib/{browser/tree → common}/tree-preference.d.ts +1 -1
  268. package/lib/common/tree-preference.d.ts.map +1 -0
  269. package/lib/{browser/tree → common}/tree-preference.js +3 -5
  270. package/lib/common/tree-preference.js.map +1 -0
  271. package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts +2 -1
  272. package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts.map +1 -1
  273. package/lib/electron-browser/menu/electron-context-menu-renderer.js +2 -1
  274. package/lib/electron-browser/menu/electron-context-menu-renderer.js.map +1 -1
  275. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +1 -2
  276. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
  277. package/lib/electron-browser/menu/electron-main-menu-factory.js +11 -10
  278. package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
  279. package/lib/electron-browser/menu/electron-menu-contribution.d.ts +2 -2
  280. package/lib/electron-browser/menu/electron-menu-contribution.d.ts.map +1 -1
  281. package/lib/electron-browser/menu/electron-menu-contribution.js +6 -6
  282. package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
  283. package/lib/electron-browser/preload.d.ts.map +1 -1
  284. package/lib/electron-browser/preload.js +3 -0
  285. package/lib/electron-browser/preload.js.map +1 -1
  286. package/lib/electron-browser/window/electron-secondary-window-service.d.ts.map +1 -1
  287. package/lib/electron-browser/window/electron-secondary-window-service.js +5 -4
  288. package/lib/electron-browser/window/electron-secondary-window-service.js.map +1 -1
  289. package/lib/electron-browser/window/electron-window-module.js +1 -1
  290. package/lib/electron-browser/window/electron-window-module.js.map +1 -1
  291. package/lib/electron-browser/window/electron-window-service.d.ts +1 -1
  292. package/lib/electron-browser/window/electron-window-service.d.ts.map +1 -1
  293. package/lib/electron-browser/window/electron-window-service.js +1 -1
  294. package/lib/electron-browser/window/electron-window-service.js.map +1 -1
  295. package/lib/electron-common/electron-api.d.ts +2 -0
  296. package/lib/electron-common/electron-api.d.ts.map +1 -1
  297. package/lib/electron-common/electron-api.js +2 -1
  298. package/lib/electron-common/electron-api.js.map +1 -1
  299. package/lib/{electron-browser/window → electron-common}/electron-window-preferences.d.ts +2 -1
  300. package/lib/electron-common/electron-window-preferences.d.ts.map +1 -0
  301. package/lib/{electron-browser/window → electron-common}/electron-window-preferences.js +7 -7
  302. package/lib/electron-common/electron-window-preferences.js.map +1 -0
  303. package/lib/electron-main/electron-api-main.d.ts.map +1 -1
  304. package/lib/electron-main/electron-api-main.js +9 -0
  305. package/lib/electron-main/electron-api-main.js.map +1 -1
  306. package/lib/electron-node/window/electron-window-module.d.ts +4 -0
  307. package/lib/electron-node/window/electron-window-module.d.ts.map +1 -0
  308. package/lib/{browser/preferences/preference-scope.js → electron-node/window/electron-window-module.js} +7 -5
  309. package/lib/electron-node/window/electron-window-module.js.map +1 -0
  310. package/lib/node/backend-application-module.d.ts.map +1 -1
  311. package/lib/node/backend-application-module.js +13 -0
  312. package/lib/node/backend-application-module.js.map +1 -1
  313. package/lib/node/backend-application.js +1 -1
  314. package/lib/node/logger-cli-contribution.d.ts +7 -1
  315. package/lib/node/logger-cli-contribution.d.ts.map +1 -1
  316. package/lib/node/logger-cli-contribution.js +22 -10
  317. package/lib/node/logger-cli-contribution.js.map +1 -1
  318. package/lib/node/logger-cli-contribution.spec.js +13 -2
  319. package/lib/node/logger-cli-contribution.spec.js.map +1 -1
  320. package/package.json +8 -7
  321. package/src/browser/breadcrumbs/breadcrumbs-renderer.tsx +1 -1
  322. package/src/browser/common-frontend-contribution.ts +2 -3
  323. package/src/browser/dialogs/react-dialog.tsx +1 -0
  324. package/src/browser/encoding-registry.ts +1 -1
  325. package/src/browser/frontend-application-bindings.ts +8 -13
  326. package/src/browser/frontend-application-module.ts +13 -6
  327. package/src/browser/frontend-application.ts +1 -1
  328. package/src/browser/hover-service.ts +1 -2
  329. package/src/browser/icon-theme-service.ts +3 -2
  330. package/src/browser/index.ts +0 -1
  331. package/src/browser/json-schema-store.ts +9 -1
  332. package/src/browser/keybinding.spec.ts +1 -1
  333. package/src/browser/keybinding.ts +1 -1
  334. package/src/browser/menu/browser-menu-plugin.ts +7 -7
  335. package/src/browser/open-with-service.ts +1 -1
  336. package/src/browser/opener-service.ts +1 -2
  337. package/src/browser/preferences/frontend-config-preference-contributions.ts +52 -0
  338. package/src/browser/preferences/index.ts +0 -5
  339. package/src/browser/preferences/preference-contribution.ts +16 -398
  340. package/src/browser/preferences/preference-proxy.spec.ts +27 -17
  341. package/src/browser/preferences/preference-schema-provider.spec.ts +25 -37
  342. package/src/browser/preferences/preference-service.spec.ts +32 -56
  343. package/src/browser/preferences/preference-validation-service.spec.ts +27 -19
  344. package/src/browser/preferences/preference-validation-service.ts +60 -41
  345. package/src/browser/preferences/test/mock-preference-provider.ts +2 -5
  346. package/src/browser/preferences/test/mock-preference-proxy.ts +1 -2
  347. package/src/browser/preferences/test/mock-preference-service.ts +1 -4
  348. package/src/browser/quick-input/quick-command-service.ts +1 -1
  349. package/src/browser/request/browser-request-service.ts +4 -4
  350. package/src/browser/saveable.ts +8 -0
  351. package/src/browser/secondary-window-handler.ts +189 -29
  352. package/src/browser/shell/application-shell.ts +36 -13
  353. package/src/browser/shell/shell-layout-restorer.ts +15 -0
  354. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.tsx +139 -40
  355. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +12 -6
  356. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +2 -2
  357. package/src/browser/shell/tab-bar-toolbar/tab-toolbar-item.tsx +2 -2
  358. package/src/browser/shell/tab-bars.ts +1 -1
  359. package/src/browser/shell/theia-dock-panel.ts +101 -2
  360. package/src/browser/status-bar/status-bar.tsx +3 -2
  361. package/src/browser/style/dockpanel.css +7 -0
  362. package/src/browser/theming.ts +7 -6
  363. package/src/browser/tooltip-service.tsx +1 -1
  364. package/src/browser/tree/index.ts +0 -1
  365. package/src/browser/tree/tree-widget.tsx +6 -5
  366. package/src/browser/view-container.ts +5 -5
  367. package/src/browser/widgets/extractable-widget.ts +3 -0
  368. package/src/browser/widgets/widget.ts +4 -4
  369. package/src/browser/window/default-secondary-window-service.ts +54 -17
  370. package/src/browser/window/default-window-service.spec.ts +1 -1
  371. package/src/browser/window/default-window-service.ts +1 -1
  372. package/src/browser/window/secondary-window-service.ts +23 -2
  373. package/src/browser/window/window-title-service.ts +1 -1
  374. package/src/{browser → common}/core-preferences.ts +16 -17
  375. package/src/common/index.ts +4 -0
  376. package/src/common/inversify-utils.ts +63 -0
  377. package/src/common/json-schema.ts +1 -0
  378. package/src/common/menu/menu-types.ts +2 -0
  379. package/src/common/preferences/defaults-preference-provider.ts +91 -0
  380. package/src/common/preferences/index.ts +27 -0
  381. package/src/{browser → common}/preferences/injectable-preference-proxy.ts +3 -3
  382. package/src/{browser → common}/preferences/preference-language-override-service.ts +12 -29
  383. package/src/common/preferences/preference-provider-impl.ts +165 -0
  384. package/src/{browser → common}/preferences/preference-provider.spec.ts +6 -5
  385. package/src/common/preferences/preference-provider.ts +164 -0
  386. package/src/{browser → common}/preferences/preference-proxy.ts +15 -14
  387. package/src/common/preferences/preference-schema-service.ts +434 -0
  388. package/src/common/preferences/preference-schema.ts +156 -64
  389. package/src/common/preferences/preference-scope.ts +5 -13
  390. package/src/{browser → common}/preferences/preference-service.ts +71 -65
  391. package/src/common/stream.ts +102 -1
  392. package/src/{browser/tree → common}/tree-preference.ts +2 -4
  393. package/src/electron-browser/menu/electron-context-menu-renderer.ts +2 -1
  394. package/src/electron-browser/menu/electron-main-menu-factory.ts +13 -11
  395. package/src/electron-browser/menu/electron-menu-contribution.ts +9 -6
  396. package/src/electron-browser/preload.ts +4 -1
  397. package/src/electron-browser/window/electron-secondary-window-service.ts +7 -4
  398. package/src/electron-browser/window/electron-window-module.ts +1 -1
  399. package/src/electron-browser/window/electron-window-service.ts +1 -1
  400. package/src/electron-common/electron-api.ts +2 -0
  401. package/src/{electron-browser/window → electron-common}/electron-window-preferences.ts +6 -6
  402. package/src/electron-main/electron-api-main.ts +11 -1
  403. package/src/{browser/preferences/preference-scope.ts → electron-node/window/electron-window-module.ts} +7 -3
  404. package/src/node/backend-application-module.ts +28 -1
  405. package/src/node/backend-application.ts +1 -1
  406. package/src/node/logger-cli-contribution.spec.ts +17 -2
  407. package/src/node/logger-cli-contribution.ts +18 -3
  408. package/lib/browser/core-preferences.d.ts.map +0 -1
  409. package/lib/browser/core-preferences.js.map +0 -1
  410. package/lib/browser/preferences/injectable-preference-proxy.d.ts.map +0 -1
  411. package/lib/browser/preferences/injectable-preference-proxy.js.map +0 -1
  412. package/lib/browser/preferences/preference-configurations.d.ts.map +0 -1
  413. package/lib/browser/preferences/preference-configurations.js.map +0 -1
  414. package/lib/browser/preferences/preference-language-override-service.d.ts.map +0 -1
  415. package/lib/browser/preferences/preference-language-override-service.js.map +0 -1
  416. package/lib/browser/preferences/preference-provider.d.ts.map +0 -1
  417. package/lib/browser/preferences/preference-provider.js.map +0 -1
  418. package/lib/browser/preferences/preference-provider.spec.d.ts.map +0 -1
  419. package/lib/browser/preferences/preference-provider.spec.js.map +0 -1
  420. package/lib/browser/preferences/preference-proxy.d.ts.map +0 -1
  421. package/lib/browser/preferences/preference-proxy.js.map +0 -1
  422. package/lib/browser/preferences/preference-scope.d.ts +0 -3
  423. package/lib/browser/preferences/preference-scope.d.ts.map +0 -1
  424. package/lib/browser/preferences/preference-scope.js.map +0 -1
  425. package/lib/browser/preferences/preference-service.d.ts.map +0 -1
  426. package/lib/browser/preferences/preference-service.js.map +0 -1
  427. package/lib/browser/supported-encodings.d.ts.map +0 -1
  428. package/lib/browser/supported-encodings.js.map +0 -1
  429. package/lib/browser/tree/tree-preference.d.ts.map +0 -1
  430. package/lib/browser/tree/tree-preference.js.map +0 -1
  431. package/lib/electron-browser/window/electron-window-preferences.d.ts.map +0 -1
  432. package/lib/electron-browser/window/electron-window-preferences.js.map +0 -1
  433. package/src/browser/preferences/preference-provider.ts +0 -277
  434. /package/lib/{browser → common}/preferences/preference-configurations.d.ts +0 -0
  435. /package/lib/{browser → common}/preferences/preference-configurations.js +0 -0
  436. /package/lib/{browser → common}/preferences/preference-provider.spec.d.ts +0 -0
  437. /package/lib/{browser → common}/supported-encodings.d.ts +0 -0
  438. /package/lib/{browser → common}/supported-encodings.js +0 -0
  439. /package/src/{browser → common}/preferences/preference-configurations.ts +0 -0
  440. /package/src/{browser → common}/supported-encodings.ts +0 -0
@@ -0,0 +1,52 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2018 Ericsson 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
+
17
+ import { injectable } from 'inversify';
18
+ import { PreferenceContribution, PreferenceSchema, PreferenceSchemaService } from '../../common/preferences/preference-schema';
19
+ import { FrontendApplicationConfigProvider } from '../frontend-application-config-provider';
20
+ import { FrontendApplicationPreferenceConfig } from './preference-contribution';
21
+ import { PreferenceLanguageOverrideService } from '../../common/preferences/preference-language-override-service';
22
+ import { PreferenceScope } from '../../common/preferences';
23
+ import { DefaultTheme } from '@theia/application-package/lib/application-props';
24
+
25
+ @injectable()
26
+ export class FrontendConfigPreferenceContribution implements PreferenceContribution {
27
+ schema: PreferenceSchema = { scope: PreferenceScope.Folder, properties: {} };
28
+ async initSchema(service: PreferenceSchemaService): Promise<void> {
29
+ const config = FrontendApplicationConfigProvider.get();
30
+ if (FrontendApplicationPreferenceConfig.is(config)) {
31
+ service.registerOverride('workbench.colorTheme', undefined, DefaultTheme.defaultForOSTheme(config.defaultTheme));
32
+ if (config.defaultIconTheme) {
33
+ service.registerOverride('workbench.iconTheme', undefined, config.defaultIconTheme);
34
+ }
35
+ try {
36
+ for (const [key, defaultValue] of Object.entries(config.preferences)) {
37
+ if (PreferenceLanguageOverrideService.testOverrideValue(key, defaultValue)) {
38
+ for (const [propertyName, value] of Object.entries(defaultValue)) {
39
+ service.registerOverride(propertyName, key.substring(1, key.length - 1), value);
40
+ }
41
+ } else {
42
+ // regular configuration override
43
+ service.registerOverride(key, undefined, defaultValue);
44
+ }
45
+ }
46
+ } catch (e) {
47
+ console.error('Failed to load preferences from frontend configuration.', e);
48
+ }
49
+ }
50
+ }
51
+
52
+ }
@@ -14,10 +14,5 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- export * from './preference-service';
18
- export * from './preference-proxy';
19
17
  export * from './preference-contribution';
20
- export * from './preference-provider';
21
- export * from './preference-scope';
22
- export * from './preference-language-override-service';
23
18
  export * from './preference-validation-service';
@@ -14,61 +14,27 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import * as Ajv from 'ajv';
18
- import { inject, injectable, interfaces, named, postConstruct } from 'inversify';
19
- import { ContributionProvider, bindContributionProvider, Emitter, Event, Disposable } from '../../common';
20
- import { PreferenceScope } from './preference-scope';
21
- import { PreferenceProvider, PreferenceProviderDataChange } from './preference-provider';
22
- import {
23
- PreferenceSchema, PreferenceSchemaProperties, PreferenceDataSchema, PreferenceItem, PreferenceSchemaProperty, PreferenceDataProperty
24
- } from '../../common/preferences/preference-schema';
25
- import { FrontendApplicationConfigProvider } from '../frontend-application-config-provider';
17
+ import { interfaces } from 'inversify';
18
+ import { bindContributionProvider, PreferenceProvider } from '../../common';
19
+ import { PreferenceScope, ValidPreferenceScopes } from '../../common/preferences/preference-scope';
26
20
  import { FrontendApplicationConfig } from '@theia/application-package/lib/application-props';
27
- import { bindPreferenceConfigurations, PreferenceConfigurations } from './preference-configurations';
28
- export { PreferenceSchema, PreferenceSchemaProperties, PreferenceDataSchema, PreferenceItem, PreferenceSchemaProperty, PreferenceDataProperty };
29
- import { isObject, Mutable } from '../../common/types';
30
- import { PreferenceLanguageOverrideService } from './preference-language-override-service';
31
- import { JSONValue } from '@lumino/coreutils';
32
-
33
- /* eslint-disable guard-for-in, @typescript-eslint/no-explicit-any */
34
-
35
- export const PreferenceContribution = Symbol('PreferenceContribution');
36
-
37
- export const DefaultOverridesPreferenceSchemaId = 'defaultOverrides';
38
-
39
- /**
40
- * A {@link PreferenceContribution} allows adding additional custom preferences.
41
- * For this, the {@link PreferenceContribution} has to provide a valid JSON Schema specifying which preferences
42
- * are available including their types and description.
43
- *
44
- * ### Example usage
45
- * ```typescript
46
- * const MyPreferencesSchema: PreferenceSchema = {
47
- * 'type': 'object',
48
- * 'properties': {
49
- * 'myext.decorations.enabled': {
50
- * 'type': 'boolean',
51
- * 'description': 'Show file status',
52
- * 'default': true
53
- * },
54
- * // [...]
55
- * }
56
- * }
57
- * @injectable()
58
- * export class MyPreferenceContribution implements PreferenceContribution{
59
- * schema= MyPreferencesSchema;
60
- * }
61
- * ```
62
- */
63
- export interface PreferenceContribution {
64
- readonly schema: PreferenceSchema;
65
- }
21
+ import { isObject } from '../../common/types';
22
+ import { PreferenceSchemaServiceImpl } from '../../common/preferences/preference-schema-service';
23
+ import { PreferenceContribution, PreferenceSchemaService } from '../../common/preferences/preference-schema';
24
+ import { DefaultsPreferenceProvider } from '../../common/preferences/defaults-preference-provider';
25
+ import { PreferenceLanguageOverrideService } from '../../common/preferences/preference-language-override-service';
26
+ import { FrontendConfigPreferenceContribution } from './frontend-config-preference-contributions';
27
+ import { bindPreferenceConfigurations } from '../../common/preferences/preference-configurations';
66
28
 
67
29
  export function bindPreferenceSchemaProvider(bind: interfaces.Bind): void {
68
30
  bindPreferenceConfigurations(bind);
69
- bind(PreferenceSchemaProvider).toSelf().inSingletonScope();
31
+ bind(ValidPreferenceScopes).toConstantValue([PreferenceScope.Default, PreferenceScope.User, PreferenceScope.Workspace, PreferenceScope.Folder]);
32
+ bind(PreferenceSchemaServiceImpl).toSelf().inSingletonScope();
33
+ bind(PreferenceSchemaService).toService(PreferenceSchemaServiceImpl);
34
+ bind(PreferenceProvider).to(DefaultsPreferenceProvider).inSingletonScope().whenTargetNamed(PreferenceScope.Default);
70
35
  bind(PreferenceLanguageOverrideService).toSelf().inSingletonScope();
71
36
  bindContributionProvider(bind, PreferenceContribution);
37
+ bind(PreferenceContribution).to(FrontendConfigPreferenceContribution).inSingletonScope();
72
38
  }
73
39
 
74
40
  /**
@@ -77,6 +43,7 @@ export function bindPreferenceSchemaProvider(bind: interfaces.Bind): void {
77
43
  */
78
44
  export interface FrontendApplicationPreferenceConfig extends FrontendApplicationConfig {
79
45
  preferences: {
46
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
47
  [preferenceName: string]: any
81
48
  }
82
49
  }
@@ -85,352 +52,3 @@ export namespace FrontendApplicationPreferenceConfig {
85
52
  return isObject(config.preferences);
86
53
  }
87
54
  }
88
-
89
- /**
90
- * The {@link PreferenceSchemaProvider} collects all {@link PreferenceContribution}s and combines
91
- * the preference schema provided by these contributions into one collective schema. The preferences which
92
- * are provided by this {@link PreferenceProvider} are derived from this combined schema.
93
- */
94
- @injectable()
95
- export class PreferenceSchemaProvider extends PreferenceProvider {
96
-
97
- protected readonly preferences: { [name: string]: any } = {};
98
- protected readonly combinedSchema: PreferenceDataSchema = { properties: {}, patternProperties: {}, allowComments: true, allowTrailingCommas: true, };
99
- protected readonly workspaceSchema: PreferenceDataSchema = { properties: {}, patternProperties: {}, allowComments: true, allowTrailingCommas: true, };
100
- protected readonly folderSchema: PreferenceDataSchema = { properties: {}, patternProperties: {}, allowComments: true, allowTrailingCommas: true, };
101
-
102
- @inject(ContributionProvider) @named(PreferenceContribution)
103
- protected readonly preferenceContributions: ContributionProvider<PreferenceContribution>;
104
-
105
- @inject(PreferenceConfigurations)
106
- protected readonly configurations: PreferenceConfigurations;
107
-
108
- protected readonly onDidPreferenceSchemaChangedEmitter = new Emitter<void>();
109
- readonly onDidPreferenceSchemaChanged: Event<void> = this.onDidPreferenceSchemaChangedEmitter.event;
110
- protected fireDidPreferenceSchemaChanged(): void {
111
- this.onDidPreferenceSchemaChangedEmitter.fire(undefined);
112
- }
113
-
114
- @postConstruct()
115
- protected init(): void {
116
- this.readConfiguredPreferences();
117
- this.preferenceContributions.getContributions().forEach(contrib => {
118
- this.doSetSchema(contrib.schema);
119
- });
120
- this.combinedSchema.additionalProperties = false;
121
- this._ready.resolve();
122
- }
123
-
124
- /**
125
- * Register a new overrideIdentifier. Existing identifiers are not replaced.
126
- *
127
- * Allows overriding existing values while keeping both values in store.
128
- * For example to store different editor settings, e.g. "[markdown].editor.autoIndent",
129
- * "[json].editor.autoIndent" and "editor.autoIndent"
130
- * @param overrideIdentifier the new overrideIdentifier
131
- */
132
- registerOverrideIdentifier(overrideIdentifier: string): void {
133
- if (this.preferenceOverrideService.addOverrideIdentifier(overrideIdentifier)) {
134
- this.updateOverridePatternPropertiesKey();
135
- }
136
- }
137
-
138
- protected readonly overridePatternProperties: Required<Pick<PreferenceDataProperty, 'properties' | 'additionalProperties'>> & PreferenceDataProperty = {
139
- type: 'object',
140
- description: 'Configure editor settings to be overridden for a language.',
141
- errorMessage: 'Unknown Identifier. Use language identifiers',
142
- properties: {},
143
- additionalProperties: false
144
- };
145
- protected overridePatternPropertiesKey: string | undefined;
146
- protected updateOverridePatternPropertiesKey(): void {
147
- const oldKey = this.overridePatternPropertiesKey;
148
- const newKey = this.preferenceOverrideService.computeOverridePatternPropertiesKey();
149
- if (oldKey === newKey) {
150
- return;
151
- }
152
- if (oldKey) {
153
- delete this.combinedSchema.patternProperties[oldKey];
154
- }
155
- this.overridePatternPropertiesKey = newKey;
156
- if (newKey) {
157
- this.combinedSchema.patternProperties[newKey] = this.overridePatternProperties;
158
- }
159
- this.fireDidPreferenceSchemaChanged();
160
- }
161
-
162
- protected doUnsetSchema(changes: PreferenceProviderDataChange[]): PreferenceProviderDataChange[] {
163
- const inverseChanges: PreferenceProviderDataChange[] = [];
164
- for (const change of changes) {
165
- const preferenceName = change.preferenceName;
166
- const overridden = this.preferenceOverrideService.overriddenPreferenceName(preferenceName);
167
- if (overridden) {
168
- delete this.overridePatternProperties.properties[`[${overridden.overrideIdentifier}]`];
169
- this.removePropFromSchemas(`[${overridden.overrideIdentifier}]`);
170
- } else {
171
- this.removePropFromSchemas(preferenceName);
172
- }
173
- const newValue = change.oldValue;
174
- const oldValue = change.newValue;
175
- const { scope, domain } = change;
176
- const inverseChange: Mutable<PreferenceProviderDataChange> = { preferenceName, oldValue, scope, domain };
177
- if (typeof newValue === undefined) {
178
- delete this.preferences[preferenceName];
179
- } else {
180
- inverseChange.newValue = newValue;
181
- this.preferences[preferenceName] = newValue;
182
- }
183
- inverseChanges.push(inverseChange);
184
- }
185
- return inverseChanges;
186
- }
187
-
188
- protected validateSchema(schema: PreferenceSchema): void {
189
- const ajv = new Ajv();
190
- const valid = ajv.validateSchema(schema);
191
- if (!valid) {
192
- const errors = !!ajv.errors ? ajv.errorsText(ajv.errors) : 'unknown validation error';
193
- console.warn('A contributed preference schema has validation issues : ' + errors);
194
- }
195
- }
196
-
197
- protected doSetSchema(schema: PreferenceSchema): PreferenceProviderDataChange[] {
198
- if (FrontendApplicationConfigProvider.get().validatePreferencesSchema) {
199
- this.validateSchema(schema);
200
- }
201
- const scope = PreferenceScope.Default;
202
- const domain = this.getDomain();
203
- const changes: PreferenceProviderDataChange[] = [];
204
- const defaultScope = PreferenceSchema.getDefaultScope(schema);
205
- const overridable = schema.overridable || false;
206
- for (const [preferenceName, rawSchemaProps] of Object.entries(schema.properties)) {
207
- if (this.combinedSchema.properties[preferenceName] && DefaultOverridesPreferenceSchemaId !== schema.id) {
208
- console.error('Preference name collision detected in the schema for property: ' + preferenceName);
209
- } else {
210
- let schemaProps;
211
- if (this.combinedSchema.properties[preferenceName] && DefaultOverridesPreferenceSchemaId === schema.id) {
212
- // update existing default value in schema
213
- schemaProps = PreferenceDataProperty.fromPreferenceSchemaProperty(rawSchemaProps, defaultScope);
214
- this.updateSchemaPropsDefault(preferenceName, schemaProps);
215
- } else if (!rawSchemaProps.hasOwnProperty('included') || rawSchemaProps.included) {
216
- // add overrides for languages
217
- schemaProps = PreferenceDataProperty.fromPreferenceSchemaProperty(rawSchemaProps, defaultScope);
218
- if (typeof schemaProps.overridable !== 'boolean' && overridable) {
219
- schemaProps.overridable = true;
220
- }
221
- if (schemaProps.overridable) {
222
- this.overridePatternProperties.properties[preferenceName] = schemaProps;
223
- }
224
- this.updateSchemaProps(preferenceName, schemaProps);
225
- }
226
-
227
- if (schemaProps !== undefined) {
228
- const schemaDefault = this.getDefaultValue(schemaProps);
229
- const configuredDefault = this.getConfiguredDefault(preferenceName);
230
- if (this.preferenceOverrideService.testOverrideValue(preferenceName, schemaDefault)) {
231
- schemaProps.defaultValue = PreferenceSchemaProperties.is(configuredDefault)
232
- ? PreferenceProvider.merge(schemaDefault, configuredDefault)
233
- : schemaDefault;
234
- if (schemaProps.defaultValue && PreferenceSchemaProperties.is(schemaProps.defaultValue)) {
235
- for (const overriddenPreferenceName in schemaProps.defaultValue) {
236
- const overrideValue = schemaDefault[overriddenPreferenceName];
237
- const overridePreferenceName = `${preferenceName}.${overriddenPreferenceName}`;
238
- changes.push(this.doSetPreferenceValue(overridePreferenceName, overrideValue, { scope, domain }));
239
- }
240
- }
241
- } else {
242
- schemaProps.defaultValue = configuredDefault === undefined ? schemaDefault : configuredDefault;
243
- changes.push(this.doSetPreferenceValue(preferenceName, schemaProps.defaultValue, { scope, domain }));
244
- }
245
- }
246
- }
247
- }
248
- return changes;
249
- }
250
-
251
- protected doSetPreferenceValue(preferenceName: string, newValue: any, { scope, domain }: {
252
- scope: PreferenceScope,
253
- domain?: string[]
254
- }): PreferenceProviderDataChange {
255
- const oldValue = this.preferences[preferenceName];
256
- this.preferences[preferenceName] = newValue;
257
- return { preferenceName, oldValue, newValue, scope, domain };
258
- }
259
-
260
- getDefaultValue(property: PreferenceItem): JSONValue {
261
- if (property.defaultValue !== undefined) {
262
- return property.defaultValue;
263
- }
264
- if (property.default !== undefined) {
265
- return property.default;
266
- }
267
- const type = Array.isArray(property.type) ? property.type[0] : property.type;
268
- switch (type) {
269
- case 'boolean':
270
- return false;
271
- case 'integer':
272
- case 'number':
273
- return 0;
274
- case 'string':
275
- return '';
276
- case 'array':
277
- return [];
278
- case 'object':
279
- return {};
280
- }
281
- // eslint-disable-next-line no-null/no-null
282
- return null;
283
- }
284
-
285
- protected getConfiguredDefault(preferenceName: string): any {
286
- const config = FrontendApplicationConfigProvider.get();
287
- if (preferenceName && FrontendApplicationPreferenceConfig.is(config) && preferenceName in config.preferences) {
288
- return config.preferences[preferenceName];
289
- }
290
- }
291
-
292
- getCombinedSchema(): PreferenceDataSchema {
293
- return this.combinedSchema;
294
- }
295
-
296
- getSchema(scope: PreferenceScope): PreferenceDataSchema {
297
- switch (scope) {
298
- case PreferenceScope.Default:
299
- case PreferenceScope.User:
300
- return this.combinedSchema;
301
- case PreferenceScope.Workspace:
302
- return this.workspaceSchema;
303
- case PreferenceScope.Folder:
304
- return this.folderSchema;
305
- }
306
- }
307
-
308
- setSchema(schema: PreferenceSchema): Disposable {
309
- const changes = this.doSetSchema(schema);
310
- if (!changes.length) {
311
- return Disposable.NULL;
312
- }
313
- this.fireDidPreferenceSchemaChanged();
314
- this.emitPreferencesChangedEvent(changes);
315
- return Disposable.create(() => {
316
- const inverseChanges = this.doUnsetSchema(changes);
317
- if (!inverseChanges.length) {
318
- return;
319
- }
320
- this.fireDidPreferenceSchemaChanged();
321
- this.emitPreferencesChangedEvent(inverseChanges);
322
- });
323
- }
324
-
325
- getPreferences(): { [name: string]: any } {
326
- return this.preferences;
327
- }
328
-
329
- async setPreference(): Promise<boolean> {
330
- return false;
331
- }
332
-
333
- isValidInScope(preferenceName: string, scope: PreferenceScope): boolean {
334
- let property;
335
- const overridden = this.preferenceOverrideService.overriddenPreferenceName(preferenceName);
336
- if (overridden) {
337
- // try from overridden schema
338
- property = this.overridePatternProperties[`[${overridden.overrideIdentifier}]`];
339
- property = property && property[overridden.preferenceName];
340
- if (!property) {
341
- // try from overridden identifier
342
- property = this.overridePatternProperties[overridden.preferenceName];
343
- }
344
- if (!property) {
345
- // try from overridden value
346
- property = this.combinedSchema.properties[overridden.preferenceName];
347
- }
348
- } else {
349
- property = this.combinedSchema.properties[preferenceName];
350
- }
351
- return property && property.scope! >= scope;
352
- }
353
-
354
- *getPreferenceNames(): IterableIterator<string> {
355
- for (const preferenceName in this.combinedSchema.properties) {
356
- yield preferenceName;
357
- for (const overridePreferenceName of this.getOverridePreferenceNames(preferenceName)) {
358
- yield overridePreferenceName;
359
- }
360
- }
361
- }
362
-
363
- getOverridePreferenceNames(preferenceName: string): IterableIterator<string> {
364
- const preference = this.combinedSchema.properties[preferenceName];
365
- if (preference && preference.overridable) {
366
- return this.preferenceOverrideService.getOverridePreferenceNames(preferenceName);
367
- }
368
- return [][Symbol.iterator]();
369
- }
370
-
371
- getSchemaProperty(key: string): PreferenceDataProperty | undefined {
372
- return this.combinedSchema.properties[key];
373
- }
374
-
375
- /**
376
- * {@link property} will be assigned to field {@link key} in the schema.
377
- * Pass a new object to invalidate old schema.
378
- */
379
- updateSchemaProperty(key: string, property: PreferenceDataProperty): void {
380
- this.updateSchemaProps(key, property);
381
- this.fireDidPreferenceSchemaChanged();
382
- }
383
-
384
- protected updateSchemaProps(key: string, property: PreferenceDataProperty): void {
385
- this.combinedSchema.properties[key] = property;
386
-
387
- switch (property.scope) {
388
- case PreferenceScope.Folder:
389
- this.folderSchema.properties[key] = property;
390
- // Fall through. isValidInScope implies that User ⊃ Workspace ⊃ Folder,
391
- // so anything we add to folder should be added to workspace, but not vice versa.
392
- case PreferenceScope.Workspace:
393
- this.workspaceSchema.properties[key] = property;
394
- break;
395
- }
396
- }
397
-
398
- protected updateSchemaPropsDefault(key: string, property: PreferenceDataProperty): void {
399
- this.combinedSchema.properties[key].default = property.default;
400
- this.combinedSchema.properties[key].defaultValue = property.defaultValue;
401
- if (this.workspaceSchema.properties[key]) {
402
- this.workspaceSchema.properties[key].default = property.default;
403
- this.workspaceSchema.properties[key].defaultValue = property.defaultValue;
404
- }
405
- if (this.folderSchema.properties[key]) {
406
- this.folderSchema.properties[key].default = property.default;
407
- this.folderSchema.properties[key].defaultValue = property.defaultValue;
408
- }
409
- }
410
-
411
- protected removePropFromSchemas(key: string): void {
412
- // If we remove a key from combined, it should also be removed from all narrower scopes.
413
- delete this.combinedSchema.properties[key];
414
- delete this.workspaceSchema.properties[key];
415
- delete this.folderSchema.properties[key];
416
- }
417
-
418
- protected readConfiguredPreferences(): void {
419
- const config = FrontendApplicationConfigProvider.get();
420
- if (FrontendApplicationPreferenceConfig.is(config)) {
421
- try {
422
- const configuredDefaults = config.preferences;
423
- const parsedDefaults = this.getParsedContent(configuredDefaults);
424
- Object.assign(this.preferences, parsedDefaults);
425
- const scope = PreferenceScope.Default;
426
- const domain = this.getDomain();
427
- const changes: PreferenceProviderDataChange[] = Object.keys(this.preferences)
428
- .map((key): PreferenceProviderDataChange => ({ preferenceName: key, oldValue: undefined, newValue: this.preferences[key], scope, domain }));
429
- this.emitPreferencesChangedEvent(changes);
430
- } catch (e) {
431
- console.error('Failed to load preferences from frontend configuration.', e);
432
- }
433
- }
434
- }
435
-
436
- }
@@ -24,14 +24,10 @@ import * as assert from 'assert';
24
24
  import { Container } from 'inversify';
25
25
  import { bindPreferenceService } from '../frontend-application-bindings';
26
26
  import { bindMockPreferenceProviders, MockPreferenceProvider } from './test';
27
- import { PreferenceService, PreferenceServiceImpl } from './preference-service';
28
- import { PreferenceSchemaProvider, PreferenceSchema } from './preference-contribution';
29
- import { PreferenceScope } from './preference-scope';
30
- import { PreferenceProvider } from './preference-provider';
27
+ import { PreferenceScope } from '../../common/preferences/preference-scope';
31
28
  import { FrontendApplicationConfigProvider } from '../frontend-application-config-provider';
32
- import { PreferenceProxyOptions, PreferenceProxy, PreferenceChangeEvent, createPreferenceProxy } from './preference-proxy';
33
- import { PreferenceProxyFactory } from './injectable-preference-proxy';
34
- import { waitForEvent } from '../../common/promise-util';
29
+ import { PreferenceProxyOptions, PreferenceProxy, PreferenceChangeEvent, createPreferenceProxy } from '../../common/preferences/preference-proxy';
30
+ import { PreferenceProxyFactory } from '../../common/preferences/injectable-preference-proxy';
35
31
 
36
32
  disableJSDOM();
37
33
 
@@ -41,6 +37,10 @@ process.on('unhandledRejection', (reason, promise) => {
41
37
  });
42
38
 
43
39
  import { expect } from 'chai';
40
+ import { PreferenceProvider } from '../../common/preferences/preference-provider';
41
+ import { PreferenceSchema, PreferenceSchemaService } from '../../common/preferences/preference-schema';
42
+ import { PreferenceService, PreferenceServiceImpl } from '../../common/preferences';
43
+ import { waitForEvent } from '../../common/promise-util';
44
44
  let testContainer: Container;
45
45
 
46
46
  function createTestContainer(): Container {
@@ -52,7 +52,7 @@ function createTestContainer(): Container {
52
52
 
53
53
  describe('Preference Proxy', () => {
54
54
  let prefService: PreferenceServiceImpl;
55
- let prefSchema: PreferenceSchemaProvider;
55
+ let prefSchema: PreferenceSchemaService;
56
56
 
57
57
  before(() => {
58
58
  disableJSDOM = enableJSDOM();
@@ -65,7 +65,7 @@ describe('Preference Proxy', () => {
65
65
 
66
66
  beforeEach(async () => {
67
67
  testContainer = createTestContainer();
68
- prefSchema = testContainer.get(PreferenceSchemaProvider);
68
+ prefSchema = testContainer.get(PreferenceSchemaService);
69
69
  prefService = testContainer.get<PreferenceService>(PreferenceService) as PreferenceServiceImpl;
70
70
  getProvider(PreferenceScope.User).markReady();
71
71
  getProvider(PreferenceScope.Workspace).markReady();
@@ -100,24 +100,25 @@ describe('Preference Proxy', () => {
100
100
  promisedSchema?: Promise<PreferenceSchema>
101
101
  } {
102
102
  const s: PreferenceSchema = schema || {
103
+ scope: PreferenceScope.Folder,
103
104
  properties: {
104
105
  'my.pref': {
105
106
  type: 'string',
106
- defaultValue: 'foo'
107
+ default: 'foo'
107
108
  }
108
109
  }
109
110
  };
110
111
  if (testOptions.asyncSchema) {
111
112
  const promisedSchema = new Promise<PreferenceSchema>(resolve => setTimeout(() => {
112
- prefSchema.setSchema(s);
113
+ prefSchema.addSchema(s);
113
114
  resolve(s);
114
- }, 1000));
115
+ }, 500));
115
116
  const proxy = testOptions.useFactory
116
117
  ? testContainer.get<PreferenceProxyFactory>(PreferenceProxyFactory)(promisedSchema, options)
117
118
  : createPreferenceProxy(prefService, promisedSchema, options);
118
119
  return { proxy, promisedSchema };
119
120
  } else {
120
- prefSchema.setSchema(s);
121
+ prefSchema.addSchema(s);
121
122
  const proxy = testOptions.useFactory
122
123
  ? testContainer.get<PreferenceProxyFactory>(PreferenceProxyFactory)(s, options)
123
124
  : createPreferenceProxy(prefService, s, options);
@@ -141,6 +142,7 @@ describe('Preference Proxy', () => {
141
142
  expect(Object.keys(proxy).length).to.equal(0);
142
143
  // Once the schema is resolved, operations should be working:
143
144
  await promisedSchema!;
145
+ changed = 0;
144
146
  expect(proxy['my.pref']).to.equal('bar');
145
147
  expect(Object.keys(proxy)).members(['my.pref']);
146
148
  await getProvider(PreferenceScope.User).setPreference('my.pref', 'fizz');
@@ -185,6 +187,7 @@ describe('Preference Proxy', () => {
185
187
  if (promisedSchema) {
186
188
  await promisedSchema;
187
189
  }
190
+ await waitForEvent(prefService.onPreferenceChanged, 500);
188
191
  let theChange: PreferenceChangeEvent<{ [key: string]: any }>;
189
192
  proxy.onPreferenceChanged(change => {
190
193
  expect(theChange).to.equal(undefined);
@@ -208,10 +211,11 @@ describe('Preference Proxy', () => {
208
211
 
209
212
  it("should not forward changes that don't match the proxy's language override", async () => {
210
213
  const { proxy, promisedSchema } = getProxy({
214
+ scope: PreferenceScope.User,
211
215
  properties: {
212
216
  'my.pref': {
213
217
  type: 'string',
214
- defaultValue: 'foo',
218
+ default: 'foo',
215
219
  overridable: true,
216
220
  }
217
221
  }
@@ -222,7 +226,8 @@ describe('Preference Proxy', () => {
222
226
  prefSchema.registerOverrideIdentifier('swift');
223
227
  prefSchema.registerOverrideIdentifier('typescript');
224
228
  // The service will emit events related to updating the overrides - those are irrelevant
225
- await waitForEvent(prefService.onPreferencesChanged, 500);
229
+ await waitForEvent(prefService.onPreferenceChanged, 500);
230
+
226
231
  prefService.onPreferencesChanged(() => changeEventsEmittedByService++);
227
232
  proxy.onPreferenceChanged(() => changeEventsEmittedByProxy++);
228
233
  await prefService.set(prefService.overridePreferenceName({ overrideIdentifier: 'swift', preferenceName: 'my.pref' }), 'boo', PreferenceScope.User);
@@ -241,10 +246,11 @@ describe('Preference Proxy', () => {
241
246
 
242
247
  it('`affects` should only return `true` if the language overrides match', async () => {
243
248
  const { proxy, promisedSchema } = getProxy({
249
+ scope: PreferenceScope.User,
244
250
  properties: {
245
251
  'my.pref': {
246
252
  type: 'string',
247
- defaultValue: 'foo',
253
+ default: 'foo',
248
254
  overridable: true,
249
255
  }
250
256
  }
@@ -268,6 +274,7 @@ describe('Preference Proxy', () => {
268
274
 
269
275
  it('toJSON with deep', async () => {
270
276
  const { proxy, promisedSchema } = getProxy({
277
+ scope: PreferenceScope.Default,
271
278
  properties: {
272
279
  'foo.baz': {
273
280
  type: 'number',
@@ -290,7 +297,9 @@ describe('Preference Proxy', () => {
290
297
  if (promisedSchema) {
291
298
  await promisedSchema;
292
299
  }
293
- assert.deepStrictEqual(JSON.stringify(proxy, undefined, 2), JSON.stringify({
300
+
301
+ const result = JSON.stringify(proxy, undefined, 2);
302
+ assert.equal(result, JSON.stringify({
294
303
  foo: {
295
304
  baz: 4,
296
305
  bar: {
@@ -304,6 +313,7 @@ describe('Preference Proxy', () => {
304
313
 
305
314
  it('get nested default', async () => {
306
315
  const { proxy, promisedSchema } = getProxy({
316
+ scope: PreferenceScope.Default,
307
317
  properties: {
308
318
  'foo': {
309
319
  'anyOf': [