@theia/core 1.65.0-next.19 → 1.65.0-next.39

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 (339) hide show
  1. package/lib/browser/breadcrumbs/breadcrumbs-renderer.d.ts +1 -1
  2. package/lib/browser/breadcrumbs/breadcrumbs-renderer.d.ts.map +1 -1
  3. package/lib/browser/breadcrumbs/breadcrumbs-renderer.js +1 -1
  4. package/lib/browser/breadcrumbs/breadcrumbs-renderer.js.map +1 -1
  5. package/lib/browser/catalog.json +24 -7
  6. package/lib/browser/common-frontend-contribution.d.ts +2 -3
  7. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  8. package/lib/browser/common-frontend-contribution.js +3 -4
  9. package/lib/browser/common-frontend-contribution.js.map +1 -1
  10. package/lib/browser/encoding-registry.d.ts +1 -1
  11. package/lib/browser/encoding-registry.d.ts.map +1 -1
  12. package/lib/browser/encoding-registry.js +1 -1
  13. package/lib/browser/encoding-registry.js.map +1 -1
  14. package/lib/browser/frontend-application-bindings.d.ts.map +1 -1
  15. package/lib/browser/frontend-application-bindings.js +10 -17
  16. package/lib/browser/frontend-application-bindings.js.map +1 -1
  17. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  18. package/lib/browser/frontend-application-module.js +4 -5
  19. package/lib/browser/frontend-application-module.js.map +1 -1
  20. package/lib/browser/frontend-application.d.ts +1 -1
  21. package/lib/browser/frontend-application.d.ts.map +1 -1
  22. package/lib/browser/frontend-application.js +1 -1
  23. package/lib/browser/frontend-application.js.map +1 -1
  24. package/lib/browser/hover-service.d.ts +1 -2
  25. package/lib/browser/hover-service.d.ts.map +1 -1
  26. package/lib/browser/hover-service.js +1 -2
  27. package/lib/browser/hover-service.js.map +1 -1
  28. package/lib/browser/icon-theme-service.d.ts +3 -2
  29. package/lib/browser/icon-theme-service.d.ts.map +1 -1
  30. package/lib/browser/icon-theme-service.js +4 -3
  31. package/lib/browser/icon-theme-service.js.map +1 -1
  32. package/lib/browser/index.d.ts +0 -1
  33. package/lib/browser/index.d.ts.map +1 -1
  34. package/lib/browser/index.js +0 -1
  35. package/lib/browser/index.js.map +1 -1
  36. package/lib/browser/keybinding.d.ts +1 -1
  37. package/lib/browser/keybinding.d.ts.map +1 -1
  38. package/lib/browser/keybinding.js +1 -1
  39. package/lib/browser/keybinding.js.map +1 -1
  40. package/lib/browser/keybinding.spec.js +1 -1
  41. package/lib/browser/keybinding.spec.js.map +1 -1
  42. package/lib/browser/menu/browser-menu-plugin.d.ts +2 -2
  43. package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
  44. package/lib/browser/menu/browser-menu-plugin.js +2 -3
  45. package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
  46. package/lib/browser/open-with-service.d.ts +1 -1
  47. package/lib/browser/open-with-service.d.ts.map +1 -1
  48. package/lib/browser/open-with-service.js +3 -3
  49. package/lib/browser/open-with-service.js.map +1 -1
  50. package/lib/browser/opener-service.d.ts +1 -2
  51. package/lib/browser/opener-service.d.ts.map +1 -1
  52. package/lib/browser/opener-service.js.map +1 -1
  53. package/lib/browser/preferences/frontend-config-preference-contributions.d.ts +6 -0
  54. package/lib/browser/preferences/frontend-config-preference-contributions.d.ts.map +1 -0
  55. package/lib/browser/preferences/frontend-config-preference-contributions.js +60 -0
  56. package/lib/browser/preferences/frontend-config-preference-contributions.js.map +1 -0
  57. package/lib/browser/preferences/index.d.ts +0 -5
  58. package/lib/browser/preferences/index.d.ts.map +1 -1
  59. package/lib/browser/preferences/index.js +0 -5
  60. package/lib/browser/preferences/index.js.map +1 -1
  61. package/lib/browser/preferences/preference-contribution.d.ts +0 -96
  62. package/lib/browser/preferences/preference-contribution.d.ts.map +1 -1
  63. package/lib/browser/preferences/preference-contribution.js +14 -355
  64. package/lib/browser/preferences/preference-contribution.js.map +1 -1
  65. package/lib/browser/preferences/preference-proxy.spec.js +25 -17
  66. package/lib/browser/preferences/preference-proxy.spec.js.map +1 -1
  67. package/lib/browser/preferences/preference-schema-provider.spec.js +21 -34
  68. package/lib/browser/preferences/preference-schema-provider.spec.js.map +1 -1
  69. package/lib/browser/preferences/preference-service.spec.js +57 -80
  70. package/lib/browser/preferences/preference-service.spec.js.map +1 -1
  71. package/lib/browser/preferences/preference-validation-service.d.ts +24 -26
  72. package/lib/browser/preferences/preference-validation-service.d.ts.map +1 -1
  73. package/lib/browser/preferences/preference-validation-service.js +40 -20
  74. package/lib/browser/preferences/preference-validation-service.js.map +1 -1
  75. package/lib/browser/preferences/preference-validation-service.spec.js +10 -6
  76. package/lib/browser/preferences/preference-validation-service.spec.js.map +1 -1
  77. package/lib/browser/preferences/test/mock-preference-provider.d.ts +2 -3
  78. package/lib/browser/preferences/test/mock-preference-provider.d.ts.map +1 -1
  79. package/lib/browser/preferences/test/mock-preference-provider.js +5 -7
  80. package/lib/browser/preferences/test/mock-preference-provider.js.map +1 -1
  81. package/lib/browser/preferences/test/mock-preference-proxy.d.ts.map +1 -1
  82. package/lib/browser/preferences/test/mock-preference-proxy.js.map +1 -1
  83. package/lib/browser/preferences/test/mock-preference-service.d.ts +1 -4
  84. package/lib/browser/preferences/test/mock-preference-service.d.ts.map +1 -1
  85. package/lib/browser/preferences/test/mock-preference-service.js.map +1 -1
  86. package/lib/browser/quick-input/quick-command-service.d.ts +1 -1
  87. package/lib/browser/quick-input/quick-command-service.d.ts.map +1 -1
  88. package/lib/browser/quick-input/quick-command-service.js +1 -1
  89. package/lib/browser/quick-input/quick-command-service.js.map +1 -1
  90. package/lib/browser/request/browser-request-service.d.ts +1 -1
  91. package/lib/browser/request/browser-request-service.d.ts.map +1 -1
  92. package/lib/browser/request/browser-request-service.js +2 -2
  93. package/lib/browser/request/browser-request-service.js.map +1 -1
  94. package/lib/browser/shell/application-shell.d.ts +1 -1
  95. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  96. package/lib/browser/shell/application-shell.js +7 -6
  97. package/lib/browser/shell/application-shell.js.map +1 -1
  98. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js +3 -2
  99. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js.map +1 -1
  100. package/lib/browser/shell/tab-bars.d.ts +1 -1
  101. package/lib/browser/shell/tab-bars.d.ts.map +1 -1
  102. package/lib/browser/shell/theia-dock-panel.d.ts +1 -1
  103. package/lib/browser/shell/theia-dock-panel.d.ts.map +1 -1
  104. package/lib/browser/status-bar/status-bar.d.ts +1 -1
  105. package/lib/browser/status-bar/status-bar.d.ts.map +1 -1
  106. package/lib/browser/status-bar/status-bar.js +3 -2
  107. package/lib/browser/status-bar/status-bar.js.map +1 -1
  108. package/lib/browser/theming.d.ts +5 -4
  109. package/lib/browser/theming.d.ts.map +1 -1
  110. package/lib/browser/theming.js +7 -6
  111. package/lib/browser/theming.js.map +1 -1
  112. package/lib/browser/tooltip-service.d.ts +1 -1
  113. package/lib/browser/tooltip-service.d.ts.map +1 -1
  114. package/lib/browser/tooltip-service.js +1 -1
  115. package/lib/browser/tooltip-service.js.map +1 -1
  116. package/lib/browser/tree/index.d.ts +0 -1
  117. package/lib/browser/tree/index.d.ts.map +1 -1
  118. package/lib/browser/tree/index.js +0 -1
  119. package/lib/browser/tree/index.js.map +1 -1
  120. package/lib/browser/tree/tree-widget.d.ts +2 -2
  121. package/lib/browser/tree/tree-widget.d.ts.map +1 -1
  122. package/lib/browser/tree/tree-widget.js +3 -3
  123. package/lib/browser/tree/tree-widget.js.map +1 -1
  124. package/lib/browser/widgets/widget.js +4 -4
  125. package/lib/browser/widgets/widget.js.map +1 -1
  126. package/lib/browser/window/default-secondary-window-service.d.ts +1 -2
  127. package/lib/browser/window/default-secondary-window-service.d.ts.map +1 -1
  128. package/lib/browser/window/default-secondary-window-service.js +1 -2
  129. package/lib/browser/window/default-secondary-window-service.js.map +1 -1
  130. package/lib/browser/window/default-window-service.d.ts +1 -1
  131. package/lib/browser/window/default-window-service.d.ts.map +1 -1
  132. package/lib/browser/window/default-window-service.js +1 -1
  133. package/lib/browser/window/default-window-service.js.map +1 -1
  134. package/lib/browser/window/default-window-service.spec.js +1 -1
  135. package/lib/browser/window/default-window-service.spec.js.map +1 -1
  136. package/lib/browser/window/window-title-service.d.ts +1 -1
  137. package/lib/browser/window/window-title-service.d.ts.map +1 -1
  138. package/lib/browser/window/window-title-service.js +1 -1
  139. package/lib/browser/window/window-title-service.js.map +1 -1
  140. package/lib/{browser → common}/core-preferences.d.ts +2 -1
  141. package/lib/common/core-preferences.d.ts.map +1 -0
  142. package/lib/{browser → common}/core-preferences.js +17 -18
  143. package/lib/common/core-preferences.js.map +1 -0
  144. package/lib/common/index.d.ts +4 -0
  145. package/lib/common/index.d.ts.map +1 -1
  146. package/lib/common/index.js +4 -0
  147. package/lib/common/index.js.map +1 -1
  148. package/lib/common/inversify-utils.d.ts +31 -0
  149. package/lib/common/inversify-utils.d.ts.map +1 -0
  150. package/lib/common/inversify-utils.js +60 -0
  151. package/lib/common/inversify-utils.js.map +1 -0
  152. package/lib/common/json-schema.d.ts +1 -0
  153. package/lib/common/json-schema.d.ts.map +1 -1
  154. package/lib/common/preferences/defaults-preference-provider.d.ts +21 -0
  155. package/lib/common/preferences/defaults-preference-provider.d.ts.map +1 -0
  156. package/lib/common/preferences/defaults-preference-provider.js +99 -0
  157. package/lib/common/preferences/defaults-preference-provider.js.map +1 -0
  158. package/lib/common/preferences/index.d.ts +12 -0
  159. package/lib/common/preferences/index.d.ts.map +1 -0
  160. package/lib/common/preferences/index.js +30 -0
  161. package/lib/common/preferences/index.js.map +1 -0
  162. package/lib/{browser → common}/preferences/injectable-preference-proxy.d.ts +1 -1
  163. package/lib/common/preferences/injectable-preference-proxy.d.ts.map +1 -0
  164. package/lib/{browser → common}/preferences/injectable-preference-proxy.js +2 -2
  165. package/lib/common/preferences/injectable-preference-proxy.js.map +1 -0
  166. package/lib/common/preferences/preference-configurations.d.ts.map +1 -0
  167. package/lib/common/preferences/preference-configurations.js.map +1 -0
  168. package/lib/{browser → common}/preferences/preference-language-override-service.d.ts +4 -13
  169. package/lib/common/preferences/preference-language-override-service.d.ts.map +1 -0
  170. package/lib/{browser → common}/preferences/preference-language-override-service.js +14 -30
  171. package/lib/common/preferences/preference-language-override-service.js.map +1 -0
  172. package/lib/common/preferences/preference-provider-impl.d.ts +52 -0
  173. package/lib/common/preferences/preference-provider-impl.d.ts.map +1 -0
  174. package/lib/{browser/preferences/preference-provider.js → common/preferences/preference-provider-impl.js} +23 -95
  175. package/lib/common/preferences/preference-provider-impl.js.map +1 -0
  176. package/lib/{browser → common}/preferences/preference-provider.d.ts +34 -59
  177. package/lib/common/preferences/preference-provider.d.ts.map +1 -0
  178. package/lib/common/preferences/preference-provider.js +71 -0
  179. package/lib/common/preferences/preference-provider.js.map +1 -0
  180. package/lib/common/preferences/preference-provider.spec.d.ts.map +1 -0
  181. package/lib/{browser → common}/preferences/preference-provider.spec.js +4 -4
  182. package/lib/common/preferences/preference-provider.spec.js.map +1 -0
  183. package/lib/{browser → common}/preferences/preference-proxy.d.ts +2 -2
  184. package/lib/common/preferences/preference-proxy.d.ts.map +1 -0
  185. package/lib/{browser → common}/preferences/preference-proxy.js +10 -10
  186. package/lib/common/preferences/preference-proxy.js.map +1 -0
  187. package/lib/common/preferences/preference-schema-service.d.ts +55 -0
  188. package/lib/common/preferences/preference-schema-service.d.ts.map +1 -0
  189. package/lib/common/preferences/preference-schema-service.js +402 -0
  190. package/lib/common/preferences/preference-schema-service.js.map +1 -0
  191. package/lib/common/preferences/preference-schema.d.ts +145 -43
  192. package/lib/common/preferences/preference-schema.d.ts.map +1 -1
  193. package/lib/common/preferences/preference-schema.js +3 -41
  194. package/lib/common/preferences/preference-schema.js.map +1 -1
  195. package/lib/common/preferences/preference-scope.d.ts +4 -1
  196. package/lib/common/preferences/preference-scope.d.ts.map +1 -1
  197. package/lib/common/preferences/preference-scope.js +5 -14
  198. package/lib/common/preferences/preference-scope.js.map +1 -1
  199. package/lib/{browser → common}/preferences/preference-service.d.ts +9 -10
  200. package/lib/common/preferences/preference-service.d.ts.map +1 -0
  201. package/lib/{browser → common}/preferences/preference-service.js +65 -60
  202. package/lib/common/preferences/preference-service.js.map +1 -0
  203. package/lib/common/supported-encodings.d.ts.map +1 -0
  204. package/lib/common/supported-encodings.js.map +1 -0
  205. package/lib/{browser/tree → common}/tree-preference.d.ts +1 -1
  206. package/lib/common/tree-preference.d.ts.map +1 -0
  207. package/lib/{browser/tree → common}/tree-preference.js +3 -5
  208. package/lib/common/tree-preference.js.map +1 -0
  209. package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts +2 -1
  210. package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts.map +1 -1
  211. package/lib/electron-browser/menu/electron-context-menu-renderer.js +2 -1
  212. package/lib/electron-browser/menu/electron-context-menu-renderer.js.map +1 -1
  213. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +1 -2
  214. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
  215. package/lib/electron-browser/menu/electron-main-menu-factory.js +1 -1
  216. package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
  217. package/lib/electron-browser/menu/electron-menu-contribution.d.ts +2 -2
  218. package/lib/electron-browser/menu/electron-menu-contribution.d.ts.map +1 -1
  219. package/lib/electron-browser/menu/electron-menu-contribution.js +6 -6
  220. package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
  221. package/lib/electron-browser/window/electron-window-module.js +1 -1
  222. package/lib/electron-browser/window/electron-window-module.js.map +1 -1
  223. package/lib/electron-browser/window/electron-window-service.d.ts +1 -1
  224. package/lib/electron-browser/window/electron-window-service.d.ts.map +1 -1
  225. package/lib/electron-browser/window/electron-window-service.js +1 -1
  226. package/lib/electron-browser/window/electron-window-service.js.map +1 -1
  227. package/lib/{electron-browser/window → electron-common}/electron-window-preferences.d.ts +2 -1
  228. package/lib/electron-common/electron-window-preferences.d.ts.map +1 -0
  229. package/lib/{electron-browser/window → electron-common}/electron-window-preferences.js +7 -7
  230. package/lib/electron-common/electron-window-preferences.js.map +1 -0
  231. package/lib/electron-node/window/electron-window-module.d.ts +4 -0
  232. package/lib/electron-node/window/electron-window-module.d.ts.map +1 -0
  233. package/lib/{browser/preferences/preference-scope.js → electron-node/window/electron-window-module.js} +7 -5
  234. package/lib/electron-node/window/electron-window-module.js.map +1 -0
  235. package/lib/node/backend-application-module.d.ts.map +1 -1
  236. package/lib/node/backend-application-module.js +13 -0
  237. package/lib/node/backend-application-module.js.map +1 -1
  238. package/lib/node/backend-application.js +1 -1
  239. package/package.json +6 -5
  240. package/src/browser/breadcrumbs/breadcrumbs-renderer.tsx +1 -1
  241. package/src/browser/common-frontend-contribution.ts +2 -3
  242. package/src/browser/encoding-registry.ts +1 -1
  243. package/src/browser/frontend-application-bindings.ts +8 -13
  244. package/src/browser/frontend-application-module.ts +4 -4
  245. package/src/browser/frontend-application.ts +1 -1
  246. package/src/browser/hover-service.ts +1 -2
  247. package/src/browser/icon-theme-service.ts +3 -2
  248. package/src/browser/index.ts +0 -1
  249. package/src/browser/keybinding.spec.ts +1 -1
  250. package/src/browser/keybinding.ts +1 -1
  251. package/src/browser/menu/browser-menu-plugin.ts +4 -4
  252. package/src/browser/open-with-service.ts +1 -1
  253. package/src/browser/opener-service.ts +1 -2
  254. package/src/browser/preferences/frontend-config-preference-contributions.ts +52 -0
  255. package/src/browser/preferences/index.ts +0 -5
  256. package/src/browser/preferences/preference-contribution.ts +16 -398
  257. package/src/browser/preferences/preference-proxy.spec.ts +27 -17
  258. package/src/browser/preferences/preference-schema-provider.spec.ts +25 -37
  259. package/src/browser/preferences/preference-service.spec.ts +32 -56
  260. package/src/browser/preferences/preference-validation-service.spec.ts +27 -19
  261. package/src/browser/preferences/preference-validation-service.ts +60 -41
  262. package/src/browser/preferences/test/mock-preference-provider.ts +2 -5
  263. package/src/browser/preferences/test/mock-preference-proxy.ts +1 -2
  264. package/src/browser/preferences/test/mock-preference-service.ts +1 -4
  265. package/src/browser/quick-input/quick-command-service.ts +1 -1
  266. package/src/browser/request/browser-request-service.ts +4 -4
  267. package/src/browser/shell/application-shell.ts +7 -6
  268. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.tsx +5 -5
  269. package/src/browser/shell/tab-bars.ts +1 -1
  270. package/src/browser/shell/theia-dock-panel.ts +1 -1
  271. package/src/browser/status-bar/status-bar.tsx +3 -2
  272. package/src/browser/theming.ts +7 -6
  273. package/src/browser/tooltip-service.tsx +1 -1
  274. package/src/browser/tree/index.ts +0 -1
  275. package/src/browser/tree/tree-widget.tsx +4 -4
  276. package/src/browser/widgets/widget.ts +4 -4
  277. package/src/browser/window/default-secondary-window-service.ts +1 -2
  278. package/src/browser/window/default-window-service.spec.ts +1 -1
  279. package/src/browser/window/default-window-service.ts +1 -1
  280. package/src/browser/window/window-title-service.ts +1 -1
  281. package/src/{browser → common}/core-preferences.ts +16 -17
  282. package/src/common/index.ts +4 -0
  283. package/src/common/inversify-utils.ts +63 -0
  284. package/src/common/json-schema.ts +1 -0
  285. package/src/common/preferences/defaults-preference-provider.ts +91 -0
  286. package/src/common/preferences/index.ts +27 -0
  287. package/src/{browser → common}/preferences/injectable-preference-proxy.ts +3 -3
  288. package/src/{browser → common}/preferences/preference-language-override-service.ts +12 -29
  289. package/src/common/preferences/preference-provider-impl.ts +165 -0
  290. package/src/{browser → common}/preferences/preference-provider.spec.ts +6 -5
  291. package/src/common/preferences/preference-provider.ts +164 -0
  292. package/src/{browser → common}/preferences/preference-proxy.ts +15 -14
  293. package/src/common/preferences/preference-schema-service.ts +434 -0
  294. package/src/common/preferences/preference-schema.ts +156 -64
  295. package/src/common/preferences/preference-scope.ts +5 -13
  296. package/src/{browser → common}/preferences/preference-service.ts +71 -65
  297. package/src/{browser/tree → common}/tree-preference.ts +2 -4
  298. package/src/electron-browser/menu/electron-context-menu-renderer.ts +2 -1
  299. package/src/electron-browser/menu/electron-main-menu-factory.ts +2 -2
  300. package/src/electron-browser/menu/electron-menu-contribution.ts +9 -6
  301. package/src/electron-browser/window/electron-window-module.ts +1 -1
  302. package/src/electron-browser/window/electron-window-service.ts +1 -1
  303. package/src/{electron-browser/window → electron-common}/electron-window-preferences.ts +6 -6
  304. package/src/{browser/preferences/preference-scope.ts → electron-node/window/electron-window-module.ts} +7 -3
  305. package/src/node/backend-application-module.ts +28 -1
  306. package/src/node/backend-application.ts +1 -1
  307. package/lib/browser/core-preferences.d.ts.map +0 -1
  308. package/lib/browser/core-preferences.js.map +0 -1
  309. package/lib/browser/preferences/injectable-preference-proxy.d.ts.map +0 -1
  310. package/lib/browser/preferences/injectable-preference-proxy.js.map +0 -1
  311. package/lib/browser/preferences/preference-configurations.d.ts.map +0 -1
  312. package/lib/browser/preferences/preference-configurations.js.map +0 -1
  313. package/lib/browser/preferences/preference-language-override-service.d.ts.map +0 -1
  314. package/lib/browser/preferences/preference-language-override-service.js.map +0 -1
  315. package/lib/browser/preferences/preference-provider.d.ts.map +0 -1
  316. package/lib/browser/preferences/preference-provider.js.map +0 -1
  317. package/lib/browser/preferences/preference-provider.spec.d.ts.map +0 -1
  318. package/lib/browser/preferences/preference-provider.spec.js.map +0 -1
  319. package/lib/browser/preferences/preference-proxy.d.ts.map +0 -1
  320. package/lib/browser/preferences/preference-proxy.js.map +0 -1
  321. package/lib/browser/preferences/preference-scope.d.ts +0 -3
  322. package/lib/browser/preferences/preference-scope.d.ts.map +0 -1
  323. package/lib/browser/preferences/preference-scope.js.map +0 -1
  324. package/lib/browser/preferences/preference-service.d.ts.map +0 -1
  325. package/lib/browser/preferences/preference-service.js.map +0 -1
  326. package/lib/browser/supported-encodings.d.ts.map +0 -1
  327. package/lib/browser/supported-encodings.js.map +0 -1
  328. package/lib/browser/tree/tree-preference.d.ts.map +0 -1
  329. package/lib/browser/tree/tree-preference.js.map +0 -1
  330. package/lib/electron-browser/window/electron-window-preferences.d.ts.map +0 -1
  331. package/lib/electron-browser/window/electron-window-preferences.js.map +0 -1
  332. package/src/browser/preferences/preference-provider.ts +0 -277
  333. /package/lib/{browser → common}/preferences/preference-configurations.d.ts +0 -0
  334. /package/lib/{browser → common}/preferences/preference-configurations.js +0 -0
  335. /package/lib/{browser → common}/preferences/preference-provider.spec.d.ts +0 -0
  336. /package/lib/{browser → common}/supported-encodings.d.ts +0 -0
  337. /package/lib/{browser → common}/supported-encodings.js +0 -0
  338. /package/src/{browser → common}/preferences/preference-configurations.ts +0 -0
  339. /package/src/{browser → common}/supported-encodings.ts +0 -0
