@opensumi/ide-core-browser 2.21.8-rc-1670567192.0 → 2.21.8

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 (317) hide show
  1. package/lib/components/actions/index.d.ts.map +1 -1
  2. package/lib/components/actions/index.js +22 -2
  3. package/lib/components/actions/index.js.map +1 -1
  4. package/lib/components/tree/tree.module.less +0 -1
  5. package/lib/contextkey/testing.d.ts +0 -1
  6. package/lib/contextkey/testing.d.ts.map +1 -1
  7. package/lib/contextkey/testing.js +1 -2
  8. package/lib/contextkey/testing.js.map +1 -1
  9. package/lib/menu/next/menu.contrib.interface.d.ts +2 -3
  10. package/lib/menu/next/menu.contrib.interface.d.ts.map +1 -1
  11. package/lib/menu/next/menu.contrib.interface.js.map +1 -1
  12. package/lib/preferences/preference-configurations.js +1 -1
  13. package/lib/preferences/preference-configurations.js.map +1 -1
  14. package/lib/react-providers/config-provider.d.ts +0 -4
  15. package/lib/react-providers/config-provider.d.ts.map +1 -1
  16. package/lib/react-providers/config-provider.js.map +1 -1
  17. package/lib/services/storage-service.d.ts.map +1 -1
  18. package/lib/services/storage-service.js +1 -7
  19. package/lib/services/storage-service.js.map +1 -1
  20. package/lib/utils/label.d.ts.map +1 -1
  21. package/lib/utils/label.js +9 -16
  22. package/lib/utils/label.js.map +1 -1
  23. package/package.json +6 -7
  24. package/src/application/application-state-service.ts +0 -54
  25. package/src/application/application.service.ts +0 -51
  26. package/src/application/index.ts +0 -2
  27. package/src/authentication/authentication.contribution.ts +0 -35
  28. package/src/authentication/authentication.service.ts +0 -517
  29. package/src/bootstrap/app.ts +0 -745
  30. package/src/bootstrap/app.view.tsx +0 -88
  31. package/src/bootstrap/connection.ts +0 -116
  32. package/src/bootstrap/index.ts +0 -3
  33. package/src/bootstrap/inner-providers.ts +0 -297
  34. package/src/bootstrap/lifecycle.service.ts +0 -19
  35. package/src/browser-module.ts +0 -24
  36. package/src/common/common.command.ts +0 -977
  37. package/src/common/common.contribution.ts +0 -343
  38. package/src/common/common.define.ts +0 -55
  39. package/src/common/common.module.ts +0 -33
  40. package/src/common/common.storage.ts +0 -22
  41. package/src/common/container-id.ts +0 -12
  42. package/src/common/index.ts +0 -4
  43. package/src/components/actions/index.tsx +0 -486
  44. package/src/components/actions/placements.ts +0 -47
  45. package/src/components/actions/styles.module.less +0 -144
  46. package/src/components/badge/index.tsx +0 -1
  47. package/src/components/index.ts +0 -26
  48. package/src/components/layout/box-panel.tsx +0 -88
  49. package/src/components/layout/default-layout.tsx +0 -61
  50. package/src/components/layout/index.ts +0 -4
  51. package/src/components/layout/layout.ts +0 -80
  52. package/src/components/layout/split-panel.service.ts +0 -56
  53. package/src/components/layout/split-panel.tsx +0 -296
  54. package/src/components/layout/styles.module.less +0 -21
  55. package/src/components/loading/index.ts +0 -1
  56. package/src/components/loading/loading.less +0 -14
  57. package/src/components/loading/loading.view.tsx +0 -7
  58. package/src/components/loading/media/loading-dark.svg +0 -52
  59. package/src/components/loading/media/loading-hc.svg +0 -52
  60. package/src/components/loading/media/loading.svg +0 -52
  61. package/src/components/popover/styles.module.less +0 -81
  62. package/src/components/portal/index.tsx +0 -13
  63. package/src/components/progressbar/index.tsx +0 -16
  64. package/src/components/progressbar/styles.module.less +0 -31
  65. package/src/components/recycle-tree/index.ts +0 -1
  66. package/src/components/recycle-tree/recycle-tree.view.tsx +0 -368
  67. package/src/components/resize/resize.module.less +0 -78
  68. package/src/components/resize/resize.tsx +0 -663
  69. package/src/components/scroll/index.tsx +0 -386
  70. package/src/components/scroll/scroll.module.less +0 -108
  71. package/src/components/scrollbar/index.ts +0 -1
  72. package/src/components/scrollbar/scrollbar.less +0 -36
  73. package/src/components/scrollbar/scrollbar.view.ts +0 -8
  74. package/src/components/select/index.tsx +0 -12
  75. package/src/components/select/styles.less +0 -6
  76. package/src/components/tree/index.ts +0 -3
  77. package/src/components/tree/tree-node.view.tsx +0 -546
  78. package/src/components/tree/tree.module.less +0 -297
  79. package/src/components/tree/tree.view.tsx +0 -486
  80. package/src/context-key.ts +0 -48
  81. package/src/contextkey/dialog.ts +0 -3
  82. package/src/contextkey/explorer.ts +0 -26
  83. package/src/contextkey/index.ts +0 -6
  84. package/src/contextkey/outline.ts +0 -4
  85. package/src/contextkey/resource.ts +0 -61
  86. package/src/contextkey/terminal.ts +0 -7
  87. package/src/contextkey/testing.ts +0 -9
  88. package/src/contextkey/workspace.ts +0 -7
  89. package/src/core-preferences.ts +0 -318
  90. package/src/dom/index.ts +0 -176
  91. package/src/encoding-registry.ts +0 -83
  92. package/src/extensions/extensions-point.service.ts +0 -78
  93. package/src/extensions/index.ts +0 -3
  94. package/src/extensions/schema/browserViews.ts +0 -96
  95. package/src/extensions/schema/menu.ts +0 -245
  96. package/src/extensions/schema/opensumiExtensionPackageSchema.ts +0 -12
  97. package/src/extensions/schema/toolbar.ts +0 -338
  98. package/src/extensions/schema/vscodeExtensionPackageSchema.ts +0 -330
  99. package/src/fs/index.ts +0 -12
  100. package/src/hash-calculate/hash-calculate.contribution.ts +0 -19
  101. package/src/index.ts +0 -42
  102. package/src/keybinding/index.ts +0 -1
  103. package/src/keybinding/keybinding.ts +0 -908
  104. package/src/keyboard/index.ts +0 -3
  105. package/src/keyboard/keyboard-layout-provider.ts +0 -412
  106. package/src/keyboard/keyboard-layout-service.ts +0 -449
  107. package/src/keyboard/keys.ts +0 -748
  108. package/src/keyboard/layouts/_.contribution.ts +0 -24
  109. package/src/keyboard/layouts/cz.win.ts +0 -168
  110. package/src/keyboard/layouts/de-swiss.win.ts +0 -168
  111. package/src/keyboard/layouts/de.darwin.ts +0 -131
  112. package/src/keyboard/layouts/de.linux.ts +0 -186
  113. package/src/keyboard/layouts/de.win.ts +0 -168
  114. package/src/keyboard/layouts/dk.win.ts +0 -168
  115. package/src/keyboard/layouts/dvorak.darwin.ts +0 -131
  116. package/src/keyboard/layouts/en-belgian.win.ts +0 -168
  117. package/src/keyboard/layouts/en-ext.darwin.ts +0 -131
  118. package/src/keyboard/layouts/en-in.win.ts +0 -168
  119. package/src/keyboard/layouts/en-intl.darwin.ts +0 -131
  120. package/src/keyboard/layouts/en-intl.win.ts +0 -168
  121. package/src/keyboard/layouts/en-uk.darwin.ts +0 -131
  122. package/src/keyboard/layouts/en-uk.win.ts +0 -168
  123. package/src/keyboard/layouts/en.darwin.ts +0 -139
  124. package/src/keyboard/layouts/en.linux.ts +0 -186
  125. package/src/keyboard/layouts/en.win.ts +0 -173
  126. package/src/keyboard/layouts/es-latin.win.ts +0 -168
  127. package/src/keyboard/layouts/es.darwin.ts +0 -131
  128. package/src/keyboard/layouts/es.linux.ts +0 -186
  129. package/src/keyboard/layouts/es.win.ts +0 -168
  130. package/src/keyboard/layouts/fr.darwin.ts +0 -131
  131. package/src/keyboard/layouts/fr.linux.ts +0 -186
  132. package/src/keyboard/layouts/fr.win.ts +0 -168
  133. package/src/keyboard/layouts/hu.win.ts +0 -168
  134. package/src/keyboard/layouts/it.darwin.ts +0 -131
  135. package/src/keyboard/layouts/it.win.ts +0 -168
  136. package/src/keyboard/layouts/jp-roman.darwin.ts +0 -131
  137. package/src/keyboard/layouts/jp.darwin.ts +0 -131
  138. package/src/keyboard/layouts/ko.darwin.ts +0 -131
  139. package/src/keyboard/layouts/layout.contribution.darwin.ts +0 -23
  140. package/src/keyboard/layouts/layout.contribution.linux.ts +0 -12
  141. package/src/keyboard/layouts/layout.contribution.ts +0 -9
  142. package/src/keyboard/layouts/layout.contribution.win.ts +0 -29
  143. package/src/keyboard/layouts/no.win.ts +0 -168
  144. package/src/keyboard/layouts/pl.darwin.ts +0 -131
  145. package/src/keyboard/layouts/pl.win.ts +0 -168
  146. package/src/keyboard/layouts/pt-br.win.ts +0 -169
  147. package/src/keyboard/layouts/pt.darwin.ts +0 -131
  148. package/src/keyboard/layouts/pt.win.ts +0 -168
  149. package/src/keyboard/layouts/ru.darwin.ts +0 -131
  150. package/src/keyboard/layouts/ru.linux.ts +0 -186
  151. package/src/keyboard/layouts/ru.win.ts +0 -168
  152. package/src/keyboard/layouts/sv.darwin.ts +0 -131
  153. package/src/keyboard/layouts/sv.win.ts +0 -168
  154. package/src/keyboard/layouts/thai.win.ts +0 -168
  155. package/src/keyboard/layouts/tr.win.ts +0 -168
  156. package/src/keyboard/layouts/zh-hans.darwin.ts +0 -131
  157. package/src/layout/accordion/tab-bar-toolbar.tsx +0 -59
  158. package/src/layout/accordion/view-context-key.registry.ts +0 -34
  159. package/src/layout/constants.ts +0 -7
  160. package/src/layout/index.ts +0 -5
  161. package/src/layout/layout-hooks.ts +0 -68
  162. package/src/layout/layout-state.ts +0 -107
  163. package/src/layout/layout.interface.ts +0 -101
  164. package/src/layout/layout.ts +0 -80
  165. package/src/layout/view-id.ts +0 -18
  166. package/src/logger/browser-logger.ts +0 -51
  167. package/src/logger/index.ts +0 -1
  168. package/src/markdown/index.tsx +0 -62
  169. package/src/menu/next/base.ts +0 -513
  170. package/src/menu/next/ctxmenu-service.ts +0 -188
  171. package/src/menu/next/index.ts +0 -10
  172. package/src/menu/next/menu-id.ts +0 -86
  173. package/src/menu/next/menu-service.ts +0 -252
  174. package/src/menu/next/menu-util.ts +0 -77
  175. package/src/menu/next/menu.contrib.interface.ts +0 -79
  176. package/src/menu/next/menu.interface.ts +0 -253
  177. package/src/menu/next/menubar-service.ts +0 -211
  178. package/src/menu/next/renderer/ctxmenu/base.ts +0 -18
  179. package/src/menu/next/renderer/ctxmenu/browser.ts +0 -45
  180. package/src/menu/next/renderer/ctxmenu/electron.ts +0 -207
  181. package/src/menu/next/toolbar-action.service.ts +0 -132
  182. package/src/monaco/index.ts +0 -128
  183. package/src/opener/command-opener.ts +0 -42
  184. package/src/opener/default-opener.ts +0 -31
  185. package/src/opener/http-opener.ts +0 -25
  186. package/src/opener/index.ts +0 -19
  187. package/src/opener/opener.contribution.ts +0 -57
  188. package/src/opener/opener.service.ts +0 -66
  189. package/src/preferences/early-preferences.ts +0 -117
  190. package/src/preferences/index.ts +0 -9
  191. package/src/preferences/preference-configurations.ts +0 -77
  192. package/src/preferences/preference-contribution.ts +0 -401
  193. package/src/preferences/preference-provider.ts +0 -414
  194. package/src/preferences/preference-proxy.ts +0 -292
  195. package/src/preferences/preference-scope.ts +0 -3
  196. package/src/preferences/preference-service.ts +0 -571
  197. package/src/preferences/settings.ts +0 -53
  198. package/src/preferences/types.ts +0 -111
  199. package/src/progress/index.ts +0 -58
  200. package/src/progress/progress-bar.tsx +0 -22
  201. package/src/progress/progress-indicator.ts +0 -90
  202. package/src/progress/progress.module.less +0 -46
  203. package/src/progress/progress.service.tsx +0 -429
  204. package/src/quick-open/index.ts +0 -655
  205. package/src/quick-open/recent-files.ts +0 -68
  206. package/src/raw-context-key.ts +0 -116
  207. package/src/react-hooks/event.tsx +0 -80
  208. package/src/react-hooks/hot-key.tsx +0 -58
  209. package/src/react-hooks/index.ts +0 -3
  210. package/src/react-hooks/injectable-hooks.tsx +0 -35
  211. package/src/react-hooks/portal-hooks.tsx +0 -38
  212. package/src/react-providers/config-provider.tsx +0 -263
  213. package/src/react-providers/index.tsx +0 -2
  214. package/src/react-providers/slot.module.less +0 -19
  215. package/src/react-providers/slot.tsx +0 -242
  216. package/src/services/clipboard.service.ts +0 -97
  217. package/src/services/credentials-service.ts +0 -91
  218. package/src/services/crypto-service.ts +0 -23
  219. package/src/services/external-uri.service.ts +0 -68
  220. package/src/services/index.ts +0 -7
  221. package/src/services/label-service.ts +0 -386
  222. package/src/services/status-bar-service.ts +0 -108
  223. package/src/services/storage-service.ts +0 -197
  224. package/src/style/codicons/README.md +0 -22
  225. package/src/style/codicons/codicon-animations.css +0 -15
  226. package/src/style/codicons/generator.js +0 -15
  227. package/src/style/entry.less +0 -25
  228. package/src/style/icon/fileicons/file-default.svg +0 -1
  229. package/src/style/icon/fileicons/folder-default.svg +0 -1
  230. package/src/style/icon/fileicons.less +0 -20
  231. package/src/style/icon/icon.ts +0 -543
  232. package/src/style/icon/ide-iconfont.ts +0 -13
  233. package/src/style/icon/index.less +0 -54
  234. package/src/style/icon/seti.woff +0 -0
  235. package/src/style/icon/symbol-icons/boolean-dark.svg +0 -3
  236. package/src/style/icon/symbol-icons/boolean-light.svg +0 -3
  237. package/src/style/icon/symbol-icons/class-dark.svg +0 -3
  238. package/src/style/icon/symbol-icons/class-light.svg +0 -3
  239. package/src/style/icon/symbol-icons/constant-dark.svg +0 -4
  240. package/src/style/icon/symbol-icons/constant-light.svg +0 -4
  241. package/src/style/icon/symbol-icons/enumerator-dark.svg +0 -3
  242. package/src/style/icon/symbol-icons/enumerator-item-dark.svg +0 -3
  243. package/src/style/icon/symbol-icons/enumerator-item-light.svg +0 -3
  244. package/src/style/icon/symbol-icons/enumerator-light.svg +0 -3
  245. package/src/style/icon/symbol-icons/event-dark.svg +0 -3
  246. package/src/style/icon/symbol-icons/event-light.svg +0 -3
  247. package/src/style/icon/symbol-icons/field-dark.svg +0 -3
  248. package/src/style/icon/symbol-icons/field-light.svg +0 -3
  249. package/src/style/icon/symbol-icons/file-dark.svg +0 -3
  250. package/src/style/icon/symbol-icons/file-light.svg +0 -3
  251. package/src/style/icon/symbol-icons/indexer-dark.svg +0 -3
  252. package/src/style/icon/symbol-icons/indexer-light.svg +0 -3
  253. package/src/style/icon/symbol-icons/interface-dark.svg +0 -3
  254. package/src/style/icon/symbol-icons/interface-light.svg +0 -3
  255. package/src/style/icon/symbol-icons/keyword-dark.svg +0 -3
  256. package/src/style/icon/symbol-icons/keyword-light.svg +0 -3
  257. package/src/style/icon/symbol-icons/method-dark.svg +0 -3
  258. package/src/style/icon/symbol-icons/method-light.svg +0 -3
  259. package/src/style/icon/symbol-icons/namespace-dark.svg +0 -3
  260. package/src/style/icon/symbol-icons/namespace-light.svg +0 -3
  261. package/src/style/icon/symbol-icons/numeric-dark.svg +0 -3
  262. package/src/style/icon/symbol-icons/numeric-light.svg +0 -3
  263. package/src/style/icon/symbol-icons/operator-dark.svg +0 -3
  264. package/src/style/icon/symbol-icons/operator-light.svg +0 -3
  265. package/src/style/icon/symbol-icons/property-dark.svg +0 -3
  266. package/src/style/icon/symbol-icons/property-light.svg +0 -3
  267. package/src/style/icon/symbol-icons/snippet-dark.svg +0 -3
  268. package/src/style/icon/symbol-icons/snippet-light.svg +0 -3
  269. package/src/style/icon/symbol-icons/string-dark.svg +0 -3
  270. package/src/style/icon/symbol-icons/string-light.svg +0 -3
  271. package/src/style/icon/symbol-icons/structure-dark.svg +0 -3
  272. package/src/style/icon/symbol-icons/structure-light.svg +0 -3
  273. package/src/style/icon/symbol-icons/symbol-icons.css +0 -284
  274. package/src/style/icon/symbol-icons/template-dark.svg +0 -3
  275. package/src/style/icon/symbol-icons/template-light.svg +0 -3
  276. package/src/style/icon/symbol-icons/variable-dark.svg +0 -3
  277. package/src/style/icon/symbol-icons/variable-light.svg +0 -3
  278. package/src/style/icon.less +0 -8
  279. package/src/style/index.less +0 -14
  280. package/src/style/monaco-override.less +0 -116
  281. package/src/style/normalize.less +0 -92
  282. package/src/style/octicons/octicons-cdn.css +0 -720
  283. package/src/style/octicons/octicons.css +0 -714
  284. package/src/style/octicons/octicons.html +0 -1882
  285. package/src/style/octicons/octicons.svg +0 -582
  286. package/src/style/octicons/octicons.ttf +0 -0
  287. package/src/style/override.less +0 -97
  288. package/src/style/toolbar.less +0 -199
  289. package/src/style/utilities.less +0 -8
  290. package/src/style/variable.less +0 -8
  291. package/src/terminal/index.ts +0 -7
  292. package/src/toolbar/components/auto-complete.tsx +0 -0
  293. package/src/toolbar/components/button.tsx +0 -440
  294. package/src/toolbar/components/index.ts +0 -2
  295. package/src/toolbar/components/select.tsx +0 -189
  296. package/src/toolbar/index.ts +0 -3
  297. package/src/toolbar/toolbar.popover.registry.ts +0 -32
  298. package/src/toolbar/toolbar.registry.ts +0 -352
  299. package/src/toolbar/toolbar.tsx +0 -710
  300. package/src/toolbar/types.ts +0 -383
  301. package/src/tree/index.ts +0 -3
  302. package/src/tree/tree-expansion.ts +0 -25
  303. package/src/tree/tree-selection.ts +0 -89
  304. package/src/tree/tree.ts +0 -294
  305. package/src/utils/create-overlay.tsx +0 -53
  306. package/src/utils/electron.ts +0 -92
  307. package/src/utils/env.ts +0 -26
  308. package/src/utils/icon.ts +0 -13
  309. package/src/utils/index.ts +0 -7
  310. package/src/utils/json.ts +0 -251
  311. package/src/utils/label.tsx +0 -36
  312. package/src/utils/parse.ts +0 -72
  313. package/src/utils/react-hooks.ts +0 -118
  314. package/src/variable/index.ts +0 -1
  315. package/src/variable/variable.ts +0 -84
  316. package/src/window/index.ts +0 -34
  317. package/src/window/window.service.ts +0 -100
