@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
@@ -16,12 +16,12 @@
16
16
 
17
17
  import { inject, injectable, postConstruct } from 'inversify';
18
18
  import { PreferenceSchema } from '../../common/preferences/preference-schema';
19
- import { Disposable, DisposableCollection, Emitter, Event, isObject, MaybePromise } from '../../common';
19
+ import { Disposable, DisposableCollection, Emitter, Event, isObject, MaybePromise, PreferenceScope } from '../../common';
20
20
  import { PreferenceChangeEvent, PreferenceEventEmitter, PreferenceProxy, PreferenceProxyOptions, PreferenceRetrieval } from './preference-proxy';
21
- import { PreferenceChange, PreferenceChangeImpl, PreferenceChanges, PreferenceScope, PreferenceService } from './preference-service';
21
+ import { PreferenceChange, PreferenceChangeImpl, PreferenceChanges, PreferenceService } from './preference-service';
22
22
  import { JSONValue } from '@lumino/coreutils';
23
23
  import { PreferenceProviderDataChange } from './preference-provider';
24
- import { OverridePreferenceName } from './preference-language-override-service';
24
+ import { OverridePreferenceName } from '../../common/preferences/preference-language-override-service';
25
25
 
26
26
  export const PreferenceProxySchema = Symbol('PreferenceProxySchema');