@@ -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)) {
@@ -0,0 +1,434 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2025 STMicroelectronics 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 { inject, injectable, named, postConstruct } from 'inversify';
18
+ import { Disposable } from '../disposable';
19
+ import { Emitter } from '../event';
20
+ import { IJSONSchema } from '../json-schema';
21
+ import { JSONObject, JSONValue } from '@lumino/coreutils';
22
+ import { PreferenceDataProperty, PreferenceSchema, PreferenceSchemaService, DefaultValueChangedEvent, PreferenceContribution } from './preference-schema';
23
+ import { PreferenceScope, ValidPreferenceScopes } from './preference-scope';
24
+ import { PreferenceUtils } from './preference-provider';
25
+ import { ContributionProvider } from '../contribution-provider';
26
+ import { Deferred } from '../promise-util';
27
+
28
+ const NO_OVERRIDE = {};
29
+ const OVERRIDE_PROPERTY = '\\[(.*)\\]$';
30
+
31
+ @injectable()
32
+ export class PreferenceSchemaServiceImpl implements PreferenceSchemaService {
33
+ // Storage structures
34
+ protected readonly schemas = new Set<PreferenceSchema>();
35
+ protected readonly properties = new Map<string, PreferenceDataProperty>();
36
+ /**
37
+ * This map stores default overrides. The primary map key is the base preference name.
38
+ * The preference name maps to a second map keyed by the override identifier or a special object value `NO_OVERRIDE',
39
+ * representing default overrides for the base property. The value in this second map is an array
40
+ * of entries in reverse order of their insertion. This is necessary becuaus multiple clients might register
41
+ * overrides for the same preference key/override combination. The elements in this array consist of a unique, generated
42
+ * identifier and the actual override value. This allows us to always return the last registerd override even
43
+ * when overrides are later removed.
44
+ */
45
+ protected readonly defaultOverrides = new Map<string, Map<string | object, [number, JSONValue][]>>();
46
+ protected readonly _overrideIdentifiers = new Set<string>();
47
+
48
+ protected readonly jsonSchemas: IJSONSchema[] = [];
49
+
50
+ protected readonly _ready = new Deferred();
51
+
52
+ get ready(): Promise<void> {
53
+ return this._ready.promise;
54
+ }
55
+
56
+ get overrideIdentifiers(): ReadonlySet<string> {
57
+ return this._overrideIdentifiers;
58
+ }
59
+
60
+ getSchemaProperties(): ReadonlyMap<string, PreferenceDataProperty> {
61
+ return this.properties;
62
+ }
63
+
64
+ protected nextSchemaTitle = 1;
65
+ protected nextOverrideValueId = 1;
66
+
67
+ // Event emitters
68
+ protected readonly defaultValueChangedEmitter = new Emitter<DefaultValueChangedEvent>();
69
+ protected readonly schemaChangedEmitter = new Emitter<void>();
70
+
71
+ // Public events
72
+ readonly onDidChangeDefaultValue = this.defaultValueChangedEmitter.event;
73
+ readonly onDidChangeSchema = this.schemaChangedEmitter.event;
74
+
75
+ @inject(ValidPreferenceScopes)
76
+ readonly validScopes: readonly PreferenceScope[];
77
+
78
+ @inject(ContributionProvider) @named(PreferenceContribution)
79
+ protected readonly preferenceContributions: ContributionProvider<PreferenceContribution>;
80
+
81
+ @postConstruct()
82
+ protected init(): void {
83
+ for (const scope of this.validScopes) {
84
+ this.jsonSchemas[scope] = {
85
+ type: 'object',
86
+ properties: {},
87
+ patternProperties: {},
88
+ additionalProperties: false
89
+ };
90
+ }
91
+ const promises: Promise<void>[] = [];
92
+ this.preferenceContributions.getContributions().forEach(contrib => {
93
+ if (contrib.schema) {
94
+ this.addSchema(contrib.schema);
95
+ }
96
+ if (contrib.initSchema) {
97
+ promises.push(contrib.initSchema(this));
98
+ }
99
+ });
100
+ Promise.all(promises).then(() => this._ready.resolve());
101
+ }
102
+
103
+ dispose(): void {
104
+ this.defaultValueChangedEmitter.dispose();
105
+ this.schemaChangedEmitter.dispose();
106
+ }
107
+
108
+ registerOverrideIdentifier(overrideIdentifier: string): Disposable {
109
+ if (!this._overrideIdentifiers.has(overrideIdentifier)) {
110
+ this.addOverrideToJsonSchema(overrideIdentifier);
111
+ this._overrideIdentifiers.add(overrideIdentifier);
112
+ this.schemaChangedEmitter.fire();
113
+
114
+ return Disposable.create(() => {
115
+ if (this._overrideIdentifiers.delete(overrideIdentifier)) {
116
+ this.schemaChangedEmitter.fire();
117
+ }
118
+ });
119
+ }
120
+ return Disposable.NULL;
121
+ }
122
+
123
+ addSchema(schema: PreferenceSchema): Disposable {
124
+ this.schemas.add(schema);
125
+
126
+ for (const [key, property] of Object.entries(schema.properties)) {
127
+ if (this.properties.has(key)) {
128
+ throw new Error(`Property with id '${key}' already exists`);
129
+ }
130
+
131
+ if (property.scope === undefined) {
132
+ property.scope = schema.scope;
133
+ }
134
+
135
+ if (property.overridable === undefined) {
136
+ property.overridable = schema.defaultOverridable;
137
+ }
138
+
139
+ this.properties.set(key, property);
140
+ this.setJSONSchemasProperty(key, property);
141
+ if (property.default !== undefined) {
142
+ this.defaultValueChangedEmitter.fire(this.changeFor(key, undefined, this.defaultOverrides.get(key), undefined, property.default!));
143
+ }
144
+
145
+ }
146
+
147
+ this.schemaChangedEmitter.fire();
148
+
149
+ return Disposable.create(() => {
150
+ if (this.schemas.delete(schema)) {
151
+ for (const [key, property] of Object.entries(schema.properties)) {
152
+ this.deleteFromJSONSchemas(key, property);
153
+ this.properties.delete(key);
154
+ const overrides = this.defaultOverrides.get(key);
155
+
156
+ const baseOverride = overrides?.get(NO_OVERRIDE);
157
+ if (baseOverride !== undefined) {
158
+ this.defaultValueChangedEmitter.fire(this.changeFor(key, undefined, overrides, baseOverride, undefined));
159
+ } else if (property.default !== undefined) {
160
+ this.defaultValueChangedEmitter.fire(this.changeFor(key, undefined, overrides, property.default, undefined));
161
+ }
162
+ if (overrides) {
163
+ for (const [overrideKey, value] of overrides) {
164
+ if (typeof overrideKey === 'string') {
165
+ this.defaultValueChangedEmitter.fire(this.changeFor(key, overrideKey, overrides, value[0][1], undefined));
166
+ }
167
+ }
168
+ }
169
+ }
170
+
171
+ this.schemaChangedEmitter.fire();
172
+ }
173
+ });
174
+ }
175
+
176
+ isValidInScope(preferenceName: string, scope: PreferenceScope): boolean {
177
+ const property = this.properties.get(preferenceName);
178
+
179
+ if (!property) {
180
+ return false;
181
+ }
182
+
183
+ // A property is valid in a scope if:
184
+ // 1. It is included (undefined or true)
185
+ // 2. Its scope is not defined (valid in all scopes) or its scope includes the given scope
186
+ return (property.included !== false) &&
187
+ (property.scope === undefined || property.scope >= scope);
188
+ }
189
+
190
+ getSchemaProperty(key: string): PreferenceDataProperty | undefined {
191
+ return this.properties.get(key);
192
+ }
193
+
194
+ updateSchemaProperty(key: string, property: PreferenceDataProperty): void {
195
+ const existing = this.properties.get(key);
196
+ if (existing) {
197
+ // Update the property with new values
198
+ const updatedProperty = { ...existing, ...property };
199
+ this.properties.set(key, updatedProperty);
200
+ const hasNoBaseOverrideValue = this.defaultOverrides.get(key)?.get(NO_OVERRIDE) === undefined;
201
+ if (hasNoBaseOverrideValue && !PreferenceUtils.deepEqual(property.default, existing.default)) {
202
+ this.defaultValueChangedEmitter.fire(this.changeFor(key, undefined, this.defaultOverrides.get(key), undefined, property.default!));
203
+ }
204
+
205
+ this.setJSONSchemasProperty(key, updatedProperty);
206
+ this.schemaChangedEmitter.fire();
207
+ } else {
208
+ console.warn(`Trying to update non-existent property ${key}`);
209
+ }
210
+ }
211
+
212
+ registerOverride(key: string, overrideIdentifier: string | undefined, value: JSONValue): Disposable {
213
+ const overrideId = overrideIdentifier || NO_OVERRIDE;
214
+ const property = this.properties.get(key);
215
+ if (!property) {
216
+ console.warn(`Trying to register default override for non-existent preference: ${key}`);
217
+ } else if (!property.overridable && overrideIdentifier) {
218
+ console.warn(`Trying to register default override for identifier ${overrideIdentifier} for non-overridable preference: ${key}`);
219
+ }
220
+
221
+ let overrides = this.defaultOverrides.get(key);
222
+ if (!overrides) {
223
+ overrides = new Map();
224
+ this.defaultOverrides.set(key, overrides);
225
+ }
226
+
227
+ const oldValue = this.getDefaultValue(key, overrideIdentifier);
228
+
229
+ const overrideValueId = this.nextOverrideValueId;
230
+ let override = overrides.get(overrideId);
231
+ if (!override) {
232
+ override = [];
233
+ overrides.set(overrideId, override);
234
+ }
235
+ override.unshift([overrideValueId, value]);
236
+
237
+ // Fire event only if the value actually changed
238
+ if (!PreferenceUtils.deepEqual(oldValue, value)) {
239
+ const evt = this.changeFor(key, overrideIdentifier, overrides, oldValue, value);
240
+ this.defaultValueChangedEmitter.fire(evt);
241
+ }
242
+
243
+ if (property) {
244
+ this.setJSONSchemasProperty(key, property);
245
+ }
246
+
247
+ return Disposable.create(() => {
248
+ this.removeOverride(key, overrideIdentifier, overrideValueId);
249
+ });
250
+ }
251
+
252
+ protected changeFor(key: string, overrideIdentifier: string | undefined,
253
+ overrides: Map<string | object, [number, JSONValue][]> | undefined, oldValue: JSONValue | undefined, newValue: JSONValue | undefined): DefaultValueChangedEvent {
254
+ const affectedOverrides = [];
255
+ if (!overrideIdentifier) {
256
+ for (const id of this._overrideIdentifiers) {
257
+ if (!overrides?.has(id)) {
258
+ affectedOverrides.push(id);
259
+ }
260
+ }
261
+ }
262
+ return {
263
+ key,
264
+ overrideIdentifier: overrideIdentifier,
265
+ otherAffectedOverrides: affectedOverrides,
266
+ oldValue,
267
+ newValue
268
+ };
269
+ }
270
+
271
+ protected removeOverride(key: string, overrideIdentifier: string | undefined, overrideValueId: number): void {
272
+ const overrideId = overrideIdentifier || NO_OVERRIDE;
273
+ const overrides = this.defaultOverrides.get(key);
274
+ if (overrides) {
275
+ const values = overrides.get(overrideId);
276
+ if (values) {
277
+ const index = values.findIndex(v => v[0] === overrideValueId);
278
+ if (index) {
279
+ const oldValue = this.getDefaultValue(key, overrideIdentifier);
280
+ values.splice(index, 1);
281
+ const newValue = this.getDefaultValue(key, overrideIdentifier);
282
+ if (!PreferenceUtils.deepEqual(oldValue, newValue)) {
283
+
284
+ const affectedOverrides = [];
285
+ if (!overrideIdentifier) {
286
+ for (const id of this._overrideIdentifiers) {
287
+ if (!overrides.has(id)) {
288
+ affectedOverrides.push(id);
289
+ }
290
+ }
291
+ }
292
+
293
+ this.defaultValueChangedEmitter.fire({
294
+ key,
295
+ overrideIdentifier,
296
+ otherAffectedOverrides: affectedOverrides,
297
+ oldValue,
298
+ newValue
299
+ });
300
+ }
301
+ }
302
+ if (values.length === 0) {
303
+ overrides.delete(overrideId);
304
+ }
305
+ }
306
+ if (overrides.size === 0) {
307
+ this.defaultOverrides.delete(key);
308
+ }
309
+ }
310
+ }
311
+
312
+ getDefaultValue(key: string, overrideIdentifier: string | undefined): JSONValue | undefined {
313
+ const overrideId = overrideIdentifier || NO_OVERRIDE;
314
+ const overrides = this.defaultOverrides.get(key);
315
+ if (overrides) {
316
+ const values = overrides.get(overrideId);
317
+ if (values) {
318
+ return values[0][1]; // there will be no empty values arrays in the data structure
319
+ }
320
+ }
321
+
322
+ const property = this.properties.get(key);
323
+ return property?.default;
324
+ }
325
+
326
+ inspectDefaultValue(key: string, overrideIdentifier: string | undefined): JSONValue | undefined {
327
+ const overrideId = overrideIdentifier || NO_OVERRIDE;
328
+ const overrides = this.defaultOverrides.get(key);
329
+ if (overrides) {
330
+ const values = overrides.get(overrideId);
331
+ if (values) {
332
+ return values[0][1]; // there will be no empty values arrays in the data structure
333
+ }
334
+ }
335
+
336
+ if (!overrideIdentifier) {
337
+ const property = this.properties.get(key);
338
+ return property?.default;
339
+ }
340
+ return undefined;
341
+ }
342
+
343
+ getJSONSchema(scope: PreferenceScope): IJSONSchema {
344
+ return this.jsonSchemas[scope];
345
+ }
346
+
347
+ private setJSONSchemasProperty(key: string, property: PreferenceDataProperty): void {
348
+ for (const scope of this.validScopes) {
349
+ if (this.isValidInScope(key, scope)) {
350
+ this.setJSONSchemaProperty(this.jsonSchemas[scope], key, property);
351
+ }
352
+ }
353
+ }
354
+ private deleteFromJSONSchemas(key: string, property: PreferenceDataProperty): void {
355
+ for (const scope of this.validScopes) {
356
+ if (this.isValidInScope(key, scope)) {
357
+ const schema = this.jsonSchemas[scope];
358
+ for (const name of Object.keys(schema.properties!)) {
359
+ if (name.match(OVERRIDE_PROPERTY)) {
360
+ const value = schema.properties![name] as IJSONSchema;
361
+ delete value.properties![key];
362
+ } else {
363
+ delete schema.properties![key];
364
+ }
365
+ }
366
+ }
367
+ }
368
+ }
369
+
370
+ private setJSONSchemaProperty(schema: IJSONSchema, key: string, property: PreferenceDataProperty): void {
371
+ // Add property to the schema
372
+ const prop = { ...property, default: this.getDefaultValue(key, undefined) };
373
+ schema.properties![key] = prop;
374
+ delete prop['scope'];
375
+ delete prop['overridable'];
376
+ if (property.overridable) {
377
+ for (const overrideIdentifier of this._overrideIdentifiers) {
378
+ const overrideSchema: IJSONSchema = schema.properties![`[${overrideIdentifier}]`] || {
379
+ type: 'object',
380
+ properties: {},
381
+ patternProperties: {},
382
+ additionalProperties: false
383
+ };
384
+ schema.properties![`[${overrideIdentifier}]`] = overrideSchema;
385
+ overrideSchema.properties![key] = { ...property, default: this.getDefaultValue(key, overrideIdentifier) };
386
+ }
387
+ }
388
+ }
389
+
390
+ addOverrideToJsonSchema(overrideIdentifier: string): void {
391
+ for (const scope of this.validScopes) {
392
+ const schema = this.jsonSchemas[scope];
393
+ const overrideSchema: IJSONSchema = {
394
+ type: 'object',
395
+ properties: {},
396
+ patternProperties: {},
397
+ additionalProperties: false
398
+ };
399
+ schema.properties![`[${overrideIdentifier}]`] = overrideSchema;
400
+ for (const [key, property] of this.properties.entries()) {
401
+ if (property.overridable && this.isValidInScope(key, scope)) {
402
+ overrideSchema.properties![key] = { ...property, default: this.getDefaultValue(key, overrideIdentifier) };
403
+ }
404
+ }
405
+ }
406
+ }
407
+
408
+ getDefaultValues(): JSONObject {
409
+ const result: JSONObject = {};
410
+
411
+ for (const [key, property] of this.properties.entries()) {
412
+ if (this.isValidInScope(key, PreferenceScope.Default)) {
413
+ if (property.default !== undefined) {
414
+ result[key] = property.default;
415
+ }
416
+ const overrides = this.defaultOverrides.get(key);
417
+ if (overrides) {
418
+ for (const [overrideId, values] of overrides.entries()) {
419
+ if (overrideId === NO_OVERRIDE) {
420
+ result[key] = values[0][1];
421
+ } else {
422
+ const overrideKey = `[${overrideId}]`;
423
+ const target: JSONObject = result[overrideKey] as JSONObject || {};
424
+ target[key] = values[0][1];
425
+ result[overrideKey] = target;
426
+ }
427
+ }
428
+ }
429
+ }
430
+ }
431
+
432
+ return result;
433
+ }
434
+ }