@@ -1,414 +0,0 @@
1
- import { Injectable } from '@opensumi/di';
2
- import {
3
- IDisposable,
4
- DisposableCollection,
5
- Emitter,
6
- Event,
7
- URI,
8
- Deferred,
9
- isEmptyObject,
10
- FileStat,
11
- } from '@opensumi/ide-core-common';
12
- import { PreferenceScope } from '@opensumi/ide-core-common/lib/preferences/preference-scope';
13
-
14
- import { JSONUtils, JSONValue } from '../utils';
15
-
16
- import { getExternalPreferenceProvider, getAllExternalProviders } from './early-preferences';
17
- import { PreferenceResolveResult } from './types';
18
- export interface IResolvedPreferences {
19
- default: { [key: string]: any };
20
- languageSpecific: {
21
- [languageId: string]: { [key: string]: any };
22
- };
23
- }
24
- export interface PreferenceProviderDataChange {
25
- readonly preferenceName: string;
26
- readonly newValue?: any;
27
- readonly oldValue?: any;
28
- readonly scope: PreferenceScope;
29
- readonly domain?: string[];
30
- }
31
-
32
- export interface PreferenceProviderDataChanges {
33
- default: {
34
- [preferenceName: string]: PreferenceProviderDataChange;
35
- };
36
- languageSpecific: ILanguagePreferenceProviderDataChanges;
37
- }
38
-
39
- export interface ILanguagePreferenceProviderDataChanges {
40
- [languageId: string]: {
41
- [preferenceName: string]: PreferenceProviderDataChange;
42
- };
43
- }
44
-
45
- function transformReverse(delegates: {
46
- [delegated: string]: {
47
- delegateTo: string;
48
- transform?: (delegateValue: any) => any;
49
- };
50
- }): {
51
- [delegated: string]: {
52
- delegated: string;
53
- delegateTo: string;
54
- transform?: (delegateValue: any) => any;
55
- };
56
- } {
57
- const res = {};
58
- for (const key of Object.keys(delegates)) {
59
- res[delegates[key].delegateTo] = {
60
- delegated: key,
61
- ...delegates[key],
62
- };
63
- }
64
- return res;
65
- }
66
-
67
- @Injectable()
68
- export abstract class PreferenceProvider implements IDisposable {
69
- public readonly name: string;
70
-
71
- private readonly onDidPreferencesChangedEmitter = new Emitter<PreferenceProviderDataChanges>();
72
- public readonly onDidPreferencesChanged: Event<PreferenceProviderDataChanges> =
73
- this.onDidPreferencesChangedEmitter.event;
74
-
75
- protected readonly toDispose = new DisposableCollection();
76
-
77
- protected readonly _ready = new Deferred<void>();
78
-
79
- public resource: Promise<FileStat | void>;
80
-
81
- private _scope: PreferenceScope;
82
-
83
- // preferenceDelegate 原则, delegate值优先,不改变原有 delegateTo 的行为
84
- // 1. 当修改 delegate 设置值发生改变时,同时发出 delegate 和 delegateTo 的 change 事件。
85
- // 2. 当尝试获取 delegateTo 的值时,会尝试先获取 delegate 的值,如果没有值,继续原来的逻辑。
86
- // 3. 当尝试修改 delegateTo 的值时,删除 delegate 的值
87
- // 4. 当尝试获取 delegate 的值时,如果 delegate 没有值, 尝试获取 delegateTo 的值
88
- // 5. schema 只会检测改变后 delegatedTo 的值
89
- // 6. 不对语言特定的设置生效
90
- static PreferenceDelegates: {
91
- [delegated: string]: {
92
- delegateTo: string;
93
- transform?: (delegatedValue: any) => any;
94
- transformFrom?: (delegatedToValue: any) => any;
95
- };
96
- } = {
97
- 'workbench.colorTheme': {
98
- delegateTo: 'general.theme',
99
- },
100
- };
101
-
102
- static PreferenceDelegatesReverse: {
103
- [delegated: string]: {
104
- delegated: string;
105
- delegateTo: string;
106
- transform?: (delegatedValue: any) => any;
107
- transformFrom?: (delegatedToValue: any) => any;
108
- };
109
- } = transformReverse(PreferenceProvider.PreferenceDelegates);
110
-
111
- constructor() {
112
- this.toDispose.push(this.onDidPreferencesChangedEmitter);
113
- }
114
-
115
- public asScope(scope: PreferenceScope) {
116
- if (typeof this._scope !== 'undefined') {
117
- return;
118
- }
119
- this._scope = scope;
120
- // 如果 external provider 有监听器,监听
121
- getAllExternalProviders().forEach(([preferenceName, provider]) => {
122
- if (provider.onDidChange) {
123
- provider.onDidChange((e) => {
124
- if (e.scope === this._scope) {
125
- this.emitPreferencesChangedEvent(
126
- [
127
- {
128
- preferenceName,
129
- scope: e.scope,
130
- newValue: e.newValue,
131
- oldValue: e.oldValue,
132
- },
133
- ],
134
- true,
135
- );
136
- }
137
- });
138
- }
139
- });
140
- }
141
-
142
- public dispose(): void {
143
- this.toDispose.dispose();
144
- }
145
-
146
- /**
147
- * 处理事件监听中接收到的Event数据对象
148
- * 以便后续接收到数据后能确认来自那个配置项的值
149
- */
150
- protected emitPreferencesChangedEvent(
151
- changes: PreferenceProviderDataChanges | PreferenceProviderDataChange[],
152
- noFilterExternal?: boolean,
153
- ): boolean {
154
- let prefChanges: PreferenceProviderDataChanges;
155
- if (Array.isArray(changes)) {
156
- prefChanges = { default: {}, languageSpecific: {} };
157
- for (const change of changes) {
158
- prefChanges.default[change.preferenceName] = change;
159
- }
160
- } else {
161
- prefChanges = changes;
162
- }
163
- if (typeof this._scope !== 'undefined') {
164
- const preferenceNames = Object.keys(prefChanges.default);
165
- // 只对scope preference provider做处理
166
- for (const preferenceName of preferenceNames) {
167
- const change = prefChanges.default[preferenceName];
168
- if (PreferenceProvider.PreferenceDelegates[change.preferenceName]) {
169
- const delegate = PreferenceProvider.PreferenceDelegates[change.preferenceName];
170
- if (this.get(delegate.delegateTo) !== undefined && this.get(change.preferenceName) === undefined) {
171
- // 这种情况不发出 delegateTo 的改变
172
- } else {
173
- prefChanges.default[delegate.delegateTo] = {
174
- ...change,
175
- oldValue: undefined,
176
- newValue:
177
- change.newValue !== undefined
178
- ? delegate.transform
179
- ? delegate.transform(change.newValue)
180
- : change.newValue
181
- : undefined,
182
- preferenceName: delegate.delegateTo,
183
- };
184
- }
185
- }
186
- if (!noFilterExternal && !!getExternalPreferenceProvider(preferenceName)) {
187
- // 过滤externalProvider管理的preference
188
- delete prefChanges.default[preferenceName];
189
- }
190
- if (change.oldValue === change.newValue) {
191
- delete prefChanges.default[preferenceName];
192
- }
193
- }
194
- }
195
- if (prefChanges && !isEmptyObject(prefChanges)) {
196
- this.onDidPreferencesChangedEmitter.fire(prefChanges);
197
- return true;
198
- }
199
- return false;
200
- }
201
-
202
- // @final 不要 override 这个
203
- public get<T>(preferenceName: string, resourceUri?: string, language?: string): T | undefined {
204
- if (PreferenceProvider.PreferenceDelegatesReverse[preferenceName]) {
205
- const res = this.getDelegateToValueFromDelegated(preferenceName);
206
- if (res !== undefined) {
207
- return res;
208
- }
209
- }
210
- const value = this.getWithoutDelegate<T>(preferenceName, resourceUri, language);
211
- if (value === undefined && PreferenceProvider.PreferenceDelegates[preferenceName]) {
212
- return this.getDelegatedValueFromDelegateTo(preferenceName);
213
- } else {
214
- return value;
215
- }
216
- }
217
-
218
- public getWithoutDelegate<T>(preferenceName: string, resourceUri?: string, language?: string): T | undefined {
219
- if (typeof this._scope !== 'undefined') {
220
- const externalProvider = getExternalPreferenceProvider(preferenceName);
221
- if (externalProvider) {
222
- return externalProvider.get(this._scope);
223
- }
224
- }
225
- return this.doGet<T>(preferenceName, resourceUri, language);
226
- }
227
-
228
- // 从delegateTo 获取 delegated
229
- private getDelegatedValueFromDelegateTo(delegatedPreferenceName: string) {
230
- const delegate = PreferenceProvider.PreferenceDelegates[delegatedPreferenceName];
231
- const value = this.getWithoutDelegate(delegate!.delegateTo);
232
- if (delegate.transformFrom) {
233
- return delegate.transformFrom(value);
234
- } else {
235
- return value;
236
- }
237
- }
238
-
239
- // 从delegate 获取 delegateTo
240
- private getDelegateToValueFromDelegated(delegateToPreferenceName: string) {
241
- const delegate = PreferenceProvider.PreferenceDelegatesReverse[delegateToPreferenceName];
242
- const value = this.getWithoutDelegate(delegate!.delegated);
243
- if (delegate.transform) {
244
- return delegate.transform(value);
245
- } else {
246
- return value;
247
- }
248
- }
249
-
250
- protected doGet<T>(preferenceName: string, resourceUri?: string, language?: string): T | undefined {
251
- return this.doResolve<T>(preferenceName, resourceUri, language).value;
252
- }
253
-
254
- // @final 不要 override 这个
255
- public resolve<T>(preferenceName: string, resourceUri?: string, language?: string): PreferenceResolveResult<T> {
256
- if (PreferenceProvider.PreferenceDelegatesReverse[preferenceName]) {
257
- const res = this.getDelegateToValueFromDelegated(preferenceName);
258
- if (res !== undefined) {
259
- return { value: res, scope: this._scope }; // FIXME: 这里好像scope有点问题,暂时不影响
260
- }
261
- }
262
- if (typeof this._scope !== 'undefined') {
263
- const externalProvider = getExternalPreferenceProvider(preferenceName);
264
- if (externalProvider) {
265
- return {
266
- value: externalProvider.get(this._scope),
267
- scope: this._scope,
268
- };
269
- }
270
- }
271
- const res = this.doResolve<T>(preferenceName, resourceUri, language);
272
- if (res.value === undefined && PreferenceProvider.PreferenceDelegates[preferenceName]) {
273
- return { value: this.getDelegatedValueFromDelegateTo(preferenceName), scope: this._scope }; // FIXME: 这里好像scope有点问题,暂时不影响
274
- } else {
275
- return res;
276
- }
277
- }
278
-
279
- protected doResolve<T>(preferenceName: string, resourceUri?: string, language?: string): PreferenceResolveResult<T> {
280
- const preferences = this.getPreferences(resourceUri, language);
281
- if (!preferences) {
282
- return {};
283
- }
284
- const value = preferences[preferenceName];
285
- if (value !== undefined) {
286
- return {
287
- value,
288
- configUri: this.getConfigUri(resourceUri),
289
- };
290
- }
291
- return {};
292
- }
293
-
294
- /**
295
- * 获取制定资源或语言的所有配置,当返回值为undefined时代表无应资源或语言配置
296
- *
297
- * @abstract
298
- * @param {string} [resourceUri] 资源路径
299
- * @param {string} [language] 语言标识符
300
- * @returns {({ [p: string]: any } | undefined)}
301
- * @memberof PreferenceProvider
302
- */
303
- public abstract getPreferences(resourceUri?: string, language?: string): { [p: string]: any } | undefined;
304
-
305
- /**
306
- * 获取制定资源或语言的所有语言配置,当返回值为undefined时代表无对应资源或语言配置
307
- *
308
- * @abstract
309
- * @param {string} [resourceUri] 资源路径
310
- * @param {string} [language] 语言标识符
311
- * @returns {({ [language: string]: {[p: string]: any} } | undefined)}
312
- * @memberof PreferenceProvider
313
- */
314
- public abstract getLanguagePreferences(
315
- resourceUri?: string,
316
- language?: string,
317
- ): { [language: string]: { [p: string]: any } } | undefined;
318
-
319
- public async setPreference(
320
- preferenceName: string,
321
- value: any,
322
- resourceUri?: string,
323
- language?: string,
324
- ): Promise<boolean> {
325
- // 对于我们 workbench.colorTheme -> general.theme 这种托管,
326
- // 修改 workbench.colorTheme 为 'themeA' 的时候,get('general.theme'),会首先查看 workbench.colorTheme,
327
- // 如果有值,则采用 workbench.colorTheme, 而不管配置文件中是否 general.theme 有值,
328
- // 换言之,在 workbench.colorTheme 有值的情况下,general.theme 无论怎么修改都是无效的,
329
- // 因此如果 setPreference('general.theme', 'themeA' ) 的话,必须先把 workbench.colorTheme 置空才能生效。
330
- //
331
- // 这种情况下,插件进程的 vscode.workspace.onDidConfigurationChange 会触发两次事件变化
332
- // 一个为 general.theme, 一个为workbench.colorTheme
333
- if (PreferenceProvider.PreferenceDelegatesReverse[preferenceName]) {
334
- // 将delegate置空
335
- const delegate = PreferenceProvider.PreferenceDelegatesReverse[preferenceName];
336
- await this.setPreference(delegate.delegated, undefined);
337
- }
338
- if (typeof this._scope !== 'undefined') {
339
- const externalProvider = getExternalPreferenceProvider(preferenceName);
340
- if (externalProvider) {
341
- try {
342
- const oldValue = externalProvider.get(this._scope);
343
- await externalProvider.set(value, this._scope);
344
- // 如果外部provider没有监听器,帮助他发送改变事件
345
- if (!externalProvider.onDidChange) {
346
- this.emitPreferencesChangedEvent(
347
- [
348
- {
349
- preferenceName,
350
- scope: this._scope,
351
- oldValue,
352
- newValue: externalProvider.get(this._scope),
353
- },
354
- ],
355
- true,
356
- );
357
- }
358
- return true;
359
- } catch (e) {
360
- return false;
361
- }
362
- }
363
- }
364
- return await this.doSetPreference(preferenceName, value, resourceUri, language);
365
- }
366
-
367
- protected abstract doSetPreference(
368
- preferenceName: string,
369
- value: any,
370
- resourceUri?: string,
371
- language?: string,
372
- ): Promise<boolean>;
373
-
374
- /**
375
- * 返回promise,当 preference provider 已经可以提供配置时返回resolved
376
- */
377
- get ready() {
378
- return this._ready.promise;
379
- }
380
-
381
- /**
382
- * 默认返回undefined
383
- */
384
- public getDomain(): string[] | undefined {
385
- return undefined;
386
- }
387
-
388
- /**
389
- * 默认返回undefined
390
- */
391
- public getConfigUri(resourceUri?: string): URI | undefined {
392
- return undefined;
393
- }
394
-
395
- public static merge(source: JSONValue | undefined, target: JSONValue): JSONValue {
396
- if (source === undefined || !JSONUtils.isObject(source)) {
397
- return JSONUtils.deepCopy(target);
398
- }
399
- if (JSONUtils.isPrimitive(target)) {
400
- return {};
401
- }
402
- for (const key of Object.keys(target)) {
403
- const value = (target as any)[key];
404
- if (key in source) {
405
- if (JSONUtils.isObject(source[key]) && JSONUtils.isObject(value)) {
406
- this.merge(source[key], value);
407
- continue;
408
- }
409
- }
410
- source[key] = JSONUtils.deepCopy(value);
411
- }
412
- return source;
413
- }
414
- }
@@ -1,292 +0,0 @@
1
- import { Disposable, Event, isObject, isUndefined, PreferenceScope } from '@opensumi/ide-core-common';
2
-
3
- import { PreferenceSchema } from './preference-contribution';
4
- import { PreferenceService } from './types';
5
-
6
- export interface PreferenceChangeEvent<T> {
7
- readonly preferenceName: keyof T;
8
- readonly newValue?: T[keyof T];
9
- readonly oldValue?: T[keyof T];
10
- affects(resourceUri?: string, overrideIdentifier?: string): boolean;
11
- }
12
-
13
- export interface PreferenceProxyOptions {
14
- /**
15
- * 所有配置的默认前缀
16
- */
17
- prefix?: string;
18
- /**
19
- * 获取或设置配置的默认资源路径
20
- */
21
- resourceUri?: string;
22
- /**
23
- * 对齐VSCode实现,overrideIdentifier主要用于实现针对不同编辑器设置不同配置的能力
24
- * 与原有的language设定一致
25
- *
26
- * 如 [markdown].editor.autoIndent、[json].editor.autoIndent 及 editor.autoIndent 等
27
- */
28
- overrideIdentifier?: string;
29
- /**
30
- * 用来指代获取一个配置时是否为“平面含义”上的获取
31
- *
32
- * 如:
33
- * a.b.c 在flat模式下为单个配置的值
34
- * deep模式下则可以为 a 配置下的 b 配置下的 c 的值
35
- * both指代同时在两种配置模式下检索值
36
- */
37
- style?: 'flat' | 'deep' | 'both';
38
- }
39
-
40
- export interface PreferenceEventEmitter<T> {
41
- readonly onPreferenceChanged: Event<PreferenceChangeEvent<T>>;
42
- readonly ready: Promise<void>;
43
- }
44
-
45
- export interface PreferenceRetrieval<T> {
46
- get<K extends keyof T>(preferenceName: K, defaultValue?: T[K], resourceUri?: string): T[K];
47
- }
48
-
49
- export type PreferenceProxy<T> = Readonly<T> & Disposable & PreferenceEventEmitter<T> & PreferenceRetrieval<T>;
50
-
51
- export function createPreferenceProxy<T>(
52
- preferences: PreferenceService,
53
- schema: PreferenceSchema,
54
- options?: PreferenceProxyOptions,
55
- ): PreferenceProxy<T> {
56
- const opts = options || {};
57
- const prefix = opts.prefix || '';
58
- const style = opts.style || 'flat';
59
- const isDeep = style === 'deep' || style === 'both';
60
- const isFlat = style === 'both' || style === 'flat';
61
- const onPreferenceChanged = (
62
- listener: (e: PreferenceChangeEvent<T>) => any,
63
- thisArgs?: any,
64
- disposables?: Disposable[],
65
- ) => {
66
- const disposer = new Disposable();
67
- disposer.addDispose(
68
- preferences.onPreferencesChanged(
69
- (changes) => {
70
- for (const key of Object.keys(changes)) {
71
- const e = changes[key];
72
- const preferenceName: any = e.preferenceName;
73
- if (preferenceName.startsWith(prefix)) {
74
- if (schema.properties[preferenceName]) {
75
- if (opts.resourceUri) {
76
- if (e.affects(opts.resourceUri)) {
77
- if (
78
- opts.overrideIdentifier &&
79
- !preferences.hasLanguageSpecific(preferenceName, opts.overrideIdentifier, opts.resourceUri)
80
- ) {
81
- continue;
82
- }
83
- listener(e as any);
84
- }
85
- } else {
86
- listener(e as any);
87
- }
88
- }
89
- }
90
- }
91
- },
92
- thisArgs,
93
- disposables,
94
- ),
95
- );
96
- // 添加语言相关 changes 变更
97
- if (opts.overrideIdentifier) {
98
- disposer.addDispose(
99
- preferences.onLanguagePreferencesChanged(
100
- (event) => {
101
- if (event.overrideIdentifier === opts.overrideIdentifier) {
102
- for (const key of Object.keys(event.changes)) {
103
- const e = event.changes[key];
104
- const preferenceName: any = e.preferenceName;
105
- if (preferenceName.startsWith(prefix)) {
106
- if (schema.properties[preferenceName]) {
107
- if (opts.resourceUri) {
108
- if (e.affects(opts.resourceUri)) {
109
- listener(e as any);
110
- }
111
- } else {
112
- listener(e as any);
113
- }
114
- }
115
- }
116
- }
117
- }
118
- },
119
- thisArgs,
120
- disposables,
121
- ),
122
- );
123
- }
124
- return disposer;
125
- };
126
-
127
- const unsupportedOperation = (_: any, __: string) => {
128
- throw new Error('Unsupported operation');
129
- };
130
-
131
- const getValue: PreferenceRetrieval<any>['get'] = (
132
- preferenceName: any,
133
- defaultValue,
134
- resourceUri,
135
- overrideIdentifier?: string,
136
- ) =>
137
- preferences.get(
138
- preferenceName,
139
- defaultValue,
140
- resourceUri || opts.resourceUri,
141
- overrideIdentifier || opts.overrideIdentifier,
142
- );
143
-
144
- const ownKeys: () => string[] = () => {
145
- const properties: string[] = [];
146
- for (const p of Object.keys(schema.properties)) {
147
- if (p.startsWith(prefix)) {
148
- const idx = p.indexOf('.', prefix.length);
149
- if (idx !== -1 && isDeep) {
150
- const pre = p.substr(prefix.length, idx - prefix.length);
151
- if (properties.indexOf(pre) === -1) {
152
- properties.push(pre);
153
- }
154
- }
155
- const prop = p.substr(prefix.length);
156
- if (isFlat || prop.indexOf('.') === -1) {
157
- properties.push(prop);
158
- }
159
- }
160
- }
161
- return properties;
162
- };
163
-
164
- const set: (target: any, prop: string, value: any, receiver: any) => boolean = (
165
- _,
166
- property: string | symbol | number,
167
- value: any,
168
- ) => {
169
- if (typeof property !== 'string') {
170
- throw new Error(`unexpected property: ${String(property)}`);
171
- }
172
- if (style === 'deep' && property.indexOf('.') !== -1) {
173
- return false;
174
- }
175
- const fullProperty = prefix ? prefix + property : property;
176
- if (schema.properties[fullProperty]) {
177
- preferences.set(fullProperty, value, PreferenceScope.Default);
178
- return true;
179
- }
180
- const newPrefix = fullProperty + '.';
181
- for (const p of Object.keys(schema.properties)) {
182
- if (p.startsWith(newPrefix)) {
183
- const subProxy: { [k: string]: any } = createPreferenceProxy(preferences, schema, {
184
- prefix: newPrefix,
185
- resourceUri: opts.resourceUri,
186
- overrideIdentifier: opts.overrideIdentifier,
187
- style,
188
- });
189
- for (const k of Object.keys(value)) {
190
- subProxy[k] = value[k];
191
- }
192
- }
193
- }
194
- return false;
195
- };
196
-
197
- const get: (target: any, prop: string) => any = (_, property: string | symbol | number) => {
198
- if (typeof property !== 'string') {
199
- throw new Error(`unexpected property: ${String(property)}`);
200
- }
201
- const fullProperty = prefix ? prefix + property : property;
202
- if (isFlat || property.indexOf('.') === -1) {
203
- if (schema.properties[fullProperty]) {
204
- return preferences.get(fullProperty, undefined, opts.resourceUri, opts.overrideIdentifier);
205
- }
206
- }
207
- if (property === 'onPreferenceChanged') {
208
- return onPreferenceChanged;
209
- }
210
- if (property === 'dispose') {
211
- return () => {
212
- /* do nothing */
213
- };
214
- }
215
- if (property === 'ready') {
216
- return preferences.ready;
217
- }
218
- if (property === 'get') {
219
- return getValue;
220
- }
221
- if (property === 'toJSON') {
222
- return toJSON();
223
- }
224
- if (isDeep) {
225
- const newPrefix = fullProperty + '.';
226
- for (const p of Object.keys(schema.properties)) {
227
- // 这里实际上要求 Configuration 在注册的时候声明全量配置名
228
- // 如,获取 a.b, 则要求 Configuration 声明时必须为 a.b.c
229
- if (p.startsWith(newPrefix)) {
230
- return createPreferenceProxy(preferences, schema, {
231
- prefix: newPrefix,
232
- resourceUri: opts.resourceUri,
233
- overrideIdentifier: opts.overrideIdentifier,
234
- style,
235
- });
236
- }
237
- }
238
-
239
- // 升级 Monaco 0.20.0 版本后,Monaco 中的ConfigurationService会尝试通过配置全称获取配置值
240
- // 如,直接获取 a.b.c.d 配置值
241
- // 下面的逻辑兼容了通过 a.b 获取 a.b.c, a.b.c.d 的方式
242
- let value;
243
- let parentSegment = fullProperty;
244
- const segments: string[] = [];
245
- for (let index; parentSegment && isUndefined(value); ) {
246
- index = parentSegment.lastIndexOf('.');
247
- // 查找到对应值后退出查询
248
- segments.push(parentSegment.substring(index + 1));
249
- parentSegment = parentSegment.substring(0, index);
250
- if (parentSegment in schema.properties) {
251
- value = get(_, parentSegment);
252
- }
253
- }
254
-
255
- let segment;
256
- while (isObject(value) && (segment = segments.pop())) {
257
- // 进一步遍历获取配置值
258
- value = value[segment];
259
- }
260
- return segments.length ? undefined : value;
261
- }
262
- return undefined;
263
- };
264
-
265
- const toJSON = () => {
266
- const result: any = {};
267
- for (const k of ownKeys()) {
268
- result[k] = get(undefined, k);
269
- }
270
- return result;
271
- };
272
-
273
- return new Proxy(
274
- {},
275
- {
276
- get,
277
- ownKeys,
278
- getOwnPropertyDescriptor: (_, property: string) => {
279
- if (ownKeys().indexOf(property) !== -1) {
280
- return {
281
- enumerable: true,
282
- configurable: true,
283
- };
284
- }
285
- return {};
286
- },
287
- set,
288
- deleteProperty: unsupportedOperation,
289
- defineProperty: unsupportedOperation,
290
- },
291
- );
292
- }
@@ -1,3 +0,0 @@
1
- import { PreferenceScope } from '@opensumi/ide-core-common/lib/preferences/preference-scope';
2
-
3
- export { PreferenceScope };