@opensumi/ide-preferences 2.21.13 → 2.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/lib/browser/abstract-resource-preference-provider.d.ts +1 -0
  2. package/lib/browser/abstract-resource-preference-provider.d.ts.map +1 -1
  3. package/lib/browser/abstract-resource-preference-provider.js +22 -3
  4. package/lib/browser/abstract-resource-preference-provider.js.map +1 -1
  5. package/lib/browser/folder-file-preference-provider.d.ts +24 -0
  6. package/lib/browser/folder-file-preference-provider.d.ts.map +1 -0
  7. package/lib/browser/{folder-preference-provider.js → folder-file-preference-provider.js} +12 -14
  8. package/lib/browser/folder-file-preference-provider.js.map +1 -0
  9. package/lib/browser/folders-preferences-provider.d.ts +8 -8
  10. package/lib/browser/folders-preferences-provider.d.ts.map +1 -1
  11. package/lib/browser/folders-preferences-provider.js +7 -7
  12. package/lib/browser/folders-preferences-provider.js.map +1 -1
  13. package/lib/browser/index.d.ts.map +1 -1
  14. package/lib/browser/index.js +8 -8
  15. package/lib/browser/index.js.map +1 -1
  16. package/lib/browser/preference-contribution.d.ts.map +1 -1
  17. package/lib/browser/preference-contribution.js +3 -3
  18. package/lib/browser/preference-contribution.js.map +1 -1
  19. package/lib/browser/preference-settings.service.d.ts +22 -10
  20. package/lib/browser/preference-settings.service.d.ts.map +1 -1
  21. package/lib/browser/preference-settings.service.js +284 -101
  22. package/lib/browser/preference-settings.service.js.map +1 -1
  23. package/lib/browser/preference-widgets.js.map +1 -1
  24. package/lib/browser/preferenceItem.view.d.ts +4 -3
  25. package/lib/browser/preferenceItem.view.d.ts.map +1 -1
  26. package/lib/browser/preferenceItem.view.js +125 -62
  27. package/lib/browser/preferenceItem.view.js.map +1 -1
  28. package/lib/browser/preferences.module.less +100 -60
  29. package/lib/browser/preferences.view.d.ts +3 -17
  30. package/lib/browser/preferences.view.d.ts.map +1 -1
  31. package/lib/browser/preferences.view.js +194 -112
  32. package/lib/browser/preferences.view.js.map +1 -1
  33. package/lib/browser/user-preference-provider.js.map +1 -1
  34. package/lib/browser/userstorage/user-storage.contribution.js.map +1 -1
  35. package/lib/browser/userstorage/user-storage.service.js +7 -7
  36. package/lib/browser/userstorage/user-storage.service.js.map +1 -1
  37. package/lib/browser/workspace-file-preference-provider.d.ts +1 -1
  38. package/lib/browser/workspace-file-preference-provider.d.ts.map +1 -1
  39. package/lib/browser/workspace-file-preference-provider.js.map +1 -1
  40. package/lib/browser/workspace-preference-provider.js.map +1 -1
  41. package/lib/common/preference-id.d.ts +3 -0
  42. package/lib/common/preference-id.d.ts.map +1 -1
  43. package/lib/common/preference-id.js +4 -1
  44. package/lib/common/preference-id.js.map +1 -1
  45. package/lib/common/preference.d.ts +1 -0
  46. package/lib/common/preference.d.ts.map +1 -1
  47. package/lib/common/preference.js +26 -4
  48. package/lib/common/preference.js.map +1 -1
  49. package/lib/common/types.d.ts +18 -3
  50. package/lib/common/types.d.ts.map +1 -1
  51. package/lib/common/user-storage.d.ts +1 -1
  52. package/lib/common/user-storage.d.ts.map +1 -1
  53. package/package.json +12 -11
  54. package/src/browser/abstract-resource-preference-provider.ts +357 -0
  55. package/src/browser/folder-file-preference-provider.ts +56 -0
  56. package/src/browser/folders-preferences-provider.ts +262 -0
  57. package/src/browser/index.ts +125 -0
  58. package/src/browser/preference-contribution.ts +432 -0
  59. package/src/browser/preference-settings.service.ts +810 -0
  60. package/src/browser/preference-widgets.ts +368 -0
  61. package/src/browser/preferenceItem.view.tsx +787 -0
  62. package/src/browser/preferences.module.less +345 -0
  63. package/src/browser/preferences.view.tsx +388 -0
  64. package/src/browser/user-preference-provider.ts +18 -0
  65. package/src/browser/userstorage/index.ts +2 -0
  66. package/src/browser/userstorage/user-storage.contribution.ts +19 -0
  67. package/src/browser/userstorage/user-storage.service.ts +192 -0
  68. package/src/browser/workspace-file-preference-provider.ts +50 -0
  69. package/src/browser/workspace-preference-provider.ts +129 -0
  70. package/src/common/commands.ts +5 -0
  71. package/src/common/index.ts +4 -0
  72. package/src/common/preference-id.ts +11 -0
  73. package/src/common/preference.ts +51 -0
  74. package/src/common/types.ts +63 -0
  75. package/src/common/user-storage.ts +6 -0
  76. package/src/index.ts +1 -0
  77. package/lib/browser/folder-preference-provider.d.ts +0 -26
  78. package/lib/browser/folder-preference-provider.d.ts.map +0 -1
  79. package/lib/browser/folder-preference-provider.js.map +0 -1
  80. package/lib/browser/index.less +0 -36
