@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,571 +0,0 @@
1
- import { Injectable, Autowired } from '@opensumi/di';
2
- import {
3
- Deferred,
4
- Emitter,
5
- DisposableCollection,
6
- Disposable,
7
- URI,
8
- isUndefined,
9
- isEmptyObject,
10
- objects,
11
- LRUMap,
12
- } from '@opensumi/ide-core-common';
13
-
14
- import { PreferenceConfigurations } from './preference-configurations';
15
- import { PreferenceSchemaProvider } from './preference-contribution';
16
- import { PreferenceProvider, PreferenceProviderDataChange, PreferenceProviderDataChanges } from './preference-provider';
17
- import { PreferenceScope } from './preference-scope';
18
- import {
19
- PreferenceChange,
20
- PreferenceChanges,
21
- PreferenceProviderProvider,
22
- PreferenceResolveResult,
23
- PreferenceService,
24
- } from './types';
25
-
26
- const { deepClone } = objects;
27
-
28
- export class PreferenceChangeImpl implements PreferenceChange {
29
- constructor(private change: PreferenceProviderDataChange) {}
30
-
31
- get preferenceName() {
32
- return this.change.preferenceName;
33
- }
34
- get newValue() {
35
- return this.change.newValue;
36
- }
37
- get oldValue() {
38
- return this.change.oldValue;
39
- }
40
- get scope(): PreferenceScope {
41
- return this.change.scope;
42
- }
43
-
44
- public affects(resourceUri?: string): boolean {
45
- const resourcePath = resourceUri && new URI(resourceUri).path;
46
- const domain = this.change.domain;
47
- return !resourcePath || !domain || domain.some((uri) => new URI(uri).path.relativity(resourcePath) >= 0);
48
- }
49
- }
50
-
51
- @Injectable()
52
- export class PreferenceServiceImpl implements PreferenceService {
53
- protected readonly onPreferenceChangedEmitter = new Emitter<PreferenceChange>();
54
- public readonly onPreferenceChanged = this.onPreferenceChangedEmitter.event;
55
-
56
- protected readonly onPreferencesChangedEmitter = new Emitter<PreferenceChanges>();
57
- public readonly onPreferencesChanged = this.onPreferencesChangedEmitter.event;
58
-
59
- private readonly onLanguagePreferencesChangedEmitter = new Emitter<{
60
- overrideIdentifier: string;
61
- changes: PreferenceChanges;
62
- }>();
63
- public readonly onLanguagePreferencesChanged = this.onLanguagePreferencesChangedEmitter.event;
64
-
65
- protected readonly toDispose = new DisposableCollection(
66
- this.onPreferenceChangedEmitter,
67
- this.onPreferencesChangedEmitter,
68
- );
69
-
70
- @Autowired(PreferenceSchemaProvider)
71
- protected readonly schema: PreferenceSchemaProvider;
72
-
73
- @Autowired(PreferenceProvider, { tag: PreferenceScope.Default })
74
- protected readonly defaultPreferenceProvider: PreferenceProvider;
75
-
76
- @Autowired(PreferenceProviderProvider)
77
- protected readonly providerProvider: PreferenceProviderProvider;
78
-
79
- @Autowired(PreferenceConfigurations)
80
- protected readonly configurations: PreferenceConfigurations;
81
-
82
- protected readonly preferenceProviders = new Map<PreferenceScope, PreferenceProvider>();
83
-
84
- private specificEmitters = new Map<string, Emitter<PreferenceChange>>();
85
-
86
- /**
87
- * 使用 getPreferences()方法获取
88
- */
89
- protected preferences: { [key: string]: any } = {};
90
-
91
- /**
92
- * 缓存,减少每次都 doResolve 的开销
93
- */
94
- private cachedPreference = new LRUMap<string, LRUMap<string, PreferenceResolveResult<any>>>(1000, 500);
95
-
96
- constructor() {
97
- this.init();
98
- }
99
-
100
- protected async init(): Promise<void> {
101
- // this.toDispose.push(Disposable.create(() => this._ready.reject(new Error('preference service is disposed'))));
102
- this.initializeProviders();
103
- }
104
-
105
- public dispose(): void {
106
- this.toDispose.dispose();
107
- }
108
-
109
- public onSpecificPreferenceChange(preferenceName, listener) {
110
- if (!this.specificEmitters.has(preferenceName)) {
111
- this.specificEmitters.set(preferenceName, new Emitter());
112
- }
113
- return this.specificEmitters.get(preferenceName)!.event(listener);
114
- }
115
-
116
- protected readonly _ready = new Deferred<void>();
117
- get ready(): Promise<void> {
118
- return this._ready.promise;
119
- }
120
-
121
- /**
122
- * 初始化并创建默认的PreferenceProvider
123
- */
124
- protected async initializeProviders(): Promise<void> {
125
- const scopes = PreferenceScope.getScopes();
126
- const promises: Array<Promise<void>> = [];
127
- for (const scope of scopes) {
128
- const provider = this.providerProvider(scope);
129
- this.preferenceProviders.set(scope, provider);
130
- // 获得每个Scope下的PreferenceProvider后,监听配置变化进行变更合并
131
- this.toDispose.push(
132
- provider.onDidPreferencesChanged((changes) => {
133
- // 对应作用域的配置修改至通知对应Provider
134
- // 当 PreferenceService 中依然能收到一次更新通知
135
- const preferenceNames = Object.keys(changes.default);
136
- const defaultChange = {};
137
- for (const name of preferenceNames) {
138
- if (changes.default[name].scope === scope) {
139
- defaultChange[name] = changes.default[name];
140
- }
141
- }
142
- if (isEmptyObject(defaultChange)) {
143
- return;
144
- }
145
- this.reconcilePreferences({
146
- default: defaultChange,
147
- languageSpecific: changes.languageSpecific,
148
- });
149
- }),
150
- );
151
- promises.push(provider.ready);
152
- }
153
- return Promise.all(promises)
154
- .then(() => {
155
- this._ready.resolve();
156
- })
157
- .catch((e) => {
158
- this._ready.reject(e);
159
- });
160
- }
161
-
162
- /**
163
- * 合并preference 变化
164
- * @param changes
165
- */
166
- protected reconcilePreferences(changes: PreferenceProviderDataChanges): void {
167
- const changesToEmit: PreferenceChanges = {};
168
- const languageSpecificChangesToEmit: {
169
- [languageId: string]: PreferenceChanges;
170
- } = {};
171
- const acceptChange = (change: PreferenceProviderDataChange, language) => {
172
- this.cachedPreference.delete(change.preferenceName);
173
- if (language) {
174
- if (!languageSpecificChangesToEmit[language]) {
175
- languageSpecificChangesToEmit[language] = {};
176
- }
177
- languageSpecificChangesToEmit[language][change.preferenceName] = new PreferenceChangeImpl(change);
178
- } else {
179
- changesToEmit[change.preferenceName] = new PreferenceChangeImpl(change);
180
- }
181
- };
182
-
183
- // 尝试获取Preference变更带来的配置修改
184
- this.tryAcceptChanges(changes.default, acceptChange);
185
- Object.keys(changes.languageSpecific).forEach((language) => {
186
- // 尝试获取Preference变更带来的语言配置修改
187
- this.tryAcceptChanges(changes.languageSpecific[language], acceptChange, language);
188
- });
189
-
190
- // 触发配置变更事件
191
- const changedPreferenceNames = Object.keys(changesToEmit);
192
- if (changedPreferenceNames.length > 0) {
193
- this.onPreferencesChangedEmitter.fire(changesToEmit);
194
- }
195
- changedPreferenceNames.forEach((preferenceName) => {
196
- this.onPreferenceChangedEmitter.fire(changesToEmit[preferenceName]);
197
- if (this.specificEmitters.has(preferenceName)) {
198
- this.specificEmitters.get(preferenceName)!.fire(changesToEmit[preferenceName]);
199
- }
200
- });
201
- Object.keys(languageSpecificChangesToEmit).forEach((language) => {
202
- this.onLanguagePreferencesChangedEmitter.fire({
203
- overrideIdentifier: language,
204
- changes: languageSpecificChangesToEmit[language],
205
- });
206
- });
207
- }
208
-
209
- /**
210
- * 尝试处理配置修改带来的配置变化
211
- *
212
- * @private
213
- * @param {{[preferenceName: string]: PreferenceProviderDataChange}} changes
214
- * @param {(change: PreferenceProviderDataChange, language?: string) => void} acceptChange
215
- * @param {string} [language]
216
- * @memberof PreferenceServiceImpl
217
- */
218
- private tryAcceptChanges(
219
- changes: { [preferenceName: string]: PreferenceProviderDataChange },
220
- acceptChange: (change: PreferenceProviderDataChange, language?: string) => void,
221
- language?: string,
222
- ) {
223
- for (const preferenceName of Object.keys(changes)) {
224
- let change = changes[preferenceName];
225
-
226
- if (this.schema.isValidInScope(preferenceName, PreferenceScope.Folder)) {
227
- acceptChange(change, language);
228
- continue;
229
- }
230
- for (const scope of PreferenceScope.getReversedScopes()) {
231
- if (this.schema.isValidInScope(preferenceName, scope)) {
232
- const provider = this.getProvider(scope);
233
- if (provider) {
234
- const value = provider.get(preferenceName, change.domain ? change.domain[0] : undefined, language);
235
- if (scope > change.scope && value !== undefined) {
236
- // 配置项已在更高的作用域下被定义,无法处理当前作用域的变化
237
- break;
238
- } else if (scope === change.scope && change.newValue !== undefined) {
239
- // 配置项修改为了非 `undefined` 的值
240
- acceptChange(change, language);
241
- break;
242
- } else if (scope < change.scope && change.newValue === undefined && value !== undefined) {
243
- // 对应配置项已经改为 `undefined`, 使用低一级作用域下的配置值
244
- change = {
245
- ...change,
246
- newValue: value,
247
- scope,
248
- };
249
- acceptChange(change, language);
250
- break;
251
- } else if (scope === PreferenceScope.Default && change.newValue === undefined && value === undefined) {
252
- // 到达这里, 说明已经没有针对语言的配置,因此需要将其变为非语言指定的值
253
- change = {
254
- ...change,
255
- newValue: this.get(preferenceName, undefined, change.domain ? change.domain[0] : undefined),
256
- scope,
257
- };
258
- acceptChange(change, language);
259
- break;
260
- }
261
- }
262
- }
263
- }
264
- }
265
- }
266
-
267
- /**
268
- * 获取对应scope下的preferenceProvider
269
- * @protected
270
- * @param {PreferenceScope} scope
271
- * @returns {(PreferenceProvider | undefined)}
272
- * @memberof PreferenceServiceImpl
273
- */
274
- public getProvider(scope: PreferenceScope): PreferenceProvider | undefined {
275
- return this.preferenceProviders.get(scope);
276
- }
277
-
278
- /**
279
- * 获取指定资源的Preferences
280
- * @param {string} [resourceUri]
281
- * @returns {{ [key: string]: any }}
282
- * @memberof PreferenceServiceImpl
283
- */
284
- public getPreferences(resourceUri?: string): { [key: string]: any } {
285
- const preferences: { [key: string]: any } = {};
286
- for (const preferenceName of this.schema.getPreferenceNames()) {
287
- preferences[preferenceName] = this.get(preferenceName, undefined, resourceUri);
288
- }
289
- return preferences;
290
- }
291
-
292
- /**
293
- * 插叙是否有对应配置
294
- * @param {string} preferenceName
295
- * @param {string} [resourceUri]
296
- * @returns {boolean}
297
- * @memberof PreferenceServiceImpl
298
- */
299
- public has(preferenceName: string, resourceUri?: string, language?: string): boolean {
300
- return this.get(preferenceName, undefined, resourceUri, language) !== undefined;
301
- }
302
-
303
- public get<T>(preferenceName: string, defaultValue?: T, resourceUri?: string, language?: string): T | undefined {
304
- return this.resolve<T>(preferenceName, defaultValue, resourceUri, language).value;
305
- }
306
-
307
- public lookUp<T>(key: string): PreferenceResolveResult<T> {
308
- let value;
309
- let reset;
310
- if (!key) {
311
- return {
312
- value,
313
- };
314
- }
315
- const parts = key.split('.');
316
- if (!parts || parts.length === 0) {
317
- return {
318
- value,
319
- };
320
- }
321
- for (let i = parts.length - 1; i > 0; i--) {
322
- value = this.doResolve(parts.slice(0, i).join('.')).value;
323
- if (value) {
324
- reset = parts.slice(i);
325
- break;
326
- }
327
- }
328
- while (reset && reset.length > 0) {
329
- value = value[reset.shift()];
330
- }
331
- return { value };
332
- }
333
-
334
- public resolve<T>(
335
- preferenceName: string,
336
- defaultValue?: T,
337
- resourceUri?: string,
338
- language?: string,
339
- untilScope?: PreferenceScope,
340
- ): PreferenceResolveResult<T> {
341
- const result = this.doResolve(preferenceName, defaultValue, resourceUri, untilScope, language);
342
- if (typeof result.value === 'undefined') {
343
- return this.lookUp(preferenceName);
344
- }
345
- return result;
346
- }
347
-
348
- public async set(
349
- preferenceName: string,
350
- value: any,
351
- scope: PreferenceScope | undefined,
352
- resourceUri?: string,
353
- ): Promise<void> {
354
- await this.ready;
355
- const resolvedScope = !isUndefined(scope)
356
- ? scope
357
- : !resourceUri
358
- ? PreferenceScope.Workspace
359
- : PreferenceScope.Folder;
360
- // TODO: 错误日志错误码机制
361
- if (resolvedScope === PreferenceScope.User && this.configurations.isSectionName(preferenceName.split('.', 1)[0])) {
362
- throw new Error(`Unable to write to User Settings because ${preferenceName} does not support for global scope.`);
363
- }
364
- if (resolvedScope === PreferenceScope.Folder && !resourceUri) {
365
- throw new Error('Unable to write to Folder Settings because no resource is provided.');
366
- }
367
- const provider = this.getProvider(resolvedScope);
368
- if (provider && (await provider.setPreference(preferenceName, value, resourceUri))) {
369
- return;
370
- }
371
- throw new Error(`Unable to write to ${PreferenceScope.getScopeNames(resolvedScope)[0]} Settings.`);
372
- }
373
-
374
- public async update(preferenceName: string, value: any, defaultScope = PreferenceScope.User) {
375
- const resolved = this.resolve(preferenceName);
376
- // 默认会跳过 PreferenceScope.Default 作用域值的设置
377
- if (resolved?.scope) {
378
- this.set(preferenceName, value, resolved.scope);
379
- } else {
380
- this.set(preferenceName, value, defaultScope);
381
- }
382
- }
383
-
384
- public hasLanguageSpecific(preferenceName: string, language: string, resourceUri?: string): boolean {
385
- return !!this.doResolve(preferenceName, undefined, resourceUri, undefined, language).languageSpecific;
386
- }
387
-
388
- public getBoolean(preferenceName: string): boolean | undefined;
389
- public getBoolean(preferenceName: string, defaultValue: boolean): boolean;
390
- // eslint-disable-next-line @typescript-eslint/unified-signatures
391
- public getBoolean(preferenceName: string, defaultValue: boolean, resourceUri: string): boolean;
392
- public getBoolean(preferenceName: string, defaultValue?: boolean, resourceUri?: string): boolean | undefined {
393
- const value = resourceUri
394
- ? this.get(preferenceName, defaultValue, resourceUri)
395
- : this.get(preferenceName, defaultValue);
396
- return value !== null && value !== undefined ? !!value : defaultValue;
397
- }
398
-
399
- public getString(preferenceName: string): string | undefined;
400
- public getString(preferenceName: string, defaultValue: string): string;
401
- // eslint-disable-next-line @typescript-eslint/unified-signatures
402
- public getString(preferenceName: string, defaultValue: string, resourceUri: string): string;
403
- public getString(preferenceName: string, defaultValue?: string, resourceUri?: string): string | undefined {
404
- const value = resourceUri
405
- ? this.get(preferenceName, defaultValue, resourceUri)
406
- : this.get(preferenceName, defaultValue);
407
- if (value === null || value === undefined) {
408
- return defaultValue;
409
- }
410
- return value.toString();
411
- }
412
-
413
- public getNumber(preferenceName: string): number | undefined;
414
- public getNumber(preferenceName: string, defaultValue: number): number;
415
- // eslint-disable-next-line @typescript-eslint/unified-signatures
416
- public getNumber(preferenceName: string, defaultValue: number, resourceUri: string): number;
417
- public getNumber(preferenceName: string, defaultValue?: number, resourceUri?: string): number | undefined {
418
- const value = resourceUri
419
- ? this.get(preferenceName, defaultValue, resourceUri)
420
- : this.get(preferenceName, defaultValue);
421
- if (value === null || value === undefined) {
422
- return defaultValue;
423
- }
424
- if (typeof value === 'number') {
425
- return value;
426
- }
427
- return Number(value);
428
- }
429
-
430
- public inspect<T>(
431
- preferenceName: string,
432
- resourceUri?: string,
433
- language?: string,
434
- ):
435
- | {
436
- preferenceName: string;
437
- defaultValue: T | undefined;
438
- globalValue: T | undefined; // User Preference
439
- workspaceValue: T | undefined; // Workspace Preference
440
- workspaceFolderValue: T | undefined; // Folder Preference
441
- }
442
- | undefined {
443
- const defaultValue = this.inspectInScope<T>(preferenceName, PreferenceScope.Default, resourceUri, language);
444
- const globalValue = this.inspectInScope<T>(preferenceName, PreferenceScope.User, resourceUri, language);
445
- const workspaceValue = this.inspectInScope<T>(preferenceName, PreferenceScope.Workspace, resourceUri, language);
446
- const workspaceFolderValue = this.inspectInScope<T>(preferenceName, PreferenceScope.Folder, resourceUri, language);
447
-
448
- return { preferenceName, defaultValue, globalValue, workspaceValue, workspaceFolderValue };
449
- }
450
- protected inspectInScope<T>(
451
- preferenceName: string,
452
- scope: PreferenceScope,
453
- resourceUri?: string,
454
- language?: string,
455
- ): T | undefined {
456
- const value = this.doInspectInScope<T>(preferenceName, scope, resourceUri, language);
457
- return value;
458
- }
459
-
460
- protected doHas(preferenceName: string, resourceUri?: string): boolean {
461
- return this.doGet(preferenceName, undefined, resourceUri) !== undefined;
462
- }
463
-
464
- protected doInspectInScope<T>(
465
- preferenceName: string,
466
- scope: PreferenceScope,
467
- resourceUri?: string,
468
- language?: string,
469
- ): T | undefined {
470
- const provider = this.getProvider(scope);
471
- return provider && provider.get<T>(preferenceName, resourceUri, language);
472
- }
473
-
474
- protected doGet<T>(preferenceName: string, defaultValue?: T, resourceUri?: string): T | undefined {
475
- return this.doResolve(preferenceName, defaultValue, resourceUri).value;
476
- }
477
-
478
- /**
479
- * 获取配置值
480
- *
481
- * @protected
482
- * @template T
483
- * @param {string} preferenceName 配置项名称
484
- * @param {T} [defaultValue] 默认值
485
- * @param {string} [resourceUri] 资源路径
486
- * @param {PreferenceScope} [untilScope] 最高作用域
487
- * @param {string} [language] 语言标识符
488
- * @returns {PreferenceResolveResult<T>}
489
- * @memberof PreferenceServiceImpl
490
- */
491
- protected doResolve<T>(
492
- preferenceName: string,
493
- defaultValue?: T,
494
- resourceUri?: string,
495
- untilScope?: PreferenceScope,
496
- language?: string,
497
- ): PreferenceResolveResult<T> {
498
- if (!this.cachedPreference.has(preferenceName)) {
499
- this.cachedPreference.set(preferenceName, new LRUMap(500, 200));
500
- }
501
- const cache = this.cachedPreference.get(preferenceName)!;
502
- const cacheKey = cacheHash(language, untilScope, resourceUri);
503
- if (!cache.has(cacheKey)) {
504
- cache.set(cacheKey, this.doResolveWithOutCache<T>(preferenceName, resourceUri, untilScope, language));
505
- }
506
- const result = cache.get(cacheKey)!;
507
- if (result.value === undefined) {
508
- result.value = defaultValue;
509
- }
510
- return result;
511
- }
512
-
513
- protected doResolveWithOutCache<T>(
514
- preferenceName: string,
515
- resourceUri?: string,
516
- untilScope?: PreferenceScope,
517
- language?: string,
518
- ): PreferenceResolveResult<T> {
519
- const result: PreferenceResolveResult<T> = { scope: PreferenceScope.Default };
520
- const scopes = !isUndefined(untilScope)
521
- ? PreferenceScope.getScopes().filter((s) => s <= untilScope)
522
- : PreferenceScope.getScopes();
523
- for (const scope of scopes) {
524
- if (this.schema.isValidInScope(preferenceName, scope)) {
525
- const provider = this.getProvider(scope);
526
- if (provider) {
527
- const { configUri, value } = provider.resolve<T>(preferenceName, resourceUri);
528
- // 这里配置值为空对象时,我们也视为非有效值
529
- if (!isUndefined(value) && !isEmptyObject(value)) {
530
- result.configUri = configUri;
531
- // 按作用域逐级合并配置值
532
- result.value = PreferenceProvider.merge(result.value as any, value as any) as any;
533
- result.scope = scope;
534
- }
535
- }
536
- }
537
- }
538
-
539
- // 添加语言的设置
540
- if (language) {
541
- for (const scope of scopes) {
542
- if (this.schema.isValidInScope(preferenceName, scope)) {
543
- const provider = this.getProvider(scope);
544
- if (provider) {
545
- const { configUri, value, languageSpecific } = provider.resolve<T>(preferenceName, resourceUri, language);
546
- if (value !== undefined) {
547
- result.configUri = configUri;
548
- result.value = PreferenceProvider.merge(result.value as any, value as any) as any;
549
- result.scope = scope;
550
- result.languageSpecific = result.languageSpecific || languageSpecific;
551
- }
552
- }
553
- }
554
- }
555
- }
556
-
557
- return {
558
- configUri: result.configUri,
559
- value: !isUndefined(result.value) ? deepClone(result.value) : undefined,
560
- scope: result.scope || PreferenceScope.Default,
561
- languageSpecific: result.languageSpecific,
562
- };
563
- }
564
- }
565
-
566
- function cacheHash(language?: string, untilScope?: PreferenceScope, resourceUri?: string) {
567
- return (
568
- `${language ? `${language}:::` : ''}${!isUndefined(untilScope) ? `${untilScope}:::` : ''}${resourceUri || ''}` ||
569
- 'default'
570
- );
571
- }
@@ -1,53 +0,0 @@
1
- import { IDisposable } from '@opensumi/ide-core-common';
2
-
3
- import { PreferenceScope } from './preference-scope';
4
-
5
- export interface IPreferenceSettingsService {
6
- setPreference(key: string, value: any, scope: PreferenceScope);
7
-
8
- getSettingGroups(scope: PreferenceScope, search?: string): ISettingGroup[];
9
-
10
- registerSettingGroup(group: ISettingGroup): IDisposable;
11
-
12
- registerSettingSection(groupId: string, section: ISettingSection): IDisposable;
13
-
14
- getSections(groupId: string, scope: PreferenceScope, search?: string): ISettingSection[];
15
-
16
- getPreference(preferenceName: string, scope: PreferenceScope): { value: any; effectingScope: PreferenceScope };
17
-
18
- setEnumLabels(preferenceName: string, labels: { [key: string]: string }): void;
19
-
20
- setCurrentGroup(groupId: string): void;
21
- }
22
-
23
- export const IPreferenceSettingsService = Symbol('IPreferenceSettingsService');
24
-
25
- export interface ISettingGroup {
26
- // 唯一
27
- id: string;
28
- title: string;
29
- iconClass: string;
30
- }
31
-
32
- export interface IPreferenceViewDesc {
33
- id: string;
34
- /**
35
- * 为空会根据 id 来生成展示的名字
36
- * 如:`enablePreview` -> `Enable Preview`
37
- */
38
- localized?: string;
39
- /**
40
- * 在指定 scope 下不展示
41
- */
42
- hiddenInScope?: PreferenceScope[];
43
- }
44
-
45
- export interface ISettingSection {
46
- title?: string;
47
-
48
- preferences: Array<string | IPreferenceViewDesc>;
49
-
50
- component?: React.ComponentType<{ scope: PreferenceScope }>;
51
-
52
- hiddenInScope?: PreferenceScope[];
53
- }