27
27
  export interface PreferenceProxyFactory {
@@ -14,9 +14,11 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { injectable } from 'inversify';
18
- import { escapeRegExpCharacters, isObject } from '../../common';
19
- import { PreferenceSchemaProperties } from '../../common/preferences/preference-schema';
17
+ import { inject, injectable } from 'inversify';
18
+ import { isObject } from '../types';
19
+ import { IndexedAccess, PreferenceSchemaService } from './preference-schema';
20
+ import { escapeRegExpCharacters } from '../strings';
21
+ import { JSONValue } from '@lumino/coreutils';
20
22
 
21
23
  export interface OverridePreferenceName {
22
24
  preferenceName: string
@@ -34,10 +36,11 @@ export const getOverridePattern = (identifier: string) => `\\[(${identifier})\\]
34
36
 
35
37
  @injectable()
36
38
  export class PreferenceLanguageOverrideService {
37
- protected readonly overrideIdentifiers = new Set<string>();
39
+ @inject(PreferenceSchemaService)
40
+ protected readonly preferenceSchemaService: PreferenceSchemaService;
38
41
 
39
- testOverrideValue(name: string, value: unknown): value is PreferenceSchemaProperties {
40
- return PreferenceSchemaProperties.is(value) && OVERRIDE_PROPERTY_PATTERN.test(name);
42
+ static testOverrideValue(name: string, value: unknown): value is IndexedAccess<JSONValue> {
43
+ return isObject(value) && OVERRIDE_PROPERTY_PATTERN.test(name);
41
44
  }
42
45
 
43
46
  /**
@@ -65,7 +68,7 @@ export class PreferenceLanguageOverrideService {
65
68
  }
66
69
  const matches = name.substring(0, index).match(OVERRIDE_PROPERTY_PATTERN);
67
70
  const overrideIdentifier = matches && matches[1];
68
- if (!overrideIdentifier || !this.overrideIdentifiers.has(overrideIdentifier)) {
71
+ if (!overrideIdentifier || !this.preferenceSchemaService.overrideIdentifiers.has(overrideIdentifier)) {
69
72
  return undefined;
70
73
  }
71
74
  const preferenceName = name.substring(index + 1);
@@ -74,7 +77,7 @@ export class PreferenceLanguageOverrideService {
74
77
 
75
78
  computeOverridePatternPropertiesKey(): string | undefined {
76
79
  let param: string = '';
77
- for (const overrideIdentifier of this.overrideIdentifiers) {
80
+ for (const overrideIdentifier of this.preferenceSchemaService.overrideIdentifiers) {
78
81
  if (param.length) {
79
82
  param += '|';
80
83
  }
@@ -84,28 +87,8 @@ export class PreferenceLanguageOverrideService {
84
87
  }
85
88
 
86
89
  *getOverridePreferenceNames(preferenceName: string): IterableIterator<string> {
87
- for (const overrideIdentifier of this.overrideIdentifiers) {
90
+ for (const overrideIdentifier of this.preferenceSchemaService.overrideIdentifiers) {
88
91
  yield this.overridePreferenceName({ preferenceName, overrideIdentifier });
89
92
  }
90
93
  }
91
-
92
- /**
93
- * @param overrideIdentifier
94
- * @returns true if the addition caused a change, i.e. if the identifier was not already present in the set of identifiers, false otherwise.
95
- */
96
- addOverrideIdentifier(overrideIdentifier: string): boolean {
97
- const alreadyPresent = this.overrideIdentifiers.has(overrideIdentifier);
98
- if (!alreadyPresent) {
99
- this.overrideIdentifiers.add(overrideIdentifier);
100
- }
101
- return !alreadyPresent;
102
- }
103
-
104
- /**
105
- * @param overrideIdentifier
106
- * @returns true if the deletion caused a change, i.e. if the identifier was present in the set, false otherwise.
107
- */
108
- removeOverrideIdentifier(overrideIdentifier: string): boolean {
109
- return this.overrideIdentifiers.delete(overrideIdentifier);
110
- }
111
94
  }
@@ -0,0 +1,165 @@
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 debounce = require('p-debounce');
18
+ import { injectable } from 'inversify';
19
+ import { JSONObject } from '@lumino/coreutils';
20
+ import URI from '../../common/uri';
21
+ import { DisposableCollection, Emitter, Event, isObject, PreferenceLanguageOverrideService } from '../../common';
22
+ import { Deferred } from '../../common/promise-util';
23
+ import { PreferenceScope } from './preference-scope';
24
+ import { PreferenceProvider, PreferenceProviderDataChange, PreferenceProviderDataChanges, PreferenceResolveResult } from './preference-provider';
25
+
26
+ export abstract class PreferenceProviderBase {
27
+
28
+ protected readonly onDidPreferencesChangedEmitter = new Emitter<PreferenceProviderDataChanges>();
29
+ readonly onDidPreferencesChanged: Event<PreferenceProviderDataChanges> = this.onDidPreferencesChangedEmitter.event;
30
+
31
+ protected readonly toDispose = new DisposableCollection();
32
+
33
+ protected deferredChanges: PreferenceProviderDataChanges | undefined;
34
+
35
+ constructor() {
36
+ this.toDispose.push(this.onDidPreferencesChangedEmitter);
37
+ }
38
+
39
+ /**
40
+ * Informs the listeners that one or more preferences of this provider are changed.
41
+ * The listeners are able to find what was changed from the emitted event.
42
+ */
43
+ protected emitPreferencesChangedEvent(changes: PreferenceProviderDataChanges | PreferenceProviderDataChange[]): Promise<boolean> {
44
+ if (Array.isArray(changes)) {
45
+ for (const change of changes) {
46
+ this.mergePreferenceProviderDataChange(change);
47
+ }
48
+ } else {
49
+ for (const preferenceName of Object.keys(changes)) {
50
+ this.mergePreferenceProviderDataChange(changes[preferenceName]);
51
+ }
52
+ }
53
+ return this.fireDidPreferencesChanged();
54
+ }
55
+
56
+ protected mergePreferenceProviderDataChange(change: PreferenceProviderDataChange): void {
57
+ if (!this.deferredChanges) {
58
+ this.deferredChanges = {};
59
+ }
60
+ const current = this.deferredChanges[change.preferenceName];
61
+ const { newValue, scope, domain } = change;
62
+ if (!current) {
63
+ // new
64
+ this.deferredChanges[change.preferenceName] = change;
65
+ } else if (current.oldValue === newValue) {
66
+ // delete
67
+ delete this.deferredChanges[change.preferenceName];
68
+ } else {
69
+ // update
70
+ Object.assign(current, { newValue, scope, domain });
71
+ }
72
+ }
73
+
74
+ protected fireDidPreferencesChanged = debounce(() => {
75
+ const changes = this.deferredChanges;
76
+ this.deferredChanges = undefined;
77
+ if (changes && Object.keys(changes).length) {
78
+ this.onDidPreferencesChangedEmitter.fire(changes);
79
+ return true;
80
+ }
81
+ return false;
82
+ }, 0);
83
+
84
+ dispose(): void {
85
+ this.toDispose.dispose();
86
+ }
87
+
88
+ }
89
+
90
+ /**
91
+ * The {@link PreferenceProvider} is used to store and retrieve preference values. A {@link PreferenceProvider} does not operate in a global scope but is
92
+ * configured for one or more {@link PreferenceScope}s. The (default implementation for the) {@link PreferenceService} aggregates all {@link PreferenceProvider}s and
93
+ * serves as a common facade for manipulating preference values.
94
+ */
95
+ @injectable()
96
+ export abstract class PreferenceProviderImpl extends PreferenceProviderBase implements PreferenceProvider {
97
+
98
+ protected readonly _ready = new Deferred<void>();
99
+
100
+ constructor() {
101
+ super();
102
+ }
103
+
104
+ get<T>(preferenceName: string, resourceUri?: string): T | undefined {
105
+ return this.resolve<T>(preferenceName, resourceUri).value;
106
+ }
107
+
108
+ resolve<T>(preferenceName: string, resourceUri?: string): PreferenceResolveResult<T> {
109
+ const value = this.getPreferences(resourceUri)[preferenceName];
110
+ if (value !== undefined) {
111
+ return {
112
+ value: value as T,
113
+ configUri: this.getConfigUri(resourceUri)
114
+ };
115
+ }
116
+ return {};
117
+ }
118
+
119
+ abstract getPreferences(resourceUri?: string): JSONObject;
120
+ abstract setPreference(key: string, value: unknown, resourceUri?: string): Promise<boolean>;
121
+
122
+ /**
123
+ * Resolved when the preference provider is ready to provide preferences
124
+ * It should be resolved by subclasses.
125
+ */
126
+ get ready(): Promise<void> {
127
+ return this._ready.promise;
128
+ }
129
+
130
+ /**
131
+ * Retrieve the domain for this provider.
132
+ *
133
+ * @returns the domain or `undefined` if this provider is suitable for all domains.
134
+ */
135
+ getDomain(): string[] | undefined {
136
+ return undefined;
137
+ }
138
+
139
+ getConfigUri(resourceUri?: string, sectionName?: string): URI | undefined {
140
+ return undefined;
141
+ }
142
+
143
+ getContainingConfigUri?(resourceUri?: string, sectionName?: string): URI | undefined;
144
+
145
+ protected getParsedContent(jsonData: unknown): { [key: string]: unknown } {
146
+ const preferences: { [key: string]: unknown } = {};
147
+ if (!isObject(jsonData)) {
148
+ return preferences;
149
+ }
150
+ for (const [preferenceName, preferenceValue] of Object.entries(jsonData)) {
151
+ if (PreferenceLanguageOverrideService.testOverrideValue(preferenceName, preferenceValue)) {
152
+ for (const [overriddenPreferenceName, overriddenValue] of Object.entries(preferenceValue)) {
153
+ preferences[`${preferenceName}.${overriddenPreferenceName}`] = overriddenValue;
154
+ }
155
+ } else {
156
+ preferences[preferenceName] = preferenceValue;
157
+ }
158
+ }
159
+ return preferences;
160
+ }
161
+
162
+ canHandleScope(scope: PreferenceScope): boolean {
163
+ return true;
164
+ }
165
+ }
@@ -14,20 +14,21 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { PreferenceProvider } from './preference-provider';
17
+ import { PreferenceUtils } from './preference-provider';
18
+
18
19
  const { expect } = require('chai');
19
20
 
20
- describe('PreferenceProvider', () => {
21
+ describe('PreferenceProviderImpl', () => {
21
22
  it('should preserve extra source fields on merge', () => {
22
- const result = PreferenceProvider.merge({ 'configurations': [], 'compounds': [] }, { 'configurations': [] });
23
+ const result = PreferenceUtils.merge({ 'configurations': [], 'compounds': [] }, { 'configurations': [] });
23
24
  expect(result).deep.equals({ 'configurations': [], 'compounds': [] });
24
25
  });
25
26
  it('should preserve extra target fields on merge', () => {
26
- const result = PreferenceProvider.merge({ 'configurations': [] }, { 'configurations': [], 'compounds': [] });
27
+ const result = PreferenceUtils.merge({ 'configurations': [] }, { 'configurations': [], 'compounds': [] });
27
28
  expect(result).deep.equals({ 'configurations': [], 'compounds': [] });
28
29
  });
29
30
  it('should merge array values', () => {
30
- const result = PreferenceProvider.merge(
31
+ const result = PreferenceUtils.merge(
31
32
  { 'configurations': [{ 'name': 'test1', 'request': 'launch' }], 'compounds': [] },
32
33
  { 'configurations': [{ 'name': 'test2' }] }
33
34
  );
@@ -0,0 +1,164 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2023 TypeFox 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 { JSONExt, JSONObject, JSONValue } from '@lumino/coreutils';
18
+ import { Event } from '../event';
19
+ import { PreferenceScope } from '../preferences/preference-scope';
20
+ import { URI } from '../uri';
21
+ import { Disposable } from 'vscode-languageserver-protocol';
22
+
23
+ export interface PreferenceProviderDataChange {
24
+ /**
25
+ * The name of the changed preference.
26
+ */
27
+ readonly preferenceName: string;
28
+ /**
29
+ * The new value of the changed preference.
30
+ */
31
+ readonly newValue?: JSONValue;
32
+ /**
33
+ * The old value of the changed preference.
34
+ */
35
+ readonly oldValue?: JSONValue;
36
+ /**
37
+ * The {@link PreferenceScope} of the changed preference.
38
+ */
39
+ readonly scope: PreferenceScope;
40
+ /**
41
+ * URIs of the scopes in which this change applies.
42
+ */
43
+ readonly domain?: string[];
44
+ }
45
+
46
+ export namespace PreferenceProviderDataChange {
47
+ export function affects(change: PreferenceProviderDataChange, resourceUri?: string): boolean {
48
+ const resourcePath = resourceUri && new URI(resourceUri).path;
49
+ const domain = change.domain;
50
+ return !resourcePath || !domain || domain.some(uri => new URI(uri).path.relativity(resourcePath) >= 0);
51
+ }
52
+ }
53
+
54
+ export interface PreferenceResolveResult<T> {
55
+ configUri?: URI;
56
+ value?: T
57
+ }
58
+
59
+ export interface PreferenceProviderDataChanges {
60
+ [preferenceName: string]: PreferenceProviderDataChange;
61
+ }
62
+ export const PreferenceProvider = Symbol('PreferenceProvider');
63
+
64
+ export interface PreferenceProvider extends Disposable {
65
+ readonly onDidPreferencesChanged: Event<PreferenceProviderDataChanges>;
66
+ ready: Promise<void>
67
+
68
+ /**
69
+ * Whether t
70
+ * @param scope the scope to handle
71
+ */
72
+ canHandleScope(scope: PreferenceScope): boolean;
73
+
74
+ /**
75
+ * Retrieve the stored value for the given preference and resource URI.
76
+ *
77
+ * @param preferenceName the preference identifier.
78
+ * @param resourceUri the uri of the resource for which the preference is stored. This is used to retrieve
79
+ * a potentially different value for the same preference for different resources, for example `files.encoding`.
80
+ *
81
+ * @returns the value stored for the given preference and resourceUri if it exists, otherwise `undefined`.
82
+ */
83
+ get<T>(preferenceName: string, resourceUri?: string): T | undefined;
84
+ /**
85
+ * Stores a new value for the given preference key in the provider.
86
+ * @param key the preference key (typically the name).
87
+ * @param value the new preference value.
88
+ * @param resourceUri the URI of the resource for which the preference is stored.
89
+ *
90
+ * @returns a promise that only resolves if all changes were delivered.
91
+ * If changes were made then implementation must either
92
+ * await on `this.emitPreferencesChangedEvent(...)` or
93
+ * `this.pendingChanges` if changes are fired indirectly.
94
+ */
95
+ setPreference(key: string, value: JSONValue, resourceUri?: string): Promise<boolean>
96
+ /**
97
+ * Resolve the value for the given preference and resource URI.
98
+ *
99
+ * @param preferenceName the preference identifier.
100
+ * @param resourceUri the URI of the resource for which this provider should resolve the preference. This is used to retrieve
101
+ * a potentially different value for the same preference for different resources, for example `files.encoding`.
102
+ *
103
+ * @returns an object containing the value stored for the given preference and resourceUri if it exists,
104
+ * otherwise `undefined`.
105
+ */
106
+ resolve<T>(preferenceName: string, resourceUri?: string): PreferenceResolveResult<T>;
107
+
108
+ /**
109
+ * Retrieve the configuration URI for the given resource URI.
110
+ * @param resourceUri the uri of the resource or `undefined`.
111
+ * @param sectionName the section to return the URI for, e.g. `tasks` or `launch`. Defaults to settings.
112
+ *
113
+ * @returns the corresponding resource URI or `undefined` if there is no valid URI.
114
+ */
115
+ getConfigUri?(resourceUri?: string, sectionName?: string): URI | undefined;
116
+ /**
117
+ * Retrieves the first valid configuration URI contained by the given resource.
118
+ * @param resourceUri the uri of the container resource or `undefined`.
119
+ *
120
+ * @returns the first valid configuration URI contained by the given resource `undefined`
121
+ * if there is no valid configuration URI at all.
122
+ */
123
+ getContainingConfigUri?(resourceUri?: string, sectionName?: string): URI | undefined;
124
+
125
+ /**
126
+ * Return a JSONObject with all preferences stored in this preference provider
127
+ */
128
+ getPreferences(resourceUri?: string): JSONObject;
129
+ }
130
+
131
+ export namespace PreferenceUtils {
132
+ export function merge(source: JSONValue | undefined, target: JSONValue): JSONValue {
133
+ if (source === undefined || !JSONExt.isObject(source)) {
134
+ return JSONExt.deepCopy(target);
135
+ }
136
+ if (JSONExt.isPrimitive(target)) {
137
+ return {};
138
+ }
139
+ for (const [key, value] of Object.entries(target)) {
140
+ if (key in source) {
141
+ const sourceValue = source[key];
142
+ if (JSONExt.isObject(sourceValue) && JSONExt.isObject(value)) {
143
+ merge(sourceValue, value);
144
+ continue;
145
+ } else if (JSONExt.isArray(sourceValue) && JSONExt.isArray(value)) {
146
+ source[key] = [...JSONExt.deepCopy(sourceValue), ...JSONExt.deepCopy(value)];
147
+ continue;
148
+ }
149
+ }
150
+ source[key] = JSONExt.deepCopy(value);
151
+ }
152
+ return source;
153
+ }
154
+
155
+ /**
156
+ * Handles deep equality with the possibility of `undefined`
157
+ */
158
+ export function deepEqual(a: JSONValue | undefined, b: JSONValue | undefined): boolean {
159
+ if (a === b) { return true; }
160
+ if (a === undefined || b === undefined) { return false; }
161
+ return JSONExt.deepEqual(a, b);
162
+ }
163
+
164
+ }
@@ -18,9 +18,10 @@
18
18
 
19
19
  import { Disposable, Event, isObject, MaybePromise } from '../../common';
20
20
  import { PreferenceService } from './preference-service';
21
- import { PreferenceSchema } from './preference-contribution';
22
21
  import { PreferenceScope } from './preference-scope';
23
- import { OverridePreferenceName } from './preference-language-override-service';
22
+ import { IJSONSchema } from '../../common/json-schema';
23
+ import { isThenable } from '../../common/promise-util';
24
+ import { OverridePreferenceName } from '../../common/preferences/preference-language-override-service';
24
25
 
25
26
  /**
26
27
  * It is worth explaining the type for `PreferenceChangeEvent`:
@@ -174,29 +175,29 @@ export interface PreferenceProxyOptions {
174
175
  *
175
176
  * @deprecated @since 1.23.0 use `PreferenceProxyFactory` instead.
176
177
  */
177
- export function createPreferenceProxy<T>(preferences: PreferenceService, promisedSchema: MaybePromise<PreferenceSchema>, options?: PreferenceProxyOptions): PreferenceProxy<T> {
178
+ export function createPreferenceProxy<T>(preferences: PreferenceService, promisedSchema: MaybePromise<IJSONSchema>, options?: PreferenceProxyOptions): PreferenceProxy<T> {
178
179
  const opts = options || {};
179
180
  const prefix = opts.prefix || '';
180
181
  const style = opts.style || 'flat';
181
182
  const isDeep = style === 'deep' || style === 'both';
182
183
  const isFlat = style === 'both' || style === 'flat';
183
- let schema: PreferenceSchema | undefined;
184
- if (PreferenceSchema.is(promisedSchema)) {
185
- schema = promisedSchema;
184
+ let schema: IJSONSchema | undefined;
185
+ if (!isThenable(promisedSchema)) {
186
+ schema = promisedSchema as IJSONSchema;
186
187
  } else {
187
- promisedSchema.then(s => schema = s);
188
+ promisedSchema.then((s: IJSONSchema) => schema = s);
188
189
  }
189
190
  const onPreferenceChanged = (listener: (e: PreferenceChangeEvent<T>) => any, thisArgs?: any, disposables?: Disposable[]) => preferences.onPreferencesChanged(changes => {
190
191
  if (schema) {
191
192
  for (const key of Object.keys(changes)) {
192
193
  const e = changes[key];
193
194
  const overridden = preferences.overriddenPreferenceName(e.preferenceName);
194
- const preferenceName: any = overridden ? overridden.preferenceName : e.preferenceName;
195
+ const preferenceName = overridden ? overridden.preferenceName : e.preferenceName;
195
196
  if (preferenceName.startsWith(prefix) && (!opts.overrideIdentifier || overridden?.overrideIdentifier === opts.overrideIdentifier)) {
196
- if (schema.properties[preferenceName]) {
197
+ if (schema.properties && schema.properties[preferenceName]) {
197
198
  const { newValue, oldValue } = e;
198
199
  listener({
199
- newValue, oldValue, preferenceName,
200
+ newValue: newValue as T[keyof T], oldValue: oldValue as T[keyof T], preferenceName: preferenceName as keyof T,
200
201
  affects: (resourceUri, overrideIdentifier) => {
201
202
  if (overrideIdentifier !== overridden?.overrideIdentifier) {
202
203
  return false;
@@ -223,7 +224,7 @@ export function createPreferenceProxy<T>(preferences: PreferenceService, promise
223
224
 
224
225
  const ownKeys: () => string[] = () => {
225
226
  const properties = [];
226
- if (schema) {
227
+ if (schema && schema.properties) {
227
228
  for (const p of Object.keys(schema.properties)) {
228
229
  if (p.startsWith(prefix)) {
229
230
  const idx = p.indexOf('.', prefix.length);
@@ -250,7 +251,7 @@ export function createPreferenceProxy<T>(preferences: PreferenceService, promise
250
251
  if (style === 'deep' && property.indexOf('.') !== -1) {
251
252
  return false;
252
253
  }
253
- if (schema) {
254
+ if (schema && schema.properties) {
254
255
  const fullProperty = prefix ? prefix + property : property;
255
256
  if (schema.properties[fullProperty]) {
256
257
  preferences.set(fullProperty, value, PreferenceScope.Default);
@@ -279,7 +280,7 @@ export function createPreferenceProxy<T>(preferences: PreferenceService, promise
279
280
  throw new Error(`unexpected property: ${String(property)}`);
280
281
  }
281
282
  const fullProperty = prefix ? prefix + property : property;
282
- if (schema) {
283
+ if (schema && schema.properties) {
283
284
  if (isFlat || property.indexOf('.') === -1) {
284
285
  if (schema.properties[fullProperty]) {
285
286
  let value;
@@ -311,7 +312,7 @@ export function createPreferenceProxy<T>(preferences: PreferenceService, promise
311
312
  if (property === 'toJSON') {
312
313
  return toJSON();
313
314
  }
314
- if (schema && isDeep) {
315
+ if (schema && schema.properties && isDeep) {
315
316
  const newPrefix = fullProperty + '.';
316
317
  for (const p of Object.keys(schema.properties)) {
317
318
  if (p.startsWith(newPrefix)) {