@@ -0,0 +1,129 @@
1
+ import { Injectable, Autowired } from '@opensumi/di';
2
+ import { URI, DisposableCollection } from '@opensumi/ide-core-browser';
3
+ import { PreferenceScope, PreferenceProvider } from '@opensumi/ide-core-browser/lib/preferences';
4
+ import { IWorkspaceService } from '@opensumi/ide-workspace';
5
+
6
+ import { WorkspaceFilePreferenceProviderFactory } from './workspace-file-preference-provider';
7
+
8
+ @Injectable()
9
+ export class WorkspacePreferenceProvider extends PreferenceProvider {
10
+ public name: 'workspace';
11
+
12
+ @Autowired(IWorkspaceService)
13
+ protected readonly workspaceService: IWorkspaceService;
14
+
15
+ @Autowired(WorkspaceFilePreferenceProviderFactory)
16
+ protected readonly workspaceFileProviderFactory: WorkspaceFilePreferenceProviderFactory;
17
+
18
+ // 该实例仅在工作区模式下才需要实例化
19
+ @Autowired(PreferenceProvider, { tag: PreferenceScope.Folder })
20
+ protected readonly foldersPreferenceProvider: PreferenceProvider;
21
+
22
+ constructor() {
23
+ super();
24
+ this.init();
25
+ }
26
+
27
+ protected async init(): Promise<void> {
28
+ this._ready.resolve();
29
+ this.ensureDelegateUpToDate();
30
+ this.workspaceService.onWorkspaceLocationChanged(() => this.ensureDelegateUpToDate());
31
+ }
32
+
33
+ getConfigUri(resourceUri: string | undefined = this.ensureResourceUri()): URI | undefined {
34
+ const delegate = this.delegate;
35
+ return delegate && delegate.getConfigUri(resourceUri);
36
+ }
37
+
38
+ protected _delegate: PreferenceProvider | undefined;
39
+ protected get delegate(): PreferenceProvider | undefined {
40
+ if (!this._delegate) {
41
+ this.ensureDelegateUpToDate();
42
+ }
43
+ return this._delegate;
44
+ }
45
+
46
+ protected readonly toDisposeOnEnsureDelegateUpToDate = new DisposableCollection();
47
+ protected ensureDelegateUpToDate(): void {
48
+ const delegate = this.createDelegate();
49
+ if (this._delegate !== delegate) {
50
+ this.toDisposeOnEnsureDelegateUpToDate.dispose();
51
+ this.toDispose.push(this.toDisposeOnEnsureDelegateUpToDate);
52
+
53
+ this._delegate = delegate;
54
+
55
+ if (delegate) {
56
+ this.toDisposeOnEnsureDelegateUpToDate.pushAll([
57
+ delegate,
58
+ delegate.onDidPreferencesChanged((changes) => {
59
+ this.emitPreferencesChangedEvent(changes);
60
+ }),
61
+ ]);
62
+ }
63
+ }
64
+ }
65
+
66
+ protected createDelegate(): PreferenceProvider | undefined {
67
+ const workspace = this.workspaceService.workspace;
68
+ if (!workspace) {
69
+ return undefined;
70
+ }
71
+ // 如果不是在多工作区模式下,返回foldersPreferenceProvider
72
+ if (!this.workspaceService.isMultiRootWorkspaceOpened) {
73
+ return this.foldersPreferenceProvider;
74
+ }
75
+ // 工作区模式下需要额外读取一次工作区对应的配置文件内容进行配置合并
76
+ // PreferenceScope.Folder 为默认优先级最高的配置
77
+ return this.workspaceFileProviderFactory({
78
+ workspaceUri: new URI(workspace.uri),
79
+ });
80
+ }
81
+
82
+ doGet<T>(
83
+ preferenceName: string,
84
+ resourceUri: string | undefined = this.ensureResourceUri(),
85
+ language?: string,
86
+ ): T | undefined {
87
+ const delegate = this.delegate;
88
+ return delegate ? delegate.get<T>(preferenceName, resourceUri, language) : undefined;
89
+ }
90
+
91
+ doResolve<T>(
92
+ preferenceName: string,
93
+ resourceUri: string | undefined = this.ensureResourceUri(),
94
+ language?: string,
95
+ ): { value?: T; configUri?: URI } {
96
+ const delegate = this.delegate;
97
+ return delegate ? delegate.resolve<T>(preferenceName, resourceUri, language) : {};
98
+ }
99
+
100
+ getPreferences(resourceUri: string | undefined = this.ensureResourceUri(), language?: string) {
101
+ const delegate = this.delegate;
102
+ return delegate ? delegate.getPreferences(resourceUri, language) : undefined;
103
+ }
104
+
105
+ getLanguagePreferences(resourceUri: string | undefined = this.ensureResourceUri()) {
106
+ const delegate = this.delegate;
107
+ return delegate ? delegate.getLanguagePreferences(resourceUri) : undefined;
108
+ }
109
+
110
+ async doSetPreference(
111
+ preferenceName: string,
112
+ value: any,
113
+ resourceUri: string | undefined = this.ensureResourceUri(),
114
+ language?: string,
115
+ ): Promise<boolean> {
116
+ const delegate = this.delegate;
117
+ if (delegate) {
118
+ return delegate.setPreference(preferenceName, value, resourceUri, language);
119
+ }
120
+ return false;
121
+ }
122
+
123
+ protected ensureResourceUri(): string | undefined {
124
+ if (this.workspaceService.workspace && !this.workspaceService.isMultiRootWorkspaceOpened) {
125
+ return this.workspaceService.workspace.uri;
126
+ }
127
+ return undefined;
128
+ }
129
+ }
@@ -0,0 +1,5 @@
1
+ import { Command } from '@opensumi/ide-core-browser';
2
+
3
+ export const SettingJSONGlyphMarginEdit: Command = {
4
+ id: 'preference.setting.glyphMargin.edit',
5
+ };
@@ -0,0 +1,4 @@
1
+ export * from './preference';
2
+ export * from './user-storage';
3
+ export * from './preference-id';
4
+ export * from './types';
@@ -0,0 +1,11 @@
1
+ export enum PreferenceSettingId {
2
+ General = 'general',
3
+ Editor = 'editor',
4
+ Terminal = 'terminal',
5
+ Feature = 'feature',
6
+ View = 'view',
7
+ }
8
+
9
+ export const knownPrefIdMappings = {
10
+ 'workbench.editor.enablePreview': 'editor.previewMode',
11
+ };
@@ -0,0 +1,51 @@
1
+ import { IPreferenceViewDesc, localize } from '@opensumi/ide-core-browser';
2
+
3
+ export const PREF_SCHEME = 'pref';
4
+
5
+ export const knownTermMappings = new Map<string, string>();
6
+ knownTermMappings.set('power shell', 'PowerShell');
7
+ knownTermMappings.set('powershell', 'PowerShell');
8
+ knownTermMappings.set('javascript', 'JavaScript');
9
+ knownTermMappings.set('typescript', 'TypeScript');
10
+
11
+ ['css', 'html', 'scss', 'less', 'json', 'js', 'ts', 'ie', 'id', 'php', 'scm', 'npm'].forEach((v) => {
12
+ knownTermMappings.set(v, v.toUpperCase());
13
+ });
14
+
15
+ function transformFirstTerm(term: string): string {
16
+ const termLowerCase = term.toLowerCase();
17
+ if (knownTermMappings.has(termLowerCase)) {
18
+ return knownTermMappings.get(termLowerCase)!;
19
+ }
20
+ return toNormalCase(term);
21
+ }
22
+
23
+ export function toPreferenceReadableName(name: string) {
24
+ const parts = name.split('.');
25
+ let result = transformFirstTerm(parts[0]);
26
+ if (parts[1]) {
27
+ result += ' > ' + toNormalCase(parts[1]);
28
+ }
29
+ if (parts[2]) {
30
+ result += ' : ' + toNormalCase(parts[2]);
31
+ }
32
+ if (parts.slice(3).length > 0) {
33
+ result += '. ' + parts.slice(3).join(' ');
34
+ }
35
+ return result;
36
+ }
37
+
38
+ export function getPreferenceItemLabel(pref: IPreferenceViewDesc) {
39
+ let localized: string | undefined;
40
+ if (pref.localized) {
41
+ localized = localize(pref.localized);
42
+ }
43
+ if (!localized) {
44
+ localized = toPreferenceReadableName(pref.id);
45
+ }
46
+ return localized;
47
+ }
48
+
49
+ export function toNormalCase(str: string) {
50
+ return str.substr(0, 1).toUpperCase() + str.substr(1).replace(/([^A-Z])([A-Z])/g, '$1 $2');
51
+ }
@@ -0,0 +1,63 @@
1
+ import {
2
+ ISettingGroup,
3
+ ISettingSection,
4
+ IDisposable,
5
+ PreferenceScope,
6
+ IResolvedPreferenceViewDesc,
7
+ } from '@opensumi/ide-core-browser';
8
+
9
+ export const SettingContribution = Symbol('SettingContribution');
10
+
11
+ export interface SettingContribution {
12
+ /**
13
+ * 注册 Setting
14
+ * @param registry
15
+ */
16
+ registerSetting?(registry: {
17
+ registerSettingGroup: (settingGroup: ISettingGroup) => IDisposable;
18
+ registerSettingSection: (key: string, section: ISettingSection) => IDisposable;
19
+ }): void;
20
+
21
+ /**
22
+ * 最后处理一次 SettingGroup
23
+ * @params settingGroup
24
+ */
25
+ handleSettingGroup?(settingGroup: ISettingGroup[]): ISettingGroup[];
26
+
27
+ /**
28
+ * 最后处理一次 settingSections
29
+ * @params settingSections
30
+ */
31
+ handleSettingSections?(settingSections: { [key: string]: ISettingSection[] }): { [key: string]: ISettingSection[] };
32
+ }
33
+
34
+ export interface IPreferenceTask {
35
+ path: string[];
36
+ key: string;
37
+ value: string;
38
+ }
39
+
40
+ export interface ISectionItemData {
41
+ /**
42
+ * 有两种:
43
+ * - section:${sectionTitle}
44
+ * - group:${groupId}
45
+ */
46
+ id?: string;
47
+ scope: PreferenceScope;
48
+
49
+ title?: string;
50
+ component?: any;
51
+ preference?: IResolvedPreferenceViewDesc;
52
+
53
+ /**
54
+ * 该 item 在左侧文件树的路径信息
55
+ */
56
+ _path?: string;
57
+ }
58
+
59
+ export const enum ESectionItemKind {
60
+ Section = 'section:',
61
+ Group = 'group:',
62
+ Preference = 'preference:',
63
+ }
@@ -0,0 +1,6 @@
1
+ import { FileSystemProvider } from '@opensumi/ide-core-browser';
2
+
3
+ export const IUserStorageService = Symbol('IUserStorageService');
4
+
5
+ // tslint:disable-next-line: no-empty-interface
6
+ export type IUserStorageService = FileSystemProvider;
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './common';
@@ -1,26 +0,0 @@
1
- import { URI, PreferenceScope } from '@opensumi/ide-core-browser';
2
- import { FileStat } from '@opensumi/ide-file-service';
3
- import { IWorkspaceService } from '@opensumi/ide-workspace/lib/common';
4
- import { AbstractResourcePreferenceProvider } from './abstract-resource-preference-provider';
5
- export declare const FolderPreferenceProviderFactory: unique symbol;
6
- export declare type FolderPreferenceProviderFactory = (options: FolderPreferenceProviderOptions) => FolderPreferenceProvider;
7
- export declare const FolderPreferenceProviderOptions: unique symbol;
8
- export interface FolderPreferenceProviderOptions {
9
- readonly folder: FileStat;
10
- readonly configUri: URI;
11
- }
12
- /**
13
- * 这玩意应该叫 FolderFilePreferenceProvider, 它代表的是一个文件夹下的 “一个” 文件读出来的配置项
14
- * 但是一个文件夹的配置文件夹比如 .sumi 内可以存在多个这样的文件, 比如 settings.json, launch.json
15
- * 他们的结果会合并并且放入各自的section中。
16
- */
17
- export declare class FolderPreferenceProvider extends AbstractResourcePreferenceProvider {
18
- protected readonly options: FolderPreferenceProviderOptions;
19
- protected readonly workspaceService: IWorkspaceService;
20
- private _folderUri;
21
- get folderUri(): URI;
22
- getUri(): URI;
23
- protected getScope(): PreferenceScope;
24
- getDomain(): string[];
25
- }
26
- //# sourceMappingURL=folder-preference-provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"folder-preference-provider.d.ts","sourceRoot":"","sources":["../../src/browser/folder-preference-provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,EAAE,kCAAkC,EAAE,MAAM,yCAAyC,CAAC;AAE7F,eAAO,MAAM,+BAA+B,eAA4C,CAAC;AACzF,oBAAY,+BAA+B,GAAG,CAAC,OAAO,EAAE,+BAA+B,KAAK,wBAAwB,CAAC;AAErH,eAAO,MAAM,+BAA+B,eAA4C,CAAC;AACzF,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC;CACzB;AAED;;;;GAIG;AACH,qBACa,wBAAyB,SAAQ,kCAAkC;IAG9E,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,+BAA+B,CAAC;IAG5D,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;IAEvD,OAAO,CAAC,UAAU,CAAM;IAExB,IAAI,SAAS,IAAI,GAAG,CAKnB;IAEM,MAAM,IAAI,GAAG;IAIpB,SAAS,CAAC,QAAQ,IAAI,eAAe;IAQrC,SAAS,IAAI,MAAM,EAAE;CAGtB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"folder-preference-provider.js","sourceRoot":"","sources":["../../src/browser/folder-preference-provider.ts"],"names":[],"mappings":";;;;AAAA,qCAAqD;AACrD,iEAAkE;AAElE,+DAAuE;AAEvE,mGAA6F;AAEhF,QAAA,+BAA+B,GAAG,MAAM,CAAC,iCAAiC,CAAC,CAAC;AAG5E,QAAA,+BAA+B,GAAG,MAAM,CAAC,iCAAiC,CAAC,CAAC;AAMzF;;;;GAIG;AAEH,IAAa,wBAAwB,GAArC,MAAa,wBAAyB,SAAQ,0EAAkC;IAU9E,IAAI,SAAS;QACX,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,sBAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SACpD;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IAChC,CAAC;IAES,QAAQ;QAChB,gDAAgD;QAChD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,EAAE;YACrD,OAAO,kCAAe,CAAC,SAAS,CAAC;SAClC;QACD,OAAO,kCAAe,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,SAAS;QACP,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,CAAC;CACF,CAAA;AA7BC;IADC,IAAA,cAAS,EAAC,uCAA+B,CAAC;;yDACiB;AAG5D;IADC,IAAA,cAAS,EAAC,0BAAiB,CAAC;;kEAC0B;AAN5C,wBAAwB;IADpC,IAAA,eAAU,GAAE;GACA,wBAAwB,CAgCpC;AAhCY,4DAAwB"}
@@ -1,36 +0,0 @@
1
- .preference-view {
2
- margin: 40;
3
- height: 100%;
4
- color: #ccc;
5
- .scope-select {
6
- position: fixed;
7
- right: 100px;
8
- }
9
- .preference-line {
10
- margin: 40px;
11
- }
12
- .key {
13
- font-weight: bold;
14
- }
15
- .control-wrap {
16
- color: #fff;
17
- select,
18
- input {
19
- border: none;
20
- background: #333;
21
- padding: 3px 5px;
22
- }
23
- }
24
- .desc {
25
- }
26
- .text-control {
27
- max-width: 500px;
28
- width: 100%;
29
- }
30
- .select-control {
31
- width: 300px;
32
- }
33
- .number-control {
34
- width: 300px;
35
- }
36